Пример #1
0
    def setUp(self):
        self.profile1 = ProfileFactory()
        self.profile2 = ProfileFactory()
        self.anonymous_account = UserFactory(username=settings.ZDS_APP['member']['anonymous_account'])
        self.bot_group = Group()
        self.bot_group.name = settings.ZDS_APP['member']['bot_group']
        self.bot_group.save()
        self.anonymous_account.groups.add(self.bot_group)
        self.anonymous_account.save()
        self.topic1 = PrivateTopicFactory(author=self.profile1.user)
        self.topic1.participants.add(self.profile2.user)
        self.post1 = PrivatePostFactory(
            privatetopic=self.topic1,
            author=self.profile1.user,
            position_in_topic=1)

        self.post2 = PrivatePostFactory(
            privatetopic=self.topic1,
            author=self.profile2.user,
            position_in_topic=2)

        self.assertTrue(
            self.client.login(
                username=self.profile1.user.username,
                password='******'
            )
        )
Пример #2
0
    def test_list_members(self):
        """
        To test the listing of the members with and without page parameter.
        """

        # create strange member
        weird = ProfileFactory()
        weird.user.username = u"ïtrema718"
        weird.user.email = u"foo@\xfbgmail.com"
        weird.user.save()

        # list of members.
        result = self.client.get(
            reverse('member-list'),
            follow=False
        )
        self.assertEqual(result.status_code, 200)

        nb_users = len(result.context['members'])

        # Test that inactive user don't show up
        unactive_user = UserFactory()
        unactive_user.is_active = False
        unactive_user.save()
        result = self.client.get(
            reverse('member-list'),
            follow=False
        )
        self.assertEqual(result.status_code, 200)
        self.assertEqual(nb_users, len(result.context['members']))

        # list of members with page parameter.
        result = self.client.get(
            reverse('member-list') + u'?page=1',
            follow=False
        )
        self.assertEqual(result.status_code, 200)

        # page which doesn't exist.
        result = self.client.get(
            reverse('member-list') +
            u'?page=1534',
            follow=False
        )
        self.assertEqual(result.status_code, 404)

        # page parameter isn't an integer.
        result = self.client.get(
            reverse('member-list') +
            u'?page=abcd',
            follow=False
        )
        self.assertEqual(result.status_code, 404)
Пример #3
0
 def setUp(self):
     settings.EMAIL_BACKEND = \
         'django.core.mail.backends.locmem.EmailBackend'
     self.mas = ProfileFactory()
     settings.ZDS_APP['member']['bot_account'] = self.mas.user.username
     self.anonymous = UserFactory(
         username=settings.ZDS_APP["member"]["anonymous_account"],
         password="******")
     self.external = UserFactory(
         username=settings.ZDS_APP["member"]["external_account"],
         password="******")
     self.category1 = CategoryFactory(position=1)
     self.forum11 = ForumFactory(category=self.category1,
                                 position_in_category=1)
     self.staff = StaffProfileFactory().user
Пример #4
0
 def test_update_private_topic_with_unreachable_user(self):
     """
     Tries to update a private topic with an unreachable user.
     """
     anonymous_user = UserFactory(
         username=ZDS_APP["member"]["anonymous_account"])
     anonymous_user.groups.add(self.bot_group)
     anonymous_user.save()
     data = {
         'participants': anonymous_user.id,
     }
     response = self.client.put(
         reverse('api-mp-detail', args=[self.private_topic.id]), data)
     self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)
     self.assertNotEqual(
         response.data.get('participants')[0], data.get('participants'))
Пример #5
0
    def test_pubdate_on_notification_updated(self):
        """
        When we update a notification, we should update its pubdate too.
        """
        topic = TopicFactory(forum=self.forum11, author=self.user1)
        PostFactory(topic=topic, author=self.user1, position=1)

        topics_followed = TopicAnswerSubscription.objects.get_objects_followed_by(self.user1)
        self.assertEqual(1, len(topics_followed))

        post = PostFactory(topic=topic, author=self.user2, position=2)

        old_notification = Notification.objects.get(subscription__user=self.user1, object_id=post.pk, is_read=False)
        old_notification.pubdate = datetime.now() - timedelta(days=1)
        old_notification.save()
        self.assertEqual(old_notification.object_id, post.pk)
        self.assertEqual(old_notification.subscription.object_id, topic.pk)

        # read it.
        old_notification.is_read = True
        old_notification.save()

        user3 = UserFactory()
        post2 = PostFactory(topic=topic, author=user3, position=3)

        new_notification = Notification.objects.get(subscription__user=self.user1, object_id=post2.pk, is_read=False)
        self.assertEqual(new_notification.object_id, post2.pk)
        self.assertEqual(new_notification.subscription.object_id, topic.pk)

        # Check that the pubdate is well updated.
        self.assertTrue(old_notification.pubdate < new_notification.pubdate)
