Skip to content

Commit

Permalink
feat: Custom type and ref arg handling in SchemaProcessor with tests (#…
Browse files Browse the repository at this point in the history
  • Loading branch information
vaisshnavi7 authored Jan 9, 2025
1 parent 45074a3 commit 3517643
Show file tree
Hide file tree
Showing 10 changed files with 643 additions and 235 deletions.
80 changes: 50 additions & 30 deletions packages/data-schema/__tests__/CustomOperations.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -907,15 +907,15 @@ describe('CustomOperation transform', () => {
.query()
.arguments({})
.handler(a.handler.function(fn1).async())
.authorization((allow) => allow.authenticated())
.authorization((allow) => allow.authenticated()),
});

const { schema, lambdaFunctions } = s.transform();
expect(schema).toMatchSnapshot();
expect(lambdaFunctions).toMatchObject({
FnGetPostDetails: fn1,
});
})
});

test('defineFunction sync - async', () => {
const fn1 = defineFunctionStub({});
Expand All @@ -927,15 +927,15 @@ describe('CustomOperation transform', () => {
a.handler.function(fn1),
a.handler.function(fn1).async(),
])
.authorization((allow) => allow.authenticated())
.authorization((allow) => allow.authenticated()),
});

const { schema, lambdaFunctions } = s.transform();
expect(schema).toMatchSnapshot();
expect(lambdaFunctions).toMatchObject({
FnGetPostDetails: fn1,
});
})
});

test('defineFunction sync - async with returns generates type errors', () => {
const fn1 = defineFunctionStub({});
Expand All @@ -949,9 +949,9 @@ describe('CustomOperation transform', () => {
])
.authorization((allow) => allow.authenticated())
// @ts-expect-error
.returns({ })
.returns({}),
});
})
});

test('defineFunction async - async', () => {
const fn1 = defineFunctionStub({});
Expand All @@ -965,7 +965,7 @@ describe('CustomOperation transform', () => {
a.handler.function(fn1).async(),
a.handler.function(fn2).async(),
])
.authorization((allow) => allow.authenticated())
.authorization((allow) => allow.authenticated()),
});

const { schema, lambdaFunctions } = s.transform();
Expand All @@ -974,7 +974,7 @@ describe('CustomOperation transform', () => {
FnGetPostDetails: fn1,
FnGetPostDetails2: fn2,
});
})
});

test('defineFunction async - sync', () => {
const fn1 = defineFunctionStub({});
Expand All @@ -987,12 +987,12 @@ describe('CustomOperation transform', () => {
a.handler.function(fn1),
])
.returns(a.customType({}))
.authorization((allow) => allow.authenticated())
.authorization((allow) => allow.authenticated()),
});

const { schema, lambdaFunctions } = s.transform();
expect(schema).toMatchSnapshot();
})
});

