class TestQuestionUpdates(TestCaseBase): """Tests that questions are only updated in the right cases.""" client_class = LocalizingClient date_format = "%Y%M%d%H%m%S" def setUp(self): super(TestQuestionUpdates, self).setUp() self.u = UserFactory(is_superuser=True) self.client.login(username=self.u.username, password="******") self.q = QuestionFactory(updated=datetime(2012, 7, 9, 9, 0, 0)) self.a = AnswerFactory(question=self.q) # Get the question from the database so we have a consistent level of # precision during the test. self.q = Question.objects.get(pk=self.q.id) def tearDown(self): self.client.logout() self.u.delete() self.q.delete() def _request_and_no_update(self, url, req_type="POST", data={}): updated = self.q.updated if req_type == "POST": self.client.post(url, data, follow=True) elif req_type == "GET": self.client.get(url, data, follow=True) else: raise ValueError('req_type must be either "GET" or "POST"') self.q = Question.objects.get(pk=self.q.id) eq_( updated.strftime(self.date_format), self.q.updated.strftime(self.date_format), ) def test_no_update_edit(self): url = urlparams(reverse("questions.edit_question", args=[self.q.id])) self._request_and_no_update( url, req_type="POST", data={ "title": "A new title.", "content": "Some new content." }, ) def test_no_update_solve(self): url = urlparams(reverse("questions.solve", args=[self.q.id, self.a.id])) self._request_and_no_update(url) def test_no_update_unsolve(self): url = urlparams( reverse("questions.unsolve", args=[self.q.id, self.a.id])) self._request_and_no_update(url) def test_no_update_vote(self): url = urlparams(reverse("questions.vote", args=[self.q.id])) self._request_and_no_update(url, req_type="POST") def test_no_update_lock(self): url = urlparams(reverse("questions.lock", args=[self.q.id])) self._request_and_no_update(url, req_type="POST") # Now unlock self._request_and_no_update(url, req_type="POST") def test_no_update_tagging(self): url = urlparams(reverse("questions.add_tag", args=[self.q.id])) self._request_and_no_update(url, req_type="POST", data={"tag-name": "foo"}) url = urlparams(reverse("questions.remove_tag", args=[self.q.id])) self._request_and_no_update(url, req_type="POST", data={"remove-tag-foo": 1})
class ProfileDocumentSignalsTests(Elastic7TestCase): def setUp(self): self.user = UserFactory() self.user_id = self.user.id def get_doc(self): return ProfileDocument.get(self.user_id) def test_user_save(self): self.user.username = "******" self.user.save() self.assertEqual(self.get_doc().username, "jdoe") def test_profile_save(self): profile = self.user.profile profile.locale = "foobar" profile.save() self.assertEqual(self.get_doc().locale, "foobar") def test_user_groups_change(self): group = GroupFactory() self.user.groups.add(group) self.assertIn(group.id, self.get_doc().group_ids) self.user.groups.remove(group) self.assertNotIn(group.id, self.get_doc().group_ids) def test_user_products_change(self): profile = self.user.profile product = ProductFactory() profile.products.add(product) self.assertIn(product.id, self.get_doc().product_ids) profile.products.remove(product) self.assertNotIn(product.id, self.get_doc().product_ids) def test_user_delete(self): self.user.delete() with self.assertRaises(NotFoundError): self.get_doc() def test_profile_delete(self): self.user.profile.delete() with self.assertRaises(NotFoundError): self.get_doc() def test_group_delete(self): group = GroupFactory() self.user.groups.add(group) group.delete() self.assertEqual(self.get_doc().group_ids, []) def test_product_delete(self): profile = self.user.profile product = ProductFactory() profile.products.add(product) product.delete() self.assertEqual(self.get_doc().product_ids, [])
class TestQuestionUpdates(TestCaseBase): """Tests that questions are only updated in the right cases.""" client_class = LocalizingClient date_format = '%Y%M%d%H%m%S' def setUp(self): super(TestQuestionUpdates, self).setUp() self.u = UserFactory(is_superuser=True) self.client.login(username=self.u.username, password='******') self.q = QuestionFactory(updated=datetime(2012, 7, 9, 9, 0, 0)) self.a = AnswerFactory(question=self.q) # Get the question from the database so we have a consistent level of # precision during the test. self.q = Question.objects.get(pk=self.q.id) def tearDown(self): self.client.logout() self.u.delete() self.q.delete() def _request_and_no_update(self, url, req_type='POST', data={}): updated = self.q.updated if req_type == 'POST': self.client.post(url, data, follow=True) elif req_type == 'GET': self.client.get(url, data, follow=True) else: raise ValueError('req_type must be either "GET" or "POST"') self.q = Question.objects.get(pk=self.q.id) eq_(updated.strftime(self.date_format), self.q.updated.strftime(self.date_format)) def test_no_update_edit(self): url = urlparams(reverse('questions.edit_question', args=[self.q.id])) self._request_and_no_update(url, req_type='POST', data={ 'title': 'A new title.', 'content': 'Some new content.' }) def test_no_update_solve(self): url = urlparams(reverse('questions.solve', args=[self.q.id, self.a.id])) self._request_and_no_update(url) def test_no_update_unsolve(self): url = urlparams(reverse('questions.unsolve', args=[self.q.id, self.a.id])) self._request_and_no_update(url) def test_no_update_vote(self): url = urlparams(reverse('questions.vote', args=[self.q.id])) self._request_and_no_update(url, req_type='POST') def test_no_update_lock(self): url = urlparams(reverse('questions.lock', args=[self.q.id])) self._request_and_no_update(url, req_type='POST') # Now unlock self._request_and_no_update(url, req_type='POST') def test_no_update_tagging(self): url = urlparams(reverse('questions.add_tag', args=[self.q.id])) self._request_and_no_update(url, req_type='POST', data={ 'tag-name': 'foo' }) url = urlparams(reverse('questions.remove_tag', args=[self.q.id])) self._request_and_no_update(url, req_type='POST', data={ 'remove-tag-foo': 1 })