@@ -8,30 +8,21 @@ import (
88 . "github.com/onsi/gomega"
99
1010 metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
11+ "k8s.io/apimachinery/pkg/types"
1112 "sigs.k8s.io/controller-runtime/pkg/client"
1213
1314 olmv1 "github.com/operator-framework/operator-controller/api/v1"
1415
1516 internalaction "github.com/operator-framework/kubectl-operator/internal/pkg/v1/action"
17+ "github.com/operator-framework/kubectl-operator/pkg/action"
1618)
1719
18- type mockCreateClient struct {
19- * mockCreator
20- * mockGetter
21- * mockDeleter
22- createCatalog * olmv1.ClusterCatalog
23- }
24-
25- func (mcc * mockCreateClient ) Create (ctx context.Context , obj client.Object , opts ... client.CreateOption ) error {
26- mcc .createCatalog = obj .(* olmv1.ClusterCatalog )
27- return mcc .mockCreator .Create (ctx , obj , opts ... )
28- }
29-
3020var _ = Describe ("CatalogCreate" , func () {
21+ catalogName := "testcatalog"
3122 pollInterval := 20
3223 expectedCatalog := olmv1.ClusterCatalog {
3324 ObjectMeta : metav1.ObjectMeta {
34- Name : "testcatalog" ,
25+ Name : catalogName ,
3526 Labels : map [string ]string {"a" : "b" },
3627 },
3728 Spec : olmv1.ClusterCatalogSpec {
@@ -49,9 +40,10 @@ var _ = Describe("CatalogCreate", func() {
4940
5041 It ("fails creating catalog" , func () {
5142 expectedErr := errors .New ("create failed" )
52- mockClient := & mockCreateClient {& mockCreator {createErr : expectedErr }, nil , nil , & expectedCatalog }
43+ testClient := fakeClient {createErr : expectedErr }
44+ Expect (testClient .Initialize ()).To (Succeed ())
5345
54- creator := internalaction .NewCatalogCreate (mockClient )
46+ creator := internalaction .NewCatalogCreate (& action. Configuration { Client : testClient } )
5547 creator .Available = true
5648 creator .CatalogName = expectedCatalog .Name
5749 creator .ImageSourceRef = expectedCatalog .Spec .Source .Image .Ref
@@ -62,41 +54,78 @@ var _ = Describe("CatalogCreate", func() {
6254
6355 Expect (err ).NotTo (BeNil ())
6456 Expect (err ).To (MatchError (expectedErr ))
65- Expect (mockClient .createCalled ).To (Equal (1 ))
66-
67- // there is no way of testing a happy path in unit tests because we have no way to
68- // set/mock the catalog status condition we're waiting for in waitUntilCatalogStatusCondition
69- // but we can still at least verify that CR would have been created with expected attribute values
70- validateCreateCatalog (mockClient .createCatalog , & expectedCatalog )
57+ Expect (testClient .createCalled ).To (Equal (1 ))
7158 })
7259
7360 It ("fails waiting for created catalog status, successfully cleans up" , func () {
7461 expectedErr := errors .New ("get failed" )
75- mockClient := & mockCreateClient {& mockCreator {}, & mockGetter {getErr : expectedErr }, & mockDeleter {}, nil }
62+ testClient := fakeClient {getErr : expectedErr }
63+ Expect (testClient .Initialize ()).To (Succeed ())
7664
77- creator := internalaction .NewCatalogCreate (mockClient )
65+ creator := internalaction .NewCatalogCreate (& action.Configuration {Client : testClient })
66+ // fakeClient requires at least the catalogName to be set to run
67+ creator .CatalogName = expectedCatalog .Name
7868 err := creator .Run (context .TODO ())
7969
8070 Expect (err ).NotTo (BeNil ())
8171 Expect (err ).To (MatchError (expectedErr ))
82- Expect (mockClient .createCalled ).To (Equal (1 ))
83- Expect (mockClient .getCalled ).To (Equal (1 ))
84- Expect (mockClient .deleteCalled ).To (Equal (1 ))
72+ Expect (testClient .createCalled ).To (Equal (1 ))
73+ Expect (testClient .getCalled ).To (Equal (1 ))
74+ Expect (testClient .deleteCalled ).To (Equal (1 ))
8575 })
8676
8777 It ("fails waiting for created catalog status, fails clean up" , func () {
8878 getErr := errors .New ("get failed" )
8979 deleteErr := errors .New ("delete failed" )
90- mockClient := & mockCreateClient {& mockCreator {}, & mockGetter {getErr : getErr }, & mockDeleter {deleteErr : deleteErr }, nil }
80+ testClient := fakeClient {deleteErr : deleteErr , getErr : getErr }
81+ Expect (testClient .Initialize ()).To (Succeed ())
9182
92- creator := internalaction .NewCatalogCreate (mockClient )
83+ creator := internalaction .NewCatalogCreate (& action.Configuration {Client : testClient })
84+ // fakeClient requires at least the catalogName to be set to run
85+ creator .CatalogName = expectedCatalog .Name
9386 err := creator .Run (context .TODO ())
9487
9588 Expect (err ).NotTo (BeNil ())
9689 Expect (err ).To (MatchError (getErr ))
97- Expect (mockClient .createCalled ).To (Equal (1 ))
98- Expect (mockClient .getCalled ).To (Equal (1 ))
99- Expect (mockClient .deleteCalled ).To (Equal (1 ))
90+ Expect (testClient .createCalled ).To (Equal (1 ))
91+ Expect (testClient .getCalled ).To (Equal (1 ))
92+ Expect (testClient .deleteCalled ).To (Equal (1 ))
93+ })
94+ It ("succeeds creating catalog" , func () {
95+ testClient := fakeClient {
96+ transformers : []objectTransformer {
97+ {
98+ verb : verbCreate ,
99+ objectKey : types.NamespacedName {Name : catalogName },
100+ transformFunc : func (obj * client.Object ) {
101+ if obj == nil {
102+ return
103+ }
104+ catalogObj , ok := (* obj ).(* olmv1.ClusterCatalog )
105+ if ! ok {
106+ return
107+ }
108+ catalogObj .Status .Conditions = []metav1.Condition {{Type : olmv1 .TypeServing , Status : metav1 .ConditionTrue }}
109+ },
110+ },
111+ },
112+ }
113+ Expect (testClient .Initialize ()).To (Succeed ())
114+
115+ creator := internalaction .NewCatalogCreate (& action.Configuration {Client : testClient })
116+ creator .Available = true
117+ creator .CatalogName = expectedCatalog .Name
118+ creator .ImageSourceRef = expectedCatalog .Spec .Source .Image .Ref
119+ creator .Priority = expectedCatalog .Spec .Priority
120+ creator .Labels = expectedCatalog .Labels
121+ creator .PollIntervalMinutes = * expectedCatalog .Spec .Source .Image .PollIntervalMinutes
122+ Expect (creator .Run (context .TODO ())).To (Succeed ())
123+
124+ Expect (testClient .createCalled ).To (Equal (1 ))
125+
126+ actualCatalog := & olmv1.ClusterCatalog {TypeMeta : metav1.TypeMeta {Kind : "ClusterCatalog" , APIVersion : "olm.operatorframework.io/v1" }}
127+ Expect (testClient .Client .Get (context .TODO (), types.NamespacedName {Name : catalogName }, actualCatalog )).To (Succeed ())
128+ validateCreateCatalog (actualCatalog , & expectedCatalog )
100129 })
101130})
102131
0 commit comments