mirror of
https://gitlab.com/mbugroup/lti-api.git
synced 2026-05-20 05:21:57 +00:00
98 lines
2.5 KiB
Go
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), "..", ".."))
|
|
}
|