Skip to content

Commit 9907389

Browse files
committed
Initialize Keto with OPL namespace definitions for authorizer tests
Define all test namespaces (resource, partition, profile_user, profile, custom) in a single OPL .ts file so Keto v25 validates relation tuples. Rename "default" namespace to "resource" since "default" is a reserved keyword in Keto's OPL parser. Switch from postgres-backed Keto to in-memory mode with auto-migration, removing the unnecessary database dependency and simplifying test setup.
1 parent 8489ed1 commit 9907389

File tree

5 files changed

+157
-122
lines changed

5 files changed

+157
-122
lines changed

frametests/deps/testoryketo/keto.go

Lines changed: 53 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,6 @@ const (
1717
OryKetoImage = "oryd/keto:latest"
1818

1919
KetoConfiguration = `
20-
version: v0.14.0
21-
2220
dsn: memory
2321
2422
serve:
@@ -29,25 +27,67 @@ serve:
2927
host: 0.0.0.0
3028
port: 4467
3129
30+
namespaces:
31+
location: file:///home/ory/namespaces
32+
3233
log:
3334
level: debug
3435
format: text
3536
36-
namespaces:
37-
- id: 0
38-
name: default
39-
- id: 1
40-
name: partition
41-
- id: 2
42-
name: default/profile
43-
- id: 3
44-
name: profile
45-
- id: 4
46-
name: custom
37+
`
38+
39+
// NamespacesOPL defines all OPL namespaces used by the authorizer tests.
40+
// All namespaces and relations that tests reference must be declared here
41+
// so that Keto's namespace validation accepts the relation tuples.
42+
NamespacesOPL = `import { Namespace, Context } from "@ory/keto-namespace-types"
43+
44+
class User implements Namespace {}
45+
class profile_user implements Namespace {}
46+
class profile implements Namespace {}
47+
class custom implements Namespace {}
48+
49+
class resource implements Namespace {
50+
related: {
51+
member: (User | SubjectSet<resource, "member">)[]
52+
owner: (User | SubjectSet<resource, "member">)[]
53+
admin: (User | SubjectSet<resource, "member">)[]
54+
viewer: (User | SubjectSet<resource, "member">)[]
55+
view: (User | SubjectSet<resource, "member">)[]
56+
comment: (User | SubjectSet<resource, "member">)[]
57+
edit: (User | SubjectSet<resource, "member">)[]
58+
delete: (User | SubjectSet<resource, "member">)[]
59+
push: (User | SubjectSet<resource, "member">)[]
60+
approve: (User | SubjectSet<resource, "member">)[]
61+
manage: (User | SubjectSet<resource, "member">)[]
62+
deploy: (User | SubjectSet<resource, "member">)[]
63+
configure: (User | SubjectSet<resource, "member">)[]
64+
other: (User | SubjectSet<resource, "member">)[]
65+
service: (User)[]
66+
}
67+
}
4768
69+
class partition implements Namespace {
70+
related: {
71+
member: (User | partition)[]
72+
manage: (User | SubjectSet<partition, "member">)[]
73+
read: (User | SubjectSet<partition, "member">)[]
74+
configure: (User | SubjectSet<partition, "member">)[]
75+
service: (User | profile_user)[]
76+
}
77+
}
4878
`
4979
)
5080

81+
// DefaultNamespaceFiles returns the OPL namespace files for test Keto setup.
82+
func DefaultNamespaceFiles() []NamespaceFile {
83+
return []NamespaceFile{
84+
{
85+
ContainerPath: "/home/ory/namespaces/namespaces.ts",
86+
Content: NamespacesOPL,
87+
},
88+
}
89+
}
90+
5191
// NamespaceFile represents an OPL namespace file to copy into the Keto container.
5292
type NamespaceFile struct {
5393
// ContainerPath is the absolute path inside the container (e.g. "/home/ory/namespaces/tenancy.ts").

frametests/testsuite.go

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -90,7 +90,10 @@ func WithTestDependencies(t *testing.T,
9090

9191
// WithAuthClaims creates a context with fully populated authentication claims
9292
// for test scenarios that require tenant-scoped operations.
93-
func (s *FrameBaseTestSuite) WithAuthClaims(ctx context.Context, tenantID, partitionID, profileID string) context.Context {
93+
func (s *FrameBaseTestSuite) WithAuthClaims(
94+
ctx context.Context,
95+
tenantID, partitionID, profileID string,
96+
) context.Context {
9497
claims := &security.AuthenticationClaims{
9598
TenantID: tenantID,
9699
PartitionID: partitionID,

0 commit comments

Comments
 (0)