def setUp(self):
        self.request_user = FeedbackGroupsUser.create(
            email="*****@*****.**",
            password="******",
        )
        self.request_user.save()
        self.response_user = FeedbackGroupsUser.create(
            email="*****@*****.**",
            password="******",
        )
        self.response_user.save()

        self.feedback_request = FeedbackRequest(
            user=self.request_user,
            media_url="https://soundcloud.com/ruairidx/grey",
            media_type=MediaTypeChoice.SOUNDCLOUD.name,
            feedback_prompt="feedback_prompt",
            genre=GenreChoice.HIPHOP.name,
        )
        self.feedback_request.save()

        self.feedback_response = FeedbackResponse(
            user=self.response_user,
            feedback_request=self.feedback_request,
        )
        self.feedback_response.save()
Ejemplo n.º 2
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
Ejemplo 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()
Ejemplo 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()
Ejemplo 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,
            ),
        )
Ejemplo n.º 6
0
    def add_request_to_group(self, feedback_request, feedback_group):
        feedback_request.feedback_group = feedback_group

        # Add response forms for the other requests in the group that aren't trackless.
        other_feedback_requests_with_tracks = (
            feedback_group.feedback_requests.filter(
                media_url__isnull=False, ).exclude(
                    id=feedback_request.id, ).all())
        for other_feedback_request in other_feedback_requests_with_tracks:
            feedback_response = FeedbackResponse(
                feedback_request=other_feedback_request,
                user=feedback_request.user,
            )
            feedback_response.save()
        feedback_request.save()
Ejemplo 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()
Ejemplo n.º 8
0
    def test_calculate_user_rating_with_many_ratings(self):
        user = self.users[0]
        for i in range(0, MAX_RATINGS_TO_CONSIDER * 2):
            feedback_request = FeedbackRequest(
                user=self.users[i], media_url="https://soundcloud.com/ruairidx/bruno",
            )
            feedback_request.save()
            # Old rates will be good, new ratings will be a little worse.
            # The newer ratings should prevail.
            if i < MAX_RATINGS_TO_CONSIDER:
                rating = 5
            else:
                rating = 3
            FeedbackResponse(
                feedback_request=feedback_request,
                user=user,
                feedback="jery get ipad",
                submitted=True,
                time_submitted=datetime.fromtimestamp(i, tz=pytz.UTC),
                rating=rating,
            ).save()

        call_command("calculate_user_ratings")

        updated_user = FeedbackGroupsUser.objects.filter(id=user.id,).first()

        # Calculated from most recent ratings, ignoring old ones.
        self.assertEquals(updated_user.rating, 3)
Ejemplo n.º 9
0
    def test_calculate_user_rating_without_enough_rating(self):
        user = self.users[0]
        for i in range(0, MIN_RATINGS_TO_CONSIDER - 1):
            feedback_request = FeedbackRequest(
                user=self.users[i], media_url="https://soundcloud.com/ruairidx/bruno",
            )
            feedback_request.save()
            FeedbackResponse(
                feedback_request=feedback_request,
                user=user,
                feedback="jery get ipad",
                submitted=True,
                time_submitted=datetime.fromtimestamp(i, tz=pytz.UTC),
                rating=5,
            ).save()

        call_command("calculate_user_ratings")

        updated_user = FeedbackGroupsUser.objects.filter(id=user.id,).first()

        self.assertEquals(updated_user.rating, 0)
