mirror of
https://github.com/iSoron/uhabits.git
synced 2025-12-06 17:18:52 -06:00
Minor fixes to sync protocol
This commit is contained in:
@@ -19,33 +19,34 @@
|
||||
|
||||
package org.isoron.uhabits.sync
|
||||
|
||||
import kotlinx.coroutines.*
|
||||
import org.junit.Test
|
||||
import kotlin.test.*
|
||||
|
||||
class MemorySyncServerTest {
|
||||
|
||||
private val server = MemorySyncServer()
|
||||
private val key = server.register()
|
||||
private val key = runBlocking { server.register() }
|
||||
|
||||
@Test
|
||||
fun testUsage() {
|
||||
fun testUsage(): Unit = runBlocking {
|
||||
val data0 = SyncData(0, "")
|
||||
assertEquals(server.get(key), data0)
|
||||
assertEquals(server.getData(key), data0)
|
||||
|
||||
val data1 = SyncData(1, "Hello world")
|
||||
server.put(key, data1)
|
||||
assertEquals(server.get(key), data1)
|
||||
assertEquals(server.getData(key), data1)
|
||||
|
||||
val data2 = SyncData(2, "Hello new world")
|
||||
server.put(key, data2)
|
||||
assertEquals(server.get(key), data2)
|
||||
assertEquals(server.getData(key), data2)
|
||||
|
||||
assertFailsWith<EditConflictException> {
|
||||
server.put(key, data2)
|
||||
}
|
||||
|
||||
assertFailsWith<KeyNotFoundException> {
|
||||
server.get("INVALID")
|
||||
server.getData("INVALID")
|
||||
}
|
||||
|
||||
assertFailsWith<KeyNotFoundException> {
|
||||
|
||||
@@ -21,6 +21,7 @@ package org.isoron.uhabits.sync.app
|
||||
|
||||
import io.ktor.http.*
|
||||
import io.ktor.server.testing.*
|
||||
import kotlinx.coroutines.*
|
||||
import org.isoron.uhabits.sync.*
|
||||
import org.junit.Test
|
||||
import org.mockito.*
|
||||
@@ -29,7 +30,7 @@ import kotlin.test.*
|
||||
|
||||
class RegistrationModuleTest : BaseApplicationTest() {
|
||||
@Test
|
||||
fun `when register succeeds should return generated key`() {
|
||||
fun `when register succeeds should return generated key`():Unit = runBlocking {
|
||||
`when`(server.register()).thenReturn("ABCDEF")
|
||||
withTestApplication(app()) {
|
||||
val call = handleRequest(HttpMethod.Post, "/register")
|
||||
@@ -39,8 +40,8 @@ class RegistrationModuleTest : BaseApplicationTest() {
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `when registration is unavailable should return 503`() {
|
||||
`when`(server.register()).thenThrow(RegistrationUnavailableException())
|
||||
fun `when registration is unavailable should return 503`():Unit = runBlocking {
|
||||
`when`(server.register()).thenThrow(ServiceUnavailable())
|
||||
withTestApplication(app()) {
|
||||
val call = handleRequest(HttpMethod.Post, "/register")
|
||||
assertEquals(HttpStatusCode.ServiceUnavailable, call.response.status())
|
||||
|
||||
@@ -21,6 +21,7 @@ package org.isoron.uhabits.sync.app
|
||||
|
||||
import io.ktor.http.*
|
||||
import io.ktor.server.testing.*
|
||||
import kotlinx.coroutines.*
|
||||
import org.isoron.uhabits.sync.*
|
||||
import org.junit.Test
|
||||
import org.mockito.Mockito.*
|
||||
@@ -31,8 +32,8 @@ class StorageModuleTest : BaseApplicationTest() {
|
||||
private val data2 = SyncData(2, "Hello new world")
|
||||
|
||||
@Test
|
||||
fun `when get succeeds should return data`() {
|
||||
`when`(server.get("k1")).thenReturn(data1)
|
||||
fun `when get succeeds should return data`(): Unit = runBlocking {
|
||||
`when`(server.getData("k1")).thenReturn(data1)
|
||||
withTestApplication(app()) {
|
||||
handleGet("/db/k1").apply {
|
||||
assertEquals(HttpStatusCode.OK, response.status())
|
||||
@@ -42,19 +43,19 @@ class StorageModuleTest : BaseApplicationTest() {
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `when get version succeeds should return version`() {
|
||||
`when`(server.get("k1")).thenReturn(data1)
|
||||
fun `when get version succeeds should return version`(): Unit = runBlocking {
|
||||
`when`(server.getDataVersion("k1")).thenReturn(30)
|
||||
withTestApplication(app()) {
|
||||
handleGet("/db/k1/version").apply {
|
||||
assertEquals(HttpStatusCode.OK, response.status())
|
||||
assertEquals("1", response.content)
|
||||
assertEquals(GetDataVersionResponse(30).toJson(), response.content)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `when get with invalid key should return 404`() {
|
||||
`when`(server.get("k1")).thenThrow(KeyNotFoundException())
|
||||
fun `when get with invalid key should return 404`(): Unit = runBlocking {
|
||||
`when`(server.getData("k1")).thenThrow(KeyNotFoundException())
|
||||
withTestApplication(app()) {
|
||||
handleGet("/db/k1").apply {
|
||||
assertEquals(HttpStatusCode.NotFound, response.status())
|
||||
@@ -64,17 +65,19 @@ class StorageModuleTest : BaseApplicationTest() {
|
||||
|
||||
|
||||
@Test
|
||||
fun `when put succeeds should return OK`() {
|
||||
fun `when put succeeds should return OK`(): Unit = runBlocking {
|
||||
withTestApplication(app()) {
|
||||
handlePut("/db/k1", data1).apply {
|
||||
assertEquals(HttpStatusCode.OK, response.status())
|
||||
verify(server).put("k1", data1)
|
||||
runBlocking {
|
||||
assertEquals(HttpStatusCode.OK, response.status())
|
||||
verify(server).put("k1", data1)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `when put with invalid key should return 404`() {
|
||||
fun `when put with invalid key should return 404`(): Unit = runBlocking {
|
||||
`when`(server.put("k1", data1)).thenThrow(KeyNotFoundException())
|
||||
withTestApplication(app()) {
|
||||
handlePut("/db/k1", data1).apply {
|
||||
@@ -84,13 +87,12 @@ class StorageModuleTest : BaseApplicationTest() {
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `when put with invalid version should return 409 and current data`() {
|
||||
fun `when put with invalid version should return 409 and current data`(): Unit = runBlocking {
|
||||
`when`(server.put("k1", data1)).thenThrow(EditConflictException())
|
||||
`when`(server.get("k1")).thenReturn(data2)
|
||||
`when`(server.getData("k1")).thenReturn(data2)
|
||||
withTestApplication(app()) {
|
||||
handlePut("/db/k1", data1).apply {
|
||||
assertEquals(HttpStatusCode.Conflict, response.status())
|
||||
assertEquals(data2.toJson(), response.content)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user