feat: add get tags endpoint

This commit is contained in:
Harsh Shandilya 2025-06-05 22:28:23 +05:30
parent d69629c319
commit a0f044786f
5 changed files with 41 additions and 0 deletions

View file

@ -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"
}

View file

@ -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")
}
}

View file

@ -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(

File diff suppressed because one or more lines are too long

View 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,
)