Skip to content
Snippets Groups Projects
XMLDeserializerDatabaseTest.kt 4.09 KiB
Newer Older
npedot's avatar
npedot committed
package unibz.cs.semint.kprime.usecase.serialize

import org.junit.Test
import unibz.cs.semint.kprime.adapter.service.XMLSerializerJacksonAdapter
npedot's avatar
npedot committed
import unibz.cs.semint.kprime.domain.ddl.Database
npedot's avatar
npedot committed
import unibz.cs.semint.kprime.usecase.common.SQLizeUseCase
import unibz.cs.semint.kprime.usecase.common.XMLSerializeUseCase
npedot's avatar
npedot committed
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)
npedot's avatar
npedot committed
        assertEquals("univ",deserialized.ok!!.schema.tables()[0].name)
npedot's avatar
npedot committed

    }
npedot's avatar
npedot committed

    @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>
npedot's avatar
npedot committed
              <mappings>
                <query name="query1">
npedot's avatar
npedot committed
                  <select>
                    <attributes>
                      <attributes name="name"/>
                    </attributes>
                    <from>
                      <from tableName="people" alias="" joinOn=""/>
                    </from>
                    <where condition=""/>
                  </select>
npedot's avatar
npedot committed
                </query>
                <query name="query3">
                  <select>
                    <attributes>
                      <attributes name="name"/>
                    </attributes>
                    <from>
                      <from tableName="people" alias="" joinOn=""/>
                    </from>
                    <where condition=""/>
                  </select>
                </query>
              </mappings>
npedot's avatar
npedot committed
            </database>
        """.trimIndent()
        // when
        val deserialized = serializer.deserializeDatabase(fileContent)
        // then
        assertNotNull(deserialized)
        assertNotNull(deserialized.ok)
npedot's avatar
npedot committed
        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)
npedot's avatar
npedot committed

        val db = deserialized.ok!!

npedot's avatar
npedot committed
        db.mappings().add(SQLizeUseCase().fromsql("query2","""
npedot's avatar
npedot committed
            SELECT *  
            FROM alias 
npedot's avatar
npedot committed
        """.trimIndent()))
npedot's avatar
npedot committed

npedot's avatar
npedot committed
        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)
npedot's avatar
npedot committed
}