def test_all_short_args_precedence(): """ All arguments should be overridden by their argv counterparts (using short options!) :return: """ args = create_parser().parse_args([ "-i", "input.sql", "-s", "strategyfile.yml", "-o", "output.sql", "-t", "ARG_DB_TYPE", "-d", "ARG_DB_HOST", "-n", "ARG_DB_NAME", "-u", "ARG_DB_USER", "-p", "ARG_DB_PASSWORD", "-l", "ARG_FAKE_LOCALE" ]) assert args.input == "input.sql" assert args.strategyfile == "strategyfile.yml" assert args.output == "output.sql" assert args.db_type == "ARG_DB_TYPE" assert args.db_name == "ARG_DB_NAME" assert args.db_host == "ARG_DB_HOST" assert args.db_user == "ARG_DB_USER" assert args.db_password == "ARG_DB_PASSWORD" assert args.fake_locale == "ARG_FAKE_LOCALE" assert args.verbose is False
def test_all_args_precedence(): """ All arguments should be overridden by their argv counterparts :return: """ args = create_parser().parse_args([ "--input", "input.sql", "--strategy", "strategyfile.yml", "--output", "output.sql", "--db-type", "ARG_DB_TYPE", "--db-host", "ARG_DB_HOST", "--db-name", "ARG_DB_NAME", "--db-user", "ARG_DB_USER", "--db-password", "ARG_DB_PASSWORD", "--fake-locale", "ARG_FAKE_LOCALE", "--start-at", "START", "--skip-steps", "ANONYMIZE_DB", "--stop-at", "END", "--verbose" ]) assert args.input == "input.sql" assert args.strategyfile == "strategyfile.yml" assert args.output == "output.sql" assert args.db_type == "ARG_DB_TYPE" assert args.db_name == "ARG_DB_NAME" assert args.db_host == "ARG_DB_HOST" assert args.db_user == "ARG_DB_USER" assert args.db_password == "ARG_DB_PASSWORD" assert args.fake_locale == "ARG_FAKE_LOCALE" assert args.start_at_step == "START" assert args.skip_steps == ["ANONYMIZE_DB"] assert args.stop_at_step == "END" assert args.verbose is True
def test_when_old_and_new_env_is_specified__should_use_new_environmental_vars( ): """ When not specified, arguments should fall back to NEW environmental defaults (PYNONYMIZER_*) old envs should take the lowest precedence and be ignored :return: """ args = create_parser().parse_args([]) assert args.input == "ENV_PYNONYMIZER_INPUT" assert args.strategyfile == "ENV_PYNONYMIZER_STRATEGY" assert args.output == "ENV_PYNONYMIZER_OUTPUT" assert args.db_type == "ENV_PYNONYMIZER_DB_TYPE" assert args.db_name == "ENV_PYNONYMIZER_DB_NAME" assert args.db_host == "ENV_PYNONYMIZER_DB_HOST" assert args.db_user == "ENV_PYNONYMIZER_DB_USER" assert args.db_password == "ENV_PYNONYMIZER_DB_PASSWORD" assert args.fake_locale == "ENV_PYNONYMIZER_FAKE_LOCALE" assert args.seed_rows == 50 assert args.start_at_step == "ENV_PYNONYMIZER_START_AT" assert args.skip_steps == ["ENV_PYNONYMIZER_SKIP_STEPS"] assert args.stop_at_step == "ENV_PYNONYMIZER_STOP_AT" # Not a fair test because store_true ? assert args.mssql_backup_compression == True assert args.mysql_cmd_opts == "ENV_PYNONYMIZER_MYSQL_CMD_OPTS" assert args.mysql_dump_opts == "ENV_PYNONYMIZER_MYSQL_DUMP_OPTS" assert args.postgres_cmd_opts == "ENV_PYNONYMIZER_POSTGRES_CMD_OPTS" assert args.postgres_dump_opts == "ENV_PYNONYMIZER_POSTGRES_DUMP_OPTS"
def test_when_long_args_are_specified_and_new_env__should_use_args_first(): """ All ENV should be overridden by their argv counterparts :return: """ args = create_parser().parse_args([ "--input", "input.sql", "--strategy", "strategyfile.yml", "--output", "output.sql", "--db-type", "ARG_DB_TYPE", "--db-host", "ARG_DB_HOST", "--db-name", "ARG_DB_NAME", "--db-user", "ARG_DB_USER", "--db-password", "ARG_DB_PASSWORD", "--seed-rows", "2341", "--fake-locale", "ARG_FAKE_LOCALE", "--start-at", "START", "--skip-steps", "ANONYMIZE_DB", "--stop-at", "END", "--verbose", "--mssql-backup-compression", "--mysql-cmd-opts=\"ARG_MYSQL_CMD_OPTS\"", "--mysql-dump-opts=\"ARG_MYSQL_DUMP_OPTS\"", "--postgres-cmd-opts=\"ARG_POSTGRES_CMD_OPTS\"", "--postgres-dump-opts=\"ARG_POSTGRES_DUMP_OPTS\"", ]) assert args.input == "input.sql" assert args.strategyfile == "strategyfile.yml" assert args.output == "output.sql" assert args.db_type == "ARG_DB_TYPE" assert args.db_name == "ARG_DB_NAME" assert args.db_host == "ARG_DB_HOST" assert args.db_user == "ARG_DB_USER" assert args.db_password == "ARG_DB_PASSWORD" assert args.fake_locale == "ARG_FAKE_LOCALE" assert args.start_at_step == "START" assert args.skip_steps == ["ANONYMIZE_DB"] assert args.stop_at_step == "END" assert args.verbose is True assert args.seed_rows == 2341 assert args.mssql_backup_compression is True assert args.mysql_cmd_opts == "\"ARG_MYSQL_CMD_OPTS\"" assert args.mysql_dump_opts == "\"ARG_MYSQL_DUMP_OPTS\"" assert args.postgres_cmd_opts == "\"ARG_POSTGRES_CMD_OPTS\"" assert args.postgres_dump_opts == "\"ARG_POSTGRES_DUMP_OPTS\""
def test_legacy_positional_args(): """ When called with the positional args, argparse should return a working namespace with the correct values set :return: """ args = create_parser().parse_args(["input.sql", "strategyfile.yml", "output.sql"]) assert args.legacy_input == "input.sql" assert args.legacy_strategyfile == "strategyfile.yml" assert args.legacy_output == "output.sql"
def test_old_environmental_defaults(): """ When not specified, arguments should fall back to OLD env vars (if specified) :return: """ # Use positionals, since the old vars dont cover these args = create_parser().parse_args(["input.sql", "strategyfile.yml", "output.sql"]) assert args.legacy_input == "input.sql" assert args.legacy_strategyfile == "strategyfile.yml" assert args.legacy_output == "output.sql" assert args.db_type == "OLDENV_DB_TYPE" assert args.db_name == "OLDENV_DB_NAME" assert args.db_host == "OLDENV_DB_HOST" assert args.db_user == "OLDENV_DB_USER" assert args.db_password == "OLDENV_DB_PASSWORD" assert args.fake_locale == "OLDENV_FAKE_LOCALE"
def test_all_legacy_new_mutex(): """ legacy posisitonals and new options should result in an error if specified together """ with pytest.raises(SystemExit) as e_info: create_parser().parse_args(["input.sql", "strategyfile.yml", "output.sql", "--input", "input2.sql"]) with pytest.raises(SystemExit) as e_info: create_parser().parse_args(["input.sql", "strategyfile.yml", "output.sql", "--strategy", "strategyfile2.yml"]) with pytest.raises(SystemExit) as e_info: create_parser().parse_args(["input.sql", "strategyfile.yml", "output.sql", "--output", "output2.sql"])
def test_environmental_defaults(): """ When not specified, arguments should fall back to NEW environmental defaults (PYNONYMIZER_*) old envs should take the lowest precedence and be ignored :return: """ args = create_parser().parse_args([]) assert args.input == "ENV_INPUT" assert args.strategyfile == "ENV_STRATEGY" assert args.output == "ENV_OUTPUT" assert args.db_type == "ENV_DB_TYPE" assert args.db_name == "ENV_DB_NAME" assert args.db_host == "ENV_DB_HOST" assert args.db_user == "ENV_DB_USER" assert args.db_password == "ENV_DB_PASSWORD" assert args.fake_locale == "ENV_FAKE_LOCALE" assert args.start_at_step == "ANONYMIZE_DB" assert args.skip_steps == ["ANONYMIZE_DB", "DUMP_DB"] assert args.stop_at_step == "ANONYMIZE_DB"