Skip to content

Commit b2267b6

Browse files
authored
Limit access to group account messages based on group assignment date
1 parent af51756 commit b2267b6

17 files changed

+500
-140
lines changed

frontend/src/e2e-test/dev-api/fixtures.ts

+15-5
Original file line numberDiff line numberDiff line change
@@ -1315,7 +1315,11 @@ export class FamilyBuilder extends FixtureBuilder<Family> {
13151315

13161316
export class EmployeeBuilder extends FixtureBuilder<DevEmployee> {
13171317
daycareAcl: { unitId: string; role: ScopedRole }[]
1318-
groupAcl: string[]
1318+
groupAcl: {
1319+
groupId: string
1320+
created?: HelsinkiDateTime
1321+
updated?: HelsinkiDateTime
1322+
}[]
13191323

13201324
constructor(data: DevEmployee) {
13211325
super(data)
@@ -1370,8 +1374,12 @@ export class EmployeeBuilder extends FixtureBuilder<DevEmployee> {
13701374
return this
13711375
}
13721376

1373-
withGroupAcl(groupId: string): this {
1374-
this.groupAcl.push(groupId)
1377+
withGroupAcl(
1378+
groupId: string,
1379+
created?: HelsinkiDateTime,
1380+
updated?: HelsinkiDateTime
1381+
): this {
1382+
this.groupAcl.push({ groupId, created, updated })
13751383
return this
13761384
}
13771385

@@ -1387,9 +1395,11 @@ export class EmployeeBuilder extends FixtureBuilder<DevEmployee> {
13871395
}
13881396
if (this.groupAcl.length > 0) {
13891397
await createDaycareGroupAclRows({
1390-
body: this.groupAcl.map((groupId) => ({
1398+
body: this.groupAcl.map(({ groupId, created, updated }) => ({
13911399
groupId,
1392-
employeeId: this.data.id
1400+
employeeId: this.data.id,
1401+
created: created ?? HelsinkiDateTime.now(),
1402+
updated: updated ?? HelsinkiDateTime.now()
13931403
}))
13941404
})
13951405
}

frontend/src/e2e-test/generated/api-types.ts

+11
Original file line numberDiff line numberDiff line change
@@ -492,8 +492,10 @@ export interface DevDaycareGroup {
492492
* Generated from fi.espoo.evaka.shared.dev.DevDaycareGroupAcl
493493
*/
494494
export interface DevDaycareGroupAcl {
495+
created: HelsinkiDateTime
495496
employeeId: UUID
496497
groupId: UUID
498+
updated: HelsinkiDateTime
497499
}
498500

499501
/**
@@ -1316,6 +1318,15 @@ export function deserializeJsonDevDaycareGroup(json: JsonOf<DevDaycareGroup>): D
13161318
}
13171319

13181320

1321+
export function deserializeJsonDevDaycareGroupAcl(json: JsonOf<DevDaycareGroupAcl>): DevDaycareGroupAcl {
1322+
return {
1323+
...json,
1324+
created: HelsinkiDateTime.parseIso(json.created),
1325+
updated: HelsinkiDateTime.parseIso(json.updated)
1326+
}
1327+
}
1328+
1329+
13191330
export function deserializeJsonDevDaycareGroupPlacement(json: JsonOf<DevDaycareGroupPlacement>): DevDaycareGroupPlacement {
13201331
return {
13211332
...json,

frontend/src/e2e-test/specs/6_mobile/messages.spec.ts

+3-3
Original file line numberDiff line numberDiff line change
@@ -132,9 +132,9 @@ beforeEach(async () => {
132132
roles: []
133133
})
134134
.withDaycareAcl(testDaycare.id, 'STAFF')
135-
.withGroupAcl(daycareGroup.id)
136-
.withGroupAcl(daycareGroup2.id)
137-
.withGroupAcl(daycareGroup3.id)
135+
.withGroupAcl(daycareGroup.id, mockedDateAt10)
136+
.withGroupAcl(daycareGroup2.id, mockedDateAt10)
137+
.withGroupAcl(daycareGroup3.id, mockedDateAt10)
138138
.save()
139139

140140
const staff2 = await Fixture.employee({

frontend/src/e2e-test/specs/7_messaging/messaging-by-staff.spec.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,7 @@ beforeEach(async () => {
7777

7878
staff = await Fixture.employee()
7979
.staff(testDaycare.id)
80-
.withGroupAcl(testDaycareGroup.id)
80+
.withGroupAcl(testDaycareGroup.id, mockedDateAt10, mockedDateAt10)
8181
.save()
8282

8383
unitSupervisor = await Fixture.employee()

frontend/src/e2e-test/specs/7_messaging/municipal-messaging.spec.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -120,7 +120,7 @@ beforeEach(async () => {
120120
messenger = await Fixture.employee().messenger().save()
121121
staff = await Fixture.employee()
122122
.staff(testDaycare.id)
123-
.withGroupAcl(testDaycareGroup.id)
123+
.withGroupAcl(testDaycareGroup.id, messageSendTime, messageSendTime)
124124
.save()
125125
})
126126

service/src/integrationTest/kotlin/fi/espoo/evaka/attendance/MobileRealtimeStaffAttendanceControllerIntegrationTest.kt

+26-26
Original file line numberDiff line numberDiff line change
@@ -84,8 +84,8 @@ class MobileRealtimeStaffAttendanceControllerIntegrationTest :
8484
tx.insert(employee)
8585
tx.insertDaycareAclRow(testDaycare.id, employee.id, UserRole.STAFF)
8686
tx.insertDaycareAclRow(testDaycare2.id, employee.id, UserRole.STAFF)
87-
tx.insertDaycareGroupAcl(testDaycare.id, employee.id, listOf(groupId))
88-
tx.insertDaycareGroupAcl(testDaycare2.id, employee.id, listOf(groupId2))
87+
tx.insertDaycareGroupAcl(testDaycare.id, employee.id, listOf(groupId), now)
88+
tx.insertDaycareGroupAcl(testDaycare2.id, employee.id, listOf(groupId2), now)
8989

9090
tx.markStaffArrival(
9191
employee.id,
@@ -110,7 +110,7 @@ class MobileRealtimeStaffAttendanceControllerIntegrationTest :
110110
tx.insert(employee)
111111
tx.insert(DevEmployeePin(userId = employee.id, pin = pinCode))
112112
tx.insertDaycareAclRow(testDaycare.id, employee.id, UserRole.STAFF)
113-
tx.insertDaycareGroupAcl(testDaycare.id, employee.id, listOf(groupId))
113+
tx.insertDaycareGroupAcl(testDaycare.id, employee.id, listOf(groupId), now)
114114
}
115115

116116
val arrivalTime = HelsinkiDateTime.of(today, LocalTime.of(8, 0))
@@ -146,7 +146,7 @@ class MobileRealtimeStaffAttendanceControllerIntegrationTest :
146146
tx.insert(employee)
147147
tx.insert(DevEmployeePin(userId = employee.id, pin = pinCode))
148148
tx.insertDaycareAclRow(testDaycare.id, employee.id, UserRole.STAFF)
149-
tx.insertDaycareGroupAcl(testDaycare.id, employee.id, listOf(groupId))
149+
tx.insertDaycareGroupAcl(testDaycare.id, employee.id, listOf(groupId), now)
150150
}
151151

152152
val arrivalTime = HelsinkiDateTime.of(today, LocalTime.of(8, 0))
@@ -176,7 +176,7 @@ class MobileRealtimeStaffAttendanceControllerIntegrationTest :
176176
tx.insert(employee)
177177
tx.insert(DevEmployeePin(userId = employee.id, pin = pinCode))
178178
tx.insertDaycareAclRow(testDaycare.id, employee.id, UserRole.STAFF)
179-
tx.insertDaycareGroupAcl(testDaycare.id, employee.id, listOf(groupId))
179+
tx.insertDaycareGroupAcl(testDaycare.id, employee.id, listOf(groupId), now)
180180
}
181181

182182
val arrivalTime = HelsinkiDateTime.of(today, LocalTime.of(8, 0))
@@ -211,7 +211,7 @@ class MobileRealtimeStaffAttendanceControllerIntegrationTest :
211211
tx.insert(employee)
212212
tx.insert(DevEmployeePin(userId = employee.id, pin = pinCode))
213213
tx.insertDaycareAclRow(testDaycare.id, employee.id, UserRole.STAFF)
214-
tx.insertDaycareGroupAcl(testDaycare.id, employee.id, listOf(groupId))
214+
tx.insertDaycareGroupAcl(testDaycare.id, employee.id, listOf(groupId), now)
215215
tx.insert(
216216
DevStaffAttendancePlan(
217217
employeeId = employee.id,
@@ -243,7 +243,7 @@ class MobileRealtimeStaffAttendanceControllerIntegrationTest :
243243
tx.insert(employee)
244244
tx.insert(DevEmployeePin(userId = employee.id, pin = pinCode))
245245
tx.insertDaycareAclRow(testDaycare.id, employee.id, UserRole.STAFF)
246-
tx.insertDaycareGroupAcl(testDaycare.id, employee.id, listOf(groupId))
246+
tx.insertDaycareGroupAcl(testDaycare.id, employee.id, listOf(groupId), now)
247247
tx.insert(
248248
DevStaffAttendancePlan(
249249
employeeId = employee.id,
@@ -276,7 +276,7 @@ class MobileRealtimeStaffAttendanceControllerIntegrationTest :
276276
tx.insert(employee)
277277
tx.insert(DevEmployeePin(userId = employee.id, pin = pinCode))
278278
tx.insertDaycareAclRow(testDaycare.id, employee.id, UserRole.STAFF)
279-
tx.insertDaycareGroupAcl(testDaycare.id, employee.id, listOf(groupId))
279+
tx.insertDaycareGroupAcl(testDaycare.id, employee.id, listOf(groupId), now)
280280
tx.insert(
281281
DevStaffAttendancePlan(
282282
employeeId = employee.id,
@@ -309,7 +309,7 @@ class MobileRealtimeStaffAttendanceControllerIntegrationTest :
309309
tx.insert(employee)
310310
tx.insert(DevEmployeePin(userId = employee.id, pin = pinCode))
311311
tx.insertDaycareAclRow(testDaycare.id, employee.id, UserRole.STAFF)
312-
tx.insertDaycareGroupAcl(testDaycare.id, employee.id, listOf(groupId))
312+
tx.insertDaycareGroupAcl(testDaycare.id, employee.id, listOf(groupId), now)
313313
tx.insert(
314314
DevStaffAttendancePlan(
315315
employeeId = employee.id,
@@ -351,7 +351,7 @@ class MobileRealtimeStaffAttendanceControllerIntegrationTest :
351351
tx.insert(employee)
352352
tx.insert(DevEmployeePin(userId = employee.id, pin = pinCode))
353353
tx.insertDaycareAclRow(testDaycare.id, employee.id, UserRole.STAFF)
354-
tx.insertDaycareGroupAcl(testDaycare.id, employee.id, listOf(groupId))
354+
tx.insertDaycareGroupAcl(testDaycare.id, employee.id, listOf(groupId), now)
355355
tx.insert(
356356
DevStaffAttendancePlan(
357357
employeeId = employee.id,
@@ -376,7 +376,7 @@ class MobileRealtimeStaffAttendanceControllerIntegrationTest :
376376
tx.insert(employee)
377377
tx.insert(DevEmployeePin(userId = employee.id, pin = pinCode))
378378
tx.insertDaycareAclRow(testDaycare.id, employee.id, UserRole.STAFF)
379-
tx.insertDaycareGroupAcl(testDaycare.id, employee.id, listOf(groupId))
379+
tx.insertDaycareGroupAcl(testDaycare.id, employee.id, listOf(groupId), now)
380380
}
381381

382382
val lastLoginBeforeArrival = db.read { db -> db.getEmployeeLastLogin(employee.id) }
@@ -402,7 +402,7 @@ class MobileRealtimeStaffAttendanceControllerIntegrationTest :
402402
tx.insert(employee)
403403
tx.insert(DevEmployeePin(userId = employee.id, pin = pinCode))
404404
tx.insertDaycareAclRow(testDaycare.id, employee.id, UserRole.STAFF)
405-
tx.insertDaycareGroupAcl(testDaycare.id, employee.id, listOf(groupId))
405+
tx.insertDaycareGroupAcl(testDaycare.id, employee.id, listOf(groupId), now)
406406
tx.insert(
407407
DevStaffAttendancePlan(
408408
employeeId = employee.id,
@@ -438,7 +438,7 @@ class MobileRealtimeStaffAttendanceControllerIntegrationTest :
438438
tx.insert(employee)
439439
tx.insert(DevEmployeePin(userId = employee.id, pin = pinCode))
440440
tx.insertDaycareAclRow(testDaycare.id, employee.id, UserRole.STAFF)
441-
tx.insertDaycareGroupAcl(testDaycare.id, employee.id, listOf(groupId))
441+
tx.insertDaycareGroupAcl(testDaycare.id, employee.id, listOf(groupId), now)
442442
tx.insert(
443443
DevStaffAttendancePlan(
444444
employeeId = employee.id,
@@ -464,7 +464,7 @@ class MobileRealtimeStaffAttendanceControllerIntegrationTest :
464464
tx.insert(employee)
465465
tx.insert(DevEmployeePin(userId = employee.id, pin = pinCode))
466466
tx.insertDaycareAclRow(testDaycare.id, employee.id, UserRole.STAFF)
467-
tx.insertDaycareGroupAcl(testDaycare.id, employee.id, listOf(groupId))
467+
tx.insertDaycareGroupAcl(testDaycare.id, employee.id, listOf(groupId), now)
468468
tx.insert(
469469
DevStaffAttendancePlan(
470470
employeeId = employee.id,
@@ -488,7 +488,7 @@ class MobileRealtimeStaffAttendanceControllerIntegrationTest :
488488
tx.insert(employee)
489489
tx.insert(DevEmployeePin(userId = employee.id, pin = pinCode))
490490
tx.insertDaycareAclRow(testDaycare.id, employee.id, UserRole.STAFF)
491-
tx.insertDaycareGroupAcl(testDaycare.id, employee.id, listOf(groupId))
491+
tx.insertDaycareGroupAcl(testDaycare.id, employee.id, listOf(groupId), now)
492492
tx.insert(
493493
DevStaffAttendancePlan(
494494
employeeId = employee.id,
@@ -531,7 +531,7 @@ class MobileRealtimeStaffAttendanceControllerIntegrationTest :
531531
tx.insert(employee)
532532
tx.insert(DevEmployeePin(userId = employee.id, pin = pinCode))
533533
tx.insertDaycareAclRow(testDaycare.id, employee.id, UserRole.STAFF)
534-
tx.insertDaycareGroupAcl(testDaycare.id, employee.id, listOf(groupId))
534+
tx.insertDaycareGroupAcl(testDaycare.id, employee.id, listOf(groupId), now)
535535
tx.insert(
536536
DevStaffAttendancePlan(
537537
employeeId = employee.id,
@@ -570,7 +570,7 @@ class MobileRealtimeStaffAttendanceControllerIntegrationTest :
570570
tx.insert(employee)
571571
tx.insert(DevEmployeePin(userId = employee.id, pin = pinCode))
572572
tx.insertDaycareAclRow(testDaycare.id, employee.id, UserRole.STAFF)
573-
tx.insertDaycareGroupAcl(testDaycare.id, employee.id, listOf(groupId))
573+
tx.insertDaycareGroupAcl(testDaycare.id, employee.id, listOf(groupId), now)
574574
tx.insert(
575575
DevStaffAttendancePlan(
576576
employeeId = employee.id,
@@ -596,7 +596,7 @@ class MobileRealtimeStaffAttendanceControllerIntegrationTest :
596596
tx.insert(employee)
597597
tx.insert(DevEmployeePin(userId = employee.id, pin = pinCode))
598598
tx.insertDaycareAclRow(testDaycare.id, employee.id, UserRole.STAFF)
599-
tx.insertDaycareGroupAcl(testDaycare.id, employee.id, listOf(groupId))
599+
tx.insertDaycareGroupAcl(testDaycare.id, employee.id, listOf(groupId), now)
600600
tx.insert(
601601
DevStaffAttendancePlan(
602602
employeeId = employee.id,
@@ -629,7 +629,7 @@ class MobileRealtimeStaffAttendanceControllerIntegrationTest :
629629
tx.insert(employee)
630630
tx.insert(DevEmployeePin(userId = employee.id, pin = pinCode))
631631
tx.insertDaycareAclRow(testDaycare.id, employee.id, UserRole.STAFF)
632-
tx.insertDaycareGroupAcl(testDaycare.id, employee.id, listOf(groupId))
632+
tx.insertDaycareGroupAcl(testDaycare.id, employee.id, listOf(groupId), now)
633633
tx.insert(
634634
DevStaffAttendancePlan(
635635
employeeId = employee.id,
@@ -671,7 +671,7 @@ class MobileRealtimeStaffAttendanceControllerIntegrationTest :
671671
tx.insert(employee)
672672
tx.insert(DevEmployeePin(userId = employee.id, pin = pinCode))
673673
tx.insertDaycareAclRow(testDaycare.id, employee.id, UserRole.STAFF)
674-
tx.insertDaycareGroupAcl(testDaycare.id, employee.id, listOf(groupId))
674+
tx.insertDaycareGroupAcl(testDaycare.id, employee.id, listOf(groupId), now)
675675
tx.insert(
676676
DevStaffAttendancePlan(
677677
employeeId = employee.id,
@@ -708,7 +708,7 @@ class MobileRealtimeStaffAttendanceControllerIntegrationTest :
708708
tx.insert(employee)
709709
tx.insert(DevEmployeePin(userId = employee.id, pin = pinCode))
710710
tx.insertDaycareAclRow(testDaycare.id, employee.id, UserRole.STAFF)
711-
tx.insertDaycareGroupAcl(testDaycare.id, employee.id, listOf(groupId))
711+
tx.insertDaycareGroupAcl(testDaycare.id, employee.id, listOf(groupId), now)
712712
tx.insert(
713713
DevStaffAttendancePlan(
714714
employeeId = employee.id,
@@ -757,7 +757,7 @@ class MobileRealtimeStaffAttendanceControllerIntegrationTest :
757757
tx.insert(employee)
758758
tx.insert(DevEmployeePin(userId = employee.id, pin = pinCode))
759759
tx.insertDaycareAclRow(testDaycare.id, employee.id, UserRole.STAFF)
760-
tx.insertDaycareGroupAcl(testDaycare.id, employee.id, listOf(groupId))
760+
tx.insertDaycareGroupAcl(testDaycare.id, employee.id, listOf(groupId), now)
761761
tx.insert(
762762
DevStaffAttendancePlan(
763763
employeeId = employee.id,
@@ -792,7 +792,7 @@ class MobileRealtimeStaffAttendanceControllerIntegrationTest :
792792
tx.insert(employee)
793793
tx.insert(DevEmployeePin(userId = employee.id, pin = pinCode))
794794
tx.insertDaycareAclRow(testDaycare.id, employee.id, UserRole.STAFF)
795-
tx.insertDaycareGroupAcl(testDaycare.id, employee.id, listOf(groupId))
795+
tx.insertDaycareGroupAcl(testDaycare.id, employee.id, listOf(groupId), now)
796796
tx.insert(
797797
DevStaffAttendancePlan(
798798
employeeId = employee.id,
@@ -828,7 +828,7 @@ class MobileRealtimeStaffAttendanceControllerIntegrationTest :
828828
tx.insert(employee)
829829
tx.insert(DevEmployeePin(userId = employee.id, pin = pinCode))
830830
tx.insertDaycareAclRow(testDaycare.id, employee.id, UserRole.STAFF)
831-
tx.insertDaycareGroupAcl(testDaycare.id, employee.id, listOf(groupId))
831+
tx.insertDaycareGroupAcl(testDaycare.id, employee.id, listOf(groupId), now)
832832
tx.insert(
833833
DevStaffAttendancePlan(
834834
employeeId = employee.id,
@@ -873,7 +873,7 @@ class MobileRealtimeStaffAttendanceControllerIntegrationTest :
873873
tx.insert(employee)
874874
tx.insert(DevEmployeePin(userId = employee.id, pin = pinCode))
875875
tx.insertDaycareAclRow(testDaycare.id, employee.id, UserRole.STAFF)
876-
tx.insertDaycareGroupAcl(testDaycare.id, employee.id, listOf(groupId))
876+
tx.insertDaycareGroupAcl(testDaycare.id, employee.id, listOf(groupId), now)
877877
tx.insert(
878878
DevStaffAttendancePlan(
879879
employeeId = employee.id,
@@ -908,7 +908,7 @@ class MobileRealtimeStaffAttendanceControllerIntegrationTest :
908908
tx.insert(employee)
909909
tx.insert(DevEmployeePin(userId = employee.id, pin = pinCode))
910910
tx.insertDaycareAclRow(testDaycare.id, employee.id, UserRole.STAFF)
911-
tx.insertDaycareGroupAcl(testDaycare.id, employee.id, listOf(groupId))
911+
tx.insertDaycareGroupAcl(testDaycare.id, employee.id, listOf(groupId), now)
912912
tx.insert(
913913
DevStaffAttendancePlan(
914914
employeeId = employee.id,

service/src/integrationTest/kotlin/fi/espoo/evaka/attendance/RealtimeStaffAttendanceControllerIntegrationTest.kt

+1-1
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@ class RealtimeStaffAttendanceControllerIntegrationTest :
6363
tx.insertDaycareAclRow(testDaycare2.id, supervisor.id, UserRole.UNIT_SUPERVISOR)
6464
tx.insertDaycareAclRow(testDaycare.id, staff.id, UserRole.STAFF)
6565
tx.insertDaycareAclRow(testDaycare2.id, staff.id, UserRole.STAFF)
66-
tx.insertDaycareGroupAcl(testDaycare.id, staff.id, listOf(groupId1))
66+
tx.insertDaycareGroupAcl(testDaycare.id, staff.id, listOf(groupId1), now)
6767

6868
tx.upsertOccupancyCoefficient(
6969
OccupancyCoefficientUpsert(testDaycare.id, staff.id, BigDecimal(7))

service/src/integrationTest/kotlin/fi/espoo/evaka/messaging/MessageAccountQueriesTest.kt

+1-1
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,7 @@ class MessageAccountQueriesTest : PureJdbiTest(resetDbBeforeEach = true) {
8484
it.insertDaycareAclRow(daycareId, supervisorId, UserRole.UNIT_SUPERVISOR)
8585

8686
it.insertDaycareAclRow(daycareId, employee1Id, UserRole.STAFF)
87-
it.insertDaycareGroupAcl(daycareId, employee1Id, listOf(groupId))
87+
it.insertDaycareGroupAcl(daycareId, employee1Id, listOf(groupId), clock.now())
8888

8989
// employee2 has no groups
9090
it.insertDaycareAclRow(daycareId, employee2Id, UserRole.STAFF)

0 commit comments

Comments
 (0)