Newer
Older
from django.test import TestCase, override_settings
from django.urls import reverse_lazy
from opentech.apply.activity.models import Activity, APPLICANT, ALL
from opentech.apply.activity.tests.factories import CommentFactory
from opentech.apply.users.tests.factories import UserFactory
@override_settings(ROOT_URLCONF='opentech.apply.urls')
class TestCommentEdit(TestCase):
def post_to_edit(self, comment_pk, message='my message'):
return self.client.post(
reverse_lazy('api:v1:comments:edit', kwargs={'pk': comment_pk}),
secure=True,
data={'message': message},
)
def test_cant_edit_if_not_author(self):
comment = CommentFactory()
response = self.post_to_edit(comment.pk)
self.assertEqual(response.status_code, 403)
def test_edit_updates_correctly(self):
user = UserFactory()
comment = CommentFactory(user=user)
self.client.force_login(user)
new_message = 'hi there'
response = self.post_to_edit(comment.pk, new_message)
self.assertEqual(response.status_code, 200, response.json())
self.assertEqual(Activity.objects.count(), 2)
comment.refresh_from_db()
time = comment.timestamp.timestamp() * 1000
self.assertEqual(time, response.json()['timestamp'])
self.assertFalse(comment.current)
self.assertEqual(response.json()['message'], new_message)
def test_incorrect_id_denied(self):
response = self.post_to_edit(10000)
self.assertEqual(response.status_code, 403, response.json())
def test_does_nothing_if_same_message(self):
user = UserFactory()
comment = CommentFactory(user=user)
self.client.force_login(user)
self.post_to_edit(comment.pk, comment.message)
self.assertEqual(Activity.objects.count(), 1)
def test_cant_change_visibility(self):
user = UserFactory()
comment = CommentFactory(user=user, visibility=APPLICANT)
self.client.force_login(user)
response = self.client.post(
reverse_lazy('api:v1:comments:edit', kwargs={'pk': comment.pk}),
secure=True,
data={
'message': 'the new message',
'visibility': ALL,
self.assertEqual(response.status_code, 200, response.json())
self.assertEqual(response.json()['visibility'], APPLICANT)
def test_out_of_order_does_nothing(self):
user = UserFactory()
comment = CommentFactory(user=user)
self.client.force_login(user)
new_message = 'hi there'
newer_message = 'hello there'
response_one = self.post_to_edit(comment.pk, new_message)
response_two = self.post_to_edit(comment.pk, newer_message)
self.assertEqual(response_one.status_code, 200, response_one.json())
self.assertEqual(response_two.status_code, 404, response_two.json())
self.assertEqual(Activity.objects.count(), 2)