Пример #6
0
    def setUp(self):
        self.profile1 = ProfileFactory()
        self.profile2 = ProfileFactory()
        self.anonymous_account = UserFactory(username=settings.ZDS_APP['member']['anonymous_account'])
        self.bot_group = Group()
        self.bot_group.name = settings.ZDS_APP['member']['bot_group']
        self.bot_group.save()
        self.anonymous_account.groups.add(self.bot_group)
        self.anonymous_account.save()
        self.topic1 = PrivateTopicFactory(author=self.profile1.user)
        self.topic1.participants.add(self.profile2.user)
        self.post1 = PrivatePostFactory(
            privatetopic=self.topic1,
            author=self.profile1.user,
            position_in_topic=1)

        self.post2 = PrivatePostFactory(
            privatetopic=self.topic1,
            author=self.profile2.user,
            position_in_topic=2)

        self.assertTrue(
            self.client.login(
                username=self.profile1.user.username,
                password='******'
            )
        )
Пример #7
0
    def setUp(self):
        self.overridden_zds_app = overridden_zds_app
        # don't build PDF to speed up the tests
        overridden_zds_app["content"]["build_pdf_when_published"] = False

        self.staff = StaffProfileFactory().user

        settings.EMAIL_BACKEND = "django.core.mail.backends.locmem.EmailBackend"
        self.mas = ProfileFactory().user
        overridden_zds_app["member"]["bot_account"] = self.mas.username

        bot = Group(name=overridden_zds_app["member"]["bot_group"])
        bot.save()
        self.external = UserFactory(
            username=overridden_zds_app["member"]["external_account"],
            password="******")

        self.beta_forum = ForumFactory(
            pk=overridden_zds_app["forum"]["beta_forum_id"],
            category=ForumCategoryFactory(position=1),
            position_in_category=1,
        )  # ensure that the forum, for the beta versions, is created

        self.licence = LicenceFactory()
        self.subcategory = SubCategoryFactory()
        self.tag = TagFactory()

        self.user_author = ProfileFactory().user
        self.user_staff = StaffProfileFactory().user
        self.user_guest = ProfileFactory().user

        # create an article
        self.article = PublishableContentFactory(type="ARTICLE")
        self.article.authors.add(self.user_author)
        UserGalleryFactory(gallery=self.article.gallery,
                           user=self.user_author,
                           mode="W")
        self.article.licence = self.licence
        self.article.subcategory.add(self.subcategory)
        self.article.tags.add(self.tag)
        self.article.save()

        # fill it with one extract
        self.article_draft = self.article.load_version()
        self.extract1 = ExtractFactory(container=self.article_draft,
                                       db_object=self.article)

        # then, publish it !
        version = self.article_draft.current_version
        self.published = publish_content(self.article,
                                         self.article_draft,
                                         is_major_update=True)

        self.article.sha_public = version
        self.article.sha_draft = version
        self.article.public_version = self.published
        self.article.save()

        self.articlefeed = LastArticlesFeedRSS()