Ejemplo n.º 10
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)
Ejemplo n.º 11
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)
Ejemplo n.º 12
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)
class SubmitFeedbackResponseTest(TestCase):
    def setUp(self):
        self.request_user = FeedbackGroupsUser.create(
            email="*****@*****.**",
            password="******",
        )
        self.request_user.save()
        self.response_user = FeedbackGroupsUser.create(
            email="*****@*****.**",
            password="******",
        )
        self.response_user.save()

        self.feedback_request = FeedbackRequest(
            user=self.request_user,
            media_url="https://soundcloud.com/ruairidx/grey",
            media_type=MediaTypeChoice.SOUNDCLOUD.name,
            feedback_prompt="feedback_prompt",
            genre=GenreChoice.HIPHOP.name,
        )
        self.feedback_request.save()

        self.feedback_response = FeedbackResponse(
            user=self.response_user,
            feedback_request=self.feedback_request,
        )
        self.feedback_response.save()

    def test_logged_out(self):
        info = Mock()
        result = (schema.get_mutation_type().fields["submitFeedbackResponse"].
                  resolver(
                      self=Mock(),
                      info=info,
                      feedback_response_id=self.feedback_response.id,
                      feedback="feedback",
                      allow_replies=True,
                  ))

        self.assertEqual(
            result,
            SubmitFeedbackResponse(
                success=False,
                error="Not logged in.",
            ))

        self.assertEqual(
            FeedbackResponse.objects.filter(
                user=self.response_user,
                feedback_request=self.feedback_request,
                feedback="feedback",
                submitted=True,
            ).count(),
            0,
        )

    def test_bad_id(self):
        info = Mock()
        info.context = Mock()
        info.context.user = self.response_user.user
        result = (schema.get_mutation_type().fields["submitFeedbackResponse"].
                  resolver(
                      self=Mock(),
                      info=info,
                      feedback_response_id=1901,
                      feedback="feedback",
                      allow_replies=True,
                  ))

        self.assertEqual(
            result,
            SubmitFeedbackResponse(
                success=False,
                error="Invalid feedback_response_id",
            ),
        )

        self.assertEqual(
            FeedbackResponse.objects.filter(
                user=self.response_user,
                feedback_request=self.feedback_request,
                feedback="feedback",
                submitted=True,
            ).count(),
            0,
        )

    def test_already_submitted(self):
        self.feedback_response.submitted = True
        self.feedback_response.save()

        info = Mock()
        info.context = Mock()
        info.context.user = self.response_user.user
        result = (schema.get_mutation_type().fields["submitFeedbackResponse"].
                  resolver(
                      self=Mock(),
                      info=info,
                      feedback_response_id=self.feedback_response.id,
                      feedback="feedback",
                      allow_replies=True,
                  ))

        self.assertEqual(
            result,
            SubmitFeedbackResponse(
                success=False,
                error="Feedback has already been submitted",
            ),
        )

        self.assertEqual(
            FeedbackResponse.objects.filter(
                user=self.response_user,
                feedback_request=self.feedback_request,
                feedback="feedback",
                submitted=True,
            ).count(),
            0,
        )

    def test_logged_in_unsubmitted(self):
        info = Mock()
        info.context = Mock()
        info.context.user = self.response_user.user
        result = (schema.get_mutation_type().fields["submitFeedbackResponse"].
                  resolver(
                      self=Mock(),
                      info=info,
                      feedback_response_id=self.feedback_response.id,
                      feedback="feedback",
                      allow_replies=True,
                  ))

        self.assertEqual(result,
                         SubmitFeedbackResponse(
                             success=True,
                             error=None,
                         ))

        self.assertEqual(
            FeedbackResponse.objects.filter(
                user=self.response_user,
                feedback_request=self.feedback_request,
                feedback="feedback",
                submitted=True,
                allow_replies=True,
            ).count(),
            1,
        )
