@@ -26,16 +26,22 @@ defmodule FunWithFlags.SimpleStoreTest do
2626 assert { :ok , % Flag { name: ^ name , gates: [ ] } } = SimpleStore . lookup ( name )
2727
2828 SimpleStore . put ( name , gate )
29- assert { :ok , % Flag { name: ^ name , gates: [ ^ gate ] } } = SimpleStore . lookup ( name )
29+ { :ok , result } = SimpleStore . lookup ( name )
30+ assert % Flag { name: ^ name } = result
31+ assert [ persisted_gate ] = result . gates
32+ assert drop_timestamps ( persisted_gate ) == gate
3033
3134 gate2 = % Gate { gate | enabled: false }
3235 SimpleStore . put ( name , gate2 )
33- assert { :ok , % Flag { name: ^ name , gates: [ ^ gate2 ] } } = SimpleStore . lookup ( name )
34- refute match? { :ok , % Flag { name: ^ name , gates: [ ^ gate ] } } , SimpleStore . lookup ( name )
36+ { :ok , result2 } = SimpleStore . lookup ( name )
37+ assert % Flag { name: ^ name } = result2
38+ assert [ persisted_gate2 ] = result2 . gates
39+ assert drop_timestamps ( persisted_gate2 ) == gate2
3540 end
3641
3742 test "put() returns the tuple {:ok, %Flag{}}" , % { name: name , gate: gate , flag: flag } do
38- assert { :ok , ^ flag } = SimpleStore . put ( name , gate )
43+ { :ok , result } = SimpleStore . put ( name , gate )
44+ assert drop_timestamps ( result ) == flag
3945 end
4046
4147 @ tag :telemetry
@@ -91,27 +97,45 @@ defmodule FunWithFlags.SimpleStoreTest do
9197 SimpleStore . put ( name , bool_gate )
9298 SimpleStore . put ( name , group_gate )
9399 { :ok , flag } = SimpleStore . lookup ( name )
94- assert % Flag { name: ^ name , gates: [ ^ bool_gate , ^ group_gate ] } = flag
100+ assert % Flag { name: ^ name } = flag
101+ assert [ persisted_bool , persisted_group ] = flag . gates
102+ assert drop_timestamps ( persisted_bool ) == bool_gate
103+ assert drop_timestamps ( persisted_group ) == group_gate
95104
96- { :ok , name: name , bool_gate: bool_gate , group_gate: group_gate }
105+ { :ok , name: name , bool_gate: persisted_bool , group_gate: persisted_group }
97106 end
98107
99108 test "delete(flag_name, gate) can change the value of a flag" , % { name: name , bool_gate: bool_gate , group_gate: group_gate } do
100- assert { :ok , % Flag { name: ^ name , gates: [ ^ bool_gate , ^ group_gate ] } } = SimpleStore . lookup ( name )
109+ { :ok , flag } = SimpleStore . lookup ( name )
110+ assert % Flag { name: ^ name } = flag
111+ assert length ( flag . gates ) == 2
101112
102113 SimpleStore . delete ( name , bool_gate )
103- assert { :ok , % Flag { name: ^ name , gates: [ ^ group_gate ] } } = SimpleStore . lookup ( name )
114+ { :ok , flag2 } = SimpleStore . lookup ( name )
115+ assert % Flag { name: ^ name } = flag2
116+ assert [ remaining_gate ] = flag2 . gates
117+ assert drop_timestamps ( remaining_gate ) == drop_timestamps ( group_gate )
118+
104119 SimpleStore . delete ( name , group_gate )
105120 assert { :ok , % Flag { name: ^ name , gates: [ ] } } = SimpleStore . lookup ( name )
106121 end
107122
108123 test "delete(flag_name, gate) returns the tuple {:ok, %Flag{}}" , % { name: name , bool_gate: bool_gate , group_gate: group_gate } do
109- assert { :ok , % Flag { name: ^ name , gates: [ ^ group_gate ] } } = SimpleStore . delete ( name , bool_gate )
124+ { :ok , result } = SimpleStore . delete ( name , bool_gate )
125+ assert % Flag { name: ^ name } = result
126+ assert [ remaining_gate ] = result . gates
127+ assert drop_timestamps ( remaining_gate ) == drop_timestamps ( group_gate )
110128 end
111129
112130 test "deleting is safe and idempotent" , % { name: name , bool_gate: bool_gate , group_gate: group_gate } do
113- assert { :ok , % Flag { name: ^ name , gates: [ ^ group_gate ] } } = SimpleStore . delete ( name , bool_gate )
114- assert { :ok , % Flag { name: ^ name , gates: [ ^ group_gate ] } } = SimpleStore . delete ( name , bool_gate )
131+ { :ok , result1 } = SimpleStore . delete ( name , bool_gate )
132+ assert [ g1 ] = result1 . gates
133+ assert drop_timestamps ( g1 ) == drop_timestamps ( group_gate )
134+
135+ { :ok , result2 } = SimpleStore . delete ( name , bool_gate )
136+ assert [ g2 ] = result2 . gates
137+ assert drop_timestamps ( g2 ) == drop_timestamps ( group_gate )
138+
115139 assert { :ok , % Flag { name: ^ name , gates: [ ] } } = SimpleStore . delete ( name , group_gate )
116140 assert { :ok , % Flag { name: ^ name , gates: [ ] } } = SimpleStore . delete ( name , group_gate )
117141 end
@@ -169,13 +193,18 @@ defmodule FunWithFlags.SimpleStoreTest do
169193 SimpleStore . put ( name , bool_gate )
170194 SimpleStore . put ( name , group_gate )
171195 { :ok , flag } = SimpleStore . lookup ( name )
172- assert % Flag { name: ^ name , gates: [ ^ bool_gate , ^ group_gate ] } = flag
196+ assert % Flag { name: ^ name } = flag
197+ assert [ persisted_bool , persisted_group ] = flag . gates
198+ assert drop_timestamps ( persisted_bool ) == bool_gate
199+ assert drop_timestamps ( persisted_group ) == group_gate
173200
174- { :ok , name: name , bool_gate: bool_gate , group_gate: group_gate }
201+ { :ok , name: name , bool_gate: persisted_bool , group_gate: persisted_group }
175202 end
176203
177- test "delete(flag_name) will reset all the flag gates" , % { name: name , bool_gate: bool_gate , group_gate: group_gate } do
178- assert { :ok , % Flag { name: ^ name , gates: [ ^ bool_gate , ^ group_gate ] } } = SimpleStore . lookup ( name )
204+ test "delete(flag_name) will reset all the flag gates" , % { name: name } do
205+ { :ok , flag } = SimpleStore . lookup ( name )
206+ assert % Flag { name: ^ name } = flag
207+ assert length ( flag . gates ) == 2
179208
180209 SimpleStore . delete ( name )
181210 assert { :ok , % Flag { name: ^ name , gates: [ ] } } = SimpleStore . lookup ( name )
@@ -246,7 +275,10 @@ defmodule FunWithFlags.SimpleStoreTest do
246275
247276 assert { :ok , % Flag { name: ^ name , gates: [ ] } } = SimpleStore . lookup ( name )
248277 SimpleStore . put ( name , gate )
249- assert { :ok , % Flag { name: ^ name , gates: [ ^ gate ] } } = SimpleStore . lookup ( name )
278+ { :ok , result } = SimpleStore . lookup ( name )
279+ assert % Flag { name: ^ name } = result
280+ assert [ persisted_gate ] = result . gates
281+ assert drop_timestamps ( persisted_gate ) == gate
250282 end
251283
252284 @ tag :telemetry
@@ -327,12 +359,14 @@ defmodule FunWithFlags.SimpleStoreTest do
327359 { :ok , result } = SimpleStore . all_flags ( )
328360 assert 3 = length ( result )
329361
362+ result_without_timestamps = Enum . map ( result , & drop_timestamps / 1 )
363+
330364 for flag <- [
331365 % Flag { name: name1 , gates: [ g_1a , g_1b , g_1c ] } ,
332366 % Flag { name: name2 , gates: [ g_2a , g_2b ] } ,
333367 % Flag { name: name3 , gates: [ g_3a ] }
334368 ] do
335- assert flag in result
369+ assert flag in result_without_timestamps
336370 end
337371 end
338372
@@ -531,4 +565,12 @@ defmodule FunWithFlags.SimpleStoreTest do
531565 end
532566 end
533567 end
568+
569+ defp drop_timestamps ( % Gate { } = gate ) do
570+ % { gate | inserted_at: nil , updated_at: nil }
571+ end
572+
573+ defp drop_timestamps ( % Flag { } = flag ) do
574+ % { flag | last_modified_at: nil , gates: Enum . map ( flag . gates , & drop_timestamps / 1 ) }
575+ end
534576end
0 commit comments