angryjet: add tests for xpv2 interface methods

Signed-off-by: Erhan Cagirici <erhan@upbound.io>
This commit is contained in:
Erhan Cagirici 2025-07-18 14:01:26 +03:00
parent c62c0d527c
commit a45b0eb409
2 changed files with 319 additions and 0 deletions

View File

@ -446,3 +446,71 @@ func (t *Type) GetItems() []resource.ProviderConfigUsage {
t.Errorf("NewProviderConfigUsageGetItems(): -want, +got\n%s", diff)
}
}
func TestNewSetTypedProviderConfigReference(t *testing.T) {
want := `package pkg
import runtime "example.org/runtime"
// SetProviderConfigReference of this Type.
func (t *Type) SetProviderConfigReference(r *runtime.ProviderConfigReference) {
t.Spec.ProviderConfigReference = r
}
`
f := jen.NewFilePath("pkg")
NewSetTypedProviderConfigReference("t", "example.org/runtime")(f, MockObject{Named: "Type"})
if diff := cmp.Diff(want, fmt.Sprintf("%#v", f)); diff != "" {
t.Errorf("NewSetProviderConfigReference(): -want, +got\n%s", diff)
}
}
func TestNewGetTypedProviderConfigReference(t *testing.T) {
want := `package pkg
import runtime "example.org/runtime"
// GetProviderConfigReference of this Type.
func (t *Type) GetProviderConfigReference() *runtime.ProviderConfigReference {
return t.Spec.ProviderConfigReference
}
`
f := jen.NewFilePath("pkg")
NewGetTypedProviderConfigReference("t", "example.org/runtime")(f, MockObject{Named: "Type"})
if diff := cmp.Diff(want, fmt.Sprintf("%#v", f)); diff != "" {
t.Errorf("NewGetProviderConfigReference(): -want, +got\n%s", diff)
}
}
func TestNewSetRootProviderConfigTypedReference(t *testing.T) {
want := `package pkg
import runtime "example.org/runtime"
// SetProviderConfigReference of this Type.
func (t *Type) SetProviderConfigReference(r runtime.ProviderConfigReference) {
t.ProviderConfigReference = r
}
`
f := jen.NewFilePath("pkg")
NewSetRootProviderConfigTypedReference("t", "example.org/runtime")(f, MockObject{Named: "Type"})
if diff := cmp.Diff(want, fmt.Sprintf("%#v", f)); diff != "" {
t.Errorf("NewSetRootProviderConfigReference(): -want, +got\n%s", diff)
}
}
func TestNewGetRootProviderConfigTypedReference(t *testing.T) {
want := `package pkg
import runtime "example.org/runtime"
// GetProviderConfigReference of this Type.
func (t *Type) GetProviderConfigReference() runtime.ProviderConfigReference {
return t.ProviderConfigReference
}
`
f := jen.NewFilePath("pkg")
NewGetRootProviderConfigTypedReference("t", "example.org/runtime")(f, MockObject{Named: "Type"})
if diff := cmp.Diff(want, fmt.Sprintf("%#v", f)); diff != "" {
t.Errorf("NewGetRootProviderConfigReference(): -want, +got\n%s", diff)
}
}

View File

