mirror of
https://github.com/msfjarvis/compose-lobsters
synced 2025-08-13 21:56:59 +05:30
feat: add get tags endpoint
This commit is contained in:
parent
d69629c319
commit
a0f044786f
5 changed files with 41 additions and 0 deletions
|
@ -9,6 +9,7 @@ package dev.msfjarvis.claw.api
|
|||
import com.slack.eithernet.ApiResult
|
||||
import dev.msfjarvis.claw.model.LobstersPost
|
||||
import dev.msfjarvis.claw.model.LobstersPostDetails
|
||||
import dev.msfjarvis.claw.model.Tag
|
||||
import dev.msfjarvis.claw.model.User
|
||||
import retrofit2.http.GET
|
||||
import retrofit2.http.Path
|
||||
|
@ -30,6 +31,8 @@ interface LobstersApi {
|
|||
|
||||
@GET("/") suspend fun getCSRFToken(): ApiResult<CSRFToken, Unit>
|
||||
|
||||
@GET("tags.json") suspend fun getTags(): ApiResult<List<Tag>, Unit>
|
||||
|
||||
companion object {
|
||||
const val BASE_URL = "https://lobste.rs"
|
||||
}
|
||||
|
|
|
@ -11,6 +11,7 @@ import com.slack.eithernet.ApiResult.Success
|
|||
import com.slack.eithernet.test.newEitherNetController
|
||||
import dev.msfjarvis.claw.model.LobstersPost
|
||||
import dev.msfjarvis.claw.model.LobstersPostDetails
|
||||
import dev.msfjarvis.claw.model.Tag
|
||||
import dev.msfjarvis.claw.model.User
|
||||
import dev.msfjarvis.claw.util.TestUtils.assertIs
|
||||
import kotlinx.coroutines.test.runTest
|
||||
|
@ -59,4 +60,13 @@ class ApiTest {
|
|||
"RPe1m3JaXAq0ti7t15hNixpLvmgJ793Ti6y4fOpxtfenyXQK3WU19m7MJb8RGoIf-tC3C9Ilwb8pv0WJUWLbNA"
|
||||
)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `retrieve tags`() = runTest {
|
||||
val tags = api.getTags()
|
||||
assertIs<Success<List<Tag>>>(tags)
|
||||
assertThat(tags.value).isNotEmpty()
|
||||
assertThat(tags.value.first().tag).isEqualTo("ruby")
|
||||
assertThat(tags.value.first().description).isEqualTo("Ruby programming")
|
||||
}
|
||||
}
|
||||
|
|
|
@ -12,6 +12,7 @@ import com.slack.eithernet.test.enqueue
|
|||
import dev.msfjarvis.claw.api.converters.CSRFTokenConverter
|
||||
import dev.msfjarvis.claw.model.LobstersPost
|
||||
import dev.msfjarvis.claw.model.LobstersPostDetails
|
||||
import dev.msfjarvis.claw.model.Tag
|
||||
import dev.msfjarvis.claw.model.User
|
||||
import dev.msfjarvis.claw.util.TestUtils.getResource
|
||||
import kotlinx.serialization.ExperimentalSerializationApi
|
||||
|
@ -31,6 +32,8 @@ class ApiWrapper(controller: EitherNetController<LobstersApi>) {
|
|||
json.decodeFromString(getResource("post_details_tdfoqh.json"))
|
||||
private val user: User = json.decodeFromString(getResource("msfjarvis.json"))
|
||||
|
||||
private val tags: List<Tag> = json.decodeFromString(getResource("tags.json"))
|
||||
|
||||
val api = controller.api
|
||||
|
||||
init {
|
||||
|
@ -38,6 +41,7 @@ class ApiWrapper(controller: EitherNetController<LobstersApi>) {
|
|||
controller.enqueue(LobstersApi::getHottestPosts) { success(hottest) }
|
||||
controller.enqueue(LobstersApi::getPostDetails) { success(postDetails) }
|
||||
controller.enqueue(LobstersApi::getUser) { success(user) }
|
||||
controller.enqueue(LobstersApi::getTags) { success(tags) }
|
||||
controller.enqueue(LobstersApi::getCSRFToken) {
|
||||
success(
|
||||
CSRFTokenConverter.convert(
|
||||
|
|
1
api/src/test/resources/tags.json
Normal file
1
api/src/test/resources/tags.json
Normal file
File diff suppressed because one or more lines are too long
23
model/src/main/kotlin/dev/msfjarvis/claw/model/Tag.kt
Normal file
23
model/src/main/kotlin/dev/msfjarvis/claw/model/Tag.kt
Normal file
|
@ -0,0 +1,23 @@
|
|||
/*
|
||||
* Copyright © Harsh Shandilya.
|
||||
* Use of this source code is governed by an MIT-style
|
||||
* license that can be found in the LICENSE file or at
|
||||
* https://opensource.org/licenses/MIT.
|
||||
*/
|
||||
package dev.msfjarvis.claw.model
|
||||
|
||||
import dev.drewhamilton.poko.Poko
|
||||
import kotlinx.serialization.SerialName
|
||||
import kotlinx.serialization.Serializable
|
||||
|
||||
@Serializable
|
||||
@Poko
|
||||
class Tag(
|
||||
val tag: String,
|
||||
val description: String,
|
||||
val privileged: Boolean,
|
||||
val active: Boolean,
|
||||
val category: String,
|
||||
@SerialName("is_media") val isMedia: Boolean,
|
||||
@SerialName("hotness_mod") val hotnessMod: Double,
|
||||
)
|
Loading…
Add table
Add a link
Reference in a new issue