def test_reporter_logs_in_after_he_clicked_on_his_department(self): rep1 = create_role(Reporter, 'rep1') rep2 = create_role(Reporter, 'rep2') # there are two departments with several published incidents dept1 = mommy.make_recipe('cirs.department', reporter=rep1) dept2 = mommy.make_recipe('cirs.department', reporter=rep2) for dept in (dept1, dept2): pis = mommy.make_recipe('cirs.published_incident', critical_incident__department=dept, _quantity=5) for pi in pis: mommy.make_recipe('cirs.translated_pi', master=pi) # user goes to the incidents list for his department self.browser.get(self.live_server_url + dept1.get_absolute_url()) # he logs in self.find_input_and_enter_text('username', rep1.user.username, By.NAME) self.find_input_and_enter_text('password', rep1.user.username, By.NAME) self.find_input_and_enter_text('password', Keys.RETURN, By.NAME) incidents = self.get_column_from_table_as_list('tableIncidents') # and sees table with published incident from his department, but not from another for pi in PublishableIncident.objects.filter(critical_incident__department=dept1): self.assertIn(pi.incident, incidents) for pi in PublishableIncident.objects.exclude(critical_incident__department=dept1): self.assertNotIn(pi.incident, incidents)
def test_reviewer_can_comment_on_incident(self): # reporter entered his comment already comment_text = "I have some remarks on this incident!" Comment.objects.create(critical_incident=self.incident, author=self.reporter, text=comment_text) # reviewer logs in and goes to the incident page # he needs a reviewer role # and has belong to the department create_role(Reviewer, self.reviewer) self.incident.department.reviewers.add(self.reviewer.reviewer) self.quick_backend_login(self.reviewer, self.incident.get_absolute_url()) # and sees the coment made by the reporter self.check_if_comment_in_the_last_row(comment_text) # now he can comment himself comment_text = "I still have some questions:" self.create_comment(comment_text) # check if the new comment is the last one self.check_if_comment_in_the_last_row(comment_text) # but now there is no email as reviewer made a comment himself self.assertEqual(len(mail.outbox), 0) # @UndefinedVariable
def setUp(self): super(CriticalIncidentListTest, self).setUp() create_role(Reporter, self.reporter) self.dept = mommy.make_recipe('cirs.department', reporter=self.reporter.reporter) self.dept.labcirsconfig.mandatory_languages = ['en'] self.dept.labcirsconfig.save()
def test_reviewer_can_access_incident_without_code(self): # he has to have reviewer role and belong to the department create_role(Reviewer, self.reviewer) self.incident.department.reviewers.add(self.reviewer.reviewer) self.quick_backend_login(self.reviewer) self.browser.get(self.absolute_incident_url) time.sleep(1) # TODO: chang to location of item! self.assertEqual(self.browser.current_url, self.absolute_incident_url)
def test_reviewer_can_access_incident_without_code(self): # he has to have reviewer role and belong to the department create_role(Reviewer, self.reviewer) self.incident.department.reviewers.add(self.reviewer.reviewer) self.quick_backend_login(self.reviewer) self.browser.get(self.absolute_incident_url) time.sleep(1) # TODO: chang to location of item! self.assertEqual(self.browser.current_url, self.absolute_incident_url)
def test_reviewer_with_department_is_redirected_to_admin(self): reviewer = create_role(Reviewer, 'rev') self.dept.reviewers.add(reviewer) self.login_to_department(reviewer.user) time.sleep(10) redirect_url = '{}{}'.format(self.live_server_url, reverse('admin:index')) self.assertEqual(self.browser.current_url, redirect_url)
def setUp(self): super(AccessDataWithMultipleDepts, self).setUp() self.rep = create_role(Reporter, 'rep') self.rep2 = create_role(Reporter, 'rep2') self.rev = create_role(Reviewer, 'rev') self.rev2 = create_role(Reviewer, 'rev2') self.dept = mommy.make(Department, reporter=self.rep) self.dept.reviewers.add(self.rev) self.dept2 = mommy.make(Department, reporter=self.rep2) self.dept2.reviewers.add(self.rev2) self.ci = mommy.make_recipe('cirs.public_ci', department=self.dept) self.ci2 = mommy.make_recipe('cirs.public_ci', department=self.dept2) self.pi = mommy.make_recipe('cirs.published_incident', critical_incident=self.ci) mommy.make_recipe('cirs.translated_pi', master=self.pi) self.pi2 = mommy.make_recipe('cirs.published_incident', critical_incident=self.ci2) mommy.make_recipe('cirs.translated_pi', master=self.pi2)
def test_redirect_reviewer_from_create_incident_view_to_list(self): user = create_role(Reviewer, 'rev').user self.dept.reviewers.add(user.reviewer) self.quick_login(user, self.create_url) target_url = '{}{}'.format(self.live_server_url, self.dept.get_absolute_url()) self.assertEqual(self.browser.current_url, target_url)
def test_reviewer_sees_only_config_of_own_department(self): dept1, dept2 = mommy.make_recipe('cirs.department', _quantity=2) reviewer = create_role(Reviewer, 'rev') dept1.reviewers.add(reviewer) self.check_admin_table_for_items(reviewer.user, LabCIRSConfig, str(dept1.labcirsconfig), str(dept2.labcirsconfig))
def go_to_test_incident_as_reviewer(self): self.dept.reviewers.add(create_role(Reviewer, self.reviewer)) self.browser.get(self.live_server_url + reverse('admin:index')) self.login_user(username=self.REVIEWER, password=self.REVIEWER_PASSWORD) self.wait.until(EC.presence_of_element_located((By.ID, 'site-name'))) self.assertIn("/admin/", self.browser.current_url) self.click_link_with_text('Critical incidents') self.click_link_with_text(test_incident['incident'])
def test_reviewer_with_department_is_redirected_to_admin(self): reviewer = create_role(Reviewer, 'rev') self.dept.reviewers.add(reviewer) self.login_to_department(reviewer.user) time.sleep(10) redirect_url = '{}{}'.format(self.live_server_url, reverse('admin:index')) self.assertEqual(self.browser.current_url, redirect_url)
def test_reporter_with_department_is_redirected_to_incident_list(self): reporter = create_role(Reporter, 'rep') self.dept.reporter = reporter self.dept.save() self.login_to_department(reporter.user) time.sleep(10) redirect_url = '{}{}'.format(self.live_server_url, self.dept.get_absolute_url()) self.assertEqual(self.browser.current_url, redirect_url)
def test_reporter_with_department_is_redirected_to_incident_list(self): reporter = create_role(Reporter, 'rep') self.dept.reporter = reporter self.dept.save() self.login_to_department(reporter.user) time.sleep(10) redirect_url = '{}{}'.format(self.live_server_url, self.dept.get_absolute_url()) self.assertEqual(self.browser.current_url, redirect_url)
def setUp(self): super(AccessDataWithMultipleDepts, self).setUp() self.rep = create_role(Reporter, 'rep') self.rep2 = create_role(Reporter, 'rep2') self.rev = create_role(Reviewer, 'rev') self.rev2 = create_role(Reviewer, 'rev2') self.dept = mommy.make(Department, reporter=self.rep) self.dept.reviewers.add(self.rev) self.dept2 = mommy.make(Department, reporter=self.rep2) self.dept2.reviewers.add(self.rev2) self.ci = mommy.make_recipe('cirs.public_ci', department=self.dept) self.ci2 = mommy.make_recipe('cirs.public_ci', department=self.dept2) self.pi = mommy.make_recipe('cirs.published_incident', critical_incident=self.ci) mommy.make_recipe('cirs.translated_pi', master=self.pi) self.pi2 = mommy.make_recipe('cirs.published_incident', critical_incident=self.ci2) mommy.make_recipe('cirs.translated_pi', master=self.pi2)
def test_assigned_reporter_not_visible_for_new_dept(self): # If a reporter is assigned to an department, he is not visible in # the dialog for a new department anymore Department.objects.create(**self.en_dict) new_reporter = create_role(Reporter, 'new_reporter') self.browser.get(self.live_server_url + '/admin/cirs/department/add/') select = Select(self.browser.find_element_by_id('id_reporter')) options = [opt.text for opt in select.options] expected = [str(new_reporter), '---------'] self.assertItemsEqual(options, expected, 'found {} instead {}'.format(', '.join(options), ', '.join(expected)))
def test_log_out_and_error_message_for_role_without_department(self, name, role_cls): from cirs.views import MISSING_DEPARTMENT_MSG # necessary only here so far role = create_role(role_cls, name) self.login_to_department(role.user) error_alert = self.wait.until( EC.presence_of_element_located((By.CLASS_NAME, 'alert-danger'))) self.assertEqual(error_alert.text, MISSING_DEPARTMENT_MSG) with self.assertRaises(NoSuchElementException): self.browser.find_element_by_id('navbarMenu')
def test_reviewer_can_chose_category_of_incident(self): ci = mommy.make_recipe('cirs.public_ci') ci.department.reviewers.add(create_role(Reviewer, self.reviewer)) admin_url = reverse('admin:cirs_criticalincident_change', args=(ci.pk, )) self.quick_login(self.reviewer, admin_url) # uncollapse the review panel self.click_link_with_text('Show') Select(self.browser.find_element_by_id('id_status')).select_by_value( "in process") self.browser.find_element_by_id('id_category')
def test_log_out_and_error_message_for_role_without_department( self, name, role_cls): from cirs.views import MISSING_DEPARTMENT_MSG # necessary only here so far role = create_role(role_cls, name) self.login_to_department(role.user) error_alert = self.wait.until( EC.presence_of_element_located((By.CLASS_NAME, 'alert-danger'))) self.assertEqual(error_alert.text, MISSING_DEPARTMENT_MSG) with self.assertRaises(NoSuchElementException): self.browser.find_element_by_id('navbarMenu')
def test_reviewer_is_redirected_to_his_dept_from_detail_view_of_ci_from_another_dept(self): rev = create_role(Reviewer, 'rev') dept1, dept2 = mommy.make_recipe('cirs.department', _quantity=2) dept1.reviewers.add(rev) for dept in (dept1, dept2): mommy.make_recipe('cirs.published_incident', critical_incident__department=dept, _quantity=5) # he tries to access_detail view of one incident from dept2 incident = CriticalIncident.objects.filter(department=dept2).first() self.quick_login(rev.user, incident.get_absolute_url()) # but is redirected to his department page self.assertCurrentUrlIs(dept1.get_absolute_url())
def test_assigned_reporter_not_visible_for_new_dept(self): # If a reporter is assigned to an department, he is not visible in # the dialog for a new department anymore Department.objects.create(**self.en_dict) new_reporter = create_role(Reporter, 'new_reporter') self.browser.get(self.live_server_url + '/admin/cirs/department/add/') select = Select(self.browser.find_element_by_id('id_reporter')) options = [opt.text for opt in select.options] expected = [str(new_reporter), '---------'] self.assertItemsEqual( options, expected, 'found {} instead {}'.format(', '.join(options), ', '.join(expected)))
def test_reviewer_can_comment_on_incident(self): # reporter entered his comment already comment_text = "I have some remarks on this incident!" Comment.objects.create(critical_incident=self.incident, author=self.reporter, text=comment_text) # reviewer logs in and goes to the incident page # he needs a reviewer role # and has belong to the department create_role(Reviewer, self.reviewer) self.incident.department.reviewers.add(self.reviewer.reviewer) self.quick_backend_login(self.reviewer, self.incident.get_absolute_url()) # and sees the coment made by the reporter self.check_if_comment_in_the_last_row(comment_text) # now he can comment himself comment_text = "I still have some questions:" self.create_comment(comment_text) # check if the new comment is the last one self.check_if_comment_in_the_last_row(comment_text) # but now there is no email as reviewer made a comment himself self.assertEqual(len(mail.outbox), 0) # @UndefinedVariable
def test_user_can_see_feedback_code(self): reporter = create_role(Reporter, self.reporter) # create department. In theory I could test if reporter has # an department in the view, but acutally users who are not superuser # and don't have assoziated department cannot efectivly log in mommy.make(Department, reporter=reporter) self.quick_login_reporter(reverse('create_incident', kwargs={'dept': reporter.department.label})) # the reporter enters incident data self.enter_test_incident() # User sees the success page with code for feedback code_info = self.wait.until( EC.presence_of_element_located((By.CLASS_NAME, 'alert-info'))) #there should be only one object in the database ci = CriticalIncident.objects.first() comment_code = ci.comment_code self.assertIn(comment_code, code_info.text)
def test_reviewer_sees_only_incidents_from_one_department_at_once(self): # There is reviewer for two departments rev = create_role(Reviewer, 'rev') dept1, dept2 = mommy.make_recipe('cirs.department', _quantity=2) for dept in (dept1, dept2): pis = mommy.make_recipe('cirs.published_incident', critical_incident__department=dept, _quantity=5) for pi in pis: mommy.make_recipe('cirs.translated_pi', master=pi) dept.reviewers.add(rev) # he logins and goes to the home page: self.quick_login(rev.user, reverse('labcirs_home')) # he clicks on first department self.click_link_with_text(dept1.label) # and sees table with incidents for dept1 incidents = self.get_column_from_table_as_list('tableIncidents') for pi in PublishableIncident.objects.filter(critical_incident__department=dept1): self.assertIn(pi.incident, incidents) for pi in PublishableIncident.objects.exclude(critical_incident__department=dept1): self.assertNotIn(pi.incident, incidents)
def test_user_can_see_feedback_code(self): reporter = create_role(Reporter, self.reporter) # create department. In theory I could test if reporter has # an department in the view, but acutally users who are not superuser # and don't have assoziated department cannot efectivly log in mommy.make(Department, reporter=reporter) self.quick_login_reporter( reverse('create_incident', kwargs={'dept': reporter.department.label})) # the reporter enters incident data self.enter_test_incident() # User sees the success page with code for feedback code_info = self.wait.until( EC.presence_of_element_located((By.CLASS_NAME, 'alert-info'))) #there should be only one object in the database ci = CriticalIncident.objects.first() comment_code = ci.comment_code self.assertIn(comment_code, code_info.text)
def test_reporter_can_access_create_incident_view(self): user = create_role(Reporter, 'rep').user self.quick_login(user, self.create_url) target_url = '{}{}'.format(self.live_server_url, self.create_url) self.assertEqual(self.browser.current_url, target_url)
def setUp(self): super(CommentTest, self).setUp() self.incident = mommy.make(CriticalIncident, public=True, department__reporter=create_role( Reporter, self.reporter))
def setUp(self): super(CriticalIncidentListTest, self).setUp() create_role(Reporter, self.reporter) self.dept = mommy.make_recipe('cirs.department', reporter=self.reporter.reporter) self.dept.labcirsconfig.mandatory_languages=['de'] self.dept.labcirsconfig.save()
def test_reviewer_sees_only_config_of_own_department(self): dept1, dept2 = mommy.make_recipe('cirs.department', _quantity=2) reviewer = create_role(Reviewer, 'rev') dept1.reviewers.add(reviewer) self.check_admin_table_for_items( reviewer.user, LabCIRSConfig, str(dept1.labcirsconfig), str(dept2.labcirsconfig))
def setUp(self): super(CommentTest, self).setUp() self.incident = mommy.make(CriticalIncident, public=True, department__reporter=create_role(Reporter, self.reporter))
def test_redirect_reviewer_from_create_incident_view_to_list(self): user = create_role(Reviewer, 'rev').user self.dept.reviewers.add(user.reviewer) self.quick_login(user, self.create_url) target_url = '{}{}'.format(self.live_server_url, self.dept.get_absolute_url()) self.assertEqual(self.browser.current_url, target_url)
def test_reporter_can_access_create_incident_view(self): user = create_role(Reporter, 'rep').user self.quick_login(user, self.create_url) target_url = '{}{}'.format(self.live_server_url, self.create_url) self.assertEqual(self.browser.current_url, target_url)