def test_send_notice_no_recipients(self): utils.create_test_list_instance() self.recipients.groups.clear() tasks.send_qcreview_notice(self.notice.pk) self.notice.refresh_from_db() assert self.notice.last_sent is None assert len(mail.outbox) == 0
def test_to_table(self): site = USite.objects.create(name="site") unit = utils.create_unit(site=site) utc = utils.create_unit_test_collection(unit=unit) utils.create_test_list_instance(unit_test_collection=utc) unit2 = utils.create_unit(site=None) utc2 = utils.create_unit_test_collection(unit=unit2) utils.create_test_list_instance(unit_test_collection=utc2) rep = qc.NextDueDatesReport() rep.report_format = "csv" context = rep.get_context() table = rep.to_table(context) header_count = table.count([ _("Unit"), _("Name"), _("Frequency"), _("Due Date"), _("Window"), _("Assigned To"), _("Perform") ]) assert header_count == 2
def test_to_table(self): site = USite.objects.create(name="site") unit = utils.create_unit(site=site) utc = utils.create_unit_test_collection(unit=unit) utils.create_test_list_instance(unit_test_collection=utc) unit2 = utils.create_unit(site=None) utc2 = utils.create_unit_test_collection(unit=unit2) utils.create_test_list_instance(unit_test_collection=utc2) rep = qc.TestListInstanceSummaryReport() rep.report_format = "csv" context = rep.get_context() table = rep.to_table(context) header_row = table.index([ 'Site', 'Unit', 'Test list', 'Due Date', 'Work Completed', 'Pass/Fail Status', 'Link', ]) # should be two tlis after header assert len(table[header_row + 1:]) == 2
def test_get_tlis_for_site(self): site = USite.objects.create(name="site") unit = utils.create_unit(site=site) utc = utils.create_unit_test_collection(unit=unit) tli = utils.create_test_list_instance(unit_test_collection=utc) unit2 = utils.create_unit(site=None) utc2 = utils.create_unit_test_collection(unit=unit2) utils.create_test_list_instance(unit_test_collection=utc2) qs = TestListInstance.objects.all() tlis = qc.TestListInstanceSummaryReport().get_tlis_for_site(qs, site) assert list([x.pk for x in tlis]) == [tli.pk]
def test_tli_statuses(self): tli = qa_utils.create_test_list_instance(unit_test_collection=self.utc) qa_utils.create_test_instance(test_list_instance=tli) qa_utils.create_test_instance(test_list_instance=tli) expected = json.loads( json.dumps( { 'pass_fail': tli.pass_fail_summary(), 'review': tli.review_summary(), 'datetime': timezone.localtime(tli.created).replace(microsecond=0), 'all_reviewed': int(tli.all_reviewed), 'work_completed': timezone.localtime( tli.work_completed).replace(microsecond=0), 'in_progress': tli.in_progress, }, cls=DjangoJSONEncoder, )) data = {'tli_id': tli.id} response = self.client.get(reverse('tli_statuses'), data=data) self.assertDictEqual(expected, response.json())
def create_return_to_service_qa(service_event=None, unit_test_collection=None, user_assigned_by=None, datetime_assigned=timezone.now(), add_test_list_instance=False): if service_event is None: service_event = create_service_event() if unit_test_collection is None: unit_test_collection = qa_utils.create_unit_test_collection() if user_assigned_by is None: user_assigned_by = create_user() rtsqa, _ = models.ReturnToServiceQA.objects.get_or_create( service_event=service_event, unit_test_collection=unit_test_collection, user_assigned_by=user_assigned_by, datetime_assigned=datetime_assigned) if add_test_list_instance: if isinstance(add_test_list_instance, qa_models.TestListInstance): tli = add_test_list_instance else: tli = qa_utils.create_test_list_instance( unit_test_collection=unit_test_collection) rtsqa.test_list_instance = tli rtsqa.save() return rtsqa
def test_to_table_group_by_unit_test_date_csv(self): site = USite.objects.create(name="site") unit = utils.create_unit(site=site) utc = utils.create_unit_test_collection(unit=unit) tli = utils.create_test_list_instance(unit_test_collection=utc) ti = utils.create_test_instance(test_list_instance=tli) utils.create_test_instance( test_list_instance=tli, unit_test_info=ti.unit_test_info, work_completed=tli.work_completed - timezone.timedelta(days=1), ) ti3 = utils.create_test_instance( test_list_instance=tli, work_completed=tli.work_completed - timezone.timedelta(days=1), ) rep = qc.TestInstanceDetailsReport( report_opts={ 'unit_test_info__test': [ti.unit_test_info.test.pk, ti3.unit_test_info.test.pk], 'organization': 'group_by_unit_test_date' }) rep.report_format = "csv" context = rep.get_context() table = rep.to_table(context) org_row = table.index(['Organization:', 'Group by Unit/Test/Date']) # should be two rows after blank row assert len(table[org_row + 2:]) == 2 # and 11 columns assert len(table[org_row + 3]) == 11
def test_to_table_one_per_row_csv(self): site = USite.objects.create(name="site") unit = utils.create_unit(site=site) utc = utils.create_unit_test_collection(unit=unit) tli = utils.create_test_list_instance(unit_test_collection=utc) ti = utils.create_test_instance(test_list_instance=tli) utils.create_test_instance( test_list_instance=tli, unit_test_info=ti.unit_test_info, work_completed=tli.work_completed - timezone.timedelta(days=1), ) rep = qc.TestInstanceDetailsReport( report_opts={ 'unit_test_info__test': [ti.unit_test_info.test.pk], 'organization': 'one_per_row' }) rep.report_format = "csv" context = rep.get_context() table = rep.to_table(context) header_row = table.index([ _("Work Completed"), _("Test"), _("Unit"), _("Site"), _("Value"), _("Reference"), _("Tolerance"), _("Skipped"), _("Performed By"), _("Comment"), ]) # should be two tis after header assert len(table[header_row + 1:]) == 2
def create_test_list_instance(self, utc=None, all_passing=False): utc = utc or self.unit_test_collection tli = utils.create_test_list_instance(unit_test_collection=utc) for i, (v, test, status) in enumerate( zip(self.values, self.tests, self.statuses)): uti = models.UnitTestInfo.objects.get(test=test, unit=utc.unit) ti = utils.create_test_instance(tli, unit_test_info=uti, value=v, status=status) ti.reference = self.ref ti.tolerance = self.tol if i == 0: ti.skipped = True if i == 1 or all_passing: ti.tolerance = None ti.reference = None else: ti.reference.save() ti.tolerance.save() ti.save() tli.save() return tli
def test_get_work_completed_plain(self): rep = qc.TestListInstanceSummaryReport() rep.report_format = "csv" tz = pytz.timezone("America/Toronto") work_completed = tz.localize(timezone.datetime(2019, 1, 1, 12)) tli = utils.create_test_list_instance(work_completed=work_completed) wc = rep.get_work_completed(tli) assert "01 Jan 2019" in wc assert "href" not in wc
def test_generate_due_and_overdue_html(self): site = USite.objects.create(name="site") unit = utils.create_unit(site=site) utc = utils.create_unit_test_collection(unit=unit) tli = utils.create_test_list_instance(unit_test_collection=utc) utils.create_test_instance(test_list_instance=tli) rep = qc.DueAndOverdueQCReport() rep.report_format = "pdf" rep.to_html()
def test_send_notice(self): self.tli1 = utils.create_test_list_instance( unit_test_collection=self.utc1) self.tli1.all_reviewed = False self.tli1.save() now = timezone.now() tasks.send_qcreview_notice(self.notice.pk) self.notice.refresh_from_db() assert self.notice.last_sent >= now assert "QATrack+ Unreviewed QC Notice:" in mail.outbox[0].subject
def test_unreviewed_rtsqa(self): ses_approved = sl_utils.create_service_event_status( name='Approved', is_review_required=False, rts_qa_must_be_reviewed=True) test_status = qa_utils.create_status() tl = qa_utils.create_test_list() t = qa_utils.create_test() qa_utils.create_test_list_membership(tl, t) tli_unreviewed = qa_utils.create_test_list_instance(test_list=tl) qa_utils.create_test_instance( tli_unreviewed, unit_test_info=qa_utils.create_unit_test_info(unit=self.u_1), status=test_status) data = { 'datetime_service': format_datetime(timezone.now()), 'unit_field': self.u_1.id, 'service_area_field': self.sa_1.id, 'service_type': self.st.id, 'problem_description': 'problem', 'service_status': ses_approved.id, 'hours-INITIAL_FORMS': 0, 'hours-MAX_NUM_FORMS': 1000, 'hours-TOTAL_FORMS': 0, 'hours-MIN_NUM_FORMS': 0, 'parts-INITIAL_FORMS': 0, 'parts-MAX_NUM_FORMS': 1000, 'parts-TOTAL_FORMS': 0, 'parts-MIN_NUM_FORMS': 0, 'rtsqa-INITIAL_FORMS': 0, 'rtsqa-MAX_NUM_FORMS': 1000, 'rtsqa-TOTAL_FORMS': 1, 'rtsqa-MIN_NUM_FORMS': 0, 'rtsqa-0-all_reviewed': tli_unreviewed.all_reviewed, 'rtsqa-0-unit_test_collection': tli_unreviewed.unit_test_collection.id, 'rtsqa-0-test_list_instance': tli_unreviewed.id, 'rtsqa-0-id': '', } response = self.client.post(self.url, data=data) self.assertTrue( 'service_status' in response.context_data['form'].errors) data['rtsqa-0-all_reviewed'] = '' data['rtsqa-0-test_list_instance'] = '' response = self.client.post(self.url, data=data) self.assertTrue( 'service_status' in response.context_data['form'].errors)
def test_qa_urls(self): sl_utils.create_service_event_status(is_default=True) qa_utils.create_status(is_default=True) se = sl_utils.create_service_event() u = qa_utils.create_unit() utc = qa_utils.create_unit_test_collection(unit=u) tli = qa_utils.create_test_list_instance(unit_test_collection=utc) url_names_200 = ( ('sl_dash', {}, ''), ('sl_new', {}, ''), ('sl_edit', { 'pk': se.id }, ''), ('sl_details', { 'pk': se.id }, ''), ('sl_list_all', {}, ''), ('rtsqa_list_for_event', { 'se_pk': se.id }, ''), ('se_searcher', {}, '?q=%d&unit_id=%d' % (se.id, u.id)), ('tli_select', { 'pk': utc.id, 'form': 'a_form' }, ''), ('tli_statuses', {}, '?tli_id=%d' % tli.id), ('unit_sa_utc', {}, '?unit_id=%d' % u.id), ('err', {}, ''), ('sl_unit_new', {}, ''), ('sl_unit_view_se', {}, ''), ('se_down_time', {}, ''), ('handle_unit_down_time', {}, ''), ) url_names_404 = ( # Test urls that expect kwargs when not given any # (reverse should render url for use in templates, but return 404) ('sl_details', {}, ''), ('tli_select', {}, ''), ('se_searcher', {}, ''), ('tli_statuses', {}, ''), ('unit_sa_utc', {}, ''), ) for url, kwargs, q in url_names_200: self.assertTrue(self.returns_code(reverse(url, kwargs=kwargs) + q)) for url, kwargs, q in url_names_404: self.assertTrue( self.returns_code(reverse(url, kwargs=kwargs) + q, code=404))
def test_generate_html(self): site = USite.objects.create(name="site") unit = utils.create_unit(site=site) utc = utils.create_unit_test_collection(unit=unit) utils.create_test_list_instance(unit_test_collection=utc) unit2 = utils.create_unit(site=None) utc2 = utils.create_unit_test_collection(unit=unit2) tli2 = utils.create_test_list_instance(unit_test_collection=utc2) comment = Comment( submit_date=timezone.now(), user=tli2.created_by, content_object=tli2, comment='test comment', site=Site.objects.latest("pk"), ) comment.save() rep = qc.TestListInstanceDetailsReport( report_opts={'unit_test_collection': [utc.pk]}) rep.report_format = "pdf" rep.to_html()
def setUp(self): self.unit1 = utils.create_unit(name="unit1", number=1) self.unit2 = utils.create_unit(name="unit2", number=2) self.utc1 = utils.create_unit_test_collection(unit=self.unit1) self.utc2 = utils.create_unit_test_collection(unit=self.unit2) self.tli1 = utils.create_test_list_instance( unit_test_collection=self.utc1) self.tli1.all_reviewed = False self.tli1.save() self.tli2 = utils.create_test_list_instance( unit_test_collection=self.utc2) self.tli2.all_reviewed = True self.tli2.save() self.testlist_group = TestListGroup.objects.create(name="test group") self.testlist_group.test_lists.add(self.utc1.tests_object) self.unit_group = UnitGroup.objects.create(name="test group") self.unit_group.units.add(self.utc1.unit) self.group = models.Group.objects.latest('pk') user = models.User.objects.latest('pk') user.groups.add(self.group) user.email = "*****@*****.**" user.save() self.recipients = RecipientGroup.objects.create(name="test group") self.recipients.groups.add(self.group) self.inactive_user = models.User.objects.create_user( 'inactive', '*****@*****.**', 'password') self.inactive_user.groups.add(self.group) self.inactive_user.is_active = False self.inactive_user.save() # delete defaults schedules to make counting easier Schedule.objects.all().delete()
def test_generate_html_one_per_row(self): site = USite.objects.create(name="site") unit = utils.create_unit(site=site) utc = utils.create_unit_test_collection(unit=unit) tli = utils.create_test_list_instance(unit_test_collection=utc) ti = utils.create_test_instance(test_list_instance=tli) rep = qc.TestInstanceDetailsReport( report_opts={ 'unit_test_info__test': [ti.unit_test_info.test.pk], 'organization': 'one_per_row' }) rep.report_format = "pdf" rep.to_html()
def test_generate_html_group_by_unit_test_date(self): site = USite.objects.create(name="site") unit = utils.create_unit(site=site) utc = utils.create_unit_test_collection(unit=unit) tli = utils.create_test_list_instance(unit_test_collection=utc) ti = utils.create_test_instance(test_list_instance=tli) rep = qc.TestInstanceDetailsReport( report_opts={ 'unit_test_info__test': [ti.unit_test_info.test.pk], 'organization': 'group_by_unit_test_date' }) rep.report_format = "pdf" assert 'not supported for' in rep.to_html()
def create_service_event(unit_service_area=None, service_type=None, service_status=None, user_created_by=None, datetime_service=timezone.now(), problem_description='problem_description', is_review_required=False, datetime_created=timezone.now(), add_test_list_instance_initiated_by=False, service_time=None, lost_time=None): if unit_service_area is None: unit_service_area = create_unit_service_area() if service_type is None: service_type = create_service_type() if service_status is None: service_status = create_service_event_status() if user_created_by is None: user_created_by = create_user() se, _ = models.ServiceEvent.objects.get_or_create( unit_service_area=unit_service_area, service_type=service_type, service_status=service_status, user_created_by=user_created_by, datetime_service=datetime_service, problem_description=problem_description, is_review_required=is_review_required, datetime_created=datetime_created, duration_service_time=service_time, duration_lost_time=lost_time) if add_test_list_instance_initiated_by: if isinstance(add_test_list_instance_initiated_by, qa_models.TestListInstance): se.test_list_instance_initiated_by = add_test_list_instance_initiated_by else: utc = qa_utils.create_unit_test_collection( unit=unit_service_area.unit) se.test_list_instance_initiated_by = qa_utils.create_test_list_instance( unit_test_collection=utc) se.save() return se
def create_test_list_instance(self): utc = self.unit_test_collection tli = utils.create_test_list_instance(unit_test_collection=utc) for i, (v, test, status) in enumerate(zip(self.values, self.tests, self.statuses)): uti = models.UnitTestInfo.objects.get(test=test, unit=utc.unit) ti = utils.create_test_instance(unit_test_info=uti, value=v, status=status) ti.reference = self.ref ti.tolerance = self.tol ti.test_list_instance = tli if i == 0: ti.skipped = True elif i == 1: ti.tolerance = None ti.reference = None ti.save() tli.save() return tli
def setUp(self): self.user = create_user(is_superuser=True, uname='user', pwd='pwd') self.client.login(username='******', password='******') self.c_1 = qa_utils.create_category() self.t_1 = qa_utils.create_test() self.tl_1 = qa_utils.create_test_list() qa_utils.create_test_list_membership(test=self.t_1, test_list=self.tl_1) self.tli_1 = qa_utils.create_test_list_instance(test_list=self.tl_1) self.ti_1 = qa_utils.create_test_instance( test_list_instance=self.tli_1, unit_test_info=qa_utils.create_unit_test_info(test=self.t_1), value=1 ) self.url_add = reverse( 'admin:%s_%s_add' % (qa_models.Test._meta.app_label, qa_models.Test._meta.model_name) ) self.url_list = reverse( 'admin:%s_%s_changelist' % (qa_models.Test._meta.app_label, qa_models.Test._meta.model_name) ) self.url_change = reverse( 'admin:%s_%s_change' % (qa_models.Test._meta.app_label, qa_models.Test._meta.model_name), args=[self.t_1.id] ) self.data = { 'procedure': '', 'category': self.c_1.id, 'attachment_set-MIN_NUM_FORMS': 0, 'attachment_set-INITIAL_FORMS': 0, 'attachment_set-MAX_NUM_FORMS': 0, 'attachment_set-TOTAL_FORMS': 0, 'chart_visibility': 'on', 'constant_value': '', 'description': '', 'slug': '', 'type': 'simple', 'calculation_procedure': '', 'choices': '', 'name': '' }
def setUp(self): self.user = create_user(is_superuser=True, uname='user', pwd='pwd') self.client.login(username='******', password='******') self.tli = qa_utils.create_test_list_instance() self.usa = sl_utils.create_unit_service_area(unit=self.tli.unit_test_collection.unit) self.se = sl_utils.create_service_event( unit_service_area=self.usa, add_test_list_instance_initiated_by=self.tli, ) sl_utils.create_return_to_service_qa(add_test_list_instance=self.tli) self.url_list = reverse( 'admin:%s_%s_changelist' % ( qa_models.TestListInstance._meta.app_label, qa_models.TestListInstance._meta.model_name ) ) self.url_delete = reverse( 'admin:%s_%s_delete' % ( qa_models.TestListInstance._meta.app_label, qa_models.TestListInstance._meta.model_name ), args=[self.tli.id] )
def setUp(self): self.factory = RequestFactory() self.view = views.CreateServiceEvent.as_view() self.default_ses = sl_utils.create_service_event_status( is_default=True) sl_utils.create_service_event_status() qa_utils.create_status(is_default=True) now = timezone.now() self.u_1 = qa_utils.create_unit(name='u_1') self.sa_1 = sl_utils.create_service_area(name='sa_1') self.usa_1 = sl_utils.create_unit_service_area(unit=self.u_1, service_area=self.sa_1) self.tl_1 = qa_utils.create_test_list(name='tl_1') self.tli_1_1 = qa_utils.create_test_list_instance( unit_test_collection=qa_utils.create_unit_test_collection( unit=self.u_1, test_collection=self.tl_1), test_list=self.tl_1, work_completed=now - timezone.timedelta(hours=1)) self.tli_1_2 = qa_utils.create_test_list_instance( unit_test_collection=qa_utils.create_unit_test_collection( unit=self.u_1, test_collection=self.tl_1), test_list=self.tl_1, work_completed=now) self.se_1 = sl_utils.create_service_event(unit_service_area=self.usa_1) self.u_2 = qa_utils.create_unit(name='u_2') self.sa_2 = sl_utils.create_service_area(name='sa_2') self.usa_2 = sl_utils.create_unit_service_area(unit=self.u_2, service_area=self.sa_2) self.tl_2 = qa_utils.create_test_list(name='tl_2') self.tli_2_1 = qa_utils.create_test_list_instance( unit_test_collection=qa_utils.create_unit_test_collection( unit=self.u_2, test_collection=self.tl_2), test_list=self.tl_2, work_completed=now - timezone.timedelta(hours=1)) self.tli_2_2 = qa_utils.create_test_list_instance( unit_test_collection=qa_utils.create_unit_test_collection( unit=self.u_2, test_collection=self.tl_2), test_list=self.tl_2, work_completed=now) self.se_2 = sl_utils.create_service_event(unit_service_area=self.usa_2) self.url = reverse('sl_new') self.url_delete = reverse('se_delete') self.user = create_user(is_superuser=True) self.client.login(username='******', password='******') perm = Permission.objects.get(codename='can_have_hours') user_can_hours = User.objects.get(username='******') user_can_hours.user_permissions.add(perm) user_group_has_hours = create_user(uname='in_group_with_hours') group_has_hours = create_group(name='can_have_hours') group_has_hours.permissions.add(perm) user_group_has_hours.groups.add(group_has_hours) sl_utils.create_third_party() group_linked = create_group(name='linked') user_group_linked = create_user(uname='user_in_group_linked') user_group_linked.groups.add(group_linked) self.gl_1 = sl_utils.create_group_linker(group=group_linked) self.part = sl_utils.create_part(add_storage=True) self.st = sl_utils.create_service_type() self.sto = sl_utils.create_storage(quantity=2)
def test_to_table(self): site = USite.objects.create(name="site") unit = utils.create_unit(site=site) utc = utils.create_unit_test_collection(unit=unit) tli = utils.create_test_list_instance(unit_test_collection=utc) # make this tli autoreviewed tli.all_reviewed = True tli.reviewed_by = None tli.save() unit2 = utils.create_unit(site=None) utc2 = utils.create_unit_test_collection(unit=unit2) tli2 = utils.create_test_list_instance(unit_test_collection=utc2) # give tli2 some history tli3 = utils.create_test_list_instance( unit_test_collection=utc2, work_completed=tli2.work_completed - timezone.timedelta(days=2), ) ti = utils.create_test_instance(test_list_instance=tli3) # tli comment comment = Comment( submit_date=timezone.now(), user=tli2.created_by, content_object=tli2, comment='test comment', site=Site.objects.latest("pk"), ) comment.save() attachment = Attachment( attachment=ContentFile("content", "content.pdf"), created_by=tli.created_by, testlistinstance=tli2, ) attachment.save() attachment = Attachment( attachment=ContentFile("content", "content.pdf"), created_by=tli.created_by, testinstance=ti, ) attachment.save() rep = qc.TestListInstanceDetailsReport( report_opts={'unit_test_collection': [utc.pk, utc2.pk]}) rep.report_format = "csv" context = rep.get_context() table = rep.to_table(context) ntlis = table.count([ _('Test'), _('Value'), _('Reference'), _('Tolerance'), _('Pass/Fail'), _('Review Status'), _('Comment'), _('Attachments'), ]) # should be three tlis assert ntlis == 3
def test_get_pass_fail_html(self): rep = qc.TestListInstanceSummaryReport() rep.report_format = "html" tli = utils.create_test_list_instance() pf = rep.get_pass_fail_status(tli) assert "<span" in pf
def test_get_pass_fail_plain(self): rep = qc.TestListInstanceSummaryReport() rep.report_format = "csv" tli = utils.create_test_list_instance() pf = rep.get_pass_fail_status(tli) assert pf == '' # no test instances, just want to make sure no html tags in status for plain text report
def setUp(self): self.factory = RequestFactory() self.view = views.UpdateServiceEvent.as_view() self.default_ses = sl_utils.create_service_event_status( is_default=True) self.approved_ses = sl_utils.create_service_event_status( is_review_required=False, rts_qa_must_be_reviewed=True) sl_utils.create_service_event_status() qa_utils.create_status(is_default=True) now = timezone.now() self.u_1 = qa_utils.create_unit(name='u_1') self.sa_1 = sl_utils.create_service_area(name='sa_1') self.usa_1 = sl_utils.create_unit_service_area(unit=self.u_1, service_area=self.sa_1) self.tl_1 = qa_utils.create_test_list(name='tl_1') self.tli_1_1 = qa_utils.create_test_list_instance( unit_test_collection=qa_utils.create_unit_test_collection( unit=self.u_1, test_collection=self.tl_1), test_list=self.tl_1, work_completed=now - timezone.timedelta(hours=1)) self.tli_1_2 = qa_utils.create_test_list_instance( unit_test_collection=qa_utils.create_unit_test_collection( unit=self.u_1, test_collection=self.tl_1), test_list=self.tl_1, work_completed=now) self.se_1 = sl_utils.create_service_event(unit_service_area=self.usa_1) self.u_2 = qa_utils.create_unit(name='u_2') self.sa_2 = sl_utils.create_service_area(name='sa_2') self.usa_2 = sl_utils.create_unit_service_area(unit=self.u_2, service_area=self.sa_2) self.tl_2 = qa_utils.create_test_list(name='tl_2') self.tli_2_1 = qa_utils.create_test_list_instance( unit_test_collection=qa_utils.create_unit_test_collection( unit=self.u_2, test_collection=self.tl_2), test_list=self.tl_2, work_completed=now - timezone.timedelta(hours=1)) self.tli_2_2 = qa_utils.create_test_list_instance( unit_test_collection=qa_utils.create_unit_test_collection( unit=self.u_2, test_collection=self.tl_2), test_list=self.tl_2, work_completed=now) self.se_2 = sl_utils.create_service_event(unit_service_area=self.usa_2) self.url = reverse('sl_new') self.user = create_user(is_superuser=True) self.client.login(username='******', password='******') perm = Permission.objects.get(codename='can_have_hours') user_can_hours = User.objects.get(username='******') user_can_hours.user_permissions.add(perm) user_group_has_hours = create_user(uname='in_group_with_hours') group_has_hours = create_group(name='can_have_hours') group_has_hours.permissions.add(perm) user_group_has_hours.groups.add(group_has_hours) sl_utils.create_third_party() group_linked = create_group(name='linked') user_group_linked = create_user(uname='user_in_group_linked') user_group_linked.groups.add(group_linked) self.gl_1 = sl_utils.create_group_linker(group=group_linked) self.part = sl_utils.create_part(add_storage=True) self.st = sl_utils.create_service_type() self.se = sl_utils.create_service_event( unit_service_area=self.usa_1, service_status=self.default_ses, service_type=self.st) self.url = reverse('sl_edit', kwargs={"pk": self.se.pk}) self.data = { 'datetime_service': format_datetime(timezone.now()), 'service_status': self.default_ses.id, 'service_type': self.st.id, 'is_review_required': 0, 'safety_precautions': 'safety_precautions', 'problem_description': 'problem_description', 'service_area_field': self.se.unit_service_area.service_area.id, 'unit_field': self.se.unit_service_area.unit.id, 'unit_field_fake': self.se.unit_service_area.unit.id, 'qafollowup_notes': 'qafollowup_notes', 'test_list_instance_initiated_by': self.tli_1_1.id, 'duration_lost_time': '0100', 'duration_service_time': '0100', 'hours-INITIAL_FORMS': 0, 'hours-MAX_NUM_FORMS': 1000, 'hours-TOTAL_FORMS': 0, 'hours-MIN_NUM_FORMS': 0, 'parts-INITIAL_FORMS': 0, 'parts-MAX_NUM_FORMS': 1000, 'parts-TOTAL_FORMS': 0, 'parts-MIN_NUM_FORMS': 0, 'rtsqa-INITIAL_FORMS': 0, 'rtsqa-MAX_NUM_FORMS': 1000, 'rtsqa-TOTAL_FORMS': 0, 'rtsqa-MIN_NUM_FORMS': 0, }