Skip to content

Commit 46a9e35

Browse files
authored
Add tests for page and page_cursor #70 (#76)
1 parent 7313712 commit 46a9e35

File tree

14 files changed

+194
-16
lines changed

14 files changed

+194
-16
lines changed

app/build.gradle.kts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,7 @@ kotlin {
9595
implementation("org.wiremock:wiremock:3.9.2")
9696
implementation("com.marcinziolo:kotlin-wiremock:2.1.1")
9797
implementation("ch.qos.logback:logback-classic:1.5.6")
98+
implementation("io.ktor:ktor-client-mock:$ktorVersion")
9899
}
99100

100101
jsMain.dependencies {

app/src/commonMain/kotlin/it/vercruysse/lemmyapi/HttpClient.platform.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ val coreHttpClient = baseClient.config {
4141
}
4242

4343
HttpResponseValidator {
44-
// If a 4XX is returned we try to parse it as a "Lemmy Error"
44+
// If a 4XX is returned, we try to parse it as a "Lemmy Error"
4545
// If it is a "Lemmy Error" we throw it as a LemmyBadRequestException
4646
handleResponseExceptionWithRequest { exception, _ ->
4747
val clientException = exception as? ClientRequestException ?: return@handleResponseExceptionWithRequest

app/src/commonMain/kotlin/it/vercruysse/lemmyapi/datatypes/GetPosts.kt

Lines changed: 20 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ import it.vercruysse.lemmyapi.dto.PAGE_CURSOR_GUARD
1313
data class GetPosts(
1414
val type_: ListingType? /* "All" | "Local" | "Subscribed" | "ModeratorView" */ = null,
1515
val sort: SortType? /* "Active" | "Hot" | "New" | "Old" | "TopDay" | "TopWeek" | "TopMonth" | "TopYear" | "TopAll" | "MostComments" | "NewComments" | "TopHour" | "TopSixHour" | "TopTwelveHour" | "TopThreeMonths" | "TopSixMonths" | "TopNineMonths" | "Controversial" | "Scaled" */ = null,
16+
/* starts from 1, null is considered not set, deprecated 0.19+, set to support 0.18 */
1617
val page: Long? = null,
1718
val limit: Long? = null,
1819
val community_id: CommunityId? = null,
@@ -21,5 +22,22 @@ data class GetPosts(
2122
val liked_only: Boolean? = null,
2223
val disliked_only: Boolean? = null,
2324
val show_hidden: Boolean? = null,
24-
val page_cursor: PaginationCursor? = PAGE_CURSOR_GUARD,
25-
) : DatatypeRoot
25+
/** The page cursor to the next list, null is valid and considered first list */
26+
val page_cursor: PaginationCursor? = PAGE_CURSOR_GUARD, // Guard is used to detect when null is set
27+
) : DatatypeRoot {
28+
29+
internal fun toPostsForm(): GetPosts {
30+
return this.copy(page_cursor = null, page = this.page)
31+
}
32+
33+
internal fun toValidatedForm(): GetPosts {
34+
val pageCursorSet = this.page_cursor != PAGE_CURSOR_GUARD
35+
36+
return if (pageCursorSet) {
37+
this.copy(page_cursor = this.page_cursor, page = null)
38+
} else {
39+
this.copy(page_cursor = null, page = this.page)
40+
}
41+
42+
}
43+
}
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
11
package it.vercruysse.lemmyapi.dto
22

33
// There should never be a page cursor returned that is the same as this
4-
val PAGE_CURSOR_GUARD = "$$$$$$$$$$$$$$$$$$$$$$$$$$$"
4+
internal const val PAGE_CURSOR_GUARD = "$$$$$$$$$$$$$$$$$$$$$$$$$$$"

app/src/commonMain/kotlin/it/vercruysse/lemmyapi/v0/x18/x5/LemmyApiUniWrapper.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -239,7 +239,7 @@ internal class LemmyApiUniWrapper(client: HttpClient, actualVersion: Version, ba
239239
override suspend fun getPosts(
240240
form: it.vercruysse.lemmyapi.datatypes.GetPosts,
241241
): Result<it.vercruysse.lemmyapi.datatypes.GetPostsResponse> =
242-
apiV18.getPosts(transformer.fromUni(form)).map(transformer::toUni)
242+
apiV18.getPosts(transformer.fromUni(form.toPostsForm())).map(transformer::toUni)
243243

244244
/**
245245
* Delete a post.

app/src/commonMain/kotlin/it/vercruysse/lemmyapi/v0/x19/x0/LemmyApiController.kt

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@ package it.vercruysse.lemmyapi.v0.x19.x0
33
import io.ktor.client.HttpClient
44
import it.vercruysse.lemmyapi.dto.ExportUserSettingsResponse
55
import it.vercruysse.lemmyapi.dto.ImportUserSettings
6-
import it.vercruysse.lemmyapi.dto.PAGE_CURSOR_GUARD
76
import it.vercruysse.lemmyapi.utils.getResult
87
import it.vercruysse.lemmyapi.utils.postResult
98
import it.vercruysse.lemmyapi.utils.putResult
@@ -197,7 +196,7 @@ internal class LemmyApiController(client: HttpClient, auth: String?) :
197196
* @GET("post/list")
198197
*/
199198
override suspend fun getPosts(form: GetPosts): Result<GetPostsResponse> =
200-
client.getResult("post/list", form.copy(page = if (form.page_cursor != PAGE_CURSOR_GUARD) null else form.page))
199+
client.getResult("post/list", form)
201200

202201
/**
203202
* Delete a post.

app/src/commonMain/kotlin/it/vercruysse/lemmyapi/v0/x19/x0/LemmyApiUniWrapper.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -230,7 +230,7 @@ internal class LemmyApiUniWrapper(client: HttpClient, actualVersion: Version, ba
230230
override suspend fun getPosts(
231231
form: it.vercruysse.lemmyapi.datatypes.GetPosts,
232232
): Result<it.vercruysse.lemmyapi.datatypes.GetPostsResponse> =
233-
api.getPosts(transformer.fromUni(form)).map(transformer::toUni)
233+
api.getPosts(transformer.fromUni(form.toValidatedForm())).map(transformer::toUni)
234234

235235
/**
236236
* Delete a post.

app/src/commonMain/kotlin/it/vercruysse/lemmyapi/v0/x19/x3/LemmyApiController.kt

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@ package it.vercruysse.lemmyapi.v0.x19.x3
33
import io.ktor.client.HttpClient
44
import it.vercruysse.lemmyapi.dto.ExportUserSettingsResponse
55
import it.vercruysse.lemmyapi.dto.ImportUserSettings
6-
import it.vercruysse.lemmyapi.dto.PAGE_CURSOR_GUARD
76
import it.vercruysse.lemmyapi.utils.getResult
87
import it.vercruysse.lemmyapi.utils.postResult
98
import it.vercruysse.lemmyapi.utils.putResult
@@ -197,7 +196,7 @@ internal class LemmyApiController(client: HttpClient, auth: String?) :
197196
* @GET("post/list")
198197
*/
199198
override suspend fun getPosts(form: GetPosts): Result<GetPostsResponse> =
200-
client.getResult("post/list", form.copy(page = if (form.page_cursor != PAGE_CURSOR_GUARD) null else form.page))
199+
client.getResult("post/list", form)
201200

202201
/**
203202
* Delete a post.

app/src/commonMain/kotlin/it/vercruysse/lemmyapi/v0/x19/x3/LemmyApiUniWrapper.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -231,7 +231,7 @@ internal class LemmyApiUniWrapper(client: HttpClient, actualVersion: Version, ba
231231
override suspend fun getPosts(
232232
form: it.vercruysse.lemmyapi.datatypes.GetPosts,
233233
): Result<it.vercruysse.lemmyapi.datatypes.GetPostsResponse> =
234-
api.getPosts(transformer.fromUni(form)).map(transformer::toUni)
234+
api.getPosts(transformer.fromUni(form.toValidatedForm())).map(transformer::toUni)
235235

236236
/**
237237
* Delete a post.

app/src/commonMain/kotlin/it/vercruysse/lemmyapi/v0/x19/x4/LemmyApiController.kt

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@ package it.vercruysse.lemmyapi.v0.x19.x4
33
import io.ktor.client.HttpClient
44
import it.vercruysse.lemmyapi.dto.ExportUserSettingsResponse
55
import it.vercruysse.lemmyapi.dto.ImportUserSettings
6-
import it.vercruysse.lemmyapi.dto.PAGE_CURSOR_GUARD
76
import it.vercruysse.lemmyapi.utils.getResult
87
import it.vercruysse.lemmyapi.utils.postResult
98
import it.vercruysse.lemmyapi.utils.putResult
@@ -197,7 +196,7 @@ internal class LemmyApiController(client: HttpClient, auth: String?) :
197196
* @GET("post/list")
198197
*/
199198
override suspend fun getPosts(form: GetPosts): Result<GetPostsResponse> =
200-
client.getResult("post/list", form.copy(page = if (form.page_cursor != PAGE_CURSOR_GUARD) null else form.page))
199+
client.getResult("post/list", form)
201200

202201
/**
203202
* Delete a post.

0 commit comments

Comments
 (0)