def test_convert_runway_version(self) -> None: """Test _convert_runway_version.""" assert RunwayConfigDefinitionModel( # handle string runway_version=">1.11.0").runway_version == SpecifierSet( ">1.11.0", prereleases=True) assert RunwayConfigDefinitionModel( # handle exact version runway_version="1.11.0").runway_version == SpecifierSet( "==1.11.0", prereleases=True) assert RunwayConfigDefinitionModel( # handle SpecifierSet runway_version=SpecifierSet( ">1.11.0")).runway_version == SpecifierSet(">1.11.0", prereleases=True) assert RunwayConfigDefinitionModel( # handle SpecifierSet runway_version=SpecifierSet( ">1.11.0", prereleases=True)).runway_version == SpecifierSet( ">1.11.0", prereleases=True)
def test_extra(self) -> None: """Test extra fields.""" with pytest.raises(ValidationError) as excinfo: RunwayConfigDefinitionModel(invalid="something") errors = excinfo.value.errors() assert len(errors) == 1 assert errors[0]["loc"] == ("invalid", ) assert errors[0]["msg"] == "extra fields not permitted"
def test_field_defaults(self) -> None: """Test filed default values.""" obj = RunwayConfigDefinitionModel() assert obj.deployments == [] assert isinstance(obj.future, RunwayFutureDefinitionModel) assert not obj.ignore_git_branch assert obj.runway_version == SpecifierSet(">1.10", prereleases=True) assert obj.tests == [] assert isinstance(obj.variables, RunwayVariablesDefinitionModel)
def test_schema_runway_output(cd_tmp_path: Path) -> None: """Test ``runway schema runway --output runway-schema.json``.""" file_path = cd_tmp_path / "runway-schema.json" result = CliRunner().invoke(cli, ["schema", "runway", "--output", file_path.name]) assert result.exit_code == 0 assert str(file_path) in result.output assert file_path.is_file() assert ( file_path.read_text() == RunwayConfigDefinitionModel.schema_json(indent=4) + "\n" )
def test_parse_file(self, tmp_path: Path) -> None: """Test parse_file.""" data = { "deployments": [ { "name": "test-name", "modules": ["sampleapp.cfn"], "regions": ["us-east-1"], }, ] } runway_yml = tmp_path / "runway.yml" runway_yml.write_text(yaml.dump(data)) obj = RunwayConfigDefinitionModel.parse_file(runway_yml) assert obj.deployments[0].modules[0].name == "sampleapp.cfn"
def build_schema(cfngin: bool, runway: bool) -> None: """Build vscode-runway schemas. By default, both schemas are built. """ if not runway: click.secho("building CFNgin schema...", fg="yellow") CFNGIN_SCHEMA.write_text( CfnginConfigDefinitionModel.schema_json(indent=4)) click.secho(f"successfully output CFNgin schema to {CFNGIN_SCHEMA}", fg="green") if not cfngin: click.secho("building Runway schema...", fg="yellow") RUNWAY_SCHEMA.write_text( RunwayConfigDefinitionModel.schema_json(indent=4)) click.secho(f"successfully output Runway schema to {CFNGIN_SCHEMA}", fg="green")
def test_add_deployment_names(self) -> None: """Test _add_deployment_names.""" data = { "deployments": [ { "modules": ["sampleapp.cfn"], "regions": ["us-east-1"] }, { "name": "test-name", "modules": ["sampleapp.cfn"], "regions": ["us-west-2"], }, ] } obj = RunwayConfigDefinitionModel.parse_obj(data) # this also adds coverage for __getitem__ assert obj["deployments"][0]["name"] == "deployment_1" assert obj["deployments"][1]["name"] == "test-name"
def test_schema_runway_indent() -> None: """Test ``runway schema runway --indent 2``.""" result = CliRunner().invoke(cli, ["schema", "runway", "--indent", "2"]) assert result.exit_code == 0 assert result.output == RunwayConfigDefinitionModel.schema_json(indent=2) + "\n"
def test_convert_runway_version_invalid(self) -> None: """Test _convert_runway_version invalid specifier set.""" with pytest.raises(ValidationError) as excinfo: RunwayConfigDefinitionModel(runway_version="=latest") assert (excinfo.value.errors()[0]["msg"] == "=latest is not a valid version specifier set")