Skip to content

Commit 742ff13

Browse files
committed
feat: integrate tags and branches into project stats handling
1 parent 372ae3f commit 742ff13

File tree

6 files changed

+80
-7
lines changed

6 files changed

+80
-7
lines changed

backend/app/src/test/kotlin/io/tolgee/service/ProjectStatsServiceTest.kt

Lines changed: 19 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,21 +4,37 @@ import io.tolgee.AbstractSpringTest
44
import io.tolgee.development.testDataBuilder.data.ProjectStatsTestData
55
import io.tolgee.service.project.ProjectStatsService
66
import io.tolgee.testing.assertions.Assertions.assertThat
7+
import org.junit.jupiter.api.BeforeEach
78
import org.junit.jupiter.api.Test
89
import org.springframework.beans.factory.annotation.Autowired
910

1011
internal class ProjectStatsServiceTest : AbstractSpringTest() {
1112
@Autowired
1213
lateinit var projectStatsService: ProjectStatsService
1314

14-
@Test
15-
fun getProjectStats() {
16-
val testData = ProjectStatsTestData()
15+
lateinit var testData: ProjectStatsTestData
16+
17+
@BeforeEach
18+
fun setup() {
19+
testData = ProjectStatsTestData()
1720
testDataService.saveTestData(testData.root)
21+
}
22+
23+
@Test
24+
fun `test project stats`() {
1825
val data = projectStatsService.getProjectStats(testData.projectBuilder.self.id)
1926
assertThat(data.id).isPositive
2027
assertThat(data.memberCount).isEqualTo(3)
2128
assertThat(data.keyCount).isEqualTo(5)
2229
assertThat(data.tagCount).isEqualTo(3)
2330
}
31+
32+
@Test
33+
fun `test project stats on feature branch`() {
34+
val data = projectStatsService.getProjectStats(testData.projectBuilder.self.id, testData.featureBranch.id)
35+
assertThat(data.id).isPositive
36+
assertThat(data.memberCount).isEqualTo(3)
37+
assertThat(data.keyCount).isEqualTo(1)
38+
assertThat(data.tagCount).isEqualTo(1)
39+
}
2440
}

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

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -329,6 +329,7 @@ class TestDataService(
329329
savePrompts(builder)
330330
saveAiPlaygroundResults(builder)
331331
saveLabels(builder)
332+
saveTags(builder)
332333
saveSuggestions(builder)
333334
}
334335

@@ -621,6 +622,12 @@ class TestDataService(
621622
}
622623
}
623624

