Add tm_server with SQLite, Svelte UI, and task-master TUI sync.
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>
This commit is contained in:
@@ -0,0 +1,55 @@
|
||||
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
|
||||
}
|
||||
Reference in New Issue
Block a user