diff --git a/build.gradle.kts b/build.gradle.kts
index 3167bb1..3ff45d1 100644
--- a/build.gradle.kts
+++ b/build.gradle.kts
@@ -6,7 +6,7 @@ plugins {
id("io.micronaut.application") version "2.0.2"
}
-version = "1.0.1"
+version = "1.0.2"
group = "com.jsonblob"
val kotlinVersion= project.properties["kotlinVersion"]
diff --git a/src/main/kotlin/jsonblob/api/http/ApiController.kt b/src/main/kotlin/jsonblob/api/http/ApiController.kt
index afd17e8..d0586aa 100644
--- a/src/main/kotlin/jsonblob/api/http/ApiController.kt
+++ b/src/main/kotlin/jsonblob/api/http/ApiController.kt
@@ -157,7 +157,7 @@ class ApiController(
return false
}
- private fun delete(blobId: String) = jsonBlobStore.remove(blobId)
+ private fun delete(blobId: String) = jsonBlobStore.exists(blobId) && jsonBlobStore.remove(blobId)
private fun updateFirstBlobFromPath(path: String, json: String): JsonBlob? {
val ids = blobIdsFromPath(path)
@@ -169,17 +169,21 @@ class ApiController(
}
private fun update(blobId: String, json: String): JsonBlob? {
- val resolver = idResolvers.firstOrNull { it.handles(blobId) }
- return if (resolver != null) {
- val created = resolver.resolveTimestamp(blobId)
- val jsonBlob = JsonBlob(
- id = blobId,
- json = json,
- created = created
- )
- jsonBlobStore.write(jsonBlob)
+ if (JsonCleaner.validJson(json)) {
+ val resolver = idResolvers.firstOrNull { it.handles(blobId) }
+ return if (resolver != null) {
+ val created = resolver.resolveTimestamp(blobId)
+ val jsonBlob = JsonBlob(
+ id = blobId,
+ json = json,
+ created = created
+ )
+ jsonBlobStore.write(jsonBlob)
+ } else {
+ null
+ }
} else {
- null
+ throw HttpStatusException(HttpStatus.BAD_REQUEST, "Invalid JSON")
}
}
diff --git a/src/main/kotlin/jsonblob/core/store/JsonBlobStore.kt b/src/main/kotlin/jsonblob/core/store/JsonBlobStore.kt
index 13c7fe2..2f1573f 100644
--- a/src/main/kotlin/jsonblob/core/store/JsonBlobStore.kt
+++ b/src/main/kotlin/jsonblob/core/store/JsonBlobStore.kt
@@ -32,7 +32,7 @@ abstract class JsonBlobStore(
created = created
)
}.onFailure {
- log.warn { "Couldn't read JsonBlob with id=$id " }
+ log.debug { "Couldn't read JsonBlob with id=$id " }
}.getOrNull()
}
diff --git a/src/main/kotlin/jsonblob/core/store/file/FileSystemJsonBlobStore.kt b/src/main/kotlin/jsonblob/core/store/file/FileSystemJsonBlobStore.kt
index e0a615d..5e80f6d 100644
--- a/src/main/kotlin/jsonblob/core/store/file/FileSystemJsonBlobStore.kt
+++ b/src/main/kotlin/jsonblob/core/store/file/FileSystemJsonBlobStore.kt
@@ -58,7 +58,7 @@ open class FileSystemJsonBlobStore(
lock.unlock()
}
}.onFailure {
- log.warn { "Couldn't retrieve JsonBlob with id=$id " }
+ log.debug { "Couldn't retrieve JsonBlob with id=$id " }
}.getOrNull()
}
diff --git a/src/main/resources/views/editor.hbs b/src/main/resources/views/editor.hbs
index dc0ea84..07a44a7 100644
--- a/src/main/resources/views/editor.hbs
+++ b/src/main/resources/views/editor.hbs
@@ -289,7 +289,6 @@
\ No newline at end of file
diff --git a/src/test/kotlin/jsonblob/api/http/ApiTest.kt b/src/test/kotlin/jsonblob/api/http/ApiTest.kt
index ed8e173..e5a0739 100644
--- a/src/test/kotlin/jsonblob/api/http/ApiTest.kt
+++ b/src/test/kotlin/jsonblob/api/http/ApiTest.kt
@@ -8,23 +8,20 @@ import io.micronaut.http.HttpResponse
import io.micronaut.http.MediaType
import io.micronaut.http.client.HttpClient
import io.micronaut.http.client.annotation.Client
+import io.micronaut.http.client.exceptions.HttpClientResponseException
import io.micronaut.test.extensions.junit5.annotation.MicronautTest
import io.micronaut.test.support.TestPropertyProvider
-import jsonblob.config.S3ClientBuilderListener
import jsonblob.core.compression.compressor.GZIPBlobCompressor
import jsonblob.core.id.Type1UUIDJsonBlobHandler
import jsonblob.core.store.JsonBlobStore
import mu.KotlinLogging
import org.assertj.core.api.Assertions.assertThat
-import org.junit.jupiter.api.AfterAll
-import org.junit.jupiter.api.BeforeAll
+import org.assertj.core.api.Assertions.assertThatThrownBy
import org.junit.jupiter.api.Test
import org.junit.jupiter.api.TestInstance
import org.skyscreamer.jsonassert.JSONAssert.assertEquals
-import org.testcontainers.containers.localstack.LocalStackContainer
import org.testcontainers.shaded.com.google.common.io.Files
-import org.testcontainers.utility.DockerImageName
-import software.amazon.awssdk.services.s3.S3Client
+import java.util.UUID
import javax.inject.Inject
@@ -129,6 +126,24 @@ class ApiTest: TestPropertyProvider {
}
}
+ @Test
+ fun `blob is created on API PUT`() {
+ val resp = client
+ .toBlocking()
+ .exchange(PUT("/api/jsonBlob/${type1UUIDJsonBlobHandler.generate()}", json).contentType(MediaType.APPLICATION_JSON_TYPE), String::class.java)
+ assertThat(resp.code()).isEqualTo(200)
+ }
+
+ @Test
+ fun `blob is not created on bad API PUT`() {
+ assertThatThrownBy {
+ client
+ .toBlocking()
+ .exchange(PUT("/api/jsonBlob/${UUID.randomUUID()}", json).contentType(MediaType.APPLICATION_JSON_TYPE), String::class.java)
+
+ }.isInstanceOf(HttpClientResponseException::class.java)
+ }
+
@Test
fun `blob is updated on custom API PUT`() {
validateUpdate {