github.com/myhau/pulumi/pkg/v3@v3.70.2-0.20221116134521-f2775972e587/codegen/python/gen_program_test.go (about) 1 package python 2 3 import ( 4 "testing" 5 6 "github.com/pulumi/pulumi/pkg/v3/codegen/hcl2/model" 7 "github.com/pulumi/pulumi/pkg/v3/codegen/pcl" 8 "github.com/pulumi/pulumi/sdk/v3/go/common/util/contract" 9 "github.com/stretchr/testify/assert" 10 11 "github.com/pulumi/pulumi/pkg/v3/codegen/testing/test" 12 ) 13 14 func TestFunctionInvokeBindsArgumentObjectType(t *testing.T) { 15 t.Parallel() 16 17 const source = `zones = invoke("aws:index:getAvailabilityZones", {})` 18 19 program, diags := parseAndBindProgram(t, source, "bind_func_invoke_args.pp") 20 contract.Ignore(diags) 21 22 g, err := newGenerator(program) 23 assert.NoError(t, err) 24 25 for _, n := range g.program.Nodes { 26 if zones, ok := n.(*pcl.LocalVariable); ok && zones.Name() == "zones" { 27 value := zones.Definition.Value 28 funcCall, ok := value.(*model.FunctionCallExpression) 29 assert.True(t, ok, "value of local variable is a function call") 30 assert.Equal(t, "invoke", funcCall.Name) 31 argsObject, ok := funcCall.Args[1].(*model.ObjectConsExpression) 32 assert.True(t, ok, "second argument is an object expression") 33 argsObjectType, ok := argsObject.Type().(*model.ObjectType) 34 assert.True(t, ok, "args object has an object type") 35 assert.NotEmptyf(t, argsObjectType.Annotations, "Object type should be annotated with a schema type") 36 break 37 } 38 } 39 } 40 41 func TestGenerateProgramVersionSelection(t *testing.T) { 42 t.Parallel() 43 44 expectedVersion := map[string]test.PkgVersionInfo{ 45 "aws-resource-options-4.3.8": { 46 Pkg: "pulumi-aws", 47 OpAndVersion: "==4.26.0", 48 }, 49 "aws-resource-options-5.16.2": { 50 Pkg: "pulumi-aws", 51 OpAndVersion: "==5.16.2", 52 }, 53 } 54 55 test.TestProgramCodegen(t, 56 test.ProgramCodegenOptions{ 57 Language: "python", 58 Extension: "py", 59 OutputFile: "__main__.py", 60 Check: Check, 61 GenProgram: GenerateProgram, 62 TestCases: []test.ProgramTest{ 63 { 64 Directory: "aws-resource-options-4.26", 65 Description: "Resource Options", 66 }, 67 { 68 Directory: "aws-resource-options-5.16.2", 69 Description: "Resource Options", 70 }, 71 }, 72 73 IsGenProject: true, 74 GenProject: GenerateProject, 75 ExpectedVersion: expectedVersion, 76 DependencyFile: "requirements.txt", 77 }, 78 ) 79 }