Skip to content

Commit 9602a08

Browse files
committed
Add test for moving folder.
1 parent a27049a commit 9602a08

File tree

2 files changed

+79
-23
lines changed

2 files changed

+79
-23
lines changed

myndla-api/src/test/scala/no/ndla/myndlaapi/e2e/FolderTest.scala

Lines changed: 77 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ package no.ndla.myndlaapi.e2e
1010

1111
import no.ndla.common.configuration.Prop
1212
import no.ndla.common.model.NDLADate
13+
import no.ndla.common.model.api.UpdateWith
1314
import no.ndla.common.model.domain.ResourceType.Article
1415
import no.ndla.common.model.domain.myndla.FolderStatus
1516
import no.ndla.common.{CirceUtil, Clock}
@@ -128,10 +129,10 @@ class FolderTest extends DatabaseIntegrationSuite with RedisIntegrationSuite wit
128129
)
129130
}
130131

131-
def createFolder(feideId: String, name: String): api.FolderDTO = {
132+
def createFolder(feideId: String, name: String, parentId: Option[String]): api.FolderDTO = {
132133
import io.circe.generic.auto.*
133134
val newFolderData =
134-
api.NewFolderDTO(name = name, status = Some(FolderStatus.SHARED.toString), parentId = None, description = None)
135+
api.NewFolderDTO(name = name, status = Some(FolderStatus.SHARED.toString), parentId = parentId, description = None)
135136
val body = CirceUtil.toJsonString(newFolderData)
136137

137138
val newFolder = simpleHttpClient.send(
@@ -147,10 +148,29 @@ class FolderTest extends DatabaseIntegrationSuite with RedisIntegrationSuite wit
147148
CirceUtil.unsafeParseAs[api.FolderDTO](newFolder.body)
148149
}
149150

150-
def getFolders(feideId: String): api.UserFolderDTO = {
151+
def updateFolder(feideId: String, folderId: UUID, updatedFolder: api.UpdatedFolderDTO): api.FolderDTO = {
151152
import io.circe.generic.auto.*
153+
val body = CirceUtil.toJsonString(updatedFolder)
154+
155+
val updatedFolderResponse = simpleHttpClient.send(
156+
quickRequest
157+
.patch(uri"$myndlaApiFolderUrl/$folderId")
158+
.header("FeideAuthorization", s"Bearer $feideId")
159+
.contentType("application/json")
160+
.body(body)
161+
)
162+
if (!updatedFolderResponse.isSuccess)
163+
fail(s"Failed to update folder $folderId failed with code ${updatedFolderResponse.code} and body:\n${updatedFolderResponse.body}")
164+
165+
CirceUtil.unsafeParseAs[api.FolderDTO](updatedFolderResponse.body)
166+
}
167+
168+
def getFolders(feideId: String, includeSubfolders: Boolean): api.UserFolderDTO = {
169+
import io.circe.generic.auto.*
170+
var uri = uri"$myndlaApiFolderUrl/"
171+
if (includeSubfolders) uri = uri.addParam("include-subfolders", "true")
152172
val folders = simpleHttpClient.send(
153-
quickRequest.get(uri"$myndlaApiFolderUrl/").header("FeideAuthorization", s"Bearer $feideId")
173+
quickRequest.get(uri).header("FeideAuthorization", s"Bearer $feideId")
154174
)
155175
if (!folders.isSuccess)
156176
fail(s"Fetching all folders for $feideId failed with code ${folders.code} and body:\n${folders.body}")
@@ -250,12 +270,12 @@ class FolderTest extends DatabaseIntegrationSuite with RedisIntegrationSuite wit
250270
when(myndlaApi.componentRegistry.feideApiClient.getFeideID(eqTo(Some(feideId1)))).thenReturn(Success(feideId1))
251271
when(myndlaApi.componentRegistry.feideApiClient.getFeideGroups(any)).thenReturn(Success(Seq.empty))
252272

253-
val f1 = createFolder(feideId1, "folder1")
254-
val f2 = createFolder(feideId1, "folder2")
255-
val f3 = createFolder(feideId1, "folder3")
256-
val f4 = createFolder(feideId1, "folder4")
273+
val f1 = createFolder(feideId1, "folder1", None)
274+
val f2 = createFolder(feideId1, "folder2", None)
275+
val f3 = createFolder(feideId1, "folder3", None)
276+
val f4 = createFolder(feideId1, "folder4", None)
257277

258-
val foldersForU1 = getFolders(feideId1)
278+
val foldersForU1 = getFolders(feideId1, false)
259279
foldersForU1.sharedFolders.length should be(0)
260280
foldersForU1.folders.length should be(4)
261281
foldersForU1.folders.head.id should be(f1.id)
@@ -269,7 +289,7 @@ class FolderTest extends DatabaseIntegrationSuite with RedisIntegrationSuite wit
269289

270290
sortFolders(feideId1, List(f4.id, f2.id, f3.id, f1.id))
271291

272-
val foldersForU1Sorted = getFolders(feideId1)
292+
val foldersForU1Sorted = getFolders(feideId1, false)
273293
foldersForU1Sorted.sharedFolders.length should be(0)
274294
foldersForU1Sorted.folders.length should be(4)
275295
foldersForU1Sorted.folders.head.id should be(f4.id)
@@ -289,12 +309,12 @@ class FolderTest extends DatabaseIntegrationSuite with RedisIntegrationSuite wit
289309
when(myndlaApi.componentRegistry.feideApiClient.getFeideID(eqTo(Some(feideId2)))).thenReturn(Success(feideId2))
290310
when(myndlaApi.componentRegistry.feideApiClient.getFeideGroups(any)).thenReturn(Success(Seq.empty))
291311

292-
val f1 = createFolder(feideId1, "folder1")
293-
val f2 = createFolder(feideId1, "folder2")
294-
val f3 = createFolder(feideId1, "folder3")
295-
val f4 = createFolder(feideId1, "folder4")
312+
val f1 = createFolder(feideId1, "folder1", None)
313+
val f2 = createFolder(feideId1, "folder2", None)
314+
val f3 = createFolder(feideId1, "folder3", None)
315+
val f4 = createFolder(feideId1, "folder4", None)
296316

297-
val foldersForU1 = getFolders(feideId1)
317+
val foldersForU1 = getFolders(feideId1, false)
298318
foldersForU1.sharedFolders.length should be(0)
299319
foldersForU1.folders.length should be(4)
300320
foldersForU1.folders.head.id should be(f1.id)
@@ -308,7 +328,7 @@ class FolderTest extends DatabaseIntegrationSuite with RedisIntegrationSuite wit
308328

309329
sortFolders(feideId1, List(f4.id, f2.id, f3.id, f1.id))
310330

311-
val foldersForU1Sorted = getFolders(feideId1)
331+
val foldersForU1Sorted = getFolders(feideId1, false)
312332
foldersForU1Sorted.sharedFolders.length should be(0)
313333
foldersForU1Sorted.folders.length should be(4)
314334
foldersForU1Sorted.folders.head.id should be(f4.id)
@@ -320,13 +340,13 @@ class FolderTest extends DatabaseIntegrationSuite with RedisIntegrationSuite wit
320340
foldersForU1Sorted.folders(3).id should be(f1.id)
321341
foldersForU1Sorted.folders(3).rank should be(4)
322342

323-
val foldersForU2 = getFolders(feideId2)
343+
val foldersForU2 = getFolders(feideId2, false)
324344
foldersForU2.sharedFolders.length should be(0)
325345

326346
saveFolder(feideId2, f1.id)
327347
saveFolder(feideId2, f3.id)
328348

329-
val foldersForU2AfterSave = getFolders(feideId2)
349+
val foldersForU2AfterSave = getFolders(feideId2, false)
330350
foldersForU2AfterSave.sharedFolders.length should be(2)
331351
foldersForU2AfterSave.sharedFolders.head.id should be(f1.id)
332352
foldersForU2AfterSave.sharedFolders.head.rank should be(1)
@@ -335,7 +355,7 @@ class FolderTest extends DatabaseIntegrationSuite with RedisIntegrationSuite wit
335355

336356
sortFolders(feideId2, List(f3.id, f1.id), sortShared = true)
337357

338-
val foldersForU2AfterSort = getFolders(feideId2)
358+
val foldersForU2AfterSort = getFolders(feideId2, false)
339359
foldersForU2AfterSort.sharedFolders.length should be(2)
340360
foldersForU2AfterSort.sharedFolders.head.id should be(f3.id)
341361
foldersForU2AfterSort.sharedFolders.head.rank should be(1)
@@ -349,9 +369,9 @@ class FolderTest extends DatabaseIntegrationSuite with RedisIntegrationSuite wit
349369
when(myndlaApi.componentRegistry.feideApiClient.getFeideID(eqTo(Some(feideId1)))).thenReturn(Success(feideId1))
350370
when(myndlaApi.componentRegistry.feideApiClient.getFeideGroups(any)).thenReturn(Success(Seq.empty))
351371

352-
val f1 = createFolder(feideId1, "folder1")
372+
val f1 = createFolder(feideId1, "folder1", None)
353373

354-
val foldersForU1 = getFolders(feideId1)
374+
val foldersForU1 = getFolders(feideId1, false)
355375
foldersForU1.sharedFolders.length should be(0)
356376
foldersForU1.folders.length should be(1)
357377
foldersForU1.folders.head.id should be(f1.id)
@@ -404,4 +424,40 @@ class FolderTest extends DatabaseIntegrationSuite with RedisIntegrationSuite wit
404424
folderAfterDelete.resources.map(_.id) should be(List(res3.id, res2.id, res5.id, res4.id))
405425

406426
}
427+
428+
test("Saving and then moving folder to different parent") {
429+
val feideId1 = "feide1"
430+
when(myndlaApi.componentRegistry.feideApiClient.getFeideID(eqTo(Some(feideId1)))).thenReturn(Success(feideId1))
431+
when(myndlaApi.componentRegistry.feideApiClient.getFeideGroups(any)).thenReturn(Success(Seq.empty))
432+
433+
/*
434+
f1
435+
├─ f2
436+
├─ f3
437+
└─ f4
438+
*/
439+
val f1 = createFolder(feideId1, "folder1", None)
440+
val f2 = createFolder(feideId1, "folder2", Some(f1.id.toString))
441+
val f3 = createFolder(feideId1, "folder3", Some(f1.id.toString))
442+
val f4 = createFolder(feideId1, "folder4", Some(f3.id.toString))
443+
444+
// Move f4 to be child of f1
445+
val updated = updateFolder(feideId = feideId1, folderId = f4.id, updatedFolder = api.UpdatedFolderDTO(parentId = UpdateWith(f1.id.toString), name = None, status = None, description = None))
446+
updated.parentId should be(Some(f1.id))
447+
448+
val foldersForU1Sorted = getFolders(feideId1, true)
449+
foldersForU1Sorted.sharedFolders.length should be(0)
450+
foldersForU1Sorted.folders.length should be(1)
451+
foldersForU1Sorted.folders.head.id should be(f1.id)
452+
foldersForU1Sorted.folders.head.rank should be(1)
453+
foldersForU1Sorted.folders.head.subfolders.length should be(3)
454+
val subfoldersOfF1 = foldersForU1Sorted.folders.head.subfolders.sortBy(_.rank)
455+
subfoldersOfF1.head.id should be(f2.id)
456+
subfoldersOfF1.head.rank should be(1)
457+
subfoldersOfF1(1).id should be(f4.id) // rank is reset to 0 when moving
458+
subfoldersOfF1(1).rank should be(2)
459+
subfoldersOfF1(2).id should be(f3.id)
460+
subfoldersOfF1(2).rank should be(3)
461+
462+
}
407463
}

myndla-api/src/test/scala/no/ndla/myndlaapi/service/FolderConverterServiceTest.scala

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -284,8 +284,8 @@ class FolderConverterServiceTest extends UnitTestSuite with TestEnvironment {
284284
status = FolderStatus.PRIVATE,
285285
description = Some("jog ska visa deg garbage jog"),
286286
)
287-
val expected4 = existing.copy(parentId = Some(newParentUUID))
288-
val expected5 = existing.copy(parentId = None)
287+
val expected4 = existing.copy(parentId = Some(newParentUUID), rank = 0)
288+
val expected5 = existing.copy(parentId = None, rank = 0)
289289

290290
val result1 = service.mergeFolder(existing, updatedWithData)
291291
val result2 = service.mergeFolder(existing, updatedWithoutData)

0 commit comments

Comments
 (0)