Exemplo n.º 1
0
    def test_assigned_request(self):
        feedback_group = FeedbackGroup(name="name")
        feedback_group.save()
        self.existing_request.feedback_group = feedback_group
        self.existing_request.save()

        info = Mock()
        info.context = Mock()
        info.context.user = self.user.user
        result = (schema.get_mutation_type().fields["deleteFeedbackRequest"].
                  resolver(
                      self=Mock(),
                      info=info,
                      feedback_request_id=self.existing_request.id,
                  ))

        self.assertEqual(
            result,
            DeleteFeedbackRequest(
                success=False,
                error=
                "This request has already been assigned to a feedback group and cannot be edited.",
            ),
        )

        self.assertEqual(
            FeedbackRequest.objects.count(),
            1,
        )
Exemplo n.º 2
0
    def test_assign_groups_ignore_old_requests(self):
        # Assert that we ignore feedback requests that already have feedback groups
        users = self.users[:4]
        old_feedback_group = FeedbackGroup(name="nothing really")
        old_feedback_group.save()
        for user in users:
            # First user's request already has a feedback group.
            if user == users[0]:
                FeedbackRequest(
                    user=user,
                    media_url="https://soundcloud.com/ruairidx/grey",
                    feedback_group=old_feedback_group,
                    email_when_grouped=True,
                ).save()
            else:
                FeedbackRequest(
                    user=user,
                    media_url="https://soundcloud.com/ruairidx/grey",
                    email_when_grouped=True,
                ).save()

        call_command("assign_groups")

        # Assert one group was created (excluding old group) and that responses were
        # created for everyone in the group.
        self.assertEqual(FeedbackGroup.objects.count(), 2)
        self.assertEqual(FeedbackResponse.objects.count(), 6)

        # New group, not old_feedback_group
        feedback_group = FeedbackGroup.objects.last()

        # Check we didn't overwrite the old request or anything stupid.
        self.assertEqual(
            FeedbackRequest.objects.filter(
                user=users[0], feedback_group=old_feedback_group).count(),
            1,
        )

        for user in users[1:4]:
            self.assertEqual(
                FeedbackRequest.objects.filter(
                    user=user, feedback_group=feedback_group).count(),
                1,
            )

        # assert correct emails were sent (not to user in old group)
        self.assertEqual(len(mail.outbox), 3)
        for i in range(0, 3):
            email = mail.outbox[i]
            self.assertEqual(email.subject, "your new feedback group")
            self.assertEqual(len(email.recipients()), 1)
            self.assertEqual(email.recipients()[0], users[i + 1].email)
            self.assertTrue(
                "https://www.howsmytrack.com/group/2" in email.body)
            # Verify that HTML content was sent in the email as well
            self.assertTrue(len(email.alternatives) > 0)
            self.assertTrue(
                len(email.alternatives[0][0]) > 0)  # Message content
            self.assertEqual(email.alternatives[0][1], "text/html")
Exemplo n.º 3
0
    def setUp(self):
        self.graham_user = FeedbackGroupsUser.create(
            email="*****@*****.**",
            password="******",
        )
        self.lewis_user = FeedbackGroupsUser.create(
            email="*****@*****.**",
            password="******",
        )
        self.graham_user.save()
        self.lewis_user.save()

        with patch("django.utils.timezone.now",
                   Mock(return_value=DEFAULT_DATETIME)):
            self.feedback_group = FeedbackGroup(name="name")
            self.feedback_group.save()

        self.graham_feedback_request = FeedbackRequest(
            user=self.graham_user,
            media_url="https://soundcloud.com/ruairidx/grey",
            media_type=MediaTypeChoice.SOUNDCLOUD.name,
            feedback_prompt="feedback_prompt",
            feedback_group=self.feedback_group,
            email_when_grouped=True,
            genre=GenreChoice.ELECTRONIC.name,
        )
        self.lewis_feedback_request = FeedbackRequest(
            user=self.lewis_user,
            media_url="https://soundcloud.com/ruairidx/bruno",
            media_type=MediaTypeChoice.SOUNDCLOUD.name,
            feedback_prompt="feedback_prompt",
            feedback_group=self.feedback_group,
            email_when_grouped=True,
            genre=GenreChoice.HIPHOP.name,
        )
        self.graham_feedback_request.save()
        self.lewis_feedback_request.save()

        self.graham_feedback_response = FeedbackResponse(
            feedback_request=self.lewis_feedback_request,
            user=self.graham_user,
            feedback="grahamfeedback",
            submitted=True,
            rating=4,
            allow_replies=False,
        )
        self.lewis_feedback_response = FeedbackResponse(
            feedback_request=self.graham_feedback_request,
            user=self.lewis_user,
            feedback="lewisfeedback",
            submitted=True,
            rating=3,
            allow_replies=True,
        )
        self.graham_feedback_response.save()
        self.lewis_feedback_response.save()
