blob: a55eaef6bed0e462e7153c8d37bc15c6358af407 [file] [log] [blame]
package exporter
import (
"strings"
"testing"
"github.com/stretchr/testify/assert"
)
type testTables struct {
TableOne []tableOneRow
TableTwo []tableTwoRow
}
type tableOneRow struct {
ColumnOne string `sql:"column_one STRING PRIMARY KEY"`
ColumnTwo int `sql:"column_two INT8 NOT NULL"`
}
type tableTwoRow struct {
CompositeKeyOne []byte `sql:"comp_one BYTES"`
CompositeKeyTwo []byte `sql:"comp_two BYTES"`
// This is a test comment
primaryKey struct{} `sql:"PRIMARY KEY (comp_one, comp_two)"`
// We have this index for good reasons. Spaces are intentional to make sure they are trimmed
indexForSearch struct{} `sql:" INDEX comp_two_desc_idx (comp_two DESC) "`
// We have this index for even better reasons.
otherIndex struct{} `sql:"INDEX comp_two_asc_idx (comp_two ASC)"`
}
func TestGenerateSQL_WellFormedInput_CorrectOutput(t *testing.T) {
gen := GenerateSQL(testTables{}, "test_package_one", SchemaOnly)
// We cannot have backticks in the multistring literal, so we substitute $$ for them.
expectedOutput := strings.ReplaceAll(`package test_package_one
// Generated by //go/sql/exporter/
// DO NOT EDIT
const Schema = $$CREATE TABLE IF NOT EXISTS TableOne (
column_one STRING PRIMARY KEY,
column_two INT8 NOT NULL
);
CREATE TABLE IF NOT EXISTS TableTwo (
comp_one BYTES,
comp_two BYTES,
PRIMARY KEY (comp_one, comp_two),
INDEX comp_two_desc_idx (comp_two DESC),
INDEX comp_two_asc_idx (comp_two ASC)
);
$$
`, "$$", "`")
assert.Equal(t, expectedOutput, gen)
}
func TestGenerateSQL_WellFormedInput_CorrectOutputIncludingColumnNames(t *testing.T) {
gen := GenerateSQL(testTables{}, "test_package_one", SchemaAndColumnNames)
// We cannot have backticks in the multistring literal, so we substitute $$ for them.
expectedOutput := strings.ReplaceAll(`package test_package_one
// Generated by //go/sql/exporter/
// DO NOT EDIT
const Schema = $$CREATE TABLE IF NOT EXISTS TableOne (
column_one STRING PRIMARY KEY,
column_two INT8 NOT NULL
);
CREATE TABLE IF NOT EXISTS TableTwo (
comp_one BYTES,
comp_two BYTES,
PRIMARY KEY (comp_one, comp_two),
INDEX comp_two_desc_idx (comp_two DESC),
INDEX comp_two_asc_idx (comp_two ASC)
);
$$
var TableOne = []string{
"column_one",
"column_two",
}
var TableTwo = []string{
"comp_one",
"comp_two",
}
`, "$$", "`")
assert.Equal(t, expectedOutput, gen)
}
type malformedTable struct {
TableOne []tableOneRow
TableTwo tableTwoRow
}
func TestGenerateSQL_NonSliceField_Panics(t *testing.T) {
assert.Panics(t, func() {
GenerateSQL(malformedTable{}, "test_package_one", SchemaOnly)
})
}
type missingSQLStructs struct {
TableOne []tableOneRow
TableTwo []malformedTable
}
func TestGenerateSQL_MissingSQLStructTag_Panics(t *testing.T) {
assert.Panics(t, func() {
GenerateSQL(missingSQLStructs{}, "test_package_one", SchemaOnly)
})
}