def create_feedback_group(self, feedback_requests, genres): feedback_group = FeedbackGroup(name="test replace lol") feedback_group.save() genre_title = "/".join([genre.value for genre in genres]) feedback_group.name = f"Feedback Group #{feedback_group.id} - {genre_title}" feedback_group.save() requests_count = 0 responses_count = 0 for feedback_request in feedback_requests: feedback_request.feedback_group = feedback_group feedback_request.save() requests_count += 1 # TODO: try and remove this; ideally we'd just create FeedbackResponse rows # only when a user submits feedback. # # Create empty feedback responses for each request-user pairing in the group. for other_feedback_request in feedback_requests: if feedback_request != other_feedback_request: feedback_response = FeedbackResponse( feedback_request=feedback_request, user=other_feedback_request.user, ) feedback_response.save() responses_count += 1 self.stdout.write( f"Created {feedback_group.name} with {requests_count} requests and {responses_count} responses.", ) return feedback_group, genres
def test_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 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()
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)
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)
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, ), )
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, )
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)