def test_init_on_existing_project_with_datasource_with_no_suite_create_one( mock_webbrowser, caplog, initialized_sqlite_project, ): project_dir = initialized_sqlite_project ge_dir = os.path.join(project_dir, DataContext.GE_DIR) uncommitted_dir = os.path.join(ge_dir, "uncommitted") # mangle the setup to remove all traces of any suite expectations_dir = os.path.join(ge_dir, "expectations") data_docs_dir = os.path.join(uncommitted_dir, "data_docs") validations_dir = os.path.join(uncommitted_dir, "validations") _delete_and_recreate_dir(expectations_dir) _delete_and_recreate_dir(data_docs_dir) _delete_and_recreate_dir(validations_dir) context = DataContext(ge_dir) assert context.list_expectation_suites() == [] runner = CliRunner(mix_stderr=False) with pytest.warns( UserWarning, match="Warning. An existing `great_expectations.yml` was found" ): result = runner.invoke( cli, ["init", "-d", project_dir], input="1\nsink_me\n\n\n".format( os.path.join(project_dir, "data/Titanic.csv") ), catch_exceptions=False, ) stdout = result.stdout assert result.exit_code == 0 assert mock_webbrowser.call_count == 1 assert ( "{}/great_expectations/uncommitted/data_docs/local_site/validations/sink_me/".format( project_dir ) in mock_webbrowser.call_args[0][0] ) assert "Always know what to expect from your data" in stdout assert "Which table would you like to use?" in stdout assert "Generating example Expectation Suite..." in stdout assert "The following Data Docs sites were built" in stdout assert "Great Expectations is now set up" in stdout assert "A new Expectation suite 'sink_me' was added to your project" in stdout assert "Error: invalid input" not in stdout assert "This looks like an existing project that" not in stdout assert_no_logging_messages_or_tracebacks(caplog, result) context = DataContext(ge_dir) assert len(context.list_expectation_suites()) == 1
def test_init_on_existing_project_with_datasource_with_no_suite_create_one( mock_webbrowser, caplog, monkeypatch, initialized_sqlite_project, sa): project_dir = initialized_sqlite_project ge_dir = os.path.join(project_dir, DataContext.GE_DIR) uncommitted_dir = os.path.join(ge_dir, "uncommitted") # mangle the setup to remove all traces of any suite expectations_dir = os.path.join(ge_dir, "expectations") data_docs_dir = os.path.join(uncommitted_dir, "data_docs") validations_dir = os.path.join(uncommitted_dir, "validations") _delete_and_recreate_dir(expectations_dir) _delete_and_recreate_dir(data_docs_dir) _delete_and_recreate_dir(validations_dir) context = DataContext(ge_dir) # get the datasource from data context all_datasources = context.list_datasources() datasource = all_datasources[0] if all_datasources else None # create a sqlalchemy engine using the URL of existing datasource engine = sa.create_engine(datasource.get("credentials", dict()).get("url")) inspector = sa.inspect(engine) # get the default schema and table for testing schemas = inspector.get_schema_names() default_schema = schemas[0] tables = [ table_name for table_name in inspector.get_table_names(schema=default_schema) ] default_table = tables[0] assert context.list_expectation_suites() == [] runner = CliRunner(mix_stderr=False) monkeypatch.chdir(project_dir) with pytest.warns( UserWarning, match="Warning. An existing `great_expectations.yml` was found"): result = runner.invoke( cli, ["--v3-api", "init"], input="\n1\n{schema}\n{table}\nsink_me\n\n\n\n".format( os.path.join(project_dir, "data/Titanic.csv"), schema=default_schema, table=default_table, ), catch_exceptions=False, ) stdout = result.stdout assert result.exit_code == 0 assert mock_webbrowser.call_count == 1 assert ( "{}/great_expectations/uncommitted/data_docs/local_site/validations/sink_me/" .format(project_dir) in mock_webbrowser.call_args[0][0]) assert "Always know what to expect from your data" in stdout assert ( "You have selected a datasource that is a SQL database. How would you like to specify the data?" in stdout) assert "Generating example Expectation Suite..." in stdout assert "The following Data Docs sites will be built" in stdout assert "Great Expectations is now set up" in stdout assert "Error: invalid input" not in stdout assert "This looks like an existing project that" not in stdout assert_no_logging_messages_or_tracebacks(caplog, result) context = DataContext(ge_dir) assert len(context.list_expectation_suites()) == 1