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  }