def assert_rule_fail_in_sql(code, sql, configs=None, line_numbers=None): """Assert that a given rule does fail on the given sql.""" # Set up the config to only use the rule we are testing. cfg = FluffConfig(configs=configs, overrides={"rules": code}) # Lint it using the current config (while in fix mode) linted = Linter(config=cfg).lint_string(sql, fix=True) lerrs = linted.get_violations() print(f"Errors Found: {lerrs}") for e in lerrs: if e.desc().startswith("Unexpected exception"): pytest.fail(f"Linter failed with {e.desc()}") parse_errors = list(filter(lambda v: type(v) == SQLParseError, lerrs)) if parse_errors: pytest.fail(f"Found the following parse errors in test case: {parse_errors}") if not any(v.rule.code == code for v in lerrs): pytest.fail( f"No {code} failures found in query which should fail.", pytrace=False, ) if line_numbers: actual_line_numbers = [e.line_no for e in lerrs] if line_numbers != actual_line_numbers: pytest.fail( "Expected errors on lines {}, but got errors on lines {}".format( line_numbers, actual_line_numbers ) ) # The query should already have been fixed if possible so just return the raw. return linted.tree.raw
def assert_rule_fail_in_sql(code, sql, configs=None): """Assert that a given rule does fail on the given sql.""" # Set up the config to only use the rule we are testing. cfg = FluffConfig(configs=configs, overrides={"rules": code}) # Lint it using the current config (while in fix mode) linted = Linter(config=cfg).lint_string(sql, fix=True) lerrs = linted.get_violations() print("Errors Found: {0}".format(lerrs)) if not any(v.rule.code == code for v in lerrs): pytest.fail( "No {0} failures found in query which should fail.".format(code), pytrace=False, ) # The query should already have been fixed if possible so just return the raw. return linted.tree.raw
def assert_rule_fail_in_sql(code, sql, configs=None, line_numbers=None): """Assert that a given rule does fail on the given sql.""" print("# Asserting Rule Fail in SQL") # Set up the config to only use the rule we are testing. overrides = {"rules": code} if configs is None or "core" not in configs or "dialect" not in configs[ "core"]: overrides["dialect"] = "ansi" cfg = FluffConfig(configs=configs, overrides=overrides) # Lint it using the current config (while in fix mode) linted = Linter(config=cfg).lint_string(sql, fix=True) lerrs = linted.get_violations() print("Errors Found:") for e in lerrs: print(" " + repr(e)) if e.desc().startswith("Unexpected exception"): pytest.fail(f"Linter failed with {e.desc()}") # pragma: no cover parse_errors = list( filter(lambda v: isinstance(v, (SQLParseError, SQLTemplaterError)), lerrs)) if parse_errors: pytest.fail( f"Found the following parse errors in test case: {parse_errors}") if not any(v.rule.code == code for v in lerrs): print(f"Parsed File:\n{linted.tree.stringify()}") pytest.fail( f"No {code} failures found in query which should fail.", pytrace=False, ) if line_numbers: actual_line_numbers = [e.line_no for e in lerrs] if line_numbers != actual_line_numbers: # pragma: no cover pytest.fail( "Expected errors on lines {}, but got errors on lines {}". format(line_numbers, actual_line_numbers)) fixed, _ = linted.fix_string() return fixed, linted.violations