Files
lti-api/internal/readapi/readapi_test.go
T
2026-04-14 15:14:31 +07:00

98 lines
2.5 KiB
Go

package readapi
import (
"encoding/json"
"os"
"path/filepath"
"reflect"
"runtime"
"testing"
"gitlab.com/mbugroup/lti-api.git/internal/cache"
"gitlab.com/mbugroup/lti-api.git/internal/config"
"gitlab.com/mbugroup/lti-api.git/internal/route"
"github.com/gofiber/fiber/v2"
"github.com/redis/go-redis/v9"
"gopkg.in/yaml.v3"
)
func TestGeneratedArtifactsAreCurrent(t *testing.T) {
PrimeBuildConfig()
cache.SetRedis(redis.NewClient(&redis.Options{Addr: "127.0.0.1:6379"}))
app := fiber.New(config.FiberConfig())
app.Get("/healthz", func(c *fiber.Ctx) error {
return c.JSON(fiber.Map{"status": "ok"})
})
app.Get("/readyz", func(c *fiber.Ctx) error {
return c.JSON(fiber.Map{"status": "ok"})
})
route.Routes(app, nil)
artifacts, err := BuildArtifactsFromApp(app)
if err != nil {
t.Fatalf("build artifacts: %v", err)
}
root := repoRoot(t)
assertJSONMatchesFile(t, artifacts.OpenAPIJSON, filepath.Join(root, "docs", "openapi", "read-api.json"))
assertYAMLMatchesFile(t, artifacts.OpenAPIYAML, filepath.Join(root, "docs", "openapi", "read-api.yaml"))
assertJSONMatchesFile(t, artifacts.PostmanCollectionJSON, filepath.Join(root, "docs", "postman", "read-api.collection.json"))
assertJSONMatchesFile(t, artifacts.PostmanEnvironmentJSON, filepath.Join(root, "docs", "postman", "read-api.environment.json"))
}
func assertJSONMatchesFile(t *testing.T, got []byte, path string) {
t.Helper()
want, err := os.ReadFile(path)
if err != nil {
t.Fatalf("read %s: %v", path, err)
}
var gotValue any
if err := json.Unmarshal(got, &gotValue); err != nil {
t.Fatalf("unmarshal generated json: %v", err)
}
var wantValue any
if err := json.Unmarshal(want, &wantValue); err != nil {
t.Fatalf("unmarshal fixture json: %v", err)
}
if !reflect.DeepEqual(gotValue, wantValue) {
t.Fatalf("json artifact mismatch for %s", path)
}
}
func assertYAMLMatchesFile(t *testing.T, got []byte, path string) {
t.Helper()
want, err := os.ReadFile(path)
if err != nil {
t.Fatalf("read %s: %v", path, err)
}
var gotValue any
if err := yaml.Unmarshal(got, &gotValue); err != nil {
t.Fatalf("unmarshal generated yaml: %v", err)
}
var wantValue any
if err := yaml.Unmarshal(want, &wantValue); err != nil {
t.Fatalf("unmarshal fixture yaml: %v", err)
}
if !reflect.DeepEqual(gotValue, wantValue) {
t.Fatalf("yaml artifact mismatch for %s", path)
}
}
func repoRoot(t *testing.T) string {
t.Helper()
_, filename, _, ok := runtime.Caller(0)
if !ok {
t.Fatal("runtime.Caller failed")
}
return filepath.Clean(filepath.Join(filepath.Dir(filename), "..", ".."))
}