-
-
Notifications
You must be signed in to change notification settings - Fork 758
/
BaselineResultMappingSpec.kt
141 lines (116 loc) · 4.49 KB
/
BaselineResultMappingSpec.kt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
package io.gitlab.arturbosch.detekt.core.baseline
import io.github.detekt.test.utils.NullPrintStream
import io.github.detekt.test.utils.createTempDirectoryForTest
import io.github.detekt.test.utils.resourceAsPath
import io.gitlab.arturbosch.detekt.api.Config
import io.gitlab.arturbosch.detekt.api.Finding
import io.gitlab.arturbosch.detekt.api.SetupContext
import io.gitlab.arturbosch.detekt.api.UnstableApi
import io.gitlab.arturbosch.detekt.core.exists
import io.mockk.every
import io.mockk.mockk
import org.assertj.core.api.Assertions.assertThat
import org.junit.jupiter.api.AfterEach
import org.junit.jupiter.api.BeforeEach
import org.junit.jupiter.api.Test
import java.io.PrintStream
import java.net.URI
import java.nio.file.Files
import java.nio.file.Path
@OptIn(UnstableApi::class)
class BaselineResultMappingSpec {
private val dir = createTempDirectoryForTest("baseline_format")
private val baselineFile = dir.resolve("baseline.xml")
private val existingBaselineFile = resourceAsPath("/baseline_feature/valid-baseline.xml")
private lateinit var findings: Map<String, List<Finding>>
private lateinit var finding: Finding
@BeforeEach
fun setupMocks() {
finding = mockk()
every { finding.id }.returns("SomeIssueId")
every { finding.signature }.returns("SomeSignature")
findings = mapOf("RuleSet" to listOf(finding))
}
@AfterEach
fun tearDown() {
Files.deleteIfExists(baselineFile)
}
@Test
fun `should not create a new baseline file when no findings occurred`() {
val mapping = resultMapping(
baselineFile = baselineFile,
createBaseline = true,
)
mapping.transformFindings(emptyMap())
assertThat(baselineFile.exists()).isFalse()
}
@Test
fun `should not update an existing baseline file if option configured as false`() {
val existing = DefaultBaseline.load(existingBaselineFile)
val mapping = resultMapping(
baselineFile = existingBaselineFile,
createBaseline = false,
)
mapping.transformFindings(findings)
val changed = DefaultBaseline.load(existingBaselineFile)
assertThat(existing).isEqualTo(changed)
}
@Test
fun `should not update an existing baseline file if option is not configured`() {
val existing = DefaultBaseline.load(existingBaselineFile)
val mapping = resultMapping(
baselineFile = existingBaselineFile,
createBaseline = null,
)
mapping.transformFindings(findings)
val changed = DefaultBaseline.load(existingBaselineFile)
assertThat(existing).isEqualTo(changed)
}
@Test
fun `should not create a new baseline file if no file is configured`() {
val mapping = resultMapping(
baselineFile = null,
createBaseline = false,
)
mapping.transformFindings(findings)
assertThat(baselineFile.exists()).isFalse()
}
@Test
fun `should create a new baseline file if a file is configured`() {
val mapping = resultMapping(
baselineFile = baselineFile,
createBaseline = true,
)
mapping.transformFindings(findings)
assertThat(baselineFile.exists()).isTrue()
}
@Test
fun `should update an existing baseline file if a file is configured`() {
Files.copy(existingBaselineFile, baselineFile)
val existing = DefaultBaseline.load(baselineFile)
val mapping = resultMapping(
baselineFile = baselineFile,
createBaseline = true,
)
mapping.transformFindings(findings)
val changed = DefaultBaseline.load(baselineFile)
assertThat(existing).isNotEqualTo(changed)
}
}
@OptIn(UnstableApi::class)
private fun resultMapping(baselineFile: Path?, createBaseline: Boolean?) =
BaselineResultMapping().apply {
init(object : SetupContext {
override val configUris: Collection<URI> = mockk()
override val config: Config = mockk()
override val outputChannel: PrintStream = NullPrintStream()
override val errorChannel: PrintStream = NullPrintStream()
override val properties: MutableMap<String, Any?> = mutableMapOf(
DETEKT_BASELINE_PATH_KEY to baselineFile,
DETEKT_BASELINE_CREATION_KEY to createBaseline
)
override fun register(key: String, value: Any) {
properties[key] = value
}
})
}