Skip to content

Commit 3996e82

Browse files
committed
tests, changelog, fixec
1 parent 3d218f7 commit 3996e82

6 files changed

Lines changed: 79 additions & 9 deletions

File tree

CHANGELOG.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,9 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/)
2525
- Option to add list of rows to table and list of cells to table row in their respective builders
2626
- Support for document object pdf tagging/accessibility metadata
2727
- Added Hierarchy task and its accompanying html visualisation
28+
- External display rule support along with metadata, subject, target aliasing,
29+
base template override, variable structure override and target folder
30+
override support
2831

2932
### Changed
3033

migration-examples/src/main/groovy/com/quadient/migration/example/example/Import.groovy

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,9 @@ def variableStructure = new VariableStructureBuilder("variableStructure")
8484
// Display displayHeaderRule to conditionally display the address.
8585
// Header is hidden if displayHeaderVariable is set to false
8686
def displayAddressRule = new DisplayRuleBuilder("displayAddressRule")
87+
.internal(false)
88+
.subject("External display rule")
89+
.metadata("key") { it.string("value") }
8790
.group {
8891
it.operator(GroupOp.Or)
8992
it.comparison { it.variable(nameVariable.id).notEquals().value("") }
@@ -92,10 +95,14 @@ def displayAddressRule = new DisplayRuleBuilder("displayAddressRule")
9295
it.comparison { it.variable(stateVariable.id).notEquals().value("") }
9396
}.build()
9497

95-
def displayHeaderRule = new DisplayRuleBuilder("displayHeaderRule")
98+
def dummyDisplayHeaderRule = new DisplayRuleBuilder("dummyDisplayHeaderRule")
9699
.comparison { it.value(true).equals().variable(displayHeaderVariable.id) }
97100
.build()
98101

