Skip to content

Commit ca3df91

Browse files
committed
Fixed pagination in kotlin-jira-client-sdk
1 parent fdaf2cd commit ca3df91

File tree

3 files changed

+71
-38
lines changed

3 files changed

+71
-38
lines changed

kotlin-jira-client/kotlin-jira-client-sdk/src/main/kotlin/com/linkedplanet/kotlinjiraclient/sdk/SdkJiraIssueOperator.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -148,7 +148,7 @@ object SdkJiraIssueOperator : JiraIssueOperator<SdkJiraField> {
148148
pageSize: Int,
149149
parser: suspend (JsonObject, Map<String, String>) -> Either<JiraClientError, T>
150150
): Either<JiraClientError, List<T>> =
151-
getIssuesByJqlWithPagerFilter(jql, PagerFilter.newPageAlignedFilter(0, 1), parser)
151+
getIssuesByJqlWithPagerFilter(jql, PagerFilter.newPageAlignedFilter(pageIndex * pageSize, pageSize), parser)
152152

153153
private suspend fun <T> issueToConcreteType(
154154
issue: Issue,

kotlin-jira-client/kotlin-jira-client-test-base/src/main/kotlin/com/linkedplanet/kotlinjiraclient/JiraIssueOperatorTest.kt

Lines changed: 68 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,7 @@ interface JiraIssueOperatorTest<JiraFieldType> : BaseTestConfigProvider<JiraFiel
8787
val issues: List<Story> = runBlocking {
8888
issueOperator.getIssuesByJQL("summary ~ \"Test-*\"", parser = ::issueParser).orNull() ?: emptyList()
8989
}
90-
90+
assertEquals(10, issues.size)
9191
val keys = 1..10
9292
keys.forEach { searchedKeyIndex ->
9393
val issue = issues.first { "Test-$searchedKeyIndex" == it.summary }
@@ -101,28 +101,59 @@ interface JiraIssueOperatorTest<JiraFieldType> : BaseTestConfigProvider<JiraFiel
101101
fun issues_04GetIssuesByJQLPaginated() {
102102
println("### START issues_04GetIssuesByJQLPaginated")
103103
val pages = 1..10
104-
pages.forEach { page ->
105-
val issuePage: List<Story> = runBlocking {
104+
val issues = pages.flatMap { pageNumber ->
105+
val page: List<Story> = runBlocking {
106106
issueOperator.getIssuesByJQLPaginated(
107107
"summary ~ \"Test-*\"",
108-
page - 1,
108+
pageNumber - 1,
109109
1,
110110
parser = ::issueParser
111111
).orNull() ?: emptyList()
112112
}
113-
114-
assertEquals(1, issuePage.size)
115-
116-
val issue = issuePage.first()
117-
assertEquals("IT-1", issue.insightObjectKey)
113+
assertEquals(1, page.size)
114+
page
115+
}
116+
assertEquals(10, issues.size)
117+
val issueKeys = (1..10)
118+
issueKeys.forEach { issueKey ->
119+
val issue = issues.singleOrNull { it.summary == "Test-$issueKey" }
120+
assertNotNull(issue)
121+
assertEquals("IT-1", issue!!.insightObjectKey)
118122
assertEquals("To Do", issue.status.name)
119123
}
120124
println("### END issues_04GetIssuesByJQLPaginated")
121125
}
122126

123127
@Test
124-
fun issues_05GetIssuesByIssueTypePaginated() {
125-
println("### START issues_05GetIssuesByIssueTypePaginated")
128+
fun issues_05GetIssuesByJQLPaginated() {
129+
println("### START issues_05GetIssuesByJQLPaginated")
130+
val pages = 1..5
131+
val issues = pages.flatMap { pageNumber ->
132+
val page = runBlocking {
133+
issueOperator.getIssuesByJQLPaginated(
134+
"summary ~ \"Test-*\"",
135+
pageNumber - 1,
136+
2,
137+
parser = ::issueParser
138+
).orNull() ?: emptyList()
139+
}
140+
assertEquals(2, page.size)
141+
page
142+
}
143+
assertEquals(10, issues.size)
144+
val issueKeys = (1..10)
145+
issueKeys.forEach { issueKey ->
146+
val issue = issues.singleOrNull { it.summary == "Test-$issueKey" }
147+
assertNotNull(issue)
148+
assertEquals("IT-1", issue!!.insightObjectKey)
149+
assertEquals("To Do", issue.status.name)
150+
}
151+
println("### END issues_05GetIssuesByJQLPaginated")
152+
}
153+
154+
@Test
155+
fun issues_06GetIssuesByIssueTypePaginated() {
156+
println("### START issues_06GetIssuesByIssueTypePaginated")
126157
val pages = 1..10
127158
val issues = pages.flatMap { page ->
128159
runBlocking {
@@ -137,17 +168,19 @@ interface JiraIssueOperatorTest<JiraFieldType> : BaseTestConfigProvider<JiraFiel
137168
}
138169
}
139170
assertEquals(10, issues.size)
140-
issues.forEach { issue ->
171+
val issueKeys = (1..10)
172+
issueKeys.forEach { issueKey ->
173+
val issue = issues.singleOrNull { it.summary == "Test-$issueKey" }
141174
assertNotNull(issue)
142-
assertEquals("IT-1", issue.insightObjectKey)
175+
assertEquals("IT-1", issue!!.insightObjectKey)
143176
assertEquals("To Do", issue.status.name)
144177
}
145-
println("### END issues_05GetIssuesByIssueTypePaginated")
178+
println("### END issues_06GetIssuesByIssueTypePaginated")
146179
}
147180

148181
@Test
149-
fun issues_06CreateIssue() {
150-
println("### START issues_06CreateIssue")
182+
fun issues_07CreateIssue() {
183+
println("### START issues_07CreateIssue")
151184

152185
val summary = "MyNewSummary"
153186
val description = "MyDescription"
@@ -214,12 +247,12 @@ interface JiraIssueOperatorTest<JiraFieldType> : BaseTestConfigProvider<JiraFiel
214247
createdIssue.zonedDateTime?.truncatedTo(ChronoUnit.MINUTES)?.withZoneSameInstant(ZoneOffset.UTC)
215248
)
216249

217-
println("### END issues_06CreateIssue")
250+
println("### END issues_07CreateIssue")
218251
}
219252

220253
@Test
221-
fun issues_07UpdateIssue() {
222-
println("### START issues_07UpdateIssue")
254+
fun issues_08UpdateIssue() {
255+
println("### START issues_08UpdateIssue")
223256

224257
val issue = runBlocking {
225258
issueOperator.getIssueByJQL("summary ~ \"MyNewSummary\"", ::issueParser)
@@ -282,12 +315,12 @@ interface JiraIssueOperatorTest<JiraFieldType> : BaseTestConfigProvider<JiraFiel
282315
assertEquals("new", issueAfterUpdate.status.statusCategory)
283316
assertEquals(null, issueAfterUpdate.epicKey)
284317

285-
println("### END issues_07UpdateIssue")
318+
println("### END issues_08UpdateIssue")
286319
}
287320

288321
@Test
289-
fun issues_08DeleteIssue() {
290-
println("### START issues_08DeleteIssue")
322+
fun issues_09DeleteIssue() {
323+
println("### START issues_09DeleteIssue")
291324

292325
val searchNewIssue = runBlocking {
293326
issueOperator.getIssueByJQL("summary ~ \"MyNewSummary-update\"", ::issueParser)
@@ -302,57 +335,57 @@ interface JiraIssueOperatorTest<JiraFieldType> : BaseTestConfigProvider<JiraFiel
302335
}
303336
assertNull(issuesAfterDeletion)
304337

305-
println("### END issues_08DeleteIssue")
338+
println("### END issues_09DeleteIssue")
306339
}
307340

308341
@Test
309-
fun issues_09GetNonExistingIssue() {
310-
println("### START issues_09GetNonExistingIssue")
342+
fun issues_10GetNonExistingIssue() {
343+
println("### START issues_10GetNonExistingIssue")
311344

312345
val response = runBlocking {
313346
issueOperator.getIssueByKey("BLAAAA") { _, _ -> Either.Right(null) }
314347
}
315348
assertTrue(response.isRight())
316349
assertNull(response.getOrElse { -1 })
317350

318-
println("### END issues_09GetNonExistingIssue")
351+
println("### END issues_10GetNonExistingIssue")
319352
}
320353

321354
@Test
322-
fun issues_10GetIssuesByIQLError() {
323-
println("### START issues_10GetIssuesByIQLError")
355+
fun issues_11GetIssuesByIQLError() {
356+
println("### START issues_11GetIssuesByIQLError")
324357

325358
val response = runBlocking {
326359
issueOperator.getIssueByJQL("key = BLAAAA") { _, _ -> Either.Right(null) }
327360
}
328361
assertTrue(response.isLeft())
329362

330-
println("### END issues_10GetIssuesByIQLError")
363+
println("### END issues_11GetIssuesByIQLError")
331364
}
332365

333366
@Test
334-
fun issues_11GetIssuesByJQLEmpty() {
335-
println("### START issues_11GetIssuesByJQLEmpty")
367+
fun issues_12GetIssuesByJQLEmpty() {
368+
println("### START issues_12GetIssuesByJQLEmpty")
336369
val issues: List<Story>? = runBlocking {
337370
issueOperator.getIssuesByJQL("summary ~ \"Emptyyyyy-*\"", parser = ::issueParser).orNull()
338371
}
339372

340373
assertNotNull(issues)
341374
assertTrue(issues!!.isEmpty())
342375

343-
println("### END issues_11GetIssuesByJQLEmpty")
376+
println("### END issues_12GetIssuesByJQLEmpty")
344377
}
345378

346379
@Test
347-
fun issues_12GetIssuesByJQLPaginatedEmpty() {
348-
println("### START issues_12GetIssuesByJQLPaginatedEmpty")
380+
fun issues_13GetIssuesByJQLPaginatedEmpty() {
381+
println("### START issues_13GetIssuesByJQLPaginatedEmpty")
349382
val issues: List<Story>? = runBlocking {
350383
issueOperator.getIssuesByJQLPaginated("summary ~ \"Emptyyyyy-*\"", parser = ::issueParser).orNull()
351384
}
352385

353386
assertNotNull(issues)
354387
assertTrue(issues!!.isEmpty())
355388

356-
println("### END issues_12GetIssuesByJQLPaginatedEmpty")
389+
println("### END issues_13GetIssuesByJQLPaginatedEmpty")
357390
}
358391
}
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:e34dc99bfdc7d59f0ffe20145715df799339c45817cb3c4454ab6b6710f3622b
3-
size 29607731
2+
oid sha256:28aefe2d052d2ce0618b0c14c739d6c3d33459c77e8bb4c641367581f9115812
3+
size 27028949

0 commit comments

Comments
 (0)