Esempio n. 1
0
    def test_assignment(self):
        b = UserBadge.create(u'all users - ' + tt_make_str(), u'', False, u'')

        t = Treatment.create(tt_make_str(), source_badges=[b], variant_count=2)
        sb, assignments, unassigned = get_assignments_by_source_badge(t)[0]
        assert sb == b
        ass1, ass2 = assignments
        assert len(ass1) == 0
        assert len(ass2) == 0
        assert len(unassigned) == 0

        first_users = [tt_make_user() for _ in range(5)]
        for u in first_users:
            b.assign(u, u)
        # sanity check
        assert set(u.id for u in b.users) == set(u.id for u in first_users)

        sb, assignments, unassigned = get_assignments_by_source_badge(t)[0]
        assert sb == b
        ass1, ass2 = assignments
        assert len(ass1) == 0
        assert len(ass2) == 0
        assert len(unassigned) == len(first_users)

        assert assign_users(t)
        sb, assignments, unassigned = get_assignments_by_source_badge(t)[0]
        assert sb == b
        ass1, ass2 = assignments
        assert len(ass1) + len(ass2) == len(first_users)
        assert (len(ass1) == len(ass2) - 1) or (len(ass1) == len(ass2) + 1)
        assert len(unassigned) == 0

        assert not assign_users(t)

        new_users = [tt_make_user() for _ in range(5)]
        for u in new_users:
            b.assign(u, u)
        sb, assignments, unassigned = get_assignments_by_source_badge(t)[0]
        assert sb == b
        ass1, ass2 = assignments
        assert len(ass1) + len(ass2) == len(first_users)
        assert (len(ass1) == len(ass2) - 1) or (len(ass1) == len(ass2) + 1)
        assert len(unassigned) == len(new_users)

        assert assign_users(t)
        sb, assignments, unassigned = get_assignments_by_source_badge(t)[0]
        assert sb == b
        ass1, ass2 = assignments
        assert len(ass1) + len(ass2) == len(first_users) + len(new_users)

        # The following assert is disabled as it fails non-deterministically
        # (see #601). It can be reenabled once this issue is fixed.

        #assert len(ass1) == len(ass2)

        assert len(unassigned) == 0

        assert not assign_users(t)
Esempio n. 2
0
    def _make_norm(self, proposal, creator):
        from adhocracy import model

        instance = tt_get_instance()
        page = model.Page.create(instance,
                                 title=tt_make_str(),
                                 text=tt_make_str(),
                                 creator=creator)
        selection = model.Selection.create(proposal, page, creator)
        selection.variant_poll(page.head)
        return page
Esempio n. 3
0
    def _make_norm(self, proposal, creator):
        from adhocracy import model

        instance = tt_get_instance()
        page = model.Page.create(instance,
                                 title=tt_make_str(),
                                 text=tt_make_str(),
                                 creator=creator)
        selection = model.Selection.create(proposal, page, creator)
        selection.variant_poll(page.head)
        return page
Esempio n. 4
0
    def test_importexport_instance(self):
        opts = {
            u'include_instance': True
        }
        ed = importexport.export_data(opts)

        testdata = ed[u'instance'][self.instance.key]
        testdata[u'key'] += testtools.tt_make_str() + u'A'  # Test uppercase
        ed[u'instance'] = {testdata[u'key']: testdata}

        importexport.import_data(opts, ed)
        imported_instance = model.Instance.find(testdata[u'key'])
        self.assertTrue(imported_instance)

        INSTANCE_PROPS = [
            u'label', u'creator', u'description', u'required_majority',
            u'activation_delay',
            u'create_time', u'access_time', u'delete_time',
            u'default_group_id', u'allow_adopt', u'allow_delegate',
            u'allow_propose', u'allow_index', u'hidden', u'locale', u'css',
            u'frozen', u'milestones', u'use_norms', u'require_selection',
            u'is_authenticated', u'hide_global_categories',
            u'editable_comments_default', u'editable_proposals_default',
            u'require_valid_email', u'allow_thumbnailbadges',
            u'thumbnailbadges_height', u'thumbnailbadges_width',
        ]
        for p in INSTANCE_PROPS:
            imported = getattr(imported_instance, p)
            expected = getattr(self.instance, p)
            msg = (u'Instance.%s: Got %r, but expected %r' %
                   (p, imported, expected))
            self.assertEqual(expected, imported, msg)
