Skip to content

Commit

Permalink
HAI-1844 Don't add kayttajatunniste for hanke founder
Browse files Browse the repository at this point in the history
  • Loading branch information
pitkni committed Aug 21, 2023
1 parent 5ccb892 commit 726fbd5
Show file tree
Hide file tree
Showing 4 changed files with 46 additions and 50 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -74,37 +74,28 @@ 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)
assertThat(permission!!).isOfEqualDataTo(savedPermission)
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
Expand All @@ -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
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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)
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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
Expand All @@ -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? {
Expand Down

0 comments on commit 726fbd5

Please sign in to comment.