11package server.database
22
33import ServerDatabase
4+ import data.BlockingRecurrenceYearly
5+ import data.BlockingTypes
46import database.entity.Area
7+ import database.entity.Blocking
58import database.entity.Path
69import database.entity.Sector
710import database.entity.Zone
811import java.io.File
912import java.net.URL
13+ import java.time.Instant
14+ import java.time.Month
1015import kotlin.test.Test
1116import kotlin.test.assertContentEquals
1217import kotlin.test.assertEquals
1318import kotlin.test.assertNotNull
19+ import kotlin.test.assertNull
1420import server.DataProvider
1521import server.base.ApplicationTestBase
1622import storage.Storage
1723
1824class TestDatabase : ApplicationTestBase () {
25+ private suspend fun createTestArea (): Area = ServerDatabase .instance.query {
26+ Area .new {
27+ displayName = DataProvider .SampleArea .displayName
28+ webUrl = URL (DataProvider .SampleArea .webUrl)
29+
30+ // Required, but not used
31+ image = File (Storage .ImagesDir , " abc" )
32+ }
33+ }
34+
35+ private suspend fun createTestZone (area : Area ): Zone = ServerDatabase .instance.query {
36+ Zone .new {
37+ displayName = DataProvider .SampleZone .displayName
38+ webUrl = URL (DataProvider .SampleZone .webUrl)
39+ point = DataProvider .SampleZone .point
40+ pointsSet = DataProvider .SampleZone .points.map { it.toJson().toString() }
41+
42+ // Required, but not used
43+ image = File (Storage .ImagesDir , " abc" )
44+ kmz = File (Storage .TracksDir , " abc" )
45+
46+ // Must specify a parent
47+ this .area = area
48+ }
49+ }
50+
51+ private suspend fun createTestSector (zone : Zone ): Sector = ServerDatabase .instance.query {
52+ Sector .new {
53+ displayName = DataProvider .SampleSector .displayName
54+ point = DataProvider .SampleSector .point
55+ kidsApt = DataProvider .SampleSector .kidsApt
56+ sunTime = DataProvider .SampleSector .sunTime
57+ walkingTime = DataProvider .SampleSector .walkingTime
58+
59+ // Required, but not used
60+ image = File (Storage .ImagesDir , " abc" )
61+
62+ // Must specify a parent
63+ this .zone = zone
64+ }
65+ }
66+
67+ private suspend fun createTestPath (sector : Sector ): Path = ServerDatabase .instance.query {
68+ Path .new {
69+ displayName = DataProvider .SamplePath .displayName
70+ sketchId = DataProvider .SamplePath .sketchId
71+
72+ height = DataProvider .SamplePath .height
73+ grade = DataProvider .SamplePath .grade
74+ ending = DataProvider .SamplePath .ending
75+
76+ pitches = DataProvider .SamplePath .pitches
77+
78+ stringCount = DataProvider .SamplePath .stringCount
79+
80+ paraboltCount = DataProvider .SamplePath .paraboltCount
81+ burilCount = DataProvider .SamplePath .burilCount
82+ pitonCount = DataProvider .SamplePath .pitonCount
83+ spitCount = DataProvider .SamplePath .spitCount
84+ tensorCount = DataProvider .SamplePath .tensorCount
85+
86+ crackerRequired = DataProvider .SamplePath .crackerRequired
87+ friendRequired = DataProvider .SamplePath .friendRequired
88+ lanyardRequired = DataProvider .SamplePath .lanyardRequired
89+ nailRequired = DataProvider .SamplePath .nailRequired
90+ pitonRequired = DataProvider .SamplePath .pitonRequired
91+ stapesRequired = DataProvider .SamplePath .stapesRequired
92+
93+ builder = DataProvider .SamplePath .builder
94+ reBuilder = DataProvider .SamplePath .reBuilder
95+
96+ // Must specify a parent
97+ this .sector = sector
98+ }
99+ }
100+
19101 @Test
20102 @Suppress(" LongMethod" )
21103 fun `test creating data classes` () = test {
22- val area = ServerDatabase .instance.query {
23- Area .new {
24- displayName = DataProvider .SampleArea .displayName
25- webUrl = URL (DataProvider .SampleArea .webUrl)
26-
27- // Required, but not used
28- image = File (Storage .ImagesDir , " abc" )
29- }
30- }
104+ val area = createTestArea()
31105 ServerDatabase .instance.query {
32106 Area .findById(area.id).let {
33107 assertNotNull(it)
@@ -36,21 +110,7 @@ class TestDatabase: ApplicationTestBase() {
36110 }
37111 }
38112
39- val zone = ServerDatabase .instance.query {
40- Zone .new {
41- displayName = DataProvider .SampleZone .displayName
42- webUrl = URL (DataProvider .SampleZone .webUrl)
43- point = DataProvider .SampleZone .point
44- pointsSet = DataProvider .SampleZone .points.map { it.toJson().toString() }
45-
46- // Required, but not used
47- image = File (Storage .ImagesDir , " abc" )
48- kmz = File (Storage .TracksDir , " abc" )
49-
50- // Must specify a parent
51- this .area = area
52- }
53- }
113+ val zone = createTestZone(area)
54114 ServerDatabase .instance.query {
55115 Zone .findById(zone.id).let {
56116 assertNotNull(it)
@@ -61,21 +121,7 @@ class TestDatabase: ApplicationTestBase() {
61121 }
62122 }
63123
64- val sector = ServerDatabase .instance.query {
65- Sector .new {
66- displayName = DataProvider .SampleSector .displayName
67- point = DataProvider .SampleSector .point
68- kidsApt = DataProvider .SampleSector .kidsApt
69- sunTime = DataProvider .SampleSector .sunTime
70- walkingTime = DataProvider .SampleSector .walkingTime
71-
72- // Required, but not used
73- image = File (Storage .ImagesDir , " abc" )
74-
75- // Must specify a parent
76- this .zone = zone
77- }
78- }
124+ val sector = createTestSector(zone)
79125 ServerDatabase .instance.query {
80126 Sector .findById(sector.id).let {
81127 assertNotNull(it)
@@ -87,39 +133,7 @@ class TestDatabase: ApplicationTestBase() {
87133 }
88134 }
89135
90- val path = ServerDatabase .instance.query {
91- Path .new {
92- displayName = DataProvider .SamplePath .displayName
93- sketchId = DataProvider .SamplePath .sketchId
94-
95- height = DataProvider .SamplePath .height
96- grade = DataProvider .SamplePath .grade
97- ending = DataProvider .SamplePath .ending
98-
99- pitches = DataProvider .SamplePath .pitches
100-
101- stringCount = DataProvider .SamplePath .stringCount
102-
103- paraboltCount = DataProvider .SamplePath .paraboltCount
104- burilCount = DataProvider .SamplePath .burilCount
105- pitonCount = DataProvider .SamplePath .pitonCount
106- spitCount = DataProvider .SamplePath .spitCount
107- tensorCount = DataProvider .SamplePath .tensorCount
108-
109- crackerRequired = DataProvider .SamplePath .crackerRequired
110- friendRequired = DataProvider .SamplePath .friendRequired
111- lanyardRequired = DataProvider .SamplePath .lanyardRequired
112- nailRequired = DataProvider .SamplePath .nailRequired
113- pitonRequired = DataProvider .SamplePath .pitonRequired
114- stapesRequired = DataProvider .SamplePath .stapesRequired
115-
116- builder = DataProvider .SamplePath .builder
117- reBuilder = DataProvider .SamplePath .reBuilder
118-
119- // Must specify a parent
120- this .sector = sector
121- }
122- }
136+ val path = createTestPath(sector)
123137 ServerDatabase .instance.query {
124138 Path .findById(path.id).let {
125139 assertNotNull(it)
@@ -153,4 +167,32 @@ class TestDatabase: ApplicationTestBase() {
153167 }
154168 }
155169 }
170+
171+ @Test
172+ fun `test Blocking with recurrence` () = test {
173+ val area = createTestArea()
174+ val zone = createTestZone(area)
175+ val sector = createTestSector(zone)
176+ val path = createTestPath(sector)
177+
178+ val blocking = ServerDatabase .instance.query {
179+ Blocking .new {
180+ this .timestamp = Instant .ofEpochMilli(1710086772 )
181+ this .type = BlockingTypes .BIRD
182+ this .recurrence = BlockingRecurrenceYearly (1U , Month .JANUARY , 2U , Month .FEBRUARY )
183+ this .path = path
184+ }
185+ }
186+ ServerDatabase .instance.query {
187+ Blocking .findById(blocking.id).let {
188+ assertNotNull(it)
189+
190+ assertEquals(it.timestamp, Instant .ofEpochMilli(1710086772 ))
191+ assertEquals(it.type, BlockingTypes .BIRD )
192+ assertEquals(it.recurrence, BlockingRecurrenceYearly (1U , Month .JANUARY , 2U , Month .FEBRUARY ))
193+ assertNull(it.endDate)
194+ assertEquals(it.path.id.value, path.id.value)
195+ }
196+ }
197+ }
156198}
0 commit comments