1+ import pytest
2+
3+ from splitio .storage import FlagSetsFilter
4+ from splitio .storage .inmemmory import FlagSets , FlagSetsAsync
5+
6+ class FlagSetsFilterTests (object ):
7+ """Flag sets filter storage tests."""
8+ def test_without_initial_set (self ):
9+ flag_set = FlagSets ()
10+ assert flag_set .sets_feature_flag_map == {}
11+
12+ flag_set .add_flag_set ('set1' )
13+ assert flag_set .get_flag_set ('set1' ) == set ({})
14+ assert flag_set .flag_set_exist ('set1' ) == True
15+ assert flag_set .flag_set_exist ('set2' ) == False
16+
17+ flag_set .add_feature_flag_to_flag_set ('set1' , 'split1' )
18+ assert flag_set .get_flag_set ('set1' ) == {'split1' }
19+ flag_set .add_feature_flag_to_flag_set ('set1' , 'split2' )
20+ assert flag_set .get_flag_set ('set1' ) == {'split1' , 'split2' }
21+ flag_set .remove_feature_flag_to_flag_set ('set1' , 'split1' )
22+ assert flag_set .get_flag_set ('set1' ) == {'split2' }
23+ flag_set .remove_flag_set ('set2' )
24+ assert flag_set .sets_feature_flag_map == {'set1' : set ({'split2' })}
25+ flag_set .remove_flag_set ('set1' )
26+ assert flag_set .sets_feature_flag_map == {}
27+ assert flag_set .flag_set_exist ('set1' ) == False
28+
29+ def test_with_initial_set (self ):
30+ flag_set = FlagSets (['set1' , 'set2' ])
31+ assert flag_set .sets_feature_flag_map == {'set1' : set (), 'set2' : set ()}
32+
33+ flag_set .add_flag_set ('set1' )
34+ assert flag_set .get_flag_set ('set1' ) == set ({})
35+ assert flag_set .flag_set_exist ('set1' ) == True
36+ assert flag_set .flag_set_exist ('set2' ) == True
37+
38+ flag_set .add_feature_flag_to_flag_set ('set1' , 'split1' )
39+ assert flag_set .get_flag_set ('set1' ) == {'split1' }
40+ flag_set .add_feature_flag_to_flag_set ('set1' , 'split2' )
41+ assert flag_set .get_flag_set ('set1' ) == {'split1' , 'split2' }
42+ flag_set .remove_feature_flag_to_flag_set ('set1' , 'split1' )
43+ assert flag_set .get_flag_set ('set1' ) == {'split2' }
44+ flag_set .remove_flag_set ('set2' )
45+ assert flag_set .sets_feature_flag_map == {'set1' : set ({'split2' })}
46+ flag_set .remove_flag_set ('set1' )
47+ assert flag_set .sets_feature_flag_map == {}
48+ assert flag_set .flag_set_exist ('set1' ) == False
49+
50+ @pytest .mark .asyncio
51+ async def test_without_initial_set_async (self ):
52+ flag_set = FlagSetsAsync ()
53+ assert flag_set .sets_feature_flag_map == {}
54+
55+ await flag_set .add_flag_set ('set1' )
56+ assert await flag_set .get_flag_set ('set1' ) == set ({})
57+ assert await flag_set .flag_set_exist ('set1' ) == True
58+ assert await flag_set .flag_set_exist ('set2' ) == False
59+
60+ await flag_set .add_feature_flag_to_flag_set ('set1' , 'split1' )
61+ assert await flag_set .get_flag_set ('set1' ) == {'split1' }
62+ await flag_set .add_feature_flag_to_flag_set ('set1' , 'split2' )
63+ assert await flag_set .get_flag_set ('set1' ) == {'split1' , 'split2' }
64+ await flag_set .remove_feature_flag_to_flag_set ('set1' , 'split1' )
65+ assert await flag_set .get_flag_set ('set1' ) == {'split2' }
66+ await flag_set .remove_flag_set ('set2' )
67+ assert flag_set .sets_feature_flag_map == {'set1' : set ({'split2' })}
68+ await flag_set .remove_flag_set ('set1' )
69+ assert flag_set .sets_feature_flag_map == {}
70+ assert await flag_set .flag_set_exist ('set1' ) == False
71+
72+ @pytest .mark .asyncio
73+ async def test_with_initial_set_async (self ):
74+ flag_set = FlagSetsAsync (['set1' , 'set2' ])
75+ assert flag_set .sets_feature_flag_map == {'set1' : set (), 'set2' : set ()}
76+
77+ await flag_set .add_flag_set ('set1' )
78+ assert await flag_set .get_flag_set ('set1' ) == set ({})
79+ assert await flag_set .flag_set_exist ('set1' ) == True
80+ assert await flag_set .flag_set_exist ('set2' ) == True
81+
82+ await flag_set .add_feature_flag_to_flag_set ('set1' , 'split1' )
83+ assert await flag_set .get_flag_set ('set1' ) == {'split1' }
84+ await flag_set .add_feature_flag_to_flag_set ('set1' , 'split2' )
85+ assert await flag_set .get_flag_set ('set1' ) == {'split1' , 'split2' }
86+ await flag_set .remove_feature_flag_to_flag_set ('set1' , 'split1' )
87+ assert await flag_set .get_flag_set ('set1' ) == {'split2' }
88+ await flag_set .remove_flag_set ('set2' )
89+ assert flag_set .sets_feature_flag_map == {'set1' : set ({'split2' })}
90+ await flag_set .remove_flag_set ('set1' )
91+ assert flag_set .sets_feature_flag_map == {}
92+ assert await flag_set .flag_set_exist ('set1' ) == False
93+
94+ def test_flag_set_filter (self ):
95+ flag_set_filter = FlagSetsFilter ()
96+ assert flag_set_filter .flag_sets == set ()
97+ assert not flag_set_filter .should_filter
98+
99+ flag_set_filter = FlagSetsFilter (['set1' , 'set2' ])
100+ assert flag_set_filter .flag_sets == set ({'set1' , 'set2' })
101+ assert flag_set_filter .should_filter
102+ assert flag_set_filter .intersect (set ({'set1' , 'set2' }))
103+ assert flag_set_filter .intersect (set ({'set1' , 'set2' , 'set5' }))
104+ assert not flag_set_filter .intersect (set ({'set4' }))
105+ assert not flag_set_filter .set_exist ('set4' )
106+ assert flag_set_filter .set_exist ('set1' )
107+
108+ flag_set_filter = FlagSetsFilter (['set5' , 'set2' , 'set6' , 'set1' ])
109+ assert flag_set_filter .sorted_flag_sets == ['set1' , 'set2' , 'set5' , 'set6' ]
0 commit comments