Пример #8
0
    def setUp(self):

        # don't build PDF to speed up the tests
        settings.ZDS_APP['content']['build_pdf_when_published'] = False

        self.staff = StaffProfileFactory().user

        settings.EMAIL_BACKEND = 'django.core.mail.backends.locmem.EmailBackend'
        self.mas = ProfileFactory().user
        settings.ZDS_APP['member']['bot_account'] = self.mas.username

        bot = Group(name=settings.ZDS_APP['member']['bot_group'])
        bot.save()
        self.external = UserFactory(
            username=settings.ZDS_APP['member']['external_account'],
            password='******')

        self.beta_forum = ForumFactory(
            pk=settings.ZDS_APP['forum']['beta_forum_id'],
            category=CategoryFactory(position=1),
            position_in_category=1
        )  # ensure that the forum, for the beta versions, is created

        self.licence = LicenceFactory()
        self.subcategory = SubCategoryFactory()

        self.user_author = ProfileFactory().user
        self.user_staff = StaffProfileFactory().user
        self.user_guest = ProfileFactory().user

        # create an article
        self.article = PublishableContentFactory(type='ARTICLE')
        self.article.authors.add(self.user_author)
        UserGalleryFactory(gallery=self.article.gallery,
                           user=self.user_author,
                           mode='W')
        self.article.licence = self.licence
        self.article.subcategory.add(self.subcategory)
        self.article.save()

        # fill it with one extract
        self.article_draft = self.article.load_version()
        self.extract1 = ExtractFactory(container=self.article_draft,
                                       db_object=self.article)

        # then, publish it !
        version = self.article_draft.current_version
        self.published = publish_content(self.article,
                                         self.article_draft,
                                         is_major_update=True)

        self.article.sha_public = version
        self.article.sha_draft = version
        self.article.public_version = self.published
        self.article.save()

        self.articlefeed = LastArticlesFeedRSS()
Пример #9
0
 def test_create_private_topic_with_unreachable_user(self):
     """
     Tries to create a new private topic with an unreachable user.
     """
     anonymous_user = UserFactory(
         username=ZDS_APP["member"]["anonymous_account"])
     anonymous_user.groups.add(self.bot_group)
     anonymous_user.save()
     data = {
         'title': 'I love ice cream!',
         'subtitle': 'Come eat one with me.',
         'participants': anonymous_user.id,
     }
     response = self.client.post(reverse('api-mp-list'), data)
     self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)
     private_topics = PrivateTopic.objects.get_private_topics_of_user(
         anonymous_user.id)
     self.assertEqual(0, len(private_topics))
Пример #10
0
    def setUp(self):
        self.profile1 = ProfileFactory()
        self.profile2 = ProfileFactory()
        self.anonymous_account = UserFactory(
            username=settings.ZDS_APP["member"]["anonymous_account"])
        self.bot_group = Group()
        self.bot_group.name = settings.ZDS_APP["member"]["bot_group"]
        self.bot_group.save()
        self.anonymous_account.groups.add(self.bot_group)
        self.anonymous_account.save()
        self.topic1 = PrivateTopicFactory(author=self.profile1.user)
        self.topic1.participants.add(self.profile2.user)
        self.post1 = PrivatePostFactory(privatetopic=self.topic1,
                                        author=self.profile1.user,
                                        position_in_topic=1)

        self.post2 = PrivatePostFactory(privatetopic=self.topic1,
                                        author=self.profile2.user,
                                        position_in_topic=2)

        self.client.force_login(self.profile1.user)
Пример #11
0
    def setUp(self):

        # don't build PDF to speed up the tests
        settings.ZDS_APP['content']['build_pdf_when_published'] = False

        self.staff = StaffProfileFactory().user

        settings.EMAIL_BACKEND = 'django.core.mail.backends.locmem.EmailBackend'
        self.mas = ProfileFactory().user
        settings.ZDS_APP['member']['bot_account'] = self.mas.username

        self.licence = LicenceFactory()
        self.subcategory = SubCategoryFactory()

        self.user_author = ProfileFactory().user
        self.user_staff = StaffProfileFactory().user
        self.user_guest = ProfileFactory().user

        self.tuto = PublishableContentFactory(type='TUTORIAL')
        self.tuto.authors.add(self.user_author)
        UserGalleryFactory(gallery=self.tuto.gallery,
                           user=self.user_author,
                           mode='W')
        self.tuto.licence = self.licence
        self.tuto.subcategory.add(self.subcategory)
        self.tuto.save()

        self.beta_forum = ForumFactory(
            pk=settings.ZDS_APP['forum']['beta_forum_id'],
            category=CategoryFactory(position=1),
            position_in_category=1
        )  # ensure that the forum, for the beta versions, is created

        self.tuto_draft = self.tuto.load_version()
        self.part1 = ContainerFactory(parent=self.tuto_draft,
                                      db_object=self.tuto)
        self.chapter1 = ContainerFactory(parent=self.part1,
                                         db_object=self.tuto)

        self.extract1 = ExtractFactory(container=self.chapter1,
                                       db_object=self.tuto)
        bot = Group(name=settings.ZDS_APP['member']['bot_group'])
        bot.save()
        self.external = UserFactory(
            username=settings.ZDS_APP['member']['external_account'],
            password='******')
