package server import ( "os" "path/filepath" "testing" "task/internal/project" "task/internal/sqlite" "task/internal/ticket" ) func TestImportJSONDataDir(t *testing.T) { dataDir := t.TempDir() ps := project.NewDirStore(dataDir) if err := ps.Ensure("inbox"); err != nil { t.Fatal(err) } ts := ticket.NewJSONStore(dataDir) created, err := ts.Create(ticket.Ticket{Title: "From JSON", ProjectID: "inbox"}) if err != nil { t.Fatal(err) } dbPath := filepath.Join(t.TempDir(), "import.db") db, err := sqlite.Open(dbPath, []byte("sec")) if err != nil { t.Fatal(err) } defer db.Close() u, err := db.CreateUser("admin", "x", true) if err != nil { t.Fatal(err) } srv := New(db) if err := srv.ImportJSONDataDir(dataDir, u.ID); err != nil { t.Fatal(err) } got, err := srv.Tickets.Get(created.ID) if err != nil { t.Fatal(err) } if got.Title != "From JSON" { t.Fatalf("title=%q", got.Title) } role, _ := db.MemberRole("inbox", u.ID) if role != sqlite.RoleOwner { t.Fatalf("role=%s", role) } // second import is idempotent if err := srv.ImportJSONDataDir(dataDir, u.ID); err != nil { t.Fatal(err) } _ = os.RemoveAll(dataDir) // ensure we don't rely on JSON after import for this test cleanup }