Exemplo n.º 4
0
    def setUp(self):
        self.graham_user = FeedbackGroupsUser.create(
            email="*****@*****.**",
            password="******",
        )
        self.lewis_user = FeedbackGroupsUser.create(
            email="*****@*****.**",
            password="******",
        )
        self.graham_user.save()
        self.lewis_user.save()

        self.feedback_group = FeedbackGroup(name="name")
        self.feedback_group.save()

        self.lewis_feedback_request = FeedbackRequest(
            user=self.lewis_user,
            media_url="https://soundcloud.com/ruairidx/bruno",
            media_type=MediaTypeChoice.SOUNDCLOUD.name,
            feedback_prompt="feedback_prompt",
            feedback_group=self.feedback_group,
            email_when_grouped=True,
            genre=GenreChoice.HIPHOP.name,
        )
        self.lewis_feedback_request.save()

        self.graham_feedback_response = FeedbackResponse(
            feedback_request=self.lewis_feedback_request,
            user=self.graham_user,
            feedback="grahamfeedback",
            submitted=True,
            rating=4,
            allow_replies=True,
        )
        self.graham_feedback_response.save()

        self.lewis_reply_to_graham = FeedbackResponseReply(
            feedback_response=self.graham_feedback_response,
            user=self.lewis_user,
            text="love from lewis",
            allow_replies=True,
        )
        self.lewis_reply_to_graham.save()

        self.graham_reply_to_graham = FeedbackResponseReply(
            feedback_response=self.graham_feedback_response,
            user=self.graham_user,
            text="i don't want your love",
            allow_replies=False,
        )
        self.graham_reply_to_graham.save()
Exemplo n.º 5
0
    def test_user_details_logged_in_unread_reply(self):
        other_user = FeedbackGroupsUser.create(
            email="*****@*****.**",
            password="******",
        )
        other_user.save()

        feedback_group = FeedbackGroup(name="name")
        feedback_group.save()

        feedback_request = FeedbackRequest(
            user=other_user,
            media_url="https://soundcloud.com/ruairidx/grey",
            media_type=MediaTypeChoice.SOUNDCLOUD.name,
            feedback_prompt="feedback_prompt",
            feedback_group=feedback_group,
            email_when_grouped=True,
            genre=GenreChoice.NO_GENRE,
        )
        feedback_request.save()

        feedback_response = FeedbackResponse(
            feedback_request=feedback_request,
            user=self.user,
            feedback="feedback",
            submitted=True,
        )
        feedback_response.save()

        feedback_response_reply = FeedbackResponseReply(
            feedback_response=feedback_response,
            user=other_user,
            text="some reply",
        )
        feedback_response_reply.save()

        info = Mock()
        info.context = Mock()
        info.context.user = self.user.user
        result = (schema.get_query_type().graphene_type().resolve_user_details(
            info=info, ))
        self.assertEqual(
            result,
            UserType(
                username="******",
                rating=4.5,
                notifications=1,
                send_reminder_emails=True,
            ),
        )
Exemplo n.º 6
0
    def test_existing_assigned_request(self):
        # Add a previous assigned request, user should be able to add another.
        feedback_group = FeedbackGroup(name="name")
        feedback_group.save()

        FeedbackRequest(
            user=self.user,
            media_url="https://soundcloud.com/ruairidx/bruno",
            media_type=MediaTypeChoice.SOUNDCLOUD.name,
            feedback_prompt="feedback_prompt",
            feedback_group=feedback_group,
            email_when_grouped=True,
            genre=GenreChoice.HIPHOP.name,
        ).save()

        info = Mock()
        info.context = Mock()
        info.context.user = self.user.user
        result = (schema.get_mutation_type().fields["createFeedbackRequest"].
                  resolver(
                      self=Mock(),
                      info=info,
                      media_url="https://www.dropbox.com/s/nonsense/file.wav",
                      feedback_prompt="feedback_prompt",
                      email_when_grouped=True,
                      genre=GenreChoice.ELECTRONIC.name,
                  ))

        self.assertEqual(
            result,
            CreateFeedbackRequest(
                success=True,
                error=None,
                invalid_media_url=False,
            ),
        )

        self.assertEqual(
            FeedbackRequest.objects.filter(
                user=self.user,
                media_url="https://www.dropbox.com/s/nonsense/file.wav",
                media_type=MediaTypeChoice.DROPBOX.name,
                feedback_prompt="feedback_prompt",
                email_when_grouped=True,
                genre=GenreChoice.ELECTRONIC.name,
            ).count(),
            1,
        )
Exemplo n.º 7
0
    def setUp(self):
        self.graham_user = FeedbackGroupsUser.create(
            email="*****@*****.**",
            password="******",
        )
        self.lewis_user = FeedbackGroupsUser.create(
            email="*****@*****.**",
            password="******",
        )
        self.graham_user.save()
        self.lewis_user.save()

        with patch("django.utils.timezone.now",
                   Mock(return_value=GROUP_TIME_CREATED)):
            self.feedback_group = FeedbackGroup(name="name")
            self.feedback_group.save()

        self.graham_feedback_request = FeedbackRequest(
            user=self.graham_user,
            media_url="https://soundcloud.com/ruairidx/grey",
            media_type=MediaTypeChoice.SOUNDCLOUD.name,
            feedback_prompt="feedback_prompt",
            feedback_group=self.feedback_group,
            email_when_grouped=True,
        )
        self.lewis_feedback_request = FeedbackRequest(
            user=self.lewis_user,
            media_url="https://soundcloud.com/ruairidx/bruno",
            media_type=MediaTypeChoice.SOUNDCLOUD.name,
            feedback_prompt="feedback_prompt",
            feedback_group=self.feedback_group,
            email_when_grouped=True,
        )
        self.graham_feedback_request.save()
        self.lewis_feedback_request.save()

        self.graham_feedback_response = FeedbackResponse(
            feedback_request=self.lewis_feedback_request,
            user=self.graham_user,
            submitted=False,
        )
        self.lewis_feedback_response = FeedbackResponse(
            feedback_request=self.graham_feedback_request,
            user=self.lewis_user,
            submitted=False,
        )
        self.graham_feedback_response.save()
        self.lewis_feedback_response.save()
