model: init

Signed-off-by: Harsh Shandilya <me@msfjarvis.dev>
This commit is contained in:
Harsh Shandilya 2020-09-22 13:47:06 +05:30
parent ee07f8391c
commit 4a363200a0
No known key found for this signature in database
GPG key ID: 366D7BBAD1031E80
11 changed files with 30 additions and 13 deletions

View file

@ -6,9 +6,7 @@ plugins {
dependencies {
def moshi_version = "1.9.3"
def retrofit_version = "2.9.0"
kapt "com.squareup.moshi:moshi-kotlin-codegen:$moshi_version"
implementation "com.squareup.moshi:moshi:$moshi_version"
implementation "com.squareup.moshi:moshi-kotlin:$moshi_version"
implementation project(":model")
implementation "com.squareup.retrofit2:converter-moshi:$retrofit_version"
implementation "com.squareup.retrofit2:retrofit:$retrofit_version"
kaptTest "com.squareup.moshi:moshi-kotlin-codegen:$moshi_version"

View file

@ -1,10 +1,10 @@
package dev.msfjarvis.lobsters.api
import dev.msfjarvis.lobsters.api.model.LobstersPost
import dev.msfjarvis.lobsters.model.LobstersPost
import retrofit2.Call
import retrofit2.http.GET
interface LobstersApi {
@GET("hottest.json")
fun getHottestPosts(): Call<List<LobstersPost>>
fun getHottestPosts(): Call<List<dev.msfjarvis.lobsters.model.LobstersPost>>
}

View file

@ -1,12 +0,0 @@
package dev.msfjarvis.lobsters.api.model
import com.squareup.moshi.Json
import com.squareup.moshi.JsonClass
@JsonClass(generateAdapter = true)
class KeybaseSignature(
@Json(name = "kb_username")
val kbUsername: String,
@Json(name = "sig_hash")
val sigHash: String
)

View file

@ -1,26 +0,0 @@
package dev.msfjarvis.lobsters.api.model
import com.squareup.moshi.Json
import com.squareup.moshi.JsonClass
@JsonClass(generateAdapter = true)
class LobstersPost(
@Json(name = "short_id")
val shortId: String,
@Json(name = "short_id_url")
val shortIdUrl: String,
@Json(name = "created_at")
val createdAt: String,
val title: String,
val url: String,
val score: Long,
val flags: Long,
@Json(name = "comment_count")
val commentCount: Long,
val description: String,
@Json(name = "comments_url")
val commentsUrl: String,
@Json(name = "submitter_user")
val submitterUser: Submitter,
val tags: List<String>
)

View file

@ -1,27 +0,0 @@
package dev.msfjarvis.lobsters.api.model
import com.squareup.moshi.Json
import com.squareup.moshi.JsonClass
@JsonClass(generateAdapter = true)
class Submitter(
val username: String,
@Json(name = "created_at")
val createdAt: String,
@Json(name = "is_admin")
val isAdmin: Boolean,
val about: String,
@Json(name = "is_moderator")
val isModerator: Boolean,
val karma: Long,
@Json(name = "avatar_url")
val avatarUrl: String,
@Json(name = "invited_by_user")
val invitedByUser: String,
@Json(name = "github_username")
val githubUsername: String?,
@Json(name = "twitter_username")
val twitterUsername: String?,
@Json(name = "keybase_signatures")
val keybaseSignatures: List<KeybaseSignature>?
)

View file

@ -1,6 +1,6 @@
package dev.msfjarvis.lobsters.api
import dev.msfjarvis.lobsters.api.model.LobstersPost
import dev.msfjarvis.lobsters.model.LobstersPost
import okhttp3.mockwebserver.Dispatcher
import okhttp3.mockwebserver.MockResponse
import okhttp3.mockwebserver.MockWebServer
@ -31,17 +31,17 @@ class LobstersApiTest {
@Test
fun `api gets correct number of items`() {
apiClient.getHottestPosts().enqueue(object : Callback<List<LobstersPost>> {
apiClient.getHottestPosts().enqueue(object : Callback<List<dev.msfjarvis.lobsters.model.LobstersPost>> {
override fun onResponse(
call: Call<List<LobstersPost>>,
response: Response<List<LobstersPost>>
call: Call<List<dev.msfjarvis.lobsters.model.LobstersPost>>,
response: Response<List<dev.msfjarvis.lobsters.model.LobstersPost>>
) {
val posts = response.body()
require(posts != null)
assertEquals(25, posts.size)
}
override fun onFailure(call: Call<List<LobstersPost>>, t: Throwable) {
override fun onFailure(call: Call<List<dev.msfjarvis.lobsters.model.LobstersPost>>, t: Throwable) {
fail("Call cannot fail in tests")
}
})