Пример #12
0
    def setUp(self):
        self.staff = StaffProfileFactory().user

        settings.EMAIL_BACKEND = "django.core.mail.backends.locmem.EmailBackend"
        self.mas = ProfileFactory().user
        self.overridden_zds_app["member"]["bot_account"] = self.mas.username

        self.licence = LicenceFactory()
        self.subcategory = SubCategoryFactory()

        self.user_author = ProfileFactory().user
        self.user_staff = StaffProfileFactory().user
        self.user_guest = ProfileFactory().user

        self.tuto = PublishableContentFactory(type="TUTORIAL")
        self.tuto.authors.add(self.user_author)
        UserGalleryFactory(gallery=self.tuto.gallery,
                           user=self.user_author,
                           mode="W")
        self.tuto.licence = self.licence
        self.tuto.subcategory.add(self.subcategory)
        self.tuto.save()

        self.beta_forum = ForumFactory(
            pk=self.overridden_zds_app["forum"]["beta_forum_id"],
            category=ForumCategoryFactory(position=1),
            position_in_category=1,
        )  # ensure that the forum, for the beta versions, is created

        self.tuto_draft = self.tuto.load_version()
        self.part1 = ContainerFactory(parent=self.tuto_draft,
                                      db_object=self.tuto)
        self.chapter1 = ContainerFactory(parent=self.part1,
                                         db_object=self.tuto)

        self.extract1 = ExtractFactory(container=self.chapter1,
                                       db_object=self.tuto)
        bot = Group(name=self.overridden_zds_app["member"]["bot_group"])
        bot.save()
        self.external = UserFactory(
            username=self.overridden_zds_app["member"]["external_account"],
            password="******")
Пример #13
0
    def test_topics_followed_by_a_user(self):
        """
        Check that we correctly retrieve all topics followed by a user.
        """
        user = UserFactory()

        topics_followed = TopicAnswerSubscription.objects.get_objects_followed_by(user)
        self.assertEqual(0, len(topics_followed))

        first = TopicFactory(forum=self.forum11, author=user)
        second = TopicFactory(forum=self.forum11, author=user)
        third = TopicFactory(forum=self.forum11, author=user)

        # Subscribes to all topics.
        TopicAnswerSubscription.objects.get_or_create_active(user, second)
        TopicAnswerSubscription.objects.get_or_create_active(user, first)
        TopicAnswerSubscription.objects.get_or_create_active(user, third)

        topics_followed = TopicAnswerSubscription.objects.get_objects_followed_by(user)
        self.assertEqual(3, len(topics_followed))
