def test_different_username(self): info = Mock() with self.assertRaises(graphql_jwt.exceptions.JSONWebTokenError): schema.get_mutation_type().fields["tokenAuth"].resolver( root=Mock(), info=info, username="******", password="******", )
def test_invalid_email(self): info = Mock() info.context = Mock() info.context.user = self.user.user result = ( schema.get_mutation_type() .fields["updateEmail"] .resolver(self=Mock(), info=info, email="not an email address",) ) self.assertEqual( result, UpdateEmail(success=False, error="Please provide a valid email address.",), ) self.assertEqual( FeedbackGroupsUser.objects.filter( user__username="******", ).count(), 1, ) self.assertEqual( FeedbackGroupsUser.objects.filter( user__username="******", ).count(), 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, )
def test_bad_rating(self): info = Mock() info.context = Mock() info.context.user = self.request_user.user result = ( schema.get_mutation_type() .fields["rateFeedbackResponse"] .resolver( self=Mock(), info=info, feedback_response_id=self.feedback_response.id, rating=10, ) ) self.assertEqual( result, RateFeedbackResponse(success=False, error="Invalid rating",) ) self.assertEqual( FeedbackResponse.objects.filter( user=self.response_user, feedback_request=self.feedback_request, feedback="feedback", rating=None, ).count(), 1, )
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_dropbox(self): 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, )
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_googledrive(self): 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://drive.google.com/file/d/roflcopter/view", 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://drive.google.com/file/d/roflcopter/view", media_type=MediaTypeChoice.GOOGLEDRIVE.name, feedback_prompt="feedback_prompt", email_when_grouped=True, genre=GenreChoice.ELECTRONIC.name, ).count(), 1, )
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_url(self): 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="not a real url", feedback_prompt="feedback_prompt", email_when_grouped=False, genre=GenreChoice.HIPHOP.name, ) ) self.assertEqual( result, EditFeedbackRequest( success=False, error=INVALID_MEDIA_URL_MESSAGE, invalid_media_url=True, ), ) self.assertEqual( FeedbackRequest.objects.filter( user=self.user, media_url="https://soundcloud.com/ruairidx/grey", media_type=MediaTypeChoice.SOUNDCLOUD.name, feedback_prompt="feedback_prompt", genre=GenreChoice.ELECTRONIC.name, ).count(), 1, )
def test_soundcloud(self): 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=True, error=None, invalid_media_url=False, ), ) self.assertEqual( FeedbackRequest.objects.filter( user=self.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, ).count(), 1, )
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, )
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_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, )
def test_logged_out(self): info = Mock() 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="Not logged in.", invalid_media_url=False, ), ) self.assertEqual( FeedbackRequest.objects.filter(user=self.user, ).count(), 0, )
def test_already_rated(self): self.feedback_response.rating = 5 self.feedback_response.save() info = Mock() info.context = Mock() info.context.user = self.request_user.user result = ( schema.get_mutation_type() .fields["rateFeedbackResponse"] .resolver( self=Mock(), info=info, feedback_response_id=self.feedback_response.id, rating=3, ) ) self.assertEqual( result, RateFeedbackResponse( success=False, error="Feedback has already been rated", ), ) self.assertEqual( FeedbackResponse.objects.filter( user=self.response_user, feedback_request=self.feedback_request, feedback="feedback", submitted=True, rating=5, ).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_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_unsupported_platform(self): 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://twitter.com/ruairidx", feedback_prompt="feedback_prompt", email_when_grouped=True, genre=GenreChoice.ELECTRONIC.name, )) self.assertEqual( result, CreateFeedbackRequest( success=False, error=INVALID_MEDIA_URL_MESSAGE, invalid_media_url=True, ), ) self.assertEqual( FeedbackRequest.objects.filter(user=self.user, ).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_different_case(self): 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_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_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_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, )
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_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, )
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, ), )
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, )
def test_no_account(self): info = Mock() result = (schema.get_mutation_type().fields["registerUser"].resolver( self=Mock(), info=info, email="*****@*****.**", password="******", password_repeat="sussexbythesea1901", )) self.assertEqual(result, RegisterUser( success=True, error=None, )) self.assertEqual( FeedbackGroupsUser.objects.filter( user__username="******", ).count(), 1, )
def test_logged_out(self): info = Mock() 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="Not logged in.", )) self.assertEqual( FeedbackRequest.objects.count(), 1, )