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()
예제 #2
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()
예제 #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()

        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()
예제 #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()

        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()
예제 #5
0
 def setUp(self):
     self.user = FeedbackGroupsUser.create(
         email="*****@*****.**",
         password="******",
     )
     self.user.rating = 4.5
     self.user.save()
    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,
        )
예제 #7
0
    def test_duplicates(self):
        """Since some accounts had already been created with the same email
        in different cases when this change was made, allow logging into these
        existing accounts using the exact email they were registered with,
        including casing.
        """
        duplicate_user = FeedbackGroupsUser.create(
            email="*****@*****.**",
            password="******",
        )
        duplicate_user.save()

        info = Mock()
        result = (schema.get_mutation_type().fields["tokenAuth"].resolver(
            root=Mock(),
            info=info,
            username="******",
            password="******",
        ))
        self.assertIsNotNone(result)
        self.assertIsNotNone(result.token)
        self.assertEqual(
            graphql_jwt.utils.jwt_decode(result.token).get("username"),
            "*****@*****.**",
        )
예제 #8
0
    def test_existing_account_with_email(self):
        other_user = FeedbackGroupsUser.create(
            email="*****@*****.**", password="******",
        )
        other_user.save()

        info = Mock()
        info.context = Mock()
        info.context.user = self.user.user
        result = (
            schema.get_mutation_type()
            .fields["updateEmail"]
            .resolver(self=Mock(), info=info, email="*****@*****.**",)
        )

        self.assertEqual(
            result,
            UpdateEmail(
                success=False,
                error="An account for that email address already exists.",
            ),
        )

        self.assertEqual(
            FeedbackGroupsUser.objects.filter(
                user__username="******",
            ).count(),
            1,
        )
        self.assertEqual(
            FeedbackGroupsUser.objects.filter(
                user__username="******",
            ).count(),
            1,
        )
예제 #9
0
    def mutate(self, info, email, password, password_repeat):
        validator = EmailValidator()
        try:
            validator(email)
        except ValidationError:
            return RegisterUser(success=False,
                                error="Please provide a valid email address.")

        # Don't allow users to sign up with the same email in a different case.
        existing_users = User.objects.filter(username__iexact=email).count()
        if existing_users > 0:
            return RegisterUser(
                success=False,
                error="An account for that email address already exists.")

        if password == password_repeat:
            try:
                validate_password(password)
            except ValidationError:
                return RegisterUser(success=False,
                                    error=INVALID_PASSWORD_MESSAGE)

            with transaction.atomic():
                user = FeedbackGroupsUser.create(email=email,
                                                 password=password)
                user.save()
                return RegisterUser(success=bool(user.id))
        return RegisterUser(success=False, error="Passwords don't match.")
예제 #10
0
 def setUp(self):
     self.users = []
     for i in range(0, MAX_RATINGS_TO_CONSIDER * 2 + 1):
         user = FeedbackGroupsUser.create(
             email=f"{i}{EMAIL_DOMAIN}", password="******",
         )
         user.save()
         self.users.append(user)
예제 #11
0
 def setUp(self):
     self.users = []
     for email, rating in USER_ACCOUNTS:
         user = FeedbackGroupsUser.create(
             email=email,
             password="******",
         )
         user.rating = rating
         user.save()
         self.users.append(user)
예제 #12
0
    def setUp(self):
        self.user = FeedbackGroupsUser.create(
            email="*****@*****.**",
            password="******",
        )
        self.user.save()
        self.other_user = FeedbackGroupsUser.create(
            email="*****@*****.**",
            password="******",
        )
        self.other_user.save()

        self.existing_request = FeedbackRequest(
            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.HIPHOP.name,
        )
        self.existing_request.save()
예제 #13
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,
            ),
        )
예제 #14
0
    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)
예제 #15
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()
예제 #16
0
    def test_same_url_different_account(self):
        self.another_user = FeedbackGroupsUser.create(
            email="*****@*****.**",
            password="******",
        )
        self.another_user.save()
        # Add a previous unassigned request, should prevent adding another.
        FeedbackRequest(
            user=self.another_user,
            media_url="https://soundcloud.com/ruairidx/bruno",
            media_type=MediaTypeChoice.SOUNDCLOUD.name,
            feedback_prompt="feedback_prompt",
            email_when_grouped=True,
            genre=GenreChoice.ELECTRONIC.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://soundcloud.com/ruairidx/bruno",
                      feedback_prompt="feedback_prompt",
                      email_when_grouped=True,
                      genre=GenreChoice.ELECTRONIC.name,
                  ))

        self.assertEqual(
            result,
            CreateFeedbackRequest(
                success=False,
                error="A request for this track is already pending.",
                invalid_media_url=False,
            ),
        )

        self.assertEqual(
            FeedbackRequest.objects.filter(
                media_url="https://soundcloud.com/ruairidx/bruno",
                user=self.user,
            ).count(),
            0,
        )
    def test_unauthorised(self):
        self.new_user = FeedbackGroupsUser.create(
            email="*****@*****.**", password="******",
        )
        self.new_user.save()
        info = Mock()
        info.context = Mock()
        info.context.user = self.new_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="You are not the owner of this feedback request.",
                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,
        )