Skip to content

Commit 6c2a47b

Browse files
committed
fixed filtering of jobTemplate and added tests
1 parent f06fd72 commit 6c2a47b

File tree

4 files changed

+125
-40
lines changed

4 files changed

+125
-40
lines changed

src/main/kotlin/com/redhat/devtools/intellij/kubernetes/editor/util/ResourcePsiElementUtils.kt

Lines changed: 9 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -225,6 +225,15 @@ fun PsiElement.getTemplateLabels(): PsiElement? {
225225
}
226226
}
227227

228+
fun PsiElement.getJobTemplate(): PsiElement? {
229+
return when(this) {
230+
is YAMLMapping -> this.getJobTemplate()
231+
is JsonObject -> this.getJobTemplate()
232+
else ->
233+
null
234+
}
235+
}
236+
228237
fun YAMLMapping.getJobTemplate(): YAMLMapping? {
229238
return (this.getKeyValueByKey(KEY_SPEC)?.value as? YAMLMapping)
230239
?.getKeyValueByKey(KEY_JOB_TEMPLATE)?.value as? YAMLMapping
@@ -235,27 +244,6 @@ fun JsonObject.getJobTemplate(): JsonObject? {
235244
?.findProperty(KEY_JOB_TEMPLATE)?.value as? JsonObject?
236245
}
237246

238-
fun YAMLMapping.getJobTemplateLabels(): YAMLMapping? {
239-
return this.getJobTemplate()?.getLabels()
240-
}
241-
242-
fun JsonObject.getJobTemplateLabels(): JsonObject? {
243-
return this.getJobTemplate()?.getLabels()
244-
}
245-
246-
fun PsiElement.hasJobTemplateLabels(): Boolean {
247-
return this.getTemplateLabels() != null
248-
}
249-
250-
fun PsiElement.getJobTemplateLabels(): PsiElement? {
251-
return when(this) {
252-
is YAMLMapping -> this.getJobTemplateLabels()
253-
is JsonObject -> this.getJobTemplateLabels()
254-
else ->
255-
null
256-
}
257-
}
258-
259247
fun YAMLMapping.getTemplateLabels(): YAMLMapping? {
260248
return this.getTemplate()?.getLabels()
261249
?: getJobTemplate()?.getTemplate()?.getLabels()

src/main/kotlin/com/redhat/devtools/intellij/kubernetes/usage/LabelsFilter.kt

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,12 +14,11 @@ import com.intellij.psi.PsiElement
1414
import com.redhat.devtools.intellij.common.validation.KubernetesTypeInfo
1515
import com.redhat.devtools.intellij.kubernetes.editor.util.areMatchingMatchExpressions
1616
import com.redhat.devtools.intellij.kubernetes.editor.util.areMatchingMatchLabels
17-
import com.redhat.devtools.intellij.kubernetes.editor.util.getJobTemplateLabels
17+
import com.redhat.devtools.intellij.kubernetes.editor.util.getJobTemplate
1818
import com.redhat.devtools.intellij.kubernetes.editor.util.getKubernetesTypeInfo
1919
import com.redhat.devtools.intellij.kubernetes.editor.util.getLabels
2020
import com.redhat.devtools.intellij.kubernetes.editor.util.getResource
2121
import com.redhat.devtools.intellij.kubernetes.editor.util.getTemplateLabels
22-
import com.redhat.devtools.intellij.kubernetes.editor.util.hasJobTemplateLabels
2322
import com.redhat.devtools.intellij.kubernetes.editor.util.hasMatchExpressions
2423
import com.redhat.devtools.intellij.kubernetes.editor.util.hasMatchLabels
2524
import com.redhat.devtools.intellij.kubernetes.editor.util.hasSelector
@@ -130,14 +129,17 @@ class LabelsFilter(selector: PsiElement): PsiElementMappingsFilter {
130129
}
131130

132131
private fun getLabels(
133-
labeledType: KubernetesTypeInfo,
132+
labeledResourceType: KubernetesTypeInfo,
134133
labeledResource: PsiElement,
135134
selectorResourceType: KubernetesTypeInfo?
136135
): PsiElement? {
137136
return when {
138137
selectorResourceType == null ->
139138
null
140139

140+
labeledResourceType.isCronJob() ->
141+
labeledResource.getJobTemplate()?.getTemplateLabels()
142+
141143
labeledResource.hasTemplateLabels() ->
142144
labeledResource.getTemplateLabels()
143145

src/test/kotlin/com/redhat/devtools/intellij/kubernetes/editor/mocks/ResourcePsiElementMocks.kt

Lines changed: 28 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ private const val KEY_METADATA = "metadata"
3535
private const val KEY_SELECTOR = "selector"
3636
private const val KEY_SPEC = "spec"
3737
private const val KEY_TEMPLATE = "template"
38+
private const val KEY_JOB_TEMPLATE = "jobTemplate"
3839

3940
fun YAMLMapping.createLabels(labelsChildren: YAMLMapping): YAMLKeyValue {
4041
val metadataChildren = mock<YAMLMapping>()
@@ -54,23 +55,25 @@ fun JsonObject.createLabels(labelsChildren: JsonObject): JsonProperty {
5455
}
5556

5657
fun YAMLMapping.createTemplate(templateChildren: YAMLMapping): YAMLKeyValue {
57-
var spec = getKeyValueByKey(KEY_SPEC)
58-
if (spec == null) {
59-
val specMapping = mock<YAMLMapping>()
60-
spec = createYAMLKeyValue(KEY_SPEC, specMapping, this)
61-
}
58+
val spec = getOrCreateSpec()
6259
return createYAMLKeyValue(KEY_TEMPLATE, templateChildren, spec.value as YAMLMapping)
6360
}
6461

6562
fun JsonObject.createTemplate(templateChildren: JsonObject): JsonProperty {
66-
var spec = findProperty(KEY_SPEC)
67-
if (spec == null) {
68-
val specMapping = mock<JsonObject>()
69-
spec = createJsonProperty(KEY_SPEC, specMapping, this)
70-
}
63+
val spec = getOrCreateSpec()
7164
return createJsonProperty(KEY_TEMPLATE, templateChildren, spec.value as JsonObject)
7265
}
7366

67+
fun YAMLMapping.createJobTemplate(templateChildren: YAMLMapping): YAMLKeyValue {
68+
val spec = getOrCreateSpec()
69+
return createYAMLKeyValue(KEY_JOB_TEMPLATE, templateChildren, spec.value as YAMLMapping)
70+
}
71+
72+
fun JsonObject.createJobTemplate(templateChildren: JsonObject): JsonProperty {
73+
val spec = getOrCreateSpec()
74+
return createJsonProperty(KEY_JOB_TEMPLATE, templateChildren, spec.value as JsonObject)
75+
}
76+
7477
fun YAMLMapping.createMatchLabels(matchLabels: YAMLMapping): YAMLKeyValue {
7578
var selectorChildren = getSelector()
7679
if (selectorChildren == null) {
@@ -119,21 +122,32 @@ fun createYAMLSequenceItem(key: String, operator: String, values: List<String>):
119122
}
120123

121124
fun YAMLMapping.createSelector(selectorChildren: YAMLMapping = mock()): YAMLKeyValue {
125+
val spec = getOrCreateSpec()
126+
return createYAMLKeyValue(KEY_SELECTOR, selectorChildren, spec.value as YAMLMapping)
127+
}
128+
129+
private fun YAMLMapping.getOrCreateSpec(): YAMLKeyValue {
122130
var spec = getKeyValueByKey(KEY_SPEC)
123131
if (spec == null) {
124132
val specChildren = mock<YAMLMapping>()
125133
spec = createYAMLKeyValue(KEY_SPEC, specChildren, this)
126134
}
127-
return createYAMLKeyValue(KEY_SELECTOR, selectorChildren, spec.value as YAMLMapping)
135+
return spec
128136
}
129137

138+
130139
fun JsonObject.createSelector(selectorChildren: JsonObject = mock()): JsonProperty {
140+
val spec = getOrCreateSpec()
141+
return createJsonProperty(KEY_SELECTOR, selectorChildren, spec.value as JsonObject)
142+
}
143+
144+
private fun JsonObject.getOrCreateSpec(): JsonProperty {
131145
var spec = findProperty(KEY_SPEC)
132146
if (spec == null) {
133-
val specChildren = mock<JsonObject>()
134-
spec = createJsonProperty(KEY_SPEC, specChildren, this)
147+
val specChild = mock<JsonObject>()
148+
spec = createJsonProperty(KEY_SPEC, specChild, this)
135149
}
136-
return createJsonProperty(KEY_SELECTOR, selectorChildren, spec.value as JsonObject)
150+
return spec
137151
}
138152

139153
fun YAMLMapping.createMetadata(): YAMLMapping {

src/test/kotlin/com/redhat/devtools/intellij/kubernetes/editor/util/ResourcePsiElementUtilsTest.kt

Lines changed: 83 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ import com.nhaarman.mockitokotlin2.mock
1919
import com.nhaarman.mockitokotlin2.never
2020
import com.nhaarman.mockitokotlin2.whenever
2121
import com.redhat.devtools.intellij.common.validation.KubernetesTypeInfo
22+
import com.redhat.devtools.intellij.kubernetes.editor.mocks.createJobTemplate
2223
import com.redhat.devtools.intellij.kubernetes.editor.mocks.createJsonObject
2324
import com.redhat.devtools.intellij.kubernetes.editor.mocks.createJsonProperty
2425
import com.redhat.devtools.intellij.kubernetes.editor.mocks.createLabels
@@ -35,6 +36,7 @@ import org.jetbrains.yaml.psi.YAMLMapping
3536
import org.junit.Before
3637
import org.junit.Test
3738
import org.mockito.MockedStatic
39+
import kotlin.collections.listOf
3840

3941
class ResourcePsiElementUtilsTest {
4042

@@ -294,6 +296,19 @@ class ResourcePsiElementUtilsTest {
294296
assertThat(result).isSameAs(templateMapping)
295297
}
296298

299+
@Test
300+
fun `#getJobTemplate for YAML returns jobTemplate mapping`() {
301+
// given
302+
val specMapping = mock<YAMLMapping>()
303+
createYAMLKeyValue("spec", specMapping, yamlElement)
304+
val templateMapping = mock<YAMLMapping>()
305+
createYAMLKeyValue("jobTemplate", templateMapping, specMapping)
306+
// when
307+
val result = yamlElement.getJobTemplate()
308+
// then
309+
assertThat(result).isSameAs(templateMapping)
310+
}
311+
297312
@Test
298313
fun `#getTemplateLabel for YAML returns template labels`() {
299314
// given
@@ -319,10 +334,43 @@ class ResourcePsiElementUtilsTest {
319334
assertThat(found).isSameAs(templateLabels)
320335
}
321336

337+
@Test
338+
fun `#getJobTemplateLabel for YAML returns template labels`() {
339+
// given
340+
val jobTemplateLabels = createYAMLMapping(listOf(
341+
createYAMLKeyValue("jedi", "skywalker")
342+
))
343+
yamlElement.createJobTemplate(
344+
createYAMLMapping(listOf(
345+
createYAMLKeyValue("spec",
346+
createYAMLMapping(listOf(
347+
createYAMLKeyValue("template",
348+
createYAMLMapping(listOf(
349+
createYAMLKeyValue(
350+
"metadata",
351+
createYAMLMapping(listOf(
352+
createYAMLKeyValue(
353+
"labels",
354+
jobTemplateLabels
355+
)
356+
))
357+
)
358+
))
359+
)
360+
))
361+
)
362+
))
363+
)
364+
// when
365+
val found = yamlElement.getJobTemplate()?.getTemplateLabels()
366+
// then
367+
assertThat(found).isSameAs(jobTemplateLabels)
368+
}
369+
322370
@Test
323371
fun `#getTemplateLabel for Json returns template labels`() {
324372
// given
325-
val templateLabels = createJsonObject(listOf(
373+
val jobTemplateLabels = createJsonObject(listOf(
326374
createJsonProperty("jedi", "skywalker")
327375
))
328376
jsonElement.createTemplate(
@@ -332,7 +380,7 @@ class ResourcePsiElementUtilsTest {
332380
createJsonObject(listOf(
333381
createJsonProperty(
334382
"labels",
335-
templateLabels
383+
jobTemplateLabels
336384
)
337385
))
338386
)
@@ -341,6 +389,39 @@ class ResourcePsiElementUtilsTest {
341389
// when
342390
val found = jsonElement.getTemplateLabels()
343391
// then
392+
assertThat(found).isSameAs(jobTemplateLabels)
393+
}
394+
395+
@Test
396+
fun `#getJobTemplateLabel for Json returns template labels`() {
397+
// given
398+
val templateLabels = createJsonObject(listOf(
399+
createJsonProperty("jedi", "skywalker")
400+
))
401+
jsonElement.createJobTemplate(
402+
createJsonObject(listOf(
403+
createJsonProperty("spec",
404+
createJsonObject(listOf(
405+
createJsonProperty("template",
406+
createJsonObject(listOf(
407+
createJsonProperty(
408+
"metadata",
409+
createJsonObject(listOf(
410+
createJsonProperty(
411+
"labels",
412+
templateLabels
413+
)
414+
))
415+
)
416+
))
417+
)
418+
))
419+
)
420+
))
421+
)
422+
// when
423+
val found = jsonElement.getJobTemplate()?.getTemplateLabels()
424+
// then
344425
assertThat(found).isSameAs(templateLabels)
345426
}
346427

0 commit comments

Comments
 (0)