コード例 #1
0
    def testAnonymousUser(self):
        experiment = Experiment(name="enabled")
        experiment.save()
        experiment.state = Experiment.ENABLED_STATE
        experiment.save()
        for i in range(100):
            user = TestUser()
            in_test = Experiment.test("enabled", user)
            anonymous_id = user.get_anonymous_id()
            self.assertNotEqual(None, anonymous_id)
            in_control = Experiment.control("enabled", user)
            self.assertEqual(user.get_anonymous_id(), anonymous_id)
            self.assertNotEqual(in_test, in_control)
            self.assertEqual(in_test, Experiment.test("enabled", user))
            self.assertEqual(user.get_anonymous_id(), anonymous_id)
            self.assertEqual(in_control, Experiment.control("enabled", user))
            self.assertEqual(user.get_anonymous_id(), anonymous_id)

            if in_test:
                test_user = user
            if in_control:
                control_user = user

        self.assertTrue(test_user and control_user)

        user = TestUser()
        experiment = Experiment(name="disabled")
        experiment.save()
        self.assertFalse(Experiment.test("disabled", user))
        self.assertEqual(None, user.get_anonymous_id())
コード例 #2
0
    def testAnonymousUser(self):
        experiment = Experiment(name="enabled")
        experiment.save()
        experiment.state = Experiment.ENABLED_STATE
        experiment.save()
        for i in range(100):
            user = TestUser()
            in_test = Experiment.test("enabled", user)
            anonymous_id = user.get_anonymous_id()
            self.assertNotEquals(None, anonymous_id)
            in_control = Experiment.control("enabled", user)
            self.assertEquals(user.get_anonymous_id(), anonymous_id)
            self.assertNotEquals(in_test, in_control)
            self.assertEquals(in_test, Experiment.test("enabled", user))
            self.assertEquals(user.get_anonymous_id(), anonymous_id)
            self.assertEquals(in_control, Experiment.control("enabled", user))
            self.assertEquals(user.get_anonymous_id(), anonymous_id)

            if in_test:
                test_user = user
            if in_control:
                control_user = user

        self.assertTrue(test_user and control_user)

        user = TestUser()
        experiment = Experiment(name="disabled")
        experiment.save()
        self.assertFalse(Experiment.test("disabled", user))
        self.assertEquals(None, user.get_anonymous_id())
コード例 #3
0
 def testDisabledExperiment(self):
     # disabled test (unenrolled user)
     experiment = Experiment(name="disabled")
     experiment.save()
     user = TestUser(username="******")
     self.assertFalse(Experiment.test("disabled", user))
     self.assertTrue(Experiment.control("disabled", user))
コード例 #4
0
    def testUnknownExperiment(self):
        # unknown test (unenrolled user)
        user = TestUser(username="******")
        
        # unit tests are always run in DEBUG=False by Django
        self.assertFalse(Experiment.test("undefined", user))
        self.assertTrue(Experiment.control("undefined", user))

        try:
            settings.DEBUG = True
            self.assertRaises(Exception,
                              lambda: Experiment.test("undefined", user))
            self.assertRaises(Exception,
                              lambda: Experiment.control("undefined", user))
        finally:
            settings.DEBUG = False
コード例 #5
0
    def testUnknownExperiment(self):
        # unknown test (unenrolled user)
        user = TestUser(username="******")
        
        # unit tests are always run in DEBUG=False by Django
        self.assertFalse(Experiment.test("undefined", user))
        self.assertTrue(Experiment.control("undefined", user))

        try:
            settings.DEBUG = True
            self.assertRaises(Exception,
                              lambda: Experiment.test("undefined", user))
            self.assertRaises(Exception,
                              lambda: Experiment.control("undefined", user))
        finally:
            settings.DEBUG = False
コード例 #6
0
 def testDisabledExperiment(self):
     # disabled test (unenrolled user)
     experiment = Experiment(name="disabled")
     experiment.save()
     user = TestUser(username="******")
     self.assertFalse(Experiment.test("disabled", user))
     self.assertTrue(Experiment.control("disabled", user))
コード例 #7
0
 def testPromotedExperiment(self):
     # promoted test (unenrolled user)
     experiment = Experiment(name="promoted")
     experiment.save()
     experiment.state = Experiment.PROMOTED_STATE
     experiment.save()
     user = TestUser(username="******")
     self.assertTrue(Experiment.test("promoted", user))
     self.assertFalse(Experiment.control("promoted", user))
コード例 #8
0
 def testPromotedExperiment(self):
     # promoted test (unenrolled user)
     experiment = Experiment(name="promoted")
     experiment.save()
     experiment.state = Experiment.PROMOTED_STATE
     experiment.save()
     user = TestUser(username="******")
     self.assertTrue(Experiment.test("promoted", user))
     self.assertFalse(Experiment.control("promoted", user))
