Files
upstream-ory-kratos/embedx/embedx_test.go
upstream-mirror c60cc7ca75
Some checks failed
CI / Run tests and lints (push) Failing after 29s
CI / Build CLI docs (push) Has been skipped
CI / Run Playwright end-to-end tests (mysql) (push) Failing after 3s
CI / Run Playwright end-to-end tests (postgres) (push) Failing after 2s
CI / Run Playwright end-to-end tests (sqlite) (push) Failing after 3s
CodeQL / Analyze (go) (push) Failing after 4s
CodeQL / Analyze (javascript) (push) Failing after 3s
Docker Image Scanners / scanners (push) Failing after 4s
Synchronize Issue Labels / Synchronize Issue Labels (push) Has been skipped
CI / Run end-to-end tests (postgres) (push) Failing after 19s
CI / Run end-to-end tests (sqlite) (push) Failing after 2s
CI / Run Playwright end-to-end tests (cockroach) (push) Failing after 2s
CI / Draft newsletter (push) Has been skipped
CI / Generate release (push) Has been skipped
CI / Pending approval Slack notification (push) Has been skipped
CI / Send newsletter (push) Has been skipped
snapshot of https://github.com/ory/kratos.git (master, 2026-09-15; blobs > 131072B omitted)
2026-09-15 21:19:12 +05:00

107 lines
2.6 KiB
Go

// Copyright © 2023 Ory Corp
// SPDX-License-Identifier: Apache-2.0
package embedx
import (
"context"
"embed"
"io/fs"
"strings"
"testing"
"github.com/stretchr/testify/require"
"github.com/stretchr/testify/assert"
"github.com/ory/jsonschema/v3"
)
func TestAddSchemaResources(t *testing.T) {
for _, tc := range []struct {
description string
dependencies []SchemaType
extraDependencies []SchemaType
mustFail bool
failMessage string
}{
{
description: "config schema",
dependencies: []SchemaType{Config},
extraDependencies: nil,
},
{
description: "identity schema with dependencies",
dependencies: []SchemaType{IdentityMeta},
extraDependencies: []SchemaType{IdentityExtension},
},
{
description: "multiple schemas",
dependencies: []SchemaType{Config, IdentityMeta, IdentityExtension},
extraDependencies: nil,
},
{
description: "verify dependencies are also loaded",
dependencies: []SchemaType{IdentityMeta},
extraDependencies: []SchemaType{IdentityExtension},
},
{
description: "must fail on unsupported schema types",
dependencies: []SchemaType{4, 10},
mustFail: true,
failMessage: "the specified schema type (4) is not supported",
},
} {
t.Run("case="+tc.description, func(t *testing.T) {
c := jsonschema.NewCompiler()
err := AddSchemaResources(c, tc.dependencies...)
if tc.mustFail {
assert.Errorf(t, err, "an error must be thrown on `%s`", tc.description)
assert.EqualError(t, err, tc.failMessage)
} else {
assert.NoError(t, err)
}
if !tc.mustFail {
for _, s := range append(tc.dependencies, tc.extraDependencies...) {
_, err := c.Compile(context.Background(), s.GetSchemaID())
assert.NoError(t, err)
}
}
})
}
}
//go:embed testdata/identity_meta.*
var identityMetaTestCases embed.FS
func TestIdentityMetaSchema(t *testing.T) {
c := jsonschema.NewCompiler()
err := AddSchemaResources(c, IdentityMeta, IdentityExtension)
require.NoError(t, err)
schema, err := c.Compile(context.Background(), IdentityMeta.GetSchemaID())
require.NoError(t, err)
require.NoError(t, fs.WalkDir(identityMetaTestCases, ".", func(path string, d fs.DirEntry, err error) error {
if d.IsDir() {
return nil
}
t.Run("case="+path, func(t *testing.T) {
f, err := identityMetaTestCases.Open(path)
require.NoError(t, err)
err = schema.Validate(f)
if strings.HasSuffix(path, "invalid.schema.json") {
assert.Error(t, err)
} else {
assert.NoError(t, err)
}
})
return nil
}))
}