package simpleorm_test import ( "simpleorm" "strconv" "testing" log "gitlab.com/gdulai/simpleloglvl" ) type Test struct { ID int `sql:"pk"` Int64Field int64 `sql:"nn"` IntField int `sql:"nn"` StringField string `sql:"nn"` } func TestParseSimple(t *testing.T) { log.LogInfo("Test start...") // GIVEN orm := simpleorm.NewORM(Test{}) // WHEN ddl := orm.CreateDDL() // THEN expectedDdl := "CREATE TABLE IF NOT EXISTS TEST (ID INTEGER, INT64_FIELD BIGINT NOT NULL, INT_FIELD INTEGER NOT NULL, STRING_FIELD TEXT NOT NULL, CONSTRAINT pk_test PRIMARY KEY(ID));" if ddl != expectedDdl { log.LogError("Incorrect DDL.\nExpected\n%s\nActual\n%s", expectedDdl, ddl) log.LogError("\nExpected size: %s\nActual size: %s", strconv.Itoa(len(expectedDdl)), strconv.Itoa(len(ddl))) t.Fail() } log.LogInfo("Test finished!") } type TestWithFk struct { ID int `sql:"pk"` TestID int `sql:"nn;fk=Test.ID"` } func TestParseFk(t *testing.T) { log.LogInfo("Test start...") // GIVEN orm := simpleorm.NewORM(Test{}, TestWithFk{}) // WHEN ddl := orm.CreateDDL() // THEN expectedDdl := "CREATE TABLE IF NOT EXISTS TEST (ID INTEGER, INT64_FIELD BIGINT NOT NULL, INT_FIELD INTEGER NOT NULL, STRING_FIELD TEXT NOT NULL, CONSTRAINT pk_test PRIMARY KEY(ID));\n" + "CREATE TABLE IF NOT EXISTS TEST_WITH_FK (ID INTEGER, TEST_ID INTEGER NOT NULL, CONSTRAINT pk_test_with_fk PRIMARY KEY(ID), CONSTRAINT fk_test FOREIGN KEY(TEST_ID) REFERENCES TEST(ID));" if ddl != expectedDdl { log.LogError("Incorrect DDL.\nExpected\n%s\nActual\n%s", expectedDdl, ddl) log.LogError("\nExpected size: %s\nActual size: %s", strconv.Itoa(len(expectedDdl)), strconv.Itoa(len(ddl))) t.Fail() } log.LogInfo("Test finished!") } type TestWithFkAndFkId struct { ID int `sql:"pk"` TestID int `sql:"nn;fk=Test.ID;fk_id=custom_fk"` } func TestParseFkAndFkId(t *testing.T) { // GIVEN orm := simpleorm.NewORM(Test{}, TestWithFkAndFkId{}) // WHEN ddl := orm.CreateDDL() // THEN expectedDdl := "CREATE TABLE IF NOT EXISTS TEST (ID INTEGER, INT64_FIELD BIGINT NOT NULL, INT_FIELD INTEGER NOT NULL, STRING_FIELD TEXT NOT NULL, CONSTRAINT pk_test PRIMARY KEY(ID));\n" + "CREATE TABLE IF NOT EXISTS TEST_WITH_FK_AND_FK_ID (ID INTEGER, TEST_ID INTEGER NOT NULL, CONSTRAINT pk_test_with_fk_and_fk_id PRIMARY KEY(ID), CONSTRAINT custom_fk FOREIGN KEY(TEST_ID) REFERENCES TEST(ID));" if ddl != expectedDdl { log.LogError("Incorrect DDL.\nExpected\n%s\nActual\n%s", expectedDdl, ddl) log.LogError("\nExpected size: %s\nActual size: %s", strconv.Itoa(len(expectedDdl)), strconv.Itoa(len(ddl))) t.Fail() } } type TestWithCompositePk struct { ID int `sql:"nn;pk"` Name string `sql:"nn;pk"` } func TestParseCompositePk(t *testing.T) { // GIVEN orm := simpleorm.NewORM(TestWithCompositePk{}) // WHEN ddl := orm.CreateDDL() // THEN expectedDdl := "CREATE TABLE IF NOT EXISTS TEST_WITH_COMPOSITE_PK (ID INTEGER NOT NULL, NAME TEXT NOT NULL, CONSTRAINT pk_test_with_composite_pk PRIMARY KEY(ID, NAME));" if ddl != expectedDdl { log.LogError("Incorrect DDL.\nExpected\n%s\nActual\n%s", expectedDdl, ddl) log.LogError("\nExpected size: %s\nActual size: %s", strconv.Itoa(len(expectedDdl)), strconv.Itoa(len(ddl))) t.Fail() } } type TestWithCompositeFk struct { ID int `sql:"nn;pk"` CompositeFkId int `sql:"nn;fk=TestWithCompositePk.ID;"` CompositeFkName string `sql:"nn;fk=TestWithCompositePk.Name;"` } func TestParseCompositeFk(t *testing.T) { // GIVEN orm := simpleorm.NewORM(TestWithCompositePk{}, TestWithCompositeFk{}) // WHEN ddl := orm.CreateDDL() // THEN expectedDdl := "CREATE TABLE IF NOT EXISTS TEST_WITH_COMPOSITE_PK (ID INTEGER NOT NULL, NAME TEXT NOT NULL, CONSTRAINT pk_test_with_composite_pk PRIMARY KEY(ID, NAME));\n" + "CREATE TABLE IF NOT EXISTS TEST_WITH_COMPOSITE_FK (ID INTEGER NOT NULL, COMPOSITE_FK_ID INTEGER NOT NULL, COMPOSITE_FK_NAME TEXT NOT NULL, CONSTRAINT pk_test_with_composite_fk PRIMARY KEY(ID), CONSTRAINT fk_test_with_composite_pk FOREIGN KEY(COMPOSITE_FK_ID, COMPOSITE_FK_NAME) REFERENCES TEST_WITH_COMPOSITE_PK(ID, NAME));" if ddl != expectedDdl { log.LogError("Incorrect DDL.\nExpected\n%s\nActual\n%s", expectedDdl, ddl) log.LogError("\nExpected size: %s\nActual size: %s", strconv.Itoa(len(expectedDdl)), strconv.Itoa(len(ddl))) t.Fail() } }