diff --git a/apis/cluster/projects/v1alpha1/zz_referencers.go b/apis/cluster/projects/v1alpha1/zz_referencers.go index 89344675..54d027c4 100644 --- a/apis/cluster/projects/v1alpha1/zz_referencers.go +++ b/apis/cluster/projects/v1alpha1/zz_referencers.go @@ -302,6 +302,34 @@ func (mg *IntegrationMattermost) ResolveReferences(ctx context.Context, c client return nil } +// ResolveReferences of this IntegrationHarbor +func (mg *IntegrationHarbor) ResolveReferences(ctx context.Context, c client.Reader) error { + r := reference.NewAPIResolver(c, mg) + + // resolve spec.forProvider.projectIdRef + rsp, err := r.Resolve(ctx, reference.ResolutionRequest{ + CurrentValue: fromPtrValue(mg.Spec.ForProvider.ProjectID), + Reference: mg.Spec.ForProvider.ProjectIDRef, + Selector: mg.Spec.ForProvider.ProjectIDSelector, + To: reference.To{Managed: &Project{}, List: &ProjectList{}}, + Extract: ProjectID(), + }) + + if err != nil { + return errors.Wrap(err, "spec.forProvider.projectId") + } + + resolvedID, err := toPtrValue(rsp.ResolvedValue) + if err != nil { + return errors.Wrap(err, "spec.forProvider.projectId") + } + + mg.Spec.ForProvider.ProjectID = resolvedID + mg.Spec.ForProvider.ProjectIDRef = rsp.ResolvedReference + + return nil +} + // ResolveReferences of this ServiceAccount func (mg *ServiceAccount) ResolveReferences(ctx context.Context, c client.Reader) error { r := reference.NewAPIResolver(c, mg) diff --git a/apis/cluster/projects/v1alpha1/zz_referencers_test.go b/apis/cluster/projects/v1alpha1/zz_referencers_test.go new file mode 100644 index 00000000..49b90171 --- /dev/null +++ b/apis/cluster/projects/v1alpha1/zz_referencers_test.go @@ -0,0 +1,75 @@ +/* +Copyright 2026 The Crossplane Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Code generated by hack/generate-cluster-scope.go - DO NOT EDIT. + +package v1alpha1 + +import ( + "context" + "testing" + + "github.com/crossplane/crossplane-runtime/v2/pkg/meta" + "github.com/crossplane/crossplane-runtime/v2/pkg/test" + v2 "github.com/crossplane/crossplane/apis/v2/core/v2" + "github.com/google/go-cmp/cmp" + "k8s.io/utils/ptr" + "sigs.k8s.io/controller-runtime/pkg/client" +) + +func TestIntegrationHarborResolveReferences(t *testing.T) { + reader := &test.MockClient{ + MockGet: test.NewMockGetFn(nil, func(obj client.Object) error { + meta.SetExternalName(obj, "1234") + return nil + }), + } + + cases := map[string]struct { + params IntegrationHarborParameters + want IntegrationHarborParameters + }{ + "ProjectIDRef": { + params: IntegrationHarborParameters{ + ProjectIDRef: &v2.Reference{Name: "example-project"}, + }, + want: IntegrationHarborParameters{ + ProjectID: ptr.To(int64(1234)), + ProjectIDRef: &v2.Reference{Name: "example-project"}, + }, + }, + "ProjectIDSet": { + params: IntegrationHarborParameters{ + ProjectID: ptr.To(int64(42)), + }, + want: IntegrationHarborParameters{ + ProjectID: ptr.To(int64(42)), + }, + }, + } + + for name, tc := range cases { + t.Run(name, func(t *testing.T) { + mg := &IntegrationHarbor{Spec: IntegrationHarborSpec{ForProvider: tc.params}} + if err := mg.ResolveReferences(context.Background(), reader); err != nil { + t.Fatalf("ResolveReferences(): %v", err) + } + if diff := cmp.Diff(tc.want, mg.Spec.ForProvider); diff != "" { + t.Errorf("ResolveReferences() diff (-want +got):\n%s", diff) + } + }) + } +} diff --git a/apis/namespaced/projects/v1alpha1/referencers.go b/apis/namespaced/projects/v1alpha1/referencers.go index 9dcc685a..60eb9b4e 100644 --- a/apis/namespaced/projects/v1alpha1/referencers.go +++ b/apis/namespaced/projects/v1alpha1/referencers.go @@ -300,6 +300,34 @@ func (mg *IntegrationMattermost) ResolveReferences(ctx context.Context, c client return nil } +// ResolveReferences of this IntegrationHarbor +func (mg *IntegrationHarbor) ResolveReferences(ctx context.Context, c client.Reader) error { + r := reference.NewAPINamespacedResolver(c, mg) + + // resolve spec.forProvider.projectIdRef + rsp, err := r.Resolve(ctx, reference.NamespacedResolutionRequest{ + CurrentValue: fromPtrValue(mg.Spec.ForProvider.ProjectID), + Reference: mg.Spec.ForProvider.ProjectIDRef, + Selector: mg.Spec.ForProvider.ProjectIDSelector, + To: reference.To{Managed: &Project{}, List: &ProjectList{}}, + Extract: ProjectID(), + }) + + if err != nil { + return errors.Wrap(err, "spec.forProvider.projectId") + } + + resolvedID, err := toPtrValue(rsp.ResolvedValue) + if err != nil { + return errors.Wrap(err, "spec.forProvider.projectId") + } + + mg.Spec.ForProvider.ProjectID = resolvedID + mg.Spec.ForProvider.ProjectIDRef = rsp.ResolvedReference + + return nil +} + // ResolveReferences of this ServiceAccount func (mg *ServiceAccount) ResolveReferences(ctx context.Context, c client.Reader) error { r := reference.NewAPINamespacedResolver(c, mg) diff --git a/apis/namespaced/projects/v1alpha1/referencers_test.go b/apis/namespaced/projects/v1alpha1/referencers_test.go new file mode 100644 index 00000000..8a4e1906 --- /dev/null +++ b/apis/namespaced/projects/v1alpha1/referencers_test.go @@ -0,0 +1,73 @@ +/* +Copyright 2026 The Crossplane Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package v1alpha1 + +import ( + "context" + "testing" + + "github.com/crossplane/crossplane-runtime/v2/pkg/meta" + "github.com/crossplane/crossplane-runtime/v2/pkg/test" + v2 "github.com/crossplane/crossplane/apis/v2/core/v2" + "github.com/google/go-cmp/cmp" + "k8s.io/utils/ptr" + "sigs.k8s.io/controller-runtime/pkg/client" +) + +func TestIntegrationHarborResolveReferences(t *testing.T) { + reader := &test.MockClient{ + MockGet: test.NewMockGetFn(nil, func(obj client.Object) error { + meta.SetExternalName(obj, "1234") + return nil + }), + } + + cases := map[string]struct { + params IntegrationHarborParameters + want IntegrationHarborParameters + }{ + "ProjectIDRef": { + params: IntegrationHarborParameters{ + ProjectIDRef: &v2.NamespacedReference{Name: "example-project"}, + }, + want: IntegrationHarborParameters{ + ProjectID: ptr.To(int64(1234)), + ProjectIDRef: &v2.NamespacedReference{Name: "example-project"}, + }, + }, + "ProjectIDSet": { + params: IntegrationHarborParameters{ + ProjectID: ptr.To(int64(42)), + }, + want: IntegrationHarborParameters{ + ProjectID: ptr.To(int64(42)), + }, + }, + } + + for name, tc := range cases { + t.Run(name, func(t *testing.T) { + mg := &IntegrationHarbor{Spec: IntegrationHarborSpec{ForProvider: tc.params}} + if err := mg.ResolveReferences(context.Background(), reader); err != nil { + t.Fatalf("ResolveReferences(): %v", err) + } + if diff := cmp.Diff(tc.want, mg.Spec.ForProvider); diff != "" { + t.Errorf("ResolveReferences() diff (-want +got):\n%s", diff) + } + }) + } +}