Exemplo n.º 8
0
    def create_feedback_group(self, feedback_requests, genres):
        feedback_group = FeedbackGroup(name="test replace lol")
        feedback_group.save()

        genre_title = "/".join([genre.value for genre in genres])
        feedback_group.name = f"Feedback Group #{feedback_group.id} - {genre_title}"
        feedback_group.save()

        requests_count = 0
        responses_count = 0
        for feedback_request in feedback_requests:
            feedback_request.feedback_group = feedback_group
            feedback_request.save()
            requests_count += 1

            # TODO: try and remove this; ideally we'd just create FeedbackResponse rows
            # only when a user submits feedback.
            #
            # Create empty feedback responses for each request-user pairing in the group.
            for other_feedback_request in feedback_requests:
                if feedback_request != other_feedback_request:
                    feedback_response = FeedbackResponse(
                        feedback_request=feedback_request,
                        user=other_feedback_request.user,
                    )
                    feedback_response.save()
                    responses_count += 1

        self.stdout.write(
            f"Created {feedback_group.name} with {requests_count} requests and {responses_count} responses.",
        )

        return feedback_group, genres
    def test_assigned_request(self):
        feedback_group = FeedbackGroup(name="name")
        feedback_group.save()
        self.existing_request.feedback_group = feedback_group
        self.existing_request.save()

        info = Mock()
        info.context = Mock()
        info.context.user = self.user.user
        result = (
            schema.get_mutation_type()
            .fields["editFeedbackRequest"]
            .resolver(
                self=Mock(),
                info=info,
                feedback_request_id=self.existing_request.id,
                media_url="https://www.dropbox.com/s/nonsense/file.wav",
                feedback_prompt="feedback_prompt",
                email_when_grouped=False,
                genre=GenreChoice.HIPHOP.name,
            )
        )

        self.assertEqual(
            result,
            EditFeedbackRequest(
                success=False,
                error="This request has already been assigned to a feedback group and cannot be edited.",
                invalid_media_url=False,
            ),
        )

        self.assertEqual(
            FeedbackRequest.objects.filter(
                user=self.user,
                media_url="https://soundcloud.com/ruairidx/grey",
                media_type=MediaTypeChoice.SOUNDCLOUD.name,
                feedback_prompt="feedback_prompt",
                email_when_grouped=True,
                genre=GenreChoice.ELECTRONIC.name,
            ).count(),
            1,
        )
Exemplo n.º 10
0
    def setUp(self):
        # graham's request will be assigned, but not lewis's
        self.graham_user = FeedbackGroupsUser.create(
            email="*****@*****.**",
            password="******",
        )
        self.lewis_user = FeedbackGroupsUser.create(
            email="*****@*****.**",
            password="******",
        )
        self.graham_user.save()
        self.lewis_user.save()

        self.feedback_group = FeedbackGroup(name="name")
        self.feedback_group.save()

        self.graham_feedback_request = FeedbackRequest(
            user=self.graham_user,
            media_url="https://soundcloud.com/ruairidx/grey",
            media_type=MediaTypeChoice.SOUNDCLOUD.name,
            feedback_prompt="feedback_prompt",
            feedback_group=self.feedback_group,
            email_when_grouped=True,
            genre=GenreChoice.ELECTRONIC.name,
        )
        self.lewis_feedback_request = FeedbackRequest(
            user=self.lewis_user,
            media_url="https://soundcloud.com/ruairidx/bruno",
            media_type=MediaTypeChoice.SOUNDCLOUD.name,
            feedback_prompt="feedback_prompt",
            feedback_group=None,
            email_when_grouped=True,
            genre=GenreChoice.HIPHOP.name,
        )
        self.graham_feedback_request.save()
        self.lewis_feedback_request.save()
