def test_edit_attachments(self): """middleware removes and adds attachments to post""" attachments = [ self.mock_attachment(post=self.post), self.mock_attachment(post=self.post), self.mock_attachment(), ] middleware = AttachmentsMiddleware( request=RequestMock( {'attachments': [attachments[0].pk, attachments[2].pk]}), mode=PostingEndpoint.EDIT, user=self.user, post=self.post, ) serializer = middleware.get_serializer() self.assertTrue(serializer.is_valid()) middleware.save(serializer) # attachments were associated with post self.assertEqual(self.post.update_fields, ['attachments_cache']) self.assertEqual(self.post.attachment_set.count(), 2) attachments_filenames = [ attachments[2].filename, attachments[0].filename ] self.assertEqual([a['filename'] for a in self.post.attachments_cache], attachments_filenames)
def test_steal_attachments(self): """middleware validates if attachments are already assigned to other posts""" other_post = testutils.reply_thread(self.thread) attachments = [ self.mock_attachment(post=other_post), self.mock_attachment(), ] middleware = AttachmentsMiddleware( request=RequestMock( {'attachments': [attachments[0].pk, attachments[1].pk]}), mode=PostingEndpoint.EDIT, user=self.user, post=self.post, ) serializer = middleware.get_serializer() self.assertTrue(serializer.is_valid()) middleware.save(serializer) # only unassociated attachment was associated with post self.assertEqual(self.post.update_fields, ['attachments_cache']) self.assertEqual(self.post.attachment_set.count(), 1) self.assertEqual( Attachment.objects.get(pk=attachments[0].pk).post, other_post) self.assertEqual( Attachment.objects.get(pk=attachments[1].pk).post, self.post)
def test_steal_attachments(self): """middleware validates if attachments are already assigned to other posts""" other_post = testutils.reply_thread(self.thread) attachments = [ self.mock_attachment(post=other_post), self.mock_attachment(), ] middleware = AttachmentsMiddleware( request=RequestMock({ 'attachments': [attachments[0].pk, attachments[1].pk] }), mode=PostingEndpoint.EDIT, user=self.user, post=self.post, ) serializer = middleware.get_serializer() self.assertTrue(serializer.is_valid()) middleware.save(serializer) # only unassociated attachment was associated with post self.assertEqual(self.post.update_fields, ['attachments_cache']) self.assertEqual(self.post.attachment_set.count(), 1) self.assertEqual(Attachment.objects.get(pk=attachments[0].pk).post, other_post) self.assertEqual(Attachment.objects.get(pk=attachments[1].pk).post, self.post)
def test_edit_attachments(self): """middleware removes and adds attachments to post""" attachments = [ self.mock_attachment(post=self.post), self.mock_attachment(post=self.post), self.mock_attachment(), ] middleware = AttachmentsMiddleware( request=RequestMock({ 'attachments': [attachments[0].pk, attachments[2].pk] }), mode=PostingEndpoint.EDIT, user=self.user, post=self.post, ) serializer = middleware.get_serializer() self.assertTrue(serializer.is_valid()) middleware.save(serializer) # attachments were associated with post self.assertEqual(self.post.update_fields, ['attachments_cache']) self.assertEqual(self.post.attachment_set.count(), 2) attachments_filenames = [attachments[2].filename, attachments[0].filename] self.assertEqual([a['filename'] for a in self.post.attachments_cache], attachments_filenames)
def test_add_attachments(self): """middleware adds attachments to post""" attachments = [ self.mock_attachment(), self.mock_attachment(), ] middleware = AttachmentsMiddleware(request=RequestMock( {'attachments': [a.pk for a in attachments]}), mode=PostingEndpoint.EDIT, user=self.user, post=self.post) serializer = middleware.get_serializer() self.assertTrue(serializer.is_valid()) middleware.save(serializer) # attachments were associated with post self.assertEqual(self.post.update_fields, ['attachments_cache']) self.assertEqual(self.post.attachment_set.count(), 2) attachments_filenames = list( reversed([a.filename for a in attachments])) self.assertEqual([a['filename'] for a in self.post.attachments_cache], attachments_filenames)