class AddFeedbackResponseReplyTest(TestCase):
    def setUp(self):
        self.request_user = FeedbackGroupsUser.create(
            email="*****@*****.**",
            password="******",
        )
        self.request_user.save()
        self.response_user = FeedbackGroupsUser.create(
            email="*****@*****.**",
            password="******",
        )
        self.response_user.save()

        self.feedback_request = FeedbackRequest(
            user=self.request_user,
            media_url="https://soundcloud.com/ruairidx/grey",
            media_type=MediaTypeChoice.SOUNDCLOUD.name,
            feedback_prompt="feedback_prompt",
            genre=GenreChoice.HIPHOP.name,
        )
        self.feedback_request.save()

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

    def test_logged_out(self):
        info = Mock()
        result = (schema.get_mutation_type().
                  fields["addFeedbackResponseReply"].resolver(
                      self=Mock(),
                      info=info,
                      feedback_response_id=self.feedback_response.id,
                      text="thanks pal",
                      allow_replies=True,
                  ))

        self.assertEqual(
            result,
            AddFeedbackResponseReply(
                reply=None,
                error="Not logged in.",
            ))

        self.assertEqual(
            FeedbackResponseReply.objects.filter(
                feedback_response=self.feedback_response, ).count(),
            0,
        )

    def test_bad_id(self):
        info = Mock()
        info.context = Mock()
        info.context.user = self.request_user.user
        result = (schema.get_mutation_type().
                  fields["addFeedbackResponseReply"].resolver(
                      self=Mock(),
                      info=info,
                      feedback_response_id=1901,
                      text="thanks pal",
                      allow_replies=True,
                  ))

        self.assertEqual(
            result,
            AddFeedbackResponseReply(
                reply=None,
                error="Invalid feedback_response_id",
            ),
        )

        self.assertEqual(
            FeedbackResponseReply.objects.filter(
                feedback_response=self.feedback_response, ).count(),
            0,
        )

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

        info = Mock()
        info.context = Mock()
        info.context.user = unrelated_user.user
        result = (schema.get_mutation_type().
                  fields["addFeedbackResponseReply"].resolver(
                      self=Mock(),
                      info=info,
                      feedback_response_id=self.feedback_response.id,
                      text="thanks pal",
                      allow_replies=True,
                  ))

        self.assertEqual(
            result,
            AddFeedbackResponseReply(
                reply=None,
                error="You are not authorised to reply to this feedback.",
            ),
        )

        self.assertEqual(
            FeedbackResponseReply.objects.filter(
                feedback_response=self.feedback_response, ).count(),
            0,
        )

    def test_reject_reply_if_not_feedback_response_allow_replies(self):
        self.feedback_response.allow_replies = False
        self.feedback_response.save()

        info = Mock()
        info.context = Mock()
        info.context.user = self.feedback_request.user.user
        result = (schema.get_mutation_type().
                  fields["addFeedbackResponseReply"].resolver(
                      self=Mock(),
                      info=info,
                      feedback_response_id=self.feedback_response.id,
                      text="thanks pal",
                      allow_replies=True,
                  ))

        self.assertEqual(
            result,
            AddFeedbackResponseReply(
                reply=None,
                error="You cannot reply to this feedback.",
            ),
        )

        self.assertEqual(
            FeedbackResponseReply.objects.filter(
                feedback_response=self.feedback_response, ).count(),
            0,
        )

    def test_reject_reply_if_not_existing_reply_allow_replies(self):
        existing_reply = FeedbackResponseReply(
            feedback_response=self.feedback_response,
            user=self.feedback_request.user,
            text="danke mate",
            allow_replies=False,
        )
        existing_reply.save()

        info = Mock()
        info.context = Mock()
        info.context.user = self.feedback_response.user.user
        result = (schema.get_mutation_type().
                  fields["addFeedbackResponseReply"].resolver(
                      self=Mock(),
                      info=info,
                      feedback_response_id=self.feedback_response.id,
                      text="thanks pal",
                      allow_replies=True,
                  ))

        self.assertEqual(
            result,
            AddFeedbackResponseReply(
                reply=None,
                error="You cannot reply to this feedback.",
            ),
        )

        self.assertEqual(
            FeedbackResponseReply.objects.filter(
                feedback_response=self.feedback_response, ).count(),
            1,
        )

    def test_reject_reply_if_response_is_unsubmitted(self):
        self.feedback_response.submitted = False
        self.feedback_response.save()

        info = Mock()
        info.context = Mock()
        info.context.user = self.feedback_response.user.user
        result = (schema.get_mutation_type().
                  fields["addFeedbackResponseReply"].resolver(
                      self=Mock(),
                      info=info,
                      feedback_response_id=self.feedback_response.id,
                      text="thanks pal",
                      allow_replies=True,
                  ))

        self.assertEqual(
            result,
            AddFeedbackResponseReply(
                reply=None,
                error="You cannot reply to this feedback.",
            ),
        )

        self.assertEqual(
            FeedbackResponseReply.objects.filter(
                feedback_response=self.feedback_response, ).count(),
            0,
        )

    def test_successful_reply(self):
        info = Mock()
        info.context = Mock()
        info.context.user = self.feedback_request.user.user
        result = (schema.get_mutation_type().
                  fields["addFeedbackResponseReply"].resolver(
                      self=Mock(),
                      info=info,
                      feedback_response_id=self.feedback_response.id,
                      text="thanks pal",
                      allow_replies=True,
                  ))

        self.assertEqual(
            FeedbackResponseReply.objects.filter(
                feedback_response=self.feedback_response,
                user=self.feedback_request.user,
                text="thanks pal",
                allow_replies=True,
            ).count(),
            1,
        )

        reply = FeedbackResponseReply.objects.filter(
            feedback_response=self.feedback_response,
            user=self.feedback_request.user,
            text="thanks pal",
            allow_replies=True,
        ).first()

        self.assertEqual(
            result,
            AddFeedbackResponseReply(
                reply=FeedbackResponseReplyType(
                    id=1,
                    username="******",
                    text="thanks pal",
                    allow_replies=True,
                    time_created=reply.time_created,
                ),
                error=None,
            ),
        )