test('pipeline / mix', () => {
const fn1 = defineFunctionStub({});
Expand Down Expand Up @@ -1341,15 +1341,14 @@ describe('custom operations + custom type auth inheritance', () => {

test('implicit custom type inherits auth rules from referencing op', () => {
const s = a.schema({
MyQueryReturnType: a.customType({
fieldA: a.string(),
fieldB: a.integer(),
}),
myQuery: a
.query()
.handler(a.handler.function('myFn'))
.returns(
a.customType({
fieldA: a.string(),
fieldB: a.integer(),
}),
)
.returns(a.ref('MyQueryReturnType'))
.authorization((allow) => allow.publicApiKey()),
});

Expand All @@ -1363,23 +1362,22 @@ describe('custom operations + custom type auth inheritance', () => {

test('nested custom types inherit auth rules from top-level referencing op', () => {
const s = a.schema({
MyQueryReturnType: a.customType({
fieldA: a.string(),
fieldB: a.integer(),
nestedCustomType: a.customType({
nestedA: a.string(),
nestedB: a.string(),
grandChild: a.customType({
grandA: a.string(),
grandB: a.string(),
}),
}),
}),
myQuery: a
.query()
.handler(a.handler.function('myFn'))
.returns(
a.customType({
fieldA: a.string(),
fieldB: a.integer(),
nestedCustomType: a.customType({
nestedA: a.string(),
nestedB: a.string(),
grandChild: a.customType({
grandA: a.string(),
grandB: a.string(),
}),
}),
}),
)
.returns(a.ref('MyQueryReturnType'))
.authorization((allow) => allow.publicApiKey()),
});

Expand All @@ -1401,6 +1399,28 @@ describe('custom operations + custom type auth inheritance', () => {
);
});

test('inline custom type inherits auth rules from referencing op', () => {
const s = a.schema({
myQuery: a
.query()
.handler(a.handler.function('myFn'))
.returns(
a.customType({
fieldA: a.string(),
fieldB: a.integer(),
}),
)
.authorization((allow) => allow.publicApiKey()),
});

const result = s.transform().schema;

expect(result).toMatchSnapshot();
expect(result).toEqual(
expect.stringContaining('type MyQueryReturnType @aws_api_key\n{'),
);
});

test('top-level custom type with nested top-level custom types inherits combined auth rules from referencing ops', () => {
const s = a.schema({
myQuery: a
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -242,20 +242,20 @@ type Query {
`;

exports[`custom operations Add entities to SQL schema add custom type, enum, and custom query to generated SQL schema 1`] = `
"type post @model(timestamps: null) @auth(rules: [{allow: private}])
{
title: String!
description: String
author: String
}
enum PostStatus {
"enum PostStatus {
draft
pending
approved
published
}
type post @model(timestamps: null) @auth(rules: [{allow: private}])
{
title: String!
description: String
author: String
}
type PostMeta @aws_cognito_user_pools
{
viewCount: Int
Expand Down Expand Up @@ -595,7 +595,11 @@ exports[`schema auth rules global public auth - multiple models 1`] = `
"functionSlots": [],
"jsFunctions": [],
"lambdaFunctions": {},
"schema": "type A @model @auth(rules: [{allow: public, provider: apiKey}])
"schema": "enum DTired {
?
}
type A @model @auth(rules: [{allow: public, provider: apiKey}])
{
field: String
}
Expand All @@ -621,10 +625,6 @@ type D @model @auth(rules: [{allow: public, provider: apiKey}])
tired: DTired
cId: ID
c: C @belongsTo(references: ["cId"])
}
enum DTired {
?
}",
}
`;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,16 +1,16 @@
// Jest Snapshot v1, https://goo.gl/fbAQLP

exports[`CustomOperation transform dynamo schema Custom Mutation w required arg and enum 1`] = `
"type Post @model @auth(rules: [{allow: private}])
{
title: String
}
enum LikePostReactionType {
"enum LikePostReactionType {
:shipit:
:risitas:
}
type Post @model @auth(rules: [{allow: private}])
{
title: String
}
type Mutation {
likePost(postId: String!, reactionType: LikePostReactionType): Post
}"
Expand Down Expand Up @@ -45,7 +45,7 @@ exports[`CustomOperation transform dynamo schema Custom mutation w inline boolea
`;

exports[`CustomOperation transform dynamo schema Custom mutation w inline custom return type 1`] = `
"type LikePostReturnType
"type LikePostReturnType
{
stringField: String
intField: Int
Expand Down Expand Up @@ -109,7 +109,7 @@ type Query {
`;

exports[`CustomOperation transform dynamo schema Custom query w inline custom return type 1`] = `
"type GetPostDetailsReturnType
"type GetPostDetailsReturnType
{
stringField: String
intField: Int
Expand Down Expand Up @@ -545,6 +545,18 @@ type Query {
}"
`;

exports[`custom operations + custom type auth inheritance inline custom type inherits auth rules from referencing op 1`] = `
"type MyQueryReturnType @aws_api_key
{
fieldA: String
fieldB: Int
}
type Query {
myQuery: MyQueryReturnType @function(name: "myFn") @auth(rules: [{allow: public, provider: apiKey}])
}"
`;

exports[`custom operations + custom type auth inheritance nested custom types inherit auth rules from top-level referencing op 1`] = `
"type MyQueryReturnType @aws_api_key
{
Expand Down
Loading

0 comments on commit 3517643

Please sign in to comment.