Introduces the web backend (auth, RBAC, project tokens, revisions), YouTrack-or-taskmaster backend choice in the TUI, and a first-pass embedded Svelte UI. The frontend is functional but needs a major rework. Co-authored-by: Cursor <cursoragent@cursor.com>
56 lines
1.2 KiB
Go
56 lines
1.2 KiB
Go
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
|
|
}
|