155 lines
3.3 KiB
Go
155 lines
3.3 KiB
Go
package actions
|
|
|
|
import (
|
|
"os"
|
|
"path/filepath"
|
|
"testing"
|
|
|
|
"verstak/internal/core/storage"
|
|
)
|
|
|
|
func openTestDB(t *testing.T) *storage.DB {
|
|
t.Helper()
|
|
dir := t.TempDir()
|
|
db, err := storage.Open(filepath.Join(dir, "test.db"))
|
|
if err != nil {
|
|
t.Fatalf("open db: %v", err)
|
|
}
|
|
t.Cleanup(func() { db.Close() })
|
|
return db
|
|
}
|
|
|
|
func TestCreateAndGet(t *testing.T) {
|
|
db := openTestDB(t)
|
|
svc := NewService(db)
|
|
|
|
rec, err := svc.Create("node-1", KindOpenURL, "Открыть сайт", "", "", "https://example.com", nil, false, false)
|
|
if err != nil {
|
|
t.Fatalf("Create: %v", err)
|
|
}
|
|
if rec.ID == "" {
|
|
t.Fatal("empty id")
|
|
}
|
|
if rec.Kind != KindOpenURL {
|
|
t.Errorf("kind = %q", rec.Kind)
|
|
}
|
|
if rec.URL != "https://example.com" {
|
|
t.Errorf("url = %q", rec.URL)
|
|
}
|
|
|
|
got, err := svc.Get(rec.ID)
|
|
if err != nil {
|
|
t.Fatalf("Get: %v", err)
|
|
}
|
|
if got.Title != "Открыть сайт" {
|
|
t.Errorf("title = %q", got.Title)
|
|
}
|
|
if !got.ConfirmRequired {
|
|
// default is false
|
|
}
|
|
}
|
|
|
|
func TestCreateWithConfirm(t *testing.T) {
|
|
db := openTestDB(t)
|
|
svc := NewService(db)
|
|
|
|
rec, err := svc.Create("node-1", KindRunCommand, "Backup", "./backup.sh", "/tmp", "", nil, true, true)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if !rec.ConfirmRequired {
|
|
t.Error("expected confirm_required")
|
|
}
|
|
if !rec.CaptureOutput {
|
|
t.Error("expected capture_output")
|
|
}
|
|
if rec.Command != "./backup.sh" {
|
|
t.Errorf("command = %q", rec.Command)
|
|
}
|
|
if rec.WorkingDir != "/tmp" {
|
|
t.Errorf("working_dir = %q", rec.WorkingDir)
|
|
}
|
|
}
|
|
|
|
func TestListByNode(t *testing.T) {
|
|
db := openTestDB(t)
|
|
svc := NewService(db)
|
|
|
|
svc.Create("node-1", KindOpenURL, "A1", "", "", "https://a.com", nil, false, false)
|
|
svc.Create("node-1", KindOpenURL, "A2", "", "", "https://b.com", nil, false, false)
|
|
svc.Create("node-2", KindOpenURL, "B1", "", "", "https://c.com", nil, false, false)
|
|
|
|
list1, err := svc.ListByNode("node-1")
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if len(list1) != 2 {
|
|
t.Errorf("node-1 actions = %d, want 2", len(list1))
|
|
}
|
|
|
|
list2, err := svc.ListByNode("node-2")
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if len(list2) != 1 {
|
|
t.Errorf("node-2 actions = %d, want 1", len(list2))
|
|
}
|
|
|
|
list3, err := svc.ListByNode("node-3")
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if len(list3) != 0 {
|
|
t.Errorf("node-3 actions = %d, want 0", len(list3))
|
|
}
|
|
}
|
|
|
|
func TestDelete(t *testing.T) {
|
|
db := openTestDB(t)
|
|
svc := NewService(db)
|
|
|
|
rec, _ := svc.Create("node-1", KindOpenURL, "ToDelete", "", "", "https://x.com", nil, false, false)
|
|
|
|
if err := svc.Delete(rec.ID); err != nil {
|
|
t.Fatalf("Delete: %v", err)
|
|
}
|
|
|
|
if _, err := svc.Get(rec.ID); err == nil {
|
|
t.Error("expected error after delete")
|
|
}
|
|
}
|
|
|
|
func TestGetNotFound(t *testing.T) {
|
|
db := openTestDB(t)
|
|
svc := NewService(db)
|
|
|
|
if _, err := svc.Get("nonexistent"); err == nil {
|
|
t.Error("expected error")
|
|
}
|
|
}
|
|
|
|
func TestKindLabel(t *testing.T) {
|
|
cases := map[string]string{
|
|
KindOpenURL: "Открыть URL",
|
|
KindRunCommand: "Запустить команду",
|
|
KindOpenFolder: "Открыть папку",
|
|
"unknown": "unknown",
|
|
}
|
|
for kind, want := range cases {
|
|
got := KindLabel(kind)
|
|
if got != want {
|
|
t.Errorf("KindLabel(%q) = %q, want %q", kind, got, want)
|
|
}
|
|
}
|
|
}
|
|
|
|
func TestValidKinds(t *testing.T) {
|
|
kinds := ValidKinds()
|
|
if len(kinds) != 7 {
|
|
t.Errorf("valid kinds = %d, want 7", len(kinds))
|
|
}
|
|
}
|
|
|
|
// Silence unused import.
|
|
var _ = os.Args
|