def test_employee_cannot_give_and_update_feedback_to_valid_nominee_if_outside_entry_subperiod( app_with_nominees_inside_approval_subperiod): # noqa: E501 """GIVEN I am logged in AND I have previously given feedback on a employee WHEN I update that feedback by *employee id and feedback id* via post THEN it is successful Require both parameters to be sure that we are updating the right feedback item """ app = successfully_login(app_with_nominees_inside_approval_subperiod, TEST_EMPLOYEE_USERNAME) csrf_token = app.cookies[ANGULAR_2_XSRF_TOKEN_COOKIE_NAME] response = app.get(NOMINATED_USER_FEEDBACK_ENDPOINT, expect_errors=True) assert response.status_code == 404 payload = [{ "questionId": 1, "answer": "foo" }, { "questionId": 2, "answer": "bar" }] response = app.put_json( NOMINATED_USER_FEEDBACK_ENDPOINT, {"form": payload}, headers={ANGULAR_2_XSRF_TOKEN_HEADER_NAME: csrf_token}, expect_errors=True, ) assert response.status_code == 404
def test_employee_can_get_correct_nomination_status_when_outside_enrollment_period( ldap_mocked_app_with_users, is_enrolled, body): # noqa: E501 dbsession = get_dbsession(ldap_mocked_app_with_users) with transaction.manager: period = Period( name=TEST_PERIOD_NAME, enrollment_start_utc=days_from_utcnow(-2), entry_start_utc=days_from_utcnow(-1), approval_start_utc=days_from_utcnow(2), approval_end_utc=days_from_utcnow(3), ) dbsession.add(period) if is_enrolled: nominee = Nominee(username=TEST_EMPLOYEE_USERNAME, period=period) dbsession.add(nominee) app = successfully_login(ldap_mocked_app_with_users, TEST_EMPLOYEE_USERNAME) csrf_token = app.cookies[ANGULAR_2_XSRF_TOKEN_COOKIE_NAME] response = app.get("/api/v1/self-nominate", headers={ANGULAR_2_XSRF_TOKEN_HEADER_NAME: csrf_token}) assert response.json_body["heading"] == ENROLLMENT_INACTIVE_TEMPLATE[ "heading"].format(period_name=TEST_PERIOD_NAME) assert response.json_body["body"] == body assert (response.json_body["buttonText"] == ENROLLMENT_INACTIVE_TEMPLATE["buttonText"]) assert (response.json_body["buttonLink"] == ENROLLMENT_INACTIVE_TEMPLATE["buttonLink"]) assert (response.json_body["canNominate"] == ENROLLMENT_INACTIVE_TEMPLATE["canNominate"])
def test_employee_cannot_update_feedback_form_with_unauthorized_answer_ids_to_valid_nominate_while_inside_entry_subperiod( app_with_nominees_and_existing_feedback_form_inside_entry_subperiod ): # noqa: E501 app = successfully_login( app_with_nominees_and_existing_feedback_form_inside_entry_subperiod, # noqa: E501 TEST_EMPLOYEE_USERNAME, ) csrf_token = app.cookies[ANGULAR_2_XSRF_TOKEN_COOKIE_NAME] unauthorized_answer_id = TEST_FORM_2_ANSWER_1_ID invalid_form = [ { "questionId": QUESTION_IDS_AND_TEMPLATES[0][0], "answerId": unauthorized_answer_id, "answer": "Second answer 1", }, { "questionId": QUESTION_IDS_AND_TEMPLATES[1][0], "answerId": TEST_FORM_1_ANSWER_2_ID, "answer": "Second answer 2", }, { "questionId": QUESTION_IDS_AND_TEMPLATES[2][0], "answerId": TEST_FORM_1_ANSWER_3_ID, "answer": "Second answer 3", }, ] response = app.put_json( NOMINATED_USER_FEEDBACK_ENDPOINT, {"form": invalid_form}, headers={ANGULAR_2_XSRF_TOKEN_HEADER_NAME: csrf_token}, expect_errors=True, ) assert response.status_code == 400
def test_employee_can_get_blank_feedback_form_to_valid_nominee_while_inside_entry_subperiod( app_with_nominees_inside_entry_subperiod): # noqa: E501 app = successfully_login(app_with_nominees_inside_entry_subperiod, TEST_EMPLOYEE_USERNAME) response = app.get(NOMINATED_USER_FEEDBACK_ENDPOINT) form = response.json_body.get("form") end_date = form["endDate"] # note in entry subperiod for `generate_period_dates` hence 1 day offset man_location = TEST_LDAP_FULL_DETAILS[TEST_EMPLOYEE_USERNAME][ LDAP_LOCATION_ATTR] assert end_date == datetimeformat(TEST_UTCNOW + timedelta(days=1), User(location=man_location)) items = form["items"] assert isinstance(items, list) employee = form["employee"] assert employee["displayName"] == NOMINATED_DISPLAY_NAME assert employee["position"] == NOMINATED_POSITION expected_questions = [] for _, template, caption in QUESTION_IDS_AND_TEMPLATES: expected_questions.append([ template.format(period_name=TEST_PERIOD_NAME, display_name=NOMINATED_DISPLAY_NAME), caption, ]) for generated, expected in zip(items, expected_questions): assert generated["questionId"] assert generated["question"] == expected[0] assert generated["answerId"] is None assert generated["answer"] == "" assert generated["caption"] == expected[1]
def test_employee_cannot_put_summary(ldap_mocked_app_with_users): app = successfully_login(ldap_mocked_app_with_users, TEST_EMPLOYEE_USERNAME) csrf_token = app.cookies[ANGULAR_2_XSRF_TOKEN_COOKIE_NAME] dbsession = get_dbsession(app) add_test_data_for_stats(dbsession) endpoint = "/api/v1/summarise/%s/" % TEST_EMPLOYEE_USERNAME answers = [ { "questionId": QUESTION_IDS_AND_TEMPLATES[0][0], "answer": fake.sentence(nb_words=4), }, { "questionId": QUESTION_IDS_AND_TEMPLATES[1][0], "answer": fake.sentence(nb_words=4), }, { "questionId": QUESTION_IDS_AND_TEMPLATES[2][0], "answer": fake.sentence(nb_words=4), }, ] resp = app.put_json( endpoint, {"form": answers}, headers={ANGULAR_2_XSRF_TOKEN_HEADER_NAME: csrf_token}, expect_errors=True, ) # doesn't pass through ACL filter as fails at check related to direct # reports assert resp.status_code == 404
def test_employee_cannot_give_and_update_feedback_on_invalid_nominee( app_with_nominees_inside_entry_subperiod): # noqa: E501 app = successfully_login(app_with_nominees_inside_entry_subperiod, TEST_EMPLOYEE_USERNAME) csrf_token = app.cookies[ANGULAR_2_XSRF_TOKEN_COOKIE_NAME] response = app.get(UNNOMINATED_USER_FEEDBACK_ENDPOINT, expect_errors=True) assert response.status_code == 404 payload = [ { "questionId": 1, "answer": "foo" }, { "questionId": 2, "answer": "bar" }, { "questionId": 3, "answer": "baz" }, ] response = app.put_json( UNNOMINATED_USER_FEEDBACK_ENDPOINT, {"form": payload}, headers={ANGULAR_2_XSRF_TOKEN_HEADER_NAME: csrf_token}, expect_errors=True, ) assert response.status_code == 404
def test_employee_cannot_get_summary(ldap_mocked_app_with_users): app = successfully_login(ldap_mocked_app_with_users, TEST_EMPLOYEE_2_USERNAME) dbsession = get_dbsession(app) add_test_data_for_stats(dbsession) resp = app.get("/api/v1/summarise/%s/" % TEST_EMPLOYEE_USERNAME, expect_errors=True) assert resp.status_code == 404
def test_talent_manager_can_get_history_for_anyone( ldap_mocked_app_with_users): # noqa: E501 app = successfully_login(ldap_mocked_app_with_users, TEST_TALENT_MANAGER_USERNAME) dbsession = get_dbsession(app) add_test_data_for_stats(dbsession) resp = app.get("/api/v1/feedback-history/%s/" % TEST_EMPLOYEE_2_USERNAME) assert resp.status_code == 200
def test_employee_cannot_get_company_feedback_stats_csv( app_with_nominees_inside_entry_subperiod ): # noqa: E501 app = successfully_login( app_with_nominees_inside_entry_subperiod, TEST_EMPLOYEE_USERNAME ) response = app.get("/api/v1/company-feedback-stats.csv", expect_errors=True) assert response.status_code == 403
def test_manager_cannot_get_raw_feedback_csv( app_with_nominees_inside_entry_subperiod ): # noqa: E501 app = successfully_login( app_with_nominees_inside_entry_subperiod, TEST_MANAGER_USERNAME ) response = app.get("/api/v1/company-raw-feedback.csv", expect_errors=True) assert response.status_code == 403
def test_external_cannot_get_company_feedback_stats( app_with_nominees_inside_entry_subperiod ): # noqa: E501 app = successfully_login( app_with_nominees_inside_entry_subperiod, TEST_COMPANY_COLLEAGUE_USERNAME ) response = app.get("/api/v1/company-stats", expect_errors=True) assert response.status_code == 403
def test_manager_can_get_own_team_feedback_stats_during_approval_period( ldap_mocked_app_with_users): # noqa: E501 app = successfully_login(ldap_mocked_app_with_users, TEST_MANAGER_USERNAME) dbsession = get_dbsession(app) add_test_data_for_stats(dbsession) _add_extra_periods(dbsession) response = app.get("/api/v1/team-stats") expected = ADD_TEST_DATA_FOR_STATS_EXPECTED_STATE assert response.json_body == expected
def test_talent_manager_can_get_company_feedback_stats_csv( ldap_mocked_app_with_users ): # noqa: E501 app = successfully_login(ldap_mocked_app_with_users, TEST_TALENT_MANAGER_USERNAME) dbsession = get_dbsession(app) add_test_data_for_stats(dbsession) response = app.get("/api/v1/company-feedback-stats.csv") assert response.content_type == "text/csv" assert response.body == open(TEST_CSV_FILEPATH, "rb").read()
def test_employee_cannot_get_others_history( ldap_mocked_app_with_users): # noqa: E501 app = successfully_login(ldap_mocked_app_with_users, TEST_EMPLOYEE_USERNAME) dbsession = get_dbsession(app) add_test_data_for_stats(dbsession) resp = app.get("/api/v1/feedback-history/%s/" % TEST_EMPLOYEE_2_USERNAME, expect_errors=True) assert resp.status_code == 403
def test_manager_cannot_get_history_for_non_direct_report( ldap_mocked_app_with_users): # noqa: E501 app = successfully_login(ldap_mocked_app_with_users, TEST_OTHER_MANAGER_USERNAME) dbsession = get_dbsession(app) add_test_data_for_stats(dbsession) resp = app.get("/api/v1/feedback-history/%s/" % TEST_EMPLOYEE_2_USERNAME, expect_errors=True) assert resp.status_code == 403
def test_talent_manager_can_get_company_raw_feedback( ldap_mocked_app_with_users ): # noqa: E501 app = successfully_login(ldap_mocked_app_with_users, TEST_TALENT_MANAGER_USERNAME) dbsession = get_dbsession(app) add_test_data_for_stats(dbsession) with transaction.manager: form = FeedbackForm( to_username=TEST_EMPLOYEE_3_USERNAME, from_username=TEST_TALENT_MANAGER_USERNAME, period_id=TEST_PREVIOUS_PERIOD_ID, is_summary=True, ) answers = [ FeedbackAnswer(question_id=QUESTION_IDS_AND_TEMPLATES[0][0], content="Foo"), FeedbackAnswer(question_id=QUESTION_IDS_AND_TEMPLATES[1][0], content="Bar"), FeedbackAnswer(question_id=QUESTION_IDS_AND_TEMPLATES[2][0], content="Tom"), ] form.answers = answers dbsession.add(form) response = app.get("/api/v1/company-raw-feedback.csv") assert response.content_type == "text/csv" num_q = 3 nominee_1_answers = ( (7 * num_q) + (3 * num_q) + (2 * num_q) + (TEST_NUM_FORMS_RECEIVED * num_q) ) nominee_2_answers = 2 * num_q nominee_3_answers = (3 * num_q) + (8 * num_q) + (10 * num_q) + (2 * num_q) summary_answers = 3 * len(TEST_STATS_NOMINATED_USERS) num_expected = ( nominee_1_answers + nominee_2_answers + nominee_3_answers + summary_answers ) # remove csv header and trailing newline body = response.body.decode() num_generated = len(body.split("\n")) - 2 assert num_expected == num_generated assert body.count(",True,") == summary_answers assert ( body.count( "to_username,from_username,is_summary,name," "question_template,content" ) == 1 ) raw_answer_row = ( "{to_username},{from_username},True,{period_name}," "{template},{answer}" "".format( to_username=TEST_EMPLOYEE_3_USERNAME, from_username=TEST_TALENT_MANAGER_USERNAME, period_name=TEST_PREVIOUS_PERIOD_NAME, template=QUESTION_IDS_AND_TEMPLATES[1][1], answer="Bar", ) ) assert body.count(raw_answer_row) == 1
def test_manager_can_summarise_for_nominated_but_no_received_feedback( ldap_mocked_app_with_users): # noqa: E501 app = successfully_login(ldap_mocked_app_with_users, TEST_MANAGER_USERNAME) dbsession = get_dbsession(app) add_test_data_for_stats(dbsession) with transaction.manager: forms = (dbsession.query(FeedbackForm).filter( FeedbackForm.to_username == TEST_EMPLOYEE_2_USERNAME).all()) for form in forms: dbsession.delete(form) app.get("/api/v1/summarise/%s/" % TEST_EMPLOYEE_2_USERNAME)
def test_manager_can_get_own_team_feedback_stats_outside_approval_period( ldap_mocked_app_with_users): # noqa: E501 app = successfully_login(ldap_mocked_app_with_users, TEST_MANAGER_USERNAME) dbsession = get_dbsession(app) add_test_data_for_stats(dbsession, current_subperiod=Period.ENTRY_SUBPERIOD) _add_extra_periods(dbsession) response = app.get("/api/v1/team-stats") expected = ADD_TEST_DATA_FOR_STATS_EXPECTED_STATE for row in expected["stats"]["values"]: row[-1]["buttonText"] = "Not in approval or review period" row[-1]["enable"] = False row[-1]["hasExistingSummary"] = False assert response.json_body == expected
def test_manager_can_get_history_for_direct_report( ldap_mocked_app_with_users): # noqa: E501 app = successfully_login(ldap_mocked_app_with_users, TEST_MANAGER_USERNAME) dbsession = get_dbsession(app) add_test_data_for_stats(dbsession) add_previous_test_summary(dbsession) add_extra_feedback_histories(dbsession, num=10) resp = app.get("/api/v1/feedback-history/%s/" % TEST_EMPLOYEE_2_USERNAME) assert len( resp.json_body["feedback"]["items"]) == MANAGER_VIEW_HISTORY_LIMIT items_payload = deepcopy(resp.json_body) items_payload["feedback"]["items"] = items_payload["feedback"]["items"][:2] assert EMPLOYEE_2_EXPECTED_HISTORY_HEAD == items_payload
def test_employee_can_view_feedback_received_for_all_periods( ldap_mocked_app_with_users): # noqa: E501 app = successfully_login(ldap_mocked_app_with_users, TEST_EMPLOYEE_2_USERNAME) dbsession = get_dbsession(app) add_test_data_for_stats(dbsession) add_previous_test_summary(dbsession) add_extra_feedback_histories(dbsession, num=10) resp = app.get("/api/v1/feedback-about-me") assert len(resp.json_body["feedback"]["items"]) == 12 items_payload = deepcopy(resp.json_body) items_payload["feedback"]["items"] = items_payload["feedback"]["items"][:2] assert EMPLOYEE_2_EXPECTED_HISTORY_HEAD == items_payload
def test_talent_manager_can_mass_email(ldap_mocked_app_with_users, template_key): with patch("smtplib.SMTP"), patch( "socket.gethostname" ) as gethostname_mock, patch("getpass.getuser") as getuser_mock: gethostname_mock.return_value = TEST_PRODUCTION_HOSTNAME getuser_mock.return_value = TEST_PRODUCTION_USER app = successfully_login(ldap_mocked_app_with_users, TEST_TALENT_MANAGER_USERNAME) dbsession = get_dbsession(app) template_id = add_test_template(dbsession) add_test_period_with_template(dbsession, Period.ENTRY_SUBPERIOD, template_id) csrf_token = app.cookies[ANGULAR_2_XSRF_TOKEN_COOKIE_NAME] response = app.post_json( "/api/v1/send-email", {"templateKey": template_key}, headers={ANGULAR_2_XSRF_TOKEN_HEADER_NAME: csrf_token}, ) assert response.json_body["success"]
def test_employee_cannot_list_nominees_outside_entry_subperiod( app_with_nominees_inside_approval_subperiod): # noqa: E501 app = successfully_login(app_with_nominees_inside_approval_subperiod, TEST_EMPLOYEE_USERNAME) response = app.get("/api/v1/nominees") assert response.json_body["heading"] == ENTRY_ENDED_TEMPLATE[ "heading"].format(period_name=TEST_PERIOD_NAME) assert response.json_body["body"] == ENTRY_ENDED_TEMPLATE["body"].format( period_name=TEST_PERIOD_NAME) assert response.json_body["buttonText"] == ENTRY_ENDED_TEMPLATE[ "buttonText"] assert response.json_body["buttonLink"] == ENTRY_ENDED_TEMPLATE[ "buttonLink"] assert response.json_body["canNominate"] == ENTRY_ENDED_TEMPLATE[ "canNominate"]
def test_employee_can_self_nominate_under_valid_conditions( app_in_enrollment_subperiod): # noqa: E501 app = successfully_login(app_in_enrollment_subperiod, TEST_EMPLOYEE_USERNAME) csrf_token = app.cookies[ANGULAR_2_XSRF_TOKEN_COOKIE_NAME] response = app.post("/api/v1/self-nominate", headers={ANGULAR_2_XSRF_TOKEN_HEADER_NAME: csrf_token}) assert response.json_body["heading"] == ENROLLMENT_SUCCESS_TEMPLATE[ "heading"].format(period_name=TEST_PERIOD_NAME) assert response.json_body["body"] == ENROLLMENT_SUCCESS_TEMPLATE[ "body"].format(period_name=TEST_PERIOD_NAME) assert response.json_body["buttonText"] == ENROLLMENT_SUCCESS_TEMPLATE[ "buttonText"] assert response.json_body["buttonLink"] == ENROLLMENT_SUCCESS_TEMPLATE[ "buttonLink"] assert (response.json_body["canNominate"] == ENROLLMENT_SUCCESS_TEMPLATE["canNominate"])
def test_manager_cannot_summarise_during_illegal_subperiod( ldap_mocked_app_with_users, subperiod): # noqa: E501 app = successfully_login(ldap_mocked_app_with_users, TEST_MANAGER_USERNAME) csrf_token = app.cookies[ANGULAR_2_XSRF_TOKEN_COOKIE_NAME] dbsession = get_dbsession(app) add_test_data_for_stats(dbsession, current_subperiod=subperiod) endpoint = "/api/v1/summarise/%s/" % TEST_EMPLOYEE_USERNAME response = app.get(endpoint, expect_errors=True) assert response.status_code == 404 response = app.put_json( endpoint, {"form": []}, headers={ANGULAR_2_XSRF_TOKEN_HEADER_NAME: csrf_token}, expect_errors=True, ) # 404 as opposed to 400 assert response.status_code == 404
def test_external_can_list_nominee_inviters_inside_entry_subperiod( app_with_nominees_and_existing_feedback_form_inside_entry_subperiod ): # noqa: E501 app = successfully_login( app_with_nominees_and_existing_feedback_form_inside_entry_subperiod, # noqa: E501 TEST_COMPANY_COLLEAGUE_USERNAME, ) response = app.get("/api/v1/nominees") assert response.status_code == 200 assert TEST_PERIOD_NAME == response.json_body["period"] assert response.json_body["nominees"] == [] dbsession = get_dbsession(app) # add irrevelant external invite for previous period add_test_period_with_template( dbsession, Period.ENTRY_SUBPERIOD, 1, period_id=TEST_PREVIOUS_PERIOD_ID, period_name=TEST_PREVIOUS_PERIOD_NAME, offset_from_utc_now_days=-100, ) with transaction.manager: invite = ExternalInvite( to_username=TEST_COMPANY_COLLEAGUE_USERNAME, from_username=TEST_EMPLOYEE_USERNAME, period_id=TEST_PERIOD_ID, ) dbsession.add(invite) prev_invite = ExternalInvite( to_username=TEST_COMPANY_COLLEAGUE_USERNAME, from_username=TEST_MANAGER_USERNAME, period_id=TEST_PREVIOUS_PERIOD_ID, ) dbsession.add(prev_invite) response = app.get("/api/v1/nominees") assert 200 == response.status_code assert TEST_PERIOD_NAME == response.json_body["period"] assert 1 == len(response.json_body["nominees"]) assert TEST_EMPLOYEE_USERNAME == response.json_body["nominees"][0][ "username"] assert not response.json_body["nominees"][0]["hasExistingFeedback"]
def test_employee_can_list_nominees_inside_entry_subperiod_2( ldap_mocked_app_with_users): # noqa: E501 """A particular DB state that caused failure in the past but is not working""" app = successfully_login(ldap_mocked_app_with_users, TEST_EMPLOYEE_USERNAME) dbsession = get_dbsession(app) add_test_data_for_stats(dbsession, Period.ENTRY_SUBPERIOD) response = app.get("/api/v1/nominees") assert response.status_code == 200 assert TEST_PERIOD_NAME == response.json_body["period"] # logged in user should not see their own name in nomination list nominees = [("bboggs", True), ("llovelace", False)] expected = [] for un, has_manager_in_database in nominees: data = TEST_LDAP_FULL_DETAILS[un] un_name = data[TEST_USERNAME_KEY] # if they are not in the User database, then they don't exist so # can't put up a display name if has_manager_in_database: manager = TEST_LDAP_FULL_DETAILS.get(data[MANAGER_KEY]) manager_display_name = " ".join( [manager["givenName"], manager["sn"]]) else: manager_display_name = "-" expected.append({ "username": un_name, "displayName": data["givenName"] + " " + data["sn"], "position": data["title"], "managerDisplayName": manager_display_name, "department": data["department"], "hasExistingFeedback": True if un_name == EXISTING_FEEDBACK_FORM_USERNAME else False, }) sorted_response = sorted(response.json_body["nominees"], key=lambda x: x["displayName"]) assert len(expected) == len(sorted_response) assert expected == sorted_response
def test_talent_manager_can_correct_summarised_feedback_from_another_manager( ldap_mocked_app_with_users ): # noqa: E501 app = successfully_login(ldap_mocked_app_with_users, TEST_TALENT_MANAGER_USERNAME) dbsession = get_dbsession(app) add_test_data_for_stats(dbsession, current_subperiod=Period.REVIEW_SUBPERIOD) response = app.get("/api/v1/summarise/%s/" % TEST_EMPLOYEE_2_USERNAME) items = response.json_body["summary"]["items"] expected = [ {"questionId": QUESTION_IDS_AND_TEMPLATES[0][0], "answer": TEST_SUMMARY_1}, {"questionId": QUESTION_IDS_AND_TEMPLATES[1][0], "answer": TEST_SUMMARY_2}, {"questionId": QUESTION_IDS_AND_TEMPLATES[2][0], "answer": TEST_SUMMARY_3}, ] generated = sorted(items, key=lambda k: k["questionId"]) for exp, gen in zip(expected, generated): assert exp["questionId"] == gen["questionId"] assert exp["answer"] == gen["answer"]
def test_employee_can_give_valid_feedback_form_to_valid_nominate_while_inside_entry_subperiod( app_with_nominees_inside_entry_subperiod): # noqa: E501 app = successfully_login(app_with_nominees_inside_entry_subperiod, TEST_EMPLOYEE_USERNAME) csrf_token = app.cookies[ANGULAR_2_XSRF_TOKEN_COOKIE_NAME] expected_questions = [] for _, template, caption in QUESTION_IDS_AND_TEMPLATES: expected_questions.append( template.format(period_name=TEST_PERIOD_NAME, display_name=NOMINATED_DISPLAY_NAME)) expected_answers = [ { "questionId": QUESTION_IDS_AND_TEMPLATES[0][0], "answer": "First answer 1" }, { "questionId": QUESTION_IDS_AND_TEMPLATES[1][0], "answer": "First answer 2 ₯" }, { "questionId": QUESTION_IDS_AND_TEMPLATES[2][0], "answer": "First answer 3" }, ] log.info("should be creating new form") app.put_json( NOMINATED_USER_FEEDBACK_ENDPOINT, {"form": expected_answers}, headers={ANGULAR_2_XSRF_TOKEN_HEADER_NAME: csrf_token}, ) log.info("should be fetching newly created form from server") response = app.get(NOMINATED_USER_FEEDBACK_ENDPOINT) items = response.json_body["form"]["items"] for generated, expected_q, expected_a in zip(items, expected_questions, expected_answers): assert generated["questionId"] == expected_a["questionId"] assert generated["question"] == expected_q assert isinstance(generated["answerId"], int) assert generated["answer"] == expected_a["answer"]
def test_manager_can_only_view_summary_during_review( ldap_mocked_app_with_users): # noqa: E501 app = successfully_login(ldap_mocked_app_with_users, TEST_MANAGER_USERNAME) csrf_token = app.cookies[ANGULAR_2_XSRF_TOKEN_COOKIE_NAME] dbsession = get_dbsession(app) add_test_data_for_stats(dbsession, current_subperiod=Period.REVIEW_SUBPERIOD) endpoint = "/api/v1/summarise/%s/" % TEST_EMPLOYEE_USERNAME response = app.get(endpoint) assert response.json_body["summary"]["readOnly"] response = app.put_json( endpoint, {"form": []}, headers={ANGULAR_2_XSRF_TOKEN_HEADER_NAME: csrf_token}, expect_errors=True, ) # 404 as opposed to 400 assert response.status_code == 404
def test_employee_cannot_self_nominate_if_already_nominated( app_in_enrollment_subperiod): # noqa: E501 dbsession = get_dbsession(app_in_enrollment_subperiod) with transaction.manager: period = dbsession.query(Period).first() nominee = Nominee(period=period, username=TEST_EMPLOYEE_USERNAME) dbsession.add(nominee) app = successfully_login(app_in_enrollment_subperiod, TEST_EMPLOYEE_USERNAME) csrf_token = app.cookies[ANGULAR_2_XSRF_TOKEN_COOKIE_NAME] response = app.post( "/api/v1/self-nominate", headers={ANGULAR_2_XSRF_TOKEN_HEADER_NAME: csrf_token}, expect_errors=True, ) assert response.status_code == 400 assert "You are already enrolled" in response.json_body["message"]