Exemplo n.º 11
0
class RepliesTest(TestCase):
    def setUp(self):
        self.graham_user = FeedbackGroupsUser.create(
            email="*****@*****.**",
            password="******",
        )
        self.lewis_user = FeedbackGroupsUser.create(
            email="*****@*****.**",
            password="******",
        )
        self.graham_user.save()
        self.lewis_user.save()

        self.feedback_group = FeedbackGroup(name="name")
        self.feedback_group.save()

        self.lewis_feedback_request = FeedbackRequest(
            user=self.lewis_user,
            media_url="https://soundcloud.com/ruairidx/bruno",
            media_type=MediaTypeChoice.SOUNDCLOUD.name,
            feedback_prompt="feedback_prompt",
            feedback_group=self.feedback_group,
            email_when_grouped=True,
            genre=GenreChoice.HIPHOP.name,
        )
        self.lewis_feedback_request.save()

        self.graham_feedback_response = FeedbackResponse(
            feedback_request=self.lewis_feedback_request,
            user=self.graham_user,
            feedback="grahamfeedback",
            submitted=True,
            rating=4,
            allow_replies=True,
        )
        self.graham_feedback_response.save()

        self.lewis_reply_to_graham = FeedbackResponseReply(
            feedback_response=self.graham_feedback_response,
            user=self.lewis_user,
            text="love from lewis",
            allow_replies=True,
        )
        self.lewis_reply_to_graham.save()

        self.graham_reply_to_graham = FeedbackResponseReply(
            feedback_response=self.graham_feedback_response,
            user=self.graham_user,
            text="i don't want your love",
            allow_replies=False,
        )
        self.graham_reply_to_graham.save()

    def test_logged_out(self):
        info = Mock()
        result = (schema.get_query_type().graphene_type().resolve_replies(
            info=info,
            feedback_response_id=self.graham_feedback_response.id,
        ))
        self.assertIs(result, None)

    def test_bad_id(self):
        info = Mock()
        info.context = Mock()
        info.context.user = self.graham_user.user
        result = (schema.get_query_type().graphene_type().resolve_replies(
            info=info,
            feedback_response_id=1901,
        ))
        self.assertIs(result, None)

    def test_unauthorised(self):
        other_user = FeedbackGroupsUser.create(
            email="*****@*****.**",
            password="******",
        )
        other_user.save()

        info = Mock()
        info.context = Mock()
        info.context.user = other_user.user
        result = (schema.get_query_type().graphene_type().resolve_replies(
            info=info,
            feedback_response_id=self.graham_feedback_response.id,
        ))
        self.assertIs(result, None)

    def test_logged_in(self):
        info = Mock()
        info.context = Mock()
        info.context.user = self.graham_user.user
        result = (schema.get_query_type().graphene_type().resolve_replies(
            info=info,
            feedback_response_id=self.graham_feedback_response.id,
        ))
        expected = FeedbackResponseRepliesType(
            allow_further_replies=False,
            replies=[
                FeedbackResponseReplyType(
                    id=1,
                    username="******",
                    text="love from lewis",
                    allow_replies=True,
                    time_created=self.lewis_reply_to_graham.time_created,
                ),
                FeedbackResponseReplyType(
                    id=2,
                    username="******",
                    text="i don't want your love",
                    allow_replies=False,
                    time_created=self.graham_reply_to_graham.time_created,
                ),
            ],
        )
        self.assertEqual(result, expected)

    def test_logged_in_unrated(self):
        self.graham_feedback_response.rating = None
        self.graham_feedback_response.save()

        info = Mock()
        info.context = Mock()
        info.context.user = self.lewis_user.user
        result = (schema.get_query_type().graphene_type().resolve_replies(
            info=info,
            feedback_response_id=self.graham_feedback_response.id,
        ))
        self.assertIs(result, None)
Exemplo n.º 12
0
class UnassignedRequestTest(TestCase):
    def setUp(self):
        # graham's request will be assigned, but not lewis's
        self.graham_user = FeedbackGroupsUser.create(
            email="*****@*****.**",
            password="******",
        )
        self.lewis_user = FeedbackGroupsUser.create(
            email="*****@*****.**",
            password="******",
        )
        self.graham_user.save()
        self.lewis_user.save()

        self.feedback_group = FeedbackGroup(name="name")
        self.feedback_group.save()

        self.graham_feedback_request = FeedbackRequest(
            user=self.graham_user,
            media_url="https://soundcloud.com/ruairidx/grey",
            media_type=MediaTypeChoice.SOUNDCLOUD.name,
            feedback_prompt="feedback_prompt",
            feedback_group=self.feedback_group,
            email_when_grouped=True,
            genre=GenreChoice.ELECTRONIC.name,
        )
        self.lewis_feedback_request = FeedbackRequest(
            user=self.lewis_user,
            media_url="https://soundcloud.com/ruairidx/bruno",
            media_type=MediaTypeChoice.SOUNDCLOUD.name,
            feedback_prompt="feedback_prompt",
            feedback_group=None,
            email_when_grouped=True,
            genre=GenreChoice.HIPHOP.name,
        )
        self.graham_feedback_request.save()
        self.lewis_feedback_request.save()

    def test_logged_out(self):
        info = Mock()
        result = (
            schema.get_query_type().graphene_type().resolve_unassigned_request(
                info=info, ))
        self.assertIs(result, None)

    def test_logged_in_without_unassigned_request(self):
        info = Mock()
        info.context = Mock()
        info.context.user = self.graham_user.user
        result = (
            schema.get_query_type().graphene_type().resolve_unassigned_request(
                info=info, ))

        self.assertIs(result, None)

    def test_logged_in_with_unassigned_request(self):
        info = Mock()
        info.context = Mock()
        info.context.user = self.lewis_user.user
        result = (
            schema.get_query_type().graphene_type().resolve_unassigned_request(
                info=info, ))
        expected = FeedbackRequestType(
            id=2,
            media_url="https://soundcloud.com/ruairidx/bruno",
            media_type=MediaTypeChoice.SOUNDCLOUD.name,
            feedback_prompt="feedback_prompt",
            email_when_grouped=True,
            genre=GenreChoice.HIPHOP.name,
        )
        self.assertEqual(result, expected)
