|
|
@ -0,0 +1,74 @@ |
|
|
|
from hc.api.models import Channel, Check |
|
|
|
from hc.test import BaseTestCase |
|
|
|
|
|
|
|
|
|
|
|
class TrabsferTestCase(BaseTestCase): |
|
|
|
def setUp(self): |
|
|
|
super(TrabsferTestCase, self).setUp() |
|
|
|
|
|
|
|
self.check = Check.objects.create(project=self.bobs_project) |
|
|
|
self.url = "/checks/%s/transfer/" % self.check.code |
|
|
|
|
|
|
|
def test_it_serves_form(self): |
|
|
|
self.client.login(username="[email protected]", password="password") |
|
|
|
r = self.client.get(self.url) |
|
|
|
self.assertContains(r, "Transfer to Another Project") |
|
|
|
|
|
|
|
def test_it_works(self): |
|
|
|
self.bobs_profile.current_project = self.bobs_project |
|
|
|
self.bobs_profile.save() |
|
|
|
|
|
|
|
self.client.login(username="[email protected]", password="password") |
|
|
|
payload = {"project": self.project.code} |
|
|
|
r = self.client.post(self.url, payload, follow=True) |
|
|
|
self.assertRedirects(r, "/checks/%s/details/" % self.check.code) |
|
|
|
self.assertContains(r, "Check transferred successfully") |
|
|
|
|
|
|
|
check = Check.objects.get() |
|
|
|
self.assertEqual(check.project, self.project) |
|
|
|
|
|
|
|
# Bob's current project should have been updated |
|
|
|
self.bobs_profile.refresh_from_db() |
|
|
|
self.assertEqual(self.bobs_profile.current_project, self.project) |
|
|
|
|
|
|
|
def test_it_obeys_check_limit(self): |
|
|
|
# Alice's projects cannot accept checks due to limits: |
|
|
|
self.profile.check_limit = 0 |
|
|
|
self.profile.save() |
|
|
|
|
|
|
|
self.client.login(username="[email protected]", password="password") |
|
|
|
payload = {"project": self.project.code} |
|
|
|
r = self.client.post(self.url, payload) |
|
|
|
self.assertEqual(r.status_code, 400) |
|
|
|
|
|
|
|
def test_it_reassigns_channels(self): |
|
|
|
alices_mail = Channel.objects.create(kind="email", |
|
|
|
project=self.project) |
|
|
|
|
|
|
|
bobs_mail = Channel.objects.create(kind="email", |
|
|
|
project=self.bobs_project) |
|
|
|
|
|
|
|
self.check.channel_set.add(bobs_mail) |
|
|
|
|
|
|
|
self.client.login(username="[email protected]", password="password") |
|
|
|
payload = {"project": self.project.code} |
|
|
|
self.client.post(self.url, payload) |
|
|
|
|
|
|
|
# alices_mail should be the only assigned channel: |
|
|
|
self.assertEqual(self.check.channel_set.get(), alices_mail) |
|
|
|
|
|
|
|
def test_it_checks_check_ownership(self): |
|
|
|
self.client.login(username="[email protected]", password="password") |
|
|
|
|
|
|
|
# Charlie tries to transfer Alice's check into his project |
|
|
|
payload = {"project": self.charlies_project.code} |
|
|
|
r = self.client.post(self.url, payload) |
|
|
|
self.assertEqual(r.status_code, 404) |
|
|
|
|
|
|
|
def test_it_checks_project_access(self): |
|
|
|
self.client.login(username="[email protected]", password="password") |
|
|
|
|
|
|
|
# Alice tries to transfer her check into Charlie's project |
|
|
|
payload = {"project": self.charlies_project.code} |
|
|
|
r = self.client.post(self.url, payload) |
|
|
|
self.assertEqual(r.status_code, 404) |