Ejemplo n.º 15
0
class MarkRepliesAsReadTest(TestCase):
    def setUp(self):
        self.request_user = FeedbackGroupsUser.create(
            email="*****@*****.**", password="******",
        )
        self.request_user.save()
        self.response_user = FeedbackGroupsUser.create(
            email="*****@*****.**", password="******",
        )
        self.response_user.save()

        self.feedback_request = FeedbackRequest(
            user=self.request_user,
            media_url="https://soundcloud.com/ruairidx/grey",
            media_type=MediaTypeChoice.SOUNDCLOUD.name,
            feedback_prompt="feedback_prompt",
            genre=GenreChoice.HIPHOP.name,
        )
        self.feedback_request.save()

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

        self.feedback_response_reply = FeedbackResponseReply(
            feedback_response=self.feedback_response,
            user=self.request_user,
            text="this is a reply",
            allow_replies=True,
        )
        self.feedback_response_reply.save()

    def test_logged_out(self):
        info = Mock()
        result = (
            schema.get_mutation_type()
            .fields["markRepliesAsRead"]
            .resolver(self=Mock(), info=info, reply_ids=[1],)
        )

        self.assertEqual(
            result, MarkRepliesAsRead(success=False, error="Not logged in.",)
        )

        self.assertEqual(
            FeedbackResponseReply.objects.filter(time_read__isnull=True,).count(), 1,
        )

    def test_invalid_user(self):
        info = Mock()
        info.context = Mock()
        info.context.user = self.request_user.user
        result = (
            schema.get_mutation_type()
            .fields["markRepliesAsRead"]
            .resolver(self=Mock(), info=info, reply_ids=[1],)
        )

        self.assertEqual(result, MarkRepliesAsRead(success=True, error=None,))

        self.assertEqual(
            FeedbackResponseReply.objects.filter(time_read__isnull=True,).count(), 1,
        )

    def test_valid_user(self):
        info = Mock()
        info.context = Mock()
        info.context.user = self.response_user.user
        result = (
            schema.get_mutation_type()
            .fields["markRepliesAsRead"]
            .resolver(self=Mock(), info=info, reply_ids=[1],)
        )

        self.assertEqual(result, MarkRepliesAsRead(success=True, error=None,))

        self.assertEqual(
            FeedbackResponseReply.objects.filter(
                time_read__isnull=False, id=1,
            ).count(),
            1,
        )
Ejemplo n.º 16
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)