Exemplo n.º 13
0
class FeedbackGroupsTest(TestCase):
    def setUp(self):
        self.graham_user = FeedbackGroupsUser.create(
            email="*****@*****.**",
            password="******",
        )
        self.lewis_user = FeedbackGroupsUser.create(
            email="*****@*****.**",
            password="******",
        )
        self.graham_user.save()
        self.lewis_user.save()

        with patch("django.utils.timezone.now",
                   Mock(return_value=DEFAULT_DATETIME)):
            self.feedback_group = FeedbackGroup(name="name")
            self.feedback_group.save()

        self.graham_feedback_request = FeedbackRequest(
            user=self.graham_user,
            media_url="https://soundcloud.com/ruairidx/grey",
            media_type=MediaTypeChoice.SOUNDCLOUD.name,
            feedback_prompt="feedback_prompt",
            feedback_group=self.feedback_group,
            email_when_grouped=True,
            genre=GenreChoice.ELECTRONIC.name,
        )
        self.lewis_feedback_request = FeedbackRequest(
            user=self.lewis_user,
            media_url="https://soundcloud.com/ruairidx/bruno",
            media_type=MediaTypeChoice.SOUNDCLOUD.name,
            feedback_prompt="feedback_prompt",
            feedback_group=self.feedback_group,
            email_when_grouped=True,
            genre=GenreChoice.HIPHOP.name,
        )
        self.graham_feedback_request.save()
        self.lewis_feedback_request.save()

        self.graham_feedback_response = FeedbackResponse(
            feedback_request=self.lewis_feedback_request,
            user=self.graham_user,
            feedback="grahamfeedback",
            submitted=True,
            rating=4,
            allow_replies=False,
        )
        self.lewis_feedback_response = FeedbackResponse(
            feedback_request=self.graham_feedback_request,
            user=self.lewis_user,
            feedback="lewisfeedback",
            submitted=True,
            rating=3,
            allow_replies=True,
        )
        self.graham_feedback_response.save()
        self.lewis_feedback_response.save()

    def test_logged_out(self):
        info = Mock()
        result = (
            schema.get_query_type().graphene_type().resolve_feedback_groups(
                info=info, ))
        self.assertEqual(result, [])

    def test_logged_in(self):
        info = Mock()
        info.context = Mock()
        info.context.user = self.graham_user.user
        result = (
            schema.get_query_type().graphene_type().resolve_feedback_groups(
                info=info, ))
        expected = [
            FeedbackGroupType(
                id=self.feedback_group.id,
                name="name",
                media_url="https://soundcloud.com/ruairidx/grey",
                media_type=MediaTypeChoice.SOUNDCLOUD.name,
                feedback_request=FeedbackRequestType(
                    id=1,
                    media_url="https://soundcloud.com/ruairidx/grey",
                    media_type=MediaTypeChoice.SOUNDCLOUD.name,
                    feedback_prompt="feedback_prompt",
                    email_when_grouped=True,
                    genre=GenreChoice.ELECTRONIC.name,
                ),
                time_created=DEFAULT_DATETIME,
                members=1,
                trackless_members=0,
                feedback_responses=[
                    FeedbackResponseType(
                        id=1,
                        feedback_request=FeedbackRequestType(
                            id=2,
                            media_url="https://soundcloud.com/ruairidx/bruno",
                            media_type=MediaTypeChoice.SOUNDCLOUD.name,
                            feedback_prompt="feedback_prompt",
                            email_when_grouped=True,
                            genre=GenreChoice.HIPHOP.name,
                        ),
                        feedback="grahamfeedback",
                        submitted=True,
                        rating=4,
                        allow_replies=False,
                        replies=0,
                        unread_replies=0,
                    )
                ],
                user_feedback_responses=[
                    FeedbackResponseType(
                        id=2,
                        feedback_request=FeedbackRequestType(
                            id=1,
                            media_url="https://soundcloud.com/ruairidx/grey",
                            media_type=MediaTypeChoice.SOUNDCLOUD.name,
                            feedback_prompt="feedback_prompt",
                            email_when_grouped=True,
                            genre=GenreChoice.ELECTRONIC.name,
                        ),
                        feedback="lewisfeedback",
                        submitted=True,
                        rating=3,
                        allow_replies=True,
                        replies=0,
                        unread_replies=0,
                    )
                ],
                user_feedback_response_count=1,
            )
        ]
        self.assertEqual(result, expected)