Пример #14
0
class AddParticipantViewTest(TestCase):

    def setUp(self):
        self.profile1 = ProfileFactory()
        self.profile2 = ProfileFactory()
        self.anonymous_account = UserFactory(username=settings.ZDS_APP['member']['anonymous_account'])
        self.bot_group = Group()
        self.bot_group.name = settings.ZDS_APP['member']['bot_group']
        self.bot_group.save()
        self.anonymous_account.groups.add(self.bot_group)
        self.anonymous_account.save()
        self.topic1 = PrivateTopicFactory(author=self.profile1.user)
        self.topic1.participants.add(self.profile2.user)
        self.post1 = PrivatePostFactory(
            privatetopic=self.topic1,
            author=self.profile1.user,
            position_in_topic=1)

        self.post2 = PrivatePostFactory(
            privatetopic=self.topic1,
            author=self.profile2.user,
            position_in_topic=2)

        self.assertTrue(
            self.client.login(
                username=self.profile1.user.username,
                password='******'
            )
        )

    def test_denies_anonymous(self):

        self.client.logout()
        response = self.client.get(
            reverse('mp-edit-participant', args=[1, 'private-topic']),
            follow=True
        )

        self.assertRedirects(
            response,
            reverse('member-login') +
            '?next=' + reverse('mp-edit-participant', args=[1, 'private-topic']))

    def test_fail_add_participant_topic_no_exist(self):

        response = self.client.post(
            reverse('mp-edit-participant', args=[451, 'private-topic']),
            follow=True
        )

        self.assertEqual(404, response.status_code)

    def test_test_fail_add_bot_as_participant(self):
        self.client.logout()
        self.assertTrue(
            self.client.login(
                username=self.profile1.user.username,
                password='******'
            )
        )

        self.client.post(
            reverse('mp-edit-participant', args=[self.topic1.pk, self.topic1.slug]),
            {
                'username': self.anonymous_account.username
            }
        )
        self.assertFalse(self.anonymous_account in self.topic1.participants.all())

    def test_fail_add_participant_who_no_exist(self):

        response = self.client.post(
            reverse('mp-edit-participant', args=[self.topic1.pk, self.topic1.slug]),
            {
                'username': '******'
            },
            follow=True
        )

        self.assertEqual(200, response.status_code)
        self.assertEqual(1, len(response.context['messages']))

    def test_fail_add_participant_with_no_right(self):
        profile3 = ProfileFactory()

        self.client.logout()
        self.assertTrue(
            self.client.login(
                username=profile3.user.username,
                password='******'
            )
        )

        response = self.client.post(
            reverse('mp-edit-participant', args=[self.topic1.pk, self.topic1.slug]),
            {
                'username': profile3.user.username
            }
        )

        self.assertEqual(403, response.status_code)
        self.assertNotIn(
            profile3.user,
            PrivateTopic.objects.get(pk=self.topic1.pk).participants.all()
        )

    def test_fail_add_participant_already_in(self):

        response = self.client.post(
            reverse('mp-edit-participant', args=[self.topic1.pk, self.topic1.slug]),
            {
                'username': self.profile2.user.username
            },
            follow=True
        )

        self.assertEqual(200, response.status_code)
        self.assertEqual(1, len(response.context['messages']))

    def test_success_add_participant(self):

        profile3 = ProfileFactory()

        response = self.client.post(
            reverse('mp-edit-participant', args=[self.topic1.pk, self.topic1.slug]),
            {
                'username': profile3.user.username
            },
            follow=True
        )

        self.assertEqual(200, response.status_code)
        self.assertEqual(1, len(response.context['messages']))
        self.assertIn(
            profile3.user,
            PrivateTopic.objects.get(pk=self.topic1.pk).participants.all()
        )
Пример #15
0
class AddParticipantViewTest(TestCase):

    def setUp(self):
        self.profile1 = ProfileFactory()
        self.profile2 = ProfileFactory()
        self.anonymous_account = UserFactory(username=settings.ZDS_APP['member']['anonymous_account'])
        self.bot_group = Group()
        self.bot_group.name = settings.ZDS_APP['member']['bot_group']
        self.bot_group.save()
        self.anonymous_account.groups.add(self.bot_group)
        self.anonymous_account.save()
        self.topic1 = PrivateTopicFactory(author=self.profile1.user)
        self.topic1.participants.add(self.profile2.user)
        self.post1 = PrivatePostFactory(
            privatetopic=self.topic1,
            author=self.profile1.user,
            position_in_topic=1)

        self.post2 = PrivatePostFactory(
            privatetopic=self.topic1,
            author=self.profile2.user,
            position_in_topic=2)

        self.assertTrue(
            self.client.login(
                username=self.profile1.user.username,
                password='******'
            )
        )

    def test_denies_anonymous(self):

        self.client.logout()
        response = self.client.get(
            reverse('mp-edit-participant', args=[1, 'private-topic']),
            follow=True
        )

        self.assertRedirects(
            response,
            reverse('member-login') +
            '?next=' + reverse('mp-edit-participant', args=[1, 'private-topic']))

    def test_fail_add_participant_topic_no_exist(self):

        response = self.client.post(
            reverse('mp-edit-participant', args=[451, 'private-topic']),
            follow=True
        )

        self.assertEqual(404, response.status_code)

    def test_test_fail_add_bot_as_participant(self):
        self.client.logout()
        self.assertTrue(
            self.client.login(
                username=self.profile1.user.username,
                password='******'
            )
        )

        self.client.post(
            reverse('mp-edit-participant', args=[self.topic1.pk, self.topic1.slug]),
            {
                'username': self.anonymous_account.username
            }
        )
        self.assertFalse(self.anonymous_account in self.topic1.participants.all())

    def test_fail_add_participant_who_no_exist(self):

        response = self.client.post(
            reverse('mp-edit-participant', args=[self.topic1.pk, self.topic1.slug]),
            {
                'username': '******'
            },
            follow=True
        )

        self.assertEqual(200, response.status_code)
        self.assertEqual(1, len(response.context['messages']))

    def test_fail_add_participant_with_no_right(self):
        profile3 = ProfileFactory()

        self.client.logout()
        self.assertTrue(
            self.client.login(
                username=profile3.user.username,
                password='******'
            )
        )

        response = self.client.post(
            reverse('mp-edit-participant', args=[self.topic1.pk, self.topic1.slug]),
            {
                'username': profile3.user.username
            }
        )

        self.assertEqual(403, response.status_code)
        self.assertNotIn(
            profile3.user,
            PrivateTopic.objects.get(pk=self.topic1.pk).participants.all()
        )

    def test_fail_add_participant_already_in(self):

        response = self.client.post(
            reverse('mp-edit-participant', args=[self.topic1.pk, self.topic1.slug]),
            {
                'username': self.profile2.user.username
            },
            follow=True
        )

        self.assertEqual(200, response.status_code)
        self.assertEqual(1, len(response.context['messages']))

    def test_success_add_participant(self):

        profile3 = ProfileFactory()

        response = self.client.post(
            reverse('mp-edit-participant', args=[self.topic1.pk, self.topic1.slug]),
            {
                'username': profile3.user.username
            },
            follow=True
        )

        self.assertEqual(200, response.status_code)
        self.assertEqual(1, len(response.context['messages']))
        self.assertIn(
            profile3.user,
            PrivateTopic.objects.get(pk=self.topic1.pk).participants.all()
        )