625+
private fun saveTags(builder: ProjectBuilder) {
626+
builder.data.tags.forEach {
627+
entityManager.persist(it.self)
628+
}
629+
}
630+
624631
private fun saveBranches(builder: ProjectBuilder) {
625632
builder.data.branches.filter { it.self.id == 0L }.forEach {
626633
entityManager.persist(it.self)

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

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ import io.tolgee.model.dataImport.ImportSettings
2323
import io.tolgee.model.enums.ProjectPermissionType
2424
import io.tolgee.model.key.Key
2525
import io.tolgee.model.key.Namespace
26+
import io.tolgee.model.key.Tag
2627
import io.tolgee.model.key.screenshotReference.KeyScreenshotReference
2728
import io.tolgee.model.keyBigMeta.KeysDistance
2829
import io.tolgee.model.mtServiceConfig.MtServiceConfig
@@ -82,6 +83,7 @@ class ProjectBuilder(
8283
val branches = mutableListOf<BranchBuilder>()
8384
val branchMerges = mutableListOf<BranchMergeBuilder>()
8485
val branchMergeChanges = mutableListOf<BranchMergeChangeBuilder>()
86+
val tags = mutableListOf<TagBuilder>()
8587
}
8688

8789
var data = DATA()
@@ -100,6 +102,8 @@ class ProjectBuilder(
100102

101103
fun addTaskKey(ft: FT<TaskKey>) = addOperation(data.taskKeys, ft)
102104

105+
fun addTag(ft: FT<Tag>) = addOperation(data.tags, ft)
106+
103107
fun addLabel(ft: FT<Label>) = addOperation(data.labels, ft)
104108

105109
fun addBranch(ft: FT<Branch>) = addOperation(data.branches, ft)
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
package io.tolgee.development.testDataBuilder.builders
2+
3+
import io.tolgee.development.testDataBuilder.EntityDataBuilder
4+
import io.tolgee.model.key.Tag
5+
6+
class TagBuilder(
7+
val projectBuilder: ProjectBuilder,
8+
) : EntityDataBuilder<Tag, TagBuilder> {
9+
override var self: Tag =
10+
Tag().apply {
11+
this.project = projectBuilder.self
12+
}
13+
}

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

Lines changed: 27 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package io.tolgee.development.testDataBuilder.data
22

33
import io.tolgee.development.testDataBuilder.builders.ProjectBuilder
44
import io.tolgee.model.Language
5+
import io.tolgee.model.branching.Branch
56
import io.tolgee.model.enums.OrganizationRoleType
67
import io.tolgee.model.enums.ProjectPermissionType
78
import io.tolgee.model.enums.TranslationState
@@ -10,12 +11,15 @@ import io.tolgee.model.key.Tag
1011
class ProjectStatsTestData : BaseTestData() {
1112
lateinit var germanLanguage: Language
1213
lateinit var czechLanguage: Language
14+
lateinit var tag: Tag
15+
lateinit var featureBranch: Branch
1316

1417
init {
1518
projectBuilder.apply {
1619

1720
addLanguages()
1821
addKeys()
22+
addBranch()
1923

2024
val organizationOwner =
2125
root
@@ -61,7 +65,7 @@ class ProjectStatsTestData : BaseTestData() {
6165
}
6266

6367
private fun ProjectBuilder.addKeys() {
64-
val tag1 =
68+
tag =
6569
Tag().apply {
6670
name = "Tag1"
6771
project = this@addKeys.self
@@ -79,6 +83,10 @@ class ProjectStatsTestData : BaseTestData() {
7983
project = this@addKeys.self
8084
}
8185

86+
addTag {
87+
name = "Tag4"
88+
}
89+
8290
addKey {
8391
name = "Super key"
8492
}.build {
@@ -98,7 +106,7 @@ class ProjectStatsTestData : BaseTestData() {
98106
state = TranslationState.TRANSLATED
99107
}
100108
addMeta {
101-
tags.add(tag1)
109+
tags.add(tag)
102110
tags.add(tag3)
103111
}
104112
}
@@ -111,7 +119,7 @@ class ProjectStatsTestData : BaseTestData() {
111119
text = "This text has 5 words"
112120
}
113121
addMeta {
114-
tags.add(tag1)
122+
tags.add(tag)
115123
tags.add(tag2)
116124
}
117125
}
@@ -177,4 +185,20 @@ class ProjectStatsTestData : BaseTestData() {
177185
}
178186
}
179187
}
188+
189+
private fun ProjectBuilder.addBranch() {
190+
featureBranch =
191+
addBranch {
192+
name = "feature"
193+
}.build {
194+
addKey {
195+
name = "feature key"
196+
branch = self
197+
}.build {
198+
addMeta {
199+
tags.add(tag)
200+
}
201+
}
202+
}.self
203+
}
180204
}

backend/data/src/main/kotlin/io/tolgee/service/queryBuilders/ProjectStatsProvider.kt

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import io.tolgee.model.branching.Branch
1111
import io.tolgee.model.branching.Branch_
1212
import io.tolgee.model.enums.TaskState
1313
import io.tolgee.model.key.Key
14+
import io.tolgee.model.key.KeyMeta_
1415
import io.tolgee.model.key.Key_
1516
import io.tolgee.model.key.Tag
1617
import io.tolgee.model.key.Tag_
@@ -68,7 +69,15 @@ open class ProjectStatsProvider(
6869
private fun getTagSelection(): Selection<Long> {
6970
val sub = query.subquery(Long::class.java)
7071
val tag = sub.from(Tag::class.java)
71-
sub.where(tag.get(Tag_.project) equal project)
72+
val keyMeta = tag.join(Tag_.keyMetas, JoinType.INNER)
73+
val key = keyMeta.join(KeyMeta_.key, JoinType.INNER)
74+
val branch = key.join(Key_.branch, JoinType.LEFT)
75+
sub.where(
76+
cb.and(
77+
tag.get(Tag_.project) equal project,
78+
branchPredicate(branch, key.get(Key_.branch)),
79+
),
80+
)
7281
return sub.select(cb.coalesce(cb.countDistinct(tag.get(Tag_.id)), 0))
7382
}
7483

0 commit comments

Comments
 (0)