EN · DE · RU · FR · ES

#1715: UserTest.kt

projectforge-business/src/test/kotlin/org/projectforge/business/user/UserTest.kt Typ: Kotlin · Rolle: Test · Quelle: projectforge-business/src/test/kotlin/org/projectforge/business/user/UserTest.kt 273 Zeilen · 216 Code · 25 Kommentare · 32 leer
Komponenten-/Integrationstest für User. Validiert die Korrektheit des entsprechenden Produktionsklassenverhaltens.

Codestruktur

Annotationen: Test, Autowired

Klassen: UserTest

Supertyp(en): AbstractTestBase

Funktionen (8): afterAll, testUserDO, testGetUserDisplayname, testSaveAndUpdate, testPasswordHandling, testPasswordQuality, testUniqueUsernameDO, createTestUser

Eigenschaften (28): groupService, configurationDao, passwordQualityService, userGroupCache, userPasswordDao, user, user1, groupnames, group, admin, user, user, id, user, id, passwordObj, minPwLenEntry, passwordQualityMessages, user, userId1, userId2, dbUser, user, STRONGOLDPW, MESSAGE_KEY_PASSWORD_MIN_LENGTH_ERROR...

Importe: 11 Pakete

Paket: org.projectforge.business.user

Quellcode (gekürzt)

package org.projectforge.business.user

import org.junit.jupiter.api.Assertions
import org.junit.jupiter.api.Test
import org.projectforge.business.group.service.GroupService
import org.projectforge.business.password.PasswordQualityService
import org.projectforge.framework.configuration.ConfigurationDao
import org.projectforge.framework.configuration.ConfigurationParam
import org.projectforge.framework.i18n.I18nKeyAndParams
import org.projectforge.framework.persistence.user.entities.PFUserDO
import org.projectforge.business.test.AbstractTestBase
import org.springframework.beans.factory.annotation.Autowired
import java.io.Serializable

class UserTest : AbstractTestBase() {
    @Autowired
    private lateinit var groupService: GroupService

    @Autowired
    private lateinit var configurationDao: ConfigurationDao

    @Autowired
    private lateinit var passwordQualityService: PasswordQualityService

    @Autowired
    private lateinit var userGroupCache: UserGroupCache

    @Autowired
    private lateinit var userPasswordDao: UserPasswordDao

    override fun afterAll() {
        recreateDataBase()
    }

    @Test
    fun testUserDO() {
        logon(TEST_ADMIN_USER)
        val user = userService.getInternalByUsername(TEST_ADMIN_USER)
        Assertions.assertEquals(user.username, TEST_ADMIN_USER)
        val user1 = getUser("user1")
        val groupnames = groupService.getGroupnames(user1.id)
        Assertions.assertEquals("group1; group2", groupnames, "Gruppennamen")
        Assertions.assertEquals(true, userGroupCache.isUserMemberOfGroup(user1.id, getGroupId("group1")))
        Assertions.assertEquals(false, userGroupCache.isUserMemberOfGroup(user1.id, getGroupId("group3")))
        val group = groupService.getGroup(getGroupId("group1"))
        Assertions.assertEquals("group1", group.name)
        val admin = getUser(ADMIN)
        Assertions.assertEquals(true, userGroupCache.isUserMemberOfAdminGroup(admin.id), "Administrator")
        Assertions.assertEquals(false, userGroupCache.isUserMemberOfAdminGroup(user1.id), "Kein Administrator")
    }

    @Test
    fun testGetUserDisplayname() {
        val user = PFUserDO()
        user.username = "hurzel"
        Assertions.assertEquals("hurzel", user.userDisplayName, "getUserDisplayname")
        user.lastname = "Reinhard"
        Assertions.assertEquals("Reinhard", user.getFullname(), "getFullname")
        Assertions.assertEquals("Reinhard (hurzel)", user.userDisplayName, "getUserDisplayname")
        user.firstname = "Kai"
        Assertions.assertEquals("Kai Reinhard", user.getFullname(), "getFullname")
        Assertions.assertEquals("Kai Reinhard (hurzel)", user.userDisplayName, "getUserDisplayname")
    }

    @Test
    fun testSaveAndUpdate() {
        logon(TEST_ADMIN_USER)
        var user = PFUserDO()
        user.username = "UserTest"
        user.description = "Beschreibung"
        val id: Serializable = userService.insert(user, false)
        user = userService.find(id, false)
        Assertions.assertEquals("UserTest", user.username)
        Assertions.assertEquals("Beschreibung", user.description)
        user.description = "Beschreibung\ntest"
        userService.update(user)
        user = userService.find(id, false)
        Assertions.assertEquals("Beschreibung\ntest", user.description)
        userService.update(user)
        user = userService.find(id, false)
    }

    @Test
    fun testPasswordHandling() {
        val user = PFUserDO()
        user.username = "UserTest-Passwörter"
        user.description = "Beschreibung"
        val id = userService.insert(user, false)
        userPasswordDao.encryptAndSavePassword(id, "geheim".toCharArray(), false)
        val passwordObj = userPasswordDao.internalGetByUserId(id)
        Assertions.assertNotNull(passwordObj!!.passwordHash) // Nicht SHA, sollte ignoriert werden.
        Assertions.assertTrue(passwordObj.passwordHash!!.startsWith("SHA{"))
    }

    /**
     * Testet die Passwortqualität.
     */
    @Test
    fun testPasswordQuality() {
        val minPwLenEntry = configurationDao.getEntry(ConfigurationParam.MIN_PASSWORD_LENGTH)!!
        minPwLenEntry.longValue = 10
        configurationDao.update(minPwLenEntry, checkAccess = false)
        var passwordQualityMessages = passwordQualityService.checkPasswordQuality(STRONGOLDPW, null)
        Assertions.assertTrue(
            passwordQualityMessages.contains(
                I18nKeyAndParams(
                    MESSAGE_KEY_PASSWORD_MIN_LENGTH_ERROR, 10
                )
            ),
            "Leeres Passwort nicht erlaubt."
        )

        passwordQualityMessages = passwordQualityService.checkPasswordQuality(STRONGOLDPW, "".toCharArray())
        Assertions.assertTrue(
            passwordQualityMessages.contains(
                I18nKeyAndParams(
                    MESSAGE_KEY_PASSWORD_MIN_LENGTH_ERROR, 10
                )
            ),
// ... (gekürzt, insgesamt 251 Zeilen)

Git-Verlauf

868d6abb7 2025 -> 2026
63081666f Quelltextdatei-Header: 2024 -> 2025.
176cb32d7 WIP: Gradle
f09327286 Migration in Arbeit... (alle Tests aller Pakete: OK).
3c42485eb Migration in Arbeit... (alle Tests aller Pakete: OK).