Skip to content

Commit c0f326b

Browse files
author
Philipp Karlsson
committed
extending insight sdk get attribute values
1 parent fd55393 commit c0f326b

File tree

4 files changed

+95
-12
lines changed

4 files changed

+95
-12
lines changed

kotlin-insight-client/kotlin-insight-client-http/src/main/kotlin/com/linkedplanet/kotlininsightclient/http/HttpInsightObjectOperator.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -378,11 +378,11 @@ class HttpInsightObjectOperator(private val context: HttpInsightClientContext) :
378378
}
379379
DefaultType.TIME -> {
380380
val localTime = singleValue()?.let { LocalTime.parse(it) }
381-
InsightAttribute.Time(attributeId, localTime, values.firstOrNull()?.displayValue as? String?, schema)
381+
InsightAttribute.Time(attributeId, localTime, schema, values.firstOrNull()?.displayValue as? String?, )
382382
}
383383
DefaultType.DATE_TIME -> {
384384
val zonedDateTime = singleValue()?.let { ZonedDateTime.parse(it) }
385-
InsightAttribute.DateTime(attributeId, zonedDateTime, values.firstOrNull()?.displayValue as? String?, schema)
385+
InsightAttribute.DateTime(attributeId, zonedDateTime, schema, values.firstOrNull()?.displayValue as? String?)
386386
}
387387
DefaultType.EMAIL -> InsightAttribute.Email(attributeId, singleValue(), schema)
388388
DefaultType.TEXTAREA -> InsightAttribute.Textarea(attributeId, singleValue(), schema)

kotlin-insight-client/kotlin-insight-client-sdk/src/main/kotlin/com/linkedplanet/kotlininsightclient/sdk/SdkInsightObjectOperator.kt

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ import com.atlassian.jira.bc.project.ProjectService
2828
import com.atlassian.jira.component.ComponentAccessor
2929
import com.atlassian.jira.config.properties.ApplicationProperties
3030
import com.atlassian.jira.user.util.UserManager
31+
import com.atlassian.jira.util.NaturalOrderStringComparator
3132
import com.linkedplanet.kotlinatlassianclientcore.common.api.StatusAttribute
3233
import com.linkedplanet.kotlinatlassianclientcore.common.api.StatusCategory
3334
import com.linkedplanet.kotlinatlassianclientcore.common.api.ConfluencePage
@@ -325,7 +326,7 @@ object SdkInsightObjectOperator : InsightObjectOperator {
325326
it.displayValue?.let {listOf(it)}?: emptyList()
326327
}
327328
}?: emptyList()
328-
}.toSet().sorted()
329+
}.toSet().sortedWith(NaturalOrderStringComparator.CASE_INSENSITIVE_ORDER)
329330
val filteredAttributeValues = allAttributeValues.filter {!exceptions.contains(it.lowercase()) }
330331
.filter { query.isNullOrEmpty() || it.lowercase().contains(query.lowercase()) }
331332
val pages = (filteredAttributeValues.size + pageSize - 1) / pageSize
@@ -517,13 +518,13 @@ object SdkInsightObjectOperator : InsightObjectOperator {
517518
val date = values.firstOrNull()?.dateValue
518519
val localTime = date?.toInstant()?.atZone(zoneId)?.toLocalTime()
519520
val displayValue = null // Insights original ObjectAssembler does not handle this case at all.
520-
InsightAttribute.Time(id,localTime, displayValue, schema)
521+
InsightAttribute.Time(id,localTime, schema, displayValue)
521522
}
522523
DefaultType.DATE_TIME -> {
523524
val date = values.firstOrNull()?.dateValue
524525
val zonedDateTime = date?.toInstant()?.atZone(zoneId)
525526
val displayValue = zonedDateTime?.let { dateTimeFormatter.formatDateTimeToString(Date.from(it.toInstant())) }
526-
InsightAttribute.DateTime(id,zonedDateTime, displayValue, schema)
527+
InsightAttribute.DateTime(id,zonedDateTime, schema, displayValue)
527528
}
528529
DefaultType.EMAIL -> InsightAttribute.Email(id,values.firstOrNull()?.textValue, schema)
529530
DefaultType.TEXTAREA -> InsightAttribute.Textarea(id,values.firstOrNull()?.textValue, schema)

kotlin-insight-client/kotlin-insight-client-test-sdk/src/test/kotlin/it/InsightSdkClientTest.kt

Lines changed: 87 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -19,16 +19,18 @@
1919
*/
2020
package it
2121

22+
import arrow.core.getOrElse
2223
import com.atlassian.jira.component.ComponentAccessor
2324
import com.atlassian.plugins.osgi.test.AtlassianPluginsTestRunner
2425
import com.linkedplanet.kotlininsightclient.InsightClientTest
2526
import com.linkedplanet.kotlininsightclient.api.interfaces.*
26-
import com.linkedplanet.kotlininsightclient.sdk.SdkInsightAttachmentOperator
27-
import com.linkedplanet.kotlininsightclient.sdk.SdkInsightHistoryOperator
28-
import com.linkedplanet.kotlininsightclient.sdk.SdkInsightObjectOperator
29-
import com.linkedplanet.kotlininsightclient.sdk.SdkInsightObjectTypeOperator
30-
import com.linkedplanet.kotlininsightclient.sdk.SdkInsightSchemaOperator
27+
import com.linkedplanet.kotlininsightclient.sdk.*
28+
import junit.framework.TestCase.assertTrue
29+
import kotlinx.coroutines.runBlocking
30+
import org.hamcrest.CoreMatchers.equalTo
31+
import org.hamcrest.MatcherAssert.assertThat
3132
import org.junit.Before
33+
import org.junit.Test
3234
import org.junit.runner.RunWith
3335