Пример #16
0
class LeaveViewTest(TestCase):

    def setUp(self):
        self.profile1 = ProfileFactory()
        self.profile2 = ProfileFactory()

        self.anonymous_account = UserFactory(username=settings.ZDS_APP['member']['anonymous_account'])
        self.bot_group = Group()
        self.bot_group.name = settings.ZDS_APP['member']['bot_group']
        self.bot_group.save()
        self.anonymous_account.groups.add(self.bot_group)
        self.anonymous_account.save()

        self.topic1 = PrivateTopicFactory(author=self.profile1.user)
        self.topic1.participants.add(self.profile2.user)
        self.post1 = PrivatePostFactory(
            privatetopic=self.topic1,
            author=self.profile1.user,
            position_in_topic=1)

        self.post2 = PrivatePostFactory(
            privatetopic=self.topic1,
            author=self.profile2.user,
            position_in_topic=2)

        self.assertTrue(
            self.client.login(
                username=self.profile1.user.username,
                password='******'
            )
        )

    def test_denies_anonymous(self):

        self.client.logout()
        response = self.client.get(reverse('mp-delete', args=[1, 'private-topic']), follow=True)

        self.assertRedirects(
            response,
            reverse('member-login') +
            '?next=' + reverse('mp-delete', args=[1, 'private-topic']))

    def test_fail_leave_topic_no_exist(self):

        response = self.client.post(reverse('mp-delete', args=[999, 'private-topic']))

        self.assertEqual(404, response.status_code)

    def test_success_leave_topic_as_author_no_participants(self):

        self.topic1.participants.clear()
        self.topic1.save()

        response = self.client.post(reverse('mp-delete', args=[self.topic1.pk, self.topic1.slug]), follow=True)

        self.assertEqual(200, response.status_code)
        self.assertEqual(
            0,
            PrivateTopic.objects.filter(pk=self.topic1.pk).all().count()
        )

    def test_success_leave_topic_as_author(self):

        response = self.client.post(reverse('mp-delete', args=[self.topic1.pk, self.topic1.slug]), follow=True)

        self.assertEqual(200, response.status_code)
        self.assertEqual(
            1,
            PrivateTopic.objects.filter(pk=self.topic1.pk).all().count()
        )

        self.assertEqual(
            self.profile2.user,
            PrivateTopic.objects.get(pk=self.topic1.pk).author
        )

    def test_success_leave_topic_as_participant(self):

        self.client.logout()
        self.assertTrue(
            self.client.login(
                username=self.profile2.user.username,
                password='******'
            )
        )

        response = self.client.post(reverse('mp-delete', args=[self.topic1.pk, self.topic1.slug]), follow=True)

        self.assertEqual(200, response.status_code)

        self.assertNotIn(
            self.profile2.user,
            PrivateTopic.objects.get(pk=self.topic1.pk).participants.all()
        )

        self.assertNotEqual(
            self.profile2.user,
            PrivateTopic.objects.get(pk=self.topic1.pk).author
        )