コード例 #9
0
    def testParticipantEnrollment(self):
        experiment1 = Experiment(name="Experiment 1")
        experiment1.save()
        experiment1.state = Experiment.ENABLED_STATE
        experiment1.save()
        experiment2 = Experiment(name="Experiment 2")
        experiment2.save()
        experiment2.state = Experiment.ENABLED_STATE
        experiment2.save()

        num_control1 = 0
        num_test1 = 0
        num_control2 = 0
        num_test2 = 0

        for i in range(1000):
            username = "******" % i
            in_test1 = Experiment.test(experiment1.name,
                                       TestUser(username=username))
            self.assertEquals(
                in_test1, not Experiment.control(experiment1.name,
                                                 TestUser(username=username)))
            if in_test1:
                num_test1 += 1
            else:
                num_control1 += 1

            in_test2 = not Experiment.control(experiment2.name,
                                              TestUser(username=username))
            self.assertEquals(
                in_test2,
                Experiment.test(experiment2.name, TestUser(username=username)))

            if in_test2:
                num_test2 += 1
            else:
                num_control2 += 1

        self.assert_(num_control1 > 400)
        self.assert_(num_control2 > 400)
        self.assert_(num_test1 > 400)
        self.assert_(num_test2 > 400)
コード例 #10
0
 def testParticipantEnrollment(self):
     experiment1 = Experiment(name="Experiment 1")
     experiment1.save()
     experiment1.state = Experiment.ENABLED_STATE
     experiment1.save()
     experiment2 = Experiment(name="Experiment 2")
     experiment2.save()
     experiment2.state = Experiment.ENABLED_STATE
     experiment2.save()
     
     num_control1 = 0
     num_test1 = 0
     num_control2 = 0
     num_test2 = 0
     
     for i in range(1000):
         username="******" % i
         in_test1 = Experiment.test(experiment1.name, TestUser(username=username))
         self.assertEquals(in_test1, not Experiment.control(experiment1.name,
                                                            TestUser(username=username)))
         if in_test1:
             num_test1 += 1
         else:
             num_control1 += 1
         
         in_test2 = not Experiment.control(experiment2.name, TestUser(username=username))
         self.assertEquals(in_test2, Experiment.test(experiment2.name,
                                                     TestUser(username=username)))
         
         if in_test2:
             num_test2 += 1
         else:
             num_control2 += 1
     
     self.assert_(num_control1 > 400)
     self.assert_(num_control2 > 400)
     self.assert_(num_test1 > 400)
     self.assert_(num_test2 > 400)
コード例 #11
0
 def testBotExclusion(self):
     experiment = Experiment(name="bot_experiment")
     experiment.save()
     experiment.state = Experiment.ENABLED_STATE
     experiment.save()
     
     user = TestUser(verified_human=False)
     participants_count = Participant.objects.all().count()
     in_test = Experiment.test(experiment.name, user)
     self.assertEquals(None, user.get_anonymous_id())
     self.assertEquals(participants_count, Participant.objects.all().count())
     
     enrollments = user.get_added_enrollments()
     self.assertEquals(len(enrollments.keys()), 1)
     self.assertTrue(experiment.name in enrollments.keys())
コード例 #12
0
ファイル: experiments.py プロジェクト: tibnor/django-lean
    def render(self, context):
        user = self.get_user(context)
        should_render = False

        if self.group_name == "test":
            should_render = Experiment.test(self.experiment_name, user)
        elif self.group_name == "control":
            should_render = Experiment.control(self.experiment_name, user)
        else:
            raise Exception("Unknown Experiment group name : %s" %
                            self.group_name)

        if should_render:
            return self.node_list.render(context)
        else:
            return ""
コード例 #13
0
 def render(self, context):
     user = self.get_user(context)
     should_render = False
     
     if self.group_name == "test":
         should_render = Experiment.test(self.experiment_name, user)
     elif self.group_name == "control":
         should_render = Experiment.control(self.experiment_name, user)
     else:
         raise Exception("Unknown Experiment group name : %s" %
                         self.group_name)
     
     if should_render:
         return self.node_list.render(context)
     else:
         return ""
コード例 #14
0
    def testBotExclusion(self):
        experiment = Experiment(name="bot_experiment")
        experiment.save()
        experiment.state = Experiment.ENABLED_STATE
        experiment.save()

        user = TestUser(verified_human=False)
        participants_count = Participant.objects.all().count()
        in_test = Experiment.test(experiment.name, user)
        self.assertEquals(None, user.get_anonymous_id())
        self.assertEquals(participants_count,
                          Participant.objects.all().count())

        enrollments = user.get_added_enrollments()
        self.assertEquals(len(enrollments.keys()), 1)
        self.assertTrue(experiment.name in enrollments.keys())
