From 7af794ac7341116fb4f61481fce19f2b99379da7 Mon Sep 17 00:00:00 2001 From: Jonas Natten Date: Tue, 21 Jan 2025 14:15:52 +0100 Subject: [PATCH] myndla-api: Add `arenaAccepted` flag This is currently just a dumb boolean field that a user can set that the frontend can use to determine whether or not it should link to arena. --- .../model/api/myndla/MyNDLAUserDTO.scala | 15 ++++++---- .../model/domain/myndla/MyNDLAUser.scala | 1 + .../domain/myndla/MyNDLAUserDocument.scala | 2 ++ .../service/FolderConverterService.scala | 9 +++++- .../myndlaapi/service/ImportService.scala | 3 +- .../ndla/myndlaapi/service/UserService.scala | 9 ++++-- .../scala/no/ndla/myndlaapi/TestData.scala | 3 +- .../controller/ArenaControllerTest.scala | 3 +- .../controller/FolderControllerTest.scala | 3 +- .../no/ndla/myndlaapi/e2e/ArenaTest.scala | 6 ++-- .../repository/ArenaRepositoryTest.scala | 9 ++++-- .../service/FolderConverterServiceTest.scala | 29 ++++++++++++++----- .../service/FolderReadServiceTest.scala | 9 ++++-- .../myndlaapi/service/UserServiceTest.scala | 21 +++++++++----- 14 files changed, 86 insertions(+), 36 deletions(-) diff --git a/common/src/main/scala/no/ndla/common/model/api/myndla/MyNDLAUserDTO.scala b/common/src/main/scala/no/ndla/common/model/api/myndla/MyNDLAUserDTO.scala index 8f2d902dd..d633495cd 100644 --- a/common/src/main/scala/no/ndla/common/model/api/myndla/MyNDLAUserDTO.scala +++ b/common/src/main/scala/no/ndla/common/model/api/myndla/MyNDLAUserDTO.scala @@ -44,12 +44,17 @@ object MyNDLAUserDTO { implicit def decoder: Decoder[MyNDLAUserDTO] = deriveDecoder } -// format: off case class UpdatedMyNDLAUserDTO( - @description("Favorite subjects of the user") favoriteSubjects: Option[Seq[String]], - @description("Whether arena should explicitly be enabled for the user") arenaEnabled: Option[Boolean], - @description("Whether users name should be shared with folder or not") shareName: Option[Boolean], - @description("Which arena groups the user should be in, only modifiable by admins") arenaGroups: Option[List[ArenaGroup]] + @description("Favorite subjects of the user") + favoriteSubjects: Option[Seq[String]], + @description("Whether arena should explicitly be enabled for the user") + arenaEnabled: Option[Boolean], + @description("Whether users name should be shared with folder or not") + shareName: Option[Boolean], + @description("Which arena groups the user should be in, only modifiable by admins") + arenaGroups: Option[List[ArenaGroup]], + @description("Whether the user has accepted the use of arena") + arenaAccept: Option[Boolean] ) object UpdatedMyNDLAUserDTO { diff --git a/common/src/main/scala/no/ndla/common/model/domain/myndla/MyNDLAUser.scala b/common/src/main/scala/no/ndla/common/model/domain/myndla/MyNDLAUser.scala index f6f184420..f6c39a971 100644 --- a/common/src/main/scala/no/ndla/common/model/domain/myndla/MyNDLAUser.scala +++ b/common/src/main/scala/no/ndla/common/model/domain/myndla/MyNDLAUser.scala @@ -23,6 +23,7 @@ case class MyNDLAUser( displayName: String, email: String, arenaEnabled: Boolean, + arenaAccepted: Boolean, arenaGroups: List[ArenaGroup], shareName: Boolean ) { diff --git a/common/src/main/scala/no/ndla/common/model/domain/myndla/MyNDLAUserDocument.scala b/common/src/main/scala/no/ndla/common/model/domain/myndla/MyNDLAUserDocument.scala index 707289a2f..7744bd08b 100644 --- a/common/src/main/scala/no/ndla/common/model/domain/myndla/MyNDLAUserDocument.scala +++ b/common/src/main/scala/no/ndla/common/model/domain/myndla/MyNDLAUserDocument.scala @@ -22,6 +22,7 @@ case class MyNDLAUserDocument( displayName: String, email: String, arenaEnabled: Boolean, + arenaAccepted: Boolean, arenaGroups: List[ArenaGroup], shareName: Boolean ) { @@ -38,6 +39,7 @@ case class MyNDLAUserDocument( displayName = displayName, email = email, arenaEnabled = arenaEnabled, + arenaAccepted = arenaAccepted, shareName = shareName, arenaGroups = arenaGroups ) diff --git a/myndla-api/src/main/scala/no/ndla/myndlaapi/service/FolderConverterService.scala b/myndla-api/src/main/scala/no/ndla/myndlaapi/service/FolderConverterService.scala index 9c2192e39..43dfc00d4 100644 --- a/myndla-api/src/main/scala/no/ndla/myndlaapi/service/FolderConverterService.scala +++ b/myndla-api/src/main/scala/no/ndla/myndlaapi/service/FolderConverterService.scala @@ -243,6 +243,12 @@ trait FolderConverterService { domainUserData.arenaEnabled || arenaEnabledUsers.map(_.toLowerCase).contains(domainUserData.email.toLowerCase) } + val arenaAccepted = updatedUser.arenaAccept match { + case Some(true) if arenaEnabled => true + case Some(false) => false + case _ => domainUserData.arenaAccepted + } + val arenaGroups = if (updaterUser.exists(_.isAdmin)) updatedUser.arenaGroups.getOrElse(domainUserData.arenaGroups) else domainUserData.arenaGroups @@ -260,7 +266,8 @@ trait FolderConverterService { arenaEnabled = arenaEnabled, shareName = shareName, displayName = domainUserData.displayName, - arenaGroups = arenaGroups + arenaGroups = arenaGroups, + arenaAccepted = arenaAccepted ) } diff --git a/myndla-api/src/main/scala/no/ndla/myndlaapi/service/ImportService.scala b/myndla-api/src/main/scala/no/ndla/myndlaapi/service/ImportService.scala index d8951f82f..6c99437dd 100644 --- a/myndla-api/src/main/scala/no/ndla/myndlaapi/service/ImportService.scala +++ b/myndla-api/src/main/scala/no/ndla/myndlaapi/service/ImportService.scala @@ -66,7 +66,8 @@ trait ImportService { email = "ndla@knowit.no", arenaEnabled = true, arenaGroups = List(ArenaGroup.ADMIN), - shareName = true + shareName = true, + arenaAccepted = true ) userRepository.insertUser("ndla_admin", toInsert)(session) } diff --git a/myndla-api/src/main/scala/no/ndla/myndlaapi/service/UserService.scala b/myndla-api/src/main/scala/no/ndla/myndlaapi/service/UserService.scala index a69e64828..2b8395bbf 100644 --- a/myndla-api/src/main/scala/no/ndla/myndlaapi/service/UserService.scala +++ b/myndla-api/src/main/scala/no/ndla/myndlaapi/service/UserService.scala @@ -124,7 +124,8 @@ trait UserService { favoriteSubjects = Some(newFavorites), arenaEnabled = None, shareName = Some(shareName), - arenaGroups = None + arenaGroups = None, + arenaAccept = None ) updated <- userService.updateFeideUserDataAuthenticated(updatedFeideUser, feideId, feideAccessToken)(session) } yield updated @@ -240,7 +241,8 @@ trait UserService { arenaEnabled = arenaEnabledUsers.map(_.toLowerCase).contains(feideExtendedUserData.email.toLowerCase), arenaGroups = getInitialIsArenaGroups(feideId), shareName = false, - displayName = feideExtendedUserData.displayName + displayName = feideExtendedUserData.displayName, + arenaAccepted = false ) inserted <- userRepository.insertUser(feideId, newUser)(session) } yield inserted @@ -271,7 +273,8 @@ trait UserService { userData.arenaEnabled || arenaEnabledUsers.map(_.toLowerCase).contains(feideUser.email.toLowerCase), shareName = userData.shareName, displayName = feideUser.displayName, - arenaGroups = userData.arenaGroups + arenaGroups = userData.arenaGroups, + arenaAccepted = userData.arenaAccepted ) userRepository.updateUser(feideId, updatedMyNDLAUser)(session) } diff --git a/myndla-api/src/test/scala/no/ndla/myndlaapi/TestData.scala b/myndla-api/src/test/scala/no/ndla/myndlaapi/TestData.scala index f92e7b2d8..1ea80f435 100644 --- a/myndla-api/src/test/scala/no/ndla/myndlaapi/TestData.scala +++ b/myndla-api/src/test/scala/no/ndla/myndlaapi/TestData.scala @@ -100,7 +100,8 @@ object TestData { arenaEnabled = false, displayName = "", shareName = false, - arenaGroups = List.empty + arenaGroups = List.empty, + arenaAccepted = false ) } diff --git a/myndla-api/src/test/scala/no/ndla/myndlaapi/controller/ArenaControllerTest.scala b/myndla-api/src/test/scala/no/ndla/myndlaapi/controller/ArenaControllerTest.scala index ee76dbcc2..9b934a615 100644 --- a/myndla-api/src/test/scala/no/ndla/myndlaapi/controller/ArenaControllerTest.scala +++ b/myndla-api/src/test/scala/no/ndla/myndlaapi/controller/ArenaControllerTest.scala @@ -43,7 +43,8 @@ class ArenaControllerTest extends UnitTestSuite with TestEnvironment with TapirC email = "some@example.com", arenaEnabled = true, arenaGroups = List.empty, - shareName = false + shareName = false, + arenaAccepted = true ) test("That feide token parsing works if token present") { diff --git a/myndla-api/src/test/scala/no/ndla/myndlaapi/controller/FolderControllerTest.scala b/myndla-api/src/test/scala/no/ndla/myndlaapi/controller/FolderControllerTest.scala index a0cfcfaa3..46d1b159f 100644 --- a/myndla-api/src/test/scala/no/ndla/myndlaapi/controller/FolderControllerTest.scala +++ b/myndla-api/src/test/scala/no/ndla/myndlaapi/controller/FolderControllerTest.scala @@ -43,7 +43,8 @@ class FolderControllerTest extends UnitTestSuite with TestEnvironment with Tapir email = "some@example.com", arenaEnabled = true, arenaGroups = List.empty, - shareName = false + shareName = false, + arenaAccepted = true ) test("That resources fetching works and doesnt interfere with folder/:id") { diff --git a/myndla-api/src/test/scala/no/ndla/myndlaapi/e2e/ArenaTest.scala b/myndla-api/src/test/scala/no/ndla/myndlaapi/e2e/ArenaTest.scala index 2a86623d7..18a51fa95 100644 --- a/myndla-api/src/test/scala/no/ndla/myndlaapi/e2e/ArenaTest.scala +++ b/myndla-api/src/test/scala/no/ndla/myndlaapi/e2e/ArenaTest.scala @@ -125,7 +125,8 @@ class ArenaTest email = "some@example.com", arenaEnabled = true, arenaGroups = List.empty, - shareName = false + shareName = false, + arenaAccepted = true ) val testAdmin: MyNDLAUser = MyNDLAUser( @@ -141,7 +142,8 @@ class ArenaTest email = "some@example.com", arenaEnabled = true, arenaGroups = List(ArenaGroup.ADMIN), - shareName = false + shareName = false, + arenaAccepted = true ) def createCategory( diff --git a/myndla-api/src/test/scala/no/ndla/myndlaapi/repository/ArenaRepositoryTest.scala b/myndla-api/src/test/scala/no/ndla/myndlaapi/repository/ArenaRepositoryTest.scala index 5e6125302..dd49e2d2b 100644 --- a/myndla-api/src/test/scala/no/ndla/myndlaapi/repository/ArenaRepositoryTest.scala +++ b/myndla-api/src/test/scala/no/ndla/myndlaapi/repository/ArenaRepositoryTest.scala @@ -60,7 +60,8 @@ class ArenaRepositoryTest email = "example@example.com", arenaEnabled = true, arenaGroups = List(), - shareName = true + shareName = true, + arenaAccepted = true ) val feideId = "feideId1" @@ -112,7 +113,8 @@ class ArenaRepositoryTest email = "example@example.com", arenaEnabled = true, arenaGroups = List(), - shareName = true + shareName = true, + arenaAccepted = true ) val feideId = "feideId1" @@ -176,7 +178,8 @@ class ArenaRepositoryTest email = "example@example.com", arenaEnabled = true, arenaGroups = List(), - shareName = true + shareName = true, + arenaAccepted = true ) val feideId = "feideId1" val feideId2 = "feideId2" diff --git a/myndla-api/src/test/scala/no/ndla/myndlaapi/service/FolderConverterServiceTest.scala b/myndla-api/src/test/scala/no/ndla/myndlaapi/service/FolderConverterServiceTest.scala index e0935fd82..45675ce8d 100644 --- a/myndla-api/src/test/scala/no/ndla/myndlaapi/service/FolderConverterServiceTest.scala +++ b/myndla-api/src/test/scala/no/ndla/myndlaapi/service/FolderConverterServiceTest.scala @@ -430,7 +430,8 @@ class FolderConverterServiceTest extends UnitTestSuite with TestEnvironment { arenaEnabled = false, displayName = "Feide", shareName = false, - arenaGroups = List.empty + arenaGroups = List.empty, + arenaAccepted = true ) val expectedUserData = MyNDLAUserDTO( @@ -472,23 +473,32 @@ class FolderConverterServiceTest extends UnitTestSuite with TestEnvironment { arenaEnabled = false, displayName = "Feide", shareName = false, - arenaGroups = List.empty + arenaGroups = List.empty, + arenaAccepted = true ) val updatedUserData1 = - UpdatedMyNDLAUserDTO(favoriteSubjects = None, arenaEnabled = None, shareName = None, arenaGroups = None) + UpdatedMyNDLAUserDTO( + favoriteSubjects = None, + arenaEnabled = None, + shareName = None, + arenaGroups = None, + arenaAccept = None + ) val updatedUserData2 = UpdatedMyNDLAUserDTO( favoriteSubjects = Some(Seq.empty), arenaEnabled = None, shareName = None, - arenaGroups = None + arenaGroups = None, + arenaAccept = None ) val updatedUserData3 = UpdatedMyNDLAUserDTO( favoriteSubjects = Some(Seq("x", "y", "z")), arenaEnabled = None, shareName = None, - arenaGroups = None + arenaGroups = None, + arenaAccept = None ) val expectedUserData1 = MyNDLAUser( @@ -511,7 +521,8 @@ class FolderConverterServiceTest extends UnitTestSuite with TestEnvironment { arenaEnabled = false, displayName = "Feide", shareName = false, - arenaGroups = List.empty + arenaGroups = List.empty, + arenaAccepted = true ) val expectedUserData2 = MyNDLAUser( id = 42, @@ -533,7 +544,8 @@ class FolderConverterServiceTest extends UnitTestSuite with TestEnvironment { arenaEnabled = false, displayName = "Feide", shareName = false, - arenaGroups = List.empty + arenaGroups = List.empty, + arenaAccepted = true ) val expectedUserData3 = MyNDLAUser( id = 42, @@ -555,7 +567,8 @@ class FolderConverterServiceTest extends UnitTestSuite with TestEnvironment { arenaEnabled = false, displayName = "Feide", shareName = false, - arenaGroups = List.empty + arenaGroups = List.empty, + arenaAccepted = true ) service.mergeUserData(domainUserData, updatedUserData1, None, None, List.empty) should be(expectedUserData1) diff --git a/myndla-api/src/test/scala/no/ndla/myndlaapi/service/FolderReadServiceTest.scala b/myndla-api/src/test/scala/no/ndla/myndlaapi/service/FolderReadServiceTest.scala index 383a8babb..696739973 100644 --- a/myndla-api/src/test/scala/no/ndla/myndlaapi/service/FolderReadServiceTest.scala +++ b/myndla-api/src/test/scala/no/ndla/myndlaapi/service/FolderReadServiceTest.scala @@ -366,7 +366,8 @@ class FolderReadServiceTest extends UnitTestSuite with TestEnvironment { arenaEnabled = false, displayName = "Feide", shareName = true, - arenaGroups = List.empty + arenaGroups = List.empty, + arenaAccepted = true ) val folderUUID = UUID.randomUUID() @@ -530,7 +531,8 @@ class FolderReadServiceTest extends UnitTestSuite with TestEnvironment { email = "user_name@example.com", arenaEnabled = true, arenaGroups = List.empty, - shareName = false + shareName = false, + arenaAccepted = true ) ) ) @@ -552,7 +554,8 @@ class FolderReadServiceTest extends UnitTestSuite with TestEnvironment { email = "user_name@example.com", arenaEnabled = true, arenaGroups = List.empty, - shareName = false + shareName = false, + arenaAccepted = true ) ) ) diff --git a/myndla-api/src/test/scala/no/ndla/myndlaapi/service/UserServiceTest.scala b/myndla-api/src/test/scala/no/ndla/myndlaapi/service/UserServiceTest.scala index 9c451068a..bb9249826 100644 --- a/myndla-api/src/test/scala/no/ndla/myndlaapi/service/UserServiceTest.scala +++ b/myndla-api/src/test/scala/no/ndla/myndlaapi/service/UserServiceTest.scala @@ -55,14 +55,16 @@ class UserServiceTest extends UnitTestSuite with TestEnvironment { arenaEnabled = false, displayName = "Feide", shareName = false, - arenaGroups = List.empty + arenaGroups = List.empty, + arenaAccepted = true ) val updatedUserData = UpdatedMyNDLAUserDTO( favoriteSubjects = Some(Seq("r", "e")), arenaEnabled = None, shareName = Some(true), - arenaGroups = None + arenaGroups = None, + arenaAccept = None ) val userAfterMerge = MyNDLAUser( id = 42, @@ -84,7 +86,8 @@ class UserServiceTest extends UnitTestSuite with TestEnvironment { arenaEnabled = false, displayName = "Feide", shareName = true, - arenaGroups = List.empty + arenaGroups = List.empty, + arenaAccepted = true ) val expected = MyNDLAUserDTO( id = 42, @@ -124,7 +127,8 @@ class UserServiceTest extends UnitTestSuite with TestEnvironment { favoriteSubjects = Some(Seq("r", "e")), arenaEnabled = None, shareName = None, - arenaGroups = None + arenaGroups = None, + arenaAccept = None ) doReturn(Success(())) @@ -181,7 +185,8 @@ class UserServiceTest extends UnitTestSuite with TestEnvironment { arenaEnabled = false, displayName = "Feide", shareName = false, - arenaGroups = List.empty + arenaGroups = List.empty, + arenaAccepted = true ) val apiUserData = MyNDLAUserDTO( id = 42, @@ -255,7 +260,8 @@ class UserServiceTest extends UnitTestSuite with TestEnvironment { arenaEnabled = false, displayName = "Feide", shareName = false, - arenaGroups = List.empty + arenaGroups = List.empty, + arenaAccepted = true ) val apiUserData = MyNDLAUserDTO( id = 42, @@ -325,7 +331,8 @@ class UserServiceTest extends UnitTestSuite with TestEnvironment { arenaEnabled = false, displayName = "Feide", shareName = false, - arenaGroups = List.empty + arenaGroups = List.empty, + arenaAccepted = true ) val updatedFeideUser = FeideExtendedUserInfo( displayName = "name",