How to use jsonSchema method of io.kotest.assertions.json.schema.JsonSchema class

Best Kotest code snippet using io.kotest.assertions.json.schema.JsonSchema.jsonSchema

BigQuerySchemaTest.kt

Source:BigQuerySchemaTest.kt Github

copy

Full Screen

...6import io.kotest.core.spec.style.FunSpec7import io.kotest.inspectors.shouldForAny8import io.kotest.matchers.shouldBe9import no.vegvesen.saga.modules.gcp.bigquery.BigQuerySchema10val jsonSchemaForRecordsAndArrays = """11[{12    "name": "structField",13    "type": "RECORD",14    "description": "Description of field",15    "mode": "REQUIRED",16    "fields": [17        {18            "mode": "NULLABLE",19            "type": "STRING",20            "name": "stringField",21            "description": "Description of field"22        },23        {24            "name": "structField2",25            "type": "RECORD",26            "description": "Description of field",27            "mode": "REPEATED",28            "fields": [29                {30                    "mode": "NULLABLE",31                    "type": "STRING",32                    "name": "stringField2",33                    "description": "Description of field"34                }35            ]36        }37    ]38}]39""".trimIndent()40val jsonSchemaForStructsAndArrays = """41[{42    "name": "structField",43    "type": "STRUCT",44    "description": "Description of field",45    "mode": "REQUIRED",46    "fields": [47        {48            "mode": "NULLABLE",49            "type": "INT64",50            "name": "int64Field",51            "description": "Description of int64field"52        },53        {54            "name": "structField2",55            "type": "STRUCT",56            "description": "Description of field",57            "mode": "REPEATED",58            "fields": [59                {60                    "mode": "NULLABLE",61                    "type": "GEOGRAPHY",62                    "name": "geoField",63                    "description": "Description of field"64                }65            ]66        }67    ]68}]69""".trimIndent()70// Missing fields definition71val invalidJsonSchemaForStruct = """72[{73    "name": "structField",74    "type": "RECORD",75    "description": "Description of field",76    "mode": "REQUIRED"77}]78""".trimIndent()79enum class SimpleMode {80    REQUIRED,81    NULLABLE82}83fun fieldJson(type: StandardSQLTypeName, mode: SimpleMode) = """84{85   "description": "Test description for field",86   "name": "${type}_${mode}_name",87   "type": "$type",88   "mode": "$mode"89}90""".trimIndent()91fun generateJsonSchemaForSimpleTypes() =92    combineTypes(StandardSQLTypeName.values(), SimpleMode.values())93        .filter { it.first != StandardSQLTypeName.ARRAY && it.first != StandardSQLTypeName.STRUCT }94        .joinToString { (type, mode) -> fieldJson(type, mode) }95        .let { "[ $it ]" }96private fun combineTypes(types: Array<StandardSQLTypeName>, modes: Array<SimpleMode>) = types97    .flatMap { type ->98        modes.map { mode ->99            Pair(type, mode)100        }101    }102class BqQuerySchemaTest : FunSpec({103    test("list of simple field types works as expected") {104        val jsonSchema = generateJsonSchemaForSimpleTypes()105        val schema = BigQuerySchema.fromJsonSchema(jsonSchema)106        schema.fields.size shouldBe 28107        schema.fields.shouldForAny { it.mode == Field.Mode.REQUIRED && it.type == LegacySQLTypeName.STRING }108        schema.fields.shouldForAny { it.mode == Field.Mode.NULLABLE && it.type == LegacySQLTypeName.BOOLEAN }109    }110    test("schema for nested records and arrays is correctly parsed") {111        val jsonSchema = jsonSchemaForRecordsAndArrays112        val schema = BigQuerySchema.fromJsonSchema(jsonSchema)113        schema.fields.size shouldBe 1114        schema.fields["structField"].mode shouldBe Field.Mode.REQUIRED115        schema.fields["structField"].subFields.size shouldBe 2116        schema.fields["structField"].subFields["structField2"].mode shouldBe Field.Mode.REPEATED117        schema.fields["structField"].subFields["structField2"].subFields["stringField2"].mode shouldBe Field.Mode.NULLABLE118        schema.fields["structField"].subFields["structField2"].subFields["stringField2"].description shouldBe "Description of field"119    }120    test("invalid struct schema throws exception") {121        val jsonSchema = invalidJsonSchemaForStruct122        shouldThrow<IllegalArgumentException> {123            BigQuerySchema.fromJsonSchema(jsonSchema)124        }125    }126    test("schema with Standard SQL is correctly parsed") {127        val schema = BigQuerySchema.fromJsonSchema(jsonSchemaForStructsAndArrays)128        schema.fields.size shouldBe 1129        schema.fields["structField"].subFields["int64Field"].description shouldBe "Description of int64field"130    }131})...