コード例 #15
0
ファイル: experiments.py プロジェクト: tibnor/django-lean
    def render(self, context):
        """
        Appends to a 'client_side_experiments' variable in the context. It
        will be the templates responsibility to render this list into the
        Javascript context.
        """
        if self.CONTEXT_KEY not in context:
            context[self.CONTEXT_KEY] = {}

        if self.experiment_name not in context[self.CONTEXT_KEY]:
            user = self.create_user(context)
            group = None

            if Experiment.test(self.experiment_name, user):
                group = "test"
            elif Experiment.control(self.experiment_name, user):
                group = "control"
            else:
                raise Exception("Unexpected test group for experiment %s" %
                                self.experiment_name)

            context[self.CONTEXT_KEY][self.experiment_name] = group
        return ""
コード例 #16
0
 def render(self, context):
     """
     Appends to a 'client_side_experiments' variable in the context. It
     will be the templates responsibility to render this list into the
     Javascript context.
     """
     if self.CONTEXT_KEY not in context:
         context[self.CONTEXT_KEY]= {}
     
     if self.experiment_name not in context[self.CONTEXT_KEY]:
         user = self.create_user(context)
         group = None
         
         if Experiment.test(self.experiment_name, user):
             group = "test"
         elif Experiment.control(self.experiment_name, user):
             group = "control"
         else:
             raise Exception("Unexpected test group for experiment %s" %
                             self.experiment_name)
         
         context[self.CONTEXT_KEY][self.experiment_name] = group
     return ""
コード例 #17
0
    def testEnabledPromotedAndDisabledExperiment(self):
        # enabled test, new user (prove we get both results)
        experiment = Experiment(name="enabled")
        experiment.save()
        experiment.state = Experiment.ENABLED_STATE
        experiment.save()
        test_user = None
        control_user = None
        for i in range(100):
            user = TestUser(username="******" % i)
            in_test = Experiment.test("enabled", user)
            in_control = Experiment.control("enabled", user)
            self.assertNotEqual(in_test, in_control)
            self.assertEqual(in_test, Experiment.test("enabled", user))
            self.assertEqual(in_control, Experiment.control("enabled", user))
            if in_test:
                test_user = user
            if in_control:
                control_user = user

        self.assertNotEqual(None, test_user)
        self.assertNotEqual(None, control_user)
        self.assertNotEqual(test_user, control_user)

        # promoted test with an enrolled user
        # (prove we get both results, then that all users are in test)
        experiment.state = Experiment.PROMOTED_STATE
        experiment.save()

        self.assertFalse(Experiment.control("enabled", control_user))
        self.assertFalse(Experiment.control("enabled", test_user))
        self.assertTrue(Experiment.test("enabled", control_user))
        self.assertTrue(Experiment.test("enabled", test_user))

        # disabled test with an enrolled user
        # (prove we get both results, then that all users are in control)
        experiment.state = Experiment.DISABLED_STATE
        experiment.save()

        self.assertTrue(Experiment.control("enabled", control_user))
        self.assertTrue(Experiment.control("enabled", test_user))
        self.assertFalse(Experiment.test("enabled", control_user))
        self.assertFalse(Experiment.test("enabled", test_user))
コード例 #18
0
    def testEnabledPromotedAndDisabledExperiment(self):
        # enabled test, new user (prove we get both results)
        experiment = Experiment(name="enabled")
        experiment.save()
        experiment.state = Experiment.ENABLED_STATE
        experiment.save()
        test_user = None
        control_user = None
        for i in range(100):
            user = TestUser(username="******" % i)
            in_test = Experiment.test("enabled", user)
            in_control = Experiment.control("enabled", user)
            self.assertNotEquals(in_test, in_control)
            self.assertEquals(in_test, Experiment.test("enabled", user))
            self.assertEquals(in_control, Experiment.control("enabled", user))
            if in_test:
                test_user = user
            if in_control:
                control_user = user

        self.assertNotEquals(None, test_user)
        self.assertNotEquals(None, control_user)
        self.assertNotEquals(test_user, control_user)

        # promoted test with an enrolled user
        # (prove we get both results, then that all users are in test)
        experiment.state = Experiment.PROMOTED_STATE
        experiment.save()

        self.assertFalse(Experiment.control("enabled", control_user))
        self.assertFalse(Experiment.control("enabled", test_user))
        self.assertTrue(Experiment.test("enabled", control_user))
        self.assertTrue(Experiment.test("enabled", test_user))

        # disabled test with an enrolled user
        # (prove we get both results, then that all users are in control)
        experiment.state = Experiment.DISABLED_STATE
        experiment.save()

        self.assertTrue(Experiment.control("enabled", control_user))
        self.assertTrue(Experiment.control("enabled", test_user))
        self.assertFalse(Experiment.test("enabled", control_user))
        self.assertFalse(Experiment.test("enabled", test_user))
コード例 #19
0
def pirates_v_zombies(request, *args, **kwargs):
    if Experiment.test("pirates_v_zombies", WebUser(request)):
        view = pirates
    else:
        view = zombies
    return view(request, *args, **kwargs)