add(crm): import tests
This commit is contained in:
119
crm/repository/content_test.go
Normal file
119
crm/repository/content_test.go
Normal file
@@ -0,0 +1,119 @@
|
||||
package repository
|
||||
|
||||
import (
|
||||
"context"
|
||||
"encoding/json"
|
||||
"github.com/crusttech/crust/crm/types"
|
||||
"testing"
|
||||
)
|
||||
|
||||
type testContentRow struct {
|
||||
Name string `db:"name"`
|
||||
Value string `db:"value"`
|
||||
}
|
||||
|
||||
func TestContent(t *testing.T) {
|
||||
repository := NewContent(context.TODO()).With(context.Background())
|
||||
|
||||
// clean up tables
|
||||
{
|
||||
for _, name := range []string{"crm_module", "crm_module_content"} {
|
||||
_, err := db().Exec("truncate " + name)
|
||||
assert(t, err == nil, "Error when clearing "+name+": %+v", err)
|
||||
}
|
||||
}
|
||||
|
||||
fields, err := json.Marshal([]types.Field{
|
||||
types.Field{
|
||||
Name: "name",
|
||||
Type: "input",
|
||||
},
|
||||
types.Field{
|
||||
Name: "email",
|
||||
Type: "email",
|
||||
},
|
||||
})
|
||||
assert(t, err == nil, "Error when encoding JSON fields: %+v", err)
|
||||
|
||||
module := &types.Module{
|
||||
Name: "Test",
|
||||
}
|
||||
(&module.Fields).Scan(fields)
|
||||
|
||||
// set up a module
|
||||
{
|
||||
_, err := NewModule(context.TODO()).With(context.Background()).Create(module)
|
||||
assert(t, err == nil, "Error when creating module: %+v", err)
|
||||
assert(t, module.ID > 0, "Expected auto generated ID")
|
||||
}
|
||||
|
||||
content := &types.Content{
|
||||
ModuleID: module.ID,
|
||||
}
|
||||
(&content.Fields).Scan(func() []byte {
|
||||
b, _ := json.Marshal([]testContentRow{
|
||||
testContentRow{"name", "Tit Petric"},
|
||||
testContentRow{"email", "tit.petric@example.com"},
|
||||
})
|
||||
return b
|
||||
}())
|
||||
|
||||
// now work with content
|
||||
{
|
||||
// create content
|
||||
m, err := repository.Create(content)
|
||||
assert(t, err == nil, "Error when creating content: %+v", err)
|
||||
assert(t, m.ID > 0, "Expected auto generated ID")
|
||||
|
||||
// fetch created content
|
||||
{
|
||||
ms, err := repository.FindByID(m.ID)
|
||||
assert(t, err == nil, "Error when retrieving content by id: %+v", err)
|
||||
assert(t, ms.ID == m.ID, "Expected ID from database to match, %d != %d", m.ID, ms.ID)
|
||||
assert(t, ms.ModuleID == m.ModuleID, "Expected Module ID from database to match, %d != %d", m.ModuleID, ms.ModuleID)
|
||||
|
||||
fields := make([]testContentRow, 0)
|
||||
err = json.Unmarshal(ms.Fields, &fields)
|
||||
assert(t, err == nil, "Didn't expect error when unmarshalling: %+v", err)
|
||||
assert(t, len(fields) == 2, "Expected different field count: %d != %d", 2, len(fields))
|
||||
assert(t, fields[0].Name == "name", "Expected field.0 type = name, got %s", fields[0].Name)
|
||||
assert(t, fields[1].Name == "email", "Expected field.1 type = email, got %s", fields[1].Name)
|
||||
}
|
||||
|
||||
// update created content
|
||||
{
|
||||
_, err := repository.Update(m)
|
||||
assert(t, err == nil, "Error when updating content, %+v", err)
|
||||
}
|
||||
|
||||
// re-fetch content
|
||||
{
|
||||
ms, err := repository.FindByID(m.ID)
|
||||
assert(t, err == nil, "Error when retrieving content by id: %+v", err)
|
||||
assert(t, ms.ID == m.ID, "Expected ID from database to match, %d != %d", m.ID, ms.ID)
|
||||
assert(t, ms.ModuleID == m.ModuleID, "Expected ID from database to match, %d != %d", m.ModuleID, ms.ModuleID)
|
||||
}
|
||||
|
||||
// fetch all contents
|
||||
{
|
||||
ms, err := repository.Find()
|
||||
assert(t, err == nil, "Error when retrieving contents: %+v", err)
|
||||
assert(t, len(ms) == 1, "Expected one content, got %d", len(ms))
|
||||
assert(t, ms[0].ModuleID == m.ModuleID, "Expected content module to match, %s != %s", m.ModuleID, ms[0].ModuleID)
|
||||
}
|
||||
|
||||
// re-fetch content
|
||||
{
|
||||
err := repository.DeleteByID(m.ID)
|
||||
assert(t, err == nil, "Error when retrieving content by id: %+v", err)
|
||||
}
|
||||
|
||||
// fetch all contents
|
||||
{
|
||||
ms, err := repository.Find()
|
||||
assert(t, err == nil, "Error when retrieving contents: %+v", err)
|
||||
assert(t, len(ms) == 0, "Expected one content, got %d", len(ms))
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
52
crm/repository/main_test.go
Normal file
52
crm/repository/main_test.go
Normal file
@@ -0,0 +1,52 @@
|
||||
package repository
|
||||
|
||||
import (
|
||||
"github.com/joho/godotenv"
|
||||
"github.com/namsral/flag"
|
||||
"github.com/titpetric/factory"
|
||||
"os"
|
||||
"testing"
|
||||
)
|
||||
|
||||
func TestMain(m *testing.M) {
|
||||
// @todo this is a very optimistic initialization, make it more robust
|
||||
godotenv.Load("../../.env")
|
||||
|
||||
prefix := "sam"
|
||||
dsn := ""
|
||||
|
||||
p := func(s string) string {
|
||||
return prefix + "-" + s
|
||||
}
|
||||
|
||||
flag.StringVar(&dsn, p("db-dsn"), "crust:crust@tcp(db1:3306)/crust?collation=utf8mb4_general_ci", "DSN for database connection")
|
||||
flag.Parse()
|
||||
|
||||
if testing.Short() {
|
||||
return
|
||||
}
|
||||
|
||||
factory.Database.Add("default", dsn)
|
||||
|
||||
db := factory.Database.MustGet()
|
||||
db.Profiler = &factory.Database.ProfilerStdout
|
||||
|
||||
os.Exit(m.Run())
|
||||
}
|
||||
|
||||
func db() *factory.DB {
|
||||
return factory.Database.MustGet()
|
||||
}
|
||||
|
||||
func must(t *testing.T, err error) {
|
||||
if err != nil {
|
||||
t.Fatalf("Error: %v", err)
|
||||
}
|
||||
}
|
||||
|
||||
func assert(t *testing.T, ok bool, format string, args ...interface{}) bool {
|
||||
if !ok {
|
||||
t.Fatalf(format, args...)
|
||||
}
|
||||
return ok
|
||||
}
|
||||
75
crm/repository/module_test.go
Normal file
75
crm/repository/module_test.go
Normal file
@@ -0,0 +1,75 @@
|
||||
package repository
|
||||
|
||||
import (
|
||||
"context"
|
||||
"github.com/crusttech/crust/crm/types"
|
||||
"testing"
|
||||
)
|
||||
|
||||
func TestModule(t *testing.T) {
|
||||
|
||||
repository := NewModule(context.TODO()).With(context.Background())
|
||||
|
||||
// clean up tables
|
||||
{
|
||||
_, err := db().Exec("truncate crm_module")
|
||||
assert(t, err == nil, "Error when clearing crm_module: %+v", err)
|
||||
}
|
||||
|
||||
// the module object we're working with
|
||||
module := &types.Module{
|
||||
Name: "Test",
|
||||
}
|
||||
|
||||
{
|
||||
// create module
|
||||
m, err := repository.Create(module)
|
||||
assert(t, err == nil, "Error when creating module: %+v", err)
|
||||
assert(t, m.ID > 0, "Expected auto generated ID")
|
||||
|
||||
// fetch created module
|
||||
{
|
||||
ms, err := repository.FindByID(m.ID)
|
||||
assert(t, err == nil, "Error when retrieving module by id: %+v", err)
|
||||
assert(t, ms.ID == m.ID, "Expected ID from database to match, %d != %d", m.ID, ms.ID)
|
||||
assert(t, ms.Name == m.Name, "Expected Name from database to match, %s != %s", m.Name, ms.Name)
|
||||
}
|
||||
|
||||
// update created module
|
||||
{
|
||||
m.Name = "Updated test"
|
||||
_, err := repository.Update(m)
|
||||
assert(t, err == nil, "Error when updating module, %+v", err)
|
||||
}
|
||||
|
||||
// re-fetch module
|
||||
{
|
||||
ms, err := repository.FindByID(m.ID)
|
||||
assert(t, err == nil, "Error when retrieving module by id: %+v", err)
|
||||
assert(t, ms.ID == m.ID, "Expected ID from database to match, %d != %d", m.ID, ms.ID)
|
||||
assert(t, ms.Name == m.Name, "Expected Name from database to match, %s != %s", m.Name, ms.Name)
|
||||
}
|
||||
|
||||
// fetch all modules
|
||||
{
|
||||
ms, err := repository.Find()
|
||||
assert(t, err == nil, "Error when retrieving modules: %+v", err)
|
||||
assert(t, len(ms) == 1, "Expected one module, got %d", len(ms))
|
||||
assert(t, ms[0].Name == m.Name, "Expected module name to match, %s != %s", m.Name, ms[0].Name)
|
||||
}
|
||||
|
||||
// re-fetch module
|
||||
{
|
||||
err := repository.DeleteByID(m.ID)
|
||||
assert(t, err == nil, "Error when deleting module by id: %+v", err)
|
||||
}
|
||||
|
||||
// fetch all modules
|
||||
{
|
||||
ms, err := repository.Find()
|
||||
assert(t, err == nil, "Error when retrieving modules: %+v", err)
|
||||
assert(t, len(ms) == 0, "Expected no modules, got %d", len(ms))
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user