class ProjectsViewsTest(TestCase): username = "******" password = "******" def setUp(self): self.group, created = Group.objects.get_or_create(name='test') self.user, created = DjangoUser.objects.get_or_create(username=self.username) self.user.set_password(self.password) self.user.save() perspective, created = Perspective.objects.get_or_create(name='default') perspective.set_default_user() perspective.save() ModuleSetting.set('default_perspective', perspective.id) self.contact_type = ContactType(name='test') self.contact_type.set_default_user() self.contact_type.save() self.contact = Contact(name='test', contact_type=self.contact_type) self.contact.related_user = self.user.profile self.contact.set_default_user() self.contact.save() self.project = Project(name='test', manager=self.contact, client=self.contact) self.project.set_default_user() self.project.save() self.status = TaskStatus(name='test') self.status.set_default_user() self.status.save() self.milestone = Milestone(name='test', project=self.project, status=self.status) self.milestone.set_default_user() self.milestone.save() self.task = Task(name='test', project=self.project, status=self.status, caller=self.contact) self.task.set_default_user() self.task.save() self.task_assigned = Task(name='test', project=self.project, status=self.status) self.task_assigned.save() self.task_assigned.assigned.add(self.user.profile) self.time_slot = TaskTimeSlot(task=self.task, details='test', time_from=datetime.now(), user=self.user.profile) self.time_slot.set_default_user() self.time_slot.save() self.parent = Project(name='test') self.parent.set_default_user() self.parent.save() self.parent_task = Task( name='test', project=self.project, status=self.status, priority=3) self.parent_task.set_default_user() self.parent_task.save() self.client = Client() self.client.login(username=self.username, password=self.password) def test_index(self): """Test project index page with login at /projects/""" response = self.client.get(reverse('projects')) self.assertEquals(response.status_code, 200) def assertQuerysetEqual(self, qs, values, transform=repr, ordered=True, msg=None): return super(ProjectsViewsTest, self).assertQuerysetEqual(qs, map(repr, values), transform, ordered, msg) def test_index_owned(self): """Test owned tasks page at /task/owned/""" response = self.client.get(reverse('projects_index_owned')) self.assertEquals(response.status_code, 200) self.assertQuerysetEqual(response.context['milestones'], [self.milestone]) self.assertQuerysetEqual(response.context['tasks'], [self.task]) self.assertEqual(type(response.context['filters']), FilterForm) # todo: actually test the form generated, if it has the right fields and querysets # self.assertEqual(str(response.context['filters']), str(filterform)) def test_index_assigned(self): """Test assigned tasks page at /task/assigned/""" response = self.client.get(reverse('projects_index_assigned')) self.assertEquals(response.status_code, 200) self.assertQuerysetEqual(response.context['milestones'], [self.milestone]) self.assertQuerysetEqual(response.context['tasks'], [self.task_assigned]) self.assertEqual(type(response.context['filters']), FilterForm) # Projects def test_project_add(self): """Test index page with login at /projects/add/""" response = self.client.get(reverse('project_add')) self.assertEquals(response.status_code, 200) self.assertEqual(type(response.context['form']), ProjectForm) projects_qty = Project.objects.count() form_params = {'name': 'project_name', 'details': 'new project details'} response = self.client.post(reverse('project_add'), data=form_params) self.assertEquals(response.status_code, 302) project_id = response['Location'].split('/')[-1] self.assertRedirects(response, reverse('projects_project_view', args=[project_id])) self.assertEqual(Project.objects.count(), projects_qty+1) project = Project.objects.get(id=project_id) self.assertEqual(project.name, form_params['name']) self.assertEqual(project.details, form_params['details']) def test_project_add_typed(self): """Test index page with login at /projects/add/<project_id>/""" response = self.client.get(reverse('projects_project_add_typed', args=[self.parent.id])) self.assertEquals(response.status_code, 200) def test_project_view_login(self): """Test index page with login at /projects/view/<project_id>""" response = self.client.get(reverse('projects_project_view', args=[self.project.id])) self.assertEquals(response.status_code, 200) def test_project_edit_login(self): """Test index page with login at /projects/edit//<project_id>""" response = self.client.get(reverse('projects_project_edit', args=[self.project.id])) self.assertEquals(response.status_code, 200) def test_project_delete_login(self): """Test index page with login at /projects/delete//<project_id>""" response = self.client.get(reverse('projects_project_delete', args=[self.project.id])) self.assertEquals(response.status_code, 200) # Milestones def test_milestone_add(self): """Test index page with login at /projects/milestone/add""" response = self.client.get(reverse('projects_milestone_add')) self.assertEquals(response.status_code, 200) def test_milestone_add_typed(self): """Test index page with login at /projects/milestone/add/<project_id>""" response = self.client.get(reverse('projects_milestone_add_typed', args=[self.parent.id])) self.assertEquals(response.status_code, 200) def test_milestone_view_login(self): """Test index page with login at /projects/milestone/view/<milestone_id>""" response = self.client.get(reverse('projects_milestone_view', args=[self.milestone.id])) self.assertEquals(response.status_code, 200) def test_milestone_edit_login(self): """Test index page with login at /projects/milestone/edit/<milestone_id>""" response = self.client.get(reverse('projects_milestone_edit', args=[self.milestone.id])) self.assertEquals(response.status_code, 200) def test_milestone_delete_login(self): """Test index page with login at /projects/milestone/delete/<milestone_id>""" response = self.client.get(reverse('projects_milestone_delete', args=[self.milestone.id])) self.assertEquals(response.status_code, 200) # Tasks def test_task_add(self): """Test index page with login at /projects/task/add/""" response = self.client.get(reverse('projects_task_add')) self.assertEquals(response.status_code, 200) def test_task_add_typed(self): """Test index page with login at /projects/task/add/<project_id>""" response = self.client.get(reverse('projects_task_add_typed', args=[self.project.id])) self.assertEquals(response.status_code, 200) def test_task_add_to_milestone(self): """Test index page with login at /projects/task/add/<milestone_id>""" response = self.client.get(reverse('projects_task_add_to_milestone', args=[self.milestone.id])) self.assertEquals(response.status_code, 200) def test_task_add_subtask(self): """Test index page with login at /projects/task/add/<task_id>/""" response = self.client.get(reverse('projects_task_add_subtask', args=[self.parent_task.id])) self.assertEquals(response.status_code, 200) def test_task_set_status(self): """Test index page with login at /projects/task/add/<task_id>/status/<status_id>""" response = self.client.get(reverse('projects_task_set_status', args=[self.task.id, self.status.id])) self.assertEquals(response.status_code, 200) def test_task_view_login(self): """Test index page with login at /projects/task/view/<task_id>""" response = self.client.get(reverse('projects_task_view', args=[self.task.id])) self.assertEquals(response.status_code, 200) def test_task_edit_login(self): """Test index page with login at /projects/task/edit/<task_id>""" response = self.client.get(reverse('projects_task_edit', args=[self.task.id])) self.assertEquals(response.status_code, 200) def test_task_delete_login(self): """Test index page with login at /projects/task/delete/<task_id>""" response = self.client.get(reverse('projects_task_delete', args=[self.task.id])) self.assertEquals(response.status_code, 200) # Task Time Slots def test_time_slot_add(self): """Test index page with login at /projects/task/view/time/<task_id>add/""" response = self.client.get(reverse('projects_task_time_slot_add', args=[self.task.id])) self.assertEquals(response.status_code, 200) def test_time_slot_view_login(self): """Test index page with login at /projects/task/view/time/<time_slot_id>""" response = self.client.get(reverse('projects_task_view', args=[self.task.id])) self.assertEquals(response.status_code, 200) def test_time_slot_edit_login(self): """Test index page with login at /projects/task/edit/time/<time_slot_id>""" response = self.client.get(reverse('projects_task_edit', args=[self.task.id])) self.assertEquals(response.status_code, 200) def test_time_slot_delete_login(self): """Test index page with login at /projects/task/delete/time/<time_slot_id>""" response = self.client.get(reverse('projects_task_delete', args=[self.task.id])) self.assertEquals(response.status_code, 200) # Task Statuses def test_task_status_add(self): """Test index page with login at /projects/task/status/add/""" response = self.client.get(reverse('projects_task_status_add')) self.assertEquals(response.status_code, 200) def test_task_status_view_login(self): """Test index page with login at /projects/task/status/view/<status_id>/""" response = self.client.get(reverse('projects_index_by_status', args=[self.status.id])) self.assertEquals(response.status_code, 200) def test_task_status_edit_login(self): """Test index page with login at /projects/task/status/edit/<status_id>/""" response = self.client.get(reverse('projects_task_status_edit', args=[self.status.id])) self.assertEquals(response.status_code, 200) def test_task_status_delete_login(self): """Test index page with login at /projects/task/status/delete/<status_id>/""" response = self.client.get(reverse('projects_task_status_delete', args=[self.status.id])) self.assertEquals(response.status_code, 200) # Settings def test_project_settings_view(self): """Test index page with login at /projects/settings/view/""" response = self.client.get(reverse('projects_settings_view')) self.assertEquals(response.status_code, 200) def test_project_settings_edit(self): """Test index page with login at /projects/settings/edit/""" response = self.client.get(reverse('projects_settings_edit')) self.assertEquals(response.status_code, 200)