Exemplo n.º 14
0
class FeedbackGroupTest(TestCase):
    def setUp(self):
        self.graham_user = FeedbackGroupsUser.create(
            email="*****@*****.**",
            password="******",
        )
        self.lewis_user = FeedbackGroupsUser.create(
            email="*****@*****.**",
            password="******",
        )
        self.graham_user.save()
        self.lewis_user.save()

        with patch("django.utils.timezone.now",
                   Mock(return_value=DEFAULT_DATETIME)):
            self.feedback_group = FeedbackGroup(name="name")
            self.feedback_group.save()

        self.graham_feedback_request = FeedbackRequest(
            user=self.graham_user,
            media_url="https://soundcloud.com/ruairidx/grey",
            media_type=MediaTypeChoice.SOUNDCLOUD.name,
            feedback_prompt="feedback_prompt",
            feedback_group=self.feedback_group,
            email_when_grouped=True,
            genre=GenreChoice.ELECTRONIC.name,
        )
        self.lewis_feedback_request = FeedbackRequest(
            user=self.lewis_user,
            media_url="https://soundcloud.com/ruairidx/bruno",
            media_type=MediaTypeChoice.SOUNDCLOUD.name,
            feedback_prompt="feedback_prompt",
            feedback_group=self.feedback_group,
            email_when_grouped=True,
            genre=GenreChoice.HIPHOP.name,
        )
        self.graham_feedback_request.save()
        self.lewis_feedback_request.save()

        self.graham_feedback_response = FeedbackResponse(
            feedback_request=self.lewis_feedback_request,
            user=self.graham_user,
            feedback="grahamfeedback",
            submitted=True,
            rating=4,
            allow_replies=False,
        )
        self.lewis_feedback_response = FeedbackResponse(
            feedback_request=self.graham_feedback_request,
            user=self.lewis_user,
            feedback="lewisfeedback",
            submitted=True,
            rating=3,
            allow_replies=False,
        )
        self.graham_feedback_response.save()
        self.lewis_feedback_response.save()

    def test_logged_out(self):
        info = Mock()
        result = (
            schema.get_query_type().graphene_type().resolve_feedback_group(
                info=info,
                feedback_group_id=self.feedback_group.id,
            ))
        self.assertIs(result, None)

    def test_bad_id(self):
        info = Mock()
        info.context = Mock()
        info.context.user = self.graham_user.user
        result = (
            schema.get_query_type().graphene_type().resolve_feedback_group(
                info=info,
                feedback_group_id=1901,
            ))
        self.assertIs(result, None)

    def test_logged_in(self):
        info = Mock()
        info.context = Mock()
        info.context.user = self.graham_user.user
        result = (
            schema.get_query_type().graphene_type().resolve_feedback_group(
                info=info,
                feedback_group_id=self.feedback_group.id,
            ))
        expected = FeedbackGroupType(
            id=self.feedback_group.id,
            name="name",
            media_url="https://soundcloud.com/ruairidx/grey",
            media_type=MediaTypeChoice.SOUNDCLOUD.name,
            feedback_request=FeedbackRequestType(
                id=1,
                media_url="https://soundcloud.com/ruairidx/grey",
                media_type=MediaTypeChoice.SOUNDCLOUD.name,
                feedback_prompt="feedback_prompt",
                email_when_grouped=True,
                genre=GenreChoice.ELECTRONIC.name,
            ),
            time_created=DEFAULT_DATETIME,
            members=1,
            trackless_members=0,
            feedback_responses=[
                FeedbackResponseType(
                    id=1,
                    feedback_request=FeedbackRequestType(
                        id=2,
                        media_url="https://soundcloud.com/ruairidx/bruno",
                        media_type=MediaTypeChoice.SOUNDCLOUD.name,
                        feedback_prompt="feedback_prompt",
                        email_when_grouped=True,
                        genre=GenreChoice.HIPHOP.name,
                    ),
                    feedback="grahamfeedback",
                    submitted=True,
                    rating=4,
                    allow_replies=False,
                    replies=0,
                    unread_replies=0,
                )
            ],
            user_feedback_responses=[
                FeedbackResponseType(
                    id=2,
                    feedback_request=FeedbackRequestType(
                        id=1,
                        media_url="https://soundcloud.com/ruairidx/grey",
                        media_type=MediaTypeChoice.SOUNDCLOUD.name,
                        feedback_prompt="feedback_prompt",
                        email_when_grouped=True,
                        genre=GenreChoice.ELECTRONIC.name,
                    ),
                    feedback="lewisfeedback",
                    submitted=True,
                    rating=3,
                    allow_replies=False,
                    replies=0,
                    unread_replies=0,
                )
            ],
            user_feedback_response_count=1,
        )
        self.assertEqual(result, expected)

    def test_logged_in_without_submitting_feedback(self):
        self.graham_feedback_response.submitted = False
        self.graham_feedback_response.save()

        info = Mock()
        info.context = Mock()
        info.context.user = self.graham_user.user
        result = (
            schema.get_query_type().graphene_type().resolve_feedback_group(
                info=info,
                feedback_group_id=self.feedback_group.id,
            ))
        expected = FeedbackGroupType(
            id=self.feedback_group.id,
            name="name",
            media_url="https://soundcloud.com/ruairidx/grey",
            media_type=MediaTypeChoice.SOUNDCLOUD.name,
            feedback_request=FeedbackRequestType(
                id=1,
                media_url="https://soundcloud.com/ruairidx/grey",
                media_type=MediaTypeChoice.SOUNDCLOUD.name,
                feedback_prompt="feedback_prompt",
                email_when_grouped=True,
                genre=GenreChoice.ELECTRONIC.name,
            ),
            time_created=DEFAULT_DATETIME,
            members=1,
            trackless_members=0,
            feedback_responses=[
                FeedbackResponseType(
                    id=1,
                    feedback_request=FeedbackRequestType(
                        id=2,
                        media_url="https://soundcloud.com/ruairidx/bruno",
                        media_type=MediaTypeChoice.SOUNDCLOUD.name,
                        feedback_prompt="feedback_prompt",
                        email_when_grouped=True,
                        genre=GenreChoice.HIPHOP.name,
                    ),
                    feedback="grahamfeedback",
                    submitted=False,
                    rating=4,
                    allow_replies=False,
                    replies=0,
                    unread_replies=0,
                )
            ],
            user_feedback_responses=None,
            # Should still show user that count is 1 even if we don't
            # send the actual response itself.
            user_feedback_response_count=1,
        )
        self.assertEqual(result, expected)

    def test_logged_in_with_trackless_requests(self):
        self.lewis_feedback_response.delete()
        self.graham_feedback_request.media_url = None
        self.graham_feedback_request.save()

        info = Mock()
        info.context = Mock()
        info.context.user = self.graham_user.user
        result = (
            schema.get_query_type().graphene_type().resolve_feedback_group(
                info=info,
                feedback_group_id=self.feedback_group.id,
            ))
        expected = FeedbackGroupType(
            id=self.feedback_group.id,
            name="name",
            media_url=None,
            media_type=MediaTypeChoice.SOUNDCLOUD.name,
            feedback_request=FeedbackRequestType(
                id=1,
                media_url=None,
                media_type=MediaTypeChoice.SOUNDCLOUD.name,
                feedback_prompt="feedback_prompt",
                email_when_grouped=True,
                genre=GenreChoice.ELECTRONIC.name,
            ),
            time_created=DEFAULT_DATETIME,
            members=1,
            trackless_members=0,
            feedback_responses=[
                FeedbackResponseType(
                    id=1,
                    feedback_request=FeedbackRequestType(
                        id=2,
                        media_url="https://soundcloud.com/ruairidx/bruno",
                        media_type=MediaTypeChoice.SOUNDCLOUD.name,
                        feedback_prompt="feedback_prompt",
                        email_when_grouped=True,
                        genre=GenreChoice.HIPHOP.name,
                    ),
                    feedback="grahamfeedback",
                    submitted=True,
                    rating=4,
                    allow_replies=False,
                    replies=0,
                    unread_replies=0,
                )
            ],
            user_feedback_responses=[],
            user_feedback_response_count=0,
        )
        self.assertEqual(result, expected)

    def test_logged_in_with_replies(self):
        self.lewis_feedback_response.allow_replies = True
        self.lewis_feedback_response.save()
        self.graham_feedback_response.allow_replies = True
        self.graham_feedback_response.save()

        graham_reply_to_lewis = FeedbackResponseReply(
            feedback_response=self.lewis_feedback_response,
            user=self.graham_user,
            text="love from graham",
            allow_replies=False,
        )
        graham_reply_to_lewis.save()

        lewis_reply_to_graham = FeedbackResponseReply(
            feedback_response=self.graham_feedback_response,
            user=self.lewis_user,
            text="love from lewis",
            allow_replies=True,
        )
        lewis_reply_to_graham.save()

        graham_reply_to_graham = FeedbackResponseReply(
            feedback_response=self.graham_feedback_response,
            user=self.graham_user,
            text="i don't want your love",
            allow_replies=False,
        )
        graham_reply_to_graham.save()

        info = Mock()
        info.context = Mock()
        info.context.user = self.graham_user.user
        result = (
            schema.get_query_type().graphene_type().resolve_feedback_group(
                info=info,
                feedback_group_id=self.feedback_group.id,
            ))
        expected = FeedbackGroupType(
            id=self.feedback_group.id,
            name="name",
            media_url="https://soundcloud.com/ruairidx/grey",
            media_type=MediaTypeChoice.SOUNDCLOUD.name,
            feedback_request=FeedbackRequestType(
                id=1,
                media_url="https://soundcloud.com/ruairidx/grey",
                media_type=MediaTypeChoice.SOUNDCLOUD.name,
                feedback_prompt="feedback_prompt",
                email_when_grouped=True,
                genre=GenreChoice.ELECTRONIC.name,
            ),
            time_created=DEFAULT_DATETIME,
            members=1,
            trackless_members=0,
            feedback_responses=[
                FeedbackResponseType(
                    id=1,
                    feedback_request=FeedbackRequestType(
                        id=2,
                        media_url="https://soundcloud.com/ruairidx/bruno",
                        media_type=MediaTypeChoice.SOUNDCLOUD.name,
                        feedback_prompt="feedback_prompt",
                        email_when_grouped=True,
                        genre=GenreChoice.HIPHOP.name,
                    ),
                    feedback="grahamfeedback",
                    submitted=True,
                    rating=4,
                    allow_replies=True,
                    replies=2,
                    unread_replies=1,
                )
            ],
            user_feedback_responses=[
                FeedbackResponseType(
                    id=2,
                    feedback_request=FeedbackRequestType(
                        id=1,
                        media_url="https://soundcloud.com/ruairidx/grey",
                        media_type=MediaTypeChoice.SOUNDCLOUD.name,
                        feedback_prompt="feedback_prompt",
                        email_when_grouped=True,
                        genre=GenreChoice.ELECTRONIC.name,
                    ),
                    feedback="lewisfeedback",
                    submitted=True,
                    rating=3,
                    allow_replies=True,
                    replies=1,
                    unread_replies=0,
                )
            ],
            user_feedback_response_count=1,
        )
        self.assertEqual(result, expected)
