diff --git a/services/hanke-service/src/integrationTest/kotlin/fi/hel/haitaton/hanke/HankeServiceITests.kt b/services/hanke-service/src/integrationTest/kotlin/fi/hel/haitaton/hanke/HankeServiceITests.kt index 2213351da..7c8602e62 100644 --- a/services/hanke-service/src/integrationTest/kotlin/fi/hel/haitaton/hanke/HankeServiceITests.kt +++ b/services/hanke-service/src/integrationTest/kotlin/fi/hel/haitaton/hanke/HankeServiceITests.kt @@ -211,7 +211,7 @@ class HankeServiceITests : DatabaseTest() { assertThat(toteuttaja.id).isNotEqualTo(firstId) assertThat(toteuttaja.id).isNotEqualTo(rakennuttaja.id) assertThat(hankeKayttajaRepository.findAll()).hasSize(5) - assertThat(kayttajaTunnisteRepository.findAll()).hasSize(5) + assertThat(kayttajaTunnisteRepository.findAll()).hasSize(4) // Hanke perustaja not included } @Test diff --git a/services/hanke-service/src/integrationTest/kotlin/fi/hel/haitaton/hanke/permissions/HankeKayttajaServiceITest.kt b/services/hanke-service/src/integrationTest/kotlin/fi/hel/haitaton/hanke/permissions/HankeKayttajaServiceITest.kt index 308206004..227c2ca87 100644 --- a/services/hanke-service/src/integrationTest/kotlin/fi/hel/haitaton/hanke/permissions/HankeKayttajaServiceITest.kt +++ b/services/hanke-service/src/integrationTest/kotlin/fi/hel/haitaton/hanke/permissions/HankeKayttajaServiceITest.kt @@ -74,23 +74,21 @@ class HankeKayttajaServiceITest : DatabaseTest() { assertThat(id).isEqualTo(entity.id) assertThat(nimi).isEqualTo(entity.nimi) assertThat(sahkoposti).isEqualTo(entity.sahkoposti) - assertThat(rooli).isEqualTo(entity.kayttajaTunniste!!.role) + assertThat(rooli).isEqualTo(entity.permission!!.role.role) assertThat(tunnistautunut).isEqualTo(true) // hanke perustaja } } @Test - fun `createToken saves kayttaja and tunniste with correct permission and other data`() { + fun `addHankeFounder saves kayttaja with correct permission and other data`() { val hankeEntity = hankeFactory.saveEntity(HankeFactory.createNewEntity(id = null)) val savedHankeId = hankeEntity.id!! val savedPermission = savePermission(savedHankeId, USERNAME, KAIKKI_OIKEUDET) - hankeKayttajaService.createToken(savedHankeId, perustaja.toUserContact(), savedPermission) + hankeKayttajaService.addHankeFounder(savedHankeId, perustaja, savedPermission) val kayttajaEntity = hankeKayttajaRepository.findAll().also { assertThat(it).hasSize(1) }.first() - val tunnisteEntity = - kayttajaTunnisteRepository.findAll().also { assertThat(it).hasSize(1) }.first() with(kayttajaEntity) { assertThat(id).isNotNull() assertThat(hankeId).isEqualTo(savedHankeId) @@ -98,13 +96,6 @@ class HankeKayttajaServiceITest : DatabaseTest() { assertThat(sahkoposti).isEqualTo(perustaja.email) assertThat(nimi).isEqualTo(perustaja.nimi) } - with(tunnisteEntity) { - assertThat(id).isNotNull() - assertThat(role).isEqualTo(KAIKKI_OIKEUDET) - assertThat(tunniste).matches(Regex(kayttajaTunnistePattern)) - assertThat(sentAt).isNull() - assertThat(createdAt).isRecent() - } } @Test @@ -120,12 +111,14 @@ class HankeKayttajaServiceITest : DatabaseTest() { applicationData = applicationData, hanke = hanke ) - val initialKayttajatSize = 1 // hanke perustaja + val initialUserSize = 1 // hanke perustaja hankeKayttajaService.saveNewTokensFromApplication(application, 1) - assertThat(kayttajaTunnisteRepository.findAll()).hasSize(initialKayttajatSize) - assertThat(hankeKayttajaRepository.findAll()).hasSize(initialKayttajatSize) + val invitationTokens = kayttajaTunnisteRepository.findAll() + val hankeUsers = hankeKayttajaRepository.findAll() + assertThat(invitationTokens).isEmpty() // Hanke perustaja not included + assertThat(hankeUsers).hasSize(initialUserSize) } @Test diff --git a/services/hanke-service/src/main/kotlin/fi/hel/haitaton/hanke/HankeServiceImpl.kt b/services/hanke-service/src/main/kotlin/fi/hel/haitaton/hanke/HankeServiceImpl.kt index 04a176b71..cc959fe8e 100644 --- a/services/hanke-service/src/main/kotlin/fi/hel/haitaton/hanke/HankeServiceImpl.kt +++ b/services/hanke-service/src/main/kotlin/fi/hel/haitaton/hanke/HankeServiceImpl.kt @@ -161,8 +161,7 @@ open class HankeServiceImpl( private fun initAccessForCreatedHanke(hanke: Hanke, userId: String) { val hankeId = hanke.id!! val permissionAll = permissionService.setPermission(hankeId, userId, Role.KAIKKI_OIKEUDET) - logger.info { "Saving token for Hanke perustaja." } - hankeKayttajaService.createToken(hankeId, hanke.perustaja.toUserContact(), permissionAll) + hankeKayttajaService.addHankeFounder(hankeId, hanke.perustaja, permissionAll) hankeKayttajaService.saveNewTokensFromHanke(hanke) } diff --git a/services/hanke-service/src/main/kotlin/fi/hel/haitaton/hanke/permissions/HankeKayttajaService.kt b/services/hanke-service/src/main/kotlin/fi/hel/haitaton/hanke/permissions/HankeKayttajaService.kt index 5ac61d082..f5d14b39e 100644 --- a/services/hanke-service/src/main/kotlin/fi/hel/haitaton/hanke/permissions/HankeKayttajaService.kt +++ b/services/hanke-service/src/main/kotlin/fi/hel/haitaton/hanke/permissions/HankeKayttajaService.kt @@ -3,6 +3,7 @@ package fi.hel.haitaton.hanke.permissions import fi.hel.haitaton.hanke.HankeArgumentException import fi.hel.haitaton.hanke.application.ApplicationEntity import fi.hel.haitaton.hanke.domain.Hanke +import fi.hel.haitaton.hanke.domain.Perustaja import mu.KotlinLogging import org.springframework.stereotype.Service import org.springframework.transaction.annotation.Transactional @@ -30,7 +31,9 @@ class HankeKayttajaService( .flatMap { it.contacts } .mapNotNull { userContactOrNull(it.fullName(), it.email) } - filterNewContacts(hankeId, contacts).forEach { contact -> createToken(hankeId, contact) } + filterNewContacts(hankeId, contacts).forEach { contact -> + createInvitationToken(hankeId, contact) + } } @Transactional @@ -45,44 +48,45 @@ class HankeKayttajaService( .flatMap { it.alikontaktit } .mapNotNull { userContactOrNull(it.fullName(), it.email) } - filterNewContacts(hankeId, contacts).forEach { contact -> createToken(hankeId, contact) } + filterNewContacts(hankeId, contacts).forEach { contact -> + createInvitationToken(hankeId, contact) + } } @Transactional - fun createToken( - hankeId: Int, - contact: UserContact, - permission: PermissionEntity? = null, - ) { + fun addHankeFounder(hankeId: Int, founder: Perustaja, permissionEntity: PermissionEntity) { + logger.info { "Saving token for Hanke perustaja." } + saveUser( + HankeKayttajaEntity( + hankeId = hankeId, + nimi = founder.nimi, + sahkoposti = founder.email, + permission = permissionEntity, + kayttajaTunniste = null, + ) + ) + } + + private fun createInvitationToken(hankeId: Int, contact: UserContact) { logger.info { "Creating a new user token, hankeId=$hankeId" } - val token: KayttajaTunnisteEntity = tunnisteFrom(permission) - val savedTunniste: KayttajaTunnisteEntity = kayttajaTunnisteRepository.save(token) - logger.info { "Saved the new user token, id=${savedTunniste.id}" } - - val user = - hankeKayttajaRepository.save( - HankeKayttajaEntity( - hankeId = hankeId, - nimi = contact.name, - sahkoposti = contact.email, - permission = permission, - kayttajaTunniste = savedTunniste - ) + val token = KayttajaTunnisteEntity.create() + val kayttajaTunnisteEntity = kayttajaTunnisteRepository.save(token) + logger.info { "Saved the new user token, id=${kayttajaTunnisteEntity.id}" } + + saveUser( + HankeKayttajaEntity( + hankeId = hankeId, + nimi = contact.name, + sahkoposti = contact.email, + permission = null, + kayttajaTunniste = kayttajaTunnisteEntity ) - logger.info { "Saved the user information, id=${user.id}" } + ) } - /** - * Creates [KayttajaTunnisteEntity] based on permission. Use cases: - * - Perustaja has an existing permission, and it is used, role is KAIKKI_OIKEUDET - * - Regular kayttaja does not yet have a permission, role is defaulted to KATSELUOIKEUS - */ - private fun tunnisteFrom(permission: PermissionEntity?): KayttajaTunnisteEntity { - return if (permission != null) { - KayttajaTunnisteEntity.create(role = permission.role.role) - } else { - KayttajaTunnisteEntity.create() - } + private fun saveUser(hankeKayttajaEntity: HankeKayttajaEntity) { + val user = hankeKayttajaRepository.save(hankeKayttajaEntity) + logger.info { "Saved the user information, id=${user.id}" } } private fun userContactOrNull(name: String?, email: String?): UserContact? {