|
5 | 5 | "errors" |
6 | 6 | "testing" |
7 | 7 |
|
8 | | - "github.com/samber/lo" |
9 | 8 | "github.com/stretchr/testify/assert" |
10 | | - "github.com/stretchr/testify/require" |
11 | 9 | "go.uber.org/mock/gomock" |
12 | 10 |
|
13 | 11 | ldapi "github.com/launchdarkly/api-client-go/v14" |
@@ -70,130 +68,114 @@ func TestCreateProject(t *testing.T) { |
70 | 68 | api.EXPECT().GetSdkKey(gomock.Any(), projKey, sourceEnvKey).Return(sdkKey, nil) |
71 | 69 | sdk.EXPECT().GetAllFlagsState(gomock.Any(), gomock.Any(), sdkKey).Return(allFlagsState, nil) |
72 | 70 | api.EXPECT().GetAllFlags(gomock.Any(), projKey).Return(allFlags, nil) |
| 71 | + api.EXPECT().GetProjectEnvironments(gomock.Any(), projKey, "", nil).Return([]ldapi.Environment{ |
| 72 | + { |
| 73 | + Key: sourceEnvKey, |
| 74 | + Id: "test-client-side-id", |
| 75 | + }, |
| 76 | + }, nil) |
73 | 77 | store.EXPECT().InsertProject(gomock.Any(), gomock.Any()).Return(errors.New("insert fails")) |
74 | 78 |
|
75 | 79 | _, err := model.CreateProject(ctx, projKey, sourceEnvKey, nil) |
76 | | - assert.NotNil(t, err) |
77 | 80 | assert.Equal(t, "insert fails", err.Error()) |
78 | 81 | }) |
79 | 82 |
|
80 | | - t.Run("Successfully creates project", func(t *testing.T) { |
| 83 | + t.Run("Successfully creates a project", func(t *testing.T) { |
81 | 84 | api.EXPECT().GetSdkKey(gomock.Any(), projKey, sourceEnvKey).Return(sdkKey, nil) |
82 | 85 | sdk.EXPECT().GetAllFlagsState(gomock.Any(), gomock.Any(), sdkKey).Return(allFlagsState, nil) |
83 | 86 | api.EXPECT().GetAllFlags(gomock.Any(), projKey).Return(allFlags, nil) |
| 87 | + api.EXPECT().GetProjectEnvironments(gomock.Any(), projKey, "", nil).Return([]ldapi.Environment{ |
| 88 | + { |
| 89 | + Key: sourceEnvKey, |
| 90 | + Id: "test-client-side-id", |
| 91 | + }, |
| 92 | + }, nil) |
84 | 93 | store.EXPECT().InsertProject(gomock.Any(), gomock.Any()).Return(nil) |
85 | 94 |
|
86 | | - p, err := model.CreateProject(ctx, projKey, sourceEnvKey, nil) |
87 | | - assert.Nil(t, err) |
88 | | - |
89 | | - expectedProj := model.Project{ |
90 | | - Key: projKey, |
91 | | - SourceEnvironmentKey: sourceEnvKey, |
92 | | - Context: ldcontext.NewBuilder("user").Key("dev-environment").Build(), |
93 | | - AllFlagsState: model.FromAllFlags(allFlagsState), |
94 | | - } |
95 | | - |
96 | | - assert.Equal(t, expectedProj.Key, p.Key) |
97 | | - assert.Equal(t, expectedProj.SourceEnvironmentKey, p.SourceEnvironmentKey) |
98 | | - assert.Equal(t, expectedProj.Context, p.Context) |
99 | | - assert.Equal(t, expectedProj.AllFlagsState, p.AllFlagsState) |
100 | | - //TODO add assertion on AvailableVariations |
| 95 | + _, err := model.CreateProject(ctx, projKey, sourceEnvKey, nil) |
| 96 | + assert.NoError(t, err) |
101 | 97 | }) |
102 | 98 | } |
103 | 99 |
|
104 | 100 | func TestUpdateProject(t *testing.T) { |
| 101 | + ctx := context.Background() |
105 | 102 | mockController := gomock.NewController(t) |
106 | | - store := mocks.NewMockStore(mockController) |
107 | | - ctx := model.ContextWithStore(context.Background(), store) |
108 | | - ctx, api, sdk := adapters_mocks.WithMockApiAndSdk(ctx, mockController) |
109 | | - |
110 | | - observer := mocks.NewMockObserver(mockController) |
111 | 103 | observers := model.NewObservers() |
112 | | - observers.RegisterObserver(observer) |
| 104 | + ctx, api, sdk := adapters_mocks.WithMockApiAndSdk(ctx, mockController) |
| 105 | + store := mocks.NewMockStore(mockController) |
| 106 | + ctx = model.ContextWithStore(ctx, store) |
113 | 107 | ctx = model.SetObserversOnContext(ctx, observers) |
114 | | - |
115 | | - ldCtx := ldcontext.New(t.Name()) |
116 | | - newSrcEnv := "newEnv" |
117 | | - |
118 | | - proj := model.Project{ |
119 | | - Key: "projKey", |
120 | | - SourceEnvironmentKey: "srcEnvKey", |
121 | | - Context: ldcontext.New(t.Name()), |
122 | | - } |
| 108 | + projKey := "projKey" |
| 109 | + sourceEnvKey := "env" |
| 110 | + sdkKey := "sdkKey" |
123 | 111 |
|
124 | 112 | allFlagsState := flagstate.NewAllFlagsBuilder(). |
125 | | - AddFlag("stringFlag", flagstate.FlagState{Value: ldvalue.String("cool")}). |
| 113 | + AddFlag("boolFlag", flagstate.FlagState{Value: ldvalue.Bool(true)}). |
126 | 114 | Build() |
127 | | - |
| 115 | + trueVariationId, falseVariationId := "true", "false" |
128 | 116 | allFlags := []ldapi.FeatureFlag{{ |
129 | | - Name: "string flag", |
130 | | - Kind: "multivariate", |
131 | | - Key: "stringFlag", |
| 117 | + Name: "bool flag", |
| 118 | + Kind: "bool", |
| 119 | + Key: "boolFlag", |
132 | 120 | Variations: []ldapi.Variation{ |
133 | 121 | { |
134 | | - Id: lo.ToPtr("string"), |
135 | | - Value: "cool", |
| 122 | + Id: &trueVariationId, |
| 123 | + Value: true, |
| 124 | + }, |
| 125 | + { |
| 126 | + Id: &falseVariationId, |
| 127 | + Value: false, |
136 | 128 | }, |
137 | 129 | }, |
138 | 130 | }} |
139 | 131 |
|
140 | | - t.Run("Returns error if GetDevProject fails", func(t *testing.T) { |
141 | | - store.EXPECT().GetDevProject(gomock.Any(), proj.Key).Return(&model.Project{}, errors.New("GetDevProject fails")) |
142 | | - _, err := model.UpdateProject(ctx, proj.Key, nil, nil) |
143 | | - assert.NotNil(t, err) |
144 | | - assert.Equal(t, "GetDevProject fails", err.Error()) |
145 | | - }) |
| 132 | + proj := model.Project{ |
| 133 | + Key: projKey, |
| 134 | + SourceEnvironmentKey: sourceEnvKey, |
| 135 | + Context: ldcontext.New("user"), |
| 136 | + AllFlagsState: model.FromAllFlags(allFlagsState), |
| 137 | + } |
146 | 138 |
|
147 | | - t.Run("returns error if the fetch flag state fails", func(t *testing.T) { |
148 | | - store.EXPECT().GetDevProject(gomock.Any(), proj.Key).Return(&proj, nil) |
149 | | - api.EXPECT().GetSdkKey(gomock.Any(), proj.Key, proj.SourceEnvironmentKey).Return("", errors.New("FetchFlagState fails")) |
| 139 | + t.Run("Returns error if it can't find the project", func(t *testing.T) { |
| 140 | + store.EXPECT().GetDevProject(gomock.Any(), proj.Key).Return(nil, errors.New("not found")) |
150 | 141 |
|
151 | | - _, err := model.UpdateProject(ctx, proj.Key, &ldCtx, nil) |
152 | | - assert.NotNil(t, err) |
153 | | - assert.Equal(t, "FetchFlagState fails", err.Error()) |
| 142 | + _, err := model.UpdateProject(ctx, proj.Key, nil, nil) |
| 143 | + assert.Equal(t, "not found", err.Error()) |
154 | 144 | }) |
155 | 145 |
|
156 | 146 | t.Run("Returns error if UpdateProject fails", func(t *testing.T) { |
157 | | - store.EXPECT().GetDevProject(gomock.Any(), proj.Key).Return(&proj, nil) |
158 | | - api.EXPECT().GetSdkKey(gomock.Any(), proj.Key, newSrcEnv).Return("sdkKey", nil) |
159 | | - sdk.EXPECT().GetAllFlagsState(gomock.Any(), gomock.Any(), "sdkKey").Return(allFlagsState, nil) |
160 | | - api.EXPECT().GetAllFlags(gomock.Any(), proj.Key).Return(allFlags, nil) |
161 | | - store.EXPECT().UpdateProject(gomock.Any(), gomock.Any()).Return(false, errors.New("UpdateProject fails")) |
162 | | - |
163 | | - _, err := model.UpdateProject(ctx, proj.Key, nil, &newSrcEnv) |
164 | | - assert.NotNil(t, err) |
165 | | - assert.Equal(t, "UpdateProject fails", err.Error()) |
166 | | - }) |
167 | | - |
168 | | - t.Run("Returns error if project was not actually updated", func(t *testing.T) { |
169 | | - store.EXPECT().GetDevProject(gomock.Any(), proj.Key).Return(&proj, nil) |
170 | | - api.EXPECT().GetSdkKey(gomock.Any(), proj.Key, proj.SourceEnvironmentKey).Return("sdkKey", nil) |
171 | | - sdk.EXPECT().GetAllFlagsState(gomock.Any(), gomock.Any(), "sdkKey").Return(allFlagsState, nil) |
172 | | - api.EXPECT().GetAllFlags(gomock.Any(), proj.Key).Return(allFlags, nil) |
173 | | - store.EXPECT().UpdateProject(gomock.Any(), gomock.Any()).Return(false, nil) |
| 147 | + store.EXPECT().GetDevProject(gomock.Any(), projKey).Return(&proj, nil) |
| 148 | + api.EXPECT().GetSdkKey(gomock.Any(), projKey, sourceEnvKey).Return(sdkKey, nil) |
| 149 | + sdk.EXPECT().GetAllFlagsState(gomock.Any(), gomock.Any(), sdkKey).Return(allFlagsState, nil) |
| 150 | + api.EXPECT().GetAllFlags(gomock.Any(), projKey).Return(allFlags, nil) |
| 151 | + api.EXPECT().GetProjectEnvironments(gomock.Any(), projKey, "", nil).Return([]ldapi.Environment{ |
| 152 | + { |
| 153 | + Key: sourceEnvKey, |
| 154 | + Id: "test-client-side-id", |
| 155 | + }, |
| 156 | + }, nil) |
| 157 | + store.EXPECT().UpdateProject(gomock.Any(), gomock.Any()).Return(false, errors.New("update fails")) |
174 | 158 |
|
175 | | - _, err := model.UpdateProject(ctx, proj.Key, nil, nil) |
176 | | - assert.NotNil(t, err) |
177 | | - assert.Equal(t, "Project not updated", err.Error()) |
| 159 | + _, err := model.UpdateProject(ctx, projKey, nil, nil) |
| 160 | + assert.Equal(t, "update fails", err.Error()) |
178 | 161 | }) |
179 | 162 |
|
180 | | - t.Run("Return successfully", func(t *testing.T) { |
181 | | - store.EXPECT().GetDevProject(gomock.Any(), proj.Key).Return(&proj, nil) |
182 | | - api.EXPECT().GetSdkKey(gomock.Any(), proj.Key, proj.SourceEnvironmentKey).Return("sdkKey", nil) |
183 | | - sdk.EXPECT().GetAllFlagsState(gomock.Any(), gomock.Any(), "sdkKey").Return(allFlagsState, nil) |
184 | | - api.EXPECT().GetAllFlags(gomock.Any(), proj.Key).Return(allFlags, nil) |
| 163 | + t.Run("Successfully updates a project", func(t *testing.T) { |
| 164 | + store.EXPECT().GetDevProject(gomock.Any(), projKey).Return(&proj, nil) |
| 165 | + api.EXPECT().GetSdkKey(gomock.Any(), projKey, sourceEnvKey).Return(sdkKey, nil) |
| 166 | + sdk.EXPECT().GetAllFlagsState(gomock.Any(), gomock.Any(), sdkKey).Return(allFlagsState, nil) |
| 167 | + api.EXPECT().GetAllFlags(gomock.Any(), projKey).Return(allFlags, nil) |
| 168 | + api.EXPECT().GetProjectEnvironments(gomock.Any(), projKey, "", nil).Return([]ldapi.Environment{ |
| 169 | + { |
| 170 | + Key: sourceEnvKey, |
| 171 | + Id: "test-client-side-id", |
| 172 | + }, |
| 173 | + }, nil) |
185 | 174 | store.EXPECT().UpdateProject(gomock.Any(), gomock.Any()).Return(true, nil) |
186 | | - store.EXPECT().GetOverridesForProject(gomock.Any(), proj.Key).Return(model.Overrides{}, nil) |
187 | | - observer. |
188 | | - EXPECT(). |
189 | | - Handle(model.SyncEvent{ |
190 | | - ProjectKey: proj.Key, |
191 | | - AllFlagsState: model.FromAllFlags(allFlagsState), |
192 | | - }) |
193 | | - |
194 | | - project, err := model.UpdateProject(ctx, proj.Key, nil, nil) |
195 | | - require.Nil(t, err) |
196 | | - assert.Equal(t, proj, project) |
| 175 | + store.EXPECT().GetOverridesForProject(gomock.Any(), projKey).Return(model.Overrides{}, nil) |
| 176 | + |
| 177 | + _, err := model.UpdateProject(ctx, projKey, nil, nil) |
| 178 | + assert.NoError(t, err) |
197 | 179 | }) |
198 | 180 | } |
199 | 181 |
|
|
0 commit comments