package com.fitbank.schemautils;

import junit.framework.TestCase;
import org.apache.commons.lang.StringUtils;

public class TestSchema extends TestCase {

    public void testLoad() {
        assertNotNull(Schema.get());

        assertTrue(!Schema.get().getTables().isEmpty());
    }

    public void testTIDIOMAS() {
        Table tidiomas = Schema.get().getTables().get("TIDIOMAS");

        assertNotNull(tidiomas);
        assertEquals(6, tidiomas.getFields().size());
        assertEquals(3, tidiomas.getPrimaryKeys().size());
        assertEquals(4, tidiomas.getPrimaryKeysAsArrayForComboBox().length);
        assertEquals("137", tidiomas.getCode());
        assertEquals("TIDIOMAS", tidiomas.getName());
        assertTrue(StringUtils.isNotBlank(tidiomas.getDescription()));
    }

    public void testTIDIOMAS_CIDIOMA() {
        Table tidiomas = Schema.get().getTables().get("TIDIOMAS");
        Field field = tidiomas.findField(1);

        assertEquals("CIDIOMA", field.getName());
        assertTrue(StringUtils.isNotBlank(field.getDescription()));
        assertEquals(3, field.getLength());
        assertEquals("001", field.getCode());
        assertEquals(true, field.getPrimaryKey());
        assertEquals(false, field.getRequired());
        assertTrue(field.getParentTables().isEmpty());
        assertFalse(field.getChildTables().isEmpty());
        assertEquals("VARCHAR2(3)", field.getType());
        assertEquals("", field.getDefaultValue());
    }

    public void testRootTable() {
        Table tciudades = Schema.get().getTables().get("TCIUDADES");

        assertEquals("TIDIOMAS", tciudades.getFields().get("CIDIOMA").
                getDescriptionKey().getTable());
        assertEquals("DESCRIPCION", tciudades.getFields().get("CIDIOMA").
                getDescriptionKey().getDescriptionField());
        assertEquals("TPROVINCIAS", tciudades.getFields().get("CPROVINCIA").
                getDescriptionKey().getTable());
        assertEquals("NOMBRE", tciudades.getFields().get("CPROVINCIA").
                getDescriptionKey().getDescriptionField());
        assertEquals("TPAISES", tciudades.getFields().get("CPAIS").
                getDescriptionKey().getTable());
        assertEquals("DESCRIPCION", tciudades.getFields().get("CPAIS").
                getDescriptionKey().getDescriptionField());
    }

    public void testTIDIOMAS_DESCRIPCION() {
        Table tidiomas = Schema.get().getTables().get("TIDIOMAS");
        Field field = tidiomas.findField(3);

        assertEquals("DESCRIPCION", field.getName());
        assertTrue(StringUtils.isNotBlank(field.getDescription()));
        assertEquals(20, field.getLength());
        assertEquals("003", field.getCode());
        assertEquals(false, field.getPrimaryKey());
        assertEquals(false, field.getRequired());
        assertTrue(field.getParentTables().isEmpty());
        assertTrue(field.getChildTables().isEmpty());
        assertEquals("VARCHAR2(20)", field.getType());
        assertEquals("", field.getDefaultValue());
    }

    public void testTIDIOMAS_VERSIONCONTROL() {
        Table tidiomas = Schema.get().getTables().get("TIDIOMAS");
        Field field = tidiomas.findField(6);

        assertEquals("VERSIONCONTROL", field.getName());
        assertTrue(StringUtils.isNotBlank(field.getDescription()));
        assertEquals(22, field.getLength());
        assertEquals("006", field.getCode());
        assertEquals(false, field.getPrimaryKey());
        assertEquals(true, field.getRequired());
        assertTrue(field.getParentTables().isEmpty());
        assertTrue(field.getChildTables().isEmpty());
        assertEquals("NUMBER(22)", field.getType());
        assertEquals("0", field.getDefaultValue());
    }

    public void testTIDIOMASID() {
        Table tidiomasid = Schema.getN().getTables().get("TIDIOMASID");

        assertNotNull(tidiomasid);
        assertEquals(1, tidiomasid.getFields().size());
        assertEquals(1, tidiomasid.getPrimaryKeys().size());
        assertEquals(2, tidiomasid.getPrimaryKeysAsArrayForComboBox().length);
        assertEquals("TIDIOMASID", tidiomasid.getName());
        assertTrue(StringUtils.isNotBlank(tidiomasid.getDescription()));
    }

}
