예제 #1
0
def test_add_term_students_different_school(client: TestClient,
                                            superuser_token_headers: dict[str,
                                                                          str],
                                            db: Session) -> None:
    term = create_random_term(db)
    students = [
        create_random_user(db, type="student", school_id=term.year.school_id),
        create_random_user(db, type="student", school_id=term.year.school_id),
    ]
    data = [user.id for user in students]
    student_different_school = create_random_user(
        db, type="student", school_id=create_random_school(db).id)
    data.append(student_different_school.id)
    r = client.post(f"{settings.API_V1_STR}/terms/{term.id}/students",
                    headers=superuser_token_headers,
                    json=data)
    assert r.status_code == 207
    response = r.json()
    assert response.get("errors").get(
        "different schools")[0] == student_different_school.id
    for user in students:
        student = crud.student.get(db, id=user.id)
        assert student
        assert student.user_id in response.get("success")
        assert student.term_id == term.id
예제 #2
0
def test_create_school(db: Session) -> None:
    name = random_lower_string()
    head = random_lower_string()
    school = create_random_school(db=db, name=name, head=head)
    assert school
    assert school.name == name
    assert school.head == head
예제 #3
0
def test_add_division_students_different_school(client: TestClient,
                                                superuser_token_headers: dict[
                                                    str, str],
                                                db: Session) -> None:
    course = create_random_course(db)
    division = create_random_division(db, course_id=course.id)
    students = [
        create_random_student(db,
                              school_id=course.term.year.school_id,
                              term_id=course.term_id),
        create_random_student(db,
                              school_id=course.term.year.school_id,
                              term_id=course.term_id),
    ]
    data = [student.user_id for student in students]
    student_different_school = create_random_user(
        db, type="student", school_id=create_random_school(db).id)
    data.append(student_different_school.id)
    r = client.post(f"{settings.API_V1_STR}/divisions/{division.id}/students",
                    headers=superuser_token_headers,
                    json=data)
    assert r.status_code == 207
    response = r.json()
    assert response.get("errors").get(
        "different schools")[0] == student_different_school.id
    for student in students:
        assert student.user_id in response.get("success")
예제 #4
0
def test_get_school_invalid_student(client: TestClient, db: Session) -> None:
    school = create_random_school(db)
    admin_user_token_headers = authentication_token_from_email(
        client=client, db=db, email=random_email())
    r = client.get(f"{settings.API_V1_STR}/schools/{school.id}",
                   headers=admin_user_token_headers)
    assert r.status_code == 403
예제 #5
0
def test_update_school(db: Session) -> None:
    school = create_random_school(db)
    name = random_lower_string()
    school_in = SchoolUpdate(name=name)
    school = crud.school.update(db=db, db_obj=school, obj_in=school_in)
    assert school
    assert school.name == name
예제 #6
0
def test_create_school_duplicate_head(client: TestClient,
                                      superuser_token_headers: dict[str, str],
                                      db: Session) -> None:
    school = create_random_school(db)
    data = {"name": random_lower_string(), "head": school.head}
    r = client.post(f"{settings.API_V1_STR}/schools/",
                    headers=superuser_token_headers,
                    json=data)
    assert r.status_code == 409
예제 #7
0
def test_delete_school(client: TestClient, superuser_token_headers: dict[str,
                                                                         str],
                       db: Session) -> None:
    school = create_random_school(db)
    r = client.delete(f"{settings.API_V1_STR}/schools/{school.id}",
                      headers=superuser_token_headers)
    assert r.status_code == 200
    deleted_school = crud.school.get(db, school.id)
    assert deleted_school is None
예제 #8
0
def test_get_school_superuser(client: TestClient,
                              superuser_token_headers: dict[str, str],
                              db: Session) -> None:
    school = create_random_school(db)
    r = client.get(f"{settings.API_V1_STR}/schools/{school.id}",
                   headers=superuser_token_headers)
    assert r.status_code == 200
    fetched_school = r.json()
    assert fetched_school
    compare_api_and_db_query_results(api_result=fetched_school,
                                     db_dict=to_json(school))
예제 #9
0
def test_get_school_valid_student(client: TestClient, db: Session) -> None:
    school = create_random_school(db)
    admin_user_token_headers = authentication_token_from_email(
        client=client, db=db, email=random_email(), school_id=school.id)
    r = client.get(f"{settings.API_V1_STR}/schools/{school.id}",
                   headers=admin_user_token_headers)
    assert r.status_code == 200
    fetched_school = r.json()
    assert fetched_school
    compare_api_and_db_query_results(api_result=fetched_school,
                                     db_dict=to_json(school))
예제 #10
0
def test_get_all_timeslots(client: TestClient,
                           superuser_token_headers: dict[str, str],
                           db: Session) -> None:
    school = create_random_school(db)
    create_random_timeslot(db, school_id=school.id)
    create_random_timeslot(db, school_id=school.id)
    r = client.get(f"{settings.API_V1_STR}/schools/{school.id}/timeslots",
                   headers=superuser_token_headers)
    assert r.status_code == 200
    fetched_timeslots = r.json()
    assert fetched_timeslots
    assert len(fetched_timeslots) == 2
예제 #11
0
def test_get_all_professors(client: TestClient,
                            superuser_token_headers: dict[str, str],
                            db: Session) -> None:
    school = create_random_school(db)
    school_professor = create_random_user(db=db,
                                          type="professor",
                                          school_id=school.id)
    r = client.get(f"{settings.API_V1_STR}/schools/{school.id}/professors",
                   headers=superuser_token_headers)
    assert r.status_code == 200
    fetched_professors = r.json()
    assert fetched_professors
    compare_api_and_db_query_results(api_result=fetched_professors[-1],
                                     db_dict=to_json(school_professor))
예제 #12
0
def test_update_school(client: TestClient, superuser_token_headers: dict[str,
                                                                         str],
                       db: Session) -> None:
    school = create_random_school(db)
    new_name = random_lower_string()
    data = {"name": new_name, "head": school.head}
    r = client.put(f"{settings.API_V1_STR}/schools/{school.id}",
                   headers=superuser_token_headers,
                   json=data)
    assert r.status_code == 200
    fetched_school = r.json()
    db.refresh(school)
    assert fetched_school
    compare_api_and_db_query_results(api_result=fetched_school,
                                     db_dict=to_json(school))