114 lines
4.1 KiB
Go
114 lines
4.1 KiB
Go
package bootstrap
|
|
|
|
import (
|
|
"encoding/json"
|
|
"os"
|
|
"path/filepath"
|
|
"testing"
|
|
)
|
|
|
|
func TestEnsureBootstrapPOSIXSkeletonInitializesEmptyRoot(t *testing.T) {
|
|
rootPath := filepath.Join(t.TempDir(), "POSIX")
|
|
t.Setenv("POSIX_ROOT", rootPath)
|
|
|
|
if _, err := os.Stat(rootPath); !os.IsNotExist(err) {
|
|
t.Fatalf("expected isolated POSIX root to start absent, got err=%v", err)
|
|
}
|
|
|
|
service := NewService(nil, os.Getenv("POSIX_ROOT"))
|
|
|
|
err := service.ensureBootstrapPOSIXSkeleton(
|
|
InstallationRecord{
|
|
ID: "installation-1",
|
|
Name: "MangoPig",
|
|
Mode: "personal",
|
|
Access: "local",
|
|
Protocol: "http",
|
|
Host: "localhost",
|
|
IsBootstrapped: true,
|
|
},
|
|
AdminSummary{
|
|
ID: "admin-1",
|
|
Email: "ronald@example.com",
|
|
DisplayName: "Ronald",
|
|
},
|
|
namedRecord{ID: "org-1", Name: "Primary Organization", Slug: "primary-organization"},
|
|
namedRecord{ID: "dept-1", Name: "Primary Department", Slug: "primary-department"},
|
|
namedRecord{ID: "team-1", Name: "Primary Team", Slug: "primary-team"},
|
|
namedRecord{ID: "project-1", Name: "Primary Project", Slug: "primary-project"},
|
|
)
|
|
if err != nil {
|
|
t.Fatalf("ensure bootstrap POSIX skeleton: %v", err)
|
|
}
|
|
|
|
requiredPaths := []string{
|
|
filepath.Join(rootPath, "settings.json"),
|
|
filepath.Join(rootPath, "layout.json"),
|
|
filepath.Join(rootPath, "catalog", "packs"),
|
|
filepath.Join(rootPath, "catalog", "standalone"),
|
|
filepath.Join(rootPath, "departments", "department-primary-department", "settings.json"),
|
|
filepath.Join(rootPath, "departments", "department-primary-department", "users.json"),
|
|
filepath.Join(rootPath, "departments", "department-primary-department", "teams", "team-primary-team", "settings.json"),
|
|
filepath.Join(rootPath, "departments", "department-primary-department", "teams", "team-primary-team", "users.json"),
|
|
filepath.Join(rootPath, "projects", "project-primary-project", "settings.json"),
|
|
filepath.Join(rootPath, "projects", "project-primary-project", "home.json"),
|
|
filepath.Join(rootPath, "projects", "project-primary-project", "tree"),
|
|
filepath.Join(rootPath, "users", "settings.json"),
|
|
filepath.Join(rootPath, "users", "data.json"),
|
|
filepath.Join(rootPath, "users", "personals"),
|
|
}
|
|
|
|
for _, path := range requiredPaths {
|
|
if _, err := os.Stat(path); err != nil {
|
|
t.Fatalf("expected path to exist %s: %v", path, err)
|
|
}
|
|
}
|
|
|
|
settingsPayload := readJSONFileForTest[map[string]any](t, filepath.Join(rootPath, "settings.json"))
|
|
installationPayload, ok := settingsPayload["installation"].(map[string]any)
|
|
if !ok {
|
|
t.Fatalf("settings.json missing installation object: %#v", settingsPayload)
|
|
}
|
|
if installationPayload["name"] != "MangoPig" {
|
|
t.Fatalf("expected installation name MangoPig, got %#v", installationPayload["name"])
|
|
}
|
|
if installationPayload["isBootstrapped"] != true {
|
|
t.Fatalf("expected installation to be bootstrapped, got %#v", installationPayload["isBootstrapped"])
|
|
}
|
|
|
|
layoutPayload := readJSONFileForTest[map[string]any](t, filepath.Join(rootPath, "layout.json"))
|
|
homePayload, ok := layoutPayload["home"].(map[string]any)
|
|
if !ok {
|
|
t.Fatalf("layout.json missing home object: %#v", layoutPayload)
|
|
}
|
|
if homePayload["defaultProjectSlug"] != "primary-project" {
|
|
t.Fatalf("expected default project slug primary-project, got %#v", homePayload["defaultProjectSlug"])
|
|
}
|
|
|
|
projectSettings := readJSONFileForTest[map[string]any](t, filepath.Join(rootPath, "projects", "project-primary-project", "settings.json"))
|
|
if projectSettings["type"] != "project" {
|
|
t.Fatalf("expected project settings type project, got %#v", projectSettings["type"])
|
|
}
|
|
|
|
usersSettings := readJSONFileForTest[map[string]any](t, filepath.Join(rootPath, "users", "settings.json"))
|
|
if usersSettings["primaryAdminId"] != "admin-1" {
|
|
t.Fatalf("expected primary admin id admin-1, got %#v", usersSettings["primaryAdminId"])
|
|
}
|
|
}
|
|
|
|
func readJSONFileForTest[T any](t *testing.T, path string) T {
|
|
t.Helper()
|
|
|
|
data, err := os.ReadFile(path)
|
|
if err != nil {
|
|
t.Fatalf("read %s: %v", path, err)
|
|
}
|
|
|
|
var payload T
|
|
if err := json.Unmarshal(data, &payload); err != nil {
|
|
t.Fatalf("unmarshal %s: %v", path, err)
|
|
}
|
|
|
|
return payload
|
|
}
|