66 lines
1.7 KiB
Go
66 lines
1.7 KiB
Go
package importer
|
|
|
|
import (
|
|
"context"
|
|
"database/sql"
|
|
"errors"
|
|
"testing"
|
|
|
|
"box-manifest/server/internal/tree"
|
|
_ "modernc.org/sqlite"
|
|
)
|
|
|
|
func TestPreviewNormalizesAndCommitIsOneTime(t *testing.T) {
|
|
ctx := context.Background()
|
|
store := testStore(t)
|
|
service := New(store)
|
|
quantity := int64(3)
|
|
|
|
preview, err := service.Preview(ctx, tree.UnsortedID, Manifest{Nodes: []tree.ImportNode{
|
|
{Name: " Box A ", Children: []tree.ImportNode{{Name: " Cables ", Quantity: &quantity}}},
|
|
}})
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if preview.Summary.Nodes != 2 || preview.Summary.MaximumDepth != 2 {
|
|
t.Fatalf("unexpected summary: %#v", preview.Summary)
|
|
}
|
|
if preview.Manifest.Nodes[0].Name != "Box A" || preview.Manifest.Nodes[0].Children[0].Name != "Cables" {
|
|
t.Fatalf("manifest was not normalized: %#v", preview.Manifest)
|
|
}
|
|
|
|
committed, err := service.Commit(ctx, preview.PlanID)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if committed.Nodes != 2 {
|
|
t.Fatalf("unexpected commit summary: %#v", committed)
|
|
}
|
|
if _, err := service.Commit(ctx, preview.PlanID); !errors.Is(err, tree.ErrNotFound) {
|
|
t.Fatalf("expected consumed plan to be missing, got %v", err)
|
|
}
|
|
}
|
|
|
|
func TestInvalidManifestDoesNotCreatePlan(t *testing.T) {
|
|
service := New(testStore(t))
|
|
if _, err := service.Preview(context.Background(), tree.UnsortedID, Manifest{
|
|
Nodes: []tree.ImportNode{{Name: " "}},
|
|
}); !errors.Is(err, tree.ErrInvalid) {
|
|
t.Fatalf("expected invalid manifest, got %v", err)
|
|
}
|
|
}
|
|
|
|
func testStore(t *testing.T) *tree.Store {
|
|
t.Helper()
|
|
db, err := sql.Open("sqlite", ":memory:")
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
t.Cleanup(func() { db.Close() })
|
|
store := tree.NewStore(db)
|
|
if err := store.Initialize(context.Background()); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
return store
|
|
}
|