102+
def displayHeaderRule = new DisplayRuleBuilder("displayHeaderRule")
103+
.targetId(dummyDisplayHeaderRule.id)
104+
.build()
105+
99106
def displayParagraphRule = new DisplayRuleBuilder("displayParagraphRule")
100107
.comparison { it.value(true).equals().variable(displayParagraphVariable.id) }
101108
.build()
@@ -494,7 +501,7 @@ for (item in [headingStyle, normalStyle]) {
494501
for (item in [displayHeaderVariable, displayParagraphVariable, displayLastSentenceVariable, nameVariable, addressVariable, cityVariable, stateVariable]) {
495502
migration.variableRepository.upsert(item)
496503
}
497-
for (item in [displayAddressRule, displayHeaderRule, displayParagraphRule, displayLastSentenceRule, displayRuleStateCzechia, displayRuleStateFrance]) {
504+
for (item in [displayAddressRule, dummyDisplayHeaderRule, displayHeaderRule, displayParagraphRule, displayLastSentenceRule, displayRuleStateCzechia, displayRuleStateFrance]) {
498505
migration.displayRuleRepository.upsert(item)
499506
}
500507
for (item in [paragraphStyle, headingParaStyle]) {

migration-library/src/main/kotlin/com/quadient/migration/api/dto/migrationmodel/DisplayRule.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,6 @@ data class DisplayRule @JvmOverloads constructor(
2121
val variableStructureRef: VariableStructureRef? = null,
2222
) : MigrationObject, RefValidatable {
2323
override fun collectRefs(): List<Ref> {
24-
return definition?.collectRefs() ?: emptyList()
24+
return (definition?.collectRefs() ?: emptyList()) + listOfNotNull(variableStructureRef)
2525
}
2626
}

migration-library/src/main/kotlin/com/quadient/migration/service/deploy/InteractiveDeployClient.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -143,7 +143,8 @@ class InteractiveDeployClient(
143143
}
144144
.distinctBy { it.id }
145145

146-
for (rule in rules) {
146+
for (r in rules) {
147+
val rule = r.resolveTarget(displayRuleRepository)
147148
val targetPath = documentObjectBuilder.getDisplayRulePath(rule).toString()
148149

149150
if (!shouldDeployObject(rule.id, ResourceType.DisplayRule, targetPath, deploymentResult)) {

migration-library/src/test/kotlin/com/quadient/migration/persistence/MappingRepositoryTest.kt

Lines changed: 47 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,17 +4,27 @@ import com.quadient.migration.Postgres
44
import com.quadient.migration.api.dto.migrationmodel.CustomFieldMap
55
import com.quadient.migration.api.dto.migrationmodel.MappingItem
66
import com.quadient.migration.api.dto.migrationmodel.VariableStructure
7-
import com.quadient.migration.api.repository.*
7+
import com.quadient.migration.api.dto.migrationmodel.VariableStructureRef
8+
import com.quadient.migration.api.repository.AttachmentRepository
9+
import com.quadient.migration.api.repository.DisplayRuleRepository
10+
import com.quadient.migration.api.repository.DocumentObjectRepository
11+
import com.quadient.migration.api.repository.ImageRepository
12+
import com.quadient.migration.api.repository.MappingRepository
13+
import com.quadient.migration.api.repository.ParagraphStyleRepository
14+
import com.quadient.migration.api.repository.TextStyleRepository
15+
import com.quadient.migration.api.repository.VariableRepository
16+
import com.quadient.migration.api.repository.VariableStructureRepository
817
import com.quadient.migration.shared.VariablePathData
918
import com.quadient.migration.tools.aProjectConfig
1019
import com.quadient.migration.tools.aVariable
20+
import com.quadient.migration.tools.model.aDisplayRule
1121
import io.mockk.every
1222
import io.mockk.just
1323
import io.mockk.mockk
1424
import io.mockk.runs
1525
import io.mockk.verify
16-
import kotlin.time.Clock
1726
import org.junit.jupiter.api.Test
27+
import kotlin.time.Clock
1828

1929
@Postgres
2030
class MappingRepositoryTest {
@@ -44,7 +54,7 @@ class MappingRepositoryTest {
4454
fun `apply variable mapping`() {
4555
every { variableRepository.find("varId") } returns aVariable(id = "varId", name = "Variable Name")
4656
every { variableStructureRepository.find("varStructId") } returns VariableStructure(
47-
id = "varStructId",
57+
id = "varStructId",
4858
name = "Variable Structure Name",
4959
originLocations = emptyList(),
5060
customFields = CustomFieldMap(mutableMapOf()),
@@ -87,8 +97,8 @@ class MappingRepositoryTest {
8797
verify {
8898
variableStructureRepository.upsert(
8999
match {
90-
it.id == "varStructId" &&
91-
it.name == "new name" &&
100+
it.id == "varStructId" &&
101+
it.name == "new name" &&
92102
it.structure == mapOf(
93103
"varId" to VariablePathData("somePath"),
94104
"anotherVarId" to VariablePathData("anotherPath")
@@ -97,4 +107,36 @@ class MappingRepositoryTest {
97107
)
98108
}
99109
}
110+
111+
@Test
112+
fun `apply display rule mapping`() {
113+
every { displayRuleRepository.find("ruleId") } returns aDisplayRule(id = "ruleId", name = "Old Rule")
114+
every { displayRuleRepository.upsert(any()) } just runs
115+
repo.upsert(
116+
"ruleId", MappingItem.DisplayRule(
117+
name = "new name",
118+
targetFolder = "/some/folder",
119+
targetId = "target-123",
120+
baseTemplate = "template-base",
121+
variableStructureRef = "ref",
122+
internal = true,
123+
)
124+
)
125+
126+
repo.applyDisplayRuleMapping("ruleId")
127+
128+
verify {
129+
displayRuleRepository.upsert(
130+
match {
131+
it.id == "ruleId" &&
132+
it.name == "new name" &&
133+
it.targetFolder == "/some/folder" &&
134+
it.targetId == "target-123" &&
135+
it.baseTemplate == "template-base" &&
136+
it.internal &&
137+
it.variableStructureRef == VariableStructureRef("ref")
138+
}
139+
)
140+
}
141+
}
100142
}

migration-library/src/test/kotlin/com/quadient/migration/service/deploy/InteractiveDeployClientTest.kt

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -752,11 +752,22 @@ class InteractiveDeployClientTest {
752752
.internal(false)
753753
.build()
754754
mockDisplayRule(failedUpload)
755+
val withTargetId = DisplayRuleBuilder("withTargetId")
756+
.targetId("targetRule")
757+
.internal(false)
758+
.build()
759+
mockDisplayRule(withTargetId)
760+
val targetRule = DisplayRuleBuilder("targetRule")
761+
.comparison { value("a").equals().value("b") }
762+
.internal(false)
763+
.build()
764+
mockDisplayRule(targetRule)
755765
val block = mockObj(aDocObj("B_1", DocumentObjectType.Block, listOf(
756766
aParagraph(displayRuleRef = DisplayRuleRef(ruleWithFunction.id)),
757767
aParagraph(displayRuleRef = DisplayRuleRef(ruleWithInvalidMetadata.id)),
758768
aParagraph(displayRuleRef = DisplayRuleRef(validRule.id)),
759769
aParagraph(displayRuleRef = DisplayRuleRef(failedUpload.id)),
770+
aParagraph(displayRuleRef = DisplayRuleRef(withTargetId.id)),
760771
)))
761772
val template = mockObj(aDocObj("T_1", DocumentObjectType.Template, listOf(aDocumentObjectRef(block.id))))
762773
mockBasicSuccessfulIpsOperations()
@@ -768,6 +779,7 @@ class InteractiveDeployClientTest {
768779
every { documentObjectRepository.list(any<Op<Boolean>>()) } returns listOf(template, block)
769780
every { ipsService.tryUpload("icm://Interactive/tenant/Rules/defaultFolder/valid.jrd", any()) } returns OperationResult.Success
770781
every { ipsService.tryUpload("icm://Interactive/tenant/Rules/defaultFolder/failed.jrd", any()) } returns OperationResult.Failure("oops")
782+
every { ipsService.tryUpload("icm://Interactive/tenant/Rules/defaultFolder/targetRule.jrd", any()) } returns OperationResult.Success
771783

772784
val result = subject.deployDocumentObjects()
773785

@@ -781,6 +793,7 @@ class InteractiveDeployClientTest {
781793
))
782794
result.deployed.shouldBeEqualTo(listOf(
783795
DeploymentInfo("valid", ResourceType.DisplayRule, "icm://Interactive/tenant/Rules/defaultFolder/valid.jrd"),
796+
DeploymentInfo("targetRule", ResourceType.DisplayRule, "icm://Interactive/tenant/Rules/defaultFolder/targetRule.jrd"),
784797
DeploymentInfo("B_1", ResourceType.DocumentObject, "icm://B_1name"),
785798
DeploymentInfo("T_1", ResourceType.DocumentObject, "icm://T_1name")
786799
))
@@ -845,6 +858,10 @@ class InteractiveDeployClientTest {
845858
null
846859
}
847860

861+
if (success) {
862+
every { displayRuleRepository.findOrFail(displayRule.id) } returns displayRule
863+
}
864+
848865
return displayRule
849866
}
850867

0 commit comments

Comments
 (0)