|
349 | 349 | # any string that is not an experiment id in the data file
|
350 | 350 | feature_flag['experimentIds'] = ['1333333337']
|
351 | 351 | expect(decision_service.get_variation_for_feature_experiment(feature_flag, user_id, user_attributes)).to eq(nil)
|
352 |
| - |
353 | 352 | expect(spy_logger).to have_received(:log).once
|
354 | 353 | .with(Logger::DEBUG, "Feature flag experiment with ID '1333333337' is not in the datafile.")
|
355 | 354 | end
|
|
384 | 383 | it 'should return the variation' do
|
385 | 384 | user_attributes = {}
|
386 | 385 | feature_flag = config.feature_flag_key_map['multi_variate_feature']
|
387 |
| - expected_decision = { |
388 |
| - 'experiment' => config.experiment_key_map['test_experiment_multivariate'], |
389 |
| - 'variation' => config.variation_id_map['test_experiment_multivariate']['122231'] |
390 |
| - } |
| 386 | + expected_decision = Optimizely::DecisionService::Decision.new( |
| 387 | + config.experiment_key_map['test_experiment_multivariate'], |
| 388 | + config.variation_id_map['test_experiment_multivariate']['122231'], |
| 389 | + Optimizely::DecisionService::DECISION_SOURCE_EXPERIMENT |
| 390 | + ) |
391 | 391 | expect(decision_service.get_variation_for_feature_experiment(feature_flag, 'user_1', user_attributes)).to eq(expected_decision)
|
392 | 392 |
|
393 | 393 | expect(spy_logger).to have_received(:log).once
|
|
402 | 402 | describe 'and the user is bucketed into one of the experiments' do
|
403 | 403 | before(:each) do
|
404 | 404 | mutex_exp = config.experiment_key_map['group1_exp1']
|
405 |
| - expected_variation = mutex_exp['variations'][0] |
406 |
| - expected_decision = { |
407 |
| - 'experiment' => mutex_exp, |
408 |
| - 'variation' => expected_variation |
409 |
| - } |
| 405 | + variation = mutex_exp['variations'][0] |
| 406 | + expected_decision = Optimizely::DecisionService::Decision.new( |
| 407 | + mutex_exp, |
| 408 | + variation, |
| 409 | + Optimizely::DecisionService::DECISION_SOURCE_EXPERIMENT |
| 410 | + ) |
410 | 411 | allow(decision_service).to receive(:get_variation)
|
411 |
| - .and_return(expected_variation['id']) |
| 412 | + .and_return(variation['id']) |
412 | 413 | end
|
413 | 414 |
|
414 | 415 | it 'should return the variation the user is bucketed into' do
|
|
483 | 484 | it 'should return the variation the user is bucketed into' do
|
484 | 485 | feature_flag = config.feature_flag_key_map['boolean_single_variable_feature']
|
485 | 486 | rollout_experiment = config.rollout_id_map[feature_flag['rolloutId']]['experiments'][0]
|
486 |
| - expected_variation = rollout_experiment['variations'][0] |
| 487 | + variation = rollout_experiment['variations'][0] |
487 | 488 | audience_id = rollout_experiment['audienceIds'][0]
|
488 | 489 | audience_name = config.get_audience_from_id(audience_id)['name']
|
| 490 | + expected_decision = Optimizely::DecisionService::Decision.new(rollout_experiment, variation, Optimizely::DecisionService::DECISION_SOURCE_ROLLOUT) |
489 | 491 |
|
490 | 492 | allow(Optimizely::Audience).to receive(:user_in_experiment?).and_return(true)
|
491 | 493 | allow(decision_service.bucketer).to receive(:bucket)
|
492 | 494 | .with(rollout_experiment, user_id, user_id)
|
493 |
| - .and_return(expected_variation) |
494 |
| - expect(decision_service.get_variation_for_feature_rollout(feature_flag, user_id, user_attributes)).to eq(expected_variation) |
| 495 | + .and_return(variation) |
| 496 | + expect(decision_service.get_variation_for_feature_rollout(feature_flag, user_id, user_attributes)).to eq(expected_decision) |
495 | 497 |
|
496 | 498 | expect(spy_logger).to have_received(:log).once
|
497 | 499 | .with(Logger::DEBUG, "Attempting to bucket user '#{user_id}' into rollout rule "\
|
|
542 | 544 | feature_flag = config.feature_flag_key_map['boolean_single_variable_feature']
|
543 | 545 | rollout = config.rollout_id_map[feature_flag['rolloutId']]
|
544 | 546 | everyone_else_experiment = rollout['experiments'][2]
|
545 |
| - expected_variation = everyone_else_experiment['variations'][0] |
546 |
| - |
| 547 | + variation = everyone_else_experiment['variations'][0] |
| 548 | + expected_decision = Optimizely::DecisionService::Decision.new(everyone_else_experiment, variation, Optimizely::DecisionService::DECISION_SOURCE_ROLLOUT) |
547 | 549 | allow(Optimizely::Audience).to receive(:user_in_experiment?).and_return(true)
|
548 | 550 | allow(decision_service.bucketer).to receive(:bucket)
|
549 | 551 | .with(rollout['experiments'][0], user_id, user_id)
|
550 | 552 | .and_return(nil)
|
551 | 553 | allow(decision_service.bucketer).to receive(:bucket)
|
552 | 554 | .with(everyone_else_experiment, user_id, user_id)
|
553 |
| - .and_return(expected_variation) |
| 555 | + .and_return(variation) |
554 | 556 |
|
555 |
| - expect(decision_service.get_variation_for_feature_rollout(feature_flag, user_id, user_attributes)).to eq(expected_variation) |
| 557 | + expect(decision_service.get_variation_for_feature_rollout(feature_flag, user_id, user_attributes)).to eq(expected_decision) |
556 | 558 |
|
557 | 559 | # make sure we only checked the audience for the first rule
|
558 | 560 | expect(Optimizely::Audience).to have_received(:user_in_experiment?).once
|
|
579 | 581 | feature_flag = config.feature_flag_key_map['boolean_single_variable_feature']
|
580 | 582 | rollout = config.rollout_id_map[feature_flag['rolloutId']]
|
581 | 583 | everyone_else_experiment = rollout['experiments'][2]
|
582 |
| - expected_variation = everyone_else_experiment['variations'][0] |
| 584 | + variation = everyone_else_experiment['variations'][0] |
| 585 | + expected_decision = Optimizely::DecisionService::Decision.new(everyone_else_experiment, variation, Optimizely::DecisionService::DECISION_SOURCE_ROLLOUT) |
583 | 586 |
|
584 | 587 | allow(Optimizely::Audience).to receive(:user_in_experiment?).and_return(false)
|
585 | 588 | allow(decision_service.bucketer).to receive(:bucket)
|
586 | 589 | .with(everyone_else_experiment, user_id, user_id)
|
587 |
| - .and_return(expected_variation) |
| 590 | + .and_return(variation) |
588 | 591 |
|
589 |
| - expect(decision_service.get_variation_for_feature_rollout(feature_flag, user_id, user_attributes)).to eq(expected_variation) |
| 592 | + expect(decision_service.get_variation_for_feature_rollout(feature_flag, user_id, user_attributes)).to eq(expected_decision) |
590 | 593 |
|
591 | 594 | # verify we tried to bucket in all targeting rules except for the everyone else rule
|
592 | 595 | expect(Optimizely::Audience).to have_received(:user_in_experiment?).once
|
|
636 | 639 | it 'should return the bucketed variation and nil experiment' do
|
637 | 640 | feature_flag = config.feature_flag_key_map['string_single_variable_feature']
|
638 | 641 | rollout = config.rollout_id_map[feature_flag['rolloutId']]
|
639 |
| - expected_variation = rollout['experiments'][0]['variations'][0] |
640 |
| - expected_decision = { |
641 |
| - 'experiment' => nil, |
642 |
| - 'variation' => expected_variation |
643 |
| - } |
| 642 | + variation = rollout['experiments'][0]['variations'][0] |
| 643 | + expected_decision = Optimizely::DecisionService::Decision.new( |
| 644 | + nil, |
| 645 | + variation, |
| 646 | + Optimizely::DecisionService::DECISION_SOURCE_ROLLOUT |
| 647 | + ) |
| 648 | + |
644 | 649 | allow(decision_service).to receive(:get_variation_for_feature_experiment).and_return(nil)
|
645 |
| - allow(decision_service).to receive(:get_variation_for_feature_rollout).and_return(expected_variation) |
| 650 | + allow(decision_service).to receive(:get_variation_for_feature_rollout).and_return(expected_decision) |
646 | 651 |
|
647 | 652 | expect(decision_service.get_variation_for_feature(feature_flag, user_id, user_attributes)).to eq(expected_decision)
|
648 | 653 | expect(spy_logger).to have_received(:log).once
|
|
0 commit comments