All Downloads are FREE. Search and download functionalities are using the official Maven repository.

kite.lightningserver.shared.0.9.5.source-code.SerializationTest.kt Maven / Gradle / Ivy

@file:OptIn(ExperimentalSerializationApi::class)

package com.lightningkite.lightningdb

import kotlinx.serialization.*
import kotlinx.serialization.json.Json
import kotlinx.serialization.properties.Properties
import kotlinx.serialization.properties.decodeFromStringMap
import kotlinx.serialization.properties.encodeToStringMap
import org.junit.Test
import java.time.Instant
import java.util.*
import kotlin.test.assertEquals

class SerializationTest {
    val myJson = Json {
        serializersModule = ClientModule
    }
    val myProperties = Properties(ClientModule)

    init {
        prepareModels()
    }

    @Test fun writeThing() {
        val out = Partial()
        LargeTestModel.path.embeddedNullable.notNull.value1
            .setMap(LargeTestModel(embeddedNullable = ClassUsedForEmbedding()), out)
        println(out)
    }

    @Test fun partial() {
        val serializer = PartialSerializer(User.serializer())
        val part = partialOf(
            "_id" to UUID.randomUUID(),
            "email" to "[email protected]"
        )
        val asText = myJson.encodeToString(serializer, part)
        println(asText)
        println(myJson.decodeFromString(serializer, asText))
        println(myJson.decodeFromString(serializer, """{"age": 23}"""))
    }

    @Test fun partial2() {
        val serializer = PartialSerializer(LargeTestModel.serializer())
        val part = partialOf(
            "embedded" to partialOf(
                "value2" to 4
            ),
            "int" to 5
        )
        val asText = myJson.encodeToString(serializer, part)
        println(asText)
        println(myJson.decodeFromString(serializer, asText))
        println(myJson.decodeFromString(serializer, """{"embedded": { "value1": "Test" }}"""))
    }
    @Test fun partial3() {
        val serializer = serializer>()
        val item = QueryPartial(
            fields = setOf(
                path().int,
                path().embeddedNullable.notNull.value1,
            )
        )
        val asText = myJson.encodeToString(serializer, item)
        println(asText)
        val restored = myJson.decodeFromString(serializer, asText)
        assertEquals(item, restored)
    }

    @Test fun oldSearchStyle() {
        myJson.decodeFromString>("""
            { "Search": { "value": "asdf" } }
        """.trimIndent())
    }

    @Test fun executionTest() {
        val modification = modification { it.age assign 22 }
        val model = User(email = "[email protected]")
        assertEquals(22, modification(model).age)
    }

    @Test fun demoConditions() {
        Condition.Equal(2).cycle()
        (path().email eq "Dan").cycle()
        (path().email eq "Dan").cycle()
        (path().content eq "Lightning Kite").cycle()
    }
    @Test fun demoModifications() {
        Modification.Assign(2).cycle()
        modification { it.email assign "Dan" }.cycle()
        modification { it.content assign "Lightning Kite" }.cycle()
    }
    @Test fun demoSorts() {
        listOf(SortPart(User::email), SortPart(User::age, ascending = false)).cycle()
        listOf(SortPart(User::email, ignoreCase = true), SortPart(User::age, ascending = false)).cycle()
    }
    @Test fun hackTest() {
        println(serializer>().listElement())
        println(serializer>().mapValueElement())
        println(serializer().nullElement())
    }

    @Test fun cursedTest() {
        condition> { it.item eq 2 }.cycle()
        condition { it.insideClass.item eq UUID.randomUUID() }.cycle()
    }

    @Test fun metaTest() {
        condition { it.number eq 22 }.cycle()
        condition { it.condition eq condition { it.number eq 22 } }.cycle()
        modification { it.number assign 22 }.cycle()
        modification { it.condition assign condition { it.number eq 22 } }.cycle()
        modification { it.modification assign modification { it.number assign 22 } }.cycle()
    }

