Skip to content

Commit a4e5c05

Browse files
authored
fix: Resolvable import timing out (tolgee#2484)
1 parent 68b319b commit a4e5c05

File tree

4 files changed

+51
-4
lines changed

4 files changed

+51
-4
lines changed

backend/app/src/test/kotlin/io/tolgee/api/v2/controllers/v2KeyController/KeyControllerResolvableImportTest.kt

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMock
1919
import org.springframework.boot.test.context.SpringBootTest
2020
import org.springframework.core.io.Resource
2121
import kotlin.properties.Delegates
22+
import kotlin.time.measureTime
2223

2324
@SpringBootTest
2425
@AutoConfigureMockMvc
@@ -147,6 +148,40 @@ class KeyControllerResolvableImportTest : ProjectAuthControllerTest("/v2/project
147148
}
148149
}
149150

151+
@Test
152+
@ProjectJWTAuthTestMethod
153+
fun `it imports a lot of data (and set outdated) in time`() {
154+
val lotOfKeys = testData.addLotOfKeys(5000)
155+
testDataService.saveTestData(testData.root)
156+
157+
val toImport =
158+
lotOfKeys.map {
159+
mapOf(
160+
"name" to it.name,
161+
"translations" to
162+
mapOf(
163+
"en" to
164+
mapOf(
165+
"text" to "new",
166+
"resolution" to "OVERRIDE",
167+
),
168+
),
169+
)
170+
}
171+
172+
val time =
173+
measureTime {
174+
performProjectAuthPost(
175+
"keys/import-resolvable",
176+
mapOf(
177+
"keys" to toImport,
178+
),
179+
).andIsOk
180+
}
181+
182+
time.inWholeSeconds.assert.isLessThan(10)
183+
}
184+
150185
@Test
151186
@ProjectJWTAuthTestMethod
152187
fun `it returns errors correctly`() {

backend/data/src/main/kotlin/io/tolgee/development/testDataBuilder/data/ResolvableImportTestData.kt

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import io.tolgee.model.Screenshot
55
import io.tolgee.model.UserAccount
66
import io.tolgee.model.enums.Scope
77
import io.tolgee.model.enums.TranslationState
8+
import io.tolgee.model.key.Key
89

910
class ResolvableImportTestData : BaseTestData() {
1011
lateinit var key1and2Screenshot: Screenshot
@@ -103,4 +104,12 @@ class ResolvableImportTestData : BaseTestData() {
103104
translateLanguages = mutableSetOf(englishLanguage)
104105
}
105106
}
107+
108+
fun addLotOfKeys(count: Int): List<Key> {
109+
return (1..count).map {
110+
projectBuilder.addKey(keyName = "key-lot-$it") {
111+
addTranslation("en", "existing translation")
112+
}.self
113+
}
114+
}
106115
}

backend/data/src/main/kotlin/io/tolgee/service/key/ResolvingKeyImporter.kt

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,11 @@ import io.tolgee.exceptions.NotFoundException
1111
import io.tolgee.exceptions.PermissionException
1212
import io.tolgee.formats.convertToIcuPlurals
1313
import io.tolgee.formats.convertToPluralIfAnyIsPlural
14-
import io.tolgee.model.*
14+
import io.tolgee.model.Language
15+
import io.tolgee.model.Project
16+
import io.tolgee.model.Project_
17+
import io.tolgee.model.Screenshot
18+
import io.tolgee.model.UploadedImage
1519
import io.tolgee.model.enums.Scope
1620
import io.tolgee.model.key.Key
1721
import io.tolgee.model.key.Key_
@@ -107,6 +111,7 @@ class ResolvingKeyImporter(
107111
}
108112

109113
translationService.onKeyIsPluralChanged(isPluralChangedForKeys, true, updatedTranslationIds)
114+
translationService.setOutdatedBatch(outdatedKeys)
110115

111116
return result
112117
}
@@ -146,8 +151,6 @@ class ResolvingKeyImporter(
146151
}
147152

148153
private fun List<TranslationToModify>.save() {
149-
translationService.setOutdatedBatch(outdatedKeys)
150-
151154
this.forEach {
152155
translationService.setTranslation(it.translation, it.text)
153156
updatedTranslationIds.add(it.translation.id)

e2e/cypress/e2e/security/login.cy.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@ context('Login', () => {
6464
checkAnonymousIdUnset();
6565
checkAnonymousUserIdentified();
6666
});
67-
it('login with oauth2', () => {
67+
it('login with oauth2', { retries: { runMode: 5 } }, () => {
6868
disableEmailVerification();
6969

7070
loginWithFakeOAuth2();

0 commit comments

Comments
 (0)