def task_time_slot_add(request, task_id, response_format='html'): """Time slot add to preselected task""" task = get_object_or_404(Task, pk=task_id) if not request.user.profile.has_permission(task, mode='x'): return user_denied(request, message="You don't have access to this Task") if request.POST: task_time_slot = TaskTimeSlot( task=task, time_to=datetime.now(), user=request.user.profile) form = TaskTimeSlotForm( request.user.profile, task_id, request.POST, instance=task_time_slot) if 'cancel' in request.POST: return HttpResponseRedirect(reverse('projects_task_view', args=[task.id])) elif form.is_valid(): task_time_slot = form.save() task_time_slot.set_user_from_request(request) return HttpResponseRedirect(reverse('projects_task_view', args=[task.id])) else: form = TaskTimeSlotForm(request.user.profile, task_id) subtasks = Object.filter_by_request( request, Task.objects.filter(parent=task)) time_slots = Object.filter_by_request( request, TaskTimeSlot.objects.filter(task=task)) context = _get_default_context(request) context.update({'form': form, 'task': task, 'subtasks': subtasks, 'time_slots': time_slots}) return render_to_response('projects/task_time_add', context, context_instance=RequestContext(request), response_format=response_format)
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_is_being_done_by(self): duser, created = DjangoUser.objects.get_or_create(username='******') self.assertFalse(self.task.is_being_done_by(duser.profile)) time_from = datetime(year=2015, month=8, day=3) timeslot = TaskTimeSlot(task=self.task, user=duser.profile, time_from=time_from) timeslot.save() self.task.save() self.assertTrue(self.task.is_being_done_by(duser.profile))
def task_time_slot_start(request, task_id, response_format='html'): """Start TaskTimeSlot for preselected Task""" task = get_object_or_404(Task, pk=task_id) if not request.user.profile.has_permission(task, mode='x'): return user_denied(request, message="You don't have access to this Task") if not task.is_being_done_by(request.user.profile): task_time_slot = TaskTimeSlot( task=task, time_from=datetime.now(), user=request.user.profile) task_time_slot.save() task_time_slot.set_user_from_request(request) return HttpResponseRedirect(reverse('projects_task_view', args=[task_id]))
def setUp(self): self.group, created = Group.objects.get_or_create(name='test_group') self.user, created = DjangoUser.objects.get_or_create(username=self.username) self.user.set_password(self.password) self.user.save() self.project = Project(name='test') self.project.save() self.taskstatus = TaskStatus(name='test') self.taskstatus.save() self.task = Task(name='test', project=self.project, status=self.taskstatus) self.task.save() self.time_from = datetime(year=2015, month=8, day=3) self.total_time = timedelta(minutes=61) self.time_to = self.time_from + self.total_time self.timeslot = TaskTimeSlot(task=self.task, user=self.user.profile, time_from=self.time_from, time_to=self.time_to) self.timeslot.save()
def test_get_time(self): """A time slot without a time from or time to will return a delta of 0""" timeslot2 = TaskTimeSlot(task=self.task, user=self.user.profile, time_from=self.time_from) timeslot3 = TaskTimeSlot(task=self.task, user=self.user.profile, time_to=self.time_to) self.assertEqual(timeslot2.get_time(), timedelta(0)) self.assertEqual(timeslot3.get_time(), timedelta(0)) self.assertEqual(self.timeslot.get_time(), self.total_time)
def add_time_slot(self, total_time): duser, created = DjangoUser.objects.get_or_create(username='******') time_from = datetime(year=2015, month=8, day=3) time_to = time_from + total_time timeslot = TaskTimeSlot(task=self.task, user=duser.profile, time_from=time_from, time_to=time_to) timeslot.save()
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)
def test_get_time_tuple(self): h, m, s = self.timeslot.get_time_tuple() self.assertEqual((h, m, s), (1, 1, 0)) timeslot2 = TaskTimeSlot(task=self.task, user=self.user.profile, time_to=self.time_to) self.assertIsNone(timeslot2.get_time_tuple())
class TestModelTaskTimeSlot(TestCase): username = "******" password = "******" def setUp(self): self.group, created = Group.objects.get_or_create(name='test_group') self.user, created = DjangoUser.objects.get_or_create(username=self.username) self.user.set_password(self.password) self.user.save() self.project = Project(name='test') self.project.save() self.taskstatus = TaskStatus(name='test') self.taskstatus.save() self.task = Task(name='test', project=self.project, status=self.taskstatus) self.task.save() self.time_from = datetime(year=2015, month=8, day=3) self.total_time = timedelta(minutes=61) self.time_to = self.time_from + self.total_time self.timeslot = TaskTimeSlot(task=self.task, user=self.user.profile, time_from=self.time_from, time_to=self.time_to) self.timeslot.save() def test_get_absolute_url(self): self.timeslot.get_absolute_url() def test_get_time_secs(self): with freeze_time(datetime(year=2015, month=8, day=4)): self.assertEqual(self.timeslot.get_time_secs(), 86400) def test_get_time(self): """A time slot without a time from or time to will return a delta of 0""" timeslot2 = TaskTimeSlot(task=self.task, user=self.user.profile, time_from=self.time_from) timeslot3 = TaskTimeSlot(task=self.task, user=self.user.profile, time_to=self.time_to) self.assertEqual(timeslot2.get_time(), timedelta(0)) self.assertEqual(timeslot3.get_time(), timedelta(0)) self.assertEqual(self.timeslot.get_time(), self.total_time) def test_get_time_tuple(self): h, m, s = self.timeslot.get_time_tuple() self.assertEqual((h, m, s), (1, 1, 0)) timeslot2 = TaskTimeSlot(task=self.task, user=self.user.profile, time_to=self.time_to) self.assertIsNone(timeslot2.get_time_tuple()) def test_get_time_string(self): self.assertEqual(self.timeslot.get_time_string(), ' 1 hours 1 minutes') total_time = timedelta(minutes=1) self.timeslot.time_to = self.time_from + total_time self.assertEqual(self.timeslot.get_time_string(), ' 1 minutes') # if it has a timedelta of zero it will use now-time_from total_time = timedelta(minutes=0) self.timeslot.time_to = self.time_from + total_time with freeze_time(datetime(year=2015, month=8, day=4)): self.assertEqual(self.timeslot.get_time_string(), '24 hours ') total_time = timedelta(seconds=30) self.timeslot.time_to = self.time_from + total_time self.assertEqual(self.timeslot.get_time_string(), 'Less than 1 minute') total_time = timedelta(minutes=60) self.timeslot.time_to = self.time_from + total_time self.assertEqual(self.timeslot.get_time_string(), ' 1 hours ') self.timeslot.time_from = None self.assertEqual(self.timeslot.get_time_string(), '') self.timeslot.time_from = self.time_from self.timeslot.time_to = None with freeze_time(datetime(year=2015, month=8, day=4)): self.assertEqual(self.timeslot.get_time_string(), '24 hours ') def test_is_open(self): # a time slot with both time_from and time_to means it is closed self.assertFalse(self.timeslot.is_open()) self.timeslot.time_to = None self.assertTrue(self.timeslot.is_open())