    @Test fun conditions() {
        val sampleCondition = path().int eq 2
        val sampleInstance = LargeTestModel()
        Condition.Never().cycle()
        Condition.Always().cycle()
        Condition.And(listOf(sampleCondition)).cycle()
        Condition.Or(listOf(sampleCondition)).cycle()
        Condition.Not(sampleCondition).cycle()
        Condition.Equal(sampleInstance).cycle()
        Condition.NotEqual(sampleInstance).cycle()
        Condition.Inside(listOf(sampleInstance)).cycle()
        Condition.NotInside(listOf(sampleInstance)).cycle()
        (path().instant gt Instant.now()).cycle()
        (path().int gt 2).cycle()
        (path().int lt 2).cycle()
        (path().int gte 2).cycle()
        (path().int lte 2).cycle()
        (path().string.contains("asdf", ignoreCase = true)).cycle()
        (path().int.allClear(1)).cycle()
        (path().int.allSet(1)).cycle()
        (path().int.anyClear(1)).cycle()
        (path().int.anySet(1)).cycle()
        (path().list.all { it eq 2 }).cycle()
        (path().list.any { it eq 2 }).cycle()
        (path().list.sizesEquals(2)).cycle()
        (path().set.all { it eq 2 }).cycle()
        (path().set.any { it eq 2 }).cycle()
        (path().set.sizesEquals(2)).cycle()
        (path().map.containsKey("asdf")).cycle()
    }

    @Test fun modifications() {
//        ((path().int assign 2) then (path().boolean assign true)).cycle()
        modification {
            it.int assign 2
            it.boolean assign true
        }.cycle()
        modification {it.intNullable.notNull += 1 }.cycle()
        modification {it.int assign 2 }.cycle()
        modification {it.int coerceAtMost 2 }.cycle()
        modification {it.int coerceAtLeast 2 }.cycle()
        modification {it.int += 2 }.cycle()
        modification {it.int *= 2 }.cycle()
        modification {it.string += "asdf" }.cycle()
        modification {it.list += listOf(1, 2, 3) }.cycle()
        modification {it.list.removeAll { it eq 2 } }.cycle()
        modification {it.list.removeAll(listOf(1, 2)) }.cycle()
        modification {it.list.dropFirst() }.cycle()
        modification {it.list.dropLast() }.cycle()
        modification {it.set.removeAll { it eq 2 } }.cycle()
        modification {it.set.removeAll(setOf(1, 2)) }.cycle()
        modification {it.set.dropFirst() }.cycle()
        modification {it.set.dropLast() }.cycle()
        modification {it.list.forEach { it += 2 } }.cycle()
        modification {it.map += mapOf("c" to 3) }.cycle()
        modification {it.map.modifyByKey(mapOf(
            "c" to { it += 1 }
        ))}.cycle()
        modification { it.map.removeKeys(setOf("A")) }.cycle()
    }

    @Test fun keyPaths() {
        path().embeddedNullable.notNull.value1.cycle()
        path().embedded.value1.cycle()
    }

    private inline fun  Condition.cycle() {
        println("----$this----")
        val asString = myJson.encodeToString(this)
        println(asString)
        val recreated = myJson.decodeFromString>(asString)
        println(recreated)
        assertEquals(this, recreated)

        val asString2 = myProperties.encodeToStringMap(this)
        println(asString2)
        val recreated2 = myProperties.decodeFromStringMap>(asString2)
        println(recreated2)
        assertEquals(this, recreated2)

        val inQuery = Query(condition = this)
        val asString3 = myJson.encodeToString(inQuery)
        println("Query: ${asString3}")
        val recreated3 = myJson.decodeFromString>(asString3)
        println("Query: ${recreated3}")
        assertEquals(inQuery, recreated3)
    }
    private inline fun  Modification.cycle() {
        println("----$this----")
        val asString = myJson.encodeToString(this)
        println(asString)
        val recreated = myJson.decodeFromString>(asString)
        println(recreated)
        assertEquals(this, recreated)

        val asString2 = myProperties.encodeToStringMap(this)
        println(asString2)
        val recreated2 = myProperties.decodeFromStringMap>(asString2)
        println(recreated2)
        assertEquals(this, recreated2)
    }
    private inline fun  List>.cycle() {
        println("----$this----")
        val asString = myJson.encodeToString(this)
        println(asString)
        val recreated = myJson.decodeFromString>>(asString)
        println(recreated)
        assertEquals(this, recreated)

        val asString2 = myProperties.encodeToStringMap(this)
        println(asString2)
        val recreated2 = myProperties.decodeFromStringMap>>(asString2)
        println(recreated2)
        assertEquals(this, recreated2)
    }
    private inline fun  DataClassPathPartial.cycle() {
        println("----$this----")
        val asString = myJson.encodeToString(this)
        println(asString)
        val recreated = myJson.decodeFromString>(asString)
        println(recreated)
        assertEquals(this, recreated)
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy