Batch Test Summary - Backend (5 shards, merged)

Shard 1

No report found for this shard (missing artifact).

Shard 2 of 5

Batch Test Summary - Service

Run: 2026-10-04 18:58:22  |  Marker: all tests  |  Overall result: PASSED

289
Total
286
Passed
0
Failed
0
Errors
3
Skipped

Suites

Suite Status Total Passed Failed Errors Skipped Duration
assignment PASSED 274 272 0 0 2 3m 20s
health PASSED 11 10 0 0 1 1.91s
questions PASSED 4 4 0 0 0 2.21s

Test Detail

Suite: assignment

Class Test Status Duration
tests.assignment.test_EI_1101_student_multiple_attempts test_EI_TC_1101_positive_second_attempt_starts_with_answers_reset [1] PASSED 2.48s
tests.assignment.test_EI_1101_student_multiple_attempts test_EI_TC_1101_positive_latest_attempt_grade_wins [2] PASSED 2.27s
tests.assignment.test_EI_1101_student_multiple_attempts test_EI_TC_1101_negative_third_attempt_is_refused [3] PASSED 1.73s
tests.assignment.test_EI_1114_student_assignments_fetch_all_class_code test_EI_TC_4481_positive_valid_class_code_returns_assignments [4] PASSED 0.63s
tests.assignment.test_EI_1114_student_assignments_fetch_all_class_code test_EI_TC_4480_negative_empty_class_code_rejected [5] PASSED 0.13s
tests.assignment.test_EI_1114_student_assignments_fetch_all_class_code test_EI_TC_edge_malformed_class_code_fetch_all_assignments [6] PASSED 0.09s
tests.assignment.test_EI_1114_student_assignments_fetch_all_class_code test_EI_TC_edge_unknown_class_code_fetch_all_assignments [7] PASSED 0.10s
tests.assignment.test_EI_1121_students_assignment_questions_fetch test_EI_TC_3729_positive_fetch_within_time_limit_ignores_client_clock [8] PASSED 1.38s
tests.assignment.test_EI_1121_students_assignment_questions_fetch test_EI_TC_3730_positive_near_expiry_remaining_time_decrements_server_side [9] PASSED 0.94s
tests.assignment.test_EI_1121_students_assignment_questions_fetch test_EI_TC_3731_negative_tampered_request_time_headers_do_not_extend_timer [10] PASSED 1.07s
tests.assignment.test_EI_1121_students_assignment_questions_fetch test_EI_TC_3732_negative_elapsed_timer_returns_403_time_expired [11] PASSED 15.88s
tests.assignment.test_EI_1165_item_analysis_readable_choice_text test_EI_TC_1165_positive_choice_text_is_readable_not_json [12] PASSED 1.49s
tests.assignment.test_EI_1177_mixed_actor_assignment_questions test_round2_free_response_question_loads_without_500 [13] PASSED 1.62s
tests.assignment.test_EI_1195_gradebook_matches_student_grade test_EI_TC_3710_positive_graded_assignment_matches [14] PASSED 1.42s
tests.assignment.test_EI_1195_gradebook_matches_student_grade test_EI_TC_3711_positive_missed_assignment_matches [15] PASSED 1.17s
tests.assignment.test_EI_1210_late_submission_approval test_EI_TC_4414_step_1_teacher_creates_closed_assignment_with_late_flag [16] PASSED 1.68s
tests.assignment.test_EI_1210_late_submission_approval test_EI_TC_4414_step_2_student_late_submit_returns_pending [17] PASSED 0.00s
tests.assignment.test_EI_1210_late_submission_approval test_EI_TC_4414_step_3_teacher_fetches_pending_late_submissions [18] PASSED 0.00s
tests.assignment.test_EI_1210_late_submission_approval test_EI_TC_4414_step_4_teacher_approves_late_submission [19] PASSED 0.00s
tests.assignment.test_EI_1210_late_submission_approval test_EI_TC_4414_step_5_teacher_rejects_late_submission [20] PASSED 1.20s
tests.assignment.test_EI_1218_assignment_title_validation test_EI_TC_2916_negative_punctuation_only_title_is_refused [21] PASSED 0.72s
tests.assignment.test_EI_1218_assignment_title_validation test_EI_TC_2917_negative_whitespace_only_title_is_refused [22] PASSED 0.85s
tests.assignment.test_EI_141_student_submission_details test_EI_TC_141_positive_the_student_sees_the_title_and_description_as_authored [23] PASSED 1.04s
tests.assignment.test_EI_141_student_submission_details test_EI_TC_141_positive_summary_tiles_report_score_questions_submitted_and_attempts [24] PASSED 1.30s
tests.assignment.test_EI_141_student_submission_details test_EI_TC_141_positive_time_left_is_within_the_time_allowed [25] PASSED 1.30s
tests.assignment.test_EI_141_student_submission_details test_EI_TC_141_positive_your_answers_lists_each_question_with_its_correct_answer [26] PASSED 1.33s
tests.assignment.test_EI_141_student_submission_details test_EI_TC_141_positive_each_submitted_answer_is_marked_right_or_wrong_with_its_points … PASSED 1.37s
tests.assignment.test_EI_141_student_submission_details test_EI_TC_141_edge_hidden_grading_leaves_the_correct_answers_out [28] PASSED 1.30s
tests.assignment.test_EI_187_staar_assignment_analytics_summary test_EI_TC_896_positive_staar_summary_after_one_correct_submission [29] PASSED 1.23s
tests.assignment.test_EI_187_staar_assignment_analytics_summary test_EI_TC_897_edge_staar_summary_with_no_submission [30] PASSED 0.95s
tests.assignment.test_EI_188_assignment_analytics_stats test_EI_TC_893_positive_stats_and_pass_fail_after_one_submission [31] PASSED 1.22s
tests.assignment.test_EI_188_assignment_analytics_stats test_EI_TC_894_edge_every_stat_is_zero_with_no_submission [32] PASSED 1.04s
tests.assignment.test_EI_190_act_assignment_analytics_summary test_EI_TC_190_positive_act_summary_after_one_correct_submission [33] PASSED 1.26s
tests.assignment.test_EI_214_teacher_create_assignment test_EI_214_teacher_create_assignment [34] PASSED 0.75s
tests.assignment.test_EI_214_teacher_create_assignment test_assignment_timestamps_chronological [35] PASSED 0.29s
tests.assignment.test_EI_214_teacher_create_assignment test_assignment_ids_unique [36] PASSED 0.23s
tests.assignment.test_EI_214_teacher_create_assignment test_assignment_required_fields_not_empty [37] PASSED 0.21s
tests.assignment.test_EI_214_teacher_create_assignment test_EI_TC_950_create_assignment_for_class_success [38] PASSED 0.19s
tests.assignment.test_EI_214_teacher_create_assignment test_EI_TC_951_create_assignment_missing_required_fields_returns_error [39] PASSED 0.19s
tests.assignment.test_EI_214_teacher_create_assignment test_EI_TC_953_fetch_assignments_by_class_code_staff_view [40] PASSED 0.47s
tests.assignment.test_EI_214_teacher_create_assignment test_EI_TC_954_update_assignment_unauthorized_or_invalid_owner[unauthorized] [41] PASSED 0.27s
tests.assignment.test_EI_214_teacher_create_assignment test_EI_TC_954_update_assignment_unauthorized_or_invalid_owner[different_owner] [42] PASSED 0.20s
tests.assignment.test_EI_214_teacher_create_assignment test_EI_TC_956_analytics_summary_fetch_for_assignment [43] PASSED 0.19s
tests.assignment.test_EI_214_teacher_create_assignment test_EI_TC_959_create_assignment_missing_required_fields_variant [44] PASSED 0.19s
tests.assignment.test_EI_214_teacher_create_assignment test_EI_TC_961_unauthorized_user_cannot_create_assignment [45] PASSED 0.14s
tests.assignment.test_EI_214_teacher_create_assignment test_EI_TC_962_update_non_existent_assignment [46] PASSED 0.09s
tests.assignment.test_EI_214_teacher_create_assignment test_EI_TC_962_update_malformed_assignment_id [47] PASSED 0.08s
tests.assignment.test_EI_214_teacher_create_assignment test_EI_1170_assigned_class_missing_returns_400 [48] PASSED 0.21s
tests.assignment.test_EI_214_teacher_create_assignment test_EI_1170_assigned_class_empty_list_returns_400 [49] PASSED 0.18s
tests.assignment.test_EI_214_teacher_create_assignment test_EI_1170_assigned_class_non_empty_returns_201 [50] PASSED 0.34s
tests.assignment.test_EI_2365_analytics test_EI_2365_analytics_summary_no_auth_returns_unauthorized [51] PASSED 0.04s
tests.assignment.test_EI_2365_analytics test_EI_2365_analytics_summary_invalid_uuid_returns_400 [52] PASSED 0.47s
tests.assignment.test_EI_2365_analytics test_EI_2365_analytics_summary_nonexistent_class_returns_404 [53] PASSED 0.17s
tests.assignment.test_EI_2365_analytics test_EI_2365_analytics_summary_no_data_leakage [54] PASSED 0.18s
tests.assignment.test_EI_2365_analytics test_EI_2365_item_analysis_invalid_uuid_returns_400 [55] PASSED 0.23s
tests.assignment.test_EI_2386_student_submission_page_contract test_EI_TC_2840_positive_details_carry_the_question_count_and_no_question_bodies [56] PASSED 0.95s
tests.assignment.test_EI_2386_student_submission_page_contract test_EI_TC_2841_positive_open_and_close_are_the_seeded_utc_instants [57] PASSED 0.14s
tests.assignment.test_EI_2386_student_submission_page_contract test_EI_2386_positive_submission_summary_counts_the_same_questions [58] PASSED 0.43s
tests.assignment.test_EI_2479_student_exam_feedback test_EI_TC_2479_positive_all_correct_answers_score_100_and_each_is_flagged_correct [59] PASSED 1.23s
tests.assignment.test_EI_2479_student_exam_feedback test_EI_TC_2479_edge_one_right_one_wrong_scores_50_and_only_one_is_flagged_correct [60] PASSED 1.30s
tests.assignment.test_EI_2479_student_exam_feedback test_EI_TC_1205_positive_submission_view_lists_each_question_with_its_answer [61] PASSED 1.35s
tests.assignment.test_EI_2518_title_edit_keeps_settings test_EI_TC_2164_positive_title_edit_keeps_the_settings [62] PASSED 1.21s
tests.assignment.test_EI_2533_student_assignment_before_open_date test_EI_TC_2533_negative_questions_fetch_before_open_date_is_refused [63] PASSED 1.07s
tests.assignment.test_EI_2547_reuse_global_assignment_and_verdict test_EI_TC_1100_positive_the_global_assignment_library_is_listed_with_titles [64] PASSED 0.20s
tests.assignment.test_EI_2547_reuse_global_assignment_and_verdict test_EI_TC_2547_positive_a_reused_global_assignment_is_visible_to_the_student [65] PASSED 1.10s
tests.assignment.test_EI_2547_reuse_global_assignment_and_verdict test_EI_TC_2547_positive_all_correct_answers_are_graded_100_and_passed [66] PASSED 1.28s
tests.assignment.test_EI_2547_reuse_global_assignment_and_verdict test_EI_TC_2547_negative_all_wrong_answers_are_graded_0_and_failed [67] PASSED 1.15s
tests.assignment.test_EI_2551_delete_assignment test_EI_TC_2551_positive_deleted_assignment_is_gone_for_the_student [68] PASSED 1.14s
tests.assignment.test_EI_2551_delete_assignment test_EI_TC_2551_negative_repeat_and_foreign_deletes_are_404 [69] PASSED 1.20s
tests.assignment.test_EI_2559_edit_assigned_test_title test_EI_TC_2137_positive_renamed_assignment_shows_the_new_title_to_the_student [70] PASSED 1.07s
tests.assignment.test_EI_2563_duplicate_assignment_into_two_classes test_EI_TC_2563_positive_re_using_the_questions_creates_a_distinct_assignment [71] PASSED 1.77s
tests.assignment.test_EI_2563_duplicate_assignment_into_two_classes test_EI_TC_2563_positive_each_assignment_is_listed_only_in_its_own_class [72] PASSED 2.09s
tests.assignment.test_EI_2563_duplicate_assignment_into_two_classes test_EI_TC_2563_positive_editing_the_original_leaves_the_copy_unchanged [73] PASSED 2.29s
tests.assignment.test_EI_2563_duplicate_assignment_into_two_classes test_EI_TC_2563_edge_deleting_the_original_leaves_the_copy_and_the_questions [74] PASSED 2.70s
tests.assignment.test_EI_2578_update_assignment_custom_settings test_EI_TC_2578_positive_instructions_and_late_submissions_are_persisted [75] PASSED 1.85s
tests.assignment.test_EI_2578_update_assignment_custom_settings test_EI_TC_2578_positive_late_submissions_update_leaves_the_other_settings_unchanged [76] PASSED 1.26s
tests.assignment.test_EI_2578_update_assignment_custom_settings test_EI_TC_2578_positive_adding_a_higher_point_question_raises_the_total_points [77] PASSED 1.35s
tests.assignment.test_EI_2581_title_edit_keeps_content_and_results test_EI_TC_2581_positive_title_edit_keeps_content_and_existing_results [78] PASSED 1.57s
tests.assignment.test_EI_2584_student_attempts_left_from_settings test_EI_TC_1820_positive_two_allowed_attempts_shows_two_left [79] PASSED 0.93s
tests.assignment.test_EI_2584_student_attempts_left_from_settings test_EI_TC_1821_positive_three_allowed_attempts_shows_three_left [80] PASSED 0.94s
tests.assignment.test_EI_2587_update_assignment_settings test_EI_TC_2587_positive_updated_settings_take_effect [81] PASSED 1.03s
tests.assignment.test_EI_2633_assignment_required_fields test_EI_TC_1899_negative_empty_title_is_refused [82] PASSED 0.69s
tests.assignment.test_EI_2633_assignment_required_fields test_EI_TC_1900_negative_empty_description_is_refused [83] PASSED 0.74s
tests.assignment.test_EI_2756_individual_student_answers_analytics test_EI_TC_2756_positive_a_correct_submission_is_shown_with_its_score_and_answer [84] PASSED 1.21s
tests.assignment.test_EI_2756_individual_student_answers_analytics test_EI_TC_1304_positive_the_review_row_names_the_question_and_the_students_answer [85] PASSED 1.27s
tests.assignment.test_EI_2756_individual_student_answers_analytics test_EI_TC_2756_negative_a_wrong_submission_is_shown_as_failed_with_no_points [86] PASSED 1.17s
tests.assignment.test_EI_2756_individual_student_answers_analytics test_EI_TC_2756_edge_a_student_who_has_not_submitted_shows_the_empty_state [87] PASSED 0.98s
tests.assignment.test_EI_2906_drag_and_drop_answer_grading test_EI_TC_2906_positive_each_choice_in_its_own_blank_is_graded_correct [88] PASSED 1.12s
tests.assignment.test_EI_2906_drag_and_drop_answer_grading test_EI_TC_2906_negative_the_right_choices_in_swapped_blanks_are_graded_wrong [89] PASSED 1.05s
tests.assignment.test_EI_2906_drag_and_drop_answer_grading test_EI_TC_2906_negative_a_second_submit_past_the_allowed_attempt_is_refused [90] PASSED 1.13s
tests.assignment.test_EI_3004_reschedule_assignment_dates test_EI_TC_3004_positive_rescheduled_dates_are_stored [91] PASSED 1.05s
tests.assignment.test_EI_3067_data_analytics_endpoints test_EI_TC_3057_positive_summary_answers_with_numeric_stats [92] PASSED 1.23s
tests.assignment.test_EI_3067_data_analytics_endpoints test_EI_TC_3058_positive_item_analysis_has_one_row_per_question [93] PASSED 1.25s
tests.assignment.test_EI_3182_assignment_instructions_and_rubric test_EI_TC_3182_positive_instructions_and_rubric_reach_the_student [94] PASSED 1.03s
tests.assignment.test_EI_3182_assignment_instructions_and_rubric test_EI_TC_3182_negative_rubric_criterion_without_levels_is_refused [95] PASSED 0.72s
tests.assignment.test_EI_3205_item_analysis_counts test_EI_TC_3205_positive_correct_submission_is_counted [96] PASSED 1.24s
tests.assignment.test_EI_3205_item_analysis_counts test_EI_TC_3197_edge_no_submission_counts_zero [97] PASSED 0.99s
tests.assignment.test_EI_3271_student_save_draft test_EI_TC_3271_positive_saving_a_draft_does_not_submit_or_use_an_attempt [98] PASSED 1.61s
tests.assignment.test_EI_3271_student_save_draft test_EI_TC_3145_positive_the_saved_answer_is_there_when_the_student_returns [99] PASSED 1.25s
tests.assignment.test_EI_3271_student_save_draft test_EI_TC_3387_positive_the_last_saved_answer_is_the_one_graded [100] PASSED 1.35s
tests.assignment.test_EI_3271_student_save_draft test_EI_TC_2470_negative_saving_after_the_submit_is_refused_and_the_grade_stays [101] PASSED 1.25s
tests.assignment.test_EI_3286_show_analytics test_EI_3286_show_analytics_no_auth_returns_unauthorized [102] PASSED 0.04s
tests.assignment.test_EI_3286_show_analytics test_EI_3286_show_analytics_malformed_uuid_returns_400 [103] PASSED 0.48s
tests.assignment.test_EI_3286_show_analytics test_EI_3286_show_analytics_short_uuid_returns_400 [104] PASSED 0.09s
tests.assignment.test_EI_3286_show_analytics test_EI_3286_show_analytics_long_uuid_returns_400 [105] PASSED 0.09s
tests.assignment.test_EI_3286_show_analytics test_EI_3286_show_analytics_nonexistent_uuid_returns_404 [106] PASSED 0.09s
tests.assignment.test_EI_3286_show_analytics test_EI_3286_show_analytics_special_chars_returns_400 [107] PASSED 0.08s
tests.assignment.test_EI_3293_student_assignment_opens_at_date_open test_EI_TC_3293_positive_questions_become_available_at_date_open [108] PASSED 25.96s
tests.assignment.test_EI_3295_student_submit_after_close test_EI_TC_3295_negative_submit_after_close_is_refused [109] PASSED 1.18s
tests.assignment.test_EI_3295_student_submit_after_close test_EI_TC_3295_negative_save_after_close_is_refused [110] PASSED 1.05s
tests.assignment.test_EI_3296_student_no_attempts_remaining test_EI_TC_3296_negative_no_new_attempt_once_the_only_one_is_used [111] PASSED 1.25s
tests.assignment.test_EI_3296_student_no_attempts_remaining test_EI_TC_3296_negative_resubmit_refused_and_previous_result_viewable [112] PASSED 1.43s
tests.assignment.test_EI_3385_title_edit_keeps_time_allowed test_EI_TC_3385_positive_a_title_only_edit_keeps_the_time_allowed [113] PASSED 1.24s
tests.assignment.test_EI_3387_student_answers_recorded_correctly test_EI_TC_3387_positive_saved_answer_is_returned_when_the_assignment_is_reopened [114] PASSED 1.14s
tests.assignment.test_EI_3387_student_answers_recorded_correctly test_EI_TC_3387_edge_the_last_saved_answer_is_the_one_graded [115] PASSED 1.28s
tests.assignment.test_EI_3436_library_assignment_access test_EI_TC_3436_positive_library_assignment_opens_with_details_and_questions [116] PASSED 0.34s
tests.assignment.test_EI_3437_reused_global_assignment_locked test_EI_3437_negative_changing_the_title_of_a_reused_copy_is_403 [117] PASSED 0.91s
tests.assignment.test_EI_3437_reused_global_assignment_locked test_EI_3437_negative_changing_the_questions_of_a_reused_copy_is_403 [118] PASSED 0.94s
tests.assignment.test_EI_3437_reused_global_assignment_locked test_EI_3437_positive_same_title_and_questions_with_a_new_close_date_is_saved [119] PASSED 0.92s
tests.assignment.test_EI_3439_shuffle_questions test_EI_TC_3439_positive_questions_are_shuffled_and_the_order_is_kept [120] PASSED 2.06s
tests.assignment.test_EI_3439_shuffle_questions test_EI_TC_3439_positive_authored_order_when_shuffle_is_off [121] PASSED 2.21s
tests.assignment.test_EI_3440_shuffle_choices test_EI_TC_3440_positive_choices_are_shuffled_within_each_question [122] PASSED 1.58s
tests.assignment.test_EI_3440_shuffle_choices test_EI_TC_3440_edge_shuffled_choices_are_kept_for_the_attempt [123] PASSED 1.51s
tests.assignment.test_EI_R11_negative_teacher_assignments test_EI_T288_negative_comment_delete_malformed_question_id_rejected [124] PASSED 0.55s
tests.assignment.test_EI_R11_negative_teacher_assignments test_EI_T290_negative_comment_delete_long_or_unknown_question_id_rejected[excessively_l… PASSED 0.14s
tests.assignment.test_EI_R11_negative_teacher_assignments test_EI_T290_negative_comment_delete_long_or_unknown_question_id_rejected[unknown_well_… PASSED 0.15s
tests.assignment.test_EI_R11_negative_teacher_assignments test_EI_T289_negative_comment_delete_omitted_question_id_rejected [127] PASSED 0.01s
tests.assignment.test_EI_R29_edge_teacher_assignments test_EI_T616_edge_another_accounts_late_submission_cannot_be_approved [128] PASSED 1.24s
tests.assignment.test_EI_R29_edge_teacher_assignments test_EI_T568_edge_duplicate_sequential_submission_does_not_duplicate_assignment [129]
Backend gap, live-verified 2026-09-15 (see module docstring): the create route has NO duplicate-submission guard — a byte-identical payload POSTed twice returns 201 each time with its own assignment_id, and the class listing shows every one. This test asserts the CORRECT idempotent contract and fail
SKIPPED 0.89s
tests.assignment.test_EI_R29_edge_teacher_assignments test_EI_T574_edge_duplicate_concurrent_submission_does_not_duplicate_assignment [130] PASSED 0.85s
tests.assignment.test_EI_R29_edge_teacher_assignments test_EI_T578_edge_fetch_assignments_empty_result_set_for_new_class [131] PASSED 0.48s
tests.assignment.test_EI_R29_edge_teacher_assignments test_EI_T569_edge_expired_bearer_rejected_on_create_assignment [132] PASSED 0.04s
tests.assignment.test_EI_R29_edge_teacher_assignments test_EI_T575_edge_expired_bearer_rejected_on_create_assignment_on_behalf_of_staff [133] PASSED 0.04s
tests.assignment.test_EI_R29_edge_teacher_assignments test_EI_T593_edge_expired_bearer_rejected_on_delete_assignment [134] PASSED 0.05s
tests.assignment.test_EI_R29_edge_teacher_assignments test_EI_T577_edge_expired_bearer_rejected_on_fetch_all_staff_assignments [135] PASSED 0.04s
tests.assignment.test_EI_R29_edge_teacher_assignments test_EI_T589_edge_expired_bearer_rejected_on_override_question_points [136] PASSED 0.04s
tests.assignment.test_EI_R29_edge_teacher_assignments test_EI_T602_edge_expired_bearer_rejected_on_add_comment [137] PASSED 0.04s
tests.assignment.test_EI_R29_edge_teacher_assignments test_EI_T610_edge_expired_bearer_rejected_on_delete_comment [138] PASSED 0.04s
tests.assignment.test_EI_R29_edge_teacher_assignments test_EI_T615_edge_expired_bearer_rejected_on_approve_late_submission [139] PASSED 0.04s
tests.assignment.test_EI_R29_edge_teacher_assignments test_EI_T619_edge_expired_bearer_rejected_on_reject_late_submission [140] PASSED 0.04s
tests.assignment.test_EI_R29_edge_teacher_assignments test_EI_T585_edge_expired_bearer_rejected_on_update_assignment [141] PASSED 0.04s
tests.assignment.test_EI_R29_edge_teacher_assignments test_EI_T606_edge_expired_bearer_rejected_on_update_comment [142] PASSED 0.04s
tests.assignment.test_EI_R29_edge_teacher_assignments test_EI_T591_edge_malformed_assignment_id_rejected_on_delete [143] PASSED 0.08s
tests.assignment.test_EI_R29_edge_teacher_assignments test_EI_T579_edge_malformed_assignment_id_rejected_on_staff_assignment_view [144] PASSED 0.12s
tests.assignment.test_EI_R29_edge_teacher_assignments test_EI_T581_edge_malformed_assignment_id_rejected_on_fetch_my_assignment [145] PASSED 0.16s
tests.assignment.test_EI_R29_edge_teacher_assignments test_EI_T611_edge_malformed_assignment_id_rejected_on_pending_late_submissions [146] PASSED 0.08s
tests.assignment.test_EI_R29_edge_teacher_assignments test_EI_T608_edge_malformed_class_code_rejected_on_delete_comment [147] PASSED 0.17s
tests.assignment.test_EI_R29_edge_teacher_assignments test_EI_T598_edge_malformed_class_code_rejected_on_student_submission_fetch [148] PASSED 0.20s
tests.assignment.test_EI_R29_edge_teacher_assignments test_EI_T594_edge_malformed_class_code_rejected_on_analytics_summary [149] PASSED 0.21s
tests.assignment.test_EI_R29_edge_teacher_assignments test_EI_T571_edge_malformed_class_code_rejected_on_fetch_my_assignments [150] PASSED 0.19s
tests.assignment.test_EI_R29_edge_teacher_assignments test_EI_T596_edge_malformed_class_code_rejected_on_item_analysis [151] PASSED 0.26s
tests.assignment.test_EI_R29_edge_teacher_assignments test_EI_T613_edge_malformed_submission_id_rejected_on_approve_late_submission [152] PASSED 0.09s
tests.assignment.test_EI_R29_edge_teacher_assignments test_EI_T600_edge_missing_comment_field_rejected_on_add_comment [153] PASSED 0.21s
tests.assignment.test_EI_R29_edge_teacher_assignments test_EI_T604_edge_missing_comment_field_rejected_on_update_comment [154] PASSED 0.19s
tests.assignment.test_EI_R29_edge_teacher_assignments test_EI_T587_edge_missing_points_field_rejected_on_question_points_update [155] PASSED 0.08s
tests.assignment.test_EI_R29_edge_teacher_assignments test_EI_T617_edge_missing_reason_field_rejected_on_reject_late_submission [156]
Backend gap, live-verified 2026-09-15 (see module docstring): omitting the required 'reason' field is accepted with HTTP 200 instead of the 422 the HTTPValidationError contract promises, so a partial write succeeds. This test asserts the CORRECT contract and fails until the field is enforced server-
SKIPPED 1.01s
tests.assignment.test_EI_R29_edge_teacher_assignments test_EI_T567_edge_missing_semester_field_rejected_on_create_assignment [157] PASSED 0.45s
tests.assignment.test_EI_R29_edge_teacher_assignments test_EI_T573_edge_missing_semester_field_rejected_on_create_on_behalf_of_staff [158] PASSED 0.58s
tests.assignment.test_EI_R29_edge_teacher_assignments test_EI_T583_edge_missing_semester_field_rejected_on_update_assignment [159] PASSED 0.61s
tests.assignment.test_EI_R29_edge_teacher_assignments test_EI_T603_edge_script_payload_in_comment_neutralised_on_add_comment [160] PASSED 1.01s
tests.assignment.test_EI_R29_edge_teacher_assignments test_EI_T607_edge_script_payload_in_comment_neutralised_on_update_comment [161] PASSED 1.20s
tests.assignment.test_EI_R29_edge_teacher_assignments test_EI_T590_edge_script_payload_in_points_neutralised_on_question_points_update [162] PASSED 0.71s
tests.assignment.test_EI_R29_edge_teacher_assignments test_EI_T620_edge_script_payload_in_reason_neutralised_on_reject_late_submission [163] PASSED 1.37s
tests.assignment.test_EI_R29_edge_teacher_assignments test_EI_T570_edge_script_payload_in_semester_neutralised_on_create_assignment [164] PASSED 0.49s
tests.assignment.test_EI_R29_edge_teacher_assignments test_EI_T576_edge_script_payload_in_semester_neutralised_on_create_on_behalf_of_staff [… PASSED 0.55s
tests.assignment.test_EI_R29_edge_teacher_assignments test_EI_T586_edge_script_payload_in_semester_neutralised_on_update_assignment [166] PASSED 0.70s
tests.assignment.test_EI_R29_edge_teacher_assignments test_EI_T592_edge_unknown_assignment_id_not_found_on_delete [167] PASSED 0.09s
tests.assignment.test_EI_R29_edge_teacher_assignments test_EI_T580_edge_unknown_assignment_id_not_found_on_staff_assignment_view [168] PASSED 0.13s
tests.assignment.test_EI_R29_edge_teacher_assignments test_EI_T582_edge_unknown_assignment_id_not_found_on_fetch_my_assignment [169] PASSED 0.17s
tests.assignment.test_EI_R29_edge_teacher_assignments test_EI_T612_edge_unknown_assignment_id_not_found_on_pending_late_submissions [170] PASSED 0.08s
tests.assignment.test_EI_R29_edge_teacher_assignments test_EI_T588_edge_unknown_assignment_id_not_found_on_question_points_update [171] PASSED 0.09s
tests.assignment.test_EI_R29_edge_teacher_assignments test_EI_T584_edge_unknown_assignment_id_not_found_on_update_assignment [172] PASSED 0.08s
tests.assignment.test_EI_R29_edge_teacher_assignments test_EI_T601_edge_unknown_class_code_not_found_on_add_comment [173] PASSED 0.21s
tests.assignment.test_EI_R29_edge_teacher_assignments test_EI_T609_edge_unknown_class_code_not_found_on_delete_comment [174] PASSED 0.18s
tests.assignment.test_EI_R29_edge_teacher_assignments test_EI_T599_edge_unknown_class_code_not_found_on_student_submission_fetch [175] PASSED 0.17s
tests.assignment.test_EI_R29_edge_teacher_assignments test_EI_T572_edge_unknown_class_code_not_found_on_fetch_my_assignments [176] PASSED 0.17s
tests.assignment.test_EI_R29_edge_teacher_assignments test_EI_T597_edge_unknown_class_code_not_found_on_item_analysis [177] PASSED 0.21s
tests.assignment.test_EI_R29_edge_teacher_assignments test_EI_T605_edge_unknown_class_code_not_found_on_update_comment [178] PASSED 0.17s
tests.assignment.test_EI_R29_edge_teacher_assignments test_EI_T614_edge_unknown_submission_id_not_found_on_approve_late_submission [179] PASSED 0.08s
tests.assignment.test_EI_R29_edge_teacher_assignments test_EI_T618_edge_unknown_submission_id_not_found_on_reject_late_submission [180] PASSED 0.14s
tests.assignment.test_EI_R39_edge_shared_assignments test_EI_T751_edge_omit_semester_rejected_on_create_assignment [181] PASSED 0.67s
tests.assignment.test_EI_R39_edge_shared_assignments test_EI_T752_edge_duplicate_create_sequential_does_not_duplicate_assignment [182] PASSED 0.49s
tests.assignment.test_EI_R39_edge_shared_assignments test_EI_T760_edge_duplicate_create_concurrent_does_not_duplicate_assignment [183] PASSED 0.44s
tests.assignment.test_EI_R39_edge_shared_assignments test_EI_T766_edge_duplicate_create_retry_does_not_duplicate_assignment [184] PASSED 0.60s
tests.assignment.test_EI_R39_edge_shared_assignments test_EI_T755_edge_malformed_assignment_id_rejected_on_view [185] PASSED 0.08s
tests.assignment.test_EI_R39_edge_shared_assignments test_EI_T769_edge_malformed_assignment_id_rejected_on_show_analytics [186] PASSED 0.08s
tests.assignment.test_EI_R39_edge_shared_assignments test_EI_T775_edge_malformed_assignment_id_rejected_on_delete [187] PASSED 0.11s
tests.assignment.test_EI_R39_edge_shared_assignments test_EI_T763_edge_malformed_submission_id_rejected_on_review [188] PASSED 0.10s
tests.assignment.test_EI_R39_edge_shared_assignments test_EI_T759_edge_omit_assignment_id_rejected_on_answer [189] PASSED 0.11s
tests.assignment.test_EI_R39_edge_shared_assignments test_EI_T762_edge_script_payload_in_assignment_id_neutralised_on_answer [190] PASSED 0.09s
tests.assignment.test_EI_R39_edge_shared_assignments test_EI_T765_edge_omit_type_rejected_on_share [191] PASSED 0.08s
tests.assignment.test_EI_R39_edge_shared_assignments test_EI_T771_edge_omit_semester_rejected_on_update_assignment [192] PASSED 0.40s
tests.assignment.test_assignments_common_view test_common_view_returns_assignment [193] PASSED 0.80s
tests.assignment.test_assignments_common_view test_common_view_no_auth_returns_401 [194] PASSED 0.20s
tests.assignment.test_next_adaptive_item_served test_next_adaptive_item_is_served_based_on_previous_response [195] PASSED 0.93s
tests.assignment.test_next_adaptive_item_served test_next_adaptive_item_rejects_malformed_assignment_identifier [196] PASSED 0.09s
tests.assignment.test_next_adaptive_item_served test_next_adaptive_item_rejects_malformed_question_classification [197] PASSED 0.22s
tests.assignment.test_next_adaptive_item_served test_next_adaptive_item_rejects_prev_difficulty_omitted [198] PASSED 0.23s
tests.assignment.test_shared_answer_service_records_submission test_student_submission_recorded_through_shared_answer_service [199] PASSED 0.81s
tests.assignment.test_shared_answer_service_records_submission test_shared_answer_service_rejects_assignment_id_omitted [200] PASSED 0.08s
tests.assignment.test_shared_answer_service_records_submission test_shared_answer_service_rejects_answers_wrong_data_type [201] PASSED 0.09s
tests.assignment.test_shared_answer_service_records_submission test_shared_answer_service_rejects_empty_answers_array [202] PASSED 0.37s
tests.assignment.test_student_assignment_violations test_report_violation_increments_count_and_trips_threshold [203] PASSED 1.16s
tests.assignment.test_student_assignment_violations test_report_violation_no_auth_returns_401 [204] PASSED 0.04s
tests.assignment.test_student_assignment_violations test_report_violation_expired_token_returns_401 [205] PASSED 0.04s
tests.assignment.test_student_assignment_violations test_report_violation_rejects_malformed_assignment_identifier [206] PASSED 0.12s
tests.assignment.test_student_assignment_violations test_report_violation_rejects_empty_or_over_length_type [207] PASSED 0.17s
tests.assignment.test_student_assignment_violations test_report_violation_rejects_type_field_omitted [208] PASSED 0.12s
tests.assignment.test_student_assignment_violations test_report_violation_rejects_type_wrong_data_type [209] PASSED 0.18s
tests.assignment.test_student_assignment_violations test_report_violation_rejects_unknown_assignment_identifier [210] PASSED 0.11s
tests.assignment.test_student_assignment_violations test_report_violation_neutralises_script_payload_in_type [211] PASSED 0.27s
tests.assignment.test_student_grade_average test_student_grade_average_returns_200 [212] PASSED 1.29s
tests.assignment.test_student_grade_average test_student_grade_average_requires_auth [213] PASSED 0.04s
tests.assignment.test_student_grade_average test_student_grade_average_rejects_malformed_class_code [214] PASSED 0.16s
tests.assignment.test_student_grade_average test_student_grade_average_rejects_excessively_long_or_unknown_class_code [215] PASSED 0.23s
tests.assignment.test_student_grade_average test_student_grade_average_flags_unknown_class_code_as_not_found [216] PASSED 0.17s
tests.assignment.test_student_grade_average test_student_grade_average_rejects_class_code_omitted [217] PASSED 0.23s
tests.assignment.test_take_assignment_incorrect_scoring test_submit_incorrect_answer_scores_zero [218] PASSED 1.25s
tests.assignment.test_take_assignment_student_flow test_all_fetch_lists_the_seeded_assignment [219] PASSED 0.86s
tests.assignment.test_take_assignment_student_flow test_details_fetch_returns_the_assignment [220] PASSED 0.16s
tests.assignment.test_take_assignment_student_flow test_questions_fetch_returns_the_in_progress_assignment [221] PASSED 0.12s
tests.assignment.test_take_assignment_student_flow test_answers_save_persists_a_draft_answer [222] PASSED 0.09s
tests.assignment.test_take_assignment_student_flow test_submission_fetch_returns_summary_for_the_started_assignment [223] PASSED 0.18s
tests.assignment.test_take_assignment_student_flow test_questions_fetch_no_auth_returns_401 [224] PASSED 0.04s
tests.assignment.test_take_assignment_student_flow test_submission_fetch_rejects_malformed_assignment_identifier [225] PASSED 0.14s
tests.assignment.test_take_assignment_student_flow test_submission_fetch_rejects_excessively_long_or_unknown_assignment_identifier [226] PASSED 0.24s
tests.assignment.test_take_assignment_student_flow test_submission_fetch_rejects_assignment_identifier_omitted [227] PASSED 0.15s
tests.assignment.test_take_assignment_student_flow test_details_fetch_rejects_malformed_assignment_identifier [228] PASSED 0.13s
tests.assignment.test_take_assignment_student_flow test_details_fetch_rejects_excessively_long_or_unknown_assignment_identifier [229] PASSED 0.24s
tests.assignment.test_take_assignment_student_flow test_details_fetch_rejects_assignment_identifier_omitted [230] PASSED 0.04s
tests.assignment.test_take_assignment_student_flow test_questions_fetch_rejects_malformed_assignment_identifier [231] PASSED 0.08s
tests.assignment.test_take_assignment_student_flow test_questions_fetch_rejects_excessively_long_or_unknown_assignment_identifier [232] PASSED 0.13s
tests.assignment.test_take_assignment_student_flow test_questions_fetch_rejects_assignment_identifier_omitted [233] PASSED 0.12s
tests.assignment.test_take_assignment_student_flow test_answers_save_rejects_malformed_assignment_identifier [234] PASSED 0.09s
tests.assignment.test_take_assignment_student_flow test_answers_save_rejects_unknown_assignment_identifier [235] PASSED 0.09s
tests.assignment.test_take_assignment_student_flow test_answers_save_rejects_empty_answers_array [236] PASSED 0.08s
tests.assignment.test_take_assignment_student_flow test_answers_save_rejects_answers_wrong_data_type [237] PASSED 0.10s
tests.assignment.test_take_assignment_student_flow test_answers_save_rejects_answers_field_omitted [238] PASSED 0.11s
tests.assignment.test_take_assignment_student_flow test_answers_save_rejects_expired_token [239] PASSED 0.04s
tests.assignment.test_take_assignment_student_flow test_answers_save_neutralises_script_payload_in_answers [240] PASSED 0.27s
tests.assignment.test_take_assignment_submit_flow test_submit_correct_answer_scores_full_and_records_submission [241] PASSED 1.13s
tests.assignment.test_take_assignment_submit_flow test_submit_no_auth_returns_401 [242] PASSED 0.05s
tests.assignment.test_take_assignment_submit_flow test_submit_rejects_malformed_assignment_identifier [243] PASSED 0.12s
tests.assignment.test_take_assignment_submit_flow test_submit_rejects_empty_answers_array [244] PASSED 0.15s
tests.assignment.test_take_assignment_submit_flow test_submit_rejects_answers_wrong_data_type [245] PASSED 0.14s
tests.assignment.test_take_assignment_submit_flow test_submit_rejects_answers_field_omitted [246] PASSED 0.12s
tests.assignment.test_take_assignment_submit_flow test_submit_rejects_expired_token [247] PASSED 0.04s
tests.assignment.test_take_assignment_submit_flow test_submit_neutralises_script_payload_in_answers [248] PASSED 0.17s
tests.assignment.test_take_assignment_submit_flow test_submit_rejects_unknown_assignment_identifier [249] PASSED 0.30s
tests.assignment.test_teacher_assignment_view_update_fetch_by_class test_fetch_by_class_returns_200_with_assignments [250] PASSED 1.04s
tests.assignment.test_teacher_assignment_view_update_fetch_by_class test_fetch_by_class_no_auth_returns_401 [251] PASSED 0.04s
tests.assignment.test_teacher_assignment_view_update_fetch_by_class test_view_returns_200_with_assignment [252] PASSED 0.18s
tests.assignment.test_teacher_assignment_view_update_fetch_by_class test_view_no_auth_returns_401 [253] PASSED 0.04s
tests.assignment.test_teacher_assignment_view_update_fetch_by_class test_update_no_auth_returns_401 [254] PASSED 0.04s
tests.assignment.test_teacher_fetch_submission_by_id test_teacher_fetch_by_submission_id_is_assignment_scoped_returns_404 [255] PASSED 1.43s
tests.assignment.test_teacher_question_points_update test_update_question_points_returns_200_with_the_new_value [256] PASSED 0.78s
tests.assignment.test_teacher_question_points_update test_update_question_points_response_contains_the_full_contract [257] PASSED 0.09s
tests.assignment.test_teacher_question_points_update test_update_question_points_is_repeatable_and_takes_the_latest_value [258] PASSED 0.14s
tests.assignment.test_teacher_question_points_update test_update_question_points_accepts_zero [259] PASSED 0.08s
tests.assignment.test_teacher_question_points_update test_update_question_points_accepts_the_upper_bound [260] PASSED 0.09s
tests.assignment.test_teacher_question_points_update test_update_question_points_rejects_a_value_above_the_upper_bound [261] PASSED 0.09s
tests.assignment.test_teacher_question_points_update test_update_question_points_rejects_a_negative_value [262] PASSED 0.08s
tests.assignment.test_teacher_question_points_update test_update_question_points_rejects_a_missing_points_field [263] PASSED 0.08s
tests.assignment.test_teacher_question_points_update test_update_question_points_rejects_a_malformed_assignment_id [264] PASSED 0.08s
tests.assignment.test_teacher_question_points_update test_update_question_points_rejects_a_malformed_question_id [265] PASSED 0.08s
tests.assignment.test_teacher_question_points_update test_update_question_points_404s_for_an_assignment_the_teacher_does_not_own [266] PASSED 0.09s
tests.assignment.test_teacher_question_points_update test_update_question_points_404s_for_a_question_outside_the_assignment [267] PASSED 0.08s
tests.assignment.test_teacher_question_points_update test_update_question_points_requires_authentication [268] PASSED 0.19s
tests.assignment.test_teacher_staff_library_contract test_staff_assignments_all_returns_200_with_a_list [269] PASSED 0.18s
tests.assignment.test_teacher_staff_library_contract test_staff_questions_all_returns_200_with_a_list [270] PASSED 0.20s
tests.assignment.test_teacher_staff_library_contract test_staff_assignment_view_absent_id_returns_404 [271] PASSED 0.09s
tests.assignment.test_teacher_staff_library_contract test_staff_assignments_all_no_auth_returns_401 [272] PASSED 0.06s
tests.assignment.test_teacher_staff_library_contract test_staff_assignment_view_no_auth_returns_401 [273] PASSED 0.04s
tests.assignment.test_teacher_staff_library_contract test_staff_questions_all_no_auth_returns_401 [274] PASSED 0.20s

Suite: health

Class Test Status Duration
tests.health.test_health test_health_returns_200 [1] PASSED 0.46s
tests.health.test_health test_v1_health_returns_200_with_status_and_version [2] PASSED 0.03s
tests.health.test_zephyr_edge_health_disclosure test_EI_T420_health_probe_is_anonymous_and_discloses_nothing [3] PASSED 0.04s
tests.health.test_zephyr_edge_health_disclosure test_EI_T422_v1_health_probe_is_anonymous_and_leaks_no_environment_detail [4] PASSED 0.04s
tests.health.test_zephyr_edge_health_disclosure test_v1_health_discloses_no_build_version [5]
Deviation from EI-T420 / EI-T422, live-verified 2026-09-21: the case says the probe body must expose no VERSION, but GET /v1/health returns {'status': ..., 'version': '0.0.0.329'} read straight from version.txt (server/app.py). GET /health discloses nothing, so the cases pass on that probe; this pin
SKIPPED 0.04s
tests.health.test_zephyr_edge_health_readiness test_EI_T419_readiness_probe_reports_dependency_state [6] PASSED 0.04s
tests.health.test_zephyr_edge_health_readiness test_EI_T419_readiness_status_agrees_with_its_dependencies [7] PASSED 0.05s
tests.health.test_zephyr_edge_health_readiness test_EI_T421_readiness_probe_is_reachable_without_credentials [8] PASSED 0.04s
tests.health.test_zephyr_edge_health_readiness test_EI_T421_readiness_probe_discloses_no_environment_detail [9] PASSED 0.04s
tests.health.test_zephyr_edge_health_readiness test_liveness_endpoints_do_not_report_dependency_state[health] [10] PASSED 0.04s
tests.health.test_zephyr_edge_health_readiness test_liveness_endpoints_do_not_report_dependency_state[v1-health] [11] PASSED 0.04s

Suite: questions

Class Test Status Duration
tests.questions.test_EI_3321_question_content_injection test_EI_3321_script_and_handlers_are_not_stored [1] PASSED 0.70s
tests.questions.test_zephyr_positive_question_image_upload test_EI_T42_image_upload_returns_created_with_a_reference [2] PASSED 0.29s
tests.questions.test_zephyr_positive_question_image_upload test_EI_T42_the_returned_reference_is_retrievable [3] PASSED 0.05s
tests.questions.test_zephyr_positive_question_image_upload test_EI_T42_the_reference_still_serves_the_original_after_another_upload [4] PASSED 0.23s

Shard 3 of 5

Batch Test Summary - Service

Run: 2026-10-04 18:55:14  |  Marker: all tests  |  Overall result: PASSED

95
Total
95
Passed
0
Failed
0
Errors
0
Skipped

Suites

Suite Status Total Passed Failed Errors Skipped Duration
backup PASSED 10 10 0 0 0 2.76s
password PASSED 33 33 0 0 0 9.23s
security PASSED 52 52 0 0 0 4.22s

Test Detail

Suite: backup

Class Test Status Duration
tests.backup.test_EI_edge_students_deprecated test_EI_TC_edge_bulk_create_no_longer_mutates_data [1] PASSED 0.94s
tests.backup.test_EI_edge_students_deprecated test_EI_TC_edge_submit_create_no_longer_mutates_data [2] PASSED 0.11s
tests.backup.test_EI_edge_students_deprecated test_EI_TC_edge_duplicate_submission_does_not_duplicate_student [3] PASSED 0.16s
tests.backup.test_EI_edge_students_deprecated test_EI_TC_edge_expired_token_rejected_on_bulk_create [4] PASSED 0.05s
tests.backup.test_EI_edge_students_deprecated test_EI_TC_edge_expired_token_rejected_on_submit_create [5] PASSED 0.05s
tests.backup.test_EI_edge_students_deprecated test_EI_TC_edge_missing_auth_header_rejected_on_submit_create [6] PASSED 0.05s
tests.backup.test_EI_edge_students_deprecated test_EI_TC_edge_missing_file_field_rejected_on_bulk_create [7] PASSED 0.10s
tests.backup.test_EI_edge_students_deprecated test_EI_TC_edge_script_payload_in_file_is_neutralised_on_bulk_create [8] PASSED 0.11s
tests.backup.test_teacher_students_deprecated test_student_create_is_gone [9] PASSED 0.09s
tests.backup.test_teacher_students_deprecated test_student_bulk_create_is_gone [10] PASSED 0.10s

Suite: password

Class Test Status Duration
tests.password.test_EI_223_teacher_password_change test_EI_223_positive_change_password_returns_200_and_new_password_works [1] PASSED 3.06s
tests.password.test_EI_223_teacher_password_change test_EI_223_negative_wrong_current_password_returns_400 [2] PASSED 0.29s
tests.password.test_EI_223_teacher_password_change test_EI_223_negative_missing_auth_token_returns_401 [3] PASSED 0.06s
tests.password.test_EI_223_teacher_password_change test_EI_223_security_student_token_cannot_change_teacher_password [4] PASSED 0.26s
tests.password.test_EI_223_teacher_password_change test_EI_223_edge_mismatched_new_and_repeat_password_is_never_a_500 [5] PASSED 0.32s
tests.password.test_EI_223_teacher_password_change test_EI_223_edge_missing_new_password_field_is_never_a_500 [6] PASSED 0.10s
tests.password.test_EI_2403_teacher_password_complexity test_EI_TC_2390_negative_specials_only_password_is_refused [7] PASSED 0.10s
tests.password.test_EI_2403_teacher_password_complexity test_EI_TC_2391_negative_password_without_a_special_character_is_refused [8] PASSED 0.10s
tests.password.test_EI_2763_wrong_current_password_message test_EI_TC_2763_negative_wrong_current_password_gets_the_exact_message_and_changes_noth… PASSED 0.66s
tests.password.test_EI_2768_teacher_password_minimum_length test_EI_TC_2470_edge_nine_character_password_is_refused [10] PASSED 0.08s
tests.password.test_EI_3284_password_reset_token test_EI_3284_valid_email_returns_200 [11] PASSED 0.23s
tests.password.test_EI_3284_password_reset_token test_EI_3284_nonexistent_email_returns_200 [12] PASSED 0.33s
tests.password.test_EI_3284_password_reset_token test_EI_3284_missing_email_returns_400 [13] PASSED 0.04s
tests.password.test_EI_3284_password_reset_token test_EI_3284_malformed_email_returns_400 [14] PASSED 0.04s
tests.password.test_EI_3284_password_reset_token test_EI_3284_extra_fields_ignored [15] PASSED 0.17s
tests.password.test_EI_3284_reset_token_expiration test_EI_TC_3284_negative_expired_or_invalid_reset_token_is_rejected [16] PASSED 0.04s
tests.password.test_EI_543_forgot_password_never_500s test_EI_543_invalid_input_returns_400_not_500[invalid_email_format] [17] PASSED 0.05s
tests.password.test_EI_543_forgot_password_never_500s test_EI_543_invalid_input_returns_400_not_500[empty_email] [18] PASSED 0.05s
tests.password.test_EI_543_forgot_password_never_500s test_EI_543_invalid_input_returns_400_not_500[missing_email_key] [19] PASSED 0.04s
tests.password.test_EI_543_forgot_password_never_500s test_EI_543_invalid_input_returns_400_not_500[email_is_null] [20] PASSED 0.06s
tests.password.test_EI_543_forgot_password_never_500s test_EI_543_invalid_input_returns_400_not_500[email_is_a_number] [21] PASSED 0.04s
tests.password.test_EI_543_forgot_password_never_500s test_EI_543_invalid_input_returns_400_not_500[email_is_a_list] [22] PASSED 0.04s
tests.password.test_EI_543_forgot_password_never_500s test_EI_543_rejection_does_not_echo_the_submitted_value[invalid_email_format] [23] PASSED 0.04s
tests.password.test_EI_543_forgot_password_never_500s test_EI_543_rejection_does_not_echo_the_submitted_value[empty_email] [24] PASSED 0.04s
tests.password.test_EI_543_forgot_password_never_500s test_EI_543_rejection_does_not_echo_the_submitted_value[missing_email_key] [25] PASSED 0.04s
tests.password.test_EI_543_forgot_password_never_500s test_EI_543_rejection_does_not_echo_the_submitted_value[email_is_null] [26] PASSED 0.03s
tests.password.test_EI_543_forgot_password_never_500s test_EI_543_rejection_does_not_echo_the_submitted_value[email_is_a_number] [27] PASSED 0.04s
tests.password.test_EI_543_forgot_password_never_500s test_EI_543_rejection_does_not_echo_the_submitted_value[email_is_a_list] [28] PASSED 0.04s
tests.password.test_EI_543_forgot_password_never_500s test_EI_543_legacy_reset_body_does_not_crash_the_endpoint[legacy_mismatched_passwords] … PASSED 0.27s
tests.password.test_EI_543_forgot_password_never_500s test_EI_543_legacy_reset_body_does_not_crash_the_endpoint[legacy_empty_passwords] [30] PASSED 0.30s
tests.password.test_EI_543_forgot_password_never_500s test_EI_543_valid_email_still_works [31] PASSED 0.28s
tests.password.test_EI_TC_4570_forgot_password_unknown_email test_EI_TC_4570_negative_an_unregistered_email_gets_the_generic_success_answer [32] PASSED 0.27s
tests.password.test_EI_TC_4570_forgot_password_unknown_email test_EI_TC_4570_edge_two_unregistered_emails_get_identical_answers [33] PASSED 0.66s

Suite: security

Class Test Status Duration
tests.security.test_hidden_endpoints_coverage test_hidden_endpoint_requires_auth[GET:/teacher/features/district/features] [1] PASSED 0.39s
tests.security.test_hidden_endpoints_coverage test_hidden_endpoint_requires_auth[GET:/student/features/district/features] [2] PASSED 0.04s
tests.security.test_hidden_endpoints_coverage test_hidden_endpoint_requires_auth[GET:/teacher/assignment/next/507f1f77bcf86cd79943901… PASSED 0.04s
tests.security.test_hidden_endpoints_coverage test_hidden_endpoint_requires_auth[POST:/teacher/assignment/answer/create] [4] PASSED 0.04s
tests.security.test_hidden_endpoints_coverage test_hidden_endpoint_requires_auth[GET:/teacher/assignment/507f1f77bcf86cd799439011/fet… PASSED 0.04s
tests.security.test_hidden_endpoints_coverage test_hidden_endpoint_requires_auth[POST:/teacher/assignment/share] [6] PASSED 0.06s
tests.security.test_hidden_endpoints_coverage test_hidden_endpoint_requires_auth[PATCH:/teacher/account/education/update] [7] PASSED 0.05s
tests.security.test_hidden_endpoints_coverage test_hidden_endpoint_requires_auth[PATCH:/teacher/account/office/details/update] [8] PASSED 0.04s
tests.security.test_hidden_endpoints_coverage test_hidden_endpoint_requires_auth[POST:/teacher/account/password/change] [9] PASSED 0.05s
tests.security.test_hidden_endpoints_coverage test_hidden_endpoint_requires_auth[POST:/student/account/password/change] [10] PASSED 0.06s
tests.security.test_hidden_endpoints_coverage test_teacher_district_features_returns_200 [11] PASSED 0.18s
tests.security.test_hidden_endpoints_coverage test_student_district_features_returns_200 [12] PASSED 0.41s
tests.security.test_hidden_endpoints_coverage test_student_token_cannot_read_teacher_district_features [13] PASSED 0.05s
tests.security.test_hidden_endpoints_coverage test_teacher_token_cannot_read_student_district_features [14] PASSED 0.05s
tests.security.test_remaining_endpoints_require_auth test_student_endpoint_requires_auth[DELETE:/v1/student/account/picture/delete] [15] PASSED 0.05s
tests.security.test_remaining_endpoints_require_auth test_student_endpoint_requires_auth[DELETE:/v1/student/account/theme/delete] [16] PASSED 0.04s
tests.security.test_remaining_endpoints_require_auth test_student_endpoint_requires_auth[GET:/v1/student/assignment/507f1f77bcf86cd799439011… PASSED 0.04s
tests.security.test_remaining_endpoints_require_auth test_student_endpoint_requires_auth[GET:/v1/student/classes/messages/507f1f77bcf86cd799… PASSED 0.04s
tests.security.test_remaining_endpoints_require_auth test_student_endpoint_requires_auth[GET:/v1/student/classes/ABC123/fetch] [19] PASSED 0.04s
tests.security.test_remaining_endpoints_require_auth test_student_endpoint_requires_auth[PATCH:/v1/student/account/picture/update] [20] PASSED 0.04s
tests.security.test_remaining_endpoints_require_auth test_student_endpoint_requires_auth[PATCH:/v1/student/account/update] [21] PASSED 0.04s
tests.security.test_remaining_endpoints_require_auth test_student_endpoint_requires_auth[PATCH:/v1/student/classes/join/ABC123/cancel] [22] PASSED 0.04s
tests.security.test_remaining_endpoints_require_auth test_student_endpoint_requires_auth[PATCH:/v1/student/classes/ABC123/leave] [23] PASSED 0.04s
tests.security.test_remaining_endpoints_require_auth test_student_endpoint_requires_auth[POST:/v1/student/account/picture/add] [24] PASSED 0.04s
tests.security.test_remaining_endpoints_require_auth test_student_endpoint_requires_auth[POST:/v1/student/account/theme/apply] [25] PASSED 0.04s
tests.security.test_remaining_endpoints_require_auth test_student_endpoint_requires_auth[POST:/v1/student/assignment/507f1f77bcf86cd79943901… PASSED 0.04s
tests.security.test_remaining_endpoints_require_auth test_student_endpoint_requires_auth[PUT:/v1/student/account/theme/update] [27] PASSED 0.04s
tests.security.test_remaining_endpoints_require_auth test_common_endpoint_requires_auth[DELETE:/v1/assignments/delete/507f1f77bcf86cd7994390… PASSED 0.06s
tests.security.test_remaining_endpoints_require_auth test_common_endpoint_requires_auth[GET:/v1/assignments/adoptive/507f1f77bcf86cd79943901… PASSED 0.05s
tests.security.test_remaining_endpoints_require_auth test_common_endpoint_requires_auth[GET:/v1/assignments/review/507f1f77bcf86cd799439011]… PASSED 0.06s
tests.security.test_remaining_endpoints_require_auth test_common_endpoint_requires_auth[GET:/v1/assignments/view/507f1f77bcf86cd799439011] [31] PASSED 0.04s
tests.security.test_remaining_endpoints_require_auth test_common_endpoint_requires_auth[POST:/v1/assignments/answer] [32] PASSED 0.04s
tests.security.test_remaining_endpoints_require_auth test_common_endpoint_requires_auth[POST:/v1/assignments/create] [33] PASSED 0.04s
tests.security.test_remaining_endpoints_require_auth test_common_endpoint_requires_auth[POST:/v1/assignments/share] [34] PASSED 0.04s
tests.security.test_remaining_endpoints_require_auth test_common_endpoint_requires_auth[PUT:/v1/assignments/update/507f1f77bcf86cd799439011]… PASSED 0.04s
tests.security.test_remaining_endpoints_require_auth test_common_endpoint_requires_auth[POST:/v1/webhooks/auth0/user-sync] [36] PASSED 0.06s
tests.security.test_teacher_endpoints_require_auth test_teacher_endpoint_requires_auth[POST:/v1/teacher/students/create] [37] PASSED 0.05s
tests.security.test_teacher_endpoints_require_auth test_teacher_endpoint_requires_auth[POST:/v1/teacher/students/bulk/create] [38] PASSED 0.05s
tests.security.test_teacher_endpoints_require_auth test_teacher_endpoint_requires_auth[PATCH:/v1/teacher/account/picture/update] [39] PASSED 0.04s
tests.security.test_teacher_endpoints_require_auth test_teacher_endpoint_requires_auth[POST:/v1/teacher/account/password/update] [40] PASSED 0.04s
tests.security.test_teacher_endpoints_require_auth test_teacher_endpoint_requires_auth[POST:/v1/teacher/class/507f1f77bcf86cd799439011/res… PASSED 0.04s
tests.security.test_teacher_endpoints_require_auth test_teacher_endpoint_requires_auth[POST:/v1/teacher/class/507f1f77bcf86cd799439011/pho… PASSED 0.04s
tests.security.test_teacher_endpoints_require_auth test_teacher_endpoint_requires_auth[PATCH:/v1/teacher/class/507f1f77bcf86cd799439011/ph… PASSED 0.04s
tests.security.test_teacher_endpoints_require_auth test_teacher_endpoint_requires_auth[DELETE:/v1/teacher/class/507f1f77bcf86cd799439011/p… PASSED 0.04s
tests.security.test_teacher_endpoints_require_auth test_teacher_endpoint_requires_auth[PATCH:/v1/teacher/class/507f1f77bcf86cd799439011/50… PASSED 0.07s
tests.security.test_teacher_endpoints_require_auth test_teacher_endpoint_requires_auth[DELETE:/v1/teacher/class/507f1f77bcf86cd799439011/5… PASSED 0.05s
tests.security.test_teacher_endpoints_require_auth test_teacher_endpoint_requires_auth[DELETE:/v1/teacher/assignment/507f1f77bcf86cd799439… PASSED 0.04s
tests.security.test_teacher_endpoints_require_auth test_teacher_endpoint_requires_auth[POST:/v1/teacher/assignment/staff/assignments/creat… PASSED 0.04s
tests.security.test_teacher_endpoints_require_auth test_teacher_endpoint_requires_auth[GET:/v1/teacher/assignment/ABC123/507f1f77bcf86cd79… PASSED 0.04s
tests.security.test_teacher_endpoints_require_auth test_teacher_endpoint_requires_auth[POST:/v1/teacher/assignment/ABC123/507f1f77bcf86cd7… PASSED 0.06s
tests.security.test_teacher_endpoints_require_auth test_teacher_endpoint_requires_auth[PUT:/v1/teacher/assignment/ABC123/507f1f77bcf86cd79… PASSED 0.04s
tests.security.test_teacher_endpoints_require_auth test_teacher_endpoint_requires_auth[DELETE:/v1/teacher/assignment/ABC123/507f1f77bcf86c… PASSED 0.04s

Shard 4 of 5

Batch Test Summary - Service

Run: 2026-10-04 18:56:48  |  Marker: all tests  |  Overall result: PASSED

365
Total
362
Passed
0
Failed
0
Errors
3
Skipped

Suites

Suite Status Total Passed Failed Errors Skipped Duration
classes PASSED 299 299 0 0 0 1m 24s
perf PASSED 3 0 0 0 3 0.90s
theme PASSED 63 63 0 0 0 24.25s

Test Detail

Suite: classes

Class Test Status Duration
tests.classes.test_EI_1078_class_code_format_and_uniqueness test_EI_TC_1078_positive_class_code_is_six_upper_case_characters_and_finds_the_class [1] PASSED 1.00s
tests.classes.test_EI_1078_class_code_format_and_uniqueness test_EI_TC_1108_positive_three_classes_get_three_different_well_formed_codes [2] PASSED 0.67s
tests.classes.test_EI_1078_class_code_format_and_uniqueness test_EI_TC_1078_edge_a_deleted_class_code_is_not_reused_by_the_next_class [3] PASSED 0.60s
tests.classes.test_EI_1204_teacher_edit_class_prevents_duplicate test_EI_TC_1204_negative_edit_onto_an_existing_title_and_section_is_refused [4] PASSED 0.78s
tests.classes.test_EI_1229_edit_class_description_optional test_EI_TC_1229_positive_editing_a_class_with_an_empty_description_is_saved [5] PASSED 0.52s
tests.classes.test_EI_1229_edit_class_description_optional test_EI_TC_1229_negative_editing_a_class_with_a_class_code_is_refused [6] PASSED 0.35s
tests.classes.test_EI_1246_student_leave_class test_EI_TC_1246_positive_leave_request_keeps_the_student_enrolled_until_answered [7] PASSED 0.81s
tests.classes.test_EI_1246_student_leave_class test_EI_TC_1246_positive_approved_leave_removes_the_student_and_lists_it_as_removed [8] PASSED 0.86s
tests.classes.test_EI_1246_student_leave_class test_EI_TC_1246_negative_declined_leave_keeps_the_student_enrolled [9] PASSED 0.60s
tests.classes.test_EI_1295_teacher_view_class_list test_EI_TC_3983_positive_class_list_rows_carry_title_code_and_semester [10] PASSED 0.35s
tests.classes.test_EI_1295_teacher_view_class_list test_EI_TC_3984_negative_class_list_without_a_token_is_401 [11] PASSED 0.04s
tests.classes.test_EI_1302_class_schedule_12_hour_time test_EI_TC_1302_positive_12_hour_schedule_is_stored_normalised [12] PASSED 0.20s
tests.classes.test_EI_1302_class_schedule_12_hour_time test_EI_TC_1302_negative_24_hour_time_is_refused [13] PASSED 0.10s
tests.classes.test_EI_1332_teacher_delete_class_removes_it test_EI_TC_1332_positive_deleted_class_is_gone_from_the_teachers_list [14] PASSED 0.51s
tests.classes.test_EI_1332_teacher_delete_class_removes_it test_EI_TC_1332_negative_deleted_class_is_not_found_by_its_code [15] PASSED 0.44s
tests.classes.test_EI_1339_non_member_class_lookup test_EI_TC_4089_positive_non_member_can_look_up_the_class [16] PASSED 0.29s
tests.classes.test_EI_1339_non_member_class_lookup test_EI_TC_4091_negative_non_member_sees_no_students [17] PASSED 0.30s
tests.classes.test_EI_2360_classes_with_students test_EI_2360_classes_list_returns_200 [18] PASSED 0.40s
tests.classes.test_EI_2360_classes_with_students test_EI_2360_classes_list_envelope_has_classes_key [19] PASSED 0.19s
tests.classes.test_EI_2360_classes_with_students test_EI_2360_classes_list_no_auth_returns_unauthorized [20] PASSED 0.04s
tests.classes.test_EI_2360_classes_with_students test_EI_2360_invalid_path_returns_404 [21] PASSED 0.04s
tests.classes.test_EI_2589_teacher_view_class_assignment_list test_EI_TC_3062_positive_owner_gets_the_class_assignment_list [22] PASSED 0.29s
tests.classes.test_EI_2589_teacher_view_class_assignment_list test_EI_TC_3063_negative_another_teachers_class_is_not_found [23] PASSED 0.70s
tests.classes.test_EI_2713_rejected_student_can_rejoin test_EI_2713_positive_a_rejected_student_can_request_to_join_again [24] PASSED 0.73s
tests.classes.test_EI_2750_teacher_class_title_special_characters test_EI_TC_2446_positive_title_with_special_character_is_stored_and_found[@] [25] PASSED 0.31s
tests.classes.test_EI_2750_teacher_class_title_special_characters test_EI_TC_2446_positive_title_with_special_character_is_stored_and_found[#] [26] PASSED 0.30s
tests.classes.test_EI_2750_teacher_class_title_special_characters test_EI_TC_2446_positive_title_with_special_character_is_stored_and_found[$] [27] PASSED 0.30s
tests.classes.test_EI_2750_teacher_class_title_special_characters test_EI_TC_2446_positive_title_with_special_character_is_stored_and_found[&] [28] PASSED 0.28s
tests.classes.test_EI_2750_teacher_class_title_special_characters test_EI_TC_2447_edge_regex_characters_in_the_search_are_literal [29] PASSED 0.36s
tests.classes.test_EI_2816_teacher_view_classes_list test_EI_TC_3033_positive_new_class_is_listed_with_title_code_and_semester [30] PASSED 0.28s
tests.classes.test_EI_2816_teacher_view_classes_list test_EI_TC_3035_positive_new_class_counts_once_and_has_no_students [31] PASSED 0.38s
tests.classes.test_EI_2819_teacher_class_counters test_EI_TC_2819_edge_class_counters_ignore_the_title_filter [32] PASSED 0.22s
tests.classes.test_EI_3274_update_datetime test_EI_3274_update_no_auth_returns_unauthorized [33] PASSED 0.04s
tests.classes.test_EI_3274_update_datetime test_EI_3274_update_invalid_uuid_returns_400 [34] PASSED 0.38s
tests.classes.test_EI_3274_update_datetime test_EI_3274_update_nonexistent_uuid_returns_4xx [35] PASSED 0.09s
tests.classes.test_EI_3274_update_datetime test_EI_3274_update_error_does_not_leak_uuid [36] PASSED 0.09s
tests.classes.test_EI_3323_create_class test_EI_TC_3323_positive_create_class_with_valid_data_returns_201 [37] PASSED 0.18s
tests.classes.test_EI_3386_assignment_of_deleted_class_closed test_EI_3386_negative_an_assignment_of_a_deleted_class_is_closed_to_the_student [38] PASSED 1.19s
tests.classes.test_EI_3386_assignment_of_deleted_class_closed test_EI_3386_positive_restoring_the_class_reopens_its_assignment [39] PASSED 1.24s
tests.classes.test_EI_3386_deleted_class_hidden_from_students test_EI_3386_negative_a_deleted_class_answers_the_student_like_an_unknown_one [40] PASSED 0.93s
tests.classes.test_EI_3386_deleted_class_hidden_from_students test_EI_3386_negative_joining_a_deleted_class_is_class_not_found [41] PASSED 0.68s
tests.classes.test_EI_3386_deleted_class_hidden_from_students test_EI_3386_positive_a_restored_class_is_listed_again [42] PASSED 0.87s
tests.classes.test_EI_369_teacher_create_class_semester test_EI_TC_189_positive_semester_summer_1_round_trips [43] PASSED 0.25s
tests.classes.test_EI_640_teacher_roster_reject_accept_remove_student test_EI_TC_2520_positive_accepting_a_pending_student_enrols_them [44] PASSED 0.69s
tests.classes.test_EI_640_teacher_roster_reject_accept_remove_student test_EI_TC_640_positive_rejecting_a_pending_student_marks_them_rejected [45] PASSED 0.43s
tests.classes.test_EI_640_teacher_roster_reject_accept_remove_student test_EI_TC_660_positive_removing_an_enrolled_student_revokes_their_access [46] PASSED 0.95s
tests.classes.test_EI_640_teacher_roster_reject_accept_remove_student test_EI_TC_2558_negative_removing_an_already_removed_student_is_400 [47] PASSED 0.62s
tests.classes.test_EI_640_teacher_roster_reject_accept_remove_student test_EI_TC_640_negative_removing_a_student_who_is_not_in_the_class_is_400 [48] PASSED 0.42s
tests.classes.test_EI_656_teacher_create_class_description_optional test_EI_TC_180_positive_create_without_a_description_succeeds [49] PASSED 0.18s
tests.classes.test_EI_656_teacher_create_class_description_optional test_EI_TC_181_positive_create_with_an_empty_description_succeeds [50] PASSED 0.18s
tests.classes.test_EI_809_student_pending_and_enrolled_classes test_EI_TC_489_positive_joined_class_is_pending_only [51] PASSED 0.85s
tests.classes.test_EI_809_student_pending_and_enrolled_classes test_EI_TC_492_positive_accepted_class_is_enrolled_only [52] PASSED 1.05s
tests.classes.test_EI_R16_negative_student_classes test_EI_T347_negative_join_cancel_malformed_class_code_rejected [53] PASSED 0.10s
tests.classes.test_EI_R16_negative_student_classes test_EI_T349_negative_join_cancel_long_or_unknown_class_code_rejected[excessively_long]… PASSED 0.09s
tests.classes.test_EI_R16_negative_student_classes test_EI_T349_negative_join_cancel_long_or_unknown_class_code_rejected[unknown_well_form… PASSED 0.22s
tests.classes.test_EI_R16_negative_student_classes test_EI_T348_negative_join_cancel_omitted_class_code_rejected [56] PASSED 0.05s
tests.classes.test_EI_R16_negative_student_classes test_EI_T338_negative_fetch_by_code_malformed_class_code_rejected [57] PASSED 0.08s
tests.classes.test_EI_R16_negative_student_classes test_EI_T340_negative_fetch_by_code_long_or_unknown_class_code_rejected[excessively_lon… PASSED 0.10s
tests.classes.test_EI_R16_negative_student_classes test_EI_T340_negative_fetch_by_code_long_or_unknown_class_code_rejected[unknown_well_fo… PASSED 0.08s
tests.classes.test_EI_R16_negative_student_classes test_EI_T339_negative_fetch_by_code_omitted_class_code_rejected [60] PASSED 0.04s
tests.classes.test_EI_R16_negative_student_classes test_EI_T350_negative_class_announcements_malformed_identifier_rejected [61] PASSED 0.09s
tests.classes.test_EI_R16_negative_student_classes test_EI_T352_negative_class_announcements_long_or_unknown_identifier_rejected[excessive… PASSED 0.08s
tests.classes.test_EI_R16_negative_student_classes test_EI_T352_negative_class_announcements_long_or_unknown_identifier_rejected[unknown_w… PASSED 0.09s
tests.classes.test_EI_R16_negative_student_classes test_EI_T351_negative_class_announcements_omitted_identifier_rejected [64] PASSED 0.10s
tests.classes.test_EI_R16_negative_student_classes test_EI_T341_negative_join_malformed_class_code_rejected [65] PASSED 0.11s
tests.classes.test_EI_R16_negative_student_classes test_EI_T343_negative_join_long_or_unknown_class_code_rejected[excessively_long] [66] PASSED 0.10s
tests.classes.test_EI_R16_negative_student_classes test_EI_T343_negative_join_long_or_unknown_class_code_rejected[unknown_well_formed] [67] PASSED 0.10s
tests.classes.test_EI_R16_negative_student_classes test_EI_T342_negative_join_omitted_class_code_rejected [68] PASSED 0.05s
tests.classes.test_EI_R16_negative_student_classes test_EI_T344_negative_leave_malformed_class_code_rejected [69] PASSED 0.09s
tests.classes.test_EI_R16_negative_student_classes test_EI_T346_negative_leave_long_or_unknown_class_code_rejected[excessively_long] [70] PASSED 0.09s
tests.classes.test_EI_R16_negative_student_classes test_EI_T346_negative_leave_long_or_unknown_class_code_rejected[unknown_well_formed] [71] PASSED 0.09s
tests.classes.test_EI_R16_negative_student_classes test_EI_T345_negative_leave_omitted_class_code_rejected [72] PASSED 0.04s
tests.classes.test_EI_R35_edge_student_classes test_EI_T691_edge_out_of_range_page_num_on_all_fetch[page_num=-1] [73] PASSED 0.08s
tests.classes.test_EI_R35_edge_student_classes test_EI_T691_edge_out_of_range_page_num_on_all_fetch[page_num=0] [74] PASSED 0.26s
tests.classes.test_EI_R35_edge_student_classes test_EI_T691_edge_out_of_range_page_num_on_all_fetch[page_num=999999] [75] PASSED 0.43s
tests.classes.test_EI_R35_edge_student_classes test_EI_T692_edge_expired_bearer_rejected_on_all_fetch [76] PASSED 0.05s
tests.classes.test_EI_R35_edge_student_classes test_EI_T693_edge_malformed_class_code_rejected_on_find [77] PASSED 0.09s
tests.classes.test_EI_R35_edge_student_classes test_EI_T694_edge_unknown_class_code_not_found_on_find [78] PASSED 0.08s
tests.classes.test_EI_R35_edge_student_classes test_EI_T695_edge_malformed_class_code_rejected_on_join [79] PASSED 0.09s
tests.classes.test_EI_R35_edge_student_classes test_EI_T696_edge_unknown_class_code_not_found_on_join [80] PASSED 0.09s
tests.classes.test_EI_R35_edge_student_classes test_EI_T697_edge_expired_bearer_rejected_on_join [81] PASSED 0.04s
tests.classes.test_EI_R35_edge_student_classes test_EI_T698_edge_malformed_class_code_rejected_on_leave [82] PASSED 0.09s
tests.classes.test_EI_R35_edge_student_classes test_EI_T699_edge_unknown_class_code_not_found_on_leave [83] PASSED 0.10s
tests.classes.test_EI_R35_edge_student_classes test_EI_T700_edge_expired_bearer_rejected_on_leave [84] PASSED 0.21s
tests.classes.test_EI_R35_edge_student_classes test_EI_T701_edge_malformed_class_code_rejected_on_join_cancel [85] PASSED 0.09s
tests.classes.test_EI_R35_edge_student_classes test_EI_T702_edge_unknown_class_code_not_found_on_join_cancel [86] PASSED 0.08s
tests.classes.test_EI_R35_edge_student_classes test_EI_T703_edge_expired_bearer_rejected_on_join_cancel [87] PASSED 0.05s
tests.classes.test_EI_R35_edge_student_classes test_EI_T704_edge_malformed_class_identifier_rejected_on_messages [88] PASSED 0.08s
tests.classes.test_EI_R35_edge_student_classes test_EI_T705_edge_unknown_class_identifier_not_found_on_messages [89] PASSED 0.10s
tests.classes.test_EI_R8_negative_teacher_classes test_EI_T194_negative_accept_student_malformed_student_id_rejected [90] PASSED 0.62s
tests.classes.test_EI_R8_negative_teacher_classes test_EI_T196_negative_accept_student_long_or_unknown_id_rejected[excessively_long] [91] PASSED 0.25s
tests.classes.test_EI_R8_negative_teacher_classes test_EI_T196_negative_accept_student_long_or_unknown_id_rejected[unknown_well_formed] [92] PASSED 0.11s
tests.classes.test_EI_R8_negative_teacher_classes test_EI_T195_negative_accept_student_omitted_student_id_rejected [93] PASSED 0.05s
tests.classes.test_EI_R8_negative_teacher_classes test_EI_T183_negative_photo_add_malformed_class_id_rejected [94] PASSED 0.10s
tests.classes.test_EI_R8_negative_teacher_classes test_EI_T182_negative_photo_add_empty_or_oversized_file_rejected [95] PASSED 0.88s
tests.classes.test_EI_R8_negative_teacher_classes test_EI_T181_negative_photo_add_unsupported_file_type_rejected [96] PASSED 0.09s
tests.classes.test_EI_R8_negative_teacher_classes test_EI_T180_negative_photo_add_no_file_attached_rejected [97] PASSED 0.08s
tests.classes.test_EI_R8_negative_teacher_classes test_EI_T203_negative_leave_approved_malformed_class_id_rejected [98] PASSED 0.08s
tests.classes.test_EI_R8_negative_teacher_classes test_EI_T202_negative_leave_approved_non_boolean_is_granted_rejected [99] PASSED 0.09s
tests.classes.test_EI_R8_negative_teacher_classes test_EI_T201_negative_leave_approved_wrong_type_is_granted_rejected [100] PASSED 0.08s
tests.classes.test_EI_R8_negative_teacher_classes test_EI_T200_negative_leave_approved_omitted_is_granted_rejected [101] PASSED 0.08s
tests.classes.test_EI_R8_negative_teacher_classes test_EI_T152_negative_create_class_unsupported_semester_rejected [102] PASSED 0.10s
tests.classes.test_EI_R8_negative_teacher_classes test_EI_T151_negative_create_class_wrong_type_schedules_rejected [103] PASSED 0.24s
tests.classes.test_EI_R8_negative_teacher_classes test_EI_T150_negative_create_class_omitted_title_rejected [104] PASSED 0.09s
tests.classes.test_EI_R8_negative_teacher_classes_delete_fetch test_EI_T164_negative_delete_announcement_malformed_message_id_rejected [105] PASSED 0.08s
tests.classes.test_EI_R8_negative_teacher_classes_delete_fetch test_EI_T166_negative_delete_announcement_long_or_unknown_message_id_rejected[excessive… PASSED 0.08s
tests.classes.test_EI_R8_negative_teacher_classes_delete_fetch test_EI_T166_negative_delete_announcement_long_or_unknown_message_id_rejected[unknown_w… PASSED 0.08s
tests.classes.test_EI_R8_negative_teacher_classes_delete_fetch test_EI_T165_negative_delete_announcement_omitted_message_id_rejected [108] PASSED 0.04s
tests.classes.test_EI_R8_negative_teacher_classes_delete_fetch test_EI_T188_negative_photo_delete_malformed_class_id_rejected [109] PASSED 0.08s
tests.classes.test_EI_R8_negative_teacher_classes_delete_fetch test_EI_T190_negative_photo_delete_long_or_unknown_class_id_rejected[excessively_long] … PASSED 0.09s
tests.classes.test_EI_R8_negative_teacher_classes_delete_fetch test_EI_T190_negative_photo_delete_long_or_unknown_class_id_rejected[unknown_well_forme… PASSED 0.08s
tests.classes.test_EI_R8_negative_teacher_classes_delete_fetch test_EI_T189_negative_photo_delete_omitted_class_id_rejected [112] PASSED 0.11s
tests.classes.test_EI_R8_negative_teacher_classes_delete_fetch test_EI_T177_negative_class_delete_malformed_class_id_rejected [113] PASSED 0.09s
tests.classes.test_EI_R8_negative_teacher_classes_delete_fetch test_EI_T179_negative_class_delete_long_or_unknown_class_id_rejected[excessively_long] … PASSED 0.09s
tests.classes.test_EI_R8_negative_teacher_classes_delete_fetch test_EI_T179_negative_class_delete_long_or_unknown_class_id_rejected[unknown_well_forme… PASSED 0.09s
tests.classes.test_EI_R8_negative_teacher_classes_delete_fetch test_EI_T178_negative_class_delete_omitted_class_id_rejected [116] PASSED 0.04s
tests.classes.test_EI_R8_negative_teacher_classes_delete_fetch test_EI_T154_negative_find_by_code_malformed_code_rejected [117] PASSED 0.09s
tests.classes.test_EI_R8_negative_teacher_classes_delete_fetch test_EI_T156_negative_find_by_code_long_or_unknown_code_rejected[excessively_long] [118] PASSED 0.10s
tests.classes.test_EI_R8_negative_teacher_classes_delete_fetch test_EI_T156_negative_find_by_code_long_or_unknown_code_rejected[unknown_well_formed] [… PASSED 0.12s
tests.classes.test_EI_R8_negative_teacher_classes_delete_fetch test_EI_T155_negative_find_by_code_omitted_code_rejected [120] PASSED 0.04s
tests.classes.test_EI_R8_negative_teacher_classes_delete_fetch test_EI_T167_negative_gradebook_malformed_code_rejected [121] PASSED 0.10s
tests.classes.test_EI_R8_negative_teacher_classes_delete_fetch test_EI_T169_negative_gradebook_long_or_unknown_code_rejected[excessively_long] [122] PASSED 0.09s
tests.classes.test_EI_R8_negative_teacher_classes_delete_fetch test_EI_T169_negative_gradebook_long_or_unknown_code_rejected[unknown_well_formed] [123] PASSED 0.08s
tests.classes.test_EI_R8_negative_teacher_classes_delete_fetch test_EI_T168_negative_gradebook_omitted_code_rejected [124] PASSED 0.05s
tests.classes.test_EI_R8_negative_teacher_classes_delete_fetch test_EI_T170_negative_roster_malformed_class_id_rejected [125] PASSED 0.13s
tests.classes.test_EI_R8_negative_teacher_classes_delete_fetch test_EI_T172_negative_roster_long_or_unknown_class_id_rejected [126] PASSED 0.16s
tests.classes.test_EI_R8_negative_teacher_classes_part3 test_EI_T171_negative_roster_omitted_class_id_rejected [127] PASSED 0.04s
tests.classes.test_EI_R8_negative_teacher_classes_part3 test_EI_T153_negative_pagination_non_numeric_rejected[page_num] [128] PASSED 0.05s
tests.classes.test_EI_R8_negative_teacher_classes_part3 test_EI_T153_negative_pagination_non_numeric_rejected[page_size] [129] PASSED 0.05s
tests.classes.test_EI_R8_negative_teacher_classes_part3 test_EI_T153_negative_pagination_negative_rejected_not_a_server_error[page_num] [130] PASSED 0.18s
tests.classes.test_EI_R8_negative_teacher_classes_part3 test_EI_T153_negative_pagination_negative_rejected_not_a_server_error[page_size] [131] PASSED 0.05s
tests.classes.test_EI_R8_negative_teacher_classes_part3 test_EI_T153_negative_pagination_out_of_range_values_are_bounded [132] PASSED 0.26s
tests.classes.test_EI_R8_negative_teacher_classes_part3 test_EI_T157_negative_messages_fetch_malformed_class_id_rejected [133] PASSED 0.05s
tests.classes.test_EI_R8_negative_teacher_classes_part3 test_EI_T159_negative_messages_fetch_long_or_unknown_class_id_rejected[excessively_long… PASSED 0.20s
tests.classes.test_EI_R8_negative_teacher_classes_part3 test_EI_T159_negative_messages_fetch_long_or_unknown_class_id_rejected[unknown_well_for… PASSED 0.06s
tests.classes.test_EI_R8_negative_teacher_classes_part3 test_EI_T158_negative_messages_fetch_omitted_class_id_rejected [136] PASSED 0.01s
tests.classes.test_EI_R8_negative_teacher_classes_part3 test_EI_T204_negative_class_assignments_malformed_class_id_rejected [137] PASSED 0.06s
tests.classes.test_EI_R8_negative_teacher_classes_part3 test_EI_T206_negative_class_assignments_long_or_unknown_class_id_rejected[excessively_l… PASSED 0.07s
tests.classes.test_EI_R8_negative_teacher_classes_part3 test_EI_T206_negative_class_assignments_long_or_unknown_class_id_rejected[unknown_well_… PASSED 0.05s
tests.classes.test_EI_R8_negative_teacher_classes_part3 test_EI_T205_negative_class_assignments_omitted_class_id_rejected [140] PASSED 0.01s
tests.classes.test_EI_R8_negative_teacher_classes_part3 test_EI_T163_negative_post_message_malformed_class_id_rejected [141] PASSED 0.05s
tests.classes.test_EI_R8_negative_teacher_classes_part3 test_EI_T162_negative_post_message_empty_or_over_length_rejected[empty] [142] PASSED 0.32s
tests.classes.test_EI_R8_negative_teacher_classes_part3 test_EI_T162_negative_post_message_empty_or_over_length_rejected[over_length] [143] PASSED 0.10s
tests.classes.test_EI_R8_negative_teacher_classes_part3 test_EI_T161_negative_post_message_wrong_data_type_rejected[int] [144] PASSED 0.10s
tests.classes.test_EI_R8_negative_teacher_classes_part3 test_EI_T161_negative_post_message_wrong_data_type_rejected[list] [145] PASSED 0.10s
tests.classes.test_EI_R8_negative_teacher_classes_part3 test_EI_T161_negative_post_message_wrong_data_type_rejected[null] [146] PASSED 0.10s
tests.classes.test_EI_R8_negative_teacher_classes_part3 test_EI_T160_negative_post_message_content_omitted_rejected [147] PASSED 0.10s
tests.classes.test_EI_R8_negative_teacher_classes_part3 test_EI_T197_negative_remove_student_malformed_student_id_rejected [148] PASSED 0.18s
tests.classes.test_EI_R8_negative_teacher_classes_part3 test_EI_T199_negative_remove_student_long_or_unknown_student_id_rejected[excessively_lo… PASSED 0.05s
tests.classes.test_EI_R8_negative_teacher_classes_part3 test_EI_T199_negative_remove_student_long_or_unknown_student_id_rejected[unknown_well_f… PASSED 0.05s
tests.classes.test_EI_R8_negative_teacher_classes_part3 test_EI_T198_negative_remove_student_omitted_student_id_rejected [151] PASSED 0.01s
tests.classes.test_EI_R8_negative_teacher_classes_part3 test_EI_T191_negative_restore_malformed_class_id_rejected [152] PASSED 0.05s
tests.classes.test_EI_R8_negative_teacher_classes_part3 test_EI_T193_negative_restore_long_or_unknown_class_id_rejected[excessively_long] [153] PASSED 0.05s
tests.classes.test_EI_R8_negative_teacher_classes_part3 test_EI_T193_negative_restore_long_or_unknown_class_id_rejected[unknown_well_formed] [154] PASSED 0.05s
tests.classes.test_EI_R8_negative_teacher_classes_part3 test_EI_T192_negative_restore_omitted_class_id_rejected [155] PASSED 0.01s
tests.classes.test_EI_R8_negative_teacher_classes_part3 test_EI_T187_negative_photo_update_malformed_class_id_rejected [156] PASSED 0.09s
tests.classes.test_EI_R8_negative_teacher_classes_part3 test_EI_T186_negative_photo_update_empty_file_rejected [157] PASSED 0.33s
tests.classes.test_EI_R8_negative_teacher_classes_part3 test_EI_T186_negative_photo_update_oversized_file_rejected [158] PASSED 0.74s
tests.classes.test_EI_R8_negative_teacher_classes_part3 test_EI_T185_negative_photo_update_unsupported_type_rejected [159] PASSED 0.25s
tests.classes.test_EI_R8_negative_teacher_classes_part3 test_EI_T184_negative_photo_update_no_file_rejected [160] PASSED 0.23s
tests.classes.test_EI_R8_negative_teacher_classes_part3 test_EI_T176_negative_update_malformed_class_id_rejected[malformed] [161] PASSED 0.04s
tests.classes.test_EI_R8_negative_teacher_classes_part3 test_EI_T176_negative_update_malformed_class_id_rejected[excessively_long] [162] PASSED 0.05s
tests.classes.test_EI_R8_negative_teacher_classes_part3 test_EI_T175_negative_update_unsupported_semester_rejected [163] PASSED 0.05s
tests.classes.test_EI_R8_negative_teacher_classes_part3 test_EI_T174_negative_update_section_wrong_data_type_rejected[int] [164] PASSED 0.05s
tests.classes.test_EI_R8_negative_teacher_classes_part3 test_EI_T174_negative_update_section_wrong_data_type_rejected[list] [165] PASSED 0.05s
tests.classes.test_EI_R8_negative_teacher_classes_part3 test_EI_T173_negative_update_title_omitted_rejected [166] PASSED 0.14s
tests.classes.test_EI_SEC_003_class_list_own_roster_entry test_EI_SEC_003_the_class_list_shows_a_student_only_their_own_roster_entry [167] PASSED 0.92s
tests.classes.test_EI_SEC_003_class_list_own_roster_entry test_EI_SEC_003_the_other_student_also_sees_only_their_own_entry [168] PASSED 0.64s
tests.classes.test_EI_T472_missing_title_create_class test_EI_T472_missing_title_rejected [169] PASSED 0.25s
tests.classes.test_EI_T473_duplicate_class_submission test_EI_T473_duplicate_submission_creates_one_class[back_to_back] [170] PASSED 0.52s
tests.classes.test_EI_T473_duplicate_class_submission test_EI_T473_duplicate_submission_creates_one_class[concurrent] [171] PASSED 0.49s
tests.classes.test_EI_T474_expired_token_create_class test_EI_T474_expired_bearer_rejected_on_create_class [172] PASSED 0.24s
tests.classes.test_EI_T478_malformed_class_code_find test_EI_T478_malformed_class_code_rejected_on_find[not_an_object_id] [173] PASSED 0.08s
tests.classes.test_EI_T478_malformed_class_code_find test_EI_T478_malformed_class_code_rejected_on_find[nosql_ne_object] [174] PASSED 0.08s
tests.classes.test_EI_T478_malformed_class_code_find test_EI_T478_malformed_class_code_rejected_on_find[nosql_gt_object] [175] PASSED 0.09s
tests.classes.test_EI_T478_malformed_class_code_find test_EI_T478_malformed_class_code_rejected_on_find[nosql_regex_object] [176] PASSED 0.08s
tests.classes.test_EI_T478_malformed_class_code_find test_EI_T478_malformed_class_code_rejected_on_find[nosql_ne_bare] [177] PASSED 0.08s
tests.classes.test_EI_T478_malformed_class_code_find test_EI_T478_malformed_class_code_rejected_on_find[nosql_where_bare] [178] PASSED 0.08s
tests.classes.test_EI_T478_malformed_class_code_find test_EI_T478_malformed_class_code_rejected_on_find[nosql_ne_bracket] [179] PASSED 0.08s
tests.classes.test_EI_T480_malformed_class_uuid_fetch_messages test_EI_T480_malformed_class_uuid_rejected [180] PASSED 0.08s
tests.classes.test_EI_T480_malformed_class_uuid_fetch_messages test_EI_T480_nosql_operator_class_uuid_rejected[ne_operator_json] [181] PASSED 0.08s
tests.classes.test_EI_T480_malformed_class_uuid_fetch_messages test_EI_T480_nosql_operator_class_uuid_rejected[gt_operator_json] [182] PASSED 0.09s
tests.classes.test_EI_T480_malformed_class_uuid_fetch_messages test_EI_T480_nosql_operator_class_uuid_rejected[regex_operator_json] [183] PASSED 0.09s
tests.classes.test_EI_T480_malformed_class_uuid_fetch_messages test_EI_T480_nosql_operator_class_uuid_rejected[bare_ne_operator] [184] PASSED 0.09s
tests.classes.test_EI_T480_malformed_class_uuid_fetch_messages test_EI_T480_nosql_operator_class_uuid_rejected[where_operator] [185] PASSED 0.12s
tests.classes.test_EI_T480_malformed_class_uuid_fetch_messages test_EI_T480_nosql_operator_class_uuid_rejected[bracket_ne_operator] [186] PASSED 0.09s
tests.classes.test_EI_T482_missing_content_create_announcement test_EI_T482_missing_content_rejected [187] PASSED 0.56s
tests.classes.test_EI_T484_expired_token_create_announcement test_EI_T484_expired_bearer_rejected_on_create_announcement [188] PASSED 0.57s
tests.classes.test_EI_T486_malformed_class_uuid_delete_announcement test_EI_T486_malformed_class_uuid_rejected [189] PASSED 0.10s
tests.classes.test_EI_T486_malformed_class_uuid_delete_announcement test_EI_T486_nosql_operator_class_uuid_rejected[ne_operator_json] [190] PASSED 0.10s
tests.classes.test_EI_T486_malformed_class_uuid_delete_announcement test_EI_T486_nosql_operator_class_uuid_rejected[gt_operator_json] [191] PASSED 0.08s
tests.classes.test_EI_T486_malformed_class_uuid_delete_announcement test_EI_T486_nosql_operator_class_uuid_rejected[regex_operator_json] [192] PASSED 0.09s
tests.classes.test_EI_T486_malformed_class_uuid_delete_announcement test_EI_T486_nosql_operator_class_uuid_rejected[bare_ne_operator] [193] PASSED 0.09s
tests.classes.test_EI_T486_malformed_class_uuid_delete_announcement test_EI_T486_nosql_operator_class_uuid_rejected[where_operator] [194] PASSED 0.09s
tests.classes.test_EI_T486_malformed_class_uuid_delete_announcement test_EI_T486_nosql_operator_class_uuid_rejected[bracket_ne_operator] [195] PASSED 0.08s
tests.classes.test_EI_T489_malformed_class_code_gradebook test_EI_T489_malformed_class_code_rejected_on_gradebook[not_an_object_id] [196] PASSED 0.08s
tests.classes.test_EI_T489_malformed_class_code_gradebook test_EI_T489_malformed_class_code_rejected_on_gradebook[nosql_ne_object] [197] PASSED 0.08s
tests.classes.test_EI_T489_malformed_class_code_gradebook test_EI_T489_malformed_class_code_rejected_on_gradebook[nosql_gt_object] [198] PASSED 0.09s
tests.classes.test_EI_T489_malformed_class_code_gradebook test_EI_T489_malformed_class_code_rejected_on_gradebook[nosql_regex_object] [199] PASSED 0.08s
tests.classes.test_EI_T489_malformed_class_code_gradebook test_EI_T489_malformed_class_code_rejected_on_gradebook[nosql_ne_bare] [200] PASSED 0.08s
tests.classes.test_EI_T489_malformed_class_code_gradebook test_EI_T489_malformed_class_code_rejected_on_gradebook[nosql_where_bare] [201] PASSED 0.09s
tests.classes.test_EI_T489_malformed_class_code_gradebook test_EI_T489_malformed_class_code_rejected_on_gradebook[nosql_ne_bracket] [202] PASSED 0.09s
tests.classes.test_EI_T491_malformed_class_uuid_fetch_roster test_EI_T491_malformed_class_uuid_rejected [203] PASSED 0.08s
tests.classes.test_EI_T491_malformed_class_uuid_fetch_roster test_EI_T491_nosql_operator_class_uuid_rejected[ne_operator_json] [204] PASSED 0.08s
tests.classes.test_EI_T491_malformed_class_uuid_fetch_roster test_EI_T491_nosql_operator_class_uuid_rejected[gt_operator_json] [205] PASSED 0.08s
tests.classes.test_EI_T491_malformed_class_uuid_fetch_roster test_EI_T491_nosql_operator_class_uuid_rejected[regex_operator_json] [206] PASSED 0.08s
tests.classes.test_EI_T491_malformed_class_uuid_fetch_roster test_EI_T491_nosql_operator_class_uuid_rejected[bare_ne_operator] [207] PASSED 0.08s
tests.classes.test_EI_T491_malformed_class_uuid_fetch_roster test_EI_T491_nosql_operator_class_uuid_rejected[where_operator] [208] PASSED 0.08s
tests.classes.test_EI_T491_malformed_class_uuid_fetch_roster test_EI_T491_nosql_operator_class_uuid_rejected[bracket_ne_operator] [209] PASSED 0.08s
tests.classes.test_EI_T493_missing_title_update_class test_EI_T493_missing_title_rejected [210] PASSED 0.47s
tests.classes.test_EI_T497_malformed_class_uuid_delete_class test_EI_T497_malformed_class_uuid_rejected [211] PASSED 0.14s
tests.classes.test_EI_T497_malformed_class_uuid_delete_class test_EI_T497_nosql_operator_class_uuid_rejected[ne_operator_json] [212] PASSED 0.15s
tests.classes.test_EI_T497_malformed_class_uuid_delete_class test_EI_T497_nosql_operator_class_uuid_rejected[gt_operator_json] [213] PASSED 0.15s
tests.classes.test_EI_T497_malformed_class_uuid_delete_class test_EI_T497_nosql_operator_class_uuid_rejected[regex_operator_json] [214] PASSED 0.14s
tests.classes.test_EI_T497_malformed_class_uuid_delete_class test_EI_T497_nosql_operator_class_uuid_rejected[bare_ne_operator] [215] PASSED 0.12s
tests.classes.test_EI_T497_malformed_class_uuid_delete_class test_EI_T497_nosql_operator_class_uuid_rejected[where_operator] [216] PASSED 0.13s
tests.classes.test_EI_T497_malformed_class_uuid_delete_class test_EI_T497_nosql_operator_class_uuid_rejected[bracket_ne_operator] [217] PASSED 0.13s
tests.classes.test_EI_T500_missing_file_upload_cover_photo test_EI_T500_missing_file_rejected [218] PASSED 0.60s
tests.classes.test_EI_T501_interrupted_cover_photo_upload test_EI_T501_dropped_upload_keeps_previous_asset_reference [219] PASSED 3.56s
tests.classes.test_EI_T501_interrupted_cover_photo_upload test_EI_T501_retry_after_dropped_upload_succeeds_without_duplicate [220] PASSED 3.75s
tests.classes.test_EI_T504_missing_file_update_cover_photo test_EI_T504_missing_file_rejected [221] PASSED 0.71s
tests.classes.test_EI_T505_interrupted_cover_photo_update test_EI_T505_dropped_update_keeps_previous_cover [222] PASSED 3.74s
tests.classes.test_EI_T505_interrupted_cover_photo_update test_EI_T505_retry_after_dropped_update_succeeds_without_duplicate [223] PASSED 3.90s
tests.classes.test_EI_T508_malformed_class_uuid_delete_cover_photo test_EI_T508_malformed_class_uuid_rejected [224] PASSED 0.22s
tests.classes.test_EI_T508_malformed_class_uuid_delete_cover_photo test_EI_T508_nosql_operator_class_uuid_rejected[ne_operator_json] [225] PASSED 0.23s
tests.classes.test_EI_T508_malformed_class_uuid_delete_cover_photo test_EI_T508_nosql_operator_class_uuid_rejected[gt_operator_json] [226] PASSED 0.20s
tests.classes.test_EI_T508_malformed_class_uuid_delete_cover_photo test_EI_T508_nosql_operator_class_uuid_rejected[regex_operator_json] [227] PASSED 0.19s
tests.classes.test_EI_T508_malformed_class_uuid_delete_cover_photo test_EI_T508_nosql_operator_class_uuid_rejected[bare_ne_operator] [228] PASSED 0.21s
tests.classes.test_EI_T508_malformed_class_uuid_delete_cover_photo test_EI_T508_nosql_operator_class_uuid_rejected[where_operator] [229] PASSED 0.24s
tests.classes.test_EI_T508_malformed_class_uuid_delete_cover_photo test_EI_T508_nosql_operator_class_uuid_rejected[bracket_ne_operator] [230] PASSED 0.19s
tests.classes.test_EI_T511_malformed_class_uuid_restore_class test_EI_T511_malformed_class_uuid_rejected [231] PASSED 0.10s
tests.classes.test_EI_T511_malformed_class_uuid_restore_class test_EI_T511_nosql_operator_class_uuid_rejected[ne_operator_json] [232] PASSED 0.09s
tests.classes.test_EI_T511_malformed_class_uuid_restore_class test_EI_T511_nosql_operator_class_uuid_rejected[gt_operator_json] [233] PASSED 0.08s
tests.classes.test_EI_T511_malformed_class_uuid_restore_class test_EI_T511_nosql_operator_class_uuid_rejected[regex_operator_json] [234] PASSED 0.10s
tests.classes.test_EI_T511_malformed_class_uuid_restore_class test_EI_T511_nosql_operator_class_uuid_rejected[bare_ne_operator] [235] PASSED 0.08s
tests.classes.test_EI_T511_malformed_class_uuid_restore_class test_EI_T511_nosql_operator_class_uuid_rejected[where_operator] [236] PASSED 0.08s
tests.classes.test_EI_T511_malformed_class_uuid_restore_class test_EI_T511_nosql_operator_class_uuid_rejected[bracket_ne_operator] [237] PASSED 0.08s
tests.classes.test_EI_T514_malformed_class_uuid_accept_join_request test_EI_T514_malformed_class_uuid_rejected [238] PASSED 0.08s
tests.classes.test_EI_T514_malformed_class_uuid_accept_join_request test_EI_T514_nosql_operator_class_uuid_rejected[ne_operator_json] [239] PASSED 0.08s
tests.classes.test_EI_T514_malformed_class_uuid_accept_join_request test_EI_T514_nosql_operator_class_uuid_rejected[gt_operator_json] [240] PASSED 0.09s
tests.classes.test_EI_T514_malformed_class_uuid_accept_join_request test_EI_T514_nosql_operator_class_uuid_rejected[regex_operator_json] [241] PASSED 0.09s
tests.classes.test_EI_T514_malformed_class_uuid_accept_join_request test_EI_T514_nosql_operator_class_uuid_rejected[bare_ne_operator] [242] PASSED 0.08s
tests.classes.test_EI_T514_malformed_class_uuid_accept_join_request test_EI_T514_nosql_operator_class_uuid_rejected[where_operator] [243] PASSED 0.08s
tests.classes.test_EI_T514_malformed_class_uuid_accept_join_request test_EI_T514_nosql_operator_class_uuid_rejected[bracket_ne_operator] [244] PASSED 0.08s
tests.classes.test_EI_T516_expired_token_accept_join_request test_EI_T516_expired_bearer_rejected_on_accept_join_request [245] PASSED 0.68s
tests.classes.test_EI_T517_malformed_class_uuid_remove_student test_EI_T517_malformed_class_uuid_rejected [246] PASSED 0.09s
tests.classes.test_EI_T517_malformed_class_uuid_remove_student test_EI_T517_nosql_operator_class_uuid_rejected[ne_operator_json] [247] PASSED 0.09s
tests.classes.test_EI_T517_malformed_class_uuid_remove_student test_EI_T517_nosql_operator_class_uuid_rejected[gt_operator_json] [248] PASSED 0.09s
tests.classes.test_EI_T517_malformed_class_uuid_remove_student test_EI_T517_nosql_operator_class_uuid_rejected[regex_operator_json] [249] PASSED 0.09s
tests.classes.test_EI_T517_malformed_class_uuid_remove_student test_EI_T517_nosql_operator_class_uuid_rejected[bare_ne_operator] [250] PASSED 0.08s
tests.classes.test_EI_T517_malformed_class_uuid_remove_student test_EI_T517_nosql_operator_class_uuid_rejected[where_operator] [251] PASSED 0.08s
tests.classes.test_EI_T517_malformed_class_uuid_remove_student test_EI_T517_nosql_operator_class_uuid_rejected[bracket_ne_operator] [252] PASSED 0.08s
tests.classes.test_EI_T520_missing_is_granted_accept_leave_request test_EI_T520_missing_is_granted_rejected [253] PASSED 0.96s
tests.classes.test_EI_T522_expired_token_accept_leave_request test_EI_T522_expired_bearer_rejected_on_accept_leave_request [254] PASSED 0.82s
tests.classes.test_EI_T524_malformed_class_uuid_fetch_assignments test_EI_T524_malformed_class_uuid_rejected [255] PASSED 0.08s
tests.classes.test_EI_T524_malformed_class_uuid_fetch_assignments test_EI_T524_nosql_operator_class_uuid_rejected[ne_operator_json] [256] PASSED 0.09s
tests.classes.test_EI_T524_malformed_class_uuid_fetch_assignments test_EI_T524_nosql_operator_class_uuid_rejected[gt_operator_json] [257] PASSED 0.11s
tests.classes.test_EI_T524_malformed_class_uuid_fetch_assignments test_EI_T524_nosql_operator_class_uuid_rejected[regex_operator_json] [258] PASSED 0.08s
tests.classes.test_EI_T524_malformed_class_uuid_fetch_assignments test_EI_T524_nosql_operator_class_uuid_rejected[bare_ne_operator] [259] PASSED 0.08s
tests.classes.test_EI_T524_malformed_class_uuid_fetch_assignments test_EI_T524_nosql_operator_class_uuid_rejected[where_operator] [260] PASSED 0.09s
tests.classes.test_EI_T524_malformed_class_uuid_fetch_assignments test_EI_T524_nosql_operator_class_uuid_rejected[bracket_ne_operator] [261] PASSED 0.08s
tests.classes.test_student_class_reads test_all_fetch_returns_enrolled_classes [262] PASSED 1.05s
tests.classes.test_student_class_reads test_find_returns_the_enrolled_class [263] PASSED 0.09s
tests.classes.test_student_class_reads test_messages_returns_message_board [264] PASSED 0.24s
tests.classes.test_student_enrollment_lifecycle test_join_then_cancel [265] PASSED 0.48s
tests.classes.test_student_enrollment_lifecycle test_join_accept_then_leave [266] PASSED 0.55s
tests.classes.test_student_enrollment_lifecycle test_leave_without_membership_returns_400 [267] PASSED 0.37s
tests.classes.test_teacher_class_gradebook_roster test_gradebook_returns_200_with_class_and_students [268] PASSED 0.39s
tests.classes.test_teacher_class_gradebook_roster test_roster_returns_200_with_class_roster_list [269] PASSED 0.08s
tests.classes.test_teacher_class_gradebook_roster test_gradebook_no_auth_returns_401 [270] PASSED 0.04s
tests.classes.test_teacher_class_gradebook_roster test_roster_no_auth_returns_401 [271] PASSED 0.04s
tests.classes.test_teacher_class_message_lifecycle test_message_create_then_delete [272] PASSED 0.45s
tests.classes.test_teacher_class_message_lifecycle test_message_create_no_auth_returns_401 [273] PASSED 0.04s
tests.classes.test_teacher_class_message_lifecycle test_message_delete_no_auth_returns_401 [274] PASSED 0.04s
tests.classes.test_teacher_class_messages_find_assignments test_messages_returns_200_with_messages [275] PASSED 0.38s
tests.classes.test_teacher_class_messages_find_assignments test_all_fetch_returns_200_with_paginated_classes [276] PASSED 0.12s
tests.classes.test_teacher_class_messages_find_assignments test_find_returns_200_with_class [277] PASSED 0.10s
tests.classes.test_teacher_class_messages_find_assignments test_class_assignments_returns_200_with_assignments [278] PASSED 0.09s
tests.classes.test_teacher_class_messages_find_assignments test_messages_no_auth_returns_401 [279] PASSED 0.05s
tests.classes.test_teacher_class_messages_find_assignments test_find_no_auth_returns_401 [280] PASSED 0.04s
tests.classes.test_teacher_class_messages_find_assignments test_class_assignments_no_auth_returns_401 [281] PASSED 0.06s
tests.classes.test_teacher_class_photo_lifecycle test_class_photo_add_update_delete_lifecycle [282] PASSED 0.68s
tests.classes.test_teacher_class_photo_lifecycle test_class_photo_add_when_one_exists_returns_400 [283] PASSED 0.61s
tests.classes.test_teacher_class_photo_lifecycle test_class_photo_add_unsupported_type_returns_415 [284] PASSED 0.38s
tests.classes.test_teacher_class_photo_lifecycle test_class_photo_add_no_auth_returns_401 [285] PASSED 0.40s
tests.classes.test_teacher_class_photo_lifecycle test_class_photo_delete_no_auth_returns_401 [286] PASSED 0.38s
tests.classes.test_teacher_class_update_details test_update_class_details_persists_new_title [287] PASSED 0.52s
tests.classes.test_teacher_membership_mutations test_class_soft_delete_then_restore [288] PASSED 1.29s
tests.classes.test_teacher_membership_mutations test_remove_enrolled_student [289] PASSED 0.62s
tests.classes.test_teacher_membership_mutations test_approve_student_leave [290] PASSED 0.64s
tests.classes.test_zephyr_edge_student_classes_pagination test_EI_T337_a_non_numeric_page_is_rejected [291] PASSED 0.14s
tests.classes.test_zephyr_edge_student_classes_pagination test_EI_T337_a_non_numeric_page_size_is_rejected [292] PASSED 0.08s
tests.classes.test_zephyr_edge_student_classes_pagination test_EI_T337_a_negative_page_is_rejected_not_a_server_error [293] PASSED 0.11s
tests.classes.test_zephyr_edge_student_classes_pagination test_EI_T337_a_negative_page_size_is_rejected_not_a_server_error [294] PASSED 0.29s
tests.classes.test_zephyr_edge_student_classes_pagination test_EI_T337_the_refusal_discloses_no_storage_internals [295] PASSED 0.36s
tests.classes.test_zephyr_edge_student_classes_pagination test_EI_T337_an_excessive_page_size_returns_no_unbounded_result_set [296] PASSED 0.81s
tests.classes.test_zephyr_edge_student_classes_pagination test_EI_T337_a_zero_page_resolves_to_the_first_page [297] PASSED 0.20s
tests.classes.test_zephyr_edge_student_classes_pagination test_EI_T337_a_zero_page_size_resolves_to_the_default [298] PASSED 0.51s
tests.classes.test_zephyr_edge_student_classes_pagination test_EI_T337_valid_pagination_is_honoured [299] PASSED 0.86s

Suite: perf

Class Test Status Duration
tests.perf.test_EI_3315_teacher_login_concurrent_load test_login_handles_concurrent_requests[concurrency100] [1]
Load tests are opt-in only (set RUN_LOAD_TESTS=1) -- see the module docstring: this repo's Auth0 policy forbids hammering the real tenant with concurrent logins during the default gating run.
SKIPPED 0.00s
tests.perf.test_EI_3315_teacher_login_concurrent_load test_login_handles_concurrent_requests[concurrency500] [2]
Load tests are opt-in only (set RUN_LOAD_TESTS=1) -- see the module docstring: this repo's Auth0 policy forbids hammering the real tenant with concurrent logins during the default gating run.
SKIPPED 0.00s
tests.perf.test_EI_3315_teacher_login_concurrent_load test_login_handles_concurrent_requests[concurrency1000] [3]
Load tests are opt-in only (set RUN_LOAD_TESTS=1) -- see the module docstring: this repo's Auth0 policy forbids hammering the real tenant with concurrent logins during the default gating run.
SKIPPED 0.00s

Suite: theme

Class Test Status Duration
tests.theme.test_375_teacher_theme_partial_update test_375_positive_a_partial_font_update_keeps_the_rest_of_the_theme [1] PASSED 0.83s
tests.theme.test_375_teacher_theme_partial_update test_375_negative_a_missing_colour_field_is_named_in_the_error [2] PASSED 0.35s
tests.theme.test_EI_217_teacher_apply_theme test_auth0_login_response_contains_access_token [3] PASSED 0.35s
tests.theme.test_EI_217_teacher_apply_theme test_EI_217_teacher_fetch_theme [4] PASSED 0.38s
tests.theme.test_EI_217_teacher_apply_theme test_EI_217_teacher_apply_theme [5] PASSED 0.15s
tests.theme.test_EI_217_teacher_apply_theme test_EI_217_teacher_update_theme [6] PASSED 0.09s
tests.theme.test_EI_217_teacher_apply_theme test_EI_217_teacher_delete_theme [7] PASSED 0.09s
tests.theme.test_EI_217_teacher_apply_theme test_EI_TC_971_positive_fetch_themes_with_valid_credentials_and_return_list [8] PASSED 0.08s
tests.theme.test_EI_217_teacher_apply_theme test_EI_TC_972_negative_apply_theme_with_invalid_token_and_insufficient_permissions [9] PASSED 0.13s
tests.theme.test_EI_217_teacher_apply_theme test_EI_1214_default_theme_fetch_has_color_mode [10] PASSED 0.09s
tests.theme.test_EI_217_teacher_apply_theme test_EI_1214_default_theme_fetch_no_nonetype_leak [11] PASSED 0.08s
tests.theme.test_EI_217_teacher_apply_theme test_EI_1214_default_theme_persistence_across_fetches [12] PASSED 0.14s
tests.theme.test_EI_217_teacher_apply_theme test_EI_1214_default_theme_fetch_theme_details_not_null [13] PASSED 0.08s
tests.theme.test_EI_217_teacher_apply_theme test_EI_1214_default_theme_fetch_renderable_attrs_present [14] PASSED 0.08s
tests.theme.test_EI_217_teacher_apply_theme test_EI_1214_pos_step1_teacher_account_exists_via_auth0_login [15] PASSED 0.25s
tests.theme.test_EI_217_teacher_apply_theme test_EI_1214_pos_step2_auth0_login_returns_access_token [16] PASSED 0.21s
tests.theme.test_EI_217_teacher_apply_theme test_EI_1214_pos_step6_default_theme_persisted_returns_same_id_on_repeated_fetch [17] PASSED 0.18s
tests.theme.test_EI_217_teacher_apply_theme test_EI_1214_neg_step2_auth0_login_with_invalid_credentials_returns_403 [18] PASSED 0.17s
tests.theme.test_EI_217_teacher_apply_theme test_EI_1214_neg_step5_recovered_account_fetch_has_color_mode [19] PASSED 0.08s
tests.theme.test_EI_2521_teacher_delete_theme test_EI_TC_2057_positive_deleting_the_theme_reverts_to_the_default [20] PASSED 0.34s
tests.theme.test_EI_2521_teacher_delete_theme test_EI_TC_2058_negative_second_delete_is_404 [21] PASSED 0.34s
tests.theme.test_EI_R30_edge_teacher_theme test_EI_T622_edge_empty_result_set_on_theme_fetch [22] PASSED 0.38s
tests.theme.test_EI_R30_edge_teacher_theme test_EI_T624_edge_duplicate_apply_does_not_create_duplicate_theme [23] PASSED 0.45s
tests.theme.test_EI_R30_edge_teacher_theme test_EI_T623_edge_omit_theme_id_rejected_on_apply [24] PASSED 0.38s
tests.theme.test_EI_R30_edge_teacher_theme test_EI_T627_edge_omit_theme_name_rejected_on_update [25] PASSED 0.40s
tests.theme.test_EI_R30_edge_teacher_theme test_EI_T626_edge_script_payload_in_theme_id_neutralised [26] PASSED 0.43s
tests.theme.test_EI_R30_edge_teacher_theme test_EI_T630_edge_script_payload_in_theme_name_neutralised [27] PASSED 0.48s
tests.theme.test_EI_R30_edge_teacher_theme test_EI_T628_edge_simultaneous_theme_updates_resolve_deterministically [28] PASSED 0.51s
tests.theme.test_EI_R30_edge_teacher_theme test_EI_T631_edge_repeating_theme_delete_is_handled_safely [29] PASSED 0.43s
tests.theme.test_EI_R30_edge_teacher_theme test_EI_T633_edge_theme_delete_leaves_no_orphaned_data [30] PASSED 0.59s
tests.theme.test_EI_R37_edge_student_theme test_EI_T728_edge_expired_bearer_rejected_on_theme_fetch [31] PASSED 0.04s
tests.theme.test_EI_R37_edge_student_theme test_EI_T729_edge_empty_result_set_on_theme_fetch [32] PASSED 0.89s
tests.theme.test_EI_R37_edge_student_theme test_EI_T730_edge_omit_theme_id_rejected_on_apply [33] PASSED 0.60s
tests.theme.test_EI_R37_edge_student_theme test_EI_T731_edge_duplicate_apply_does_not_create_duplicate_theme [34] PASSED 0.66s
tests.theme.test_EI_R37_edge_student_theme test_EI_T732_edge_expired_bearer_rejected_on_theme_apply [35] PASSED 0.04s
tests.theme.test_EI_R37_edge_student_theme test_EI_T733_edge_script_payload_in_theme_id_neutralised [36] PASSED 0.68s
tests.theme.test_EI_R37_edge_student_theme test_EI_T734_edge_omit_theme_name_rejected_on_update [37] PASSED 0.58s
tests.theme.test_EI_R37_edge_student_theme test_EI_T735_edge_simultaneous_theme_updates_resolve_deterministically [38] PASSED 0.74s
tests.theme.test_EI_R37_edge_student_theme test_EI_T736_edge_expired_bearer_rejected_on_theme_update [39] PASSED 0.04s
tests.theme.test_EI_R37_edge_student_theme test_EI_T737_edge_script_payload_in_theme_name_neutralised [40] PASSED 0.74s
tests.theme.test_EI_R37_edge_student_theme test_EI_T738_edge_idempotent_theme_delete_is_safe [41] PASSED 0.66s
tests.theme.test_EI_R37_edge_student_theme test_EI_T739_edge_expired_bearer_rejected_on_theme_delete [42] PASSED 0.04s
tests.theme.test_EI_R37_edge_student_theme test_EI_T740_edge_theme_delete_leaves_no_orphaned_data [43] PASSED 0.87s
tests.theme.test_EI_T104_student_fetch_current_theme test_EI_T104_student_fetches_current_theme [44] PASSED 0.14s
tests.theme.test_EI_T104_student_fetch_current_theme test_EI_T104_fetch_no_auth_returns_401 [45] PASSED 0.04s
tests.theme.test_student_theme_lifecycle test_theme_apply_changes_color_mode [46] PASSED 0.57s
tests.theme.test_student_theme_lifecycle test_theme_update_changes_theme_name [47] PASSED 0.65s
tests.theme.test_student_theme_lifecycle test_theme_delete_reverts_to_default [48] PASSED 0.56s
tests.theme.test_student_theme_lifecycle test_theme_apply_invalid_theme_id_returns_400 [49] PASSED 0.12s
tests.theme.test_student_theme_lifecycle test_theme_apply_rejects_color_mode_wrong_data_type [50] PASSED 0.45s
tests.theme.test_student_theme_lifecycle test_theme_apply_rejects_theme_id_omitted [51] PASSED 0.14s
tests.theme.test_student_theme_lifecycle test_theme_update_rejects_empty_theme_name [52] PASSED 0.44s
tests.theme.test_student_theme_lifecycle test_theme_update_rejects_overlength_theme_name [53] PASSED 0.57s
tests.theme.test_student_theme_lifecycle test_theme_update_rejects_colors_wrong_data_type [54] PASSED 0.53s
tests.theme.test_student_theme_lifecycle test_theme_fetch_with_garbage_query_params_returns_no_server_error [55] PASSED 0.16s
tests.theme.test_student_theme_lifecycle test_theme_delete_with_garbage_query_params_returns_no_server_error [56] PASSED 0.44s
tests.theme.test_teacher_theme_lifecycle test_theme_apply_changes_color_mode [57] PASSED 0.31s
tests.theme.test_teacher_theme_lifecycle test_theme_update_changes_theme_name [58] PASSED 0.31s
tests.theme.test_teacher_theme_lifecycle test_theme_apply_invalid_theme_id_returns_400 [59] PASSED 0.08s
tests.theme.test_zephyr_edge_student_repeat_removal test_EI_T670_a_second_removal_returns_404_not_500 [60] PASSED 0.53s
tests.theme.test_zephyr_edge_student_repeat_removal test_EI_T670_further_removals_stay_404_and_never_escalate [61] PASSED 0.65s
tests.theme.test_zephyr_edge_student_repeat_removal test_EI_T670_the_underlying_record_survives_a_repeat_removal [62] PASSED 0.52s
tests.theme.test_zephyr_edge_student_repeat_removal test_EI_T670_the_404_is_state_dependent_not_a_dead_endpoint [63] PASSED 0.62s

Shard 5 of 5

Batch Test Summary - Service

Run: 2026-10-04 18:56:04  |  Marker: all tests  |  Overall result: PASSED

322
Total
322
Passed
0
Failed
0
Errors
0
Skipped

Suites

Suite Status Total Passed Failed Errors Skipped Duration
dashboard PASSED 58 58 0 0 0 23.27s
question PASSED 201 201 0 0 0 41.57s
unit PASSED 63 63 0 0 0 1.19s

Test Detail

Suite: dashboard

Class Test Status Duration
tests.dashboard.test_EI_1125_unauthorized_access test_EI_1125_no_auth_header_returns_unauthorized [1] PASSED 0.92s
tests.dashboard.test_EI_1125_unauthorized_access test_EI_1125_invalid_token_returns_401 [2] PASSED 0.04s
tests.dashboard.test_EI_1125_unauthorized_access test_EI_1125_teacher_token_on_student_route_returns_403 [3] PASSED 0.38s
tests.dashboard.test_EI_1125_unauthorized_access test_EI_1125_unauthorized_response_is_json [4] PASSED 0.04s
tests.dashboard.test_EI_1196_zero_score_submission_counted test_EI_TC_1196_positive_zero_score_submission_is_counted [5] PASSED 1.87s
tests.dashboard.test_EI_1222_search_profile_filtering test_EI_1222_searching_a_real_full_name_finds_them [6] PASSED 0.70s
tests.dashboard.test_EI_1222_search_profile_filtering test_EI_1222_search_ignores_case_and_word_order [7] PASSED 0.60s
tests.dashboard.test_EI_1222_search_profile_filtering test_EI_1222_a_name_that_does_not_exist_finds_nobody [8] PASSED 0.20s
tests.dashboard.test_EI_1222_search_profile_filtering test_EI_1222_no_search_term_returns_everyone [9] PASSED 0.28s
tests.dashboard.test_EI_1240_teacher_dashboard_class_count test_EI_TC_1240_positive_dashboard_total_matches_the_class_list_after_a_create [10] PASSED 0.61s
tests.dashboard.test_EI_1240_teacher_dashboard_class_count test_EI_TC_1240_edge_dashboard_total_matches_the_class_list_after_a_delete [11] PASSED 1.10s
tests.dashboard.test_EI_1327_student_grade_distribution_counts test_EI_TC_1327_positive_a_perfect_submission_is_counted_in_the_90_100_bucket [12] PASSED 1.28s
tests.dashboard.test_EI_1327_student_grade_distribution_counts test_EI_TC_1327_edge_a_failing_submission_is_counted_in_the_below_60_bucket [13] PASSED 1.44s
tests.dashboard.test_EI_1340_gpa_by_class test_EI_TC_1340_positive_each_class_reports_its_own_average [14] PASSED 2.99s
tests.dashboard.test_EI_1344_student_dashboard_class_count test_EI_TC_1344_positive_dashboard_counts_a_class_only_once_it_is_enrolled [15] PASSED 1.23s
tests.dashboard.test_EI_1344_student_dashboard_class_count test_EI_TC_1344_edge_dashboard_stops_counting_a_class_after_an_approved_leave [16] PASSED 1.31s
tests.dashboard.test_EI_1344_student_dashboard_class_count test_EI_TC_2384_edge_dashboard_stops_counting_a_class_the_teacher_deleted [17] PASSED 1.31s
tests.dashboard.test_EI_1346_grade_history test_EI_TC_1346_positive_correct_submission_shows_in_the_grade_history [18] PASSED 1.22s
tests.dashboard.test_EI_R34_edge_student_dashboard test_EI_T677_edge_expired_bearer_rejected_on_achievements [19] PASSED 0.04s
tests.dashboard.test_EI_R34_edge_student_dashboard test_EI_T678_edge_empty_result_set_on_achievements [20] PASSED 0.09s
tests.dashboard.test_EI_R34_edge_student_dashboard test_EI_T679_edge_expired_bearer_rejected_on_grade_distribution [21] PASSED 0.05s
tests.dashboard.test_EI_R34_edge_student_dashboard test_EI_T680_edge_empty_result_set_on_grade_distribution [22] PASSED 0.10s
tests.dashboard.test_EI_R34_edge_student_dashboard test_EI_T681_edge_expired_bearer_rejected_on_gpa [23] PASSED 0.04s
tests.dashboard.test_EI_R34_edge_student_dashboard test_EI_T682_edge_empty_result_set_on_gpa [24] PASSED 0.10s
tests.dashboard.test_EI_R34_edge_student_dashboard test_EI_T683_edge_out_of_range_limit_on_upcoming_assignments[limit=-1] [25] PASSED 0.09s
tests.dashboard.test_EI_R34_edge_student_dashboard test_EI_T683_edge_out_of_range_limit_on_upcoming_assignments[limit=0] [26] PASSED 0.09s
tests.dashboard.test_EI_R34_edge_student_dashboard test_EI_T683_edge_out_of_range_limit_on_upcoming_assignments[limit=999999] [27] PASSED 0.09s
tests.dashboard.test_EI_R34_edge_student_dashboard test_EI_T684_edge_expired_bearer_rejected_on_upcoming_assignments [28] PASSED 0.04s
tests.dashboard.test_EI_R34_edge_student_dashboard test_EI_T685_edge_expired_bearer_rejected_on_classes_statistics [29] PASSED 0.04s
tests.dashboard.test_EI_R34_edge_student_dashboard test_EI_T686_edge_empty_result_set_on_classes_statistics [30] PASSED 0.12s
tests.dashboard.test_EI_R34_edge_student_dashboard test_EI_T687_edge_expired_bearer_rejected_on_assignments_statistics [31] PASSED 0.05s
tests.dashboard.test_EI_R34_edge_student_dashboard test_EI_T688_edge_empty_result_set_on_assignments_statistics [32] PASSED 0.13s
tests.dashboard.test_EI_R34_edge_student_dashboard test_EI_T689_edge_expired_bearer_rejected_on_submissions_statistics [33] PASSED 0.04s
tests.dashboard.test_EI_R34_edge_student_dashboard test_EI_T690_edge_empty_result_set_on_submissions_statistics [34] PASSED 0.09s
tests.dashboard.test_EI_edge_teacher_dashboard test_EI_TC_edge_empty_result_set_assignments_statistics [35] PASSED 0.53s
tests.dashboard.test_EI_edge_teacher_dashboard test_EI_TC_edge_empty_result_set_classes_statistics [36] PASSED 0.14s
tests.dashboard.test_EI_edge_teacher_dashboard test_EI_TC_edge_empty_result_set_students_statistics [37] PASSED 0.16s
tests.dashboard.test_EI_edge_teacher_dashboard test_EI_TC_edge_empty_result_set_submissions_statistics [38] PASSED 0.13s
tests.dashboard.test_EI_edge_teacher_dashboard test_EI_TC_edge_invalid_bearer_token_assignments_statistics [39] PASSED 0.04s
tests.dashboard.test_EI_edge_teacher_dashboard test_EI_TC_edge_invalid_bearer_token_classes_statistics [40] PASSED 0.04s
tests.dashboard.test_EI_edge_teacher_dashboard test_EI_TC_edge_invalid_bearer_token_students_statistics [41] PASSED 0.04s
tests.dashboard.test_EI_edge_teacher_dashboard test_EI_TC_edge_invalid_bearer_token_submissions_statistics [42] PASSED 0.04s
tests.dashboard.test_student_dashboard_statistics test_class_statistics_returns_200_with_total [43] PASSED 0.41s
tests.dashboard.test_student_dashboard_statistics test_gpa_returns_200_with_overall_average [44] PASSED 0.09s
tests.dashboard.test_student_dashboard_statistics test_grade_distribution_returns_200_with_buckets [45] PASSED 0.09s
tests.dashboard.test_student_dashboard_statistics test_upcoming_assignments_returns_200_with_upcoming_list [46] PASSED 0.13s
tests.dashboard.test_student_dashboard_statistics test_assignments_statistics_returns_200_with_total [47] PASSED 0.11s
tests.dashboard.test_student_dashboard_statistics test_submissions_statistics_returns_200_with_total [48] PASSED 0.09s
tests.dashboard.test_student_dashboard_statistics test_achievements_returns_200_with_counts [49] PASSED 0.10s
tests.dashboard.test_student_dashboard_statistics test_class_statistics_no_auth_returns_401 [50] PASSED 0.04s
tests.dashboard.test_student_dashboard_statistics test_gpa_no_auth_returns_401 [51] PASSED 0.05s
tests.dashboard.test_student_dashboard_statistics test_achievements_no_auth_returns_401 [52] PASSED 0.04s
tests.dashboard.test_teacher_dashboard_statistics test_class_statistics_returns_total_and_details [53] PASSED 0.43s
tests.dashboard.test_teacher_dashboard_statistics test_students_statistics_returns_total_and_details [54] PASSED 0.14s
tests.dashboard.test_teacher_dashboard_statistics test_assignments_statistics_returns_total_and_details [55] PASSED 0.18s
tests.dashboard.test_teacher_dashboard_statistics test_submissions_statistics_returns_data_and_details [56] PASSED 0.15s
tests.dashboard.test_teacher_dashboard_statistics test_class_statistics_no_auth_returns_401 [57] PASSED 0.06s
tests.dashboard.test_teacher_dashboard_statistics test_submissions_statistics_no_auth_returns_401 [58] PASSED 0.06s

Suite: question

Class Test Status Duration
tests.question.test_EI_1167_multi_paragraph_question test_EI_TC_1167_positive_paragraphs_are_kept_separate_and_in_order [1] PASSED 0.67s
tests.question.test_EI_1215_question_settings_roundtrip test_EI_TC_2438_positive_every_setting_is_stored_as_sent [2] PASSED 0.38s
tests.question.test_EI_1215_question_settings_roundtrip test_EI_TC_1215_positive_editing_choices_and_points_keeps_the_other_settings [3] PASSED 0.29s
tests.question.test_EI_137_drag_and_drop_question test_EI_TC_137_positive_drag_and_drop_is_stored_with_choices_and_blank_answers [4] PASSED 0.26s
tests.question.test_EI_137_drag_and_drop_question test_EI_TC_212_positive_edited_choices_keep_their_order_and_the_blank_answers [5] PASSED 0.29s
tests.question.test_EI_137_drag_and_drop_question test_EI_TC_213_positive_update_to_three_then_ten_choices_keeps_the_order_sent [6] PASSED 0.45s
tests.question.test_EI_137_drag_and_drop_question test_EI_TC_137_negative_no_blank_answers_is_refused [7] PASSED 0.14s
tests.question.test_EI_137_drag_and_drop_question test_EI_TC_137_negative_blank_answer_without_its_text_is_refused [8] PASSED 0.15s
tests.question.test_EI_137_drag_and_drop_question test_EI_TC_213_negative_update_with_one_choice_is_refused_and_choices_are_kept [9] PASSED 0.32s
tests.question.test_EI_200_edit_dropdown_options test_EI_TC_265_positive_renamed_option_is_stored_and_count_kept [10] PASSED 0.34s
tests.question.test_EI_200_edit_dropdown_options test_EI_TC_267_negative_removing_every_dropdown_is_refused [11] PASSED 0.30s
tests.question.test_EI_202_edit_graph_question test_EI_TC_473_positive_graph_answer_survives_an_edit_byte_for_byte [12] PASSED 0.49s
tests.question.test_EI_202_edit_graph_question test_EI_TC_479_negative_graph_question_takes_no_choices [13] PASSED 0.14s
tests.question.test_EI_205_create_dropdown_question test_EI_TC_205_positive_dropdown_question_is_stored_with_its_options [14] PASSED 0.26s
tests.question.test_EI_205_create_dropdown_question test_EI_TC_205_negative_dropdown_option_must_be_a_string [15] PASSED 0.14s
tests.question.test_EI_206_update_dropdown_question test_EI_TC_207_positive_updated_options_are_stored [16] PASSED 0.29s
tests.question.test_EI_206_update_dropdown_question test_EI_TC_208_negative_a_single_option_dropdown_is_refused_on_update [17] PASSED 0.37s
tests.question.test_EI_218_teacher_create_question_bank test_EI_TC_974_change_password_requires_authentication [18] PASSED 0.31s
tests.question.test_EI_218_teacher_create_question_bank test_EI_TC_977_change_password_with_invalid_old_password [19] PASSED 0.33s
tests.question.test_EI_218_teacher_create_question_bank test_EI_TC_978_create_question_with_invalid_data_payload [20] PASSED 0.15s
tests.question.test_EI_218_teacher_create_question_bank test_EI_TC_979_fetch_update_delete_malformed_question_id [21] PASSED 0.35s
tests.question.test_EI_218_teacher_create_question_bank test_EI_TC_979_fetch_and_delete_absent_question_id [22] PASSED 0.16s
tests.question.test_EI_218_teacher_create_question_bank test_EI_2781_points_at_max_succeeds [23] PASSED 0.14s
tests.question.test_EI_218_teacher_create_question_bank test_EI_2781_points_above_max_rejected [24] PASSED 0.14s
tests.question.test_EI_218_teacher_create_question_bank test_EI_2781_points_at_zero_rejected [25] PASSED 0.12s
tests.question.test_EI_218_teacher_create_question_bank test_EI_2781_points_overflow_rejected [26] PASSED 0.16s
tests.question.test_EI_218_teacher_create_question_bank test_EI_2841_category_present_returns_201 [27] PASSED 0.22s
tests.question.test_EI_218_teacher_create_question_bank test_EI_2841_category_missing_returns_400 [28] PASSED 0.15s
tests.question.test_EI_218_teacher_create_question_bank test_EI_2841_category_null_returns_400 [29] PASSED 0.15s
tests.question.test_EI_218_teacher_create_question_bank test_EI_2841_category_empty_string_returns_400 [30] PASSED 0.14s
tests.question.test_EI_218_teacher_create_question_bank test_EI_2841_category_whitespace_only_returns_400 [31] PASSED 0.14s
tests.question.test_EI_218_teacher_create_question_bank test_EI_2844_difficulty_case_insensitive_returns_201[EASY] [32] PASSED 0.13s
tests.question.test_EI_218_teacher_create_question_bank test_EI_2844_difficulty_case_insensitive_returns_201[easy] [33] PASSED 0.27s
tests.question.test_EI_218_teacher_create_question_bank test_EI_2844_difficulty_case_insensitive_returns_201[Easy] [34] PASSED 0.13s
tests.question.test_EI_218_teacher_create_question_bank test_EI_2844_difficulty_case_insensitive_returns_201[AVERAGE] [35] PASSED 0.13s
tests.question.test_EI_218_teacher_create_question_bank test_EI_2844_difficulty_case_insensitive_returns_201[average] [36] PASSED 0.13s
tests.question.test_EI_218_teacher_create_question_bank test_EI_2844_difficulty_case_insensitive_returns_201[Advance] [37] PASSED 0.13s
tests.question.test_EI_218_teacher_create_question_bank test_EI_2844_difficulty_case_insensitive_returns_201[ADVANCE] [38] PASSED 0.15s
tests.question.test_EI_218_teacher_create_question_bank test_EI_2844_difficulty_case_insensitive_returns_201[advance] [39] PASSED 0.15s
tests.question.test_EI_218_teacher_create_question_bank test_EI_2844_difficulty_invalid_value_rejected [40] PASSED 0.13s
tests.question.test_EI_2367_delete_question test_EI_TC_1886_positive_question_is_deleted [41] PASSED 0.26s
tests.question.test_EI_2367_delete_question test_EI_TC_1887_negative_deleted_question_cannot_be_fetched [42] PASSED 0.29s
tests.question.test_EI_2388_question_bank_filters test_EI_TC_2388_positive_question_type_filter_returns_only_that_type [43] PASSED 0.64s
tests.question.test_EI_2388_question_bank_filters test_EI_TC_2388_positive_two_question_types_return_their_union [44] PASSED 0.08s
tests.question.test_EI_2388_question_bank_filters test_EI_TC_2388_positive_type_and_difficulty_filters_combine_with_and [45] PASSED 0.08s
tests.question.test_EI_2388_question_bank_filters test_EI_TC_2388_negative_a_type_no_question_carries_returns_nothing [46] PASSED 0.08s
tests.question.test_EI_2388_question_bank_filters test_EI_TC_2617_positive_difficulty_filter_returns_only_that_difficulty [47] PASSED 0.07s
tests.question.test_EI_2388_question_bank_filters test_EI_TC_2617_positive_two_difficulties_return_their_union [48] PASSED 0.07s
tests.question.test_EI_2388_question_bank_filters test_EI_TC_2620_positive_staar_filter_returns_only_staar_and_its_facet_count [49] PASSED 0.15s
tests.question.test_EI_2388_question_bank_filters test_EI_TC_2620_positive_sat_filter_returns_only_sat [50] PASSED 0.07s
tests.question.test_EI_2388_question_bank_filters test_EI_TC_2620_edge_clearing_the_assignment_type_filter_restores_the_total [51] PASSED 0.22s
tests.question.test_EI_2388_question_bank_filters test_EI_TC_3160_positive_category_filter_returns_only_that_category [52] PASSED 0.09s
tests.question.test_EI_2388_question_bank_filters test_EI_TC_2387_positive_two_categories_return_their_union [53] PASSED 0.09s
tests.question.test_EI_2388_question_bank_filters test_EI_TC_3160_positive_category_composes_with_a_narrower_search_term [54] PASSED 0.10s
tests.question.test_EI_2388_question_bank_filters test_EI_TC_3160_positive_category_composes_with_the_assignment_type_filter [55] PASSED 0.15s
tests.question.test_EI_2388_question_bank_filters test_EI_TC_2387_negative_a_category_with_no_rows_returns_nothing [56] PASSED 0.07s
tests.question.test_EI_2388_question_bank_filters test_EI_TC_2548_positive_creating_a_question_raises_the_difficulty_filtered_total_by_on… PASSED 0.72s
tests.question.test_EI_2478_create_free_response_question test_EI_TC_2478_positive_free_response_is_stored_with_model_answer_and_explanation [58] PASSED 0.26s
tests.question.test_EI_2478_create_free_response_question test_EI_TC_578_edge_long_model_answer_is_stored_whole [59] PASSED 0.24s
tests.question.test_EI_2478_create_free_response_question test_EI_TC_443_negative_empty_stem_is_refused [60] PASSED 0.20s
tests.question.test_EI_2478_create_free_response_question test_EI_TC_511_negative_empty_topic_is_refused [61] PASSED 0.17s
tests.question.test_EI_2478_create_free_response_question test_EI_TC_2478_negative_empty_model_answer_list_is_refused [62] PASSED 0.18s
tests.question.test_EI_2552_update_question_rules test_EI_TC_2552_positive_changed_stem_is_stored_and_choices_are_untouched [63] PASSED 0.35s
tests.question.test_EI_2552_update_question_rules test_EI_TC_385_positive_added_choice_is_stored_last [64] PASSED 0.31s
tests.question.test_EI_2552_update_question_rules test_EI_TC_840_positive_edited_and_deleted_choices_are_stored_and_the_answer_is_kept [65] PASSED 0.29s
tests.question.test_EI_2552_update_question_rules test_EI_TC_2552_negative_empty_topic_is_refused_and_the_original_is_kept [66] PASSED 0.30s
tests.question.test_EI_2552_update_question_rules test_EI_TC_2552_negative_one_choice_is_refused_and_the_choices_are_kept [67] PASSED 0.28s
tests.question.test_EI_2552_update_question_rules test_EI_TC_840_negative_deleting_the_correct_choice_is_refused [68] PASSED 0.28s
tests.question.test_EI_2555_repeat_question_delete test_EI_TC_2064_negative_second_delete_is_404 [69] PASSED 0.28s
tests.question.test_EI_2555_repeat_question_delete test_EI_TC_2066_edge_question_bank_still_lists_after_a_repeat_delete [70] PASSED 0.37s
tests.question.test_EI_2611_question_bank_search_text test_EI_TC_2611_positive_search_lists_every_question_carrying_the_term [71] PASSED 0.59s
tests.question.test_EI_2611_question_bank_search_text test_EI_TC_2611_positive_partial_and_upper_case_terms_still_match [72] PASSED 0.22s
tests.question.test_EI_2611_question_bank_search_text test_EI_TC_2611_edge_special_characters_are_searched_literally [73] PASSED 0.34s
tests.question.test_EI_2611_question_bank_search_text test_EI_TC_1097_negative_unknown_term_returns_no_questions [74] PASSED 0.08s
tests.question.test_EI_2611_question_bank_search_text test_EI_TC_1097_positive_total_questions_counts_all_matches_while_total_count_is_the_pa… PASSED 0.08s
tests.question.test_EI_2611_question_bank_search_text test_EI_TC_2560_positive_search_term_combines_with_difficulty_and_type_filters [76] PASSED 0.07s
tests.question.test_EI_2611_question_bank_search_text test_EI_TC_2560_negative_a_matching_term_with_an_excluding_filter_returns_nothing [77] PASSED 0.34s
tests.question.test_EI_2621_restful_api_functionality test_EI_TC_2892_positive_get_retrieves_data [78] PASSED 0.38s
tests.question.test_EI_2621_restful_api_functionality test_EI_TC_2893_positive_post_creates_resource [79] PASSED 0.19s
tests.question.test_EI_2621_restful_api_functionality test_EI_TC_2894_positive_put_updates_resource [80] PASSED 0.31s
tests.question.test_EI_2621_restful_api_functionality test_EI_TC_2895_negative_get_without_token_is_rejected [81] PASSED 0.05s
tests.question.test_EI_2621_restful_api_functionality test_EI_TC_2896_negative_invalid_payload_rejected [82] PASSED 0.12s
tests.question.test_EI_2654_question_bank_pagination test_EI_TC_2654_positive_first_page_holds_page_size_questions [83] PASSED 1.29s
tests.question.test_EI_2654_question_bank_pagination test_EI_TC_2654_positive_second_page_is_disjoint_and_keeps_the_same_total [84] PASSED 0.15s
tests.question.test_EI_2654_question_bank_pagination test_EI_TC_2921_positive_the_pages_together_are_the_whole_set_newest_first [85] PASSED 0.16s
tests.question.test_EI_2654_question_bank_pagination test_EI_TC_2654_positive_a_page_size_of_25_puts_everything_on_one_page [86] PASSED 0.08s
tests.question.test_EI_2654_question_bank_pagination test_EI_TC_2921_edge_total_pages_is_the_rounded_up_division_and_the_last_page_is_short … PASSED 0.16s
tests.question.test_EI_2654_question_bank_pagination test_EI_TC_2921_edge_a_page_past_the_end_is_empty_with_the_total_unchanged [88] PASSED 0.07s
tests.question.test_EI_2654_question_bank_pagination test_EI_TC_2921_positive_page_size_snake_case_is_an_alias_of_page_size [89] PASSED 0.73s
tests.question.test_EI_2701_multiple_choice_choice_count test_EI_TC_2701_negative_one_choice_is_refused [90] PASSED 0.12s
tests.question.test_EI_2701_multiple_choice_choice_count test_EI_TC_2435_negative_missing_required_field_is_refused [91] PASSED 0.13s
tests.question.test_EI_2701_multiple_choice_choice_count test_EI_TC_2701_edge_ten_choices_are_accepted_and_kept_in_order [92] PASSED 0.26s
tests.question.test_EI_2701_multiple_choice_choice_count test_EI_TC_2435_positive_only_the_required_fields_create_a_question [93] PASSED 0.26s
tests.question.test_EI_3398_question_listing_after_create test_EI_TC_3398_positive_new_dropdown_question_is_counted_and_listed_right_after_create… PASSED 0.31s
tests.question.test_EI_3444_multi_part_question test_EI_TC_3444_positive_two_groups_are_stored_as_sent [95] PASSED 0.23s
tests.question.test_EI_3444_multi_part_question test_EI_TC_3444_negative_one_group_is_refused [96] PASSED 0.14s
tests.question.test_EI_3444_multi_part_question test_EI_TC_3444_negative_no_groups_key_is_refused [97] PASSED 0.12s
tests.question.test_EI_3444_multi_part_question test_EI_TC_3444_negative_a_group_with_one_choice_is_refused [98] PASSED 0.12s
tests.question.test_EI_3444_multi_part_question test_EI_TC_3444_negative_a_group_without_its_question_text_is_refused [99] PASSED 0.12s
tests.question.test_EI_3444_multi_part_question test_EI_TC_3444_negative_a_group_answer_that_is_not_one_of_its_choices_is_refused [100] PASSED 0.14s
tests.question.test_EI_3444_multi_part_question test_EI_TC_3444_negative_two_groups_on_the_same_page_are_refused [101] PASSED 0.13s
tests.question.test_EI_3445_single_stimulus_and_embedded_questions test_EI_TC_3445_positive_two_group_question_is_created_and_read_back_with_both_groups [… PASSED 0.25s
tests.question.test_EI_3445_single_stimulus_and_embedded_questions test_EI_TC_3445_negative_one_group_is_not_enough [103] PASSED 0.13s
tests.question.test_EI_3445_single_stimulus_and_embedded_questions test_EI_TC_3445_negative_a_group_without_a_marked_correct_answer_is_refused [104] PASSED 0.14s
tests.question.test_EI_3445_single_stimulus_and_embedded_questions test_EI_TC_3443_positive_embedded_question_is_created_and_read_back [105] PASSED 0.26s
tests.question.test_EI_3445_single_stimulus_and_embedded_questions test_EI_TC_3443_positive_the_correct_answer_is_stored_as_the_choice_id [106] PASSED 0.23s
tests.question.test_EI_3445_single_stimulus_and_embedded_questions test_EI_TC_3443_negative_a_passage_with_no_marked_choice_is_refused [107] PASSED 0.12s
tests.question.test_EI_464_question_bank_facets test_EI_TC_3374_positive_each_facet_adds_up_to_the_total [108] PASSED 0.58s
tests.question.test_EI_464_question_bank_facets test_EI_TC_464_positive_a_question_type_facet_equals_the_total_when_filtering_by_it [109] PASSED 0.29s
tests.question.test_EI_464_question_bank_facets test_EI_TC_464_positive_an_assignment_type_facet_equals_the_total_when_filtering_by_it … PASSED 0.23s
tests.question.test_EI_464_question_bank_facets test_EI_TC_3374_edge_a_filtered_list_has_facets_of_the_filtered_set_only [111] PASSED 0.08s
tests.question.test_EI_464_question_bank_facets test_EI_TC_3374_positive_the_category_facet_leaves_out_the_category_less_sat_questions … PASSED 0.36s
tests.question.test_EI_645_question_readback test_EI_TC_645_positive_details_shown_to_the_teacher_round_trip_exactly [113] PASSED 0.23s
tests.question.test_EI_645_question_readback test_EI_TC_1242_positive_multiple_choice_keeps_choices_answer_points_and_difficulty [114] PASSED 0.22s
tests.question.test_EI_645_question_readback test_EI_TC_2549_positive_fetch_returns_the_stored_question [115] PASSED 0.24s
tests.question.test_EI_645_question_readback test_EI_TC_2549_positive_the_list_returns_the_same_document_as_the_single_fetch [116] PASSED 0.31s
tests.question.test_EI_645_question_readback test_EI_TC_1168_positive_free_response_keeps_its_answer_and_has_no_choices [117] PASSED 0.28s
tests.question.test_EI_645_question_readback test_EI_TC_1168_negative_free_response_with_an_empty_stem_is_refused [118] PASSED 0.14s
tests.question.test_EI_840_answer_must_match_other_types test_EI_840_negative_a_checkbox_answer_that_is_not_a_choice_is_refused [119] PASSED 0.33s
tests.question.test_EI_840_answer_must_match_other_types test_EI_840_negative_an_embedded_answer_that_is_not_a_choice_id_is_refused [120] PASSED 0.28s
tests.question.test_EI_840_answer_must_match_other_types test_EI_840_negative_a_dropdown_answer_from_another_blank_is_refused [121] PASSED 0.26s
tests.question.test_EI_R26_edge_teacher_question test_EI_T526_edge_malformed_teacher_id_on_all_fetch [122] PASSED 0.18s
tests.question.test_EI_R26_edge_teacher_question test_EI_T527_edge_unknown_teacher_id_on_all_fetch [123] PASSED 0.18s
tests.question.test_EI_R26_edge_teacher_question test_EI_T528_edge_unknown_assignment_types_on_staff_questions [124] PASSED 0.29s
tests.question.test_EI_R26_edge_teacher_question test_EI_T529_edge_expired_bearer_rejected_on_staff_questions [125] PASSED 0.04s
tests.question.test_EI_R26_edge_teacher_question test_EI_T530_edge_duplicate_create_does_not_corrupt [126] PASSED 0.50s
tests.question.test_EI_R26_edge_teacher_question test_EI_T531_edge_expired_bearer_rejected_on_create [127] PASSED 0.04s
tests.question.test_EI_R26_edge_teacher_question test_EI_T532_edge_parallel_creates_without_corruption [128] PASSED 0.55s
tests.question.test_EI_R26_edge_teacher_question test_EI_T533_edge_missing_authorization_rejected_on_create [129] PASSED 0.04s
tests.question.test_EI_R26_edge_teacher_question test_EI_T534_edge_malformed_question_id_rejected_on_fetch [130] PASSED 0.08s
tests.question.test_EI_R26_edge_teacher_question test_EI_T535_edge_unknown_question_id_not_found_on_fetch [131] PASSED 0.10s
tests.question.test_EI_R26_edge_teacher_question test_EI_T536_edge_malformed_question_id_rejected_on_update [132] PASSED 0.13s
tests.question.test_EI_R26_edge_teacher_question test_EI_T537_edge_unknown_question_id_not_found_on_update [133] PASSED 0.09s
tests.question.test_EI_R26_edge_teacher_question test_EI_T538_edge_expired_bearer_rejected_on_update [134] PASSED 0.04s
tests.question.test_EI_R26_edge_teacher_question test_EI_T539_edge_empty_update_payload_handled [135] PASSED 0.28s
tests.question.test_EI_R26_edge_teacher_question test_EI_T540_edge_malformed_question_id_rejected_on_delete [136] PASSED 0.08s
tests.question.test_EI_R26_edge_teacher_question test_EI_T541_edge_unknown_question_id_not_found_on_delete [137] PASSED 0.09s
tests.question.test_EI_R26_edge_teacher_question test_EI_T542_edge_expired_bearer_rejected_on_delete [138] PASSED 0.04s
tests.question.test_EI_R26_edge_teacher_question test_EI_T543_edge_expired_bearer_rejected_on_filter_options [139] PASSED 0.05s
tests.question.test_EI_R26_edge_teacher_question test_EI_T544_edge_empty_result_set_on_filter_options [140] PASSED 0.18s
tests.question.test_EI_R26_edge_teacher_question test_EI_T545_edge_expired_bearer_rejected_on_clear_filters [141] PASSED 0.04s
tests.question.test_EI_R26_edge_teacher_question test_EI_T546_edge_empty_result_set_on_clear_filters [142] PASSED 0.11s
tests.question.test_EI_R26_edge_teacher_question test_EI_T547_edge_omit_file_rejected_on_image_upload [143] PASSED 0.17s
tests.question.test_EI_R26_edge_teacher_question test_EI_T548_edge_interrupted_upload_leaves_no_orphaned_asset [144] PASSED 0.32s
tests.question.test_EI_R26_edge_teacher_question test_EI_T549_edge_expired_bearer_rejected_on_image_upload [145] PASSED 0.04s
tests.question.test_EI_R26_edge_teacher_question test_EI_T550_edge_script_payload_in_file_neutralised [146] PASSED 0.14s
tests.question.test_teacher_question_image_upload test_image_upload_returns_cdn_url [147] PASSED 0.14s
tests.question.test_teacher_question_image_upload test_image_upload_unsupported_type_returns_415 [148] PASSED 0.13s
tests.question.test_teacher_question_image_upload test_image_upload_no_auth_returns_401 [149] PASSED 0.04s
tests.question.test_teacher_question_reads_and_crud test_fetch_question_returns_200 [150] PASSED 0.44s
tests.question.test_teacher_question_reads_and_crud test_filter_options_returns_200_with_facets [151] PASSED 0.17s
tests.question.test_teacher_question_reads_and_crud test_clear_filters_returns_200_with_data [152] PASSED 0.13s
tests.question.test_teacher_question_reads_and_crud test_fetch_no_auth_returns_401 [153] PASSED 0.04s
tests.question.test_teacher_question_reads_and_crud test_update_no_auth_returns_401 [154] PASSED 0.04s
tests.question.test_teacher_question_reads_and_crud test_delete_no_auth_returns_401 [155] PASSED 0.04s
tests.question.test_teacher_question_reads_and_crud test_filter_options_no_auth_returns_401 [156] PASSED 0.04s
tests.question.test_zephyr_negative_question_bank test_EI_T207_fetch_all_questions_with_malformed_filter_values_is_rejected[assignment_ty… PASSED 0.09s
tests.question.test_zephyr_negative_question_bank test_EI_T207_fetch_all_questions_with_malformed_filter_values_is_rejected[question_type… PASSED 0.05s
tests.question.test_zephyr_negative_question_bank test_EI_T207_fetch_all_questions_with_malformed_filter_values_is_rejected[grade_level] … PASSED 0.05s
tests.question.test_zephyr_negative_question_bank test_EI_T207_fetch_all_questions_with_malformed_filter_values_is_rejected[page] [160] PASSED 0.05s
tests.question.test_zephyr_negative_question_bank test_EI_T207_fetch_all_questions_with_malformed_filter_values_is_rejected[page_size] [161] PASSED 0.05s
tests.question.test_zephyr_negative_question_bank test_EI_T208_fetch_staff_questions_with_malformed_filter_values_is_rejected[assignment_… PASSED 0.10s
tests.question.test_zephyr_negative_question_bank test_EI_T208_fetch_staff_questions_with_malformed_filter_values_is_rejected[question_ty… PASSED 0.10s
tests.question.test_zephyr_negative_question_bank test_EI_T208_fetch_staff_questions_with_malformed_filter_values_is_rejected[grade_level… PASSED 0.10s
tests.question.test_zephyr_negative_question_bank test_EI_T208_fetch_staff_questions_with_malformed_filter_values_is_rejected[page] [165] PASSED 0.10s
tests.question.test_zephyr_negative_question_bank test_EI_T208_fetch_staff_questions_with_malformed_filter_values_is_rejected[page_size] … PASSED 0.10s
tests.question.test_zephyr_negative_question_bank test_EI_T209_create_question_without_the_stem_is_rejected [167] PASSED 0.10s
tests.question.test_zephyr_negative_question_bank test_EI_T210_create_question_with_answer_options_wrong_data_type_is_rejected[string] [168] PASSED 0.12s
tests.question.test_zephyr_negative_question_bank test_EI_T210_create_question_with_answer_options_wrong_data_type_is_rejected[number] [169] PASSED 0.14s
tests.question.test_zephyr_negative_question_bank test_EI_T210_create_question_with_answer_options_wrong_data_type_is_rejected[object] [170] PASSED 0.10s
tests.question.test_zephyr_negative_question_bank test_EI_T210_create_question_with_answer_options_wrong_data_type_is_rejected[list_of_nu… PASSED 0.13s
tests.question.test_zephyr_negative_question_bank test_EI_T210_create_question_with_answer_options_wrong_data_type_is_rejected[list_of_st… PASSED 0.09s
tests.question.test_zephyr_negative_question_bank test_EI_T211_create_question_with_an_empty_payload_is_rejected [173] PASSED 0.09s
tests.question.test_zephyr_negative_question_bank test_EI_T211_create_question_with_an_oversized_payload_is_rejected [174] PASSED 0.23s
tests.question.test_zephyr_negative_question_bank test_EI_T212_fetch_question_with_a_malformed_id_is_rejected [175] PASSED 0.05s
tests.question.test_zephyr_negative_question_bank test_EI_T214_fetch_question_with_a_long_or_unknown_id_is_rejected[long] [176] PASSED 0.05s
tests.question.test_zephyr_negative_question_bank test_EI_T214_fetch_question_with_a_long_or_unknown_id_is_rejected[unknown] [177] PASSED 0.07s
tests.question.test_zephyr_negative_question_bank test_EI_T213_fetch_question_with_the_id_omitted_is_rejected [178] PASSED 0.01s
tests.question.test_zephyr_negative_question_bank test_EI_T215_update_question_without_the_stem_is_rejected [179] PASSED 0.30s
tests.question.test_zephyr_negative_question_bank test_EI_T216_update_question_with_answer_options_wrong_data_type_is_rejected[string] [180] PASSED 0.30s
tests.question.test_zephyr_negative_question_bank test_EI_T216_update_question_with_answer_options_wrong_data_type_is_rejected[number] [181] PASSED 0.31s
tests.question.test_zephyr_negative_question_bank test_EI_T216_update_question_with_answer_options_wrong_data_type_is_rejected[object] [182] PASSED 0.29s
tests.question.test_zephyr_negative_question_bank test_EI_T216_update_question_with_answer_options_wrong_data_type_is_rejected[list_of_nu… PASSED 0.33s
tests.question.test_zephyr_negative_question_bank test_EI_T216_update_question_with_answer_options_wrong_data_type_is_rejected[list_of_st… PASSED 0.28s
tests.question.test_zephyr_negative_question_bank test_EI_T217_update_question_with_an_empty_payload_is_rejected [185] PASSED 0.29s
tests.question.test_zephyr_negative_question_bank test_EI_T217_update_question_with_an_oversized_payload_is_rejected [186] PASSED 0.41s
tests.question.test_zephyr_negative_question_bank test_EI_T218_update_question_with_a_malformed_id_is_rejected [187] PASSED 0.08s
tests.question.test_zephyr_negative_question_bank test_EI_T219_delete_question_with_a_malformed_id_is_rejected [188] PASSED 0.05s
tests.question.test_zephyr_negative_question_bank test_EI_T221_delete_question_with_a_long_or_unknown_id_is_rejected[long] [189] PASSED 0.05s
tests.question.test_zephyr_negative_question_bank test_EI_T221_delete_question_with_a_long_or_unknown_id_is_rejected[unknown] [190] PASSED 0.07s
tests.question.test_zephyr_negative_question_bank test_EI_T220_delete_question_with_the_id_omitted_is_rejected [191] PASSED 0.01s
tests.question.test_zephyr_negative_question_bank test_EI_T222_filter_options_with_malformed_request_parameters_returns_no_server_error[j… PASSED 0.20s
tests.question.test_zephyr_negative_question_bank test_EI_T222_filter_options_with_malformed_request_parameters_returns_no_server_error[b… PASSED 0.26s
tests.question.test_zephyr_negative_question_bank test_EI_T222_filter_options_with_malformed_request_parameters_returns_no_server_error[o… PASSED 0.19s
tests.question.test_zephyr_negative_question_bank test_EI_T223_clear_filters_with_malformed_request_parameters_returns_no_server_error[ju… PASSED 0.05s
tests.question.test_zephyr_negative_question_bank test_EI_T223_clear_filters_with_malformed_request_parameters_returns_no_server_error[ba… PASSED 0.07s
tests.question.test_zephyr_negative_question_bank test_EI_T223_clear_filters_with_malformed_request_parameters_returns_no_server_error[od… PASSED 0.09s
tests.question.test_zephyr_negative_question_bank test_EI_T235_poll_import_status_with_a_malformed_job_id_is_rejected [198] PASSED 0.25s
tests.question.test_zephyr_negative_question_bank test_EI_T237_poll_import_status_with_a_long_or_unknown_job_id_is_rejected[unknown] [199] PASSED 0.18s
tests.question.test_zephyr_negative_question_bank test_EI_T237_poll_import_status_with_a_long_or_unknown_job_id_is_rejected[long] [200] PASSED 0.16s
tests.question.test_zephyr_negative_question_bank test_EI_T236_poll_import_status_with_the_job_id_omitted_is_rejected [201] PASSED 0.01s

Suite: unit

Class Test Status Duration
tests.unit.test_auth0_service_mocked test_login_posts_ropg_grant_to_the_token_endpoint [1] PASSED 0.01s
tests.unit.test_auth0_service_mocked test_login_returns_auth0_token_payload_unmodified [2] PASSED 0.00s
tests.unit.test_auth0_service_mocked test_auth0_login_response_model_parses_token_payload [3] PASSED 0.00s
tests.unit.test_auth0_service_mocked test_auth0_login_response_model_rejects_body_missing_access_token [4] PASSED 0.00s
tests.unit.test_auth0_service_mocked test_login_retries_once_after_a_single_429_then_succeeds [5] PASSED 0.00s
tests.unit.test_auth0_service_mocked test_login_backs_off_in_increasing_steps_across_repeated_429s [6] PASSED 0.00s
tests.unit.test_auth0_service_mocked test_login_gives_up_and_returns_429_after_exhausting_the_backoff [7] PASSED 0.00s
tests.unit.test_auth0_service_mocked test_login_does_not_retry_invalid_credentials [8] PASSED 0.00s
tests.unit.test_batch_runner_status_label test_deselected_suite_is_not_failed [9] PASSED 0.00s
tests.unit.test_batch_runner_status_label test_empty_suite_with_other_nonzero_exit_is_still_failed [10] PASSED 0.00s
tests.unit.test_batch_runner_status_label test_collection_error_is_still_failed [11] PASSED 0.00s
tests.unit.test_batch_runner_status_label test_real_test_failure_is_still_failed [12] PASSED 0.00s
tests.unit.test_batch_runner_status_label test_passing_suite_with_nonzero_exit_is_still_failed [13] PASSED 0.00s
tests.unit.test_batch_runner_status_label test_fully_passing_suite_is_passed [14] PASSED 0.00s
tests.unit.test_generated_passwords_satisfy_auth0.TestTheAuth0PolicyThatActuallyBinds test_no_password_has_three_identical_characters_in_a_row [15] PASSED 0.04s
tests.unit.test_generated_passwords_satisfy_auth0.TestTheAuth0PolicyThatActuallyBinds test_the_repair_helper_removes_a_run [16] PASSED 0.00s
tests.unit.test_generated_passwords_satisfy_auth0.TestTheApiPolicyStillHolds test_every_password_contains[an uppercase letter-] [17] PASSED 0.01s
tests.unit.test_generated_passwords_satisfy_auth0.TestTheApiPolicyStillHolds test_every_password_contains[a digit-] [18] PASSED 0.01s
tests.unit.test_generated_passwords_satisfy_auth0.TestTheApiPolicyStillHolds test_every_password_contains[a special character-] [19] PASSED 0.01s
tests.unit.test_generated_passwords_satisfy_auth0.TestTheApiPolicyStillHolds test_every_password_contains[a lowercase letter-] [20] PASSED 0.01s
tests.unit.test_generated_passwords_satisfy_auth0.TestTheApiPolicyStillHolds test_the_length_is_respected [21] PASSED 0.00s
tests.unit.test_generated_passwords_satisfy_auth0.TestTheApiPolicyStillHolds test_it_clears_the_tenant_minimum_of_ten [22] PASSED 0.00s
tests.unit.test_generated_passwords_satisfy_auth0.TestTheApiPolicyStillHolds test_passwords_are_not_all_the_same [23] PASSED 0.00s
tests.unit.test_request_log_redaction.TestTheAuth0LoginExchange test_the_client_secret_is_not_logged [24] PASSED 0.00s
tests.unit.test_request_log_redaction.TestTheAuth0LoginExchange test_every_token_in_the_response_is_redacted [25] PASSED 0.00s
tests.unit.test_request_log_redaction.TestTheAuth0LoginExchange test_the_password_masking_that_already_worked_still_works [26] PASSED 0.00s
tests.unit.test_request_log_redaction.TestTheAuth0LoginExchange test_non_secret_fields_survive_so_the_log_stays_useful [27] PASSED 0.00s
tests.unit.test_request_log_redaction.TestTheKeyListIsNotTheOnlyDefence test_a_token_under_an_unexpected_key_is_still_redacted [28] PASSED 0.00s
tests.unit.test_request_log_redaction.TestTheKeyListIsNotTheOnlyDefence test_a_token_nested_deep_in_the_body_is_redacted [29] PASSED 0.00s
tests.unit.test_request_log_redaction.TestTheKeyListIsNotTheOnlyDefence test_a_token_embedded_in_a_sentence_is_redacted [30] PASSED 0.00s
tests.unit.test_request_log_redaction.TestTheKeyListIsNotTheOnlyDefence test_a_token_in_a_url_is_redacted [31] PASSED 0.00s
tests.unit.test_request_log_redaction.TestTheKeyListIsNotTheOnlyDefence test_the_matcher_recognises_a_real_jwt_shape [32] PASSED 0.00s
tests.unit.test_request_log_redaction.TestRedactionIsCaseInsensitiveAndTotal test_an_uppercased_key_is_still_caught [33] PASSED 0.00s
tests.unit.test_request_log_redaction.TestRedactionIsCaseInsensitiveAndTotal test_a_list_of_credentials_is_redacted_elementwise [34] PASSED 0.00s
tests.unit.test_request_log_redaction.TestRedactionIsCaseInsensitiveAndTotal test_ordinary_text_is_left_alone [35] PASSED 0.00s
tests.unit.test_request_log_redaction.TestRedactionIsCaseInsensitiveAndTotal test_a_value_that_merely_starts_with_ey_is_not_mangled [36] PASSED 0.00s
tests.unit.test_seed_guard test_seed_failure_is_a_failure_not_a_skip [37] PASSED 0.00s
tests.unit.test_seed_guard test_seed_failure_message_keeps_the_diagnostic [38] PASSED 0.00s
tests.unit.test_seed_guard test_escape_hatch_downgrades_to_skip[1] [39] PASSED 0.00s
tests.unit.test_seed_guard test_escape_hatch_downgrades_to_skip[true] [40] PASSED 0.00s
tests.unit.test_seed_guard test_escape_hatch_downgrades_to_skip[TRUE] [41] PASSED 0.00s
tests.unit.test_seed_guard test_escape_hatch_downgrades_to_skip[yes] [42] PASSED 0.00s
tests.unit.test_seed_guard test_escape_hatch_is_off_unless_explicitly_set[] [43] PASSED 0.00s
tests.unit.test_seed_guard test_escape_hatch_is_off_unless_explicitly_set[0] [44] PASSED 0.00s
tests.unit.test_seed_guard test_escape_hatch_is_off_unless_explicitly_set[false] [45] PASSED 0.00s
tests.unit.test_seed_guard test_escape_hatch_is_off_unless_explicitly_set[no] [46] PASSED 0.00s
tests.unit.test_seed_guard test_escape_hatch_is_off_unless_explicitly_set[off] [47] PASSED 0.00s
tests.unit.test_seed_guard test_precondition_missing_is_still_a_skip [48] PASSED 0.00s
tests.unit.test_token_renewal_on_401.TestARenewableTokenRecovers test_a_401_triggers_exactly_one_retry [49] PASSED 0.00s
tests.unit.test_token_renewal_on_401.TestARenewableTokenRecovers test_the_retry_carries_the_new_token [50] PASSED 0.00s
tests.unit.test_token_renewal_on_401.TestARenewableTokenRecovers test_the_replacement_is_itself_renewable [51] PASSED 0.00s
tests.unit.test_token_renewal_on_401.TestARenewableTokenRecovers test_a_healthy_request_never_re_authenticates [52] PASSED 0.00s
tests.unit.test_token_renewal_on_401.TestTheGuardOnDeliberate401s test_a_plain_token_is_never_renewed [53] PASSED 0.00s
tests.unit.test_token_renewal_on_401.TestTheGuardOnDeliberate401s test_clearing_the_token_also_clears_renewal [54] PASSED 0.00s
tests.unit.test_token_renewal_on_401.TestTheGuardOnDeliberate401s test_replacing_a_renewable_token_with_a_plain_one_disables_renewal [55] PASSED 0.00s
tests.unit.test_token_renewal_on_401.TestItCannotLoop test_a_persistent_401_is_returned_after_one_retry [56] PASSED 0.00s
tests.unit.test_token_renewal_on_401.TestItCannotLoop test_a_renewal_that_yields_nothing_returns_the_original_401 [57] PASSED 0.00s
tests.unit.test_token_renewal_on_401.TestTheTokenStillBehavesLikeAString test_it_is_a_str [58] PASSED 0.00s
tests.unit.test_token_renewal_on_401.TestTheTokenStillBehavesLikeAString test_it_formats_into_a_header_unchanged [59] PASSED 0.00s
tests.unit.test_token_renewal_on_401.TestTheTokenStillBehavesLikeAString test_it_compares_equal_to_its_value [60] PASSED 0.00s
tests.unit.test_token_renewal_on_401.TestTheRawPassthroughsAreRenewable test_get_raw_renews_on_401 [61] PASSED 0.00s
tests.unit.test_token_renewal_on_401.TestTheRawPassthroughsAreRenewable test_upload_text_raw_renews_on_401 [62] PASSED 0.00s
tests.unit.test_token_renewal_on_401.TestTheRawPassthroughsAreRenewable test_a_deliberately_bad_token_still_is_not_renewed [63] PASSED 0.00s