Esempio n. 5
0
    def test_export_comments(self):
        p = testtools.tt_make_proposal(creator=self.u1, with_description=True)
        desc1 = testtools.tt_make_str()
        desc2 = testtools.tt_make_str()
        c1 = model.Comment.create(
            text=desc1,
            user=self.u1,
            topic=p.description,
            reply=None,
            variant=u'HEAD',
            sentiment=1)
        c2 = model.Comment.create(
            text=desc2,
            user=self.u2,
            topic=p.description,
            reply=c1,
            variant=u'HEAD',
            sentiment=-1)
        assert p.description.comments

        e = importexport.export_data({
            "include_instance": True,
            "include_instance_proposal": True,
            "include_instance_proposal_comment": True,
            "include_users": True,
        })
        idata = e[u'instance'][p.instance.key]
        pdata = idata[u'proposals'][str(p.id)]
        assert u'comments' in pdata

        self.assertEqual(len(pdata[u'comments']), 1)
        cdata = next(iter(pdata[u'comments'].values()))
        self.assertEqual(cdata[u'text'], desc1)
        self.assertEqual(cdata[u'creator'], str(self.u1.id))
        self.assertEqual(cdata[u'sentiment'], 1)
        self.assertEqual(cdata[u'adhocracy_type'], u'comment')

        self.assertEqual(len(cdata[u'comments']), 1)
        cdata2 = next(iter(cdata[u'comments'].values()))
        self.assertEqual(cdata2[u'text'], desc2)
        self.assertEqual(cdata2[u'creator'], str(self.u2.id))
        self.assertEqual(cdata2[u'sentiment'], -1)
        self.assertEqual(cdata2[u'adhocracy_type'], u'comment')
Esempio n. 6
0
    def test_export_comments(self):
        p = testtools.tt_make_proposal(creator=self.u1, with_description=True)
        desc1 = testtools.tt_make_str()
        desc2 = testtools.tt_make_str()
        c1 = model.Comment.create(
            text=desc1, user=self.u1, topic=p.description, reply=None, variant=u"HEAD", sentiment=1
        )
        c2 = model.Comment.create(
            text=desc2, user=self.u2, topic=p.description, reply=c1, variant=u"HEAD", sentiment=-1
        )
        assert p.description.comments

        e = importexport.export_data(
            {
                "include_instance": True,
                "include_instance_proposal": True,
                "include_instance_proposal_comment": True,
                "include_users": True,
            }
        )
        idata = e[u"instance"][p.instance.key]
        pdata = idata[u"proposals"][str(p.id)]
        assert u"comments" in pdata

        self.assertEqual(len(pdata[u"comments"]), 1)
        cdata = next(iter(pdata[u"comments"].values()))
        self.assertEqual(cdata[u"text"], desc1)
        self.assertEqual(cdata[u"creator"], str(self.u1.id))
        self.assertEqual(cdata[u"sentiment"], 1)
        self.assertEqual(cdata[u"adhocracy_type"], u"comment")

        self.assertEqual(len(cdata[u"comments"]), 1)
        cdata2 = next(iter(cdata[u"comments"].values()))
        self.assertEqual(cdata2[u"text"], desc2)
        self.assertEqual(cdata2[u"creator"], str(self.u2.id))
        self.assertEqual(cdata2[u"sentiment"], -1)
        self.assertEqual(cdata2[u"adhocracy_type"], u"comment")
Esempio n. 7
0
    def test_importexport_instance(self):
        opts = {u"include_instance": True}
        ed = importexport.export_data(opts)

        testdata = ed[u"instance"][self.instance.key]
        testdata[u"key"] += testtools.tt_make_str() + u"A"  # Test uppercase
        ed[u"instance"] = {testdata[u"key"]: testdata}

        importexport.import_data(opts, ed)
        imported_instance = model.Instance.find(testdata[u"key"])
        self.assertTrue(imported_instance)

        INSTANCE_PROPS = [
            u"label",
            u"creator",
            u"description",
            u"required_majority",
            u"activation_delay",
            u"create_time",
            u"access_time",
            u"delete_time",
            u"default_group_id",
            u"allow_adopt",
            u"allow_delegate",
            u"allow_propose",
            u"allow_index",
            u"hidden",
            u"locale",
            u"css",
            u"frozen",
            u"milestones",
            u"use_norms",
            u"require_selection",
            u"is_authenticated",
            u"hide_global_categories",
            u"editable_comments_default",
            u"editable_proposals_default",
            u"require_valid_email",
            u"allow_thumbnailbadges",
            u"thumbnailbadges_height",
            u"thumbnailbadges_width",
        ]
        for p in INSTANCE_PROPS:
            imported = getattr(imported_instance, p)
            expected = getattr(self.instance, p)
            msg = u"Instance.%s: Got %r, but expected %r" % (p, imported, expected)
            self.assertEqual(expected, imported, msg)