示例#1
0
 def test_rep(self):
     assert repr(Experiment(
         Mock(),
         'show_promo',
         datetime.utcnow(),
         ['True', 'False']
     )) == 'Experiment: show_promo <True|False>'
示例#2
0
    def test_experiment_save_conflict(self, save_experiment, get_experiment):
        """
        If an experiment is saved with a certain name and variants, and then
        is created later with a different set of variants, e.g.,

        split('show_promo', ('True', True), ('False', False))
        split('show_promo', ('T', True), ('F', False))

        ...an exception should be thrown.
        """
        backend = FakeBackend()
        created = Experiment(backend=backend,
                             name='show_promo',
                             started_on=datetime.utcnow(),
                             variants=['True', 'False'])
        get_experiment.side_effect = [
            None,  # the first call fails
            created,  # but the second call succeeds after a successful save
            created
        ]
        cleaver = Cleaver({}, FakeIdentityProvider(), backend)

        assert cleaver.split('show_promo') in (True, False)
        get_experiment.assert_called_with('show_promo', ('True', 'False'))
        save_experiment.assert_called_with('show_promo', ('True', 'False'))

        self.assertRaises(RuntimeError, cleaver.split, 'show_promo',
                          ('T', True), ('F', False))
示例#3
0
 def test_control(self):
     experiment = Experiment(
         Mock(),
         'show_promo',
         datetime,
         ['True', 'False']
     )
     assert experiment.control == 'True'
示例#4
0
    def test_experiment_get(self, get_experiment):
        backend = FakeBackend()
        get_experiment.return_value = Experiment(backend=backend,
                                                 name='show_promo',
                                                 started_on=datetime.utcnow(),
                                                 variants=['True', 'False'])
        cleaver = Cleaver({}, FakeIdentityProvider(), backend)

        assert cleaver.split('show_promo') in (True, False)
        get_experiment.assert_called_with('show_promo', ('True', 'False'))
示例#5
0
    def test_default_human_verification(self, mark_human, get_experiment):
        backend = FakeBackend()
        get_experiment.return_value = Experiment(backend=backend,
                                                 name='show_promo',
                                                 started_on=datetime.utcnow(),
                                                 variants=['True', 'False'])
        cleaver = Cleaver({}, FakeIdentityProvider(), backend)

        assert cleaver.split('show_promo') in (True, False)
        mark_human.assert_called_with('ABC123')
示例#6
0
    def test_conversions(self):
        backend = Mock()
        backend.conversions = lambda name, v: 50

        assert Experiment(
            backend,
            'show_promo',
            datetime.utcnow(),
            ['True', 'False']
        ).conversions == 100
示例#7
0
    def test_participants(self):
        backend = Mock()
        backend.participants = lambda name, v: 50

        assert Experiment(
            backend,
            'show_promo',
            datetime.utcnow(),
            ['True', 'False']
        ).participants == 100
示例#8
0
    def test_experiment_save(self, save_experiment, get_experiment):
        backend = FakeBackend()
        get_experiment.side_effect = [
            None,  # the first call fails
            Experiment(
                backend=backend,
                name='show_promo',
                started_on=datetime.utcnow(),
                variants=[
                    'True', 'False'
                ])  # but the second call succeeds after a successful save
        ]
        cleaver = Cleaver({}, FakeIdentityProvider(), backend)

        assert cleaver.split('show_promo') in (True, False)
        get_experiment.assert_called_with('show_promo', ('True', 'False'))
        save_experiment.assert_called_with('show_promo', ('True', 'False'))
示例#9
0
 def all_experiments(self):
     return [
         Experiment(self, 'show_promo', datetime.utcnow(),
                    ['True', 'False'])
     ]
示例#10
0
    def test_all(self):
        backend = Mock()
        backend.all_experiments = lambda: [Mock(), Mock(), Mock()]

        assert len(Experiment.all(backend)) == 3