Skip to content

Commit 65952f9

Browse files
refactor: refactor test models (DEV-264) (#1975)
* refactor: start refactoring UploadFileRequest * refactor: UploadFileRequest * docs: document changes * refactor: adjust tests to changed UploadFileRequest * test: improve test coverage * refactor: improve ChangeFileRequest * refactor: use model in some more tests * refactor: remove some code smells * refactor: remove some code smells * test: add test for custom values in message representation of FileModels * refactor: tidy up, add more docstrings * test: add tests for UpdateFileRequest * Update FileModelsSpec.scala * fix: update test meged from main, to fit new structure * tests: prepare remaining test as stubs * test: add remaining tests for FileModels Co-authored-by: Ivan Subotic <400790+subotic@users.noreply.github.com>
1 parent 65b88a2 commit 65952f9

6 files changed

Lines changed: 1062 additions & 428 deletions

File tree

‎webapi/src/test/scala/org/knora/webapi/it/v2/KnoraSipiIntegrationV2ITSpec.scala‎

Lines changed: 27 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -442,12 +442,13 @@ class KnoraSipiIntegrationV2ITSpec
442442

443443
val jsonLdEntity = UploadFileRequest
444444
.make(
445-
fileType = FileType.StillImageFile,
446-
internalFilename = uploadedFile.internalFilename,
445+
fileType = FileType.StillImageFile(),
446+
internalFilename = uploadedFile.internalFilename
447+
)
448+
.toJsonLd(
447449
className = Some("ThingPicture"),
448450
ontologyName = "anything"
449451
)
450-
.toJsonLd
451452

452453
val request = Post(
453454
s"$baseApiUrl/v2/resources",
@@ -511,10 +512,10 @@ class KnoraSipiIntegrationV2ITSpec
511512
val uploadedFile: SipiUploadResponseEntry = sipiUploadResponse.uploadedFiles.head
512513
uploadedFile.originalFilename should ===(trp88OriginalFilename)
513514

514-
// JSON describing the new image to Knora.
515+
// JSON describing the new image to the API.
515516
val jsonLdEntity = ChangeFileRequest
516517
.make(
517-
fileType = FileType.StillImageFile,
518+
fileType = FileType.StillImageFile(),
518519
internalFilename = uploadedFile.internalFilename,
519520
resourceIri = stillImageResourceIri.get,
520521
valueIri = stillImageFileValueIri.get,
@@ -567,7 +568,7 @@ class KnoraSipiIntegrationV2ITSpec
567568
// JSON describing the new image to Knora.
568569
val jsonLdEntity = ChangeFileRequest
569570
.make(
570-
fileType = FileType.StillImageFile,
571+
fileType = FileType.StillImageFile(),
571572
internalFilename = internalFilename,
572573
resourceIri = stillImageResourceIri.get,
573574
valueIri = stillImageFileValueIri.get,
@@ -605,12 +606,13 @@ class KnoraSipiIntegrationV2ITSpec
605606
val jsonLdEntity =
606607
UploadFileRequest
607608
.make(
608-
fileType = FileType.DocumentFile,
609+
fileType = FileType.DocumentFile(),
610+
internalFilename = uploadedFile.internalFilename
611+
)
612+
.toJsonLd(
609613
className = Some("ThingDocument"),
610-
internalFilename = uploadedFile.internalFilename,
611614
ontologyName = "anything"
612615
)
613-
.toJsonLd
614616

615617
val request = Post(
616618
s"$baseApiUrl/v2/resources",
@@ -668,7 +670,7 @@ class KnoraSipiIntegrationV2ITSpec
668670
// Update the value.
669671
val jsonLdEntity = ChangeFileRequest
670672
.make(
671-
fileType = FileType.DocumentFile,
673+
fileType = FileType.DocumentFile(),
672674
internalFilename = uploadedFile.internalFilename,
673675
resourceIri = pdfResourceIri.get,
674676
valueIri = pdfValueIri.get,
@@ -721,12 +723,13 @@ class KnoraSipiIntegrationV2ITSpec
721723

722724
val jsonLdEntity = UploadFileRequest
723725
.make(
724-
fileType = FileType.DocumentFile,
726+
fileType = FileType.DocumentFile(),
727+
internalFilename = uploadedFile.internalFilename
728+
)
729+
.toJsonLd(
725730
className = Some("ThingDocument"),
726-
internalFilename = uploadedFile.internalFilename,
727731
ontologyName = "anything"
728732
)
729-
.toJsonLd
730733

731734
val request = Post(
732735
s"$baseApiUrl/v2/resources",
@@ -754,7 +757,7 @@ class KnoraSipiIntegrationV2ITSpec
754757
fileType = FileType.TextFile,
755758
internalFilename = uploadedFile.internalFilename
756759
)
757-
.toJsonLd
760+
.toJsonLd()
758761

759762
val request = Post(
760763
s"$baseApiUrl/v2/resources",
@@ -858,8 +861,8 @@ class KnoraSipiIntegrationV2ITSpec
858861
// Create the resource in the API.
859862

860863
val jsonLdEntity = UploadFileRequest
861-
.make(fileType = FileType.StillImageFile, internalFilename = uploadedFile.internalFilename)
862-
.toJsonLd
864+
.make(fileType = FileType.StillImageFile(), internalFilename = uploadedFile.internalFilename)
865+
.toJsonLd()
863866

864867
val request = Post(
865868
s"$baseApiUrl/v2/resources",
@@ -884,7 +887,7 @@ class KnoraSipiIntegrationV2ITSpec
884887

885888
val jsonLdEntity = UploadFileRequest
886889
.make(fileType = FileType.TextFile, internalFilename = uploadedFile.internalFilename)
887-
.toJsonLd
890+
.toJsonLd()
888891

889892
val request = Post(
890893
s"$baseApiUrl/v2/resources",
@@ -989,7 +992,7 @@ class KnoraSipiIntegrationV2ITSpec
989992

990993
val jsonLdEntity = UploadFileRequest
991994
.make(fileType = FileType.TextFile, internalFilename = uploadedFile.internalFilename)
992-
.toJsonLd
995+
.toJsonLd()
993996

994997
val request = Post(
995998
s"$baseApiUrl/v2/resources",
@@ -1013,7 +1016,7 @@ class KnoraSipiIntegrationV2ITSpec
10131016

10141017
val jsonLdEntity = UploadFileRequest
10151018
.make(fileType = FileType.ArchiveFile, internalFilename = uploadedFile.internalFilename)
1016-
.toJsonLd
1019+
.toJsonLd()
10171020

10181021
val request = Post(
10191022
s"$baseApiUrl/v2/resources",
@@ -1121,7 +1124,7 @@ class KnoraSipiIntegrationV2ITSpec
11211124

11221125
val jsonLdEntity = UploadFileRequest
11231126
.make(fileType = FileType.ArchiveFile, internalFilename = uploadedFile.internalFilename)
1124-
.toJsonLd
1127+
.toJsonLd()
11251128

11261129
val request = Post(
11271130
s"$baseApiUrl/v2/resources",
@@ -1180,7 +1183,7 @@ class KnoraSipiIntegrationV2ITSpec
11801183
// Create the resource in the API.
11811184
val jsonLdEntity = UploadFileRequest
11821185
.make(fileType = FileType.AudioFile, internalFilename = uploadedFile.internalFilename)
1183-
.toJsonLd
1186+
.toJsonLd()
11841187

11851188
val request = Post(
11861189
s"$baseApiUrl/v2/resources",
@@ -1285,8 +1288,8 @@ class KnoraSipiIntegrationV2ITSpec
12851288

12861289
// Create the resource in the API.
12871290
val jsonLdEntity = UploadFileRequest
1288-
.make(fileType = FileType.MovingImageFile, internalFilename = uploadedFile.internalFilename)
1289-
.toJsonLd
1291+
.make(fileType = FileType.MovingImageFile(), internalFilename = uploadedFile.internalFilename)
1292+
.toJsonLd()
12901293

12911294
val request = Post(
12921295
s"$baseApiUrl/v2/resources",
@@ -1344,7 +1347,7 @@ class KnoraSipiIntegrationV2ITSpec
13441347

13451348
val jsonLdEntity = ChangeFileRequest
13461349
.make(
1347-
fileType = FileType.MovingImageFile,
1350+
fileType = FileType.MovingImageFile(),
13481351
resourceIri = videoResourceIri.get,
13491352
internalFilename = uploadedFile.internalFilename,
13501353
valueIri = videoValueIri.get

‎webapi/src/test/scala/org/knora/webapi/models/filemodels/FileModelUtil.scala‎

Lines changed: 156 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -5,62 +5,179 @@
55

66
package org.knora.webapi.models.filemodels
77

8+
import org.knora.webapi.ApiV2Complex
89
import org.knora.webapi.messages.{OntologyConstants, SmartIri, StringFormatter}
910
import org.knora.webapi.messages.IriConversions._
11+
import org.knora.webapi.messages.v2.responder.valuemessages.{
12+
ArchiveFileValueContentV2,
13+
AudioFileValueContentV2,
14+
DocumentFileValueContentV2,
15+
FileValueContentV2,
16+
FileValueV2,
17+
MovingImageFileValueContentV2,
18+
StillImageFileValueContentV2,
19+
TextFileValueContentV2
20+
}
1021

1122
object FileModelUtil {
1223
private implicit val stringFormatter: StringFormatter = StringFormatter.getGeneralInstance
1324

1425
def getFileRepresentationClassIri(fileType: FileType): SmartIri = fileType match {
15-
case FileType.DocumentFile => OntologyConstants.KnoraApiV2Complex.DocumentRepresentation.toSmartIri
16-
case FileType.StillImageFile => OntologyConstants.KnoraApiV2Complex.StillImageRepresentation.toSmartIri
17-
case FileType.MovingImageFile => OntologyConstants.KnoraApiV2Complex.MovingImageRepresentation.toSmartIri
18-
case FileType.TextFile => OntologyConstants.KnoraApiV2Complex.TextRepresentation.toSmartIri
19-
case FileType.AudioFile => OntologyConstants.KnoraApiV2Complex.AudioRepresentation.toSmartIri
20-
case FileType.ArchiveFile => OntologyConstants.KnoraApiV2Complex.ArchiveRepresentation.toSmartIri
26+
case FileType.DocumentFile(_, _, _) => OntologyConstants.KnoraApiV2Complex.DocumentRepresentation.toSmartIri
27+
case FileType.StillImageFile(_, _) => OntologyConstants.KnoraApiV2Complex.StillImageRepresentation.toSmartIri
28+
case FileType.MovingImageFile(_, _) => OntologyConstants.KnoraApiV2Complex.MovingImageRepresentation.toSmartIri
29+
case FileType.TextFile => OntologyConstants.KnoraApiV2Complex.TextRepresentation.toSmartIri
30+
case FileType.AudioFile => OntologyConstants.KnoraApiV2Complex.AudioRepresentation.toSmartIri
31+
case FileType.ArchiveFile => OntologyConstants.KnoraApiV2Complex.ArchiveRepresentation.toSmartIri
2132
}
2233

2334
def getFileRepresentationPropertyIri(fileType: FileType): SmartIri = fileType match {
24-
case FileType.DocumentFile => OntologyConstants.KnoraApiV2Complex.HasDocumentFileValue.toSmartIri
25-
case FileType.StillImageFile => OntologyConstants.KnoraApiV2Complex.HasStillImageFileValue.toSmartIri
26-
case FileType.MovingImageFile => OntologyConstants.KnoraApiV2Complex.HasMovingImageFileValue.toSmartIri
27-
case FileType.TextFile => OntologyConstants.KnoraApiV2Complex.HasTextFileValue.toSmartIri
28-
case FileType.AudioFile => OntologyConstants.KnoraApiV2Complex.HasAudioFileValue.toSmartIri
29-
case FileType.ArchiveFile => OntologyConstants.KnoraApiV2Complex.HasArchiveFileValue.toSmartIri
35+
case FileType.DocumentFile(_, _, _) => OntologyConstants.KnoraApiV2Complex.HasDocumentFileValue.toSmartIri
36+
case FileType.StillImageFile(_, _) => OntologyConstants.KnoraApiV2Complex.HasStillImageFileValue.toSmartIri
37+
case FileType.MovingImageFile(_, _) => OntologyConstants.KnoraApiV2Complex.HasMovingImageFileValue.toSmartIri
38+
case FileType.TextFile => OntologyConstants.KnoraApiV2Complex.HasTextFileValue.toSmartIri
39+
case FileType.AudioFile => OntologyConstants.KnoraApiV2Complex.HasAudioFileValue.toSmartIri
40+
case FileType.ArchiveFile => OntologyConstants.KnoraApiV2Complex.HasArchiveFileValue.toSmartIri
3041
}
3142

3243
def getFileValuePropertyName(fileType: FileType): String = fileType match {
33-
case FileType.DocumentFile => "knora-api:hasDocumentFileValue"
34-
case FileType.StillImageFile => "knora-api:hasStillImageFileValue"
35-
case FileType.MovingImageFile => "knora-api:hasMovingImageFileValue"
36-
case FileType.TextFile => "knora-api:hasTextFileValue"
37-
case FileType.AudioFile => "knora-api:hasAudioFileValue"
38-
case FileType.ArchiveFile => "knora-api:hasArchiveFileValue"
44+
case FileType.DocumentFile(_, _, _) => "knora-api:hasDocumentFileValue"
45+
case FileType.StillImageFile(_, _) => "knora-api:hasStillImageFileValue"
46+
case FileType.MovingImageFile(_, _) => "knora-api:hasMovingImageFileValue"
47+
case FileType.TextFile => "knora-api:hasTextFileValue"
48+
case FileType.AudioFile => "knora-api:hasAudioFileValue"
49+
case FileType.ArchiveFile => "knora-api:hasArchiveFileValue"
3950
}
4051

4152
def getDefaultClassName(fileType: FileType): String = fileType match {
42-
case FileType.DocumentFile => "DocumentRepresentation"
43-
case FileType.StillImageFile => "StillImageRepresentation"
44-
case FileType.MovingImageFile => "MovingImageRepresentation"
45-
case FileType.TextFile => "TextRepresentation"
46-
case FileType.AudioFile => "AudioRepresentation"
47-
case FileType.ArchiveFile => "ArchiveRepresentation"
53+
case FileType.DocumentFile(_, _, _) => "DocumentRepresentation"
54+
case FileType.StillImageFile(_, _) => "StillImageRepresentation"
55+
case FileType.MovingImageFile(_, _) => "MovingImageRepresentation"
56+
case FileType.TextFile => "TextRepresentation"
57+
case FileType.AudioFile => "AudioRepresentation"
58+
case FileType.ArchiveFile => "ArchiveRepresentation"
4859
}
4960

5061
def getFileValueType(fileType: FileType): String = fileType match {
51-
case FileType.DocumentFile => "knora-api:DocumentFileValue"
52-
case FileType.StillImageFile => "knora-api:StillImageFileValue"
53-
case FileType.MovingImageFile => "knora-api:MovingImageFileValue"
54-
case FileType.TextFile => "knora-api:TextFileValue"
55-
case FileType.AudioFile => "knora-api:AudioFileValue"
56-
case FileType.ArchiveFile => "knora-api:ArchiveFileValue"
62+
case FileType.DocumentFile(_, _, _) => "knora-api:DocumentFileValue"
63+
case FileType.StillImageFile(_, _) => "knora-api:StillImageFileValue"
64+
case FileType.MovingImageFile(_, _) => "knora-api:MovingImageFileValue"
65+
case FileType.TextFile => "knora-api:TextFileValue"
66+
case FileType.AudioFile => "knora-api:AudioFileValue"
67+
case FileType.ArchiveFile => "knora-api:ArchiveFileValue"
68+
}
69+
70+
def getFileValueTypeIRI(fileType: FileType): SmartIri = fileType match {
71+
case FileType.DocumentFile(_, _, _) => OntologyConstants.KnoraApiV2Complex.DocumentFileValue.toSmartIri
72+
case FileType.StillImageFile(_, _) => OntologyConstants.KnoraApiV2Complex.StillImageFileValue.toSmartIri
73+
case FileType.MovingImageFile(_, _) => OntologyConstants.KnoraApiV2Complex.MovingImageFileValue.toSmartIri
74+
case FileType.TextFile => OntologyConstants.KnoraApiV2Complex.TextFileValue.toSmartIri
75+
case FileType.AudioFile => OntologyConstants.KnoraApiV2Complex.AudioFileValue.toSmartIri
76+
case FileType.ArchiveFile => OntologyConstants.KnoraApiV2Complex.AudioFileValue.toSmartIri
5777
}
5878

59-
def getJsonLdContext(ontology: String): String = {
79+
def getFileValueContent(
80+
fileType: FileType,
81+
internalFilename: String,
82+
internalMimeType: Option[String],
83+
originalFilename: Option[String],
84+
originalMimeType: Option[String],
85+
comment: Option[String]
86+
): FileValueContentV2 =
87+
fileType match {
88+
case FileType.DocumentFile(pageCount, dimX, dimY) =>
89+
DocumentFileValueContentV2(
90+
ontologySchema = ApiV2Complex,
91+
fileValue = FileValueV2(
92+
internalFilename = internalFilename,
93+
internalMimeType = internalMimeType match {
94+
case Some(v) => v
95+
case None => "application/pdf"
96+
},
97+
originalFilename = originalFilename,
98+
originalMimeType = originalMimeType match {
99+
case Some(_) => originalMimeType
100+
case None => Some("application/pdf")
101+
}
102+
),
103+
pageCount = pageCount,
104+
dimX = dimX,
105+
dimY = dimY,
106+
comment = comment
107+
)
108+
case FileType.StillImageFile(dimX, dimY) =>
109+
StillImageFileValueContentV2(
110+
ontologySchema = ApiV2Complex,
111+
fileValue = FileValueV2(
112+
internalFilename = internalFilename,
113+
internalMimeType = internalMimeType match {
114+
case Some(v) => v
115+
case None => "image/jp2"
116+
},
117+
originalFilename = originalFilename,
118+
originalMimeType = originalMimeType
119+
),
120+
dimX = dimX,
121+
dimY = dimY,
122+
comment = comment
123+
)
124+
case FileType.MovingImageFile(dimX, dimY) =>
125+
MovingImageFileValueContentV2(
126+
ontologySchema = ApiV2Complex,
127+
fileValue = FileValueV2(
128+
internalFilename = internalFilename,
129+
internalMimeType = internalMimeType.get,
130+
originalFilename = originalFilename,
131+
originalMimeType = internalMimeType
132+
),
133+
dimX = dimX,
134+
dimY = dimY
135+
)
136+
case FileType.TextFile =>
137+
TextFileValueContentV2(
138+
ontologySchema = ApiV2Complex,
139+
fileValue = FileValueV2(
140+
internalFilename = internalFilename,
141+
internalMimeType = internalMimeType.get,
142+
originalFilename = originalFilename,
143+
originalMimeType = internalMimeType
144+
)
145+
)
146+
case FileType.AudioFile =>
147+
AudioFileValueContentV2(
148+
ontologySchema = ApiV2Complex,
149+
fileValue = FileValueV2(
150+
internalFilename = internalFilename,
151+
internalMimeType = internalMimeType.get,
152+
originalFilename = originalFilename,
153+
originalMimeType = internalMimeType
154+
)
155+
)
156+
case FileType.ArchiveFile =>
157+
ArchiveFileValueContentV2(
158+
ontologySchema = ApiV2Complex,
159+
fileValue = FileValueV2(
160+
internalFilename = internalFilename,
161+
internalMimeType = internalMimeType match {
162+
case Some(v) => v
163+
case None => "application/zip"
164+
},
165+
originalFilename = originalFilename,
166+
originalMimeType = internalMimeType
167+
),
168+
comment = comment
169+
)
170+
}
171+
172+
def getJsonLdContext(ontology: String, ontologyIRI: Option[String] = None): String = {
60173
val ontologies = ontology match {
61174
case "anything" =>
62175
FileModelConstants.defaultJsonLdContextMap + ("anything" -> "http://0.0.0.0:3333/ontology/0001/anything/v2#")
63-
case _ => FileModelConstants.defaultJsonLdContextMap
176+
case prefix =>
177+
ontologyIRI match {
178+
case Some(iri) => FileModelConstants.defaultJsonLdContextMap + (prefix -> iri)
179+
case None => FileModelConstants.defaultJsonLdContextMap
180+
}
64181
}
65182
val lines = ontologies.toList
66183
.map(x => s""" "${x._1}": "${x._2}\"""")
@@ -94,9 +211,13 @@ object FileModelConstants {
94211

95212
sealed trait FileType
96213
object FileType {
97-
case object DocumentFile extends FileType
98-
case object StillImageFile extends FileType
99-
case object MovingImageFile extends FileType
214+
case class DocumentFile(
215+
pageCount: Option[Int] = Some(1),
216+
dimX: Option[Int] = Some(100),
217+
dimY: Option[Int] = Some(100)
218+
) extends FileType
219+
case class StillImageFile(dimX: Int = 100, dimY: Int = 100) extends FileType
220+
case class MovingImageFile(dimX: Int = 100, dimY: Int = 100) extends FileType
100221
case object TextFile extends FileType
101222
case object AudioFile extends FileType
102223
case object ArchiveFile extends FileType

0 commit comments

Comments
 (0)