@@ -13,10 +13,12 @@ import (
1313)
1414
1515func TestUpsertOverride (t * testing.T ) {
16+ t .Parallel ()
1617 ctx := context .Background ()
1718 mockController := gomock .NewController (t )
19+ defer mockController .Finish ()
1820 store := mocks .NewMockStore (mockController )
19- projKey := "proj"
21+ projKey := t . Name ()
2022 flagKey := "flg"
2123 ldValue := ldvalue .Bool (true )
2224 override := model.Override {
@@ -45,7 +47,6 @@ func TestUpsertOverride(t *testing.T) {
4547
4648 _ , err := model .UpsertOverride (ctx , projKey , flagKey , ldValue )
4749 assert .Error (t , err )
48- assert .Contains (t , err .Error (), "project does not exist within dev server" )
4950 })
5051
5152 t .Run ("Returns error if flag does not exist in project" , func (t * testing.T ) {
@@ -57,7 +58,7 @@ func TestUpsertOverride(t *testing.T) {
5758
5859 _ , err := model .UpsertOverride (ctx , projKey , flagKey , ldValue )
5960 assert .Error (t , err )
60- assert .Contains (t , err . Error (), "flag does not exist within dev project" )
61+ assert .ErrorIs (t , model . ErrNotFound , err )
6162 })
6263
6364 t .Run ("store fails to upsert, returns error" , func (t * testing.T ) {
@@ -74,7 +75,7 @@ func TestUpsertOverride(t *testing.T) {
7475 store .EXPECT ().UpsertOverride (gomock .Any (), override ).Return (override , nil )
7576 observer .
7677 EXPECT ().
77- Handle (model.UpsertOverrideEvent {
78+ Handle (model.OverrideEvent {
7879 FlagKey : flagKey ,
7980 ProjectKey : projKey ,
8081 FlagState : model.FlagState {Value : ldvalue .Bool (true ), Version : 2 },
@@ -86,6 +87,63 @@ func TestUpsertOverride(t *testing.T) {
8687 })
8788}
8889
90+ func TestDeleteOverride (t * testing.T ) {
91+ t .Parallel ()
92+ ctx := context .Background ()
93+ mockController := gomock .NewController (t )
94+ defer mockController .Finish ()
95+ store := mocks .NewMockStore (mockController )
96+ projKey := t .Name ()
97+ flagKey := "flg"
98+ ldValue := ldvalue .Bool (true )
99+
100+ project := & model.Project {
101+ Key : projKey ,
102+ AllFlagsState : model.FlagsState {flagKey : model.FlagState {Value : ldvalue .Bool (false ), Version : 1 }},
103+ }
104+
105+ ctx = model .ContextWithStore (ctx , store )
106+
107+ observers := model .NewObservers ()
108+ observer := mocks .NewMockObserver (mockController )
109+
110+ observers .RegisterObserver (observer )
111+ ctx = model .SetObserversOnContext (ctx , observers )
112+
113+ t .Run ("store unable to get project, returns error" , func (t * testing.T ) {
114+ store .EXPECT ().GetDevProject (gomock .Any (), projKey ).Return (nil , errors .New ("test 2" ))
115+
116+ _ , err := model .UpsertOverride (ctx , projKey , flagKey , ldValue )
117+ assert .Error (t , err )
118+ })
119+
120+ t .Run ("Returns error if store errors on delete" , func (t * testing.T ) {
121+ store .EXPECT ().GetDevProject (gomock .Any (), projKey ).Return (project , nil )
122+ store .EXPECT ().DeactivateOverride (gomock .Any (), projKey , flagKey ).Return (0 , errors .New ("store error on deactive override" ))
123+
124+ err := model .DeleteOverride (ctx , projKey , flagKey )
125+ assert .Error (t , err )
126+ })
127+
128+ t .Run ("override is applied, observers are notified" , func (t * testing.T ) {
129+ store .EXPECT ().GetDevProject (gomock .Any (), projKey ).Return (project , nil )
130+ store .EXPECT ().DeactivateOverride (gomock .Any (), projKey , flagKey ).Return (2 , nil )
131+ observer .
132+ EXPECT ().
133+ Handle (model.OverrideEvent {
134+ FlagKey : flagKey ,
135+ ProjectKey : projKey ,
136+ FlagState : model.FlagState {
137+ Value : ldvalue .Bool (false ),
138+ Version : 3 , // override version 2 + flag version 1
139+ },
140+ })
141+
142+ err := model .DeleteOverride (ctx , projKey , flagKey )
143+ assert .Nil (t , err )
144+ })
145+ }
146+
89147func TestOverrideApply (t * testing.T ) {
90148 projKey := "proj"
91149 flagKey := "flg"
0 commit comments