Пример #17
0
    def setUp(self):
        settings.overridden_zds_app = overridden_zds_app
        # don't build PDF to speed up the tests
        overridden_zds_app['content']['build_pdf_when_published'] = False

        self.staff = StaffProfileFactory().user

        settings.EMAIL_BACKEND = 'django.core.mail.backends.locmem.EmailBackend'
        self.mas = ProfileFactory().user
        overridden_zds_app['member']['bot_account'] = self.mas.username

        bot = Group(name=overridden_zds_app['member']['bot_group'])
        bot.save()
        self.external = UserFactory(
            username=overridden_zds_app['member']['external_account'],
            password='******')

        self.beta_forum = ForumFactory(
            pk=overridden_zds_app['forum']['beta_forum_id'],
            category=CategoryFactory(position=1),
            position_in_category=1
        )  # ensure that the forum, for the beta versions, is created

        self.licence = LicenceFactory()
        self.subcategory = SubCategoryFactory()

        self.user_author = ProfileFactory().user
        self.user_staff = StaffProfileFactory().user
        self.user_guest = ProfileFactory().user

        # create a tutorial
        self.tuto = PublishableContentFactory(type='TUTORIAL')
        self.tuto.authors.add(self.user_author)
        UserGalleryFactory(gallery=self.tuto.gallery,
                           user=self.user_author,
                           mode='W')
        self.tuto.licence = self.licence
        self.tuto.subcategory.add(self.subcategory)
        self.tuto.save()

        # fill it with one part, containing one chapter, containing one extract
        self.tuto_draft = self.tuto.load_version()
        self.part1 = ContainerFactory(parent=self.tuto_draft,
                                      db_object=self.tuto)
        self.chapter1 = ContainerFactory(parent=self.part1,
                                         db_object=self.tuto)
        self.extract1 = ExtractFactory(container=self.chapter1,
                                       db_object=self.tuto)

        # then, publish it !
        version = self.tuto_draft.current_version
        self.published = publish_content(self.tuto,
                                         self.tuto_draft,
                                         is_major_update=True)

        self.tuto.sha_public = version
        self.tuto.sha_draft = version
        self.tuto.public_version = self.published
        self.tuto.save()

        self.tutofeed = LastTutorialsFeedRSS()
Пример #18
0
class AddParticipantViewTest(TestCase):
    def setUp(self):
        self.profile1 = ProfileFactory()
        self.profile2 = ProfileFactory()
        self.anonymous_account = UserFactory(username=settings.ZDS_APP["member"]["anonymous_account"])
        self.bot_group = Group()
        self.bot_group.name = settings.ZDS_APP["member"]["bot_group"]
        self.bot_group.save()
        self.anonymous_account.groups.add(self.bot_group)
        self.anonymous_account.save()
        self.topic1 = PrivateTopicFactory(author=self.profile1.user)
        self.topic1.participants.add(self.profile2.user)
        self.post1 = PrivatePostFactory(privatetopic=self.topic1, author=self.profile1.user, position_in_topic=1)

        self.post2 = PrivatePostFactory(privatetopic=self.topic1, author=self.profile2.user, position_in_topic=2)

        self.assertTrue(self.client.login(username=self.profile1.user.username, password="******"))

    def test_denies_anonymous(self):

        self.client.logout()
        response = self.client.get(reverse("mp-edit-participant", args=[1, "private-topic"]), follow=True)

        self.assertRedirects(
            response, reverse("member-login") + "?next=" + reverse("mp-edit-participant", args=[1, "private-topic"])
        )

    def test_fail_add_participant_topic_no_exist(self):

        response = self.client.post(reverse("mp-edit-participant", args=[451, "private-topic"]), follow=True)

        self.assertEqual(404, response.status_code)

    def test_test_fail_add_bot_as_participant(self):
        self.client.logout()
        self.assertTrue(self.client.login(username=self.profile1.user.username, password="******"))

        self.client.post(
            reverse("mp-edit-participant", args=[self.topic1.pk, self.topic1.slug]),
            {"username": self.anonymous_account.username},
        )

        # TODO (Arnaud-D): this test actually succeeds because of a Http404.
        #  NotReachableError is not raised.
        self.assertFalse(self.anonymous_account in self.topic1.participants.all())

    def test_fail_add_participant_who_no_exist(self):

        response = self.client.post(
            reverse("mp-edit-participant", args=[self.topic1.pk, self.topic1.slug]), {"username": "******"}, follow=True
        )

        self.assertEqual(200, response.status_code)
        self.assertEqual(1, len(response.context["messages"]))

    def test_fail_add_participant_with_no_right(self):
        profile3 = ProfileFactory()

        self.client.logout()
        self.assertTrue(self.client.login(username=profile3.user.username, password="******"))

        response = self.client.post(
            reverse("mp-edit-participant", args=[self.topic1.pk, self.topic1.slug]),
            {"username": profile3.user.username},
        )

        self.assertEqual(403, response.status_code)
        self.assertNotIn(profile3.user, PrivateTopic.objects.get(pk=self.topic1.pk).participants.all())

    def test_fail_add_participant_already_in(self):

        response = self.client.post(
            reverse("mp-edit-participant", args=[self.topic1.pk, self.topic1.slug]),
            {"username": self.profile2.user.username},
            follow=True,
        )

        self.assertEqual(200, response.status_code)
        self.assertEqual(1, len(response.context["messages"]))

    def test_success_add_participant(self):

        profile3 = ProfileFactory()

        response = self.client.post(
            reverse("mp-edit-participant", args=[self.topic1.pk, self.topic1.slug]),
            {"username": profile3.user.username},
            follow=True,
        )

        self.assertEqual(200, response.status_code)
        self.assertEqual(1, len(response.context["messages"]))
        self.assertIn(profile3.user, PrivateTopic.objects.get(pk=self.topic1.pk).participants.all())