3436
@RunWith(AtlassianPluginsTestRunner::class)
@@ -48,4 +50,84 @@ class InsightSdkClientTest : InsightClientTest() {
4850
val admin = userManager.getUserByName("admin")
4951
jiraAuthenticationContext.loggedInUser = admin
5052
}
53+
54+
data class AttributeValueTestData(
55+
val name: String,
56+
val objectTypeId: Int,
57+
val attributeId: Int,
58+
val query: String,
59+
val exceptionList: String?,
60+
val page: Int,
61+
val pageSize: Int,
62+
val expectedResults: List<String>
63+
)
64+
65+
66+
@Test
67+
fun test1InsightAttributeValuesForTypes() = runBlocking {
68+
val attributeValueTestData = listOf(
69+
AttributeValueTestData("TEXT", 47, 116, "", null, 1, 10, listOf("TEXT1")),
70+
AttributeValueTestData("INT", 47, 117, "", null, 1, 10, listOf("1")),
71+
AttributeValueTestData("FLOAT", 47, 118, "", null, 1, 10, listOf("1.0")),
72+
AttributeValueTestData("DATE", 47, 119, "", null, 1, 10, listOf("1/Jan/25")),
73+
AttributeValueTestData("DATETIME", 47, 120, "", null, 1, 10, listOf("01/Jan/25 12:00 AM")),
74+
AttributeValueTestData("URL", 47, 121, "", null, 1, 10, listOf("http://localhost:0001/")),
75+
AttributeValueTestData("EMAIL", 47, 122, "", null, 1, 10, listOf("[email protected]")),
76+
AttributeValueTestData("TEXTAREA", 47, 123, "", null, 1, 10, listOf("<p>TEXTAREA_1</p>")),
77+
AttributeValueTestData("SELECT", 47, 124, "", null, 1, 10, listOf("1")),
78+
AttributeValueTestData("MULTISELECT", 47, 125, "", null, 1, 10, listOf("1", "2")),
79+
AttributeValueTestData("IPADDRESS", 47, 126, "", null, 1, 10, listOf("1.1.1.1")),
80+
AttributeValueTestData("USER", 47, 127, "", null, 1, 10, listOf("test1")),
81+
AttributeValueTestData("USERS", 47, 128, "", null, 1, 10, listOf("test1", "test2")),
82+
AttributeValueTestData("GROUP", 47, 129, "", null, 1, 10, listOf("jira-software-users")),
83+
AttributeValueTestData("GROUPS", 47, 130, "", null, 1, 10, listOf("jira-administrators", "jira-software-users")),
84+
AttributeValueTestData("PROJECT", 47, 131, "", null, 1, 10, listOf("Test")),
85+
AttributeValueTestData("PROJECTS", 47, 132, "", null, 1, 10, listOf("Test")),
86+
AttributeValueTestData("REF", 47, 133, "", null, 1, 10, listOf("Test AG")),
87+
AttributeValueTestData("REFS", 47, 134, "", null, 1, 10, listOf("Test AG", "Test GmbH")),
88+
)
89+
attributeValueTestData.forEach { data ->
90+
check(data)
91+
}
92+
}
93+
94+
@Test
95+
fun test2InsightAttributeValuesWithFilter() = runBlocking {
96+
val tests = listOf(
97+
AttributeValueTestData(
98+
"GetPage1", 5, 24, "", null, 1, 10,
99+
listOf("1", "2", "3", "4", "5", "6", "7", "8", "9", "10")
100+
),
101+
AttributeValueTestData(
102+
"GetPage2", 5, 24, "", null, 2, 10,
103+
listOf("11", "12", "13", "14", "15", "16", "17", "18", "19", "20")
104+
),
105+
AttributeValueTestData(
106+
"Filter", 5, 24, "2", null, 1, 10,
107+
listOf("2", "12", "20", "21", "22", "23", "24", "25", "26", "27")
108+
),
109+
AttributeValueTestData(
110+
"ExceptionsAndFilter", 5, 24, "2", "2,20", 1, 10,
111+
listOf("12", "21", "22", "23", "24", "25", "26", "27", "28", "29")
112+
),
113+
)
114+
tests.forEach { testData ->
115+
check(testData)
116+
}
117+
}
118+
119+
private suspend fun check(attributeValueTestData: AttributeValueTestData) {
120+
val result: List<String> = SdkInsightObjectOperator.getAttributeValues(
121+
attributeValueTestData.objectTypeId,
122+
attributeValueTestData.attributeId,
123+
attributeValueTestData.query,
124+
attributeValueTestData.exceptionList,
125+
attributeValueTestData.page,
126+
attributeValueTestData.pageSize
127+
).getOrElse { error ->
128+
assertTrue("${attributeValueTestData.name} returned Either.Left!", false)
129+
return
130+
}.results
131+
assertThat("${attributeValueTestData.name} test did not pass!", result, equalTo(attributeValueTestData.expectedResults))
132+
}
51133
}
Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
11
version https://git-lfs.github.com/spec/v1
2-
oid sha256:3ea236cb6fa314f37ebbb882923c1b283274a71ace3c56b170494e73af3842d0
3-
size 40731567
2+
oid sha256:28aa6d6e4415a63f577030a0dce1140199aa7598d8da1f31371410ef375146e8
3+
size 41299019

0 commit comments

Comments
 (0)