Created tests to projects app

remotes/origin/enhancement/email-actions
David Barragán Merino 2013-10-07 13:20:23 +02:00
parent fd14b1132c
commit 7c4ab12ec5
4 changed files with 272 additions and 12 deletions

View File

@ -80,24 +80,24 @@ class WatchedMixin(object):
watchers_to_notify = set()
watchers_by_role = self._get_watchers_by_role()
owner = watchers_by_role.get("owner")
owner = watchers_by_role.get("owner", None)
if (owner and owner.allow_notify_owned()
and owner.allow_notify_by_me(changer)):
watchers_to_notify.add(owner)
assigned_to = watchers_by_role.get("assigned_to")
assigned_to = watchers_by_role.get("assigned_to", None)
if (assigned_to and assigned_to.allow_notify_assigned_to()
and assigned_to.allow_notify_by_me(changer)):
watchers_to_notify.add(assigned_to)
suscribed_watchers = watchers_by_role.get("suscribed_watchers")
suscribed_watchers = watchers_by_role.get("suscribed_watchers", None)
if suscribed_watchers:
for suscribed_watcher in suscribed_watchers:
if (suscribed_watcher and suscribed_watcher.allow_notify_suscribed()
and suscribed_watcher.allow_notify_by_me(changer)):
watchers_to_notify.add(suscribed_watcher)
(project, project_owner) = watchers_by_role.get("project_owner")
(project, project_owner) = watchers_by_role.get("project_owner", (None, None))
if project_owner \
and project_owner.allow_notify_project(project) \
and project_owner.allow_notify_by_me(self._changer):

View File

@ -11,25 +11,22 @@ class AttachmentSerializer(serializers.ModelSerializer):
url = serializers.SerializerMethodField("get_url")
def get_url(self, obj):
# FIXME: add sites or correct url.
if obj.attached_file:
return "http://localhost:8000{0}".format(obj.attached_file.url)
return None
return obj.attached_file.url if obj and obj.attached_file else ""
class Meta:
model = models.Attachment
fields = ("id", "project", "owner", "attached_file",
"created_date", "object_id", "url")
fields = ("id", "project", "owner", "attached_file", "created_date",
"modified_date", "object_id", "url")
read_only_fields = ("owner",)
fields = ()
class ProjectSerializer(serializers.ModelSerializer):
tags = PickleField()
tags = PickleField(required=False)
list_of_milestones = serializers.Field(source="list_of_milestones")
class Meta:
model = models.Project
read_only_fields = ("owner",)
# User Stories common serializers

View File

@ -0,0 +1,31 @@
# -*- coding: utf-8 -*-
from django.db.models.loading import get_model
def create_project(id, owner, save=True):
model = get_model("projects", "Project")
instance = model(
name="Project {0}".format(id),
description="This is a test project",
owner=owner,
total_story_points=id
)
if save:
instance.save()
return instance
def add_membership(project, user, role_slug="dev"):
model = get_model("users", "Role")
role = model.objects.get(slug=role_slug)
model = get_model("projects", "Membership")
instance = model.objects.create(
project=project,
user=user,
role=role
)
return instance

View File

