"""Tests for the shopfloor TV feed (/api/notifications/shopfloor). Recognition AND training notifications that name several comma-joined SSOs fan out into one card per employee; every other type stays a single card. Mirrors classic apishopfloor.asp, which splits both types. """ import pytest from plugins.notifications.models import Notification, NotificationType def _make_type(db, typename, typecolor): t = NotificationType(typename=typename, typecolor=typecolor, isactive=True) db.session.add(t) db.session.commit() return t def _make_shopfloor_note(db, ntype, employeesso, employeename): n = Notification( notificationtypeid=ntype.notificationtypeid, notification='msg', businessunitid=None, isactive=True, isshopfloor=True, employeesso=employeesso, employeename=employeename, ) db.session.add(n) db.session.commit() return n @pytest.mark.parametrize('typecolor', ['recognition', 'training']) def test_multi_employee_split_into_one_card_each(client, db, typecolor): """A recognition/training note with two SSOs yields two current cards.""" ntype = _make_type(db, typecolor.capitalize(), typecolor) _make_shopfloor_note(db, ntype, '111,222', 'Alice, Bob') resp = client.get('/api/notifications/shopfloor') assert resp.status_code == 200 current = resp.get_json()['data']['current'] assert len(current) == 2 assert {c['employeesso'] for c in current} == {'111', '222'} assert {c['employeename'] for c in current} == {'Alice', 'Bob'} def test_non_split_type_stays_single_card(client, db): """A non recognition/training type is not fanned out, even with many SSOs.""" ntype = _make_type(db, 'Awareness', 'info') _make_shopfloor_note(db, ntype, '111,222', 'Alice, Bob') resp = client.get('/api/notifications/shopfloor') assert resp.status_code == 200 current = resp.get_json()['data']['current'] assert len(current) == 1 assert current[0]['employeesso'] == '111,222' def test_single_employee_recognition_stays_single_card(client, db): """One SSO produces one card (no spurious split on a lone employee).""" ntype = _make_type(db, 'Recognition', 'recognition') _make_shopfloor_note(db, ntype, '111', 'Alice') resp = client.get('/api/notifications/shopfloor') assert resp.status_code == 200 current = resp.get_json()['data']['current'] assert len(current) == 1 assert current[0]['employeesso'] == '111'