Exemplo n.º 15
0
class SendGroupReminderEmailsTest(TestCase):
    def setUp(self):
        self.graham_user = FeedbackGroupsUser.create(
            email="*****@*****.**",
            password="******",
        )
        self.lewis_user = FeedbackGroupsUser.create(
            email="*****@*****.**",
            password="******",
        )
        self.graham_user.save()
        self.lewis_user.save()

        with patch("django.utils.timezone.now",
                   Mock(return_value=GROUP_TIME_CREATED)):
            self.feedback_group = FeedbackGroup(name="name")
            self.feedback_group.save()

        self.graham_feedback_request = FeedbackRequest(
            user=self.graham_user,
            media_url="https://soundcloud.com/ruairidx/grey",
            media_type=MediaTypeChoice.SOUNDCLOUD.name,
            feedback_prompt="feedback_prompt",
            feedback_group=self.feedback_group,
            email_when_grouped=True,
        )
        self.lewis_feedback_request = FeedbackRequest(
            user=self.lewis_user,
            media_url="https://soundcloud.com/ruairidx/bruno",
            media_type=MediaTypeChoice.SOUNDCLOUD.name,
            feedback_prompt="feedback_prompt",
            feedback_group=self.feedback_group,
            email_when_grouped=True,
        )
        self.graham_feedback_request.save()
        self.lewis_feedback_request.save()

        self.graham_feedback_response = FeedbackResponse(
            feedback_request=self.lewis_feedback_request,
            user=self.graham_user,
            submitted=False,
        )
        self.lewis_feedback_response = FeedbackResponse(
            feedback_request=self.graham_feedback_request,
            user=self.lewis_user,
            submitted=False,
        )
        self.graham_feedback_response.save()
        self.lewis_feedback_response.save()

    def test_send_reminders_to_all(self):
        with patch("django.utils.timezone.now", Mock(return_value=FUTURE)):
            call_command("send_group_reminder_emails")

        # Assert emails were sent to both
        self.assertEqual(len(mail.outbox), 2)

        self.graham_feedback_request.refresh_from_db()
        self.lewis_feedback_request.refresh_from_db()
        self.assertTrue(self.graham_feedback_request.reminder_email_sent)
        self.assertTrue(self.lewis_feedback_request.reminder_email_sent)

    def test_do_not_send_reminder_if_not_email_when_grouped(self):
        self.lewis_feedback_request.email_when_grouped = False
        self.lewis_feedback_request.save()

        with patch("django.utils.timezone.now", Mock(return_value=FUTURE)):
            call_command("send_group_reminder_emails")

        # Assert email was only sent to graham
        self.assertEqual(len(mail.outbox), 1)

        self.graham_feedback_request.refresh_from_db()
        self.lewis_feedback_request.refresh_from_db()
        self.assertTrue(self.graham_feedback_request.reminder_email_sent)
        self.assertFalse(self.lewis_feedback_request.reminder_email_sent)

    def test_do_not_send_reminder_if_already_sent(self):
        self.lewis_feedback_request.reminder_email_sent = True
        self.lewis_feedback_request.save()

        with patch("django.utils.timezone.now", Mock(return_value=FUTURE)):
            call_command("send_group_reminder_emails")

        # Assert email was only sent to graham
        self.assertEqual(len(mail.outbox), 1)

        self.graham_feedback_request.refresh_from_db()
        self.lewis_feedback_request.refresh_from_db()
        self.assertTrue(self.graham_feedback_request.reminder_email_sent)

    def test_do_not_send_reminder_if_too_soon(self):
        self.lewis_user.send_reminder_emails = False
        self.lewis_user.save()

        with patch("django.utils.timezone.now", Mock(return_value=FUTURE)):
            call_command("send_group_reminder_emails")

        # Assert email was only sent to graham
        self.assertEqual(len(mail.outbox), 1)

        self.graham_feedback_request.refresh_from_db()
        self.lewis_feedback_request.refresh_from_db()
        self.assertTrue(self.graham_feedback_request.reminder_email_sent)
        self.assertFalse(self.lewis_feedback_request.reminder_email_sent)

    def test_do_not_send_reminder_if_user_disabled_send_reminder_emails(self):
        self.lewis_user.send_reminder_emails = False
        self.lewis_user.save()

        with patch("django.utils.timezone.now", Mock(return_value=FUTURE)):
            call_command("send_group_reminder_emails")

        self.assertEqual(len(mail.outbox), 1)

        self.graham_feedback_request.refresh_from_db()
        self.lewis_feedback_request.refresh_from_db()
        self.assertTrue(self.graham_feedback_request.reminder_email_sent)
        self.assertFalse(self.lewis_feedback_request.reminder_email_sent)

    def test_do_not_send_reminder_if_unassigned(self):
        self.lewis_feedback_request.feedback_group = None
        self.lewis_feedback_request.save()
        self.graham_feedback_request.feedback_group = None
        self.graham_feedback_request.save()

        with patch("django.utils.timezone.now", Mock(return_value=FUTURE)):
            call_command("send_group_reminder_emails")

        self.assertEqual(len(mail.outbox), 0)

        self.graham_feedback_request.refresh_from_db()
        self.lewis_feedback_request.refresh_from_db()
        self.assertFalse(self.graham_feedback_request.reminder_email_sent)
        self.assertFalse(self.lewis_feedback_request.reminder_email_sent)

    def test_do_not_send_reminder_if_response_submitted(self):
        self.lewis_feedback_response.submitted = True
        self.lewis_feedback_response.save()

        with patch("django.utils.timezone.now", Mock(return_value=FUTURE)):
            call_command("send_group_reminder_emails")

        self.assertEqual(len(mail.outbox), 1)

        self.graham_feedback_request.refresh_from_db()
        self.lewis_feedback_request.refresh_from_db()
        self.assertTrue(self.graham_feedback_request.reminder_email_sent)
        self.assertFalse(self.lewis_feedback_request.reminder_email_sent)

    def test_trackless_request(self):
        self.lewis_feedback_request.media_url = None
        self.lewis_feedback_request.save()

        with patch("django.utils.timezone.now", Mock(return_value=FUTURE)):
            call_command("send_group_reminder_emails")

        self.assertEqual(len(mail.outbox), 2)

        self.lewis_feedback_request.refresh_from_db()
        self.assertTrue(self.lewis_feedback_request.reminder_email_sent)
        # Really crude way to check that the trackless email template was used.
        self.assertTrue(
            "Don't forget to check out your feedback group and write feedback for its other members!"
            in mail.outbox[1].body)