- go.mod module path (and every internal/vibetree import) inventree -> vibetree - cmd/inventree/ -> cmd/vibetree/, deploy/inventree.service -> vibetree.service - Default site name (seed data + the siteName template func's fallback) is now "vibetree", shown in the navbar, <title>, and login page - Session cookie renamed inventree_session -> vibetree_session - Default DB path data/inventree.db -> data/vibetree.db, CLI/log text, Dockerfile, docker-compose.yml, README, .gitignore/.dockerignore all updated to match Existing installs: this changes the session cookie name (users will be signed out once) and the default DB filename (point -db at your existing file, or rename it, to keep your data).
77 lines
1.8 KiB
Go
77 lines
1.8 KiB
Go
package statuses_test
|
|
|
|
import (
|
|
"context"
|
|
"database/sql"
|
|
"path/filepath"
|
|
"strings"
|
|
"testing"
|
|
|
|
"vibetree/internal/database"
|
|
"vibetree/internal/statuses"
|
|
)
|
|
|
|
func testDB(t *testing.T) *sql.DB {
|
|
t.Helper()
|
|
dir := t.TempDir()
|
|
db, err := database.Open(filepath.Join(dir, "test.db"))
|
|
if err != nil {
|
|
t.Fatalf("open db: %v", err)
|
|
}
|
|
t.Cleanup(func() { db.Close() })
|
|
return db
|
|
}
|
|
|
|
func TestImportCreatesAndUpdatesByName(t *testing.T) {
|
|
ctx := context.Background()
|
|
s := statuses.NewStore(testDB(t))
|
|
|
|
// "In Use" already exists from seed data; this should update its
|
|
// color rather than create a duplicate, and create "Awaiting Parts".
|
|
csvData := "Name,Color\nIn Use,primary\nAwaiting Parts,warning\n"
|
|
result, err := s.Import(ctx, strings.NewReader(csvData))
|
|
if err != nil {
|
|
t.Fatalf("import: %v", err)
|
|
}
|
|
if result.Created != 1 || result.Updated != 1 {
|
|
t.Fatalf("expected 1 created, 1 updated, got %+v", result)
|
|
}
|
|
|
|
list, err := s.List(ctx)
|
|
if err != nil {
|
|
t.Fatalf("list: %v", err)
|
|
}
|
|
var foundInUse, foundAwaiting bool
|
|
for _, st := range list {
|
|
if st.Name == "In Use" {
|
|
foundInUse = true
|
|
if st.Color != "primary" {
|
|
t.Errorf("expected In Use color updated to primary, got %s", st.Color)
|
|
}
|
|
}
|
|
if st.Name == "Awaiting Parts" {
|
|
foundAwaiting = true
|
|
if st.Color != "warning" {
|
|
t.Errorf("expected Awaiting Parts color warning, got %s", st.Color)
|
|
}
|
|
}
|
|
}
|
|
if !foundInUse || !foundAwaiting {
|
|
t.Fatalf("expected both statuses present, got %+v", list)
|
|
}
|
|
}
|
|
|
|
func TestImportSkipsRowsMissingName(t *testing.T) {
|
|
ctx := context.Background()
|
|
s := statuses.NewStore(testDB(t))
|
|
|
|
csvData := "Name,Color\n,primary\n"
|
|
result, err := s.Import(ctx, strings.NewReader(csvData))
|
|
if err != nil {
|
|
t.Fatalf("import: %v", err)
|
|
}
|
|
if result.Created != 0 || len(result.Errors) != 1 {
|
|
t.Fatalf("expected 0 created and 1 error, got %+v", result)
|
|
}
|
|
}
|