Skip to content
Snippets Groups Projects
XMLDeserializerDatabaseTest.kt 4.15 KiB
package unibz.cs.semint.kprime.usecase.serialize

import org.junit.Test
import unibz.cs.semint.kprime.adapter.service.XMLSerializerJacksonAdapter
import unibz.cs.semint.kprime.domain.ddl.Database
import unibz.cs.semint.kprime.usecase.common.SQLizeSelectUseCase
import unibz.cs.semint.kprime.usecase.common.UnSQLizeSelectUseCase
import unibz.cs.semint.kprime.usecase.common.XMLSerializeUseCase
import java.io.File
import kotlin.test.assertEquals
import kotlin.test.assertNotNull

class XMLDeserializerDatabaseTest {

    @Test
    fun test_deserialize_depemp_database(){
        //given
        val serializer = XMLSerializeUseCase(XMLSerializerJacksonAdapter())
        val fileContent = File("target/test-classes/depemp.xml")
            .readLines().joinToString(System.lineSeparator())
        // when
        val deserialized = serializer.deserializeDatabase(fileContent)
        // then
        assertNotNull(deserialized)
        assertEquals("univ",deserialized.ok!!.schema.tables()[0].name)

    }

    @Test
    fun test_deserialize_mapping_database(){
        //given
        val serializer = XMLSerializeUseCase(XMLSerializerJacksonAdapter())
        val fileContent = """
            <database name="dbname" id="iddb">
              <schema name="" id="idschema">
                <tables>
                  <tables name="" id="" view="" condition="">
                    <columns>
                        <columns name="SSN" id="" dbname=""/>
                        <columns name="Name" id="" dbname=""/>
                        <columns name="DepName" id="" dbname=""/>
                        <columns name="DepAddress" id="" dbname=""/>
                    </columns>
                </tables>
                </tables>
                <constraints>
                    <constraints name="depname-has-address-depaddress" id="" type="">
                        <source name="" id="" table="">
                            <columns>
                                <columns name="DepName" id="" dbname=""/>
                            </columns>
                        </source>
                        <target name="" id="" table="">
                            <columns>
                                <columns name="DepAddress" id="" dbname=""/>
                            </columns>
                        </target>
                    </constraints>
                </constraints>
              </schema>
              <mappings>
                <query name="query1">
                  <select>
                    <attributes>
                      <attributes name="name"/>
                    </attributes>
                    <from>
                      <from tableName="people" alias=""/>
                    </from>
                    <where condition=""/>
                  </select>
                </query>
                <query name="query3">
                  <select>
                    <attributes>
                      <attributes name="name"/>
                    </attributes>
                    <from>
                      <from tableName="people" alias=""/>
                    </from>
                    <where condition=""/>
                  </select>
                </query>
              </mappings>
            </database>
        """.trimIndent()
        // when
        val deserialized = serializer.deserializeDatabase(fileContent)
        // then
        assertNotNull(deserialized)
        assertNotNull(deserialized.ok)
        val database = deserialized.ok as Database
        assertNotNull(database.mappings)
        assertEquals(database.mappings().size,2)
        assertNotNull(database.mapping("query1"))
        assertEquals("people",deserialized!!.ok!!.mapping("query1")!!.select!!.from[0]?.tableName)

        val db = deserialized.ok!!

        db.mappings().add(UnSQLizeSelectUseCase().fromsql("query2","""
            SELECT *  
            FROM alias 
        """.trimIndent()))

        assertEquals(3, db.mappings().size)
        assertNotNull(database.mapping("query2"))
        assertEquals("*",deserialized!!.ok!!.mapping("query2")!!.select!!.attributes[0]?.name)
        assertEquals("alias",deserialized!!.ok!!.mapping("query2")!!.select!!.from[0]?.tableName)

    }

}