@ -333,6 +333,237 @@ func (mg *Model) ResolveReferences(ctx context.Context, c client.Reader) error {
return nil
}
`
generatedNamespaced = `package v1alpha1
import (
"context"
client "example.org/client"
reference "example.org/reference"
v1beta11 "github.com/crossplane/provider-aws/apis/ec2/v1beta1"
v1beta1 "github.com/crossplane/provider-aws/apis/identity/v1beta1"
errors "github.com/pkg/errors"
)
// ResolveReferences of this Model.
func (mg *Model) ResolveReferences(ctx context.Context, c client.Reader) error {
r := reference.NewAPINamespacedResolver(c, mg)
var rsp reference.NamespacedResolutionResponse
var mrsp reference.MultiNamespacedResolutionResponse
var err error
rsp, err = r.Resolve(ctx, reference.NamespacedResolutionRequest{
CurrentValue: mg.Spec.ForProvider.APIID,
Extract: reference.ExternalName(),
Namespace: mg.GetNamespace(),
Reference: mg.Spec.ForProvider.APIIDRef,
Selector: mg.Spec.ForProvider.APIIDSelector,
To: reference.To{
List: &Apigatewayv2ApiList{},
Managed: &Apigatewayv2Api{},
},
})
if err != nil {
return errors.Wrap(err, "mg.Spec.ForProvider.APIID")
}
mg.Spec.ForProvider.APIID = rsp.ResolvedValue
mg.Spec.ForProvider.APIIDRef = rsp.ResolvedReference
rsp, err = r.Resolve(ctx, reference.NamespacedResolutionRequest{
CurrentValue: reference.FromPtrValue(mg.Spec.ForProvider.SecurityGroupID),
Extract: reference.ExternalName(),
Namespace: mg.GetNamespace(),
Reference: mg.Spec.ForProvider.SecurityGroupIDRef,
Selector: mg.Spec.ForProvider.SecurityGroupIDSelector,
To: reference.To{
List: &SecurityGroupList{},
Managed: &SecurityGroup{},
},
})
if err != nil {
return errors.Wrap(err, "mg.Spec.ForProvider.SecurityGroupID")
}
mg.Spec.ForProvider.SecurityGroupID = reference.ToPtrValue(rsp.ResolvedValue)
mg.Spec.ForProvider.SecurityGroupIDRef = rsp.ResolvedReference
rsp, err = r.Resolve(ctx, reference.NamespacedResolutionRequest{
CurrentValue: reference.FromPtrValue(mg.Spec.ForProvider.IAMRoleARN),
Extract: v1beta1.IAMRoleARN(),
Namespace: mg.GetNamespace(),
Reference: mg.Spec.ForProvider.IAMRoleARNRef,
Selector: mg.Spec.ForProvider.IAMRoleARNSelector,
To: reference.To{
List: &v1beta1.IAMList{},
Managed: &v1beta1.IAM{},
},
})
if err != nil {
return errors.Wrap(err, "mg.Spec.ForProvider.IAMRoleARN")
}
mg.Spec.ForProvider.IAMRoleARN = reference.ToPtrValue(rsp.ResolvedValue)
mg.Spec.ForProvider.IAMRoleARNRef = rsp.ResolvedReference
rsp, err = r.Resolve(ctx, reference.NamespacedResolutionRequest{
CurrentValue: reference.FromPtrValue(mg.Spec.ForProvider.NestedTargetWithPath),
Extract: v1beta1.IAMRoleARN("a.b.c"),
Namespace: mg.GetNamespace(),
Reference: mg.Spec.ForProvider.NestedTargetWithPathRef,
Selector: mg.Spec.ForProvider.NestedTargetWithPathSelector,
To: reference.To{
List: &v1beta1.IAMList{},
Managed: &v1beta1.IAM{},
},
})
if err != nil {
return errors.Wrap(err, "mg.Spec.ForProvider.NestedTargetWithPath")
}
mg.Spec.ForProvider.NestedTargetWithPath = reference.ToPtrValue(rsp.ResolvedValue)
mg.Spec.ForProvider.NestedTargetWithPathRef = rsp.ResolvedReference
rsp, err = r.Resolve(ctx, reference.NamespacedResolutionRequest{
CurrentValue: reference.FromPtrValue(mg.Spec.ForProvider.NestedTargetNoPath),
Extract: IAMRoleARN("a.b.c"),
Namespace: mg.GetNamespace(),
Reference: mg.Spec.ForProvider.NestedTargetNoPathRef,
Selector: mg.Spec.ForProvider.NestedTargetNoPathSelector,
To: reference.To{
List: &v1beta1.IAMList{},
Managed: &v1beta1.IAM{},
},
})
if err != nil {
return errors.Wrap(err, "mg.Spec.ForProvider.NestedTargetNoPath")
}
mg.Spec.ForProvider.NestedTargetNoPath = reference.ToPtrValue(rsp.ResolvedValue)
mg.Spec.ForProvider.NestedTargetNoPathRef = rsp.ResolvedReference
rsp, err = r.Resolve(ctx, reference.NamespacedResolutionRequest{
CurrentValue: reference.FromPtrValue(mg.Spec.ForProvider.NoArgNoPath),
Extract: IAMRoleARN(),
Namespace: mg.GetNamespace(),
Reference: mg.Spec.ForProvider.NoArgNoPathRef,
Selector: mg.Spec.ForProvider.NoArgNoPathSelector,
To: reference.To{
List: &v1beta1.IAMList{},
Managed: &v1beta1.IAM{},
},
})
if err != nil {
return errors.Wrap(err, "mg.Spec.ForProvider.NoArgNoPath")
}
mg.Spec.ForProvider.NoArgNoPath = reference.ToPtrValue(rsp.ResolvedValue)
mg.Spec.ForProvider.NoArgNoPathRef = rsp.ResolvedReference
if mg.Spec.ForProvider.Network != nil {
rsp, err = r.Resolve(ctx, reference.NamespacedResolutionRequest{
CurrentValue: mg.Spec.ForProvider.Network.VPCID,
Extract: reference.ExternalName(),
Namespace: mg.GetNamespace(),
Reference: mg.Spec.ForProvider.Network.VPCIDRef,
Selector: mg.Spec.ForProvider.Network.VPCIDSelector,
To: reference.To{
List: &v1beta11.VPCList{},
Managed: &v1beta11.VPC{},
},
})
if err != nil {
return errors.Wrap(err, "mg.Spec.ForProvider.Network.VPCID")
}
mg.Spec.ForProvider.Network.VPCID = rsp.ResolvedValue
mg.Spec.ForProvider.Network.VPCIDRef = rsp.ResolvedReference
}
for i3 := 0; i3 < len(mg.Spec.ForProvider.OtherSetting); i3++ {
rsp, err = r.Resolve(ctx, reference.NamespacedResolutionRequest{
CurrentValue: mg.Spec.ForProvider.OtherSetting[i3].OtherID,
Extract: reference.ExternalName(),
Namespace: mg.GetNamespace(),
Reference: mg.Spec.ForProvider.OtherSetting[i3].OtherIDRef,
Selector: mg.Spec.ForProvider.OtherSetting[i3].OtherIDSelector,
To: reference.To{
List: &ClusterList{},
Managed: &Cluster{},
},
})
if err != nil {
return errors.Wrap(err, "mg.Spec.ForProvider.OtherSetting[i3].OtherID")
}
mg.Spec.ForProvider.OtherSetting[i3].OtherID = rsp.ResolvedValue
mg.Spec.ForProvider.OtherSetting[i3].OtherIDRef = rsp.ResolvedReference
}
mrsp, err = r.ResolveMultiple(ctx, reference.MultiNamespacedResolutionRequest{
CurrentValues: mg.Spec.ForProvider.SubnetIDs,
Extract: reference.ExternalName(),
Namespace: mg.GetNamespace(),
References: mg.Spec.ForProvider.SubnetIDRefs,
Selector: mg.Spec.ForProvider.SubnetIDSelector,
To: reference.To{
List: &SubnetList{},
Managed: &Subnet{},
},
})
if err != nil {
return errors.Wrap(err, "mg.Spec.ForProvider.SubnetIDs")
}
mg.Spec.ForProvider.SubnetIDs = mrsp.ResolvedValues
mg.Spec.ForProvider.SubnetIDRefs = mrsp.ResolvedReferences
mrsp, err = r.ResolveMultiple(ctx, reference.MultiNamespacedResolutionRequest{
CurrentValues: reference.FromPtrValues(mg.Spec.ForProvider.RouteTableIDs),
Extract: reference.ExternalName(),
Namespace: mg.GetNamespace(),
References: mg.Spec.ForProvider.RouteTableIDsRefs,
Selector: mg.Spec.ForProvider.RouteTableIDsSelector,
To: reference.To{
List: &RouteTableList{},
Managed: &RouteTable{},
},
})
if err != nil {
return errors.Wrap(err, "mg.Spec.ForProvider.RouteTableIDs")
}
mg.Spec.ForProvider.RouteTableIDs = reference.ToPtrValues(mrsp.ResolvedValues)
mg.Spec.ForProvider.RouteTableIDsRefs = mrsp.ResolvedReferences
rsp, err = r.Resolve(ctx, reference.NamespacedResolutionRequest{
CurrentValue: reference.FromPtrValue(mg.Spec.ForProvider.CustomConfiguration),
Extract: Configuration(),
Namespace: mg.GetNamespace(),
Reference: mg.Spec.ForProvider.CustomConfigurationRef,
Selector: mg.Spec.ForProvider.CustomConfigurationSelector,
To: reference.To{
List: &ConfigurationList{},
Managed: &Configuration{},
},
})
if err != nil {
return errors.Wrap(err, "mg.Spec.ForProvider.CustomConfiguration")
}
mg.Spec.ForProvider.CustomConfiguration = reference.ToPtrValue(rsp.ResolvedValue)
mg.Spec.ForProvider.CustomConfigurationRef = rsp.ResolvedReference
rsp, err = r.Resolve(ctx, reference.NamespacedResolutionRequest{
CurrentValue: reference.FromFloatPtrValue(mg.Spec.ForProvider.Count),
Extract: Count(),
Namespace: mg.GetNamespace(),
Reference: mg.Spec.ForProvider.CountRef,
Selector: mg.Spec.ForProvider.CountSelector,
To: reference.To{
List: &v1beta1.IAMList{},
Managed: &v1beta1.IAM{},
},
})
if err != nil {
return errors.Wrap(err, "mg.Spec.ForProvider.Count")
}
mg.Spec.ForProvider.Count = reference.ToFloatPtrValue(rsp.ResolvedValue)
mg.Spec.ForProvider.CountRef = rsp.ResolvedReference
return nil
}
`
)
@ -355,3 +586,23 @@ func TestNewResolveReferences(t *testing.T) {
t.Errorf("NewResolveReferences(): -want, +got\n%s", diff)
}
}
func TestNewResolveReferencesV2(t *testing.T) {
exported := packagestest.Export(t, packagestest.Modules, []packagestest.Module{{
Name: "golang.org/fake",
Files: map[string]any{
"v1alpha1/model.go": source,
},
}})
defer exported.Cleanup()
exported.Config.Mode = packages.NeedName | packages.NeedFiles | packages.NeedImports | packages.NeedDeps | packages.NeedTypes | packages.NeedSyntax
pkgs, err := packages.Load(exported.Config, fmt.Sprintf("file=%s", exported.File("golang.org/fake", "v1alpha1/model.go")))
if err != nil {
t.Error(err)
}
f := jen.NewFilePath("golang.org/fake/v1alpha1")
NewResolveReferencesV2(xptypes.NewTraverser(comments.In(pkgs[0])), "mg", "example.org/client", "example.org/reference")(f, pkgs[0].Types.Scope().Lookup("Model"))
if diff := cmp.Diff(generatedNamespaced, fmt.Sprintf("%#v", f)); diff != "" {
t.Errorf("NewResolveReferences(): -want, +got\n%s", diff)
}
}