45 lines
1.4 KiB
Python
45 lines
1.4 KiB
Python
from __future__ import annotations
|
|
|
|
from app.extensions import db
|
|
from app.models import AttendanceEvent, AttendanceType, Person, Role
|
|
from tests.conftest import create_account, login
|
|
|
|
|
|
def test_operator_can_record_attendance(app, client):
|
|
with app.app_context():
|
|
create_account(username="operator", role=Role.OPERATOR.value)
|
|
person = Person(full_name="Ada Lovelace", employee_id="EMP-001")
|
|
db.session.add(person)
|
|
db.session.commit()
|
|
person_id = person.id
|
|
|
|
login(client, "operator")
|
|
response = client.post(
|
|
"/attendance/events",
|
|
data={"person_id": person_id, "event_type": AttendanceType.CHECK_IN.value},
|
|
headers={"Accept": "application/json"},
|
|
)
|
|
|
|
assert response.status_code == 200
|
|
assert response.get_json()["event_type"] == "Check in"
|
|
with app.app_context():
|
|
assert AttendanceEvent.query.count() == 1
|
|
|
|
|
|
def test_viewer_cannot_record_attendance(app, client):
|
|
with app.app_context():
|
|
create_account(username="viewer", role=Role.VIEWER.value)
|
|
person = Person(full_name="Grace Hopper", employee_id="EMP-002")
|
|
db.session.add(person)
|
|
db.session.commit()
|
|
person_id = person.id
|
|
|
|
login(client, "viewer")
|
|
response = client.post(
|
|
"/attendance/events",
|
|
data={"person_id": person_id, "event_type": AttendanceType.CHECK_OUT.value},
|
|
headers={"Accept": "application/json"},
|
|
)
|
|
|
|
assert response.status_code == 403
|