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_assign_groups_ignore_old_requests(self): # Assert that we ignore feedback requests that already have feedback groups users = self.users[:4] old_feedback_group = FeedbackGroup(name="nothing really") old_feedback_group.save() for user in users: # First user's request already has a feedback group. if user == users[0]: FeedbackRequest( user=user, media_url="https://soundcloud.com/ruairidx/grey", feedback_group=old_feedback_group, email_when_grouped=True, ).save() else: FeedbackRequest( user=user, media_url="https://soundcloud.com/ruairidx/grey", email_when_grouped=True, ).save() call_command("assign_groups") # Assert one group was created (excluding old group) and that responses were # created for everyone in the group. self.assertEqual(FeedbackGroup.objects.count(), 2) self.assertEqual(FeedbackResponse.objects.count(), 6) # New group, not old_feedback_group feedback_group = FeedbackGroup.objects.last() # Check we didn't overwrite the old request or anything stupid. self.assertEqual( FeedbackRequest.objects.filter( user=users[0], feedback_group=old_feedback_group).count(), 1, ) for user in users[1:4]: self.assertEqual( FeedbackRequest.objects.filter( user=user, feedback_group=feedback_group).count(), 1, ) # assert correct emails were sent (not to user in old group) self.assertEqual(len(mail.outbox), 3) for i in range(0, 3): email = mail.outbox[i] self.assertEqual(email.subject, "your new feedback group") self.assertEqual(len(email.recipients()), 1) self.assertEqual(email.recipients()[0], users[i + 1].email) self.assertTrue( "https://www.howsmytrack.com/group/2" in email.body) # Verify that HTML content was sent in the email as well self.assertTrue(len(email.alternatives) > 0) self.assertTrue( len(email.alternatives[0][0]) > 0) # Message content self.assertEqual(email.alternatives[0][1], "text/html")
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 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_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 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 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_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 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()
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 UnassignedRequestTest(TestCase): 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_logged_out(self): info = Mock() result = ( schema.get_query_type().graphene_type().resolve_unassigned_request( info=info, )) self.assertIs(result, None) def test_logged_in_without_unassigned_request(self): info = Mock() info.context = Mock() info.context.user = self.graham_user.user result = ( schema.get_query_type().graphene_type().resolve_unassigned_request( info=info, )) self.assertIs(result, None) def test_logged_in_with_unassigned_request(self): info = Mock() info.context = Mock() info.context.user = self.lewis_user.user result = ( schema.get_query_type().graphene_type().resolve_unassigned_request( info=info, )) expected = 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, ) self.assertEqual(result, expected)
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 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)