@@ -7,23 +7,46 @@ package fi.espoo.evaka.linkity
7
7
import fi.espoo.evaka.FullApplicationTest
8
8
import fi.espoo.evaka.attendance.*
9
9
import fi.espoo.evaka.shared.GroupId
10
+ import fi.espoo.evaka.shared.auth.UserRole
11
+ import fi.espoo.evaka.shared.auth.insertDaycareAclRow
10
12
import fi.espoo.evaka.shared.db.Database
11
13
import fi.espoo.evaka.shared.dev.*
12
14
import fi.espoo.evaka.shared.domain.FiniteDateRange
13
15
import fi.espoo.evaka.shared.domain.HelsinkiDateTime
16
+ import fi.espoo.evaka.shared.security.PilotFeature
14
17
import java.time.LocalDate
15
18
import kotlin.test.assertEquals
16
19
import kotlin.test.assertTrue
20
+ import org.junit.jupiter.api.BeforeEach
17
21
import org.junit.jupiter.api.Test
18
22
19
23
internal class LinkityServiceTest : FullApplicationTest (resetDbBeforeEach = true ) {
24
+ val employeeNumber = " SARASTIA_1"
25
+ lateinit var employee: DevEmployee
26
+ lateinit var area: DevCareArea
27
+ lateinit var daycare: DevDaycare
28
+
29
+ @BeforeEach
30
+ fun beforeEach () {
31
+ employee = DevEmployee (employeeNumber = employeeNumber)
32
+ area = DevCareArea ()
33
+ daycare =
34
+ DevDaycare (
35
+ areaId = area.id,
36
+ enabledPilotFeatures = setOf (PilotFeature .STAFF_ATTENDANCE_INTEGRATION ),
37
+ )
38
+ db.transaction { tx ->
39
+ tx.insert(area)
40
+ tx.insert(daycare)
41
+ tx.insert(employee)
42
+ tx.insertDaycareAclRow(daycare.id, employee.id, UserRole .STAFF )
43
+ }
44
+ }
45
+
20
46
@Test
21
47
fun `new plans from Linkity replace old plans` () {
22
48
val today = LocalDate .now()
23
- val employeeNumber = " SARASTIA_1"
24
- val employee = DevEmployee (employeeNumber = employeeNumber)
25
49
db.transaction { tx ->
26
- tx.insert(employee)
27
50
tx.insertStaffAttendancePlans(
28
51
sequenceOf(- 1 , 0 , 1 , 2 )
29
52
.map { days ->
@@ -67,9 +90,6 @@ internal class LinkityServiceTest : FullApplicationTest(resetDbBeforeEach = true
67
90
@Test
68
91
fun `new plans with unknown sarastia id are ignored` () {
69
92
val today = LocalDate .now()
70
- val employeeNumber = " SARASTIA_2"
71
- val employee = DevEmployee (employeeNumber = employeeNumber)
72
- db.transaction { tx -> tx.insert(employee) }
73
93
val period = FiniteDateRange (today, today.plusDays(1 ))
74
94
val shifts =
75
95
listOf (
@@ -93,9 +113,6 @@ internal class LinkityServiceTest : FullApplicationTest(resetDbBeforeEach = true
93
113
@Test
94
114
fun `new plans with invalid times are ignored` () {
95
115
val today = LocalDate .now()
96
- val employeeNumber = " SARASTIA_3"
97
- val employee = DevEmployee (employeeNumber = employeeNumber)
98
- db.transaction { tx -> tx.insert(employee) }
99
116
val period = FiniteDateRange (today, today.plusDays(1 ))
100
117
val shifts =
101
118
listOf (
@@ -119,9 +136,6 @@ internal class LinkityServiceTest : FullApplicationTest(resetDbBeforeEach = true
119
136
@Test
120
137
fun `new plans with overlapping times are ignored` () {
121
138
val today = LocalDate .now()
122
- val employeeNumber = " SARASTIA_4"
123
- val employee = DevEmployee (employeeNumber = employeeNumber)
124
- db.transaction { tx -> tx.insert(employee) }
125
139
val period = FiniteDateRange (today, today.plusDays(1 ))
126
140
val shifts =
127
141
listOf (
@@ -151,6 +165,37 @@ internal class LinkityServiceTest : FullApplicationTest(resetDbBeforeEach = true
151
165
assertTrue { plans.any { it.description == " Uusi" && it.startTime.hour == 8 } }
152
166
}
153
167
168
+ @Test
169
+ fun `new plans for employees in disabled daycares are ignored` () {
170
+ val today = LocalDate .now()
171
+ val employeeNumber2 = " SARASTIA_2"
172
+ val employee2 = DevEmployee (employeeNumber = employeeNumber2)
173
+ val daycare2 = DevDaycare (areaId = area.id, enabledPilotFeatures = setOf ())
174
+ db.transaction { tx ->
175
+ tx.insert(daycare2)
176
+ tx.insert(employee2)
177
+ tx.insertDaycareAclRow(daycare2.id, employee2.id, UserRole .STAFF )
178
+ }
179
+ val period = FiniteDateRange (today, today.plusDays(1 ))
180
+ val shifts =
181
+ listOf (
182
+ Shift (
183
+ employeeNumber2,
184
+ " WORK_SHIFT_1" ,
185
+ HelsinkiDateTime .of(today.atTime(8 , 0 )),
186
+ HelsinkiDateTime .of(today.atTime(16 , 0 )),
187
+ ShiftType .PRESENT ,
188
+ " Uusi" ,
189
+ )
190
+ )
191
+ val client = MockLinkityClient (shifts)
192
+ updateStaffAttendancePlansFromLinkity(period, db, client)
193
+
194
+ val plans = db.transaction { tx -> tx.findStaffAttendancePlansBy() }
195
+ // There will be no plans
196
+ assertEquals(0 , plans.size)
197
+ }
198
+
154
199
private fun upsertStaffAttendance (
155
200
tx : Database .Transaction ,
156
201
employee : DevEmployee ,
@@ -176,18 +221,19 @@ internal class LinkityServiceTest : FullApplicationTest(resetDbBeforeEach = true
176
221
@Test
177
222
fun `relevant attendances are sent to Linkity` () {
178
223
val now = HelsinkiDateTime .now()
179
- val employeeNumber = " SARASTIA_1"
180
224
db.transaction { tx ->
181
- val area = DevCareArea ()
182
- val unit = DevDaycare (areaId = area.id)
183
- val group = DevDaycareGroup (daycareId = unit.id)
184
- val employee = DevEmployee (employeeNumber = employeeNumber)
185
- val employee2 = DevEmployee (employeeNumber = null )
186
- tx.insert(area)
187
- tx.insert(unit)
225
+ val group = DevDaycareGroup (daycareId = daycare.id)
226
+ val employee2 = DevEmployee (employeeNumber = " SARASTIA_2" )
227
+ val employee3 = DevEmployee (employeeNumber = null )
228
+ val daycare2 = DevDaycare (areaId = area.id, enabledPilotFeatures = setOf ())
229
+ val group2 = DevDaycareGroup (daycareId = daycare2.id)
230
+ tx.insert(daycare2)
188
231
tx.insert(group)
189
- tx.insert(employee )
232
+ tx.insert(group2 )
190
233
tx.insert(employee2)
234
+ tx.insert(employee3)
235
+ tx.insertDaycareAclRow(daycare2.id, employee2.id, UserRole .STAFF )
236
+ tx.insertDaycareAclRow(daycare.id, employee3.id, UserRole .STAFF )
191
237
tx.insertStaffAttendancePlans(
192
238
listOf (
193
239
StaffAttendancePlan (
@@ -270,12 +316,21 @@ internal class LinkityServiceTest : FullApplicationTest(resetDbBeforeEach = true
270
316
// 7th
271
317
upsertStaffAttendance(
272
318
tx,
273
- employee2 ,
319
+ employee3 ,
274
320
group.id,
275
321
now.minusHours(4 ),
276
322
now.minusHours(3 ),
277
323
StaffAttendanceType .PRESENT ,
278
324
)
325
+ // 8th
326
+ upsertStaffAttendance(
327
+ tx,
328
+ employee2,
329
+ group2.id,
330
+ now.minusHours(5 ),
331
+ now.minusHours(4 ),
332
+ StaffAttendanceType .PRESENT ,
333
+ )
279
334
}
280
335
val period = FiniteDateRange (now.minusDays(1 ).toLocalDate(), now.toLocalDate())
281
336
@@ -316,6 +371,7 @@ internal class LinkityServiceTest : FullApplicationTest(resetDbBeforeEach = true
316
371
),
317
372
// 6th attendance is not included because it has not ended yet
318
373
// 7th attendance is not included because the employee has no employee number
374
+ // 8th attendance is not included because the employee is not in an enabled daycare
319
375
)
320
376
321
377
assertEquals(expected, client.getPreviouslyPostedWorkLogs().toSet())
0 commit comments