@@ -2104,206 +2104,5 @@ def build_datafile(experiments: [], rollouts: [], feature_flags: [])
21042104 expect ( experiment [ 'trafficAllocation' ] . length ) . to eq ( 1 )
21052105 end
21062106
2107- it 'should use the LAST rollout rule for everyone else variation' do
2108- datafile = build_datafile (
2109- experiments : [
2110- {
2111- 'id' => 'exp_fr' ,
2112- 'key' => 'feature_rollout_exp' ,
2113- 'status' => 'Running' ,
2114- 'forcedVariations' => { } ,
2115- 'layerId' => 'layer_1' ,
2116- 'audienceIds' => [ ] ,
2117- 'trafficAllocation' => [ { 'entityId' => 'fr_var' , 'endOfRange' => 5000 } ] ,
2118- 'variations' => [
2119- { 'key' => 'fr_var' , 'id' => 'fr_var' , 'featureEnabled' => true }
2120- ] ,
2121- 'type' => 'feature_rollout'
2122- }
2123- ] ,
2124- rollouts : [
2125- {
2126- 'id' => 'rollout_1' ,
2127- 'experiments' => [
2128- {
2129- 'id' => 'targeted_rule_1' ,
2130- 'key' => 'targeted_rule_1' ,
2131- 'status' => 'Running' ,
2132- 'forcedVariations' => { } ,
2133- 'layerId' => 'rollout_1' ,
2134- 'audienceIds' => [ 'aud_1' ] ,
2135- 'trafficAllocation' => [ { 'entityId' => 'targeted_var_1' , 'endOfRange' => 10_000 } ] ,
2136- 'variations' => [
2137- { 'key' => 'targeted_var_1' , 'id' => 'targeted_var_1' , 'featureEnabled' => true }
2138- ]
2139- } ,
2140- {
2141- 'id' => 'targeted_rule_2' ,
2142- 'key' => 'targeted_rule_2' ,
2143- 'status' => 'Running' ,
2144- 'forcedVariations' => { } ,
2145- 'layerId' => 'rollout_1' ,
2146- 'audienceIds' => [ 'aud_2' ] ,
2147- 'trafficAllocation' => [ { 'entityId' => 'targeted_var_2' , 'endOfRange' => 10_000 } ] ,
2148- 'variations' => [
2149- { 'key' => 'targeted_var_2' , 'id' => 'targeted_var_2' , 'featureEnabled' => true }
2150- ]
2151- } ,
2152- {
2153- 'id' => 'everyone_else_rule' ,
2154- 'key' => 'everyone_else_rule' ,
2155- 'status' => 'Running' ,
2156- 'forcedVariations' => { } ,
2157- 'layerId' => 'rollout_1' ,
2158- 'audienceIds' => [ ] ,
2159- 'trafficAllocation' => [ { 'entityId' => 'correct_everyone_var' , 'endOfRange' => 10_000 } ] ,
2160- 'variations' => [
2161- { 'key' => 'correct_everyone_var' , 'id' => 'correct_everyone_var' , 'featureEnabled' => false }
2162- ]
2163- }
2164- ]
2165- }
2166- ] ,
2167- feature_flags : [
2168- {
2169- 'id' => 'flag_1' ,
2170- 'key' => 'test_flag' ,
2171- 'experimentIds' => [ 'exp_fr' ] ,
2172- 'rolloutId' => 'rollout_1' ,
2173- 'variables' => [ ]
2174- }
2175- ]
2176- )
2177-
2178- config = Optimizely ::DatafileProjectConfig . new ( JSON . dump ( datafile ) , logger , error_handler )
2179- experiment = config . experiment_id_map [ 'exp_fr' ]
2180-
2181- variation_ids = experiment [ 'variations' ] . map { |v | v [ 'id' ] }
2182- expect ( variation_ids ) . to include ( 'correct_everyone_var' )
2183- expect ( variation_ids ) . not_to include ( 'targeted_var_1' )
2184- expect ( variation_ids ) . not_to include ( 'targeted_var_2' )
2185- end
2186-
2187- it 'should preserve featureEnabled value on injected variation' do
2188- datafile = build_datafile (
2189- experiments : [
2190- {
2191- 'id' => 'exp_fr' ,
2192- 'key' => 'feature_rollout_exp' ,
2193- 'status' => 'Running' ,
2194- 'forcedVariations' => { } ,
2195- 'layerId' => 'layer_1' ,
2196- 'audienceIds' => [ ] ,
2197- 'trafficAllocation' => [ { 'entityId' => 'rollout_var' , 'endOfRange' => 5000 } ] ,
2198- 'variations' => [
2199- { 'key' => 'rollout_var' , 'id' => 'rollout_var' , 'featureEnabled' => true }
2200- ] ,
2201- 'type' => 'feature_rollout'
2202- }
2203- ] ,
2204- rollouts : [
2205- {
2206- 'id' => 'rollout_1' ,
2207- 'experiments' => [
2208- {
2209- 'id' => 'rollout_everyone_else' ,
2210- 'key' => 'rollout_everyone_else' ,
2211- 'status' => 'Running' ,
2212- 'forcedVariations' => { } ,
2213- 'layerId' => 'rollout_1' ,
2214- 'audienceIds' => [ ] ,
2215- 'trafficAllocation' => [ { 'entityId' => 'everyone_else_var' , 'endOfRange' => 10_000 } ] ,
2216- 'variations' => [
2217- { 'key' => 'everyone_else_var' , 'id' => 'everyone_else_var' , 'featureEnabled' => false }
2218- ]
2219- }
2220- ]
2221- }
2222- ] ,
2223- feature_flags : [
2224- {
2225- 'id' => 'flag_1' ,
2226- 'key' => 'test_flag' ,
2227- 'experimentIds' => [ 'exp_fr' ] ,
2228- 'rolloutId' => 'rollout_1' ,
2229- 'variables' => [ ]
2230- }
2231- ]
2232- )
2233-
2234- config = Optimizely ::DatafileProjectConfig . new ( JSON . dump ( datafile ) , logger , error_handler )
2235- experiment = config . experiment_id_map [ 'exp_fr' ]
2236-
2237- injected = experiment [ 'variations' ] . find { |v | v [ 'id' ] == 'everyone_else_var' }
2238- expect ( injected ) . not_to be_nil
2239- expect ( injected [ 'featureEnabled' ] ) . to eq ( false )
2240- end
2241-
2242- it 'should propagate variables from the everyone else variation' do
2243- datafile = build_datafile (
2244- experiments : [
2245- {
2246- 'id' => 'exp_fr' ,
2247- 'key' => 'feature_rollout_exp' ,
2248- 'status' => 'Running' ,
2249- 'forcedVariations' => { } ,
2250- 'layerId' => 'layer_1' ,
2251- 'audienceIds' => [ ] ,
2252- 'trafficAllocation' => [ { 'entityId' => 'rollout_var' , 'endOfRange' => 5000 } ] ,
2253- 'variations' => [
2254- { 'key' => 'rollout_var' , 'id' => 'rollout_var' , 'featureEnabled' => true }
2255- ] ,
2256- 'type' => 'feature_rollout'
2257- }
2258- ] ,
2259- rollouts : [
2260- {
2261- 'id' => 'rollout_1' ,
2262- 'experiments' => [
2263- {
2264- 'id' => 'rollout_everyone_else' ,
2265- 'key' => 'rollout_everyone_else' ,
2266- 'status' => 'Running' ,
2267- 'forcedVariations' => { } ,
2268- 'layerId' => 'rollout_1' ,
2269- 'audienceIds' => [ ] ,
2270- 'trafficAllocation' => [ { 'entityId' => 'everyone_else_var' , 'endOfRange' => 10_000 } ] ,
2271- 'variations' => [
2272- {
2273- 'key' => 'everyone_else_var' ,
2274- 'id' => 'everyone_else_var' ,
2275- 'featureEnabled' => false ,
2276- 'variables' => [
2277- { 'id' => 'var_1' , 'value' => 'default_value' }
2278- ]
2279- }
2280- ]
2281- }
2282- ]
2283- }
2284- ] ,
2285- feature_flags : [
2286- {
2287- 'id' => 'flag_1' ,
2288- 'key' => 'test_flag' ,
2289- 'experimentIds' => [ 'exp_fr' ] ,
2290- 'rolloutId' => 'rollout_1' ,
2291- 'variables' => [ ]
2292- }
2293- ]
2294- )
2295-
2296- config = Optimizely ::DatafileProjectConfig . new ( JSON . dump ( datafile ) , logger , error_handler )
2297- experiment = config . experiment_id_map [ 'exp_fr' ]
2298-
2299- injected = experiment [ 'variations' ] . find { |v | v [ 'id' ] == 'everyone_else_var' }
2300- expect ( injected ) . not_to be_nil
2301- expect ( injected [ 'variables' ] ) . to eq ( [ { 'id' => 'var_1' , 'value' => 'default_value' } ] )
2302-
2303- # Verify variation_id_to_variable_usage_map is populated
2304- variable_usage = config . variation_id_to_variable_usage_map [ 'everyone_else_var' ]
2305- expect ( variable_usage ) . not_to be_nil
2306- expect ( variable_usage ) . to have_key ( 'var_1' )
2307- end
23082107 end
23092108end
0 commit comments