Full Screen

Full Screen

build.gradle.kts

Source:build.gradle.kts Github

copy

Full Screen

1import org.jetbrains.kotlin.gradle.tasks.KotlinCompile2plugins {3    kotlin("jvm") version "1.6.21"4    kotlin("plugin.serialization") version "1.6.21"5    jacoco6    application7    `maven-publish`8}9group = "id.walt"10version = "1.19.0-SNAPSHOT"11repositories {12    mavenCentral()13    maven("https://maven.walt.id/repository/waltid/")14}15dependencies {16    /* JSON */17    implementation("org.jetbrains.kotlinx:kotlinx-serialization-json:1.3.2")18    implementation("com.github.victools:jsonschema-generator:4.24.2")19    implementation("com.networknt:json-schema-validator:1.0.69")20    implementation("net.pwall.json:json-kotlin-schema:0.34")21    implementation("com.beust:klaxon:5.6")22    /* Logging */23    implementation("org.lighthousegames:logging-jvm:1.2.0")24    implementation("org.slf4j:slf4j-simple:1.7.36")25    /* Kotlin */26    // Reflection27    implementation("org.jetbrains.kotlin:kotlin-reflect:1.6.21")28    // Kotlin29    implementation("org.jetbrains.kotlin:kotlin-stdlib:1.6.21")30    /* JWT */31    implementation("com.nimbusds:nimbus-jose-jwt:9.22")32    /* Testing */33    testImplementation("io.kotest:kotest-runner-junit5:5.3.0")34    testImplementation("io.kotest:kotest-assertions-core:5.3.0")35    testImplementation("io.kotest:kotest-assertions-json:5.3.0")36}37tasks.withType<Test> {38    useJUnitPlatform()39}40publishing {41    publications {42        create<MavenPublication>("mavenJava") {43            pom {44                name.set("waltid-ssikit-vclib")45                description.set("Typesafe implementation of W3C Verifiable Credentials in order to facilitate interoperability among various applications.")46                url.set("https://walt.id")47            }48            from(components["java"])49        }50    }51    repositories {52        maven {53            url = uri("https://maven.walt.id/repository/waltid-ssi-kit/")54            val usernameFile = File("secret_maven_username.txt")55            val passwordFile = File("secret_maven_password.txt")56            val secretMavenUsername = System.getenv()["SECRET_MAVEN_USERNAME"] ?: if (usernameFile.isFile) { usernameFile.readLines()[0] } else { "" }57            val secretMavenPassword = System.getenv()["SECRET_MAVEN_PASSWORD"] ?: if (passwordFile.isFile) { passwordFile.readLines()[0] } else { "" }58            credentials {59                username = secretMavenUsername60                password = secretMavenPassword61            }62        }63    }64}65java {66    toolchain {67        languageVersion.set(JavaLanguageVersion.of(16))68    }69}70tasks.withType<KotlinCompile> {71    kotlinOptions.jvmTarget = "16"72}73jacoco.toolVersion = "0.8.8"74tasks.jacocoTestReport {75    reports {76        xml.required.set(true)77    }78}...

Full Screen

Full Screen

SchemaServiceImplTest.kt

Source:SchemaServiceImplTest.kt Github

copy

Full Screen

...18import org.factcast.schema.registry.cli.validation.ProjectError19import java.nio.file.Paths20class SchemaServiceImplTest : StringSpec() {21    val fs = mockk<FileSystemService>()22    val jsonSchemaFactory = mockk<JsonSchemaFactory>()23    val schemaMock = mockk<JsonSchema>()24    val jsonNodeMock = mockk<JsonNode>()25    val dummyPath = Paths.get(".")26    val uut = SchemaServiceImpl(fs, jsonSchemaFactory)27    override fun afterTest(testCase: TestCase, result: TestResult) {28        clearAllMocks()29    }30    init {31        "loadSchema for invalid path" {32            every { fs.readToJsonNode(dummyPath) } returns null33            uut.loadSchema(dummyPath).shouldBeLeft().also {34                it.shouldBeInstanceOf<ProjectError.NoSuchFile>()35            }36            verifyAll {37                fs.readToJsonNode(dummyPath)38            }39        }40        "loadSchema for corrupted schema" {41            every { fs.readToJsonNode(dummyPath) } returns jsonNodeMock42            every { jsonSchemaFactory.getJsonSchema(any<JsonNode>()) } throws ProcessingException("")43            uut.loadSchema(dummyPath).shouldBeLeft().also {44                it.shouldBeInstanceOf<ProjectError.CorruptedSchema>()45            }46            verifyAll {47                fs.readToJsonNode(dummyPath)48                jsonSchemaFactory.getJsonSchema(any<JsonNode>())49            }50        }51        "loadSchema for valid schema" {52            every { fs.readToJsonNode(dummyPath) } returns jsonNodeMock53            every { jsonSchemaFactory.getJsonSchema(any<JsonNode>()) } returns schemaMock54            uut.loadSchema(dummyPath).shouldBeRight().also {55                it shouldBe schemaMock56            }57            verifyAll {58                fs.readToJsonNode(dummyPath)59                jsonSchemaFactory.getJsonSchema(any<JsonNode>())60            }61        }62    }63}...

Full Screen

Full Screen

json.kt

Source:json.kt Github

copy

Full Screen

1package com.acme.web.test2import com.github.fge.jackson.JsonLoader3import com.github.fge.jsonschema.SchemaVersion4import com.github.fge.jsonschema.cfg.ValidationConfiguration5import com.github.fge.jsonschema.core.report.ListProcessingReport6import com.github.fge.jsonschema.main.JsonSchemaFactory7import io.kotest.assertions.assertionCounter8import io.kotest.assertions.failure9import io.kotest.assertions.json.shouldEqualJson10import io.kotest.common.runBlocking11import io.ktor.client.call.body12import io.ktor.client.statement.HttpResponse13import kotlinx.serialization.json.Json14import kotlinx.serialization.json.JsonElement15import kotlinx.serialization.json.JsonObject16import kotlinx.serialization.json.jsonArray17import kotlinx.serialization.json.jsonObject18import kotlinx.serialization.json.jsonPrimitive19@Suppress("ObjectPropertyName")20val JsonElement._links get() = this.jsonObject["_links"]!!.jsonObject21val JsonObject.self get() = this["self"]!!.jsonObject22val JsonObject.href get() = this["href"]!!.jsonPrimitive.content23val JsonObject.items get() = this["items"]!!.jsonArray.map { it.jsonObject }24private val schemaFactory = JsonSchemaFactory.newBuilder().setValidationConfiguration(25  ValidationConfiguration.newBuilder().setDefaultVersion(26    SchemaVersion.DRAFTV427  ).freeze()28).freeze()29suspend fun HttpResponse.json() = Json.parseToJsonElement(body())30suspend fun HttpResponse.firstLinkedItemHref() = json()._links.items.first().href31infix fun HttpResponse.shouldEqualJson(json: String) =32  runBlocking {33    body<String>() shouldEqualJson json34  }35infix fun HttpResponse.shouldMatchJsonSchema(schema: String) =36  runBlocking {37    body<String>() shouldMatchJsonSchema schema38  }39infix fun String.shouldMatchJsonSchema(schema: String) {40  assertionCounter.inc()41  val schemaJson = JsonLoader.fromString(schema.trimIndent())42  val contentJson = JsonLoader.fromString(this)43  val report = schemaFactory.getJsonSchema(schemaJson).validate(contentJson) as ListProcessingReport44  if (!report.isSuccess) {45    failure(report.asJson().toPrettyString())46  }47}...

Full Screen

Full Screen

jsonSchema

Using AI Code Generation

copy

Full Screen

1val json = """{"name": "John", "age": 30}"""2val schema = """{"type": "object", "properties": {"name": {"type": "string"}, "age": {"type": "number"}}}"""3jsonSchema(schema, json)4val json = """{"name": "John", "age": 30}"""5val schema = """{"type": "object", "properties": {"name": {"type": "string"}, "age": {"type": "number"}}}"""6jsonSchema(schema, json, errorMessage)7val json = """{"name": "John", "age": 30}"""8val schema = """{"type": "object", "properties": {"name": {"type": "string"}, "age": {"type": "number"}}}"""9val errorMessage = { "Custom error message" }10jsonSchema(schema, json, errorMessage)11val json = """{"name": "John", "age": 30}"""12val schemaFile = File("path/to/jsonSchema.json")13jsonSchema(schemaFile, json)14val json = """{"name": "John", "age": 30}"""15val schemaFile = File("path/to/jsonSchema.json")16jsonSchema(schemaFile, json, errorMessage)17val json = """{"name": "John", "age": 30}"""18val schemaFile = File("path/to/jsonSchema.json")19val errorMessage = { "Custom error message" }

Full Screen

Full Screen

Automation Testing Tutorials

Learn to execute automation testing from scratch with LambdaTest Learning Hub. Right from setting up the prerequisites to run your first automation test, to following best practices and diving deeper into advanced test scenarios. LambdaTest Learning Hubs compile a list of step-by-step guides to help you be proficient with different test automation frameworks i.e. Selenium, Cypress, TestNG etc.

LambdaTest Learning Hubs:

YouTube

You could also refer to video tutorials over LambdaTest YouTube channel to get step by step demonstration from industry experts.

Try LambdaTest Now !!

Get 100 minutes of automation test minutes FREE!!

Next-Gen App & Browser Testing Cloud

Was this article helpful?

Helpful

NotHelpful