diff --git a/backend/app/src/test/kotlin/io/tolgee/AuthTest.kt b/backend/app/src/test/kotlin/io/tolgee/AuthTest.kt index bb0b12b217..291da23a6c 100644 --- a/backend/app/src/test/kotlin/io/tolgee/AuthTest.kt +++ b/backend/app/src/test/kotlin/io/tolgee/AuthTest.kt @@ -13,6 +13,7 @@ import io.tolgee.model.Project import io.tolgee.security.authentication.JwtService import io.tolgee.security.thirdParty.GithubOAuthDelegate.GithubEmailResponse import io.tolgee.testing.AbstractControllerTest +import io.tolgee.testing.ContextRecreatingTest import io.tolgee.util.GitHubAuthUtil import io.tolgee.util.GoogleAuthUtil import io.tolgee.util.OAuth2AuthUtil @@ -33,6 +34,7 @@ import org.springframework.web.client.RestTemplate import java.util.* @Transactional +@ContextRecreatingTest class AuthTest : AbstractControllerTest() { @Autowired private val publicController: PublicController? = null @@ -65,6 +67,7 @@ class AuthTest : AbstractControllerTest() { } @Test + @CleanDbBeforeMethod fun generatesTokenForValidUser() { val response = doAuthentication(initialUsername, initialPassword) println(response.andReturn().response.contentAsString) @@ -81,6 +84,7 @@ class AuthTest : AbstractControllerTest() { } @Test + @CleanDbBeforeMethod fun userWithTokenHasAccess() { val response = doAuthentication(initialUsername, initialPassword) diff --git a/backend/app/src/test/kotlin/io/tolgee/PatAuthTest.kt b/backend/app/src/test/kotlin/io/tolgee/PatAuthTest.kt index 0684dae6b6..c85f358aa7 100644 --- a/backend/app/src/test/kotlin/io/tolgee/PatAuthTest.kt +++ b/backend/app/src/test/kotlin/io/tolgee/PatAuthTest.kt @@ -25,7 +25,7 @@ class PatAuthTest : AbstractControllerTest() { add("X-API-Key", "tgpat_${pat.token}") }, ).andIsOk.andAssertThatJson { - node("username").isEqualTo("franta") + node("username").isString.contains("franta") } val lastUsedAt = patService.get(pat.id).lastUsedAt @@ -94,6 +94,7 @@ class PatAuthTest : AbstractControllerTest() { private fun createUserWithPat(expiresAt: Date? = Date(Date().time + 10000)): Pat { var pat: Pat? = null testDataService.saveTestData { + makeUsernamesUnique = true addUserAccount { username = "franta" }.build { diff --git a/backend/app/src/test/kotlin/io/tolgee/StartupImportCommandLineRunnerTest.kt b/backend/app/src/test/kotlin/io/tolgee/StartupImportCommandLineRunnerTest.kt index 75dc71110d..68e458b0d1 100644 --- a/backend/app/src/test/kotlin/io/tolgee/StartupImportCommandLineRunnerTest.kt +++ b/backend/app/src/test/kotlin/io/tolgee/StartupImportCommandLineRunnerTest.kt @@ -8,6 +8,7 @@ import io.tolgee.commandLineRunners.StartupImportCommandLineRunner import io.tolgee.configuration.tolgee.ImportProperties import io.tolgee.configuration.tolgee.TolgeeProperties import io.tolgee.development.Base +import io.tolgee.testing.ContextRecreatingTest import io.tolgee.testing.assert import io.tolgee.testing.assertions.Assertions.assertThat import org.junit.jupiter.api.BeforeAll @@ -20,6 +21,7 @@ import org.springframework.core.io.Resource @Suppress("LateinitVarOverridesLateinitVar") @CleanDbBeforeClass +@ContextRecreatingTest class StartupImportCommandLineRunnerTest : AbstractSpringTest() { private lateinit var base: Base diff --git a/backend/app/src/test/kotlin/io/tolgee/StreamingBodyDatabasePoolHealthTest.kt b/backend/app/src/test/kotlin/io/tolgee/StreamingBodyDatabasePoolHealthTest.kt index b7cd27151b..da0d55f667 100644 --- a/backend/app/src/test/kotlin/io/tolgee/StreamingBodyDatabasePoolHealthTest.kt +++ b/backend/app/src/test/kotlin/io/tolgee/StreamingBodyDatabasePoolHealthTest.kt @@ -21,6 +21,7 @@ import io.tolgee.development.testDataBuilder.data.TranslationsTestData import io.tolgee.fixtures.andIsOk import io.tolgee.fixtures.retry import io.tolgee.fixtures.waitForNotThrowing +import io.tolgee.testing.ContextRecreatingTest import io.tolgee.testing.annotations.ProjectJWTAuthTestMethod import io.tolgee.testing.assert import org.junit.jupiter.api.BeforeEach @@ -36,6 +37,7 @@ import javax.sql.DataSource "tolgee.rate-limits.authentication-limits = false", ], ) +@ContextRecreatingTest class StreamingBodyDatabasePoolHealthTest : ProjectAuthControllerTest("/v2/projects/") { lateinit var testData: TranslationsTestData @@ -45,6 +47,7 @@ class StreamingBodyDatabasePoolHealthTest : ProjectAuthControllerTest("/v2/proje @BeforeEach fun setupData() { testData = TranslationsTestData() + testData.root.makeUsernamesUnique = true testDataService.saveTestData(testData.root) userAccount = testData.user diff --git a/backend/app/src/test/kotlin/io/tolgee/activity/ActivityLogTest.kt b/backend/app/src/test/kotlin/io/tolgee/activity/ActivityLogTest.kt index 05ab893ac5..3c4487ac7c 100644 --- a/backend/app/src/test/kotlin/io/tolgee/activity/ActivityLogTest.kt +++ b/backend/app/src/test/kotlin/io/tolgee/activity/ActivityLogTest.kt @@ -14,6 +14,7 @@ import io.tolgee.fixtures.node import io.tolgee.fixtures.waitFor import io.tolgee.fixtures.waitForNotThrowing import io.tolgee.model.enums.TranslationState +import io.tolgee.testing.ContextRecreatingTest import io.tolgee.testing.annotations.ProjectJWTAuthTestMethod import io.tolgee.testing.assert import net.javacrumbs.jsonunit.assertj.JsonAssert @@ -32,6 +33,7 @@ import org.springframework.test.web.servlet.ResultActions import java.math.BigDecimal import java.util.function.Consumer +@ContextRecreatingTest class ActivityLogTest : ProjectAuthControllerTest("/v2/projects/") { private lateinit var testData: BaseTestData @@ -55,6 +57,7 @@ class ActivityLogTest : ProjectAuthControllerTest("/v2/projects/") { name = "key" } } + testData.root.makeUsernamesUnique = true testDataService.saveTestData(testData.root) projectSupplier = { testData.projectBuilder.self } userAccount = testData.user @@ -97,6 +100,7 @@ class ActivityLogTest : ProjectAuthControllerTest("/v2/projects/") { fun `it returns params for batch job activity`() { val testData = BatchJobsTestData() val keys = testData.addTranslationOperationData(10) + testData.root.makeUsernamesUnique = true testDataService.saveTestData(testData.root) userAccount = testData.user this.projectSupplier = { testData.projectBuilder.self } @@ -171,7 +175,7 @@ class ActivityLogTest : ProjectAuthControllerTest("/v2/projects/") { text = "t" state = TranslationState.REVIEWED }.self - + testData.root.makeUsernamesUnique = true testDataService.saveTestData(testData.root) userAccount = testData.user projectSupplier = @@ -201,7 +205,7 @@ class ActivityLogTest : ProjectAuthControllerTest("/v2/projects/") { private fun JsonAssert.isValidAuthor() { node("id").isNumber - node("username").isEqualTo("test_username") + node("username").isString.contains("test_username") node("name").isEqualTo("Franta") } diff --git a/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/AdministrationControllerTest.kt b/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/AdministrationControllerTest.kt index 343abe144c..384f201f69 100644 --- a/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/AdministrationControllerTest.kt +++ b/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/AdministrationControllerTest.kt @@ -1,5 +1,6 @@ package io.tolgee.api.v2.controllers +import io.tolgee.CleanDbBeforeMethod import io.tolgee.development.testDataBuilder.data.AdministrationTestData import io.tolgee.fixtures.andAssertThatJson import io.tolgee.fixtures.andGetContentAsString @@ -24,11 +25,13 @@ class AdministrationControllerTest : AuthorizedControllerTest() { @BeforeEach fun createData() { testData = AdministrationTestData() + testData.root.makeUsernamesUnique = true testDataService.saveTestData(testData.root) userAccount = testData.admin } @Test + @CleanDbBeforeMethod fun `returns organizations`() { performAuthGet("/v2/administration/organizations").andPrettyPrint.andIsOk.andAssertThatJson { node("_embedded.organizations") { @@ -41,6 +44,7 @@ class AdministrationControllerTest : AuthorizedControllerTest() { } @Test + @CleanDbBeforeMethod fun `returns users`() { performAuthGet("/v2/administration/users").andPrettyPrint.andAssertThatJson { node("_embedded.users") { diff --git a/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/AnnouncementControllerTest.kt b/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/AnnouncementControllerTest.kt index 3359e30e4a..bf9087e0b9 100644 --- a/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/AnnouncementControllerTest.kt +++ b/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/AnnouncementControllerTest.kt @@ -15,6 +15,7 @@ class AnnouncementControllerTest : AuthorizedControllerTest() { @BeforeEach fun createData() { testData = ProjectsTestData() + testData.root.makeUsernamesUnique = true testDataService.saveTestData(testData.root) userAccount = testData.user } diff --git a/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/ApiKeyControllerTest.kt b/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/ApiKeyControllerTest.kt index 698eacb72d..3896b43be7 100644 --- a/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/ApiKeyControllerTest.kt +++ b/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/ApiKeyControllerTest.kt @@ -15,6 +15,7 @@ import io.tolgee.model.enums.Scope import io.tolgee.testing.AuthorizedControllerTest import io.tolgee.testing.assert import io.tolgee.testing.assertions.Assertions.assertThat +import org.junit.jupiter.api.AfterEach import org.junit.jupiter.api.BeforeEach import org.junit.jupiter.api.Test import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc @@ -31,10 +32,16 @@ class ApiKeyControllerTest : AuthorizedControllerTest() { @BeforeEach fun createData() { testData = ApiKeysTestData() + testData.root.makeUsernamesUnique = true testDataService.saveTestData(testData.root) userAccount = testData.user } + @AfterEach + fun cleanup() { + testDataService.cleanApiKeys(testData.root) + } + @Test fun `creates API key (without description and expiration)`() { performAuthPost( @@ -45,7 +52,7 @@ class ApiKeyControllerTest : AuthorizedControllerTest() { ), ).andIsOk.andPrettyPrint.andAssertThatJson { node("key").isString.hasSizeGreaterThan(10) - node("username").isEqualTo("test_username") + node("username").isString.contains("test_username") node("userFullName").isEqualTo("") node("projectId").isNumber.isGreaterThan(BigDecimal(0)) node("id").isValidId @@ -64,7 +71,7 @@ class ApiKeyControllerTest : AuthorizedControllerTest() { ), ).andIsOk.andPrettyPrint.andAssertThatJson { node("key").isString.hasSizeGreaterThan(10) - node("username").isEqualTo("test_username") + node("username").isString.contains("test_username") node("userFullName").isEqualTo("") node("projectId").isNumber.isGreaterThan(BigDecimal(0)) node("id").isValidId @@ -131,7 +138,7 @@ class ApiKeyControllerTest : AuthorizedControllerTest() { node("[0]") { node("key").isAbsent() node("description").isEqualTo("test_......ta_39") - node("username").isEqualTo("franta") + node("username").isString.contains("franta") node("userFullName").isEqualTo("Franta Dobrota") node("projectId").isNumber.isGreaterThan(BigDecimal(0)) node("id").isValidId @@ -151,7 +158,7 @@ class ApiKeyControllerTest : AuthorizedControllerTest() { isArray.hasSize(1) node("[0]") { node("key").isAbsent() - node("username").isEqualTo("franta") + node("username").isString.contains("franta") node("userFullName").isEqualTo("Franta Dobrota") node("projectId").isNumber.isGreaterThan(BigDecimal(0)) node("id").isValidId diff --git a/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/AutoTranslationControllerTest.kt b/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/AutoTranslationControllerTest.kt index 38dde76e20..b0fe9d38b4 100644 --- a/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/AutoTranslationControllerTest.kt +++ b/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/AutoTranslationControllerTest.kt @@ -2,14 +2,20 @@ package io.tolgee.api.v2.controllers import io.tolgee.constants.Message import io.tolgee.development.testDataBuilder.data.AutoTranslateTestData -import io.tolgee.fixtures.* +import io.tolgee.fixtures.MachineTranslationTest +import io.tolgee.fixtures.andHasErrorMessage +import io.tolgee.fixtures.andIsBadRequest +import io.tolgee.fixtures.andIsForbidden +import io.tolgee.fixtures.andIsOk import io.tolgee.model.enums.Scope +import io.tolgee.testing.ContextRecreatingTest import io.tolgee.testing.annotations.ProjectApiKeyAuthTestMethod import io.tolgee.testing.annotations.ProjectJWTAuthTestMethod import io.tolgee.testing.assertions.Assertions.assertThat import org.junit.jupiter.api.BeforeEach import org.junit.jupiter.api.Test +@ContextRecreatingTest class AutoTranslationControllerTest : MachineTranslationTest() { companion object { private const val INITIAL_BUCKET_CREDITS = 150000L @@ -20,6 +26,7 @@ class AutoTranslationControllerTest : MachineTranslationTest() { @BeforeEach fun setup() { testData = AutoTranslateTestData() + testData.root.makeUsernamesUnique = true testData.disableAutoTranslating() this.projectSupplier = { testData.project } initMachineTranslationMocks() diff --git a/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/BigMetaControllerTest.kt b/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/BigMetaControllerTest.kt index 70e942e7b5..719fc2c06a 100644 --- a/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/BigMetaControllerTest.kt +++ b/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/BigMetaControllerTest.kt @@ -25,6 +25,7 @@ class BigMetaControllerTest : ProjectAuthControllerTest("/v2/projects/"), Loggin @BeforeEach fun setup() { testData = BigMetaTestData() + testData.root.makeUsernamesUnique = true } private fun saveTestDataAndPrepare() { diff --git a/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/BusinessEventControllerTest.kt b/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/BusinessEventControllerTest.kt index 68b4a1558d..09d3c1a974 100644 --- a/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/BusinessEventControllerTest.kt +++ b/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/BusinessEventControllerTest.kt @@ -29,6 +29,7 @@ class BusinessEventControllerTest : ProjectAuthControllerTest("/v2/projects/") { @BeforeEach fun setup() { testData = BaseTestData() + testData.root.makeUsernamesUnique = true testDataService.saveTestData(testData.root) projectSupplier = { testData.projectBuilder.self } userAccount = testData.user diff --git a/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/NamespaceControllerTest.kt b/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/NamespaceControllerTest.kt index fd6ca921e2..a71c42c039 100644 --- a/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/NamespaceControllerTest.kt +++ b/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/NamespaceControllerTest.kt @@ -21,6 +21,7 @@ class NamespaceControllerTest : ProjectAuthControllerTest("/v2/projects/") { @BeforeEach fun createData() { testData = NamespacesTestData() + testData.root.makeUsernamesUnique = true testDataService.saveTestData(testData.root) userAccount = testData.user projectSupplier = { testData.projectBuilder.self } diff --git a/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/PatControllerTest.kt b/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/PatControllerTest.kt index 9292ddc5a7..9b4702af88 100644 --- a/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/PatControllerTest.kt +++ b/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/PatControllerTest.kt @@ -27,6 +27,7 @@ class PatControllerTest : AuthorizedControllerTest() { @BeforeEach fun createData() { testData = PatTestData() + testData.root.makeUsernamesUnique = true testDataService.saveTestData(testData.root) userAccount = testData.user } diff --git a/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/PreferredOrganizationControllerTest.kt b/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/PreferredOrganizationControllerTest.kt index 39fa721ded..71763e8756 100644 --- a/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/PreferredOrganizationControllerTest.kt +++ b/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/PreferredOrganizationControllerTest.kt @@ -15,6 +15,7 @@ class PreferredOrganizationControllerTest : AuthorizedControllerTest() { @BeforeEach fun setup() { testData = OrganizationTestData() + testData.root.makeUsernamesUnique = true tolgeeProperties.authentication.userCanCreateOrganizations = true testDataService.saveTestData(testData.root) } diff --git a/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/ProjectActivityControllerTest.kt b/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/ProjectActivityControllerTest.kt index bc6b6a1dc4..cd3c8c729c 100644 --- a/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/ProjectActivityControllerTest.kt +++ b/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/ProjectActivityControllerTest.kt @@ -28,6 +28,7 @@ class ProjectActivityControllerTest : ProjectAuthControllerTest("/v2/projects/") @BeforeEach fun setup() { testData = ImportTestData() + testData.root.makeUsernamesUnique = true testData.addManyTranslations() testData.setAllResolved() testData.setAllOverride() diff --git a/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/ProjectStatsControllerTest.kt b/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/ProjectStatsControllerTest.kt index f095d5c4c9..72f814072a 100644 --- a/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/ProjectStatsControllerTest.kt +++ b/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/ProjectStatsControllerTest.kt @@ -26,6 +26,7 @@ class ProjectStatsControllerTest : ProjectAuthControllerTest("/v2/projects/") { fun setup() { mockDate("2022-03-20") testData = TranslationsTestData() + testData.root.makeUsernamesUnique = true testData.addTranslationsWithStates() testDataService.saveTestData(testData.root) userAccount = testData.user diff --git a/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/SlugControllerTest.kt b/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/SlugControllerTest.kt index d9dd776e32..985eff0fea 100644 --- a/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/SlugControllerTest.kt +++ b/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/SlugControllerTest.kt @@ -1,5 +1,7 @@ package io.tolgee.api.v2.controllers +import io.tolgee.CleanDbBeforeClass +import io.tolgee.CleanDbBeforeMethod import io.tolgee.dtos.request.GenerateSlugDto import io.tolgee.fixtures.andAssertThatJson import io.tolgee.fixtures.andIsOk @@ -8,6 +10,7 @@ import io.tolgee.model.Project import io.tolgee.testing.AuthorizedControllerTest import org.junit.jupiter.api.Test +@CleanDbBeforeClass class SlugControllerTest : AuthorizedControllerTest() { @Test fun testValidateOrganizationSlug() { @@ -42,6 +45,7 @@ class SlugControllerTest : AuthorizedControllerTest() { } @Test + @CleanDbBeforeMethod fun testGenerateOrganizationSlug() { performAuthPost("/v2/slug/generate-organization", GenerateSlugDto("Hello world")) .andIsOk.andAssertThatJson { diff --git a/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/UserMfaControllerTest.kt b/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/UserMfaControllerTest.kt index 91683a0a11..01587906cd 100644 --- a/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/UserMfaControllerTest.kt +++ b/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/UserMfaControllerTest.kt @@ -1,5 +1,6 @@ package io.tolgee.api.v2.controllers +import io.tolgee.CleanDbBeforeMethod import io.tolgee.dtos.request.UserMfaRecoveryRequestDto import io.tolgee.dtos.request.UserTotpDisableRequestDto import io.tolgee.dtos.request.UserTotpEnableRequestDto @@ -28,6 +29,7 @@ class UserMfaControllerTest : AuthorizedControllerTest() { } @Test + @CleanDbBeforeMethod fun `it enables MFA`() { retry { val requestDto = @@ -44,6 +46,7 @@ class UserMfaControllerTest : AuthorizedControllerTest() { } @Test + @CleanDbBeforeMethod fun `it disables MFA`() { enableMfa() val requestDto = @@ -56,6 +59,7 @@ class UserMfaControllerTest : AuthorizedControllerTest() { } @Test + @CleanDbBeforeMethod fun `it regenerates MFA recovery codes`() { enableMfa() val requestDto = @@ -72,6 +76,7 @@ class UserMfaControllerTest : AuthorizedControllerTest() { } @Test + @CleanDbBeforeMethod fun `it requires valid TOTP code for activation`() { retry { val requestDto = @@ -93,6 +98,7 @@ class UserMfaControllerTest : AuthorizedControllerTest() { } @Test + @CleanDbBeforeMethod fun `it requires valid password`() { val enableRequestDto = UserTotpEnableRequestDto( @@ -129,6 +135,7 @@ class UserMfaControllerTest : AuthorizedControllerTest() { } @Test + @CleanDbBeforeMethod fun `it invalidates tokens generated prior a mfa status change`() { retry { loginAsAdminIfNotLogged() diff --git a/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/UserPreferencesControllerTest.kt b/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/UserPreferencesControllerTest.kt index 3680a47249..07fc6abaa1 100644 --- a/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/UserPreferencesControllerTest.kt +++ b/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/UserPreferencesControllerTest.kt @@ -14,6 +14,7 @@ class UserPreferencesControllerTest : AuthorizedControllerTest() { @BeforeEach fun setup() { testData = OrganizationTestData() + testData.root.makeUsernamesUnique = true testDataService.saveTestData(testData.root) } diff --git a/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/V2LanguageControllerTest.kt b/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/V2LanguageControllerTest.kt index afa54f47b9..13588f74ff 100644 --- a/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/V2LanguageControllerTest.kt +++ b/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/V2LanguageControllerTest.kt @@ -1,5 +1,6 @@ package io.tolgee.api.v2.controllers +import io.tolgee.CleanDbBeforeMethod import io.tolgee.ProjectAuthControllerTest import io.tolgee.activity.data.ActivityType import io.tolgee.activity.data.PropertyModification @@ -30,6 +31,7 @@ class V2LanguageControllerTest : ProjectAuthControllerTest("/v2/projects/") { private val languageDTOCorrect = LanguageRequest("Spanish", "Espanol", "es") @Test + @CleanDbBeforeMethod fun createLanguage() { val base = dbPopulator.createBase(generateUniqueString()) val project = base.project @@ -38,6 +40,7 @@ class V2LanguageControllerTest : ProjectAuthControllerTest("/v2/projects/") { } @Test + @CleanDbBeforeMethod fun editLanguage() { val base = dbPopulator.createBase(generateUniqueString()) val project = base.project @@ -63,6 +66,7 @@ class V2LanguageControllerTest : ProjectAuthControllerTest("/v2/projects/") { } @Test + @CleanDbBeforeMethod fun findAllLanguages() { val project = dbPopulator.createBase(generateUniqueString(), "ben", "pwd").project loginAsUser("ben") @@ -74,6 +78,7 @@ class V2LanguageControllerTest : ProjectAuthControllerTest("/v2/projects/") { } @Test + @CleanDbBeforeMethod fun deleteLanguage() { val base = dbPopulator.createBase(generateUniqueString()) val project = base.project @@ -86,6 +91,7 @@ class V2LanguageControllerTest : ProjectAuthControllerTest("/v2/projects/") { } @Test + @CleanDbBeforeMethod @ProjectApiKeyAuthTestMethod(scopes = [Scope.LANGUAGES_EDIT]) fun `deletes language with API key`() { val base = dbPopulator.createBase(generateUniqueString()) @@ -101,6 +107,7 @@ class V2LanguageControllerTest : ProjectAuthControllerTest("/v2/projects/") { } @Test + @CleanDbBeforeMethod @ProjectApiKeyAuthTestMethod(scopes = [Scope.TRANSLATIONS_VIEW]) fun `does not delete language with API key (permissions)`() { val base = dbPopulator.createBase(generateUniqueString()) @@ -113,6 +120,7 @@ class V2LanguageControllerTest : ProjectAuthControllerTest("/v2/projects/") { } @Test + @CleanDbBeforeMethod fun `cannot delete base language`() { val base = dbPopulator.createBase(generateUniqueString()) executeInNewTransaction { @@ -128,6 +136,7 @@ class V2LanguageControllerTest : ProjectAuthControllerTest("/v2/projects/") { } @Test + @CleanDbBeforeMethod fun `automatically sets base language`() { val base = dbPopulator.createBase(generateUniqueString()) @@ -151,6 +160,7 @@ class V2LanguageControllerTest : ProjectAuthControllerTest("/v2/projects/") { } @Test + @CleanDbBeforeMethod fun createLanguageTestValidationComa() { val base = dbPopulator.createBase(generateUniqueString()) val project = base.project @@ -187,6 +197,7 @@ class V2LanguageControllerTest : ProjectAuthControllerTest("/v2/projects/") { } @Test + @CleanDbBeforeMethod @ProjectApiKeyAuthTestMethod fun findAllLanguagesApiKey() { performProjectAuthGet("languages").andIsOk.andAssertThatJson { diff --git a/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/batch/BatchJobManagementControllerCancellationTest.kt b/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/batch/BatchJobManagementControllerCancellationTest.kt index 31d5f334a4..140fc097cd 100644 --- a/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/batch/BatchJobManagementControllerCancellationTest.kt +++ b/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/batch/BatchJobManagementControllerCancellationTest.kt @@ -1,5 +1,6 @@ package io.tolgee.api.v2.controllers.batch +import io.tolgee.CleanDbBeforeMethod import io.tolgee.ProjectAuthControllerTest import io.tolgee.batch.BatchJobActivityFinalizer import io.tolgee.batch.BatchJobChunkExecutionQueue @@ -87,6 +88,7 @@ class BatchJobManagementControllerCancellationTest : ProjectAuthControllerTest(" @Test @ProjectJWTAuthTestMethod + @CleanDbBeforeMethod fun `cancels a job`() { batchDumper.finallyDump { val keys = testData.addTranslationOperationData(100) @@ -143,6 +145,7 @@ class BatchJobManagementControllerCancellationTest : ProjectAuthControllerTest(" @Test @ProjectJWTAuthTestMethod + @CleanDbBeforeMethod fun `cannot cancel other's job`() { saveAndPrepare() @@ -158,6 +161,7 @@ class BatchJobManagementControllerCancellationTest : ProjectAuthControllerTest(" @Test @ProjectJWTAuthTestMethod + @CleanDbBeforeMethod fun `stuck job can be cancelled`() { saveAndPrepare() batchJobConcurrentLauncher.pause = true diff --git a/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/batch/BatchJobManagementControllerTest.kt b/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/batch/BatchJobManagementControllerTest.kt index c888505db0..6d4b401b78 100644 --- a/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/batch/BatchJobManagementControllerTest.kt +++ b/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/batch/BatchJobManagementControllerTest.kt @@ -1,5 +1,6 @@ package io.tolgee.api.v2.controllers.batch +import io.tolgee.CleanDbBeforeMethod import io.tolgee.ProjectAuthControllerTest import io.tolgee.batch.BatchJobActivityFinalizer import io.tolgee.batch.BatchJobChunkExecutionQueue @@ -88,6 +89,7 @@ class BatchJobManagementControllerTest : ProjectAuthControllerTest("/v2/projects fun setup() { batchJobChunkExecutionQueue.clear() testData = BatchJobsTestData() + testData.root.makeUsernamesUnique = true batchJobChunkExecutionQueue.populateQueue() Mockito.reset( mtCreditBucketService, @@ -107,6 +109,7 @@ class BatchJobManagementControllerTest : ProjectAuthControllerTest("/v2/projects @Test @ProjectJWTAuthTestMethod + @CleanDbBeforeMethod fun `exception from inner transaction doesn't break it`() { batchDumper.finallyDump { val keys = testData.addTranslationOperationData(100) @@ -148,6 +151,7 @@ class BatchJobManagementControllerTest : ProjectAuthControllerTest("/v2/projects @Test @ProjectJWTAuthTestMethod + @CleanDbBeforeMethod fun `returns list of jobs`() { saveAndPrepare() @@ -214,6 +218,7 @@ class BatchJobManagementControllerTest : ProjectAuthControllerTest("/v2/projects @Test @ProjectJWTAuthTestMethod + @CleanDbBeforeMethod fun `returns list of my jobs`() { saveAndPrepare() @@ -242,6 +247,7 @@ class BatchJobManagementControllerTest : ProjectAuthControllerTest("/v2/projects @Test @ProjectJWTAuthTestMethod + @CleanDbBeforeMethod fun `returns list of current jobs`() { saveAndPrepare() @@ -303,6 +309,7 @@ class BatchJobManagementControllerTest : ProjectAuthControllerTest("/v2/projects @Test @ProjectJWTAuthTestMethod + @CleanDbBeforeMethod fun `returns single job`() { saveAndPrepare() @@ -320,6 +327,7 @@ class BatchJobManagementControllerTest : ProjectAuthControllerTest("/v2/projects @Test @ProjectJWTAuthTestMethod + @CleanDbBeforeMethod fun `cannot get other's job`() { saveAndPrepare() diff --git a/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/machineTranslation/MachineTranslationSettingsControllerTest.kt b/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/machineTranslation/MachineTranslationSettingsControllerTest.kt index 794de9d964..c395e792eb 100644 --- a/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/machineTranslation/MachineTranslationSettingsControllerTest.kt +++ b/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/machineTranslation/MachineTranslationSettingsControllerTest.kt @@ -34,6 +34,7 @@ class MachineTranslationSettingsControllerTest : ProjectAuthControllerTest() { private fun initTestData() { testData = MtSettingsTestData() + testData.root.makeUsernamesUnique = true testDataService.saveTestData(testData.root) projectSupplier = { testData.projectBuilder.self } userAccount = testData.user diff --git a/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/machineTranslation/MtCreditsControllerTest.kt b/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/machineTranslation/MtCreditsControllerTest.kt index 482bfffcfe..5ecc92af6e 100644 --- a/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/machineTranslation/MtCreditsControllerTest.kt +++ b/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/machineTranslation/MtCreditsControllerTest.kt @@ -17,6 +17,7 @@ class MtCreditsControllerTest : AuthorizedControllerTest() { @BeforeEach fun setup() { testData = MtCreditsTestData() + testData.root.makeUsernamesUnique = true testDataService.saveTestData(testData.root) userAccount = testData.user } diff --git a/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/organizationController/OrganizationControllerInvitingTest.kt b/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/organizationController/OrganizationControllerInvitingTest.kt index d188069a90..e0a6d6d4f4 100644 --- a/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/organizationController/OrganizationControllerInvitingTest.kt +++ b/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/organizationController/OrganizationControllerInvitingTest.kt @@ -2,6 +2,7 @@ package io.tolgee.api.v2.controllers.organizationController import com.fasterxml.jackson.module.kotlin.jacksonObjectMapper import com.fasterxml.jackson.module.kotlin.readValue +import io.tolgee.CleanDbBeforeMethod import io.tolgee.dtos.misc.CreateOrganizationInvitationParams import io.tolgee.dtos.request.organization.OrganizationDto import io.tolgee.dtos.request.organization.OrganizationInviteUserDto @@ -50,6 +51,7 @@ class OrganizationControllerInvitingTest : AuthorizedControllerTest() { } @Test + @CleanDbBeforeMethod fun testGetAllInvitations() { val helloUser = dbPopulator.createUserIfNotExists("hellouser") @@ -73,6 +75,7 @@ class OrganizationControllerInvitingTest : AuthorizedControllerTest() { } @Test + @CleanDbBeforeMethod fun testInviteUser() { val helloUser = dbPopulator.createUserIfNotExists("hellouser") loginAsUser(helloUser.username) @@ -89,6 +92,7 @@ class OrganizationControllerInvitingTest : AuthorizedControllerTest() { } @Test + @CleanDbBeforeMethod fun testAcceptInvitation() { val helloUser = dbPopulator.createUserIfNotExists("hellouser") @@ -112,6 +116,7 @@ class OrganizationControllerInvitingTest : AuthorizedControllerTest() { } @Test + @CleanDbBeforeMethod fun `it prevents accepting invitation again already a member`() { val helloUser = dbPopulator.createUserIfNotExists("hellouser") @@ -131,6 +136,7 @@ class OrganizationControllerInvitingTest : AuthorizedControllerTest() { } @Test + @CleanDbBeforeMethod fun testDeleteInvitation() { val organization = prepareTestOrganization() @@ -154,6 +160,7 @@ class OrganizationControllerInvitingTest : AuthorizedControllerTest() { } @Test + @CleanDbBeforeMethod fun `stores name and e-mail with invitation`() { val organization = prepareTestOrganization() @@ -164,6 +171,7 @@ class OrganizationControllerInvitingTest : AuthorizedControllerTest() { } @Test + @CleanDbBeforeMethod fun `sends invitation e-mail`() { val organization = prepareTestOrganization() @@ -177,6 +185,7 @@ class OrganizationControllerInvitingTest : AuthorizedControllerTest() { } @Test + @CleanDbBeforeMethod fun `e-mail is sanitized`() { dummyDto.name = "Test org test" val organization = prepareTestOrganization() @@ -190,6 +199,7 @@ class OrganizationControllerInvitingTest : AuthorizedControllerTest() { } @Test + @CleanDbBeforeMethod fun `does not invite when email already invited`() { val organization = prepareTestOrganization() performCreateInvitation(organization.id).andIsOk @@ -197,6 +207,7 @@ class OrganizationControllerInvitingTest : AuthorizedControllerTest() { } @Test + @CleanDbBeforeMethod fun `does not invite when email already member`() { val organization = prepareTestOrganization() performAuthPut( diff --git a/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/organizationController/OrganizationControllerLeavingTest.kt b/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/organizationController/OrganizationControllerLeavingTest.kt index 14fed0f00c..f4f25dd469 100644 --- a/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/organizationController/OrganizationControllerLeavingTest.kt +++ b/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/organizationController/OrganizationControllerLeavingTest.kt @@ -1,5 +1,6 @@ package io.tolgee.api.v2.controllers.organizationController +import io.tolgee.CleanDbBeforeMethod import io.tolgee.development.testDataBuilder.data.OrganizationTestData import io.tolgee.development.testDataBuilder.data.PermissionsTestData import io.tolgee.fixtures.andAssertError @@ -17,6 +18,7 @@ import org.springframework.data.domain.PageRequest @AutoConfigureMockMvc class OrganizationControllerLeavingTest : BaseOrganizationControllerTest() { @Test + @CleanDbBeforeMethod fun testLeaveOrganization() { val testOrg = executeInNewTransaction { this.organizationService.create(dummyDto, userAccount!!) } organizationRoleService.grantOwnerRoleToUser(dbPopulator.createUserIfNotExists("secondOwner"), testOrg) @@ -29,6 +31,7 @@ class OrganizationControllerLeavingTest : BaseOrganizationControllerTest() { organizationRepository.findAllPermitted(userAccount!!.id, PageRequest.of(0, 20)).content @Test + @CleanDbBeforeMethod fun `leave will reset preferred`() { val testData = OrganizationTestData() testDataService.saveTestData(testData.root) @@ -46,6 +49,7 @@ class OrganizationControllerLeavingTest : BaseOrganizationControllerTest() { } @Test + @CleanDbBeforeMethod fun `removes all direct permissions when leaving`() { val testData = PermissionsTestData() val me = testData.addUserWithPermissions(type = ProjectPermissionType.MANAGE) @@ -66,6 +70,7 @@ class OrganizationControllerLeavingTest : BaseOrganizationControllerTest() { } @Test + @CleanDbBeforeMethod fun testLeaveOrganizationNoOtherOwner() { val organization = executeInNewTransaction { this.organizationService.create(dummyDto, userAccount!!) } organizationRepository.findAllPermitted(userAccount!!.id, PageRequest.of(0, 20)).content.let { diff --git a/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/organizationController/OrganizationControllerMembersTest.kt b/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/organizationController/OrganizationControllerMembersTest.kt index 943504f89d..c3b13bab3b 100644 --- a/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/organizationController/OrganizationControllerMembersTest.kt +++ b/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/organizationController/OrganizationControllerMembersTest.kt @@ -1,5 +1,6 @@ package io.tolgee.api.v2.controllers.organizationController +import io.tolgee.CleanDbBeforeMethod import io.tolgee.constants.Message import io.tolgee.development.testDataBuilder.data.OrganizationTestData import io.tolgee.development.testDataBuilder.data.PermissionsTestData @@ -27,6 +28,7 @@ import org.springframework.transaction.annotation.Transactional @AutoConfigureMockMvc class OrganizationControllerMembersTest : BaseOrganizationControllerTest() { @Test + @CleanDbBeforeMethod fun testGetAllUsers() { val users = dbPopulator.createUsersAndOrganizations() loginAsUser(users[0].username) @@ -43,6 +45,7 @@ class OrganizationControllerMembersTest : BaseOrganizationControllerTest() { } @Test + @CleanDbBeforeMethod fun `it returns also users with direct permissions on some project`() { val testData = PermissionsTestData() testData.addUserWithPermissions(type = ProjectPermissionType.MANAGE) @@ -85,6 +88,7 @@ class OrganizationControllerMembersTest : BaseOrganizationControllerTest() { } @Test + @CleanDbBeforeMethod fun testGetAllUsersNotPermitted() { val users = dbPopulator.createUsersAndOrganizations() val organizationId = users[1].organizationRoles[0].organization!!.id @@ -92,6 +96,7 @@ class OrganizationControllerMembersTest : BaseOrganizationControllerTest() { } @Test + @CleanDbBeforeMethod @Transactional fun `cannot set own permission`() { withOwnerInOrganization { organization, owner, role -> @@ -109,6 +114,7 @@ class OrganizationControllerMembersTest : BaseOrganizationControllerTest() { } @Test + @CleanDbBeforeMethod fun testRemoveUser() { withOwnerInOrganization { organization, owner, role -> organizationRoleRepository.save(role) @@ -120,6 +126,7 @@ class OrganizationControllerMembersTest : BaseOrganizationControllerTest() { } @Test + @CleanDbBeforeMethod fun `removes user with all permissions`() { val testData = PermissionsTestData() val me = testData.addUserWithPermissions(type = ProjectPermissionType.MANAGE) @@ -135,6 +142,7 @@ class OrganizationControllerMembersTest : BaseOrganizationControllerTest() { } @Test + @CleanDbBeforeMethod fun `remove user resets preferred`() { val testData = OrganizationTestData() testDataService.saveTestData(testData.root) @@ -146,6 +154,7 @@ class OrganizationControllerMembersTest : BaseOrganizationControllerTest() { } @Test + @CleanDbBeforeMethod fun `doesn't create new preferred when cannot create organizations`() { tolgeeProperties.authentication.userCanCreateOrganizations = false val testData = OrganizationTestData() diff --git a/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/organizationController/OrganizationControllerTest.kt b/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/organizationController/OrganizationControllerTest.kt index 7ae6542fe2..74f06c9ff1 100644 --- a/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/organizationController/OrganizationControllerTest.kt +++ b/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/organizationController/OrganizationControllerTest.kt @@ -1,5 +1,6 @@ package io.tolgee.api.v2.controllers.organizationController +import io.tolgee.CleanDbBeforeMethod import io.tolgee.development.testDataBuilder.data.OrganizationTestData import io.tolgee.dtos.request.organization.OrganizationDto import io.tolgee.dtos.request.organization.SetOrganizationRoleDto @@ -18,6 +19,7 @@ import org.springframework.transaction.annotation.Transactional @AutoConfigureMockMvc class OrganizationControllerTest : BaseOrganizationControllerTest() { @Test + @CleanDbBeforeMethod fun `returns all`() { val users = dbPopulator.createUsersAndOrganizations() loginAsUser(users[1].name) @@ -34,6 +36,7 @@ class OrganizationControllerTest : BaseOrganizationControllerTest() { } @Test + @CleanDbBeforeMethod fun `return all with pagination`() { val users = dbPopulator.createUsersAndOrganizations() loginAsUser(users[1].name) @@ -47,6 +50,7 @@ class OrganizationControllerTest : BaseOrganizationControllerTest() { } @Test + @CleanDbBeforeMethod fun `get all returns also organizations with project with direct permission`() { val testData = OrganizationTestData() testDataService.saveTestData(testData.root) @@ -62,6 +66,7 @@ class OrganizationControllerTest : BaseOrganizationControllerTest() { } @Test + @CleanDbBeforeMethod fun `returns all project in organization without checking for permissions`() { val testData = OrganizationTestData() @@ -81,6 +86,7 @@ class OrganizationControllerTest : BaseOrganizationControllerTest() { } @Test + @CleanDbBeforeMethod fun testGetAllFilterOwned() { val users = dbPopulator.createUsersAndOrganizations() @@ -98,6 +104,7 @@ class OrganizationControllerTest : BaseOrganizationControllerTest() { } @Test + @CleanDbBeforeMethod fun testGetAllSort() { val users = dbPopulator.createUsersAndOrganizations() @@ -111,6 +118,7 @@ class OrganizationControllerTest : BaseOrganizationControllerTest() { } @Test + @CleanDbBeforeMethod fun testGetOneWithUrl() { createOrganization(dummyDto).let { performAuthGet("/v2/organizations/${it.slug}").andIsOk.andAssertThatJson { @@ -121,6 +129,7 @@ class OrganizationControllerTest : BaseOrganizationControllerTest() { } @Test + @CleanDbBeforeMethod fun `returns one only with project base permission`() { val testData = OrganizationTestData() testDataService.saveTestData(testData.root) @@ -130,6 +139,7 @@ class OrganizationControllerTest : BaseOrganizationControllerTest() { } @Test + @CleanDbBeforeMethod fun `doesn't return without permission`() { val testData = OrganizationTestData() testDataService.saveTestData(testData.root) @@ -139,6 +149,7 @@ class OrganizationControllerTest : BaseOrganizationControllerTest() { } @Test + @CleanDbBeforeMethod fun testGetOneWithId() { createOrganization(dummyDto).let { organization -> performAuthGet("/v2/organizations/${organization.id}").andIsOk.andAssertThatJson { @@ -154,6 +165,7 @@ class OrganizationControllerTest : BaseOrganizationControllerTest() { } @Test + @CleanDbBeforeMethod fun testGetOnePermissions() { val organization = createOrganization(dummyDto) performAuthGet("/v2/organizations/${organization.id}").andIsOk.andAssertThatJson { @@ -163,6 +175,7 @@ class OrganizationControllerTest : BaseOrganizationControllerTest() { } @Test + @CleanDbBeforeMethod fun testCreate() { performAuthPost( "/v2/organizations", @@ -178,6 +191,7 @@ class OrganizationControllerTest : BaseOrganizationControllerTest() { } @Test + @CleanDbBeforeMethod fun testCreateSlugValidation() { createOrganization(dummyDto2.also { it.slug = "hello-1" }) @@ -188,6 +202,7 @@ class OrganizationControllerTest : BaseOrganizationControllerTest() { } @Test + @CleanDbBeforeMethod fun testCreateNotAllowed() { this.tolgeeProperties.authentication.userCanCreateOrganizations = false loginAsUserIfNotLogged() @@ -199,6 +214,7 @@ class OrganizationControllerTest : BaseOrganizationControllerTest() { } @Test + @CleanDbBeforeMethod fun testCreateValidation() { performAuthPost( "/v2/organizations", @@ -229,6 +245,7 @@ class OrganizationControllerTest : BaseOrganizationControllerTest() { } @Test + @CleanDbBeforeMethod fun testCreateGeneratesSlug() { performAuthPost( "/v2/organizations", @@ -237,6 +254,7 @@ class OrganizationControllerTest : BaseOrganizationControllerTest() { } @Test + @CleanDbBeforeMethod fun testEdit() { executeInNewTransaction { this.organizationService.create(dummyDto, userAccount!!).let { @@ -261,6 +279,7 @@ class OrganizationControllerTest : BaseOrganizationControllerTest() { } @Test + @CleanDbBeforeMethod fun `slug validation`() { createOrganization(dummyDto2.also { it.slug = "hello-1" }) val organization = createOrganization(dummyDto) @@ -273,6 +292,7 @@ class OrganizationControllerTest : BaseOrganizationControllerTest() { } @Test + @CleanDbBeforeMethod fun `it deletes organization`() { val organization2 = createOrganization(dummyDto2) createOrganization(dummyDto).let { @@ -291,6 +311,7 @@ class OrganizationControllerTest : BaseOrganizationControllerTest() { } @Test + @CleanDbBeforeMethod @Transactional fun `sets user role`() { withOwnerInOrganization { organization, owner, role -> @@ -303,6 +324,7 @@ class OrganizationControllerTest : BaseOrganizationControllerTest() { } @Test + @CleanDbBeforeMethod @Transactional fun `sets base permissions`() { withOwnerInOrganization { organization, owner, role -> diff --git a/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/organizationController/OrganizationProjectsControllerTest.kt b/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/organizationController/OrganizationProjectsControllerTest.kt index e5476ac6b1..d48ac1c968 100644 --- a/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/organizationController/OrganizationProjectsControllerTest.kt +++ b/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/organizationController/OrganizationProjectsControllerTest.kt @@ -1,5 +1,6 @@ package io.tolgee.api.v2.controllers.organizationController +import io.tolgee.CleanDbBeforeMethod import io.tolgee.development.testDataBuilder.data.PermissionsTestData import io.tolgee.fixtures.andAssertThatJson import io.tolgee.fixtures.andIsOk @@ -17,6 +18,7 @@ import org.springframework.boot.test.context.SpringBootTest @AutoConfigureMockMvc class OrganizationProjectsControllerTest : AuthorizedControllerTest() { @Test + @CleanDbBeforeMethod fun `get all projects with slug`() { val users = dbPopulator.createUsersAndOrganizations() loginAsUser(users[1].username) @@ -34,6 +36,7 @@ class OrganizationProjectsControllerTest : AuthorizedControllerTest() { } @Test + @CleanDbBeforeMethod fun `get all projects with id`() { val users = dbPopulator.createUsersAndOrganizations() loginAsUser(users[1].username) @@ -51,6 +54,7 @@ class OrganizationProjectsControllerTest : AuthorizedControllerTest() { } @Test + @CleanDbBeforeMethod fun `get all projects with stats (id)`() { val users = dbPopulator.createUsersAndOrganizations() loginAsUser(users[1].username) @@ -66,6 +70,7 @@ class OrganizationProjectsControllerTest : AuthorizedControllerTest() { } @Test + @CleanDbBeforeMethod fun `get all projects with stats (slug)`() { val users = dbPopulator.createUsersAndOrganizations() loginAsUser(users[1].username) @@ -81,6 +86,7 @@ class OrganizationProjectsControllerTest : AuthorizedControllerTest() { } @Test + @CleanDbBeforeMethod fun `user wint none permissions cannot see the the project`() { val testData = PermissionsTestData() val user = testData.addUserWithPermissions(type = ProjectPermissionType.NONE) @@ -93,6 +99,7 @@ class OrganizationProjectsControllerTest : AuthorizedControllerTest() { } @Test + @CleanDbBeforeMethod fun `user with no direct permission cannot see the the project in organization with none base permissions`() { val testData = PermissionsTestData() val user = @@ -116,6 +123,7 @@ class OrganizationProjectsControllerTest : AuthorizedControllerTest() { } @Test + @CleanDbBeforeMethod fun `user with scopes can see the project`() { val testData = PermissionsTestData() val user = testData.addUserWithPermissions(scopes = listOf(Scope.ADMIN)) diff --git a/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/tags/TagsControllerComplexOperationTest.kt b/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/tags/TagsControllerComplexOperationTest.kt index 1bc1cbab88..4f8b029be1 100644 --- a/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/tags/TagsControllerComplexOperationTest.kt +++ b/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/tags/TagsControllerComplexOperationTest.kt @@ -15,6 +15,7 @@ class TagsControllerComplexOperationTest : ProjectAuthControllerTest("/v2/projec @BeforeEach fun setup() { testData = TagsTestData() + testData.root.makeUsernamesUnique = true testData.addNamespacedKey() projectSupplier = { testData.projectBuilder.self } } diff --git a/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/tags/TagsControllerTest.kt b/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/tags/TagsControllerTest.kt index bc252c3c12..a132b3f95b 100644 --- a/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/tags/TagsControllerTest.kt +++ b/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/tags/TagsControllerTest.kt @@ -21,6 +21,7 @@ class TagsControllerTest : ProjectAuthControllerTest("/v2/projects/") { @BeforeEach fun setup() { testData = TagsTestData() + testData.root.makeUsernamesUnique = true projectSupplier = { testData.projectBuilder.self } testDataService.saveTestData(testData.root) userAccount = testData.user diff --git a/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/translationSuggestionController/TranslationSuggestionControllerMtTest.kt b/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/translationSuggestionController/TranslationSuggestionControllerMtTest.kt index 3727e4c68b..2aecb9878d 100644 --- a/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/translationSuggestionController/TranslationSuggestionControllerMtTest.kt +++ b/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/translationSuggestionController/TranslationSuggestionControllerMtTest.kt @@ -25,6 +25,7 @@ import io.tolgee.fixtures.andPrettyPrint import io.tolgee.fixtures.mapResponseTo import io.tolgee.fixtures.node import io.tolgee.model.mtServiceConfig.Formality +import io.tolgee.testing.ContextRecreatingTest import io.tolgee.testing.annotations.ProjectJWTAuthTestMethod import io.tolgee.testing.assert import io.tolgee.testing.assertions.Assertions.assertThat @@ -53,6 +54,7 @@ import software.amazon.awssdk.services.translate.model.TranslateTextResponse import java.util.* import software.amazon.awssdk.services.translate.model.Formality as AwsFormality +@ContextRecreatingTest class TranslationSuggestionControllerMtTest : ProjectAuthControllerTest("/v2/projects/") { lateinit var testData: SuggestionTestData @@ -185,6 +187,7 @@ class TranslationSuggestionControllerMtTest : ProjectAuthControllerTest("/v2/pro private fun initTestData() { testData = SuggestionTestData() + testData.root.makeUsernamesUnique = true projectSupplier = { testData.projectBuilder.self } } diff --git a/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/translationSuggestionController/TranslationSuggestionControllerStreamingTest.kt b/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/translationSuggestionController/TranslationSuggestionControllerStreamingTest.kt index 7b82b0b397..551e720a4d 100644 --- a/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/translationSuggestionController/TranslationSuggestionControllerStreamingTest.kt +++ b/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/translationSuggestionController/TranslationSuggestionControllerStreamingTest.kt @@ -9,6 +9,7 @@ import io.tolgee.fixtures.andAssertThatJson import io.tolgee.fixtures.andPrettyPrint import io.tolgee.model.Language import io.tolgee.service.machineTranslation.MtService +import io.tolgee.testing.ContextRecreatingTest import io.tolgee.testing.annotations.ProjectJWTAuthTestMethod import io.tolgee.testing.assert import org.junit.jupiter.api.BeforeEach @@ -19,6 +20,7 @@ import org.springframework.beans.factory.annotation.Autowired import org.springframework.boot.test.mock.mockito.MockBean import org.springframework.boot.test.mock.mockito.SpyBean +@ContextRecreatingTest class TranslationSuggestionControllerStreamingTest : ProjectAuthControllerTest("/v2/projects/") { @Suppress("LateinitVarOverridesLateinitVar") @SpyBean @@ -48,6 +50,7 @@ class TranslationSuggestionControllerStreamingTest : ProjectAuthControllerTest(" czechLanguage = projectBuilder.addCzech().self hindiLanguage = projectBuilder.addHindi().self } + testData.root.makeUsernamesUnique = true testDataService.saveTestData(testData.root) userAccount = testData.user diff --git a/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/translationSuggestionController/TranslationSuggestionControllerTmTest.kt b/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/translationSuggestionController/TranslationSuggestionControllerTmTest.kt index 0e4eddeaa2..1a0067feb7 100644 --- a/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/translationSuggestionController/TranslationSuggestionControllerTmTest.kt +++ b/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/translationSuggestionController/TranslationSuggestionControllerTmTest.kt @@ -24,6 +24,7 @@ class TranslationSuggestionControllerTmTest : ProjectAuthControllerTest("/v2/pro @BeforeEach fun initTestData() { testData = SuggestionTestData() + testData.root.makeUsernamesUnique = true projectSupplier = { testData.projectBuilder.self } } diff --git a/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/translationSuggestionController/TranslationSuggestionWithCacheTest.kt b/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/translationSuggestionController/TranslationSuggestionWithCacheTest.kt index 46948c26a2..73c3f067c5 100644 --- a/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/translationSuggestionController/TranslationSuggestionWithCacheTest.kt +++ b/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/translationSuggestionController/TranslationSuggestionWithCacheTest.kt @@ -97,6 +97,7 @@ class TranslationSuggestionWithCacheTest : ProjectAuthControllerTest("/v2/projec private fun initTestData() { testData = SuggestionTestData() + testData.root.makeUsernamesUnique = true projectSupplier = { testData.projectBuilder.self } } diff --git a/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/translations/TranslationCommentControllerTest.kt b/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/translations/TranslationCommentControllerTest.kt index 90107d2eeb..4bce4ae23c 100644 --- a/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/translations/TranslationCommentControllerTest.kt +++ b/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/translations/TranslationCommentControllerTest.kt @@ -29,6 +29,7 @@ class TranslationCommentControllerTest : ProjectAuthControllerTest("/v2/projects @BeforeEach fun setup() { testData = TranslationCommentsTestData() + testData.root.makeUsernamesUnique = true testDataService.saveTestData(testData.root) this.projectSupplier = { testData.project } userAccount = testData.user @@ -43,7 +44,7 @@ class TranslationCommentControllerTest : ProjectAuthControllerTest("/v2/projects node("id").isValidId node("text").isEqualTo("First comment") node("state").isEqualTo("NEEDS_RESOLUTION") - node("author.username").isEqualTo("franta") + node("author.username").isString.contains("franta") node("createdAt").isNumber.isGreaterThan(BigDecimal(1624985181827)) node("updatedAt").isNumber.isGreaterThan(BigDecimal(1624985181827)) } @@ -58,7 +59,7 @@ class TranslationCommentControllerTest : ProjectAuthControllerTest("/v2/projects node("id").isValidId node("text").isEqualTo("First comment") node("state").isEqualTo("NEEDS_RESOLUTION") - node("author.username").isEqualTo("franta") + node("author.username").isString.contains("franta") node("createdAt").isNumber.isGreaterThan(BigDecimal(1624985181827)) node("updatedAt").isNumber.isGreaterThan(BigDecimal(1624985181827)) } @@ -77,7 +78,7 @@ class TranslationCommentControllerTest : ProjectAuthControllerTest("/v2/projects node("id").isValidId node("text").isEqualTo("Test") node("state").isEqualTo("RESOLUTION_NOT_NEEDED") - node("author.username").isEqualTo("franta") + node("author.username").isString.contains("franta") node("createdAt").isNumber.isGreaterThan(BigDecimal(1624985181827)) node("updatedAt").isNumber.isGreaterThan(BigDecimal(1624985181827)) } @@ -100,7 +101,7 @@ class TranslationCommentControllerTest : ProjectAuthControllerTest("/v2/projects node("id").isValidId node("text").isEqualTo("Test") node("state").isEqualTo("RESOLUTION_NOT_NEEDED") - node("author.username").isEqualTo("franta") + node("author.username").isString.contains("franta") node("createdAt").isNumber.isGreaterThan(BigDecimal(1624985181827)) node("updatedAt").isNumber.isGreaterThan(BigDecimal(1624985181827)) } @@ -167,7 +168,7 @@ class TranslationCommentControllerTest : ProjectAuthControllerTest("/v2/projects node("id").isValidId node("text").isEqualTo("Updated") node("state").isEqualTo("RESOLVED") - node("author.username").isEqualTo("franta") + node("author.username").isString.contains("franta") node("createdAt").isNumber.isGreaterThan(BigDecimal(1624985181827)) node("updatedAt").isNumber.isGreaterThan(BigDecimal(1624985181827)) } diff --git a/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/translations/v2TranslationsController/TranslationsControllerCachingTest.kt b/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/translations/v2TranslationsController/TranslationsControllerCachingTest.kt index a45c94f8d2..e932feb29e 100644 --- a/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/translations/v2TranslationsController/TranslationsControllerCachingTest.kt +++ b/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/translations/v2TranslationsController/TranslationsControllerCachingTest.kt @@ -26,6 +26,7 @@ class TranslationsControllerCachingTest : ProjectAuthControllerTest("/v2/project @BeforeEach fun setup() { testData = TranslationsTestData() + testData.root.makeUsernamesUnique = true this.projectSupplier = { testData.project } } diff --git a/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/translations/v2TranslationsController/TranslationsControllerCursorTest.kt b/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/translations/v2TranslationsController/TranslationsControllerCursorTest.kt index ecfb0b8dab..413368129b 100644 --- a/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/translations/v2TranslationsController/TranslationsControllerCursorTest.kt +++ b/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/translations/v2TranslationsController/TranslationsControllerCursorTest.kt @@ -21,6 +21,7 @@ class TranslationsControllerCursorTest : ProjectAuthControllerTest("/v2/projects @BeforeEach fun setup() { testData = TranslationsTestData() + testData.root.makeUsernamesUnique = true this.projectSupplier = { testData.project } } diff --git a/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/translations/v2TranslationsController/TranslationsControllerFilterTest.kt b/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/translations/v2TranslationsController/TranslationsControllerFilterTest.kt index c0420b8ced..e630be15cb 100644 --- a/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/translations/v2TranslationsController/TranslationsControllerFilterTest.kt +++ b/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/translations/v2TranslationsController/TranslationsControllerFilterTest.kt @@ -25,6 +25,7 @@ class TranslationsControllerFilterTest : ProjectAuthControllerTest("/v2/projects @BeforeEach fun setup() { testData = TranslationsTestData() + testData.root.makeUsernamesUnique = true this.projectSupplier = { testData.project } } @@ -78,6 +79,7 @@ class TranslationsControllerFilterTest : ProjectAuthControllerTest("/v2/projects @Test fun `filters by namespace`() { val testData = NamespacesTestData() + testData.root.makeUsernamesUnique = true testDataService.saveTestData(testData.root) userAccount = testData.user projectSupplier = { testData.projectBuilder.self } @@ -105,6 +107,7 @@ class TranslationsControllerFilterTest : ProjectAuthControllerTest("/v2/projects @ProjectJWTAuthTestMethod fun `it filters by empty namespace`() { val testData = NamespacesTestData() + testData.root.makeUsernamesUnique = true testDataService.saveTestData(testData.root) userAccount = testData.user projectSupplier = { testData.projectBuilder.self } @@ -119,6 +122,7 @@ class TranslationsControllerFilterTest : ProjectAuthControllerTest("/v2/projects @ProjectJWTAuthTestMethod fun `it doesn't filter when no namespace is provided`() { val testData = NamespacesTestData() + testData.root.makeUsernamesUnique = true testDataService.saveTestData(testData.root) userAccount = testData.user projectSupplier = { testData.projectBuilder.self } @@ -335,6 +339,7 @@ class TranslationsControllerFilterTest : ProjectAuthControllerTest("/v2/projects @Test fun `filters by outdated`() { val testData = TranslationSourceChangeStateTestData() + testData.root.makeUsernamesUnique = true testDataService.saveTestData(testData.root) userAccount = testData.user projectSupplier = { testData.projectBuilder.self } diff --git a/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/translations/v2TranslationsController/TranslationsControllerHistoryTest.kt b/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/translations/v2TranslationsController/TranslationsControllerHistoryTest.kt index 9274020808..aa5e144dd7 100644 --- a/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/translations/v2TranslationsController/TranslationsControllerHistoryTest.kt +++ b/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/translations/v2TranslationsController/TranslationsControllerHistoryTest.kt @@ -32,6 +32,7 @@ class TranslationsControllerHistoryTest : ProjectAuthControllerTest("/v2/project @BeforeEach fun setup() { testDataService.saveTestData { + this.makeUsernamesUnique = true addUserAccount { username = "franta" name = "Frantisek" @@ -93,7 +94,7 @@ class TranslationsControllerHistoryTest : ProjectAuthControllerTest("/v2/project node("revisionType").isEqualTo("MOD") node("author") { node("id").isNumber.isGreaterThan(0.toBigDecimal()) - node("username").isEqualTo("franta") + node("username").isString.contains("franta") node("name").isEqualTo("Frantisek") node("avatar") { node("large").isString.contains(".png") diff --git a/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/translations/v2TranslationsController/TranslationsControllerLanguagePermissionTest.kt b/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/translations/v2TranslationsController/TranslationsControllerLanguagePermissionTest.kt index d1b45ebba4..a05d50196a 100644 --- a/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/translations/v2TranslationsController/TranslationsControllerLanguagePermissionTest.kt +++ b/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/translations/v2TranslationsController/TranslationsControllerLanguagePermissionTest.kt @@ -7,6 +7,7 @@ import io.tolgee.fixtures.andAssertThatJson import io.tolgee.fixtures.andIsForbidden import io.tolgee.fixtures.andIsOk import io.tolgee.testing.annotations.ProjectJWTAuthTestMethod +import org.junit.jupiter.api.AfterEach import org.junit.jupiter.api.BeforeEach import org.junit.jupiter.api.Test import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc @@ -20,10 +21,16 @@ class TranslationsControllerLanguagePermissionTest : ProjectAuthControllerTest(" @BeforeEach fun setup() { testData = LanguagePermissionsTestData() + testData.root.makeUsernamesUnique = true this.projectSupplier = { testData.project } testDataService.saveTestData(testData.root) } + @AfterEach + fun cleanup() { + testDataService.cleanApiKeys(testData.root) + } + @ProjectJWTAuthTestMethod @Test fun `denies access for user without the language permission - update`() { diff --git a/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/translations/v2TranslationsController/TranslationsControllerModificationTest.kt b/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/translations/v2TranslationsController/TranslationsControllerModificationTest.kt index 92d490c44d..fa29e943c7 100644 --- a/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/translations/v2TranslationsController/TranslationsControllerModificationTest.kt +++ b/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/translations/v2TranslationsController/TranslationsControllerModificationTest.kt @@ -31,6 +31,7 @@ class TranslationsControllerModificationTest : ProjectAuthControllerTest("/v2/pr @BeforeEach fun setup() { testData = TranslationsTestData() + testData.root.makeUsernamesUnique = true } @ProjectJWTAuthTestMethod diff --git a/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/translations/v2TranslationsController/TranslationsControllerNamespacesTest.kt b/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/translations/v2TranslationsController/TranslationsControllerNamespacesTest.kt index edd45f9fab..4470d47abd 100644 --- a/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/translations/v2TranslationsController/TranslationsControllerNamespacesTest.kt +++ b/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/translations/v2TranslationsController/TranslationsControllerNamespacesTest.kt @@ -22,6 +22,7 @@ class TranslationsControllerNamespacesTest : ProjectAuthControllerTest("/v2/proj @ProjectJWTAuthTestMethod fun `it returns namespaces`() { val testData = NamespacesTestData() + testData.root.makeUsernamesUnique = true testDataService.saveTestData(testData.root) userAccount = testData.user projectSupplier = { testData.projectBuilder.self } @@ -43,6 +44,7 @@ class TranslationsControllerNamespacesTest : ProjectAuthControllerTest("/v2/proj @ProjectJWTAuthTestMethod fun `creates key in namespace on set or create`() { val testData = NamespacesTestData() + testData.root.makeUsernamesUnique = true testDataService.saveTestData(testData.root) userAccount = testData.user projectSupplier = { testData.projectBuilder.self } diff --git a/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/translations/v2TranslationsController/TranslationsControllerViewTest.kt b/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/translations/v2TranslationsController/TranslationsControllerViewTest.kt index 1fc38f8d30..c783c8fd5a 100644 --- a/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/translations/v2TranslationsController/TranslationsControllerViewTest.kt +++ b/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/translations/v2TranslationsController/TranslationsControllerViewTest.kt @@ -35,6 +35,7 @@ class TranslationsControllerViewTest : ProjectAuthControllerTest("/v2/projects/" @BeforeEach fun setup() { testData = TranslationsTestData() + testData.root.makeUsernamesUnique = true this.projectSupplier = { testData.project } } @@ -299,6 +300,7 @@ class TranslationsControllerViewTest : ProjectAuthControllerTest("/v2/projects/" @Test fun `returns all translations by ns`() { val testData = NamespacesTestData() + testData.root.makeUsernamesUnique = true testDataService.saveTestData(testData.root) userAccount = testData.user projectSupplier = { testData.projectBuilder.self } @@ -318,6 +320,7 @@ class TranslationsControllerViewTest : ProjectAuthControllerTest("/v2/projects/" @Test fun `returns all translations by default ns`() { val testData = NamespacesTestData() + testData.root.makeUsernamesUnique = true testDataService.saveTestData(testData.root) userAccount = testData.user projectSupplier = { testData.projectBuilder.self } @@ -448,6 +451,7 @@ class TranslationsControllerViewTest : ProjectAuthControllerTest("/v2/projects/" private fun prepareImportData() { val testData = ImportTestData() + testData.root.makeUsernamesUnique = true testData.addManyTranslations() testData.setAllResolved() testData.setAllOverride() diff --git a/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/v2ImageUploadController/V2ImageUploadControllerTest.kt b/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/v2ImageUploadController/V2ImageUploadControllerTest.kt index a9905114c0..3bfa978256 100644 --- a/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/v2ImageUploadController/V2ImageUploadControllerTest.kt +++ b/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/v2ImageUploadController/V2ImageUploadControllerTest.kt @@ -4,6 +4,7 @@ package io.tolgee.api.v2.controllers.v2ImageUploadController +import io.tolgee.CleanDbBeforeMethod import io.tolgee.component.MaxUploadedFilesByUserProvider import io.tolgee.fixtures.andAssertThatJson import io.tolgee.fixtures.andIsBadRequest @@ -58,6 +59,7 @@ class V2ImageUploadControllerTest : AbstractV2ImageUploadControllerTest() { } @Test + @CleanDbBeforeMethod fun `does not upload more then user limit`() { whenever(maxUploadedFilesByUserProvider.invoke()).thenAnswer { 3L } repeat((1..4).count()) { @@ -76,6 +78,7 @@ class V2ImageUploadControllerTest : AbstractV2ImageUploadControllerTest() { } @Test + @CleanDbBeforeMethod fun `returns file`() { val image = imageUploadService.store(screenshotFile, userAccount!!, null) val result = @@ -91,6 +94,7 @@ class V2ImageUploadControllerTest : AbstractV2ImageUploadControllerTest() { } @Test + @CleanDbBeforeMethod fun delete() { whenever(maxUploadedFilesByUserProvider.invoke()).thenAnswer { 30L } val list = diff --git a/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/v2ImportController/SingleStepImportControllerTest.kt b/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/v2ImportController/SingleStepImportControllerTest.kt index 199a56d6e7..96fa3acd8e 100644 --- a/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/v2ImportController/SingleStepImportControllerTest.kt +++ b/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/v2ImportController/SingleStepImportControllerTest.kt @@ -362,6 +362,7 @@ class SingleStepImportControllerTest : ProjectAuthControllerTest("/v2/projects/" } private fun saveAndPrepare() { + testData.root.makeUsernamesUnique = true testDataService.saveTestData(testData.root) userAccount = testData.user projectSupplier = { testData.project } diff --git a/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/v2ImportController/V2ImportControllerAddFilesTest.kt b/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/v2ImportController/V2ImportControllerAddFilesTest.kt index 9de9f0bb4c..855b472371 100644 --- a/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/v2ImportController/V2ImportControllerAddFilesTest.kt +++ b/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/v2ImportController/V2ImportControllerAddFilesTest.kt @@ -286,6 +286,7 @@ class V2ImportControllerAddFilesTest : ProjectAuthControllerTest("/v2/projects/" @Test fun `correctly computes conflicts on import`() { val testData = ImportCleanTestData() + testData.root.makeUsernamesUnique = true testDataService.saveTestData(testData.root) loginAsUser(testData.userAccount.username) diff --git a/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/v2ImportController/V2ImportControllerApplicationTest.kt b/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/v2ImportController/V2ImportControllerApplicationTest.kt index ad38f96bfc..fa6482600a 100644 --- a/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/v2ImportController/V2ImportControllerApplicationTest.kt +++ b/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/v2ImportController/V2ImportControllerApplicationTest.kt @@ -20,6 +20,7 @@ class V2ImportControllerApplicationTest : ProjectAuthControllerTest("/v2/project val testData = ImportTestData() testData.setAllResolved() testData.setAllOverride() + testData.root.makeUsernamesUnique = true testDataService.saveTestData(testData.root) val user = testData.root.data.userAccounts[0].self val projectId = testData.project.id @@ -34,6 +35,7 @@ class V2ImportControllerApplicationTest : ProjectAuthControllerTest("/v2/project @Test fun `it applies the import with force override`() { val testData = ImportTestData() + testData.root.makeUsernamesUnique = true testDataService.saveTestData(testData.root) val user = testData.root.data.userAccounts[0].self val projectId = testData.project.id @@ -48,6 +50,7 @@ class V2ImportControllerApplicationTest : ProjectAuthControllerTest("/v2/project @Test fun `it applies the import with force keep`() { val testData = ImportTestData() + testData.root.makeUsernamesUnique = true testDataService.saveTestData(testData.root) val user = testData.root.data.userAccounts[0].self val projectId = testData.project.id @@ -60,6 +63,7 @@ class V2ImportControllerApplicationTest : ProjectAuthControllerTest("/v2/project fun `it imports empty keys`() { val testData = ImportTestData() testData.addEmptyKey() + testData.root.makeUsernamesUnique = true testDataService.saveTestData(testData.root) val user = testData.root.data.userAccounts[0].self val projectId = testData.project.id @@ -75,7 +79,7 @@ class V2ImportControllerApplicationTest : ProjectAuthControllerTest("/v2/project @Test fun `it checks permissions`() { val testData = ImportTestData() - + testData.root.makeUsernamesUnique = true val user = testData.useTranslateOnlyUser() testDataService.saveTestData(testData.root) @@ -93,6 +97,7 @@ class V2ImportControllerApplicationTest : ProjectAuthControllerTest("/v2/project @Test fun `it checks language permissions`() { val testData = ImportTestData() + testData.root.makeUsernamesUnique = true testData.importBuilder.data.importFiles[0].data.importKeys.removeIf { it.self == testData.newLongKey } val resolveFrench = testData.addFrenchTranslations() resolveFrench() @@ -100,6 +105,7 @@ class V2ImportControllerApplicationTest : ProjectAuthControllerTest("/v2/project val user = testData.useTranslateOnlyUser() testDataService.saveTestData(testData.root) + testData.root.makeUsernamesUnique = true val projectId = testData.project.id loginAsUser(user.username) @@ -116,6 +122,7 @@ class V2ImportControllerApplicationTest : ProjectAuthControllerTest("/v2/project @Test fun `it checks permissions (view only)`() { val testData = ImportTestData() + testData.root.makeUsernamesUnique = true testData.importBuilder.data.importFiles[0].data.importKeys.removeIf { it.self == testData.newLongKey } val resolveFrench = testData.addFrenchTranslations() resolveFrench() @@ -134,6 +141,7 @@ class V2ImportControllerApplicationTest : ProjectAuthControllerTest("/v2/project @ProjectApiKeyAuthTestMethod(scopes = [Scope.TRANSLATIONS_VIEW]) fun `it checks permissions with API key (view only)`() { val testData = ImportTestData() + testData.root.makeUsernamesUnique = true testData.importBuilder.data.importFiles[0].data.importKeys.removeIf { it.self == testData.newLongKey } val resolveFrench = testData.addFrenchTranslations() resolveFrench() @@ -149,6 +157,7 @@ class V2ImportControllerApplicationTest : ProjectAuthControllerTest("/v2/project @Test fun `it sets outdated on update`() { val testData = ImportTestData() + testData.root.makeUsernamesUnique = true testDataService.saveTestData(testData.root) val user = testData.root.data.userAccounts[0].self val projectId = testData.project.id diff --git a/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/v2ImportController/V2ImportControllerConflictsBetweenFilesTest.kt b/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/v2ImportController/V2ImportControllerConflictsBetweenFilesTest.kt index 94d34c8419..d47852203d 100644 --- a/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/v2ImportController/V2ImportControllerConflictsBetweenFilesTest.kt +++ b/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/v2ImportController/V2ImportControllerConflictsBetweenFilesTest.kt @@ -260,6 +260,7 @@ class V2ImportControllerConflictsBetweenFilesTest : ProjectAuthControllerTest("/ private fun prepareTestData(): ImportCleanTestData { val testData = ImportCleanTestData() + testData.root.makeUsernamesUnique = true testDataService.saveTestData(testData.root) loginAsUser(testData.userAccount.username) projectSupplier = { testData.projectBuilder.self } diff --git a/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/v2ImportController/V2ImportControllerManipulationTest.kt b/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/v2ImportController/V2ImportControllerManipulationTest.kt index 894940abce..4211392326 100644 --- a/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/v2ImportController/V2ImportControllerManipulationTest.kt +++ b/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/v2ImportController/V2ImportControllerManipulationTest.kt @@ -15,6 +15,7 @@ class V2ImportControllerManipulationTest : ProjectAuthControllerTest("/v2/projec @Test fun `it deletes import`() { val testData = ImportTestData() + testData.root.makeUsernamesUnique = true testDataService.saveTestData(testData.root) val user = testData.root.data.userAccounts[0].self val projectId = testData.project.id @@ -28,6 +29,7 @@ class V2ImportControllerManipulationTest : ProjectAuthControllerTest("/v2/projec @Test fun `it deletes import language`() { val testData = ImportTestData() + testData.root.makeUsernamesUnique = true testDataService.saveTestData(testData.root) val user = testData.root.data.userAccounts[0].self val projectId = testData.project.id @@ -40,6 +42,7 @@ class V2ImportControllerManipulationTest : ProjectAuthControllerTest("/v2/projec @Test fun `it resolves import translation conflict (override)`() { val testData = ImportTestData() + testData.root.makeUsernamesUnique = true testDataService.saveTestData(testData.root) val user = testData.root.data.userAccounts[0].self val projectId = testData.project.id @@ -56,6 +59,7 @@ class V2ImportControllerManipulationTest : ProjectAuthControllerTest("/v2/projec @Test fun `it resolves import translation conflict (keep)`() { val testData = ImportTestData() + testData.root.makeUsernamesUnique = true testDataService.saveTestData(testData.root) val user = testData.root.data.userAccounts[0].self val projectId = testData.project.id @@ -72,6 +76,7 @@ class V2ImportControllerManipulationTest : ProjectAuthControllerTest("/v2/projec @Test fun `it resolves all language translation conflicts (override)`() { val testData = ImportTestData() + testData.root.makeUsernamesUnique = true testDataService.saveTestData(testData.root) val user = testData.root.data.userAccounts[0].self val projectId = testData.project.id @@ -86,6 +91,7 @@ class V2ImportControllerManipulationTest : ProjectAuthControllerTest("/v2/projec @Test fun `it resolves all language translation conflicts (keep)`() { val testData = ImportTestData() + testData.root.makeUsernamesUnique = true testDataService.saveTestData(testData.root) val user = testData.root.data.userAccounts[0].self val projectId = testData.project.id @@ -102,6 +108,7 @@ class V2ImportControllerManipulationTest : ProjectAuthControllerTest("/v2/projec @Test fun `it selects language`() { val testData = ImportTestData() + testData.root.makeUsernamesUnique = true testData.setAllResolved() testData.setAllOverride() testDataService.saveTestData(testData.root) @@ -120,6 +127,7 @@ class V2ImportControllerManipulationTest : ProjectAuthControllerTest("/v2/projec @ProjectJWTAuthTestMethod fun `it selects namespace, resets conflicts`() { val testData = ImportNamespacesTestData() + testData.root.makeUsernamesUnique = true testDataService.saveTestData(testData.root) projectSupplier = { testData.project } userAccount = testData.userAccount @@ -144,6 +152,7 @@ class V2ImportControllerManipulationTest : ProjectAuthControllerTest("/v2/projec @ProjectJWTAuthTestMethod fun `returns all namespaces`() { val testData = ImportNamespacesTestData() + testData.root.makeUsernamesUnique = true testDataService.saveTestData(testData.root) projectSupplier = { testData.project } userAccount = testData.userAccount @@ -159,6 +168,7 @@ class V2ImportControllerManipulationTest : ProjectAuthControllerTest("/v2/projec @Test fun `it selects same language for different namespaces`() { val testData = ImportTestData() + testData.root.makeUsernamesUnique = true // assign the existing french to the import french testData.importFrench.existingLanguage = testData.french val nsData = testData.addFilesWithNamespaces() @@ -178,6 +188,7 @@ class V2ImportControllerManipulationTest : ProjectAuthControllerTest("/v2/projec @Test fun `conflicts are refreshed when changing namespace`() { val testData = ImportTestData() + testData.root.makeUsernamesUnique = true // assign the existing french to the import french testData.importFrench.existingLanguage = testData.french val nsData = testData.addFilesWithNamespaces() @@ -197,6 +208,7 @@ class V2ImportControllerManipulationTest : ProjectAuthControllerTest("/v2/projec @Test fun `it resets selected language`() { val testData = ImportTestData() + testData.root.makeUsernamesUnique = true testData.setAllResolved() testData.setAllOverride() testDataService.saveTestData(testData.root) diff --git a/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/v2ImportController/V2ImportControllerPluralizationTest.kt b/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/v2ImportController/V2ImportControllerPluralizationTest.kt index 7e27c1fbc3..375d715b0d 100644 --- a/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/v2ImportController/V2ImportControllerPluralizationTest.kt +++ b/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/v2ImportController/V2ImportControllerPluralizationTest.kt @@ -32,6 +32,7 @@ class V2ImportControllerPluralizationTest : ProjectAuthControllerTest("/v2/proje private fun saveTestDataAndApplyImport() { testData = ImportPluralizationTestData() + testData.root.makeUsernamesUnique = true testDataService.saveTestData(testData.root) userAccount = testData.userAccount projectSupplier = { testData.projectBuilder.self } diff --git a/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/v2ImportController/V2ImportControllerResultTest.kt b/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/v2ImportController/V2ImportControllerResultTest.kt index cbf903a5d3..08cbe614b1 100644 --- a/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/v2ImportController/V2ImportControllerResultTest.kt +++ b/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/v2ImportController/V2ImportControllerResultTest.kt @@ -28,6 +28,7 @@ class V2ImportControllerResultTest : AuthorizedControllerTest() { @Test fun `it returns correct result data`() { val testData = ImportTestData() + testData.root.makeUsernamesUnique = true testDataService.saveTestData(testData.root) loginAsUser(testData.root.data.userAccounts[0].self.username) @@ -50,6 +51,7 @@ class V2ImportControllerResultTest : AuthorizedControllerTest() { @Test fun `it removes expired import`() { val testData = ImportTestData() + testData.root.makeUsernamesUnique = true testDataService.saveTestData(testData.root) setForcedDate(DateUtils.addHours(Date(), 2)) @@ -66,6 +68,7 @@ class V2ImportControllerResultTest : AuthorizedControllerTest() { @Test fun `it returns correct specific language`() { val testData = ImportTestData() + testData.root.makeUsernamesUnique = true testDataService.saveTestData(testData.root) loginAsUser(testData.root.data.userAccounts[0].self.username) @@ -86,6 +89,7 @@ class V2ImportControllerResultTest : AuthorizedControllerTest() { @Test fun `it paginates result`() { val testData = ImportTestData() + testData.root.makeUsernamesUnique = true testDataService.saveTestData(testData.root) loginAsUser(testData.root.data.userAccounts[0].self.username) @@ -97,6 +101,7 @@ class V2ImportControllerResultTest : AuthorizedControllerTest() { @Test fun `it return correct translation data (all)`() { val testData = ImportTestData() + testData.root.makeUsernamesUnique = true testData.addPluralImport() testDataService.saveTestData(testData.root) loginAsUser(testData.root.data.userAccounts[0].self.username) @@ -121,6 +126,7 @@ class V2ImportControllerResultTest : AuthorizedControllerTest() { @Test fun `it return correct translation data (only conflicts)`() { val testData = ImportTestData() + testData.root.makeUsernamesUnique = true testData.addPluralImport() testDataService.saveTestData(testData.root) loginAsUser(testData.root.data.userAccounts[0].self.username) @@ -150,6 +156,7 @@ class V2ImportControllerResultTest : AuthorizedControllerTest() { @Test fun `it searches for translation data`() { val testData = ImportTestData() + testData.root.makeUsernamesUnique = true testDataService.saveTestData(testData.root) loginAsUser(testData.root.data.userAccounts[0].self.username) @@ -186,6 +193,7 @@ class V2ImportControllerResultTest : AuthorizedControllerTest() { @Test fun `it pages translation data`() { val testData = ImportTestData() + testData.root.makeUsernamesUnique = true testDataService.saveTestData(testData.root) loginAsUser(testData.root.data.userAccounts[0].self.username) @@ -200,6 +208,7 @@ class V2ImportControllerResultTest : AuthorizedControllerTest() { @Test fun `onlyConflict filter on translations works`() { val testData = ImportTestData() + testData.root.makeUsernamesUnique = true testDataService.saveTestData(testData.root) loginAsUser(testData.root.data.userAccounts[0].self.username) @@ -220,6 +229,7 @@ class V2ImportControllerResultTest : AuthorizedControllerTest() { @Test fun `onlyUnresolved filter on translations works`() { val testData = ImportTestData() + testData.root.makeUsernamesUnique = true testData.translationWithConflict.resolve() testDataService.saveTestData(testData.root) loginAsUser(testData.root.data.userAccounts[0].self.username) @@ -241,12 +251,14 @@ class V2ImportControllerResultTest : AuthorizedControllerTest() { @Test fun `import is isolated`() { val testData = ImportTestData() + testData.root.makeUsernamesUnique = true testDataService.saveTestData(testData.root) loginAsUser(testData.root.data.userAccounts[0].self.username) performAuthGet("/v2/projects/${testData.project.id}/import/result").andIsOk val testData2 = ImportTestData() + testData.root.makeUsernamesUnique = true testData2.userAccount.username = "user2" testDataService.saveTestData(testData2.root) loginAsUser(testData2.root.data.userAccounts[0].self.username) @@ -275,6 +287,7 @@ class V2ImportControllerResultTest : AuthorizedControllerTest() { @Test fun `it returns correct file issues`() { val testData = ImportTestData() + testData.root.makeUsernamesUnique = true testData.addManyFileIssues() testData.setAllResolved() testData.setAllOverride() diff --git a/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/v2ImportController/importSettings/ImportSettingsControllerApplicationTest.kt b/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/v2ImportController/importSettings/ImportSettingsControllerApplicationTest.kt index 1fe0de882a..86eb5386d8 100644 --- a/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/v2ImportController/importSettings/ImportSettingsControllerApplicationTest.kt +++ b/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/v2ImportController/importSettings/ImportSettingsControllerApplicationTest.kt @@ -217,6 +217,7 @@ class ImportSettingsControllerApplicationTest : ProjectAuthControllerTest("/v2/p } private fun saveAndPrepare() { + testData.root.makeUsernamesUnique = true testDataService.saveTestData(testData.root) userAccount = testData.user projectSupplier = { testData.project } diff --git a/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/v2ImportController/importSettings/ImportSettingsControllerTest.kt b/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/v2ImportController/importSettings/ImportSettingsControllerTest.kt index a88f86e93d..3be328eb42 100644 --- a/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/v2ImportController/importSettings/ImportSettingsControllerTest.kt +++ b/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/v2ImportController/importSettings/ImportSettingsControllerTest.kt @@ -15,6 +15,7 @@ class ImportSettingsControllerTest : ProjectAuthControllerTest("/v2/projects/") @ProjectJWTAuthTestMethod fun `stores settings`() { val testData = BaseTestData() + testData.root.makeUsernamesUnique = true testDataService.saveTestData(testData.root) userAccount = testData.user projectSupplier = { testData.project } @@ -46,6 +47,7 @@ class ImportSettingsControllerTest : ProjectAuthControllerTest("/v2/projects/") overrideKeyDescriptions = true convertPlaceholdersToIcu = false } + testData.root.makeUsernamesUnique = true testDataService.saveTestData(testData.root) userAccount = testData.user projectSupplier = { testData.project } diff --git a/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/v2KeyController/KeyControllerComplexEditTest.kt b/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/v2KeyController/KeyControllerComplexEditTest.kt index 0a30d1b55d..d6af278049 100644 --- a/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/v2KeyController/KeyControllerComplexEditTest.kt +++ b/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/v2KeyController/KeyControllerComplexEditTest.kt @@ -51,6 +51,7 @@ class KeyControllerComplexEditTest : ProjectAuthControllerTest("/v2/projects/") @BeforeEach fun setup() { testData = KeysTestData() + testData.root.makeUsernamesUnique = true testData.projectBuilder.addCzech() testDataService.saveTestData(testData.root) userAccount = testData.user diff --git a/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/v2KeyController/KeyControllerCreationTest.kt b/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/v2KeyController/KeyControllerCreationTest.kt index 3207ac7ddf..ad0fa53dcb 100644 --- a/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/v2KeyController/KeyControllerCreationTest.kt +++ b/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/v2KeyController/KeyControllerCreationTest.kt @@ -49,6 +49,7 @@ class KeyControllerCreationTest : ProjectAuthControllerTest("/v2/projects/") { @BeforeEach fun setup() { testData = KeysTestData() + testData.root.makeUsernamesUnique = true testDataService.saveTestData(testData.root) userAccount = testData.user this.projectSupplier = { testData.project } @@ -371,6 +372,7 @@ class KeyControllerCreationTest : ProjectAuthControllerTest("/v2/projects/") { stateChangeTags: List?, ) { val testData = PermissionsTestData() + testData.root.makeUsernamesUnique = true val user = testData.addUserWithPermissions( scopes = scopes, diff --git a/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/v2KeyController/KeyControllerDeleteManyKeysTest.kt b/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/v2KeyController/KeyControllerDeleteManyKeysTest.kt index 9f9ff1fa16..c75052443e 100644 --- a/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/v2KeyController/KeyControllerDeleteManyKeysTest.kt +++ b/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/v2KeyController/KeyControllerDeleteManyKeysTest.kt @@ -24,6 +24,7 @@ class KeyControllerDeleteManyKeysTest : ProjectAuthControllerTest("/v2/projects/ @BeforeEach fun setup() { testData = TranslationsTestData() + testData.root.makeUsernamesUnique = true testData.generateLotOfData(100) testDataService.saveTestData(testData.root) userAccount = testData.user diff --git a/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/v2KeyController/KeyControllerInfoTest.kt b/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/v2KeyController/KeyControllerInfoTest.kt index d75413e315..1bdbeec5a2 100644 --- a/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/v2KeyController/KeyControllerInfoTest.kt +++ b/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/v2KeyController/KeyControllerInfoTest.kt @@ -24,6 +24,7 @@ class KeyControllerInfoTest : ProjectAuthControllerTest("/v2/projects/") { fun setup() { executeInNewTransaction { testData = KeysInfoTestData() + testData.root.makeUsernamesUnique = true testDataService.saveTestData(testData.root) projectSupplier = { testData.projectBuilder.self } userAccount = testData.user diff --git a/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/v2KeyController/KeyControllerKeySearchTest.kt b/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/v2KeyController/KeyControllerKeySearchTest.kt index a467ae1424..09cee63cc1 100644 --- a/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/v2KeyController/KeyControllerKeySearchTest.kt +++ b/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/v2KeyController/KeyControllerKeySearchTest.kt @@ -29,6 +29,7 @@ class KeyControllerKeySearchTest : ProjectAuthControllerTest("/v2/projects/"), L @BeforeEach fun setup() { testData = KeySearchTestData() + testData.root.makeUsernamesUnique = true } fun saveAndPrepare() { diff --git a/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/v2KeyController/KeyControllerLanguageDisablingTest.kt b/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/v2KeyController/KeyControllerLanguageDisablingTest.kt index ba6a3465cc..7533a2a2f3 100644 --- a/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/v2KeyController/KeyControllerLanguageDisablingTest.kt +++ b/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/v2KeyController/KeyControllerLanguageDisablingTest.kt @@ -24,6 +24,7 @@ class KeyControllerLanguageDisablingTest : ProjectAuthControllerTest("/v2/projec @BeforeEach fun setup() { testData = KeyLanguageDisablingTestData() + testData.root.makeUsernamesUnique = true testDataService.saveTestData(testData.root) userAccount = testData.user this.projectSupplier = { testData.project.self } diff --git a/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/v2KeyController/KeyControllerLanguagePermissionTest.kt b/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/v2KeyController/KeyControllerLanguagePermissionTest.kt index cef6e8dc7d..d293560f46 100644 --- a/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/v2KeyController/KeyControllerLanguagePermissionTest.kt +++ b/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/v2KeyController/KeyControllerLanguagePermissionTest.kt @@ -6,6 +6,7 @@ import io.tolgee.fixtures.andIsForbidden import io.tolgee.fixtures.andIsOk import io.tolgee.testing.annotations.ProjectApiKeyAuthTestMethod import io.tolgee.testing.annotations.ProjectJWTAuthTestMethod +import org.junit.jupiter.api.AfterEach import org.junit.jupiter.api.BeforeEach import org.junit.jupiter.api.Test import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc @@ -20,10 +21,16 @@ class KeyControllerLanguagePermissionTest : ProjectAuthControllerTest("/v2/proje @BeforeEach fun setup() { testData = LanguagePermissionsTestData() + testData.root.makeUsernamesUnique = true testDataService.saveTestData(testData.root) this.projectSupplier = { testData.project } } + @AfterEach + fun cleanup() { + testDataService.cleanApiKeys(testData.root) + } + @ProjectJWTAuthTestMethod @Test fun `denies access for user without the language permission - Token Auth`() { diff --git a/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/v2KeyController/KeyControllerPluralizationTest.kt b/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/v2KeyController/KeyControllerPluralizationTest.kt index 787ab793f7..c9d67d6d74 100644 --- a/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/v2KeyController/KeyControllerPluralizationTest.kt +++ b/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/v2KeyController/KeyControllerPluralizationTest.kt @@ -44,6 +44,7 @@ class KeyControllerPluralizationTest : ProjectAuthControllerTest("/v2/projects/" } private fun saveAndPrepare() { + testData.root.makeUsernamesUnique = true testDataService.saveTestData(testData.root) userAccount = testData.user this.projectSupplier = { testData.project } diff --git a/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/v2KeyController/KeyControllerResolvableImportAutomationsTest.kt b/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/v2KeyController/KeyControllerResolvableImportAutomationsTest.kt index 79a754ac1a..eb79f10ed4 100644 --- a/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/v2KeyController/KeyControllerResolvableImportAutomationsTest.kt +++ b/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/v2KeyController/KeyControllerResolvableImportAutomationsTest.kt @@ -1,5 +1,6 @@ package io.tolgee.api.v2.controllers.v2KeyController +import io.tolgee.CleanDbBeforeMethod import io.tolgee.development.testDataBuilder.data.ResolvableImportTestData import io.tolgee.fixtures.MachineTranslationTest import io.tolgee.fixtures.andIsOk @@ -26,6 +27,7 @@ class KeyControllerResolvableImportAutomationsTest : MachineTranslationTest() { } @Test + @CleanDbBeforeMethod @ProjectJWTAuthTestMethod fun `auto translates on import`() { val keyName = "test" @@ -35,6 +37,7 @@ class KeyControllerResolvableImportAutomationsTest : MachineTranslationTest() { } @Test + @CleanDbBeforeMethod @ProjectJWTAuthTestMethod fun `sets outdated flag on base changed`() { val keyName = "keyWith2Translations" @@ -61,6 +64,7 @@ class KeyControllerResolvableImportAutomationsTest : MachineTranslationTest() { } fun saveTestData() { + testData.root.makeUsernamesUnique = true testDataService.saveTestData(testData.root) userAccount = testData.user } diff --git a/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/v2KeyController/KeyControllerResolvableImportTest.kt b/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/v2KeyController/KeyControllerResolvableImportTest.kt index 6930d9b642..353eb70549 100644 --- a/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/v2KeyController/KeyControllerResolvableImportTest.kt +++ b/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/v2KeyController/KeyControllerResolvableImportTest.kt @@ -34,6 +34,7 @@ class KeyControllerResolvableImportTest : ProjectAuthControllerTest("/v2/project @BeforeEach fun setup() { testData = ResolvableImportTestData() + testData.root.makeUsernamesUnique = true testDataService.saveTestData(testData.root) projectSupplier = { testData.projectBuilder.self } userAccount = testData.user diff --git a/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/v2KeyController/KeyControllerTest.kt b/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/v2KeyController/KeyControllerTest.kt index 02ea742685..a2a0951420 100644 --- a/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/v2KeyController/KeyControllerTest.kt +++ b/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/v2KeyController/KeyControllerTest.kt @@ -402,6 +402,7 @@ class KeyControllerTest : ProjectAuthControllerTest("/v2/projects/") { } private fun saveTestDataAndPrepare() { + testData.root.makeUsernamesUnique = true testDataService.saveTestData(testData.root) userAccount = testData.user this.projectSupplier = { testData.project } diff --git a/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/v2KeyController/KeyControllerWithNamespacesTest.kt b/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/v2KeyController/KeyControllerWithNamespacesTest.kt index 1697bdbdc6..4a28e6d844 100644 --- a/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/v2KeyController/KeyControllerWithNamespacesTest.kt +++ b/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/v2KeyController/KeyControllerWithNamespacesTest.kt @@ -30,6 +30,7 @@ class KeyControllerWithNamespacesTest : ProjectAuthControllerTest("/v2/projects/ @BeforeEach fun setup() { testData = NamespacesTestData() + testData.root.makeUsernamesUnique = true testDataService.saveTestData(testData.root) userAccount = testData.user this.projectSupplier = { testData.projectBuilder.self } diff --git a/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/v2ProjectsController/ProjectsControllerCreateTest.kt b/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/v2ProjectsController/ProjectsControllerCreateTest.kt index 5151156059..a5130d0074 100644 --- a/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/v2ProjectsController/ProjectsControllerCreateTest.kt +++ b/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/v2ProjectsController/ProjectsControllerCreateTest.kt @@ -1,6 +1,7 @@ package io.tolgee.api.v2.controllers.v2ProjectsController import com.fasterxml.jackson.module.kotlin.jacksonObjectMapper +import io.tolgee.CleanDbBeforeMethod import io.tolgee.dtos.request.LanguageRequest import io.tolgee.dtos.request.project.CreateProjectRequest import io.tolgee.fixtures.AuthorizedRequestFactory @@ -17,11 +18,9 @@ import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMock import org.springframework.boot.test.context.SpringBootTest import org.springframework.http.MediaType import org.springframework.test.web.servlet.result.MockMvcResultMatchers -import org.springframework.transaction.annotation.Transactional @SpringBootTest @AutoConfigureMockMvc -@Transactional class ProjectsControllerCreateTest : AuthorizedControllerTest() { private val languageDTO = LanguageRequest( @@ -61,6 +60,7 @@ class ProjectsControllerCreateTest : AuthorizedControllerTest() { } @Test + @CleanDbBeforeMethod fun createProject() { dbPopulator.createBase("test") testCreateValidationSizeShort() @@ -69,6 +69,7 @@ class ProjectsControllerCreateTest : AuthorizedControllerTest() { } @Test + @CleanDbBeforeMethod fun createProjectOrganization() { val userAccount = dbPopulator.createUserIfNotExists("testuser") val organization = dbPopulator.createOrganization("Test Organization", userAccount) @@ -86,6 +87,7 @@ class ProjectsControllerCreateTest : AuthorizedControllerTest() { } @Test + @CleanDbBeforeMethod fun testCreateValidationEmptyLanguages() { val request = CreateProjectRequest( @@ -96,6 +98,7 @@ class ProjectsControllerCreateTest : AuthorizedControllerTest() { } @Test + @CleanDbBeforeMethod fun `validates languages`() { val request = CreateProjectRequest( @@ -116,7 +119,10 @@ class ProjectsControllerCreateTest : AuthorizedControllerTest() { } private fun testCreateCorrectRequest() { - val organization = dbPopulator.createOrganizationIfNotExist("nice", userAccount = userAccount!!) + val organization = + executeInNewTransaction { + dbPopulator.createOrganizationIfNotExist("nice", userAccount = userAccount!!) + } val request = CreateProjectRequest("aaa", listOf(languageDTO), organizationId = organization.id) mvc.perform( AuthorizedRequestFactory.loggedPost("/v2/projects") @@ -126,16 +132,19 @@ class ProjectsControllerCreateTest : AuthorizedControllerTest() { ) .andExpect(MockMvcResultMatchers.status().isOk) .andReturn() - val projectDto = projectService.findAllPermitted(userAccount!!).find { it.name == "aaa" } - assertThat(projectDto).isNotNull - val project = projectService.get(projectDto!!.id!!) - assertThat(project.languages).isNotEmpty - val language = project.languages.stream().findFirst().orElse(null) - assertThat(language).isNotNull - assertThat(language.tag).isEqualTo("en") - assertThat(language.name).isEqualTo("English") - assertThat(language.originalName).isEqualTo("Original English") - assertThat(language.flagEmoji).isEqualTo("\uD83C\uDDEC\uD83C\uDDE7") + + executeInNewTransaction { + val projectDto = projectService.findAllPermitted(userAccount!!).find { it.name == "aaa" } + assertThat(projectDto).isNotNull + val project = projectService.get(projectDto!!.id!!) + assertThat(project.languages).isNotEmpty + val language = project.languages.stream().findFirst().orElse(null) + assertThat(language).isNotNull + assertThat(language.tag).isEqualTo("en") + assertThat(language.name).isEqualTo("English") + assertThat(language.originalName).isEqualTo("Original English") + assertThat(language.flagEmoji).isEqualTo("\uD83C\uDDEC\uD83C\uDDE7") + } } private fun testCreateValidationSizeShort() { @@ -155,26 +164,33 @@ class ProjectsControllerCreateTest : AuthorizedControllerTest() { } @Test + @CleanDbBeforeMethod fun `sets proper baseLanguage on create when provided`() { performAuthPost("/v2/projects", createForLanguagesDto).andPrettyPrint.andIsOk.andAssertThatJson { node("id").asNumber().satisfies { - assertThat(projectService.get(it.toLong()).baseLanguage!!.tag)!!.isEqualTo("cs") + executeInNewTransaction { _ -> + assertThat(projectService.get(it.toLong()).baseLanguage!!.tag)!!.isEqualTo("cs") + } } } } @Test + @CleanDbBeforeMethod fun `sets proper baseLanguage on create when not provided`() { performAuthPost("/v2/projects", createForLanguagesDto.copy(baseLanguageTag = null)) .andIsOk.andAssertThatJson { node("id").asNumber().satisfies { - assertThat(projectService.get(it.toLong()).baseLanguage!!.tag)!! - .isEqualTo("en") + executeInNewTransaction { _ -> + assertThat(projectService.get(it.toLong()).baseLanguage!!.tag)!! + .isEqualTo("en") + } } } } @Test + @CleanDbBeforeMethod fun `sets proper baseLanguage on create when not exists`() { performAuthPost("/v2/projects", createForLanguagesDto.apply { this.baseLanguageTag = "not_exists" }) .andIsBadRequest diff --git a/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/v2ProjectsController/ProjectsControllerInvitationTest.kt b/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/v2ProjectsController/ProjectsControllerInvitationTest.kt index 71ad6f8a72..f3c062da47 100644 --- a/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/v2ProjectsController/ProjectsControllerInvitationTest.kt +++ b/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/v2ProjectsController/ProjectsControllerInvitationTest.kt @@ -2,6 +2,7 @@ package io.tolgee.api.v2.controllers.v2ProjectsController import com.fasterxml.jackson.module.kotlin.jacksonObjectMapper import com.fasterxml.jackson.module.kotlin.readValue +import io.tolgee.CleanDbBeforeMethod import io.tolgee.ProjectAuthControllerTest import io.tolgee.constants.Message import io.tolgee.development.testDataBuilder.data.BaseTestData @@ -77,6 +78,7 @@ class ProjectsControllerInvitationTest : ProjectAuthControllerTest("/v2/projects @Test @ProjectJWTAuthTestMethod + @CleanDbBeforeMethod fun `invites user to project with languages (translate)`() { val result = invitationTestUtil.perform { getLang -> @@ -92,6 +94,7 @@ class ProjectsControllerInvitationTest : ProjectAuthControllerTest("/v2/projects @Test @ProjectJWTAuthTestMethod + @CleanDbBeforeMethod fun `invites user to project with languages (review)`() { val result = invitationTestUtil.perform { getLang -> @@ -108,6 +111,7 @@ class ProjectsControllerInvitationTest : ProjectAuthControllerTest("/v2/projects @Test @ProjectJWTAuthTestMethod + @CleanDbBeforeMethod fun `cannot set different languages (review)`() { val result = invitationTestUtil.perform { getLang -> @@ -123,6 +127,7 @@ class ProjectsControllerInvitationTest : ProjectAuthControllerTest("/v2/projects @Test @ProjectJWTAuthTestMethod + @CleanDbBeforeMethod fun `validates languages and permission (lower)`() { invitationTestUtil.perform { getLang -> type = ProjectPermissionType.VIEW @@ -132,6 +137,7 @@ class ProjectsControllerInvitationTest : ProjectAuthControllerTest("/v2/projects @Test @ProjectJWTAuthTestMethod + @CleanDbBeforeMethod fun `validates languages and permission (higher)`() { invitationTestUtil.perform { getLang -> type = ProjectPermissionType.EDIT diff --git a/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/v2ProjectsController/ProjectsControllerLeavingTest.kt b/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/v2ProjectsController/ProjectsControllerLeavingTest.kt index 947839cdfd..9e3871a24d 100644 --- a/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/v2ProjectsController/ProjectsControllerLeavingTest.kt +++ b/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/v2ProjectsController/ProjectsControllerLeavingTest.kt @@ -20,6 +20,7 @@ class ProjectsControllerLeavingTest : ProjectAuthControllerTest("/v2/projects/") @ProjectJWTAuthTestMethod fun `user can leave project`() { val testData = ProjectLeavingTestData() + testData.root.makeUsernamesUnique = true testDataService.saveTestData(testData.root) userAccount = testData.project1nonOwner projectSupplier = { testData.projectBuilder.self } @@ -34,6 +35,7 @@ class ProjectsControllerLeavingTest : ProjectAuthControllerTest("/v2/projects/") @ProjectJWTAuthTestMethod fun `cannot leave project with organization role`() { val testData = ProjectLeavingTestData() + testData.root.makeUsernamesUnique = true testDataService.saveTestData(testData.root) userAccount = testData.userWithOrganizationRole projectSupplier = { testData.organizationOwnedProject } @@ -46,6 +48,7 @@ class ProjectsControllerLeavingTest : ProjectAuthControllerTest("/v2/projects/") @ProjectJWTAuthTestMethod fun `resets user preferred organization when leaves organization project with only base permissions`() { val testData = OrganizationTestData() + testData.root.makeUsernamesUnique = true testDataService.saveTestData(testData.root) userAccount = testData.kvetoslav projectSupplier = { testData.projectBuilder.self } diff --git a/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/v2ProjectsController/ProjectsControllerPermissionsTest.kt b/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/v2ProjectsController/ProjectsControllerPermissionsTest.kt index a76c4bef38..9dc9330eba 100644 --- a/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/v2ProjectsController/ProjectsControllerPermissionsTest.kt +++ b/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/v2ProjectsController/ProjectsControllerPermissionsTest.kt @@ -1,5 +1,6 @@ package io.tolgee.api.v2.controllers.v2ProjectsController +import io.tolgee.CleanDbBeforeMethod import io.tolgee.ProjectAuthControllerTest import io.tolgee.constants.Message import io.tolgee.development.testDataBuilder.data.PermissionsTestData @@ -23,6 +24,7 @@ class ProjectsControllerPermissionsTest : ProjectAuthControllerTest("/v2/project private val permissionTestUtil: PermissionTestUtil by lazy { PermissionTestUtil(this, applicationContext) } @Test + @CleanDbBeforeMethod fun `sets user permissions`() { permissionTestUtil.withPermissionsTestData { project, user -> performAuthPut("/v2/projects/${project.id}/users/${user.id}/set-permissions/EDIT", null).andIsOk @@ -33,6 +35,7 @@ class ProjectsControllerPermissionsTest : ProjectAuthControllerTest("/v2/project } @Test + @CleanDbBeforeMethod @ProjectJWTAuthTestMethod fun `changes from none to other`() { val testData = PermissionsTestData() @@ -44,6 +47,7 @@ class ProjectsControllerPermissionsTest : ProjectAuthControllerTest("/v2/project } @Test + @CleanDbBeforeMethod @ProjectJWTAuthTestMethod fun `cannot set permission to user outside of project or organization`() { val testData = PermissionsTestData() @@ -59,6 +63,7 @@ class ProjectsControllerPermissionsTest : ProjectAuthControllerTest("/v2/project } @Test + @CleanDbBeforeMethod @ProjectJWTAuthTestMethod fun `sets user permissions to organization base`() { val testData = PermissionsTestData() @@ -82,6 +87,7 @@ class ProjectsControllerPermissionsTest : ProjectAuthControllerTest("/v2/project } @Test + @CleanDbBeforeMethod fun `sets user's permissions with languages`() { permissionTestUtil.checkSetPermissionsWithLanguages("TRANSLATE", { getLang -> "languages=${getLang("en")}&" + @@ -96,6 +102,7 @@ class ProjectsControllerPermissionsTest : ProjectAuthControllerTest("/v2/project } @Test + @CleanDbBeforeMethod fun `cannot save stateChangeLanguages when translate`() { permissionTestUtil.performSetPermissions("TRANSLATE") { getLang -> "stateChangeLanguages=${getLang("de")}" @@ -103,6 +110,7 @@ class ProjectsControllerPermissionsTest : ProjectAuthControllerTest("/v2/project } @Test + @CleanDbBeforeMethod fun `cannot save viewLanguages when none`() { permissionTestUtil.performSetPermissions("NONE") { getLang -> "viewLanguages=${getLang("de")}" @@ -110,6 +118,7 @@ class ProjectsControllerPermissionsTest : ProjectAuthControllerTest("/v2/project } @Test + @CleanDbBeforeMethod fun `cannot save stateChangeLanguages when view`() { permissionTestUtil.performSetPermissions("VIEW") { getLang -> "stateChangeLanguages=${getLang("de")}" @@ -117,6 +126,7 @@ class ProjectsControllerPermissionsTest : ProjectAuthControllerTest("/v2/project } @Test + @CleanDbBeforeMethod fun `cannot save translationEditLangueges when view`() { permissionTestUtil.performSetPermissions("VIEW") { getLang -> "translateLanguages=${getLang("de")}" diff --git a/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/v2ProjectsController/ProjectsControllerTest.kt b/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/v2ProjectsController/ProjectsControllerTest.kt index fb0edd44ab..e95e8d19d8 100644 --- a/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/v2ProjectsController/ProjectsControllerTest.kt +++ b/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/v2ProjectsController/ProjectsControllerTest.kt @@ -1,5 +1,6 @@ package io.tolgee.api.v2.controllers.v2ProjectsController +import io.tolgee.CleanDbBeforeMethod import io.tolgee.ProjectAuthControllerTest import io.tolgee.development.testDataBuilder.data.BaseTestData import io.tolgee.development.testDataBuilder.data.ProjectsTestData @@ -47,6 +48,7 @@ class ProjectsControllerTest : ProjectAuthControllerTest("/v2/projects/") { @Test fun `get all has language permissions`() { val baseTestData = BaseTestData() + baseTestData.root.makeUsernamesUnique = true var franta: UserAccount? = null baseTestData.root.apply { @@ -71,6 +73,7 @@ class ProjectsControllerTest : ProjectAuthControllerTest("/v2/projects/") { } @Test + @CleanDbBeforeMethod fun getAllWithStats() { val testData = ProjectsTestData() testDataService.saveTestData(testData.root) @@ -106,6 +109,7 @@ class ProjectsControllerTest : ProjectAuthControllerTest("/v2/projects/") { } @Test + @CleanDbBeforeMethod fun `with-stats returns permitted languages`() { val testData = ProjectsTestData() testDataService.saveTestData(testData.root) @@ -154,6 +158,7 @@ class ProjectsControllerTest : ProjectAuthControllerTest("/v2/projects/") { } @Test + @CleanDbBeforeMethod fun getAllUsers() { val usersAndOrganizations = dbPopulator.createUsersAndOrganizations() val directPermissionProject = usersAndOrganizations[1].organizationRoles[0].organization!!.projects[0] @@ -185,6 +190,7 @@ class ProjectsControllerTest : ProjectAuthControllerTest("/v2/projects/") { } @Test + @CleanDbBeforeMethod fun setUsersPermissionsNoAccess() { val usersAndOrganizations = dbPopulator.createUsersAndOrganizations() val repo = usersAndOrganizations[1].organizationRoles[0].organization!!.projects[0] @@ -199,6 +205,7 @@ class ProjectsControllerTest : ProjectAuthControllerTest("/v2/projects/") { } @Test + @CleanDbBeforeMethod fun setUsersPermissionsOwner() { val usersAndOrganizations = dbPopulator.createUsersAndOrganizations() val repo = usersAndOrganizations[1].organizationRoles[0].organization!!.projects[0] @@ -214,6 +221,7 @@ class ProjectsControllerTest : ProjectAuthControllerTest("/v2/projects/") { } @Test + @CleanDbBeforeMethod fun setUsersPermissionsOwn() { val usersAndOrganizations = dbPopulator.createUsersAndOrganizations() val repo = @@ -231,6 +239,7 @@ class ProjectsControllerTest : ProjectAuthControllerTest("/v2/projects/") { } @Test + @CleanDbBeforeMethod fun revokeUsersAccess() { val usersAndOrganizations = dbPopulator.createUsersAndOrganizations() val repo = usersAndOrganizations[1].organizationRoles[0].organization!!.projects[0] @@ -257,6 +266,7 @@ class ProjectsControllerTest : ProjectAuthControllerTest("/v2/projects/") { } @Test + @CleanDbBeforeMethod fun revokeUsersAccessIsOrganizationMember() { val usersAndOrganizations = dbPopulator.createUsersAndOrganizations() val repo = usersAndOrganizations[1].organizationRoles[0].organization!!.projects[0] diff --git a/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/v2ProjectsController/ProjectsControllerTransferringTest.kt b/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/v2ProjectsController/ProjectsControllerTransferringTest.kt index d05bcde62e..cb95208031 100644 --- a/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/v2ProjectsController/ProjectsControllerTransferringTest.kt +++ b/backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/v2ProjectsController/ProjectsControllerTransferringTest.kt @@ -19,6 +19,7 @@ class ProjectsControllerTransferringTest : ProjectAuthControllerTest("/v2/projec @ProjectJWTAuthTestMethod fun `doesn't transfer to organization when not permitted`() { val testData = ProjectTransferringTestData() + testData.root.makeUsernamesUnique = true testDataService.saveTestData(testData.root) userAccount = testData.user2 projectSupplier = { testData.project } @@ -29,6 +30,7 @@ class ProjectsControllerTransferringTest : ProjectAuthControllerTest("/v2/projec @ProjectJWTAuthTestMethod fun `provides transfer options`() { val testData = ProjectTransferringTestData() + testData.root.makeUsernamesUnique = true testDataService.saveTestData(testData.root) userAccount = testData.user projectSupplier = { testData.project } diff --git a/backend/app/src/test/kotlin/io/tolgee/automation/AutomationIntegrationTest.kt b/backend/app/src/test/kotlin/io/tolgee/automation/AutomationIntegrationTest.kt index e871f9937c..4e84846fc6 100644 --- a/backend/app/src/test/kotlin/io/tolgee/automation/AutomationIntegrationTest.kt +++ b/backend/app/src/test/kotlin/io/tolgee/automation/AutomationIntegrationTest.kt @@ -14,6 +14,7 @@ import io.tolgee.fixtures.node import io.tolgee.fixtures.verifyWebhookSignatureHeader import io.tolgee.fixtures.waitForNotThrowing import io.tolgee.service.contentDelivery.ContentDeliveryConfigService +import io.tolgee.testing.ContextRecreatingTest import io.tolgee.testing.annotations.ProjectJWTAuthTestMethod import io.tolgee.testing.assert import io.tolgee.util.addSeconds @@ -44,6 +45,7 @@ import java.util.* @SpringBootTest @AutoConfigureMockMvc +@ContextRecreatingTest class AutomationIntegrationTest : ProjectAuthControllerTest("/v2/projects/") { @MockBean @Autowired @@ -87,6 +89,8 @@ class AutomationIntegrationTest : ProjectAuthControllerTest("/v2/projects/") { fun `publishes to Content Delivery`() { currentDateProvider.forcedDate = currentDateProvider.date val testData = ContentDeliveryConfigTestData() + testData.root.makeUsernamesUnique = true + testDataService.saveTestData(testData.root) userAccount = testData.user this.projectSupplier = { testData.projectBuilder.self } @@ -114,6 +118,8 @@ class AutomationIntegrationTest : ProjectAuthControllerTest("/v2/projects/") { @ProjectJWTAuthTestMethod fun `it executes webhook`() { val testData = WebhooksTestData() + testData.root.makeUsernamesUnique = true + currentDateProvider.forcedDate = currentDateProvider.date testDataService.saveTestData(testData.root) @@ -130,6 +136,8 @@ class AutomationIntegrationTest : ProjectAuthControllerTest("/v2/projects/") { @ProjectJWTAuthTestMethod fun `it updates webhook config when failing`() { val testData = WebhooksTestData() + testData.root.makeUsernamesUnique = true + currentDateProvider.forcedDate = currentDateProvider.date testDataService.saveTestData(testData.root) userAccount = testData.user diff --git a/backend/app/src/test/kotlin/io/tolgee/batch/BatchJobsCleanerTest.kt b/backend/app/src/test/kotlin/io/tolgee/batch/BatchJobsCleanerTest.kt index 4aef80dd86..ff637a5d03 100644 --- a/backend/app/src/test/kotlin/io/tolgee/batch/BatchJobsCleanerTest.kt +++ b/backend/app/src/test/kotlin/io/tolgee/batch/BatchJobsCleanerTest.kt @@ -1,10 +1,12 @@ package io.tolgee.batch import io.tolgee.AbstractSpringTest +import io.tolgee.CleanDbBeforeMethod import io.tolgee.development.testDataBuilder.data.BaseTestData import io.tolgee.fixtures.waitForNotThrowing import io.tolgee.model.batch.BatchJobChunkExecutionStatus import io.tolgee.model.batch.BatchJobStatus +import io.tolgee.testing.ContextRecreatingTest import io.tolgee.testing.assert import io.tolgee.util.StuckBatchJobTestUtil import org.junit.jupiter.api.AfterEach @@ -12,12 +14,11 @@ import org.junit.jupiter.api.BeforeEach import org.junit.jupiter.api.Test import org.springframework.beans.factory.annotation.Autowired import org.springframework.boot.test.context.SpringBootTest -import org.springframework.test.annotation.DirtiesContext @SpringBootTest( properties = ["tolgee.batch.scheduled-handle-stuck-job-delay=200"], ) -@DirtiesContext(classMode = DirtiesContext.ClassMode.AFTER_CLASS) +@ContextRecreatingTest class BatchJobsCleanerTest : AbstractSpringTest() { @Autowired lateinit var jobConcurrentLauncher: BatchJobConcurrentLauncher @@ -42,6 +43,7 @@ class BatchJobsCleanerTest : AbstractSpringTest() { } @Test + @CleanDbBeforeMethod fun `fixes the batch job state`() { val cancelledJob = createCancelledJob() val failedJob = createFailedJob() diff --git a/backend/app/src/test/kotlin/io/tolgee/batch/TolgeeTranslatorWithBatchTest.kt b/backend/app/src/test/kotlin/io/tolgee/batch/TolgeeTranslatorWithBatchTest.kt index 23515ffc89..79f5a27a1a 100644 --- a/backend/app/src/test/kotlin/io/tolgee/batch/TolgeeTranslatorWithBatchTest.kt +++ b/backend/app/src/test/kotlin/io/tolgee/batch/TolgeeTranslatorWithBatchTest.kt @@ -6,6 +6,7 @@ import io.tolgee.component.bucket.TokenBucketManager import io.tolgee.component.machineTranslation.TranslationApiRateLimitException import io.tolgee.component.machineTranslation.providers.tolgee.CloudTolgeeTranslateApiService import io.tolgee.component.machineTranslation.providers.tolgee.TolgeeTranslateParams +import io.tolgee.testing.ContextRecreatingTest import io.tolgee.testing.assert import org.junit.jupiter.api.AfterEach import org.junit.jupiter.api.BeforeEach @@ -32,6 +33,7 @@ import org.springframework.web.client.HttpClientErrorException import org.springframework.web.client.RestTemplate @SpringBootTest +@ContextRecreatingTest class TolgeeTranslatorWithBatchTest { @Autowired @SpyBean diff --git a/backend/app/src/test/kotlin/io/tolgee/component/LanguageStatsListenerTest.kt b/backend/app/src/test/kotlin/io/tolgee/component/LanguageStatsListenerTest.kt index 90defd2a6d..0a3b54b834 100644 --- a/backend/app/src/test/kotlin/io/tolgee/component/LanguageStatsListenerTest.kt +++ b/backend/app/src/test/kotlin/io/tolgee/component/LanguageStatsListenerTest.kt @@ -19,6 +19,7 @@ class LanguageStatsListenerTest : AbstractControllerTest() { @Test fun `updates stats when added key`() { val testData = TranslationsTestData() + testData.root.makeUsernamesUnique = true testDataService.saveTestData(testData.root) val projectLanguages = languageService.getProjectLanguages(testData.project.id).associateBy { it.id } diff --git a/backend/app/src/test/kotlin/io/tolgee/component/bucket/TokenBucketManagerTestWithoutRedis.kt b/backend/app/src/test/kotlin/io/tolgee/component/bucket/TokenBucketManagerTestWithoutRedis.kt index 5272098a1d..703bcf0466 100644 --- a/backend/app/src/test/kotlin/io/tolgee/component/bucket/TokenBucketManagerTestWithoutRedis.kt +++ b/backend/app/src/test/kotlin/io/tolgee/component/bucket/TokenBucketManagerTestWithoutRedis.kt @@ -1,6 +1,8 @@ package io.tolgee.component.bucket +import io.tolgee.testing.ContextRecreatingTest import org.springframework.boot.test.context.SpringBootTest @SpringBootTest +@ContextRecreatingTest class TokenBucketManagerTestWithoutRedis : AbstractTokenBucketManagerTest() diff --git a/backend/app/src/test/kotlin/io/tolgee/component/fileStorage/FileStorageFsTest.kt b/backend/app/src/test/kotlin/io/tolgee/component/fileStorage/FileStorageFsTest.kt index 93f897fbe9..0a499ec8ee 100644 --- a/backend/app/src/test/kotlin/io/tolgee/component/fileStorage/FileStorageFsTest.kt +++ b/backend/app/src/test/kotlin/io/tolgee/component/fileStorage/FileStorageFsTest.kt @@ -4,6 +4,7 @@ package io.tolgee.component.fileStorage +import io.tolgee.testing.ContextRecreatingTest import io.tolgee.testing.assert import io.tolgee.testing.assertions.Assertions.assertThat import org.junit.jupiter.api.BeforeEach @@ -14,6 +15,7 @@ import java.io.File @SpringBootTest( properties = ["tolgee.internal.use-in-memory-file-storage=false"], ) +@ContextRecreatingTest class FileStorageFsTest : AbstractFileStorageServiceTest() { lateinit var file: File diff --git a/backend/app/src/test/kotlin/io/tolgee/controllers/ExportControllerTest.kt b/backend/app/src/test/kotlin/io/tolgee/controllers/ExportControllerTest.kt index 7efd338fc9..20d759c401 100644 --- a/backend/app/src/test/kotlin/io/tolgee/controllers/ExportControllerTest.kt +++ b/backend/app/src/test/kotlin/io/tolgee/controllers/ExportControllerTest.kt @@ -70,6 +70,7 @@ class ExportControllerTest : ProjectAuthControllerTest() { @ProjectApiKeyAuthTestMethod(scopes = [Scope.TRANSLATIONS_VIEW]) fun `exports only permitted langs`() { val testData = LanguagePermissionsTestData() + testData.root.makeUsernamesUnique = true testDataService.saveTestData(testData.root) userAccount = testData.viewEnOnlyUser projectSupplier = { testData.project } diff --git a/backend/app/src/test/kotlin/io/tolgee/controllers/MarketingEmailingTest.kt b/backend/app/src/test/kotlin/io/tolgee/controllers/MarketingEmailingTest.kt index 2d1fbe2213..3714fa9e50 100644 --- a/backend/app/src/test/kotlin/io/tolgee/controllers/MarketingEmailingTest.kt +++ b/backend/app/src/test/kotlin/io/tolgee/controllers/MarketingEmailingTest.kt @@ -1,5 +1,6 @@ package io.tolgee.controllers +import io.tolgee.CleanDbBeforeMethod import io.tolgee.component.emailContacts.EmailServiceManager import io.tolgee.component.emailContacts.MailJetEmailServiceManager import io.tolgee.component.emailContacts.SendInBlueEmailServiceManager @@ -10,6 +11,7 @@ import io.tolgee.fixtures.EmailTestUtil import io.tolgee.fixtures.andIsOk import io.tolgee.model.UserAccount import io.tolgee.testing.AuthorizedControllerTest +import io.tolgee.testing.ContextRecreatingTest import io.tolgee.testing.assert import io.tolgee.util.GitHubAuthUtil import jakarta.servlet.http.HttpServletRequest @@ -34,6 +36,7 @@ import org.springframework.web.client.RestTemplate @SpringBootTest @AutoConfigureMockMvc +@ContextRecreatingTest class MarketingEmailingTest : AuthorizedControllerTest() { @Autowired lateinit var sendInBlueProperties: SendInBlueProperties @@ -89,6 +92,7 @@ class MarketingEmailingTest : AuthorizedControllerTest() { val testName = "Pavel Novak" @Test + @CleanDbBeforeMethod fun `adds contact on user sign up `() { val dto = SignUpDto(name = testName, password = "aaaaaaaaaa", email = testMail) performPost("/api/public/sign_up", dto) @@ -97,6 +101,7 @@ class MarketingEmailingTest : AuthorizedControllerTest() { } @Test + @CleanDbBeforeMethod fun `adds contact after verification when needs-verification is on`() { tolgeeProperties.frontEndUrl = "https://aaa" tolgeeProperties.authentication.needsEmailVerification = true @@ -114,6 +119,7 @@ class MarketingEmailingTest : AuthorizedControllerTest() { } @Test + @CleanDbBeforeMethod fun `updates contact when user is updated`() { val user = dbPopulator.createUserIfNotExists(username = testMail, name = testName) userAccount = user @@ -123,6 +129,7 @@ class MarketingEmailingTest : AuthorizedControllerTest() { } @Test + @CleanDbBeforeMethod fun `updates contact email when verified`() { tolgeeProperties.authentication.needsEmailVerification = true val user = dbPopulator.createUserIfNotExists(username = testMail, name = testName) @@ -143,6 +150,7 @@ class MarketingEmailingTest : AuthorizedControllerTest() { } @Test + @CleanDbBeforeMethod fun `adds contact when registered via github`() { gitHubAuthUtil.authorizeGithubUser() verifyCreateContactCalled("fake_email@email.com", "fakeName") diff --git a/backend/app/src/test/kotlin/io/tolgee/controllers/PublicControllerTest.kt b/backend/app/src/test/kotlin/io/tolgee/controllers/PublicControllerTest.kt index b28bc94348..ee1345380d 100644 --- a/backend/app/src/test/kotlin/io/tolgee/controllers/PublicControllerTest.kt +++ b/backend/app/src/test/kotlin/io/tolgee/controllers/PublicControllerTest.kt @@ -1,6 +1,7 @@ package io.tolgee.controllers import com.posthog.java.PostHog +import io.tolgee.CleanDbBeforeMethod import io.tolgee.dtos.misc.CreateProjectInvitationParams import io.tolgee.dtos.request.auth.SignUpDto import io.tolgee.fixtures.andAssertResponse @@ -48,6 +49,7 @@ class PublicControllerTest : lateinit var postHog: PostHog @Test + @CleanDbBeforeMethod fun `creates organization`() { val dto = SignUpDto( @@ -61,6 +63,7 @@ class PublicControllerTest : } @Test + @CleanDbBeforeMethod fun `creates organization when no invitation`() { val dto = SignUpDto(name = "Pavel Novak", password = "aaaaaaaaa", email = "aaaa@aaaa.com") performPost("/api/public/sign_up", dto).andIsOk @@ -68,6 +71,7 @@ class PublicControllerTest : } @Test + @CleanDbBeforeMethod fun `logs event to external monitor`() { val dto = SignUpDto(name = "Pavel Novak", password = "aaaaaaaaa", email = "aaaa@aaaa.com") performPost( @@ -98,6 +102,7 @@ class PublicControllerTest : } @Test + @CleanDbBeforeMethod fun `doesn't create organization when invitation provided`() { val base = dbPopulator.createBase(generateUniqueString()) val project = base.project @@ -117,6 +122,7 @@ class PublicControllerTest : } @Test + @CleanDbBeforeMethod fun `doesn't create orgs when disabled`() { tolgeeProperties.authentication.userCanCreateOrganizations = false val dto = @@ -131,6 +137,7 @@ class PublicControllerTest : } @Test + @CleanDbBeforeMethod fun testSignUpValidationBlankEmail() { val dto = SignUpDto(name = "Pavel Novak", password = "aaaa", email = "") performPost("/api/public/sign_up", dto) @@ -139,6 +146,7 @@ class PublicControllerTest : } @Test + @CleanDbBeforeMethod fun testSignUpValidationBlankName() { val dto = SignUpDto(name = "", password = "aaaa", email = "aaa@aaa.cz") performPost("/api/public/sign_up", dto) @@ -147,6 +155,7 @@ class PublicControllerTest : } @Test + @CleanDbBeforeMethod fun testSignUpValidationInvalidEmail() { val dto = SignUpDto(name = "", password = "aaaa", email = "aaaaaa.cz") performPost("/api/public/sign_up", dto) diff --git a/backend/app/src/test/kotlin/io/tolgee/jobs/migration/allOrganizationOwner/AllOrganizationOwnerJobTest.kt b/backend/app/src/test/kotlin/io/tolgee/jobs/migration/allOrganizationOwner/AllOrganizationOwnerJobTest.kt index 76edaa98b7..6053a3a8e0 100644 --- a/backend/app/src/test/kotlin/io/tolgee/jobs/migration/allOrganizationOwner/AllOrganizationOwnerJobTest.kt +++ b/backend/app/src/test/kotlin/io/tolgee/jobs/migration/allOrganizationOwner/AllOrganizationOwnerJobTest.kt @@ -1,6 +1,7 @@ package io.tolgee.jobs.migration.allOrganizationOwner import io.tolgee.AbstractSpringTest +import io.tolgee.CleanDbBeforeMethod import io.tolgee.development.testDataBuilder.data.AllOrganizationOwnerMigrationTestData import io.tolgee.model.Permission import io.tolgee.model.Project @@ -78,6 +79,7 @@ class AllOrganizationOwnerJobTest : AbstractSpringTest() { } @Test + @CleanDbBeforeMethod fun `creates organizations and moves projects`() { allOrganizationOwnerJobRunner.run() transactionTemplate.execute { @@ -92,6 +94,7 @@ class AllOrganizationOwnerJobTest : AbstractSpringTest() { } @Test + @CleanDbBeforeMethod fun `deletes permission`() { allOrganizationOwnerJobRunner.run() transactionTemplate.execute { @@ -101,6 +104,7 @@ class AllOrganizationOwnerJobTest : AbstractSpringTest() { } @Test + @CleanDbBeforeMethod fun `reuses existing organization`() { allOrganizationOwnerJobRunner.run() transactionTemplate.execute { @@ -110,6 +114,7 @@ class AllOrganizationOwnerJobTest : AbstractSpringTest() { } @Test + @CleanDbBeforeMethod fun `creates the organization for user with no organization membership`() { allOrganizationOwnerJobRunner.run() transactionTemplate.execute { @@ -121,6 +126,7 @@ class AllOrganizationOwnerJobTest : AbstractSpringTest() { } @Test + @CleanDbBeforeMethod fun `it keeps user direct permissions`() { allOrganizationOwnerJobRunner.run() transactionTemplate.execute { @@ -130,6 +136,7 @@ class AllOrganizationOwnerJobTest : AbstractSpringTest() { } @Test + @CleanDbBeforeMethod fun `it does not run multiple times for same params`() { // first - it really runs val instance = allOrganizationOwnerJobRunner.run() diff --git a/backend/app/src/test/kotlin/io/tolgee/jobs/migration/translationStats/TranslationStatsJobTest.kt b/backend/app/src/test/kotlin/io/tolgee/jobs/migration/translationStats/TranslationStatsJobTest.kt index bd471211e3..c8693e6db1 100644 --- a/backend/app/src/test/kotlin/io/tolgee/jobs/migration/translationStats/TranslationStatsJobTest.kt +++ b/backend/app/src/test/kotlin/io/tolgee/jobs/migration/translationStats/TranslationStatsJobTest.kt @@ -1,6 +1,7 @@ package io.tolgee.jobs.migration.translationStats import io.tolgee.AbstractSpringTest +import io.tolgee.CleanDbBeforeMethod import io.tolgee.development.testDataBuilder.data.TranslationsTestData import io.tolgee.repository.TranslationRepository import io.tolgee.testing.assertions.Assertions.assertThat @@ -18,6 +19,7 @@ class TranslationStatsJobTest : AbstractSpringTest() { lateinit var translationRepository: TranslationRepository @Test + @CleanDbBeforeMethod fun `it adds the stats`() { prepareData(10) val instance = translationsStatsUpdateJobRunner.run() @@ -26,6 +28,7 @@ class TranslationStatsJobTest : AbstractSpringTest() { } @Test + @CleanDbBeforeMethod fun `it does not run multiple times for same params`() { prepareData() @@ -39,6 +42,7 @@ class TranslationStatsJobTest : AbstractSpringTest() { } @Test + @CleanDbBeforeMethod fun `it runs again when new translation without stats is created`() { val testData = prepareData() diff --git a/backend/app/src/test/kotlin/io/tolgee/repository/UserAccountRepositoryTest.kt b/backend/app/src/test/kotlin/io/tolgee/repository/UserAccountRepositoryTest.kt index a00c95d443..21b8d2d9d1 100644 --- a/backend/app/src/test/kotlin/io/tolgee/repository/UserAccountRepositoryTest.kt +++ b/backend/app/src/test/kotlin/io/tolgee/repository/UserAccountRepositoryTest.kt @@ -1,6 +1,7 @@ package io.tolgee.repository import io.tolgee.AbstractSpringTest +import io.tolgee.CleanDbBeforeMethod import io.tolgee.development.DbPopulatorReal import io.tolgee.dtos.request.task.UserAccountFilters import io.tolgee.model.views.UserAccountWithOrganizationRoleView @@ -21,6 +22,7 @@ class UserAccountRepositoryTest : AbstractSpringTest() { lateinit var dbPopulatorReal: DbPopulatorReal @Test + @CleanDbBeforeMethod fun getAllInOrganizationHasMemberRole() { val usersAndOrganizations = dbPopulatorReal.createUsersAndOrganizations() val org = usersAndOrganizations[1].organizationRoles[0].organization @@ -30,6 +32,7 @@ class UserAccountRepositoryTest : AbstractSpringTest() { } @Test + @CleanDbBeforeMethod fun getAllInOrganizationCorrectAccounts() { val usersAndOrganizations = dbPopulatorReal.createUsersAndOrganizations() val user = entityManager.merge(usersAndOrganizations[2]) @@ -41,6 +44,7 @@ class UserAccountRepositoryTest : AbstractSpringTest() { } @Test + @CleanDbBeforeMethod fun getAllInProjectSearch() { val franta = dbPopulatorReal.createUserIfNotExists("franta") val usersAndOrganizations = dbPopulatorReal.createUsersAndOrganizations() diff --git a/backend/app/src/test/kotlin/io/tolgee/repository/dataImport/ImportFileIssueRepositoryTest.kt b/backend/app/src/test/kotlin/io/tolgee/repository/dataImport/ImportFileIssueRepositoryTest.kt index e3239ff7db..02e0a9783f 100644 --- a/backend/app/src/test/kotlin/io/tolgee/repository/dataImport/ImportFileIssueRepositoryTest.kt +++ b/backend/app/src/test/kotlin/io/tolgee/repository/dataImport/ImportFileIssueRepositoryTest.kt @@ -21,6 +21,7 @@ class ImportFileIssueRepositoryTest : AbstractSpringTest() { @Test fun `view query returns correct result`() { val testData = ImportTestData() + testData.root.makeUsernamesUnique = true testData.addFileIssues() testDataService.saveTestData(testData.root) val result = diff --git a/backend/app/src/test/kotlin/io/tolgee/repository/dataImport/ImportLanguageRepositoryTest.kt b/backend/app/src/test/kotlin/io/tolgee/repository/dataImport/ImportLanguageRepositoryTest.kt index 3360386d61..d0172213bd 100644 --- a/backend/app/src/test/kotlin/io/tolgee/repository/dataImport/ImportLanguageRepositoryTest.kt +++ b/backend/app/src/test/kotlin/io/tolgee/repository/dataImport/ImportLanguageRepositoryTest.kt @@ -16,6 +16,7 @@ class ImportLanguageRepositoryTest : AbstractSpringTest() { @Test fun `view query returns correct result`() { val testData = ImportTestData() + testData.root.makeUsernamesUnique = true testData.addFileIssues() testDataService.saveTestData(testData.root) val result = diff --git a/backend/app/src/test/kotlin/io/tolgee/repository/dataImport/ImportTranslationRepositoryTest.kt b/backend/app/src/test/kotlin/io/tolgee/repository/dataImport/ImportTranslationRepositoryTest.kt index 33b1f10778..f64b16197d 100644 --- a/backend/app/src/test/kotlin/io/tolgee/repository/dataImport/ImportTranslationRepositoryTest.kt +++ b/backend/app/src/test/kotlin/io/tolgee/repository/dataImport/ImportTranslationRepositoryTest.kt @@ -16,6 +16,7 @@ class ImportTranslationRepositoryTest : AbstractSpringTest() { @Test fun `view returns correct data`() { val importTestData = ImportTestData() + importTestData.root.makeUsernamesUnique = true testDataService.saveTestData(importTestData.root) val result = @@ -37,6 +38,7 @@ class ImportTranslationRepositoryTest : AbstractSpringTest() { @Test fun `view filters`() { val importTestData = ImportTestData() + importTestData.root.makeUsernamesUnique = true testDataService.saveTestData(importTestData.root) val result = diff --git a/backend/app/src/test/kotlin/io/tolgee/security/EmailVerificationTest.kt b/backend/app/src/test/kotlin/io/tolgee/security/EmailVerificationTest.kt index 40be051008..cc8819a29e 100644 --- a/backend/app/src/test/kotlin/io/tolgee/security/EmailVerificationTest.kt +++ b/backend/app/src/test/kotlin/io/tolgee/security/EmailVerificationTest.kt @@ -1,5 +1,6 @@ package io.tolgee.security +import io.tolgee.CleanDbBeforeMethod import io.tolgee.configuration.tolgee.TolgeeProperties import io.tolgee.dtos.request.auth.SignUpDto import io.tolgee.exceptions.NotFoundException @@ -43,6 +44,7 @@ class EmailVerificationTest : AbstractControllerTest() { } @Test + @CleanDbBeforeMethod fun loginWhenNotVerified() { val createUser = dbPopulator.createUserIfNotExists(initialUsername) emailVerificationService.createForUser(createUser) @@ -52,6 +54,7 @@ class EmailVerificationTest : AbstractControllerTest() { } @Test + @CleanDbBeforeMethod fun doesLoginWhenVerified() { dbPopulator.createUserIfNotExists(initialUsername) val result = doAuthentication(initialUsername, initialPassword) @@ -59,6 +62,7 @@ class EmailVerificationTest : AbstractControllerTest() { } @Test + @CleanDbBeforeMethod fun verifiesEmail() { val createUser = dbPopulator.createUserIfNotExists(initialUsername) val emailVerification = emailVerificationService.createForUser(createUser) @@ -69,6 +73,7 @@ class EmailVerificationTest : AbstractControllerTest() { } @Test + @CleanDbBeforeMethod @Transactional fun verifiesNewEmail() { val createUser = dbPopulator.createUserIfNotExists(initialUsername) @@ -80,6 +85,7 @@ class EmailVerificationTest : AbstractControllerTest() { } @Test + @CleanDbBeforeMethod fun doesNotVerifyWithWrongCode() { val createUser = dbPopulator.createUserIfNotExists(initialUsername) val emailVerification = emailVerificationService.createForUser(createUser) @@ -90,6 +96,7 @@ class EmailVerificationTest : AbstractControllerTest() { } @Test + @CleanDbBeforeMethod @Transactional fun doesNotVerifyWithWrongUser() { val createUser = dbPopulator.createUserIfNotExists(initialUsername) @@ -113,6 +120,7 @@ class EmailVerificationTest : AbstractControllerTest() { } @Test + @CleanDbBeforeMethod fun signUpSavesVerification() { perform() val user = userAccountService.findActive(signUpDto.email) ?: throw NotFoundException() @@ -126,6 +134,7 @@ class EmailVerificationTest : AbstractControllerTest() { } @Test + @CleanDbBeforeMethod fun `uses frontend url over provided callback url`() { signUpDto.callbackUrl = "dummyCallbackUrl" perform() @@ -142,6 +151,7 @@ class EmailVerificationTest : AbstractControllerTest() { } @Test + @CleanDbBeforeMethod fun `uses callback url when no frontendUrl provided`() { signUpDto.callbackUrl = "dummyCallbackUrl" tolgeeProperties.frontEndUrl = null diff --git a/backend/app/src/test/kotlin/io/tolgee/security/ProjectApiKeyAuthenticationTest.kt b/backend/app/src/test/kotlin/io/tolgee/security/ProjectApiKeyAuthenticationTest.kt index e98310c476..deaac11f5b 100644 --- a/backend/app/src/test/kotlin/io/tolgee/security/ProjectApiKeyAuthenticationTest.kt +++ b/backend/app/src/test/kotlin/io/tolgee/security/ProjectApiKeyAuthenticationTest.kt @@ -1,6 +1,7 @@ package io.tolgee.security import io.tolgee.API_KEY_HEADER_NAME +import io.tolgee.CleanDbBeforeMethod import io.tolgee.development.testDataBuilder.data.ApiKeysTestData import io.tolgee.fixtures.andAssertThatJson import io.tolgee.fixtures.andIsForbidden @@ -12,6 +13,7 @@ import io.tolgee.model.enums.Scope import io.tolgee.security.authentication.JwtService import io.tolgee.testing.AbstractControllerTest import io.tolgee.testing.assert +import org.junit.After import org.junit.jupiter.api.Test import org.springframework.beans.factory.annotation.Autowired import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc @@ -24,17 +26,19 @@ class ProjectApiKeyAuthenticationTest : AbstractControllerTest() { @Autowired private lateinit var jwtService: JwtService - @Test + @After fun after() { currentDateProvider.forcedDate = null } @Test + @CleanDbBeforeMethod fun accessWithApiKey_failure() { mvc.perform(MockMvcRequestBuilders.get("/v2/projects/translations")).andIsForbidden } @Test + @CleanDbBeforeMethod fun `access with legacy key works`() { val base = dbPopulator.createBase(generateUniqueString()) val apiKey = apiKeyService.create(base.userAccount, setOf(*Scope.values()), base.project) @@ -42,12 +46,14 @@ class ProjectApiKeyAuthenticationTest : AbstractControllerTest() { } @Test + @CleanDbBeforeMethod fun accessWithApiKey_failure_wrong_key() { mvc.perform(MockMvcRequestBuilders.get("/v2/projects/translations?ak=wrong_api_key")) .andExpect(MockMvcResultMatchers.status().isUnauthorized).andReturn() } @Test + @CleanDbBeforeMethod fun accessWithApiKey_failure_api_path() { val base = dbPopulator.createBase(generateUniqueString()) val apiKey = apiKeyService.create(base.userAccount, setOf(*Scope.entries.toTypedArray()), base.project) @@ -55,8 +61,10 @@ class ProjectApiKeyAuthenticationTest : AbstractControllerTest() { } @Test + @CleanDbBeforeMethod fun `works with tgpak_ prefix`() { val testData = ApiKeysTestData() + testData.root.makeUsernamesUnique = true testDataService.saveTestData(testData.root) currentDateProvider.forcedDate = currentDateProvider.date @@ -79,8 +87,10 @@ class ProjectApiKeyAuthenticationTest : AbstractControllerTest() { } @Test + @CleanDbBeforeMethod fun `expired key is unauthorized`() { val testData = ApiKeysTestData() + testData.root.makeUsernamesUnique = true testDataService.saveTestData(testData.root) performGet( @@ -92,8 +102,10 @@ class ProjectApiKeyAuthenticationTest : AbstractControllerTest() { } @Test + @CleanDbBeforeMethod fun `access to different project is forbidden`() { val testData = ApiKeysTestData() + testData.root.makeUsernamesUnique = true testDataService.saveTestData(testData.root) performGet( @@ -105,8 +117,10 @@ class ProjectApiKeyAuthenticationTest : AbstractControllerTest() { } @Test + @CleanDbBeforeMethod fun `access to authorized project is OK`() { val testData = ApiKeysTestData() + testData.root.makeUsernamesUnique = true testDataService.saveTestData(testData.root) performGet( @@ -118,8 +132,10 @@ class ProjectApiKeyAuthenticationTest : AbstractControllerTest() { } @Test + @CleanDbBeforeMethod fun `malformed API key is unauthorized`() { val testData = ApiKeysTestData() + testData.root.makeUsernamesUnique = true testDataService.saveTestData(testData.root) performGet( @@ -131,8 +147,10 @@ class ProjectApiKeyAuthenticationTest : AbstractControllerTest() { } @Test + @CleanDbBeforeMethod fun `permissions get correctly revoked when the user no longer have them`() { val testData = ApiKeysTestData() + testData.root.makeUsernamesUnique = true testDataService.saveTestData(testData.root) performPut( diff --git a/backend/app/src/test/kotlin/io/tolgee/service/ActivityVIewByRevisionsProviderTest.kt b/backend/app/src/test/kotlin/io/tolgee/service/ActivityVIewByRevisionsProviderTest.kt index 9e31a494fb..edb80b76b7 100644 --- a/backend/app/src/test/kotlin/io/tolgee/service/ActivityVIewByRevisionsProviderTest.kt +++ b/backend/app/src/test/kotlin/io/tolgee/service/ActivityVIewByRevisionsProviderTest.kt @@ -12,6 +12,7 @@ class ActivityVIewByRevisionsProviderTest : ProjectAuthControllerTest() { @Test fun `it returns limited number of modified entities`() { val testData = ImportTestData() + testData.root.makeUsernamesUnique = true testData.setAllResolved() testData.setAllOverride() testDataService.saveTestData(testData.root) diff --git a/backend/app/src/test/kotlin/io/tolgee/service/DbPopulatorTest.kt b/backend/app/src/test/kotlin/io/tolgee/service/DbPopulatorTest.kt deleted file mode 100644 index 934ab3e012..0000000000 --- a/backend/app/src/test/kotlin/io/tolgee/service/DbPopulatorTest.kt +++ /dev/null @@ -1,58 +0,0 @@ -package io.tolgee.service - -import io.tolgee.configuration.tolgee.TolgeeProperties -import io.tolgee.development.DbPopulatorReal -import io.tolgee.exceptions.NotFoundException -import io.tolgee.model.UserAccount -import io.tolgee.repository.ProjectRepository -import io.tolgee.repository.UserAccountRepository -import io.tolgee.service.security.ApiKeyService -import io.tolgee.testing.AbstractTransactionalTest -import org.assertj.core.api.Assertions -import org.junit.jupiter.api.BeforeEach -import org.junit.jupiter.api.Test -import org.springframework.beans.factory.annotation.Autowired -import org.springframework.boot.test.context.SpringBootTest -import org.springframework.transaction.annotation.Transactional - -@SpringBootTest -class DbPopulatorTest : AbstractTransactionalTest() { - @Autowired - lateinit var populator: DbPopulatorReal - - @Autowired - lateinit var userAccountRepository: UserAccountRepository - - @Autowired - lateinit var projectRepository: ProjectRepository - - @Autowired - lateinit var apiKeyService: ApiKeyService - - @Autowired - lateinit var tolgeeProperties: TolgeeProperties - - lateinit var userAccount: UserAccount - - @BeforeEach - fun setup() { - populator.autoPopulate() - userAccount = - userAccountRepository.findByUsername(tolgeeProperties.authentication.initialUsername) - .orElseThrow { NotFoundException() } - } - - @Test - @Transactional - fun createsUser() { - Assertions.assertThat(userAccount.name).isEqualTo(tolgeeProperties.authentication.initialUsername) - } - - @Test - @Transactional - fun createsApiKey() { - val key = apiKeyService.getAllByUser(userAccount.id).stream().findFirst() - Assertions.assertThat(key).isPresent - Assertions.assertThat(key.get().key).isEqualTo(null) - } -} diff --git a/backend/app/src/test/kotlin/io/tolgee/service/ExportServiceTest.kt b/backend/app/src/test/kotlin/io/tolgee/service/ExportServiceTest.kt index 7c1630d8db..02b9d8dcdf 100644 --- a/backend/app/src/test/kotlin/io/tolgee/service/ExportServiceTest.kt +++ b/backend/app/src/test/kotlin/io/tolgee/service/ExportServiceTest.kt @@ -19,6 +19,7 @@ class ExportServiceTest : AbstractSpringTest() { @Test fun `returns correct export data`() { val testData = TranslationsTestData() + testData.root.makeUsernamesUnique = true testDataService.saveTestData(testData.root) val exportParams = ExportParams(filterState = null) @@ -33,6 +34,7 @@ class ExportServiceTest : AbstractSpringTest() { @Test fun `returns empty translations correct export data`() { val testData = TranslationsTestData() + testData.root.makeUsernamesUnique = true testDataService.saveTestData(testData.root) val exportParams = ExportParams(filterState = listOf(TranslationState.UNTRANSLATED)) @@ -47,6 +49,7 @@ class ExportServiceTest : AbstractSpringTest() { @Test fun `selects languages for export data`() { val testData = TranslationsTestData() + testData.root.makeUsernamesUnique = true testDataService.saveTestData(testData.root) val exportParams = ExportParams(languages = setOf("de")) @@ -60,6 +63,7 @@ class ExportServiceTest : AbstractSpringTest() { @Test fun `filters keyIdIn for export data`() { val testData = TranslationsTestData() + testData.root.makeUsernamesUnique = true testDataService.saveTestData(testData.root) val exportParams = ExportParams(filterKeyId = listOf(testData.aKey.id)) @@ -74,6 +78,7 @@ class ExportServiceTest : AbstractSpringTest() { @Test fun `filters keyNotIdIn for export data`() { val testData = TranslationsTestData() + testData.root.makeUsernamesUnique = true testDataService.saveTestData(testData.root) val exportParams = ExportParams(filterKeyIdNot = listOf(testData.aKey.id)) @@ -87,6 +92,7 @@ class ExportServiceTest : AbstractSpringTest() { @Test fun `filters export data by tag`() { val testData = TranslationsTestData() + testData.root.makeUsernamesUnique = true testDataService.saveTestData(testData.root) val tag = "Cool tag" @@ -103,6 +109,7 @@ class ExportServiceTest : AbstractSpringTest() { @Test fun `filters export data by tag in`() { val testData = TranslationsTestData() + testData.root.makeUsernamesUnique = true testDataService.saveTestData(testData.root) var result = getResultFilteredByTagIn(testData, listOf("Cool tag", "Lame tag")) @@ -117,6 +124,7 @@ class ExportServiceTest : AbstractSpringTest() { @Test fun `filters export data by tag not in`() { val testData = TranslationsTestData() + testData.root.makeUsernamesUnique = true testDataService.saveTestData(testData.root) var result = getResultFilteredByTagNotIn(testData, listOf("Cool tag", "Lame tag")) @@ -150,6 +158,7 @@ class ExportServiceTest : AbstractSpringTest() { @Test fun `filters export data by key prefix`() { val testData = TranslationsTestData() + testData.root.makeUsernamesUnique = true testDataService.saveTestData(testData.root) val exportParams = ExportParams(filterKeyPrefix = "A") @@ -163,6 +172,7 @@ class ExportServiceTest : AbstractSpringTest() { @Test fun `filters export data by state`() { val testData = TranslationsTestData() + testData.root.makeUsernamesUnique = true testData.addTranslationsWithStates() testDataService.saveTestData(testData.root) diff --git a/backend/app/src/test/kotlin/io/tolgee/service/LanguageCachingTest.kt b/backend/app/src/test/kotlin/io/tolgee/service/LanguageCachingTest.kt index 6801026763..d321d48f27 100644 --- a/backend/app/src/test/kotlin/io/tolgee/service/LanguageCachingTest.kt +++ b/backend/app/src/test/kotlin/io/tolgee/service/LanguageCachingTest.kt @@ -39,6 +39,7 @@ class LanguageCachingTest : AbstractSpringTest() { @BeforeEach fun setup() { testData = BaseTestData() + testData.root.makeUsernamesUnique = true germanLanguage = testData.projectBuilder.addGerman().self testDataService.saveTestData(testData.root) clearCaches() diff --git a/backend/app/src/test/kotlin/io/tolgee/service/LanguageDeletePermissionTest.kt b/backend/app/src/test/kotlin/io/tolgee/service/LanguageDeletePermissionTest.kt index c5809bc9f1..ee0242fd44 100644 --- a/backend/app/src/test/kotlin/io/tolgee/service/LanguageDeletePermissionTest.kt +++ b/backend/app/src/test/kotlin/io/tolgee/service/LanguageDeletePermissionTest.kt @@ -12,6 +12,7 @@ import io.tolgee.model.enums.ProjectPermissionType import io.tolgee.model.enums.Scope import io.tolgee.testing.assert import io.tolgee.testing.assertions.Assertions.assertThat +import org.junit.jupiter.api.AfterEach import org.junit.jupiter.api.BeforeEach import org.junit.jupiter.api.Test import org.springframework.boot.test.context.SpringBootTest @@ -24,6 +25,7 @@ class LanguageDeletePermissionTest : AbstractSpringTest() { @BeforeEach fun beforeEach() { testData = LanguagePermissionsTestData() + testData.root.makeUsernamesUnique = true testData.project.baseLanguage = testData.germanLanguage testDataService.saveTestData(testData.root) entityManager.flush() @@ -32,6 +34,11 @@ class LanguageDeletePermissionTest : AbstractSpringTest() { languageService.findEntity(testData.englishLanguage.id).assert.isNull() } + @AfterEach + fun afterEach() { + testDataService.cleanApiKeys(testData.root) + } + @Test @Transactional fun `lowers permissions for translate langs`() { diff --git a/backend/app/src/test/kotlin/io/tolgee/service/LanguageServiceTest.kt b/backend/app/src/test/kotlin/io/tolgee/service/LanguageServiceTest.kt index e4220fe33b..050e1dcf34 100644 --- a/backend/app/src/test/kotlin/io/tolgee/service/LanguageServiceTest.kt +++ b/backend/app/src/test/kotlin/io/tolgee/service/LanguageServiceTest.kt @@ -40,6 +40,7 @@ class LanguageServiceTest : AbstractSpringTest() { @Transactional fun `remove of language removes existing language reference from import language`() { val testData = ImportTestData() + testData.root.makeUsernamesUnique = true testDataService.saveTestData(testData.root) var foundImportLanguage = importService.findLanguages(testData.import).first() @@ -55,6 +56,8 @@ class LanguageServiceTest : AbstractSpringTest() { @Transactional fun `deletes language with MT Service Config`() { val testData = MtSettingsTestData() + testData.root.makeUsernamesUnique = true + testData.root.makeUsernamesUnique = true testDataService.saveTestData(testData.root) entityManager.flush() languageService.hardDeleteLanguage(testData.germanLanguage.id) @@ -65,6 +68,7 @@ class LanguageServiceTest : AbstractSpringTest() { @Transactional fun `deletes language with Comments`() { val testData = TranslationCommentsTestData() + testData.root.makeUsernamesUnique = true testDataService.saveTestData(testData.root) entityManager.flush() languageService.hardDeleteLanguage(testData.englishLanguage.id) @@ -74,6 +78,7 @@ class LanguageServiceTest : AbstractSpringTest() { @Test fun `hard deletes language`() { val testData = TranslationsTestData() + testData.root.makeUsernamesUnique = true testDataService.saveTestData(testData.root) executeInNewTransaction { @@ -92,6 +97,7 @@ class LanguageServiceTest : AbstractSpringTest() { @Test fun `hard deletes language without n+1s`() { val testData = TranslationsTestData() + testData.root.makeUsernamesUnique = true testData.generateLotOfData(100) testDataService.saveTestData(testData.root) diff --git a/backend/app/src/test/kotlin/io/tolgee/service/OrganizationServiceTest.kt b/backend/app/src/test/kotlin/io/tolgee/service/OrganizationServiceTest.kt index 1ca558378b..429bcc6994 100644 --- a/backend/app/src/test/kotlin/io/tolgee/service/OrganizationServiceTest.kt +++ b/backend/app/src/test/kotlin/io/tolgee/service/OrganizationServiceTest.kt @@ -4,6 +4,7 @@ import io.tolgee.AbstractSpringTest import io.tolgee.development.testDataBuilder.data.OrganizationTestData import io.tolgee.model.MtCreditBucket import io.tolgee.model.Organization +import io.tolgee.testing.ContextRecreatingTest import io.tolgee.testing.assert import io.tolgee.testing.assertions.Assertions.assertThat import org.hibernate.SessionFactory @@ -20,6 +21,7 @@ import org.springframework.transaction.annotation.Transactional "spring.jpa.show-sql=true", ], ) +@ContextRecreatingTest class OrganizationServiceTest : AbstractSpringTest() { @Suppress("SpringJavaInjectionPointsAutowiringInspection") @Autowired @@ -28,6 +30,7 @@ class OrganizationServiceTest : AbstractSpringTest() { @Test fun `deletes organization with preferences`() { val testData = OrganizationTestData() + testData.root.makeUsernamesUnique = true testDataService.saveTestData(testData.root) organizationService.delete(testData.jirinaOrg) entityManager.flush() @@ -39,6 +42,7 @@ class OrganizationServiceTest : AbstractSpringTest() { @Test fun `fetches organization without mt bucket (tests the one-to-one lazy initialization)`() { val testData = OrganizationTestData() + testData.root.makeUsernamesUnique = true testDataService.saveTestData(testData.root) val organization = @@ -55,6 +59,7 @@ class OrganizationServiceTest : AbstractSpringTest() { @Test fun `mt bucket fetches only mt bucket (tests the one-to-one lazy initialization)`() { val testData = OrganizationTestData() + testData.root.makeUsernamesUnique = true testDataService.saveTestData(testData.root) executeInNewTransaction { diff --git a/backend/app/src/test/kotlin/io/tolgee/service/ProjectStatsServiceTest.kt b/backend/app/src/test/kotlin/io/tolgee/service/ProjectStatsServiceTest.kt index b0e7ae4a67..3ce0c99129 100644 --- a/backend/app/src/test/kotlin/io/tolgee/service/ProjectStatsServiceTest.kt +++ b/backend/app/src/test/kotlin/io/tolgee/service/ProjectStatsServiceTest.kt @@ -14,6 +14,7 @@ internal class ProjectStatsServiceTest : AbstractSpringTest() { @Test fun getProjectStats() { val testData = ProjectStatsTestData() + testData.root.makeUsernamesUnique = true testDataService.saveTestData(testData.root) val data = projectStatsService.getProjectStats(testData.projectBuilder.self.id) assertThat(data.id).isPositive diff --git a/backend/app/src/test/kotlin/io/tolgee/service/SoftDeleteTest.kt b/backend/app/src/test/kotlin/io/tolgee/service/SoftDeleteTest.kt index 6d5fb84cce..372d12ca6e 100644 --- a/backend/app/src/test/kotlin/io/tolgee/service/SoftDeleteTest.kt +++ b/backend/app/src/test/kotlin/io/tolgee/service/SoftDeleteTest.kt @@ -10,6 +10,8 @@ class SoftDeleteTest : AbstractSpringTest() { @Test fun `project is soft deleted`() { val testData = BaseTestData() + testData.root.makeUsernamesUnique = true + executeInNewTransaction { testDataService.saveTestData(testData.root) } @@ -27,6 +29,7 @@ class SoftDeleteTest : AbstractSpringTest() { @Test fun `queries don't return deleted projects`() { val testData = BaseTestData() + testData.root.makeUsernamesUnique = true executeInNewTransaction { testDataService.saveTestData(testData.root) } diff --git a/backend/app/src/test/kotlin/io/tolgee/service/TagServiceTest.kt b/backend/app/src/test/kotlin/io/tolgee/service/TagServiceTest.kt index 0bea73ab3c..b4afa7f312 100644 --- a/backend/app/src/test/kotlin/io/tolgee/service/TagServiceTest.kt +++ b/backend/app/src/test/kotlin/io/tolgee/service/TagServiceTest.kt @@ -29,7 +29,9 @@ class TagServiceTest : AbstractSpringTest() { fun `deletes many keys fast enough`() { val tagsTestData = TagsTestData() tagsTestData.generateVeryLotOfData() + tagsTestData.root.makeUsernamesUnique = true testDataService.saveTestData(tagsTestData.root) + entityManager.flush() entityManager.clear() val start = System.currentTimeMillis() diff --git a/backend/app/src/test/kotlin/io/tolgee/service/TelemetryServiceTest.kt b/backend/app/src/test/kotlin/io/tolgee/service/TelemetryServiceTest.kt index ba4b2dab34..c4d43cb621 100644 --- a/backend/app/src/test/kotlin/io/tolgee/service/TelemetryServiceTest.kt +++ b/backend/app/src/test/kotlin/io/tolgee/service/TelemetryServiceTest.kt @@ -7,6 +7,7 @@ package io.tolgee.service import com.fasterxml.jackson.module.kotlin.jacksonObjectMapper import com.fasterxml.jackson.module.kotlin.readValue import io.tolgee.AbstractSpringTest +import io.tolgee.CleanDbBeforeMethod import io.tolgee.configuration.tolgee.TelemetryProperties import io.tolgee.development.testDataBuilder.data.BaseTestData import io.tolgee.dtos.TelemetryReportRequest @@ -59,6 +60,7 @@ class TelemetryServiceTest : AbstractSpringTest() { } @Test + @CleanDbBeforeMethod fun `reports when enabled`() { telemetryProperties.enabled = true val testData = @@ -73,6 +75,7 @@ class TelemetryServiceTest : AbstractSpringTest() { } } } + testData.root.makeUsernamesUnique = true testDataService.saveTestData(testData.root) mockHttpRequest(restTemplate) { whenReq { diff --git a/backend/app/src/test/kotlin/io/tolgee/service/TranslationServiceTest.kt b/backend/app/src/test/kotlin/io/tolgee/service/TranslationServiceTest.kt index 03bb64f652..cfeec5e2af 100644 --- a/backend/app/src/test/kotlin/io/tolgee/service/TranslationServiceTest.kt +++ b/backend/app/src/test/kotlin/io/tolgee/service/TranslationServiceTest.kt @@ -49,6 +49,7 @@ class TranslationServiceTest : AbstractSpringTest() { val testData = executeInNewTransaction { val testData = TranslationsTestData() + testData.root.makeUsernamesUnique = true testDataService.saveTestData(testData.root) val translation = testData.aKeyGermanTranslation assertThat(translation.wordCount).isEqualTo(2) @@ -72,6 +73,7 @@ class TranslationServiceTest : AbstractSpringTest() { @Test fun `clears auto translation when set empty`() { val testData = TranslationsTestData() + testData.root.makeUsernamesUnique = true testDataService.saveTestData(testData.root) translationService.setForKey(testData.aKey, mapOf("de" to "")) val translation = translationService.get(testData.aKeyGermanTranslation.id) diff --git a/backend/app/src/test/kotlin/io/tolgee/service/dataImport/ImportServiceTest.kt b/backend/app/src/test/kotlin/io/tolgee/service/dataImport/ImportServiceTest.kt index 2fb91a9a93..946beb2d60 100644 --- a/backend/app/src/test/kotlin/io/tolgee/service/dataImport/ImportServiceTest.kt +++ b/backend/app/src/test/kotlin/io/tolgee/service/dataImport/ImportServiceTest.kt @@ -25,6 +25,7 @@ class ImportServiceTest : AbstractSpringTest() { @BeforeEach fun setup() { importTestData = ImportTestData() + importTestData.root.makeUsernamesUnique = true importTestData.addFrenchTranslations() } @@ -52,6 +53,7 @@ class ImportServiceTest : AbstractSpringTest() { val testData = executeInNewTransaction { val testData = ImportTestData() + testData.root.makeUsernamesUnique = true testDataService.saveTestData(testData.root) assertThat(importService.findLanguage(testData.importEnglish.id)).isNotNull testData @@ -71,6 +73,7 @@ class ImportServiceTest : AbstractSpringTest() { @Test fun `hard deletes import`() { val testData = ImportTestData() + testData.root.makeUsernamesUnique = true executeInNewTransaction { testData.addFileIssues() testData.addKeyMetadata() @@ -94,6 +97,7 @@ class ImportServiceTest : AbstractSpringTest() { @Test fun `soft deletes import`() { val testData = ImportTestData() + testData.root.makeUsernamesUnique = true executeInNewTransaction { testData.addFileIssues() testData.addKeyMetadata() @@ -119,6 +123,7 @@ class ImportServiceTest : AbstractSpringTest() { val testData = executeInNewTransaction { val testData = ImportNamespacesTestData() + testData.root.makeUsernamesUnique = true testDataService.saveTestData(testData.root) SecurityContextHolder.getContext().authentication = TolgeeAuthentication( diff --git a/backend/app/src/test/kotlin/io/tolgee/service/dataImport/StoredDataImporterTest.kt b/backend/app/src/test/kotlin/io/tolgee/service/dataImport/StoredDataImporterTest.kt index f65357dadb..78b17d768d 100644 --- a/backend/app/src/test/kotlin/io/tolgee/service/dataImport/StoredDataImporterTest.kt +++ b/backend/app/src/test/kotlin/io/tolgee/service/dataImport/StoredDataImporterTest.kt @@ -31,6 +31,7 @@ class StoredDataImporterTest : AbstractSpringTest() { @BeforeEach fun setup() { importTestData = ImportTestData() + importTestData.root.makeUsernamesUnique = true storedDataImporter = StoredDataImporter( applicationContext, diff --git a/backend/app/src/test/kotlin/io/tolgee/service/organizationRole/OrganizationRoleCachingTest.kt b/backend/app/src/test/kotlin/io/tolgee/service/organizationRole/OrganizationRoleCachingTest.kt index 05c5330fcd..177580411e 100644 --- a/backend/app/src/test/kotlin/io/tolgee/service/organizationRole/OrganizationRoleCachingTest.kt +++ b/backend/app/src/test/kotlin/io/tolgee/service/organizationRole/OrganizationRoleCachingTest.kt @@ -47,6 +47,8 @@ class OrganizationRoleCachingTest : AbstractSpringTest() { @BeforeEach fun setup() { testData = OrganizationTestData() + testData.root.makeUsernamesUnique = true + testDataService.saveTestData(testData.root) clearCaches() Mockito.reset(organizationRoleRepository) diff --git a/backend/app/src/test/kotlin/io/tolgee/service/project/ProjectServiceTest.kt b/backend/app/src/test/kotlin/io/tolgee/service/project/ProjectServiceTest.kt index 744dde8beb..ed439fce90 100644 --- a/backend/app/src/test/kotlin/io/tolgee/service/project/ProjectServiceTest.kt +++ b/backend/app/src/test/kotlin/io/tolgee/service/project/ProjectServiceTest.kt @@ -5,6 +5,7 @@ package io.tolgee.service.project import io.tolgee.AbstractSpringTest +import io.tolgee.CleanDbBeforeMethod import io.tolgee.batch.BatchJobService import io.tolgee.batch.data.BatchJobType import io.tolgee.batch.request.DeleteKeysRequest @@ -40,6 +41,7 @@ class ProjectServiceTest : AbstractSpringTest() { private lateinit var bigMetaService: BigMetaService @Test + @CleanDbBeforeMethod fun testFindAllPermitted() { executeInNewTransaction { val users = dbPopulator.createUsersAndOrganizations() @@ -50,6 +52,7 @@ class ProjectServiceTest : AbstractSpringTest() { } @Test + @CleanDbBeforeMethod fun testFindAllEmpty() { executeInNewTransaction { dbPopulator.createUsersAndOrganizations() // create some data @@ -60,6 +63,7 @@ class ProjectServiceTest : AbstractSpringTest() { } @Test + @CleanDbBeforeMethod fun testFindAllSingleProject() { executeInNewTransaction { dbPopulator.createUsersAndOrganizations() // create some data @@ -71,6 +75,7 @@ class ProjectServiceTest : AbstractSpringTest() { } @Test + @CleanDbBeforeMethod fun testFindMultiple() { executeInNewTransaction { val usersWithOrganizations = dbPopulator.createUsersAndOrganizations("helga") // create some data @@ -91,6 +96,7 @@ class ProjectServiceTest : AbstractSpringTest() { } @Test + @CleanDbBeforeMethod fun testFindMultiplePermissions() { executeInNewTransaction(platformTransactionManager) { val usersWithOrganizations = dbPopulator.createUsersAndOrganizations("agnes") // create some data @@ -130,6 +136,7 @@ class ProjectServiceTest : AbstractSpringTest() { } @Test + @CleanDbBeforeMethod fun testDeleteProjectWithTags() { executeInNewTransaction(platformTransactionManager) { val testData = TagsTestData() @@ -147,6 +154,7 @@ class ProjectServiceTest : AbstractSpringTest() { } @Test + @CleanDbBeforeMethod fun `deletes project with MT Settings`() { val testData = executeInNewTransaction { @@ -160,6 +168,7 @@ class ProjectServiceTest : AbstractSpringTest() { } @Test + @CleanDbBeforeMethod fun `deletes project with batch jobs`() { val testData = BatchJobsTestData() val keys = testData.addTranslationOperationData(10) @@ -192,6 +201,7 @@ class ProjectServiceTest : AbstractSpringTest() { } @Test + @CleanDbBeforeMethod fun `deletes project with big meta`() { val testData = BaseTestData() val key1 = testData.projectBuilder.addKey(keyName = "hello").self @@ -217,6 +227,7 @@ class ProjectServiceTest : AbstractSpringTest() { } @Test + @CleanDbBeforeMethod fun `deletes project with Content Delivery Configs`() { val testData = ContentDeliveryConfigTestData() testDataService.saveTestData(testData.root) @@ -226,6 +237,7 @@ class ProjectServiceTest : AbstractSpringTest() { } @Test + @CleanDbBeforeMethod fun `deletes project with webhooks`() { val testData = WebhooksTestData() testDataService.saveTestData(testData.root) diff --git a/backend/app/src/test/kotlin/io/tolgee/service/queryBuilders/TranslationViewDataProviderTest.kt b/backend/app/src/test/kotlin/io/tolgee/service/queryBuilders/TranslationViewDataProviderTest.kt index 130487abed..3cc49c469e 100644 --- a/backend/app/src/test/kotlin/io/tolgee/service/queryBuilders/TranslationViewDataProviderTest.kt +++ b/backend/app/src/test/kotlin/io/tolgee/service/queryBuilders/TranslationViewDataProviderTest.kt @@ -102,6 +102,7 @@ class TranslationViewDataProviderTest : AbstractSpringTest() { @Test fun `returns failed keys`() { val testData = TranslationsTestData() + testData.root.makeUsernamesUnique = true val job = testData.addFailedBatchJob() testDataService.saveTestData(testData.root) val result = @@ -124,6 +125,7 @@ class TranslationViewDataProviderTest : AbstractSpringTest() { private fun generateCommentStatesTestData(): TranslationsTestData { val testData = TranslationsTestData() + testData.root.makeUsernamesUnique = true testData.addCommentStatesData() testDataService.saveTestData(testData.root) return testData @@ -131,6 +133,7 @@ class TranslationViewDataProviderTest : AbstractSpringTest() { private fun prepareLotOfData(): TranslationsTestData { val testData = TranslationsTestData() + testData.root.makeUsernamesUnique = true testData.generateLotOfData() testDataService.saveTestData(testData.root) return testData diff --git a/backend/data/src/main/kotlin/io/tolgee/development/testDataBuilder/TestDataService.kt b/backend/data/src/main/kotlin/io/tolgee/development/testDataBuilder/TestDataService.kt index e28bc46a2f..3ada8c74f8 100644 --- a/backend/data/src/main/kotlin/io/tolgee/development/testDataBuilder/TestDataService.kt +++ b/backend/data/src/main/kotlin/io/tolgee/development/testDataBuilder/TestDataService.kt @@ -46,6 +46,7 @@ import org.springframework.security.crypto.password.PasswordEncoder import org.springframework.stereotype.Service import org.springframework.transaction.PlatformTransactionManager import org.springframework.transaction.annotation.Transactional +import java.util.concurrent.atomic.AtomicLong @Service class TestDataService( @@ -433,9 +434,15 @@ class TestDataService( private fun saveAllUsers(builder: TestDataBuilder) { val userAccountBuilders = builder.data.userAccounts userAccountService.saveAll( - userAccountBuilders.map { - it.self.password = passwordEncoder.encode(it.rawPassword) - it.self + userAccountBuilders.map { userBuilder -> + if (builder.makeUsernamesUnique) { + userBuilder.self.username = userBuilder.self.username.getUniqueUsername() + } + userBuilder.self.password = + passwordHashCache.computeIfAbsent(userBuilder.rawPassword) { + passwordEncoder.encode(userBuilder.rawPassword) + } + userBuilder.self }, ) saveUserAvatars(userAccountBuilders) @@ -500,4 +507,26 @@ class TestDataService( private fun clearEntityManager() { entityManager.clear() } + + fun cleanApiKeys(testData: TestDataBuilder) { + val ids = testData.data.projects.flatMap { project -> project.data.apiKeys.map { apiKey -> apiKey.self.id } } + executeInNewTransaction(transactionManager) { + entityManager.createNativeQuery("DELETE FROM postgres.public.api_key_scopes_enum WHERE api_key_id IN (:ids)") + .setParameter("ids", ids) + .executeUpdate() + entityManager.createNativeQuery("DELETE FROM api_key WHERE id IN (:ids)") + .setParameter("ids", ids) + .executeUpdate() + } + } + + companion object { + private val userUniqueCounter by lazy { AtomicLong() } + + private fun String.getUniqueUsername(): String { + return "${this}_${userUniqueCounter.incrementAndGet()}" + } + + private val passwordHashCache = mutableMapOf() + } } diff --git a/backend/data/src/main/kotlin/io/tolgee/development/testDataBuilder/builders/TestDataBuilder.kt b/backend/data/src/main/kotlin/io/tolgee/development/testDataBuilder/builders/TestDataBuilder.kt index f5f07b21ad..ae0dde264d 100644 --- a/backend/data/src/main/kotlin/io/tolgee/development/testDataBuilder/builders/TestDataBuilder.kt +++ b/backend/data/src/main/kotlin/io/tolgee/development/testDataBuilder/builders/TestDataBuilder.kt @@ -25,6 +25,12 @@ class TestDataBuilder(fn: (TestDataBuilder.() -> Unit) = {}) { val data = DATA() + /** + * If true, testDataSaver will make the usernames unique for each user account, + * so we don't need to clean the database each time + */ + var makeUsernamesUnique = false + fun addUserAccountWithoutOrganization(ft: UserAccount.() -> Unit): UserAccountBuilder { val builder = UserAccountBuilder(this) data.userAccounts.add(builder) diff --git a/backend/testing/src/main/kotlin/io/tolgee/BatchJobCleanerListener.kt b/backend/testing/src/main/kotlin/io/tolgee/BatchJobCleanerListener.kt new file mode 100644 index 0000000000..0522957e08 --- /dev/null +++ b/backend/testing/src/main/kotlin/io/tolgee/BatchJobCleanerListener.kt @@ -0,0 +1,13 @@ +package io.tolgee + +import io.tolgee.BatchJobTestUtil.pauseAndClearBatchJobs +import io.tolgee.BatchJobTestUtil.resumeBatchJobs +import org.springframework.test.context.TestContext +import org.springframework.test.context.TestExecutionListener + +class BatchJobCleanerListener : TestExecutionListener { + override fun beforeTestMethod(testContext: TestContext) { + pauseAndClearBatchJobs(testContext) + resumeBatchJobs(testContext) + } +} diff --git a/backend/testing/src/main/kotlin/io/tolgee/BatchJobTestUtil.kt b/backend/testing/src/main/kotlin/io/tolgee/BatchJobTestUtil.kt new file mode 100644 index 0000000000..3d4264c279 --- /dev/null +++ b/backend/testing/src/main/kotlin/io/tolgee/BatchJobTestUtil.kt @@ -0,0 +1,24 @@ +package io.tolgee + +import io.tolgee.batch.BatchJobChunkExecutionQueue +import io.tolgee.batch.BatchJobConcurrentLauncher +import org.springframework.test.context.TestContext + +object BatchJobTestUtil { + fun resumeBatchJobs(testContext: TestContext) { + getBatchJobConcurrentLauncher(testContext).pause = false + } + + fun pauseAndClearBatchJobs(testContext: TestContext) { + getBatchJobConcurrentLauncher(testContext).pause = true + getBatchJobExecutionQueue(testContext).clear() + } + + private fun getBatchJobExecutionQueue(testContext: TestContext): BatchJobChunkExecutionQueue { + return testContext.applicationContext.getBean(BatchJobChunkExecutionQueue::class.java) + } + + private fun getBatchJobConcurrentLauncher(testContext: TestContext): BatchJobConcurrentLauncher { + return testContext.applicationContext.getBean(BatchJobConcurrentLauncher::class.java) + } +} diff --git a/backend/testing/src/main/kotlin/io/tolgee/CleanDbBeforeMethod.kt b/backend/testing/src/main/kotlin/io/tolgee/CleanDbBeforeMethod.kt new file mode 100644 index 0000000000..3e6c249916 --- /dev/null +++ b/backend/testing/src/main/kotlin/io/tolgee/CleanDbBeforeMethod.kt @@ -0,0 +1,6 @@ +package io.tolgee + +/** + * Tells whether database should be clean before class instead of before method + */ +annotation class CleanDbBeforeMethod() diff --git a/backend/testing/src/main/kotlin/io/tolgee/CleanDbTestListener.kt b/backend/testing/src/main/kotlin/io/tolgee/CleanDbTestListener.kt index a0f4ddad36..dc31cbabe3 100644 --- a/backend/testing/src/main/kotlin/io/tolgee/CleanDbTestListener.kt +++ b/backend/testing/src/main/kotlin/io/tolgee/CleanDbTestListener.kt @@ -1,7 +1,6 @@ package io.tolgee -import io.tolgee.batch.BatchJobChunkExecutionQueue -import io.tolgee.batch.BatchJobConcurrentLauncher +import io.tolgee.api.EeSubscriptionProvider import kotlinx.coroutines.TimeoutCancellationException import org.postgresql.util.PSQLException import org.slf4j.LoggerFactory @@ -14,6 +13,8 @@ import java.util.concurrent.Future import java.util.concurrent.TimeUnit import java.util.concurrent.TimeoutException import javax.sql.DataSource +import kotlin.reflect.KMutableProperty1 +import kotlin.reflect.full.memberProperties import kotlin.system.measureTimeMillis class CleanDbTestListener : TestExecutionListener { @@ -26,28 +27,29 @@ class CleanDbTestListener : TestExecutionListener { ) override fun beforeTestMethod(testContext: TestContext) { - if (!shouldClenBeforeClass(testContext)) { + val provider = testContext.applicationContext.getBean(EeSubscriptionProvider::class.java) + + (provider::class.memberProperties.singleOrNull { it.name == "bypassSeatCountCheck" } as KMutableProperty1).setter.call( + provider, + true, + ) + + if (shouldCleanBeforeMethod(testContext)) { cleanWithRetries(testContext) } } private fun cleanWithRetries(testContext: TestContext) { logger.info("Cleaning DB") - - val appContext: ApplicationContext = testContext.applicationContext - val batchJobConcurrentLauncher = appContext.getBean(BatchJobConcurrentLauncher::class.java) - val batchJobQueue = appContext.getBean(BatchJobChunkExecutionQueue::class.java) - - batchJobConcurrentLauncher.pause = true - batchJobQueue.clear() - val time = measureTimeMillis { var i = 0 while (true) { try { withTimeout(3000) { + BatchJobTestUtil.pauseAndClearBatchJobs(testContext) doClean(testContext) + BatchJobTestUtil.resumeBatchJobs(testContext) } break } catch (e: Exception) { @@ -64,7 +66,6 @@ class CleanDbTestListener : TestExecutionListener { } } - batchJobConcurrentLauncher.pause = false logger.info("DB cleaned in ${time}ms") } @@ -75,31 +76,26 @@ class CleanDbTestListener : TestExecutionListener { val stmt = conn.createStatement() val databaseName: Any = "postgres" val ignoredTablesString = ignoredTables.joinToString(", ") { "'$it'" } - try { - val rs: ResultSet = - stmt.executeQuery( - String.format( - "SELECT table_schema, table_name" + - " FROM information_schema.tables" + - " WHERE table_catalog = '%s' and (table_schema in ('public', 'billing', 'ee'))" + - " and table_name not in ($ignoredTablesString)", - databaseName, - ), - ) - val tables: MutableList> = ArrayList() - while (rs.next()) { - tables.add(rs.getString(1) to rs.getString(2)) - } - stmt.execute( - java.lang.String.format( - "TRUNCATE TABLE %s", - tables.joinToString(",") { it.first + "." + it.second }, + val rs: ResultSet = + stmt.executeQuery( + String.format( + "SELECT table_schema, table_name" + + " FROM information_schema.tables" + + " WHERE table_catalog = '%s' and (table_schema in ('public', 'billing', 'ee'))" + + " and table_name not in ($ignoredTablesString)", + databaseName, ), ) - } catch (e: InterruptedException) { - stmt.cancel() - throw e + val tables: MutableList> = ArrayList() + while (rs.next()) { + tables.add(rs.getString(1) to rs.getString(2)) } + stmt.execute( + java.lang.String.format( + "TRUNCATE TABLE %s", + tables.joinToString(",") { it.first + "." + it.second }, + ), + ) } } @@ -113,14 +109,24 @@ class CleanDbTestListener : TestExecutionListener { @Throws(Exception::class) override fun beforeTestClass(testContext: TestContext) { - if (shouldClenBeforeClass(testContext)) { + // we need to clean the db before each tests start + if (!databaseCleanedOnInit) { + cleanWithRetries(testContext) + databaseCleanedOnInit = true + return + } + + if (shouldCleanBeforeClass(testContext)) { cleanWithRetries(testContext) } } - private fun shouldClenBeforeClass(testContext: TestContext) = + private fun shouldCleanBeforeClass(testContext: TestContext) = testContext.testClass.isAnnotationPresent(CleanDbBeforeClass::class.java) + private fun shouldCleanBeforeMethod(testContext: TestContext) = + testContext.testMethod.isAnnotationPresent(CleanDbBeforeMethod::class.java) + @Throws(Exception::class) override fun prepareTestInstance(testContext: TestContext) { } @@ -141,4 +147,8 @@ class CleanDbTestListener : TestExecutionListener { executor.shutdownNow() } + + companion object { + var databaseCleanedOnInit = false + } } diff --git a/backend/testing/src/main/kotlin/io/tolgee/testing/AbstractTransactionalTest.kt b/backend/testing/src/main/kotlin/io/tolgee/testing/AbstractTransactionalTest.kt index 4079edb18b..c358039252 100644 --- a/backend/testing/src/main/kotlin/io/tolgee/testing/AbstractTransactionalTest.kt +++ b/backend/testing/src/main/kotlin/io/tolgee/testing/AbstractTransactionalTest.kt @@ -1,5 +1,6 @@ package io.tolgee.testing +import io.tolgee.BatchJobCleanerListener import io.tolgee.CleanDbTestListener import jakarta.persistence.EntityManager import org.springframework.beans.factory.annotation.Autowired @@ -16,6 +17,7 @@ import org.springframework.test.context.transaction.TransactionalTestExecutionLi DependencyInjectionTestExecutionListener::class, CleanDbTestListener::class, DirtiesContextTestExecutionListener::class, + BatchJobCleanerListener::class, ], ) @ActiveProfiles(profiles = ["local"])