Пример #19
0
class LeaveViewTest(TestCase):

    def setUp(self):
        self.profile1 = ProfileFactory()
        self.profile2 = ProfileFactory()

        self.anonymous_account = UserFactory(username=settings.ZDS_APP['member']['anonymous_account'])
        self.bot_group = Group()
        self.bot_group.name = settings.ZDS_APP['member']['bot_group']
        self.bot_group.save()
        self.anonymous_account.groups.add(self.bot_group)
        self.anonymous_account.save()

        self.topic1 = PrivateTopicFactory(author=self.profile1.user)
        self.topic1.participants.add(self.profile2.user)
        self.post1 = PrivatePostFactory(
            privatetopic=self.topic1,
            author=self.profile1.user,
            position_in_topic=1)

        self.post2 = PrivatePostFactory(
            privatetopic=self.topic1,
            author=self.profile2.user,
            position_in_topic=2)

        self.assertTrue(
            self.client.login(
                username=self.profile1.user.username,
                password='******'
            )
        )

    def test_denies_anonymous(self):

        self.client.logout()
        response = self.client.get(reverse('mp-delete', args=[1, 'private-topic']), follow=True)

        self.assertRedirects(
            response,
            reverse('member-login') +
            '?next=' + reverse('mp-delete', args=[1, 'private-topic']))

    def test_fail_leave_topic_no_exist(self):

        response = self.client.post(reverse('mp-delete', args=[999, 'private-topic']))

        self.assertEqual(404, response.status_code)

    def test_success_leave_topic_as_author_no_participants(self):

        self.topic1.participants.clear()
        self.topic1.save()

        response = self.client.post(reverse('mp-delete', args=[self.topic1.pk, self.topic1.slug]), follow=True)

        self.assertEqual(200, response.status_code)
        self.assertEqual(
            0,
            PrivateTopic.objects.filter(pk=self.topic1.pk).all().count()
        )

    def test_success_leave_topic_as_author(self):

        response = self.client.post(reverse('mp-delete', args=[self.topic1.pk, self.topic1.slug]), follow=True)

        self.assertEqual(200, response.status_code)
        self.assertEqual(
            1,
            PrivateTopic.objects.filter(pk=self.topic1.pk).all().count()
        )

        self.assertEqual(
            self.profile2.user,
            PrivateTopic.objects.get(pk=self.topic1.pk).author
        )

    def test_success_leave_topic_as_participant(self):

        self.client.logout()
        self.assertTrue(
            self.client.login(
                username=self.profile2.user.username,
                password='******'
            )
        )

        response = self.client.post(reverse('mp-delete', args=[self.topic1.pk, self.topic1.slug]), follow=True)

        self.assertEqual(200, response.status_code)

        self.assertNotIn(
            self.profile2.user,
            PrivateTopic.objects.get(pk=self.topic1.pk).participants.all()
        )

        self.assertNotEqual(
            self.profile2.user,
            PrivateTopic.objects.get(pk=self.topic1.pk).author
        )