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 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 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 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 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, )
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"), "*****@*****.**", )
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, )
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.")
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)
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)
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()
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, ), )
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 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_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, )