Skip to content

Commit 28f666d

Browse files
committed
feat: create a default branch on the first load of branches
1 parent 64e2986 commit 28f666d

File tree

5 files changed

+97
-23
lines changed

5 files changed

+97
-23
lines changed
Lines changed: 33 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package io.tolgee.development.testDataBuilder.data
22

33
import io.tolgee.component.CurrentDateProvider
4+
import io.tolgee.model.Project
45
import io.tolgee.model.branching.Branch
56
import io.tolgee.util.addDays
67

@@ -9,34 +10,44 @@ class BranchTestData(
910
) : BaseTestData("branch", "Project with branches") {
1011
lateinit var mainBranch: Branch
1112
lateinit var featureBranch: Branch
13+
var secondProject: Project
1214
init {
13-
projectBuilder.apply {
14-
addBranch {
15-
name = "main"
16-
project = projectBuilder.self
17-
isProtected = true
18-
isDefault = true
19-
createdAt = currentDateProvider.date
20-
}.build {
21-
mainBranch = self
15+
this.root.apply {
16+
projectBuilder.apply {
2217
addBranch {
23-
name = "feature-branch"
18+
name = "main"
2419
project = projectBuilder.self
25-
isProtected = false
26-
isDefault = false
27-
originBranch = this
20+
isProtected = true
21+
isDefault = true
22+
createdAt = currentDateProvider.date
2823
}.build {
29-
featureBranch = self
30-
}
31-
addBranch {
32-
name = "merged-and-deleted-branch"
33-
project = projectBuilder.self
34-
isProtected = false
35-
isDefault = false
36-
archivedAt = currentDateProvider.date.addDays(-1)
37-
originBranch = this
24+
mainBranch = self
25+
addBranch {
26+
name = "feature-branch"
27+
project = projectBuilder.self
28+
isProtected = false
29+
isDefault = false
30+
originBranch = this
31+
}.build {
32+
featureBranch = self
33+
}
34+
addBranch {
35+
name = "merged-and-deleted-branch"
36+
project = projectBuilder.self
37+
isProtected = false
38+
isDefault = false
39+
archivedAt = currentDateProvider.date.addDays(-1)
40+
originBranch = this
41+
}
3842
}
3943
}
44+
secondProject = addProject {
45+
name = "empty-project"
46+
}.build {
47+
addKey {
48+
name = "test"
49+
}
50+
}.self
4051
}
4152
}
4253
}

ee/backend/app/src/main/kotlin/io/tolgee/ee/service/branching/BranchServiceImpl.kt

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ import jakarta.transaction.Transactional
1515
import org.springframework.context.ApplicationContext
1616
import org.springframework.context.annotation.Primary
1717
import org.springframework.data.domain.Page
18+
import org.springframework.data.domain.PageImpl
1819
import org.springframework.data.domain.Pageable
1920
import org.springframework.stereotype.Service
2021

@@ -26,9 +27,15 @@ class BranchServiceImpl(
2627
private val entityManager: EntityManager,
2728
private val branchCopyService: BranchCopyService,
2829
private val applicationContext: ApplicationContext,
30+
private val defaultBranchCreator: DefaultBranchCreator,
2931
) : BranchService {
3032
override fun getAllBranches(projectId: Long, page: Pageable, search: String?): Page<Branch> {
31-
return branchRepository.getAllProjectBranches(projectId, page, search)
33+
val branches = branchRepository.getAllProjectBranches(projectId, page, search)
34+
if (branches.isEmpty) {
35+
val defaultBranch = defaultBranchCreator.create(projectId)
36+
return PageImpl(listOf(defaultBranch))
37+
}
38+
return branches
3239
}
3340

3441
override fun getBranch(projectId: Long, branchId: Long): Branch {
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
package io.tolgee.ee.service.branching
2+
3+
import io.tolgee.model.Project
4+
import io.tolgee.model.branching.Branch
5+
import io.tolgee.service.key.KeyService
6+
import io.tolgee.service.project.ProjectService
7+
import jakarta.transaction.Transactional
8+
import org.springframework.stereotype.Service
9+
10+
@Service
11+
class DefaultBranchCreator(
12+
private val keyService: KeyService,
13+
private val projectService: ProjectService,
14+
) {
15+
16+
@Transactional
17+
fun create(projectId: Long): Branch {
18+
val project = projectService.get(projectId)
19+
return create(project)
20+
}
21+
22+
@Transactional
23+
fun create(project: Project): Branch {
24+
val branch = Branch.createMainBranch(project)
25+
keyService.getAll(project.id).forEach { it ->
26+
it.branch = branch
27+
}
28+
return branch
29+
}
30+
}

ee/backend/tests/src/test/kotlin/io/tolgee/ee/api/v2/controllers/branching/BranchControllerTest.kt

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,28 @@ class BranchControllerTest : ProjectAuthControllerTest("/v2/projects/") {
5252
}
5353
}
5454

55+
@Test
56+
@ProjectJWTAuthTestMethod
57+
fun `creates default branch on project without branches`() {
58+
testData.projectBuilder.self = testData.secondProject
59+
performProjectAuthGet("branches").andAssertThatJson {
60+
node("page.totalElements").isNumber.isEqualTo(BigDecimal(1))
61+
node("_embedded.branches") {
62+
node("[0].name").isEqualTo("main")
63+
node("[0].active").isEqualTo(true)
64+
node("[0].isDefault").isEqualTo(true)
65+
}
66+
}
67+
keyService.getAll(testData.secondProject.id).first().branch!!.id.let { it ->
68+
it.assert.isNotNull()
69+
branchRepository.findByIdOrNull(it)!!.let { branch ->
70+
branch.name.assert.isEqualTo(Branch.DEFAULT_BRANCH_NAME)
71+
branch.isDefault.assert.isTrue
72+
branch.isProtected.assert.isTrue
73+
}
74+
}
75+
}
76+
5577
@Test()
5678
@ProjectJWTAuthTestMethod
5779
fun `creates branch`() {

ee/backend/tests/src/test/kotlin/io/tolgee/ee/api/v2/controllers/branching/BranchCopyIntegrationTest.kt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import io.tolgee.fixtures.andIsOk
88
import io.tolgee.fixtures.waitForNotThrowing
99
import io.tolgee.model.key.Key
1010
import io.tolgee.repository.KeyMetaRepository
11+
import io.tolgee.repository.KeyRepository
1112
import io.tolgee.repository.KeyScreenshotReferenceRepository
1213
import io.tolgee.testing.annotations.ProjectJWTAuthTestMethod
1314
import io.tolgee.testing.assert
@@ -37,6 +38,9 @@ class BranchCopyIntegrationTest : ProjectAuthControllerTest("/v2/projects/") {
3738
@Autowired
3839
lateinit var keyScreenshotReferenceRepository: KeyScreenshotReferenceRepository
3940

41+
@Autowired
42+
lateinit var keyRepository: KeyRepository
43+
4044
@BeforeEach
4145
fun setup() {
4246
testData = BranchTranslationsTestData()

0 commit comments

Comments
 (0)