Files
box-manifest-android/server/internal/importer/service_test.go
T

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
}