@ -0,0 +1,232 @@
# -*- coding: utf-8 -*-
import json
from django import test
from django.core.urlresolvers import reverse
from greenmine.base.users.tests import create_user
from greenmine.projects.models import Project
from . import create_project, add_membership
class ProjectsTestCase(test.TestCase):
fixtures = ["initial_role.json", ]
def setUp(self):
self.user1 = create_user(1)
self.user2 = create_user(2)
self.user3 = create_user(3)
self.project1 = create_project(1, self.user1)
self.project2 = create_project(2, self.user1)
self.project3 = create_project(3, self.user2)
add_membership(self.project1, self.user3, "dev")
add_membership(self.project3, self.user3, "dev")
def test_list_projects_by_anon(self):
response = self.client.get(reverse("projects-list"))
self.assertEqual(response.status_code, 401)
def test_list_projects_by_owner(self):
response = self.client.login(username=self.user1.username,
password=self.user1.username)
self.assertTrue(response)
response = self.client.get(reverse("projects-list"))
self.assertEqual(response.status_code, 200)
projects_list = response.data
self.assertEqual(len(projects_list), 2)
self.client.logout()
response = self.client.login(username=self.user2.username,
password=self.user2.username)
self.assertTrue(response)
response = self.client.get(reverse("projects-list"))
self.assertEqual(response.status_code, 200)
projects_list = response.data
self.assertEqual(len(projects_list), 1)
self.client.logout()
def test_list_projects_by_membership(self):
response = self.client.login(username=self.user3.username,
password=self.user3.username)
self.assertTrue(response)
response = self.client.get(reverse("projects-list"))
self.assertEqual(response.status_code, 200)
projects_list = response.data
self.assertEqual(len(projects_list), 2)
self.client.logout()
def test_view_project_by_anon(self):
response = self.client.get(reverse("projects-detail", args=(self.project1.id,)))
self.assertEqual(response.status_code, 401)
def test_view_project_by_owner(self):
response = self.client.login(username=self.user1.username,
password=self.user1.username)
self.assertTrue(response)
response = self.client.get(reverse("projects-detail", args=(self.project1.id,)))
self.assertEqual(response.status_code, 200)
response = self.client.get(reverse("projects-detail", args=(self.project2.id,)))
self.assertEqual(response.status_code, 200)
self.client.logout()
def test_view_project_by_membership(self):
response = self.client.login(username=self.user3.username,
password=self.user3.username)
self.assertTrue(response)
response = self.client.get(reverse("projects-detail", args=(self.project1.id,)))
self.assertEqual(response.status_code, 200)
response = self.client.get(reverse("projects-detail", args=(self.project3.id,)))
self.assertEqual(response.status_code, 200)
self.client.logout()
def test_view_project_by_not_membership(self):
response = self.client.login(username=self.user1.username,
password=self.user1.username)
self.assertTrue(response)
response = self.client.get(reverse("projects-detail", args=(self.project3.id,)))
self.assertEqual(response.status_code, 404)
self.client.logout()
def test_create_project_by_anon(self):
data = {
"name": "Test Project",
"description": "A new Test Project",
"total_story_points": 10
}
self.assertEqual(Project.objects.all().count(), 3)
response = self.client.post(
reverse("projects-list"),
json.dumps(data),
content_type="application/json")
self.assertEqual(response.status_code, 401)
self.assertEqual(Project.objects.all().count(), 3)
def test_create_project_by_auth(self):
data = {
"name": "Test Project",
"description": "A new Test Project",
"total_story_points": 10
}
self.assertEqual(Project.objects.all().count(), 3)
response = self.client.login(username=self.user1.username,
password=self.user1.username)
self.assertTrue(response)
response = self.client.post(
reverse("projects-list"),
json.dumps(data),
content_type="application/json")
self.assertEqual(response.status_code, 201)
self.assertEqual(Project.objects.all().count(), 4)
self.client.logout()
def test_edit_project_by_anon(self):
data = {
"description": "Edited project description",
}
self.assertEqual(Project.objects.all().count(), 3)
self.assertNotEqual(data["description"], self.project1.description)
response = self.client.patch(
reverse("projects-detail", args=(self.project1.id,)),
json.dumps(data),
content_type="application/json")
self.assertEqual(response.status_code, 401)
self.assertEqual(Project.objects.all().count(), 3)
def test_edit_project_by_owner(self):
data = {
"description": "Modified project description",
}
self.assertEqual(Project.objects.all().count(), 3)
self.assertNotEqual(data["description"], self.project1.description)
response = self.client.login(username=self.user1.username,
password=self.user1.username)
self.assertTrue(response)
response = self.client.patch(
reverse("projects-detail", args=(self.project1.id,)),
json.dumps(data),
content_type="application/json")
self.assertEqual(response.status_code, 200)
self.assertEqual(data["description"], response.data["description"])
self.assertEqual(Project.objects.all().count(), 3)
self.client.logout()
def test_edit_project_by_membership(self):
data = {
"description": "Edited project description",
}
self.assertEqual(Project.objects.all().count(), 3)
self.assertNotEqual(data["description"], self.project1.description)
response = self.client.login(username=self.user3.username,
password=self.user3.username)
self.assertTrue(response)
response = self.client.patch(
reverse("projects-detail", args=(self.project1.id,)),
json.dumps(data),
content_type="application/json")
self.assertEqual(response.status_code, 200)
self.assertEqual(data["description"], response.data["description"])
self.assertEqual(Project.objects.all().count(), 3)
self.client.logout()
def test_edit_project_by_not_membership(self):
data = {
"description": "Edited project description",
}
self.assertEqual(Project.objects.all().count(), 3)
self.assertNotEqual(data["description"], self.project1.description)
response = self.client.login(username=self.user2.username,
password=self.user2.username)
self.assertTrue(response)
response = self.client.patch(
reverse("projects-detail", args=(self.project1.id,)),
json.dumps(data),
content_type="application/json")
self.assertEqual(response.status_code, 404)
self.assertEqual(Project.objects.all().count(), 3)
self.client.logout()
def test_delete_project_by_anon(self):
self.assertEqual(Project.objects.all().count(), 3)
response = self.client.delete(reverse("projects-detail", args=(self.project1.id,)))
self.assertEqual(response.status_code, 401)
self.assertEqual(Project.objects.all().count(), 3)
def test_delete_project_by_owner(self):
self.assertEqual(Project.objects.all().count(), 3)
response = self.client.login(username=self.user1.username,
password=self.user1.username)
self.assertTrue(response)
response = self.client.delete(reverse("projects-detail", args=(self.project1.id,)))
self.assertEqual(response.status_code, 204)
self.assertEqual(Project.objects.all().count(), 2)
self.client.logout()
def test_delete_project_by_membership(self):
self.assertEqual(Project.objects.all().count(), 3)
response = self.client.login(username=self.user3.username,
password=self.user3.username)
self.assertTrue(response)
response = self.client.delete(reverse("projects-detail", args=(self.project1.id,)))
self.assertEqual(response.status_code, 204)
self.assertEqual(Project.objects.all().count(), 2)
self.client.logout()
def test_delete_project_by_not_membership(self):
self.assertEqual(Project.objects.all().count(), 3)
response = self.client.login(username=self.user1.username,
password=self.user1.username)
self.assertTrue(response)
response = self.client.delete(reverse("projects-detail", args=(self.project3.id,)))
self.assertEqual(response.status_code, 404)
self.assertEqual(Project.objects.all().count(), 3)
self.client.logout()