mirror of
https://github.com/lowdefy/lowdefy.git
synced 2025-01-06 13:15:24 +08:00
Merge pull request #48 from lowdefy/cleanup-engine
Clean up engine and operators
This commit is contained in:
commit
5492a287b7
@ -22,39 +22,9 @@ import type from '@lowdefy/type';
|
||||
import get from '@lowdefy/get';
|
||||
import set from '@lowdefy/set';
|
||||
import serializer from '@lowdefy/serializer';
|
||||
import gql from 'graphql-tag';
|
||||
|
||||
import makeContextId from './makeContextId';
|
||||
|
||||
const UPDATE_USER_PROFILE = gql`
|
||||
mutation updateUserProfile($updateUserProfileInput: UpdateUserProfileInput!) {
|
||||
updateUserProfile(updateUserProfileInput: $updateUserProfileInput) {
|
||||
success
|
||||
}
|
||||
}
|
||||
`;
|
||||
|
||||
const REFRESH_USER = gql`
|
||||
query refreshUser {
|
||||
user {
|
||||
id
|
||||
email
|
||||
phone_number
|
||||
given_name
|
||||
family_name
|
||||
name
|
||||
nickname
|
||||
picture
|
||||
preferred_username
|
||||
attributes
|
||||
groupIds
|
||||
roles
|
||||
adminGroupIds
|
||||
allPageIds
|
||||
}
|
||||
}
|
||||
`;
|
||||
|
||||
class Actions {
|
||||
constructor(context) {
|
||||
this.context = context;
|
||||
@ -62,35 +32,25 @@ class Actions {
|
||||
this.build = this.build.bind(this);
|
||||
this.callMethod = this.callMethod.bind(this);
|
||||
this.fetch = this.fetch.bind(this);
|
||||
this.getCliToken = this.getCliToken.bind(this);
|
||||
this.link = this.link.bind(this);
|
||||
this.login = this.login.bind(this);
|
||||
this.logout = this.logout.bind(this);
|
||||
this.message = this.message.bind(this);
|
||||
this.mutate = this.mutate.bind(this);
|
||||
this.notification = this.notification.bind(this);
|
||||
this.reset = this.reset.bind(this);
|
||||
this.scrollTo = this.scrollTo.bind(this);
|
||||
this.setGlobal = this.setGlobal.bind(this);
|
||||
this.setState = this.setState.bind(this);
|
||||
this.updateProfile = this.updateProfile.bind(this);
|
||||
this.validate = this.validate.bind(this);
|
||||
|
||||
this.actions = {
|
||||
CallMethod: this.callMethod,
|
||||
Fetch: this.fetch,
|
||||
GetCliToken: this.getCliToken,
|
||||
Link: this.link,
|
||||
Login: this.login,
|
||||
Logout: this.logout,
|
||||
Message: this.message,
|
||||
Mutate: this.mutate,
|
||||
Notification: this.notification,
|
||||
Reset: this.reset,
|
||||
ScrollTo: this.scrollTo,
|
||||
SetGlobal: this.setGlobal,
|
||||
SetState: this.setState,
|
||||
UpdateProfile: this.updateProfile,
|
||||
Validate: this.validate,
|
||||
};
|
||||
}
|
||||
@ -178,23 +138,6 @@ class Actions {
|
||||
}
|
||||
}
|
||||
|
||||
async getCliToken(_, successMessage, errorMessage) {
|
||||
try {
|
||||
const response = await this.context.appGraphql.getCliToken();
|
||||
console.log('CLI TOKEN:');
|
||||
console.log(response);
|
||||
try {
|
||||
navigator.clipboard.writeText(response);
|
||||
} catch (error) {
|
||||
console.error(error);
|
||||
}
|
||||
return { successMessage, response };
|
||||
} catch (error) {
|
||||
// log e
|
||||
return Promise.reject({ errorMessage: errorMessage || 'Failed to get cli token.', error });
|
||||
}
|
||||
}
|
||||
|
||||
fetch(params, successMessage, errorMessage) {
|
||||
if (type.isNone(params)) {
|
||||
return this.context.Requests.callRequests()
|
||||
@ -250,37 +193,6 @@ class Actions {
|
||||
});
|
||||
}
|
||||
|
||||
notification(params = {}, successMessage, errorMessage, args, arrayIndices, blockId) {
|
||||
try {
|
||||
const { output: parsed, errors: parseErrors } = this.context.parser.parse({
|
||||
args,
|
||||
arrayIndices,
|
||||
input: params,
|
||||
location: blockId,
|
||||
});
|
||||
if (parseErrors.length > 0) {
|
||||
return Promise.reject({
|
||||
errorMessage: errorMessage || `Notification failed.`,
|
||||
error: parseErrors,
|
||||
});
|
||||
}
|
||||
this.context.displayNotification[parsed.status || 'success']({
|
||||
bottom: parsed.bottom,
|
||||
description: parsed.description || '',
|
||||
duration: type.isNone(parsed.duration) ? 5 : parsed.duration,
|
||||
message: parsed.message || 'Success',
|
||||
placement: parsed.placement,
|
||||
top: parsed.top,
|
||||
});
|
||||
return Promise.resolve({ successMessage });
|
||||
} catch (error) {
|
||||
return Promise.reject({
|
||||
errorMessage: errorMessage || `Notification failed.`,
|
||||
error,
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
message(params = {}, successMessage, errorMessage, args, arrayIndices, blockId) {
|
||||
try {
|
||||
const { output: parsed, errors: parseErrors } = this.context.parser.parse({
|
||||
@ -420,7 +332,6 @@ class Actions {
|
||||
// set input for page before changing
|
||||
if (!type.isNone(parsedParams.input)) {
|
||||
const nextContextId = makeContextId({
|
||||
branch: this.context.branch,
|
||||
pageId,
|
||||
search: parsedParams.urlQuery,
|
||||
blockId: pageId,
|
||||
@ -455,97 +366,6 @@ class Actions {
|
||||
return Promise.resolve({ successMessage });
|
||||
}
|
||||
|
||||
logout(_, successMessage, errorMessage) {
|
||||
try {
|
||||
this.context.localStore.setItem(`token:${this.context.branch}`, '');
|
||||
if (this.context.openidLogoutUrl) {
|
||||
this.context.window.location.href = this.context.openidLogoutUrl;
|
||||
} else {
|
||||
this.context.window.location.href = this.context.window.location.origin;
|
||||
}
|
||||
} catch (error) {
|
||||
return Promise.reject({ errorMessage: errorMessage || 'Failed to logout.', error });
|
||||
}
|
||||
return Promise.resolve({ successMessage });
|
||||
}
|
||||
|
||||
login(_, successMessage, errorMessage) {
|
||||
try {
|
||||
this.context.routeHistory.push(`/login`);
|
||||
} catch (error) {
|
||||
return Promise.reject({ errorMessage: errorMessage || 'Failed login redirect.', error });
|
||||
}
|
||||
return Promise.resolve({ successMessage });
|
||||
}
|
||||
|
||||
updateProfile(userUpdate, successMessage, errorMessage, args, arrayIndices, blockId) {
|
||||
try {
|
||||
const { output: parsedUserUpdate, errors: userParseErrors } = this.context.parser.parse({
|
||||
args,
|
||||
arrayIndices,
|
||||
input: userUpdate,
|
||||
location: blockId,
|
||||
});
|
||||
if (userParseErrors.length > 0) {
|
||||
return Promise.reject({
|
||||
errorMessage: errorMessage || 'Failed to update profile due to parser error.',
|
||||
error: userParseErrors,
|
||||
});
|
||||
}
|
||||
const {
|
||||
id,
|
||||
phone_number,
|
||||
name,
|
||||
family_name,
|
||||
given_name,
|
||||
nickname,
|
||||
picture,
|
||||
preferred_username,
|
||||
attributes,
|
||||
} = parsedUserUpdate;
|
||||
return this.context.client
|
||||
.mutate({
|
||||
mutation: UPDATE_USER_PROFILE,
|
||||
variables: {
|
||||
updateUserProfileInput: {
|
||||
userId: id,
|
||||
phone_number,
|
||||
name,
|
||||
family_name,
|
||||
given_name,
|
||||
nickname,
|
||||
picture,
|
||||
preferred_username,
|
||||
attributes,
|
||||
},
|
||||
},
|
||||
// refetch user query
|
||||
// TODO: Apollo cache does not update if user is returned by mutation
|
||||
// Maybe Apollo client V3 will fix this?
|
||||
refetchQueries: [{ query: REFRESH_USER }],
|
||||
awaitRefetchQueries: true,
|
||||
})
|
||||
.then(() => {
|
||||
return { successMessage };
|
||||
})
|
||||
.catch((error) => {
|
||||
if (errorMessage) {
|
||||
return Promise.reject({ errorMessage, error });
|
||||
}
|
||||
try {
|
||||
const { displayTitle, displayMessage } = error.graphQLErrors[0].extensions;
|
||||
return Promise.reject({ errorMessage: `${displayTitle}: ${displayMessage}`, error });
|
||||
} catch (e) {
|
||||
// Not a graphQLError, displayTitle, displayMessage do not exist
|
||||
}
|
||||
return Promise.reject({ errorMessage: error.message, error });
|
||||
});
|
||||
} catch (error) {
|
||||
// log e
|
||||
return Promise.reject({ errorMessage: errorMessage || 'Failed to update profile.', error });
|
||||
}
|
||||
}
|
||||
|
||||
validate(blockId, successMessage, errorMessage) {
|
||||
try {
|
||||
this.context.showValidationErrors = true;
|
||||
|
@ -1,55 +0,0 @@
|
||||
/*
|
||||
Copyright 2020 Lowdefy, Inc
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
*/
|
||||
|
||||
import gql from 'graphql-tag';
|
||||
|
||||
const GET_CLI_TOKEN = gql`
|
||||
query getCliToken {
|
||||
cliToken
|
||||
}
|
||||
`;
|
||||
|
||||
class AppGraphql {
|
||||
constructor({ branch, client }) {
|
||||
this.branch = branch;
|
||||
this.client = client;
|
||||
}
|
||||
|
||||
callMutation(mutation, variables) {
|
||||
return this.client.mutate({
|
||||
mutation,
|
||||
variables,
|
||||
});
|
||||
}
|
||||
|
||||
callQuery(query, variables) {
|
||||
return this.client.query({
|
||||
query,
|
||||
variables,
|
||||
});
|
||||
}
|
||||
|
||||
async getCliToken() {
|
||||
try {
|
||||
const res = await this.callQuery(GET_CLI_TOKEN, {});
|
||||
return res.data.cliToken;
|
||||
} catch (error) {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
export default AppGraphql;
|
@ -613,7 +613,7 @@ class Blocks {
|
||||
}
|
||||
|
||||
generateCacheId(blockIdPattern) {
|
||||
return `${this.context.branch}:${this.context.pageId}:${blockIdPattern}:${Math.random()
|
||||
return `${this.context.pageId}:${blockIdPattern}:${Math.random()
|
||||
.toString(36)
|
||||
.replace(/[^a-z]+/g, '')
|
||||
.substr(0, 5)}`;
|
||||
|
@ -72,7 +72,6 @@ class Mutations {
|
||||
mutationId,
|
||||
args: serializer.serialize(args) || {},
|
||||
blockId: this.context.blockId,
|
||||
branch: this.context.branch,
|
||||
input: serializer.serialize(this.context.input),
|
||||
lowdefyGlobal: serializer.serialize(this.context.lowdefyGlobal),
|
||||
pageId: this.context.pageId,
|
||||
|
@ -90,7 +90,6 @@ class Requests {
|
||||
requestInput: {
|
||||
requestId,
|
||||
blockId: this.context.blockId,
|
||||
branch: this.context.branch,
|
||||
input: serializer.serialize(this.context.input),
|
||||
lowdefyGlobal: serializer.serialize(this.context.lowdefyGlobal),
|
||||
pageId: this.context.pageId,
|
||||
|
@ -14,7 +14,6 @@
|
||||
limitations under the License.
|
||||
*/
|
||||
|
||||
import { getFieldVales } from '@lowdefy/helpers';
|
||||
import { WebParser } from '@lowdefy/operators';
|
||||
|
||||
import Actions from './Actions';
|
||||
@ -29,7 +28,6 @@ const blockData = ({
|
||||
areas,
|
||||
blockId,
|
||||
blocks,
|
||||
branch,
|
||||
defaultValue,
|
||||
field,
|
||||
id,
|
||||
@ -49,7 +47,6 @@ const blockData = ({
|
||||
areas,
|
||||
blockId,
|
||||
blocks,
|
||||
branch,
|
||||
defaultValue,
|
||||
field,
|
||||
id,
|
||||
@ -73,7 +70,6 @@ const getContext = async ({ block, contextId, pageId, rootContext, message, noti
|
||||
rootContext.contexts[contextId].lowdefyGlobal = rootContext.lowdefyGlobal;
|
||||
rootContext.contexts[contextId].menus = rootContext.menus;
|
||||
rootContext.contexts[contextId].config = rootContext.config;
|
||||
rootContext.contexts[contextId].user = rootContext.user;
|
||||
rootContext.contexts[contextId].update();
|
||||
return rootContext.contexts[contextId];
|
||||
}
|
||||
@ -85,22 +81,16 @@ const getContext = async ({ block, contextId, pageId, rootContext, message, noti
|
||||
id: contextId,
|
||||
pageId,
|
||||
actionLog: [],
|
||||
appGraphql: rootContext.appGraphql,
|
||||
blockId: block.blockId,
|
||||
branch: rootContext.branch,
|
||||
client: rootContext.client,
|
||||
Components: rootContext.Components,
|
||||
config: rootContext.config,
|
||||
displayMessage: message,
|
||||
displayNotification: notification,
|
||||
document: rootContext.document,
|
||||
input: rootContext.input[contextId] || {},
|
||||
allInputs: rootContext.input,
|
||||
localStore: rootContext.localStore,
|
||||
lowdefyGlobal: rootContext.lowdefyGlobal,
|
||||
menus: rootContext.menus,
|
||||
mutations: {},
|
||||
openidLogoutUrl: rootContext.openidLogoutUrl,
|
||||
requests: {},
|
||||
rootBlock: blockData(block), // filter block to prevent circular loop structure
|
||||
routeHistory: rootContext.routeHistory,
|
||||
@ -108,7 +98,6 @@ const getContext = async ({ block, contextId, pageId, rootContext, message, noti
|
||||
state: {},
|
||||
update: () => {}, // Initialize update since Requests/Mutations might call it during context creation
|
||||
urlQuery: rootContext.urlQuery,
|
||||
user: rootContext.user,
|
||||
window: rootContext.window,
|
||||
updateListeners: new Set(),
|
||||
};
|
||||
|
@ -15,7 +15,6 @@
|
||||
*/
|
||||
|
||||
import Actions from './Actions';
|
||||
import AppGraphql from './AppGraphql';
|
||||
import BlockActions from './BlockActions';
|
||||
import Blocks from './Blocks';
|
||||
import makeContextId from './makeContextId';
|
||||
@ -25,6 +24,6 @@ import State from './State';
|
||||
|
||||
import getContext from './getContext';
|
||||
|
||||
export { Actions, AppGraphql, BlockActions, Blocks, makeContextId, Mutations, Requests, State };
|
||||
export { Actions, BlockActions, Blocks, makeContextId, Mutations, Requests, State };
|
||||
|
||||
export default getContext;
|
||||
|
@ -17,17 +17,14 @@
|
||||
import type from '@lowdefy/type';
|
||||
import serializer from '@lowdefy/serializer';
|
||||
|
||||
function makeContextId({ blockId, branch, pageId, urlQuery = {} }) {
|
||||
function makeContextId({ blockId, pageId, urlQuery = {} }) {
|
||||
if (!type.isString(blockId)) {
|
||||
throw new Error(`Expected string for parameter blockId, received ${blockId}`);
|
||||
}
|
||||
if (!type.isString(branch)) {
|
||||
throw new Error(`Expected string for parameter branch, received ${branch}`);
|
||||
}
|
||||
if (!type.isString(pageId)) {
|
||||
throw new Error(`Expected string for parameter pageId, received ${pageId}`);
|
||||
}
|
||||
return `${branch}:${pageId}:${blockId}:${serializer.serializeToString(urlQuery)}`;
|
||||
return `${pageId}:${blockId}:${serializer.serializeToString(urlQuery)}`;
|
||||
}
|
||||
|
||||
export default makeContextId;
|
||||
|
@ -1,6 +1,5 @@
|
||||
import testContext from '../testContext';
|
||||
|
||||
const branch = 'master';
|
||||
const openidLogoutUrl = 'logout';
|
||||
const pageId = 'one';
|
||||
const user = { firstName: 'ABC' };
|
||||
@ -15,7 +14,6 @@ const mockMessageError = jest.fn();
|
||||
const message = { loading: () => jest.fn(), error: mockMessageError, success: mockMessageSuccess };
|
||||
|
||||
const rootContext = {
|
||||
branch,
|
||||
client,
|
||||
message,
|
||||
openidLogoutUrl,
|
||||
|
@ -44,13 +44,11 @@ const mockMessageSuccess = jest.fn();
|
||||
const mockMessageError = jest.fn();
|
||||
const message = { loading: () => jest.fn(), error: mockMessageError, success: mockMessageSuccess };
|
||||
|
||||
const branch = 'master';
|
||||
const openidLogoutUrl = 'logout';
|
||||
const pageId = 'one';
|
||||
const user = { firstName: 'ABC' };
|
||||
|
||||
const rootContext = {
|
||||
branch,
|
||||
client,
|
||||
// appGraphql,
|
||||
message,
|
||||
|
@ -19,13 +19,11 @@ const window = {
|
||||
scrollTo: mockWindowScrollTo,
|
||||
};
|
||||
|
||||
const branch = 'master';
|
||||
const openidLogoutUrl = 'logout';
|
||||
const pageId = 'one';
|
||||
const user = { firstName: 'ABC' };
|
||||
|
||||
const rootContext = {
|
||||
branch,
|
||||
client,
|
||||
// appGraphql,
|
||||
message,
|
||||
@ -300,7 +298,7 @@ test('Link with pageId and input', async () => {
|
||||
const { button } = context.RootBlocks.map;
|
||||
button.callAction({ action: 'onClick' });
|
||||
expect(context.routeHistory).toEqual(['/page1']);
|
||||
expect(context.allInputs['branch:page1:page1:{}']).toEqual({ data: 1 });
|
||||
expect(context.allInputs['page1:page1:{}']).toEqual({ data: 1 });
|
||||
});
|
||||
|
||||
test('Link with pageId and input and newWindow', async () => {
|
||||
@ -341,5 +339,5 @@ test('Link with pageId and input and newWindow', async () => {
|
||||
const { button } = context.RootBlocks.map;
|
||||
button.callAction({ action: 'onClick' });
|
||||
expect(context.window.open.mock.calls).toEqual([['http://lowdefy.com/page1', '_blank']]);
|
||||
expect(context.allInputs['branch:page1:page1:{}']).toEqual({ data: 1 });
|
||||
expect(context.allInputs['page1:page1:{}']).toEqual({ data: 1 });
|
||||
});
|
||||
|
@ -9,13 +9,11 @@ const mockMessageSuccess = jest.fn();
|
||||
const mockMessageError = jest.fn();
|
||||
const message = { loading: () => jest.fn(), error: mockMessageError, success: mockMessageSuccess };
|
||||
|
||||
const branch = 'master';
|
||||
const openidLogoutUrl = 'logout';
|
||||
const pageId = 'one';
|
||||
const user = { firstName: 'ABC' };
|
||||
|
||||
const rootContext = {
|
||||
branch,
|
||||
client,
|
||||
// appGraphql,
|
||||
message,
|
||||
|
@ -93,13 +93,11 @@ const window = {
|
||||
scrollTo: mockWindowScrollTo,
|
||||
};
|
||||
|
||||
const branch = 'master';
|
||||
const openidLogoutUrl = 'logout';
|
||||
const pageId = 'one';
|
||||
const user = { firstName: 'ABC' };
|
||||
|
||||
const rootContext = {
|
||||
branch,
|
||||
client,
|
||||
// appGraphql,
|
||||
message,
|
||||
|
@ -1,189 +0,0 @@
|
||||
import testContext from '../testContext';
|
||||
|
||||
const client = {
|
||||
writeFragment: jest.fn(),
|
||||
};
|
||||
|
||||
// Mock message
|
||||
const mockMessageSuccess = jest.fn();
|
||||
const mockMessageError = jest.fn();
|
||||
const message = { loading: () => jest.fn(), error: mockMessageError, success: mockMessageSuccess };
|
||||
|
||||
// Mock Notification
|
||||
const mockNotificationSuccess = jest.fn();
|
||||
const mockNotificationError = jest.fn();
|
||||
const notification = {
|
||||
loading: () => jest.fn(),
|
||||
error: mockNotificationError,
|
||||
success: mockNotificationSuccess,
|
||||
};
|
||||
|
||||
const branch = 'master';
|
||||
const openidLogoutUrl = 'logout';
|
||||
const pageId = 'one';
|
||||
const user = { firstName: 'ABC' };
|
||||
|
||||
const rootContext = {
|
||||
branch,
|
||||
client,
|
||||
// appGraphql,
|
||||
message,
|
||||
notification,
|
||||
openidLogoutUrl,
|
||||
user,
|
||||
};
|
||||
|
||||
test('Notification with message', async () => {
|
||||
const rootBlock = {
|
||||
blockId: 'root',
|
||||
meta: {
|
||||
category: 'context',
|
||||
},
|
||||
areas: {
|
||||
content: {
|
||||
blocks: [
|
||||
{
|
||||
blockId: 'button',
|
||||
type: 'Button',
|
||||
meta: {
|
||||
category: 'display',
|
||||
valueType: 'string',
|
||||
},
|
||||
actions: {
|
||||
onClick: [
|
||||
{
|
||||
id: 'a',
|
||||
type: 'Notification',
|
||||
params: { message: 'test' },
|
||||
},
|
||||
],
|
||||
},
|
||||
},
|
||||
],
|
||||
},
|
||||
},
|
||||
};
|
||||
const context = testContext({
|
||||
rootContext,
|
||||
rootBlock,
|
||||
pageId,
|
||||
});
|
||||
const { button } = context.RootBlocks.map;
|
||||
button.callAction({ action: 'onClick' });
|
||||
expect(mockNotificationError.mock.calls).toEqual([]);
|
||||
expect(mockNotificationSuccess.mock.calls).toEqual([
|
||||
[
|
||||
{
|
||||
bottom: undefined,
|
||||
description: '',
|
||||
duration: 5,
|
||||
message: 'test',
|
||||
placement: undefined,
|
||||
top: undefined,
|
||||
},
|
||||
],
|
||||
]);
|
||||
});
|
||||
|
||||
test('Notification with status error and message', async () => {
|
||||
const rootBlock = {
|
||||
blockId: 'root',
|
||||
meta: {
|
||||
category: 'context',
|
||||
},
|
||||
areas: {
|
||||
content: {
|
||||
blocks: [
|
||||
{
|
||||
blockId: 'button',
|
||||
type: 'Button',
|
||||
meta: {
|
||||
category: 'display',
|
||||
valueType: 'string',
|
||||
},
|
||||
actions: {
|
||||
onClick: [
|
||||
{
|
||||
id: 'a',
|
||||
type: 'Notification',
|
||||
params: { message: 'err', status: 'error' },
|
||||
},
|
||||
],
|
||||
},
|
||||
},
|
||||
],
|
||||
},
|
||||
},
|
||||
};
|
||||
const context = testContext({
|
||||
rootContext,
|
||||
rootBlock,
|
||||
pageId,
|
||||
});
|
||||
const { button } = context.RootBlocks.map;
|
||||
button.callAction({ action: 'onClick' });
|
||||
expect(mockNotificationSuccess.mock.calls).toEqual([]);
|
||||
expect(mockNotificationError.mock.calls).toEqual([
|
||||
[
|
||||
{
|
||||
bottom: undefined,
|
||||
description: '',
|
||||
duration: 5,
|
||||
message: 'err',
|
||||
placement: undefined,
|
||||
top: undefined,
|
||||
},
|
||||
],
|
||||
]);
|
||||
});
|
||||
|
||||
test('Notification with no params', async () => {
|
||||
const rootBlock = {
|
||||
blockId: 'root',
|
||||
meta: {
|
||||
category: 'context',
|
||||
},
|
||||
areas: {
|
||||
content: {
|
||||
blocks: [
|
||||
{
|
||||
blockId: 'button',
|
||||
type: 'Button',
|
||||
meta: {
|
||||
category: 'display',
|
||||
valueType: 'string',
|
||||
},
|
||||
actions: {
|
||||
onClick: [
|
||||
{
|
||||
id: 'a',
|
||||
type: 'Notification',
|
||||
},
|
||||
],
|
||||
},
|
||||
},
|
||||
],
|
||||
},
|
||||
},
|
||||
};
|
||||
const context = testContext({
|
||||
rootContext,
|
||||
rootBlock,
|
||||
pageId,
|
||||
});
|
||||
const { button } = context.RootBlocks.map;
|
||||
button.callAction({ action: 'onClick' });
|
||||
expect(mockNotificationError.mock.calls).toEqual([]);
|
||||
expect(mockNotificationSuccess.mock.calls).toEqual([
|
||||
[
|
||||
{
|
||||
bottom: undefined,
|
||||
description: '',
|
||||
duration: 5,
|
||||
message: 'Success',
|
||||
placement: undefined,
|
||||
top: undefined,
|
||||
},
|
||||
],
|
||||
]);
|
||||
});
|
@ -44,13 +44,11 @@ const mockMessageSuccess = jest.fn();
|
||||
const mockMessageError = jest.fn();
|
||||
const message = { loading: () => jest.fn(), error: mockMessageError, success: mockMessageSuccess };
|
||||
|
||||
const branch = 'master';
|
||||
const openidLogoutUrl = 'logout';
|
||||
const pageId = 'one';
|
||||
const user = { firstName: 'ABC' };
|
||||
|
||||
const rootContext = {
|
||||
branch,
|
||||
client,
|
||||
message,
|
||||
document,
|
||||
|
@ -29,13 +29,11 @@ const window = {
|
||||
scrollTo: mockWindowScrollTo,
|
||||
};
|
||||
|
||||
const branch = 'master';
|
||||
const openidLogoutUrl = 'logout';
|
||||
const pageId = 'one';
|
||||
const user = { firstName: 'ABC' };
|
||||
|
||||
const rootContext = {
|
||||
branch,
|
||||
client,
|
||||
// appGraphql,
|
||||
message,
|
||||
|
@ -9,13 +9,11 @@ const mockMessageSuccess = jest.fn();
|
||||
const mockMessageError = jest.fn();
|
||||
const message = { loading: () => jest.fn(), error: mockMessageError, success: mockMessageSuccess };
|
||||
|
||||
const branch = 'master';
|
||||
const openidLogoutUrl = 'logout';
|
||||
const pageId = 'one';
|
||||
const user = { firstName: 'ABC' };
|
||||
|
||||
const rootContext = {
|
||||
branch,
|
||||
client,
|
||||
// appGraphql,
|
||||
message,
|
||||
|
@ -9,13 +9,11 @@ const mockMessageSuccess = jest.fn();
|
||||
const mockMessageError = jest.fn();
|
||||
const message = { loading: () => jest.fn(), error: mockMessageError, success: mockMessageSuccess };
|
||||
|
||||
const branch = 'master';
|
||||
const openidLogoutUrl = 'logout';
|
||||
const pageId = 'one';
|
||||
const user = { firstName: 'ABC' };
|
||||
|
||||
const rootContext = {
|
||||
branch,
|
||||
client,
|
||||
message,
|
||||
openidLogoutUrl,
|
||||
|
@ -7,12 +7,10 @@ import State from '../../src/State';
|
||||
|
||||
import testContext from '../testContext';
|
||||
|
||||
const branch = 'master';
|
||||
const pageId = 'one';
|
||||
const client = { writeFragment: jest.fn() };
|
||||
|
||||
const rootContext = {
|
||||
branch,
|
||||
client,
|
||||
};
|
||||
|
||||
@ -53,7 +51,6 @@ test('set block to init', () => {
|
||||
// can't use testContext
|
||||
test('Blocks to init with no blocks passed', () => {
|
||||
const context = {
|
||||
branch,
|
||||
client,
|
||||
pageId,
|
||||
state: { a: 'a' },
|
||||
@ -73,7 +70,6 @@ test('Blocks to init with no blocks passed', () => {
|
||||
// can't use testContext
|
||||
test('Blocks to init with arrayIndices not an array', () => {
|
||||
const context = {
|
||||
branch,
|
||||
client,
|
||||
pageId,
|
||||
state: { textInput: 'a' },
|
||||
@ -116,7 +112,6 @@ test('Blocks to init with arrayIndices not an array', () => {
|
||||
|
||||
test('Blocks to init with undefined arrayIndices', () => {
|
||||
const context = {
|
||||
branch,
|
||||
client,
|
||||
pageId,
|
||||
state: { textInput: 'a' },
|
||||
|
@ -1,11 +1,9 @@
|
||||
import testContext from '../testContext';
|
||||
|
||||
const branch = 'master';
|
||||
const pageId = 'one';
|
||||
const client = { writeFragment: jest.fn() };
|
||||
|
||||
const rootContext = {
|
||||
branch,
|
||||
client,
|
||||
};
|
||||
|
||||
|
@ -2,12 +2,10 @@
|
||||
import testContext from '../testContext';
|
||||
|
||||
const NUM_TIMES = 10;
|
||||
const branch = 'master';
|
||||
const pageId = 'one';
|
||||
const client = { writeFragment: jest.fn() };
|
||||
|
||||
const rootContext = {
|
||||
branch,
|
||||
client,
|
||||
};
|
||||
|
||||
|
@ -1,11 +1,9 @@
|
||||
import testContext from '../testContext';
|
||||
|
||||
const branch = 'master';
|
||||
const pageId = 'one';
|
||||
const client = { writeFragment: jest.fn() };
|
||||
|
||||
const rootContext = {
|
||||
branch,
|
||||
client,
|
||||
};
|
||||
|
||||
|
@ -1,11 +1,9 @@
|
||||
import testContext from '../testContext';
|
||||
|
||||
const branch = 'master';
|
||||
const pageId = 'one';
|
||||
const client = { writeFragment: jest.fn() };
|
||||
|
||||
const rootContext = {
|
||||
branch,
|
||||
client,
|
||||
};
|
||||
|
||||
|
@ -1,12 +1,10 @@
|
||||
/* eslint-disable dot-notation */
|
||||
import testContext from '../testContext';
|
||||
|
||||
const branch = 'master';
|
||||
const pageId = 'one';
|
||||
const client = { writeFragment: jest.fn() };
|
||||
|
||||
const rootContext = {
|
||||
branch,
|
||||
client,
|
||||
};
|
||||
|
||||
|
@ -1,11 +1,9 @@
|
||||
import testContext from '../testContext';
|
||||
|
||||
const branch = 'master';
|
||||
const pageId = 'one';
|
||||
const client = { writeFragment: jest.fn() };
|
||||
|
||||
const rootContext = {
|
||||
branch,
|
||||
client,
|
||||
};
|
||||
|
||||
|
@ -1,11 +1,9 @@
|
||||
import testContext from '../testContext';
|
||||
|
||||
const branch = 'master';
|
||||
const pageId = 'one';
|
||||
const client = { writeFragment: jest.fn() };
|
||||
|
||||
const rootContext = {
|
||||
branch,
|
||||
client,
|
||||
};
|
||||
|
||||
|
@ -1,12 +1,10 @@
|
||||
/* eslint-disable dot-notation */
|
||||
import testContext from '../testContext';
|
||||
|
||||
const branch = 'master';
|
||||
const pageId = 'one';
|
||||
const client = { writeFragment: jest.fn() };
|
||||
|
||||
const rootContext = {
|
||||
branch,
|
||||
client,
|
||||
};
|
||||
|
||||
|
@ -1,11 +1,9 @@
|
||||
import testContext from '../testContext';
|
||||
|
||||
const branch = 'master';
|
||||
const pageId = 'one';
|
||||
const client = { writeFragment: jest.fn() };
|
||||
|
||||
const rootContext = {
|
||||
branch,
|
||||
client,
|
||||
};
|
||||
|
||||
|
@ -1,11 +1,9 @@
|
||||
import testContext from '../testContext';
|
||||
|
||||
const branch = 'master';
|
||||
const pageId = 'one';
|
||||
const client = { writeFragment: jest.fn() };
|
||||
|
||||
const rootContext = {
|
||||
branch,
|
||||
client,
|
||||
};
|
||||
|
||||
|
@ -2,7 +2,6 @@
|
||||
import testContext from './testContext';
|
||||
|
||||
const pageId = 'one';
|
||||
const branch = 'master';
|
||||
|
||||
const mockLoadingCallback = jest.fn();
|
||||
const mockLoading = jest.fn(() => mockLoadingCallback);
|
||||
@ -35,7 +34,6 @@ const mockDate = jest.fn(() => ({ date: 0 }));
|
||||
mockDate.now = jest.fn(() => 0);
|
||||
|
||||
const rootContext = {
|
||||
branch,
|
||||
client,
|
||||
message,
|
||||
};
|
||||
|
@ -38,7 +38,6 @@ const rootBlock = {
|
||||
};
|
||||
|
||||
const blockId = 'one';
|
||||
const branch = 'master';
|
||||
const input = {};
|
||||
const lowdefyGlobal = {};
|
||||
const pageId = 'one';
|
||||
@ -53,7 +52,6 @@ beforeEach(() => {
|
||||
test('callMutation', async () => {
|
||||
const context = {
|
||||
blockId,
|
||||
branch,
|
||||
client,
|
||||
input,
|
||||
lowdefyGlobal,
|
||||
@ -78,7 +76,6 @@ test('callMutation', async () => {
|
||||
test('callMutation error', async () => {
|
||||
const context = {
|
||||
blockId,
|
||||
branch,
|
||||
client,
|
||||
input,
|
||||
lowdefyGlobal,
|
||||
@ -111,7 +108,6 @@ test('callMutation error', async () => {
|
||||
test('callMutation that is not on root block', async () => {
|
||||
const context = {
|
||||
blockId,
|
||||
branch,
|
||||
client,
|
||||
input,
|
||||
lowdefyGlobal,
|
||||
@ -140,7 +136,6 @@ test('callMutation that is not on root block', async () => {
|
||||
test('callMutation on root block with no mutations', async () => {
|
||||
const context = {
|
||||
blockId,
|
||||
branch,
|
||||
client,
|
||||
input,
|
||||
lowdefyGlobal,
|
||||
@ -170,7 +165,6 @@ test('update function should be called', async () => {
|
||||
const updateFunction = jest.fn();
|
||||
const context = {
|
||||
blockId,
|
||||
branch,
|
||||
client,
|
||||
input,
|
||||
lowdefyGlobal,
|
||||
|
@ -50,7 +50,6 @@ const rootBlock = {
|
||||
};
|
||||
|
||||
const blockId = 'one';
|
||||
const branch = 'master';
|
||||
const input = {};
|
||||
const lowdefyGlobal = {};
|
||||
const pageId = 'one';
|
||||
@ -65,7 +64,6 @@ beforeEach(() => {
|
||||
test('callRequest', async () => {
|
||||
const context = {
|
||||
blockId,
|
||||
branch,
|
||||
client,
|
||||
input,
|
||||
lowdefyGlobal,
|
||||
@ -90,7 +88,6 @@ test('callRequest', async () => {
|
||||
test('callRequests all requests', async () => {
|
||||
const context = {
|
||||
blockId,
|
||||
branch,
|
||||
client,
|
||||
input,
|
||||
lowdefyGlobal,
|
||||
@ -148,7 +145,6 @@ test('callRequests all requests', async () => {
|
||||
test('callRequests', async () => {
|
||||
const context = {
|
||||
blockId,
|
||||
branch,
|
||||
client,
|
||||
input,
|
||||
lowdefyGlobal,
|
||||
@ -182,7 +178,6 @@ test('callRequests', async () => {
|
||||
test('callRequest error', async () => {
|
||||
const context = {
|
||||
blockId,
|
||||
branch,
|
||||
client,
|
||||
input,
|
||||
lowdefyGlobal,
|
||||
@ -215,7 +210,6 @@ test('callRequest error', async () => {
|
||||
test('callRequest that is not on root block', async () => {
|
||||
const context = {
|
||||
blockId,
|
||||
branch,
|
||||
client,
|
||||
input,
|
||||
lowdefyGlobal,
|
||||
@ -235,7 +229,6 @@ test('callRequest that is not on root block', async () => {
|
||||
test('callRequest on root block with no requests', async () => {
|
||||
const context = {
|
||||
blockId,
|
||||
branch,
|
||||
client,
|
||||
input,
|
||||
lowdefyGlobal,
|
||||
@ -255,7 +248,6 @@ test('callRequest on root block with no requests', async () => {
|
||||
test('callRequest request does not exist', async () => {
|
||||
const context = {
|
||||
blockId,
|
||||
branch,
|
||||
client,
|
||||
input,
|
||||
lowdefyGlobal,
|
||||
@ -282,7 +274,6 @@ test('callRequest request does not exist', async () => {
|
||||
test('callRequest not called the same request twice with onlyNew true', async () => {
|
||||
const context = {
|
||||
blockId,
|
||||
branch,
|
||||
client,
|
||||
input,
|
||||
lowdefyGlobal,
|
||||
@ -310,7 +301,6 @@ test('update unction should be called', async () => {
|
||||
const updateFunction = jest.fn();
|
||||
const context = {
|
||||
blockId,
|
||||
branch,
|
||||
client,
|
||||
input,
|
||||
lowdefyGlobal,
|
||||
@ -329,7 +319,6 @@ test('update unction should be called', async () => {
|
||||
test('fetch should set blocks loading and call query every time it is called', async () => {
|
||||
const context = {
|
||||
blockId,
|
||||
branch,
|
||||
client,
|
||||
input,
|
||||
lowdefyGlobal,
|
||||
|
@ -4,38 +4,34 @@ test('makeContextId, empty urlQuery', () => {
|
||||
expect(
|
||||
makeContextId({
|
||||
blockId: 'blockId',
|
||||
branch: 'branch',
|
||||
pageId: 'pageId',
|
||||
search: {},
|
||||
})
|
||||
).toEqual('branch:pageId:blockId:{}');
|
||||
).toEqual('pageId:blockId:{}');
|
||||
});
|
||||
|
||||
test('makeContextId, search', () => {
|
||||
expect(
|
||||
makeContextId({
|
||||
blockId: 'blockId',
|
||||
branch: 'branch',
|
||||
pageId: 'pageId',
|
||||
urlQuery: { a: 1 },
|
||||
})
|
||||
).toEqual('branch:pageId:blockId:{"a":1}');
|
||||
).toEqual('pageId:blockId:{"a":1}');
|
||||
});
|
||||
|
||||
test('makeContextId, undefined urlQuery', () => {
|
||||
expect(
|
||||
makeContextId({
|
||||
blockId: 'blockId',
|
||||
branch: 'branch',
|
||||
pageId: 'pageId',
|
||||
})
|
||||
).toEqual('branch:pageId:blockId:{}');
|
||||
).toEqual('pageId:blockId:{}');
|
||||
});
|
||||
|
||||
test('makeContextId, undefined blockId', () => {
|
||||
expect(() =>
|
||||
makeContextId({
|
||||
branch: 'branch',
|
||||
pageId: 'pageId',
|
||||
search: {},
|
||||
})
|
||||
@ -46,7 +42,6 @@ test('makeContextId, blockId not a string', () => {
|
||||
expect(() =>
|
||||
makeContextId({
|
||||
blockId: 1,
|
||||
branch: 'branch',
|
||||
pageId: 'pageId',
|
||||
search: {},
|
||||
})
|
||||
@ -56,7 +51,6 @@ test('makeContextId, blockId not a string', () => {
|
||||
test('makeContextId, undefined pageId', () => {
|
||||
expect(() =>
|
||||
makeContextId({
|
||||
branch: 'branch',
|
||||
blockId: 'blockId',
|
||||
search: {},
|
||||
})
|
||||
@ -67,30 +61,8 @@ test('makeContextId, pageId not a string', () => {
|
||||
expect(() =>
|
||||
makeContextId({
|
||||
pageId: 1,
|
||||
branch: 'branch',
|
||||
blockId: 'blockId',
|
||||
search: {},
|
||||
})
|
||||
).toThrow('Expected string for parameter pageId, received 1');
|
||||
});
|
||||
|
||||
test('makeContextId, undefined branch', () => {
|
||||
expect(() =>
|
||||
makeContextId({
|
||||
blockId: 'blockId',
|
||||
pageId: 'pageId',
|
||||
search: {},
|
||||
})
|
||||
).toThrow('Expected string for parameter branch, received undefined');
|
||||
});
|
||||
|
||||
test('makeContextId, branch not a string', () => {
|
||||
expect(() =>
|
||||
makeContextId({
|
||||
branch: 1,
|
||||
blockId: 'blockId',
|
||||
pageId: 'pageId',
|
||||
search: {},
|
||||
})
|
||||
).toThrow('Expected string for parameter branch, received 1');
|
||||
});
|
||||
|
@ -13,7 +13,6 @@ const testContext = ({ rootContext, rootBlock, pageId, initState, initLowdefyGlo
|
||||
actionLog: [],
|
||||
appGraphql: rootContext.appGraphql,
|
||||
blockId: rootBlock.blockId,
|
||||
branch: 'branch',
|
||||
client: rootContext.client,
|
||||
Components: rootContext.Components || {},
|
||||
config: rootContext.config || {},
|
||||
|
@ -16,6 +16,11 @@
|
||||
|
||||
import getFormatter from '../src/index';
|
||||
|
||||
test('default formatter', () => {
|
||||
const formatter = getFormatter();
|
||||
expect(formatter('string')).toEqual('string');
|
||||
});
|
||||
|
||||
test('Invalid formatter name', () => {
|
||||
expect(() => {
|
||||
getFormatter('invalid', {});
|
||||
|
@ -67,10 +67,6 @@ function _args({ params, args, location }) {
|
||||
return getFromObject(params, args, '_args', location);
|
||||
}
|
||||
|
||||
function _config({ params, config, location }) {
|
||||
return getFromObject(params, config, '_config', location);
|
||||
}
|
||||
|
||||
function _global({ params, lowdefyGlobal, location }) {
|
||||
return getFromObject(params, lowdefyGlobal, '_global', location);
|
||||
}
|
||||
@ -91,10 +87,6 @@ function _url_query({ params, urlQuery, location }) {
|
||||
return getFromObject(params, urlQuery, '_url_query', location);
|
||||
}
|
||||
|
||||
function _user({ params, user, location }) {
|
||||
return getFromObject(params, user, '_user', location);
|
||||
}
|
||||
|
||||
function _get({ params, location }) {
|
||||
if (!type.isObject(params)) {
|
||||
throw new Error(
|
||||
@ -116,18 +108,16 @@ function _get({ params, location }) {
|
||||
}
|
||||
|
||||
class NodeParser {
|
||||
constructor({ config, input, lowdefyGlobal, secrets, state, urlQuery, user } = {}) {
|
||||
constructor({ config, input, lowdefyGlobal, secrets, state, urlQuery } = {}) {
|
||||
this.config = config;
|
||||
this.input = input;
|
||||
this.lowdefyGlobal = lowdefyGlobal;
|
||||
this.secrets = secrets;
|
||||
this.state = state;
|
||||
this.urlQuery = urlQuery;
|
||||
this.user = user;
|
||||
this.operations = {
|
||||
_and,
|
||||
_args,
|
||||
_config,
|
||||
_date,
|
||||
_dump_yaml,
|
||||
_eq,
|
||||
@ -150,7 +140,6 @@ class NodeParser {
|
||||
_stringify,
|
||||
_type,
|
||||
_url_query,
|
||||
_user,
|
||||
};
|
||||
this.operationList = Object.keys(this.operations);
|
||||
}
|
||||
@ -184,7 +173,6 @@ class NodeParser {
|
||||
secrets: this.secrets,
|
||||
state: this.state,
|
||||
urlQuery: this.urlQuery,
|
||||
user: this.user,
|
||||
});
|
||||
return res;
|
||||
}
|
||||
|
@ -387,9 +387,6 @@ function _dump_yaml({ params }) {
|
||||
|
||||
function _operator(options) {
|
||||
const { operations, params, location } = options;
|
||||
if (Object.prototype.hasOwnProperty.call(operations, params.name)) {
|
||||
return operations[params.name]({ ...options, location, params: params && params.params });
|
||||
}
|
||||
if (!type.isString(params.name)) {
|
||||
throw new Error(
|
||||
`Operator Error: _operator.name must be a valid operator name as string. Received: ${JSON.stringify(
|
||||
@ -404,6 +401,9 @@ function _operator(options) {
|
||||
)} at ${location}.`
|
||||
);
|
||||
}
|
||||
if (Object.prototype.hasOwnProperty.call(operations, params.name)) {
|
||||
return operations[params.name]({ ...options, location, params: params && params.params });
|
||||
}
|
||||
throw new Error(
|
||||
`Operator Error: _operator - Invalid operator name. Received: ${JSON.stringify(
|
||||
params
|
||||
|
@ -114,10 +114,6 @@ function _args({ args, arrayIndices, location, params }) {
|
||||
return getFromObject(params, args, arrayIndices, '_args', location);
|
||||
}
|
||||
|
||||
function _config({ arrayIndices, config, location, params }) {
|
||||
return getFromObject(params, config, arrayIndices, '_config', location);
|
||||
}
|
||||
|
||||
function _global({ arrayIndices, location, lowdefyGlobal, params }) {
|
||||
return getFromObject(params, lowdefyGlobal, arrayIndices, '_global', location);
|
||||
}
|
||||
@ -192,10 +188,6 @@ function _url_query({ arrayIndices, context, contexts, location, params, urlQuer
|
||||
return getFromObject(params, urlQuery, arrayIndices, '_url_query', location);
|
||||
}
|
||||
|
||||
function _user({ params, user, arrayIndices, location }) {
|
||||
return getFromObject(params, user, arrayIndices, '_user', location);
|
||||
}
|
||||
|
||||
function _action_log({ params, actionLog, context, contexts, arrayIndices, location }) {
|
||||
if (params && params.contextId) {
|
||||
return getFromOtherContext({
|
||||
@ -302,14 +294,13 @@ function _list_contexts({ contexts }) {
|
||||
}
|
||||
|
||||
class WebParser {
|
||||
constructor({ context, contexts } = {}) {
|
||||
constructor({ context, contexts }) {
|
||||
this.context = context;
|
||||
this.contexts = contexts;
|
||||
this.operations = {
|
||||
_action_log,
|
||||
_and,
|
||||
_args,
|
||||
_config,
|
||||
_date,
|
||||
_dump_yaml,
|
||||
_eq,
|
||||
@ -337,7 +328,6 @@ class WebParser {
|
||||
_stringify,
|
||||
_type,
|
||||
_url_query,
|
||||
_user,
|
||||
};
|
||||
this.operationList = Object.keys(this.operations);
|
||||
}
|
||||
@ -376,7 +366,6 @@ class WebParser {
|
||||
params: value[op],
|
||||
state: this.context.state,
|
||||
urlQuery: this.context.urlQuery,
|
||||
user: this.context.user,
|
||||
});
|
||||
return res;
|
||||
}
|
||||
|
@ -1,187 +0,0 @@
|
||||
/* eslint-disable max-classes-per-file */
|
||||
import NodeParser from '../../src/nodeParser';
|
||||
|
||||
const config = {
|
||||
string: 'Some String',
|
||||
number: 42,
|
||||
arr: [{ a: 'a1' }, { a: 'a2' }],
|
||||
};
|
||||
const user = { firstName: 'Name' };
|
||||
const args = {};
|
||||
|
||||
test('_config in object', () => {
|
||||
const input = { a: { _config: 'string' } };
|
||||
const parser = new NodeParser({ config, user });
|
||||
const res = parser.parse({ input, args, location: 'locationId' });
|
||||
expect(res.output).toEqual({
|
||||
a: 'Some String',
|
||||
});
|
||||
expect(res.errors).toMatchInlineSnapshot(`Array []`);
|
||||
});
|
||||
|
||||
test('_config full config', () => {
|
||||
const input = { _config: true };
|
||||
const parser = new NodeParser({ config, user });
|
||||
const res = parser.parse({ input, args, location: 'locationId' });
|
||||
expect(res.output).toEqual(config);
|
||||
expect(res.errors).toMatchInlineSnapshot(`Array []`);
|
||||
});
|
||||
|
||||
// test('_config replace key arrayIndices', () => {
|
||||
// const input = { a: { _config: 'arr.$.a' } };
|
||||
// const parser = new NodeParser({
|
||||
// config,
|
||||
// user,
|
||||
// arrayIndices: [1],
|
||||
// });
|
||||
// const res = parser.parse({ input, args, location: 'locationId' });
|
||||
// expect(res.output).toEqual({
|
||||
// a: 'a2',
|
||||
// });
|
||||
// expect(res.errors).toMatchInlineSnapshot(`Array []`);
|
||||
// });
|
||||
|
||||
test('_config param object key', () => {
|
||||
const input = {
|
||||
_config: {
|
||||
key: 'string',
|
||||
},
|
||||
};
|
||||
const parser = new NodeParser({
|
||||
config,
|
||||
user,
|
||||
});
|
||||
const res = parser.parse({ input, args, location: 'locationId' });
|
||||
expect(res.output).toEqual('Some String');
|
||||
expect(res.errors).toMatchInlineSnapshot(`Array []`);
|
||||
});
|
||||
|
||||
test('_config param object all', () => {
|
||||
const input = {
|
||||
_config: {
|
||||
all: true,
|
||||
},
|
||||
};
|
||||
const parser = new NodeParser({
|
||||
config,
|
||||
user,
|
||||
});
|
||||
const res = parser.parse({ input, args, location: 'locationId' });
|
||||
expect(res.output).toEqual(config);
|
||||
expect(res.errors).toMatchInlineSnapshot(`Array []`);
|
||||
});
|
||||
|
||||
test('_config param object all and key', () => {
|
||||
const input = {
|
||||
_config: {
|
||||
all: true,
|
||||
key: 'string',
|
||||
},
|
||||
};
|
||||
const parser = new NodeParser({
|
||||
config,
|
||||
user,
|
||||
});
|
||||
const res = parser.parse({ input, args, location: 'locationId' });
|
||||
expect(res.output).toEqual(config);
|
||||
expect(res.errors).toMatchInlineSnapshot(`Array []`);
|
||||
});
|
||||
|
||||
test('_config param object invalid', () => {
|
||||
const input = {
|
||||
_config: {
|
||||
other: true,
|
||||
},
|
||||
};
|
||||
const parser = new NodeParser({
|
||||
config,
|
||||
user,
|
||||
});
|
||||
const res = parser.parse({ input, args, location: 'locationId' });
|
||||
expect(res.output).toEqual(null);
|
||||
expect(res.errors).toMatchInlineSnapshot(`
|
||||
Array [
|
||||
[Error: Operator Error: _config.key must be of type string. Received: {"other":true} at locationId.],
|
||||
]
|
||||
`);
|
||||
});
|
||||
|
||||
test('_config param array', () => {
|
||||
const input = {
|
||||
_config: ['string'],
|
||||
};
|
||||
const parser = new NodeParser({
|
||||
config,
|
||||
user,
|
||||
});
|
||||
const res = parser.parse({ input, args, location: 'locationId' });
|
||||
expect(res.output).toEqual(null);
|
||||
expect(res.errors).toMatchInlineSnapshot(`
|
||||
Array [
|
||||
[Error: Operator Error: _config params must be of type string or object. Received: ["string"] at locationId.],
|
||||
]
|
||||
`);
|
||||
});
|
||||
|
||||
test('_config param object with string default', () => {
|
||||
const input = {
|
||||
_config: {
|
||||
key: 'notFound',
|
||||
default: 'defaultValue',
|
||||
},
|
||||
};
|
||||
const parser = new NodeParser({
|
||||
config,
|
||||
user,
|
||||
});
|
||||
const res = parser.parse({ input, args, location: 'locationId' });
|
||||
expect(res.output).toEqual('defaultValue');
|
||||
expect(res.errors).toMatchInlineSnapshot(`Array []`);
|
||||
});
|
||||
|
||||
test('_config param object with zero default', () => {
|
||||
const input = {
|
||||
_config: {
|
||||
key: 'notFound',
|
||||
default: 0,
|
||||
},
|
||||
};
|
||||
const parser = new NodeParser({
|
||||
config,
|
||||
user,
|
||||
});
|
||||
const res = parser.parse({ input, args, location: 'locationId' });
|
||||
expect(res.output).toEqual(0);
|
||||
expect(res.errors).toMatchInlineSnapshot(`Array []`);
|
||||
});
|
||||
|
||||
test('_config param object with false default', () => {
|
||||
const input = {
|
||||
_config: {
|
||||
key: 'notFound',
|
||||
default: false,
|
||||
},
|
||||
};
|
||||
const parser = new NodeParser({
|
||||
config,
|
||||
user,
|
||||
});
|
||||
const res = parser.parse({ input, args, location: 'locationId' });
|
||||
expect(res.output).toEqual(false);
|
||||
expect(res.errors).toMatchInlineSnapshot(`Array []`);
|
||||
});
|
||||
|
||||
test('_config param object with no default', () => {
|
||||
const input = {
|
||||
_config: {
|
||||
key: 'notFound',
|
||||
},
|
||||
};
|
||||
const parser = new NodeParser({
|
||||
config,
|
||||
user,
|
||||
});
|
||||
const res = parser.parse({ input, args, location: 'locationId' });
|
||||
expect(res.output).toEqual(null);
|
||||
expect(res.errors).toMatchInlineSnapshot(`Array []`);
|
||||
});
|
@ -5,7 +5,6 @@ const state = {
|
||||
number: 42,
|
||||
arr: [{ a: 'a1' }, { a: 'a2' }],
|
||||
};
|
||||
const user = { firstName: 'Name' };
|
||||
const args = {};
|
||||
|
||||
test('_date now', () => {
|
||||
@ -18,7 +17,7 @@ test('_date now', () => {
|
||||
}
|
||||
};
|
||||
const input = { _date: 'now' };
|
||||
const parser = new NodeParser({ state, user });
|
||||
const parser = new NodeParser({ state });
|
||||
const res = parser.parse({ input, args, location: 'locationId' });
|
||||
expect(res.output).toEqual(constantDate);
|
||||
global.Date = RealDate;
|
||||
@ -27,7 +26,7 @@ test('_date now', () => {
|
||||
|
||||
test('_date from string', () => {
|
||||
const input = { _date: '2018-01-01T12:00:00.000Z' };
|
||||
const parser = new NodeParser({ state, user });
|
||||
const parser = new NodeParser({ state });
|
||||
const res = parser.parse({ input, args, location: 'locationId' });
|
||||
expect(res.output).toEqual(new Date('2018-01-01T12:00:00.000Z'));
|
||||
expect(res.errors).toMatchInlineSnapshot(`Array []`);
|
||||
@ -35,7 +34,7 @@ test('_date from string', () => {
|
||||
|
||||
test('_date short format', () => {
|
||||
const input = { _date: '2018-01-01' };
|
||||
const parser = new NodeParser({ state, user });
|
||||
const parser = new NodeParser({ state });
|
||||
const res = parser.parse({ input, args, location: 'locationId' });
|
||||
expect(res.output).toEqual(new Date('2018-01-01'));
|
||||
expect(res.errors).toMatchInlineSnapshot(`Array []`);
|
||||
@ -43,7 +42,7 @@ test('_date short format', () => {
|
||||
|
||||
test('_date from unix timestamp', () => {
|
||||
const input = { _date: 1569579992 };
|
||||
const parser = new NodeParser({ state, user });
|
||||
const parser = new NodeParser({ state });
|
||||
const res = parser.parse({ input, args, location: 'locationId' });
|
||||
expect(res.output).toEqual(new Date(1569579992));
|
||||
expect(res.errors).toMatchInlineSnapshot(`Array []`);
|
||||
@ -51,7 +50,7 @@ test('_date from unix timestamp', () => {
|
||||
|
||||
test('_date null', () => {
|
||||
const input = { _date: null };
|
||||
const parser = new NodeParser({ state, user });
|
||||
const parser = new NodeParser({ state });
|
||||
const res = parser.parse({ input, args, location: 'locationId' });
|
||||
expect(res.output).toBe(null);
|
||||
expect(res.errors).toMatchInlineSnapshot(`
|
||||
@ -63,7 +62,7 @@ test('_date null', () => {
|
||||
|
||||
test('_date invalid operator', () => {
|
||||
const input = { _date: {} };
|
||||
const parser = new NodeParser({ state, user });
|
||||
const parser = new NodeParser({ state });
|
||||
const res = parser.parse({ input, args, location: 'locationId' });
|
||||
expect(res.output).toBe(null);
|
||||
expect(res.errors).toMatchInlineSnapshot(`
|
||||
@ -75,7 +74,7 @@ test('_date invalid operator', () => {
|
||||
|
||||
test('_date invalid string', () => {
|
||||
const input = { _date: 'abc' };
|
||||
const parser = new NodeParser({ state, user });
|
||||
const parser = new NodeParser({ state });
|
||||
const res = parser.parse({ input, args, location: 'locationId' });
|
||||
expect(res.output).toBe(null);
|
||||
expect(res.errors).toMatchInlineSnapshot(`
|
||||
@ -87,7 +86,7 @@ test('_date invalid string', () => {
|
||||
|
||||
test('_date invalid float', () => {
|
||||
const input = { _date: 1.3 };
|
||||
const parser = new NodeParser({ state, user });
|
||||
const parser = new NodeParser({ state });
|
||||
const res = parser.parse({ input, args, location: 'locationId' });
|
||||
expect(res.output).toBe(null);
|
||||
expect(res.errors).toMatchInlineSnapshot(`
|
||||
@ -99,7 +98,7 @@ test('_date invalid float', () => {
|
||||
|
||||
test('_date negative int', () => {
|
||||
const input = { _date: -1000 };
|
||||
const parser = new NodeParser({ state, user });
|
||||
const parser = new NodeParser({ state });
|
||||
const res = parser.parse({ input, args, location: 'locationId' });
|
||||
expect(res.output).toEqual(new Date(-1000));
|
||||
expect(res.errors).toMatchInlineSnapshot(`Array []`);
|
||||
|
@ -6,12 +6,11 @@ const lowdefyGlobal = {
|
||||
number: 42,
|
||||
arr: [{ a: 'a1' }, { a: 'a2' }],
|
||||
};
|
||||
const user = { firstName: 'Name' };
|
||||
const args = {};
|
||||
|
||||
test('_global in object', () => {
|
||||
const input = { a: { _global: 'string' } };
|
||||
const parser = new NodeParser({ lowdefyGlobal, user });
|
||||
const parser = new NodeParser({ lowdefyGlobal });
|
||||
const res = parser.parse({ input, args, location: 'locationId' });
|
||||
expect(res.output).toEqual({
|
||||
a: 'Some String',
|
||||
@ -21,7 +20,7 @@ test('_global in object', () => {
|
||||
|
||||
test('_global full lowdefyGlobal', () => {
|
||||
const input = { _global: true };
|
||||
const parser = new NodeParser({ lowdefyGlobal, user });
|
||||
const parser = new NodeParser({ lowdefyGlobal });
|
||||
const res = parser.parse({ input, args, location: 'locationId' });
|
||||
expect(res.output).toEqual(lowdefyGlobal);
|
||||
expect(res.errors).toMatchInlineSnapshot(`Array []`);
|
||||
@ -29,7 +28,7 @@ test('_global full lowdefyGlobal', () => {
|
||||
|
||||
test('_global null', () => {
|
||||
const input = { _global: null };
|
||||
const parser = new NodeParser({ lowdefyGlobal, user });
|
||||
const parser = new NodeParser({ lowdefyGlobal });
|
||||
const res = parser.parse({ input, args, location: 'locationId' });
|
||||
expect(res.output).toBe(null);
|
||||
expect(res.errors).toMatchInlineSnapshot(`
|
||||
@ -39,20 +38,6 @@ test('_global null', () => {
|
||||
`);
|
||||
});
|
||||
|
||||
// test('_global replace key arrayIndices', () => {
|
||||
// const input = { a: { _global: 'arr.$.a' } };
|
||||
// const parser = new NodeParser({
|
||||
// lowdefyGlobal,
|
||||
// user,
|
||||
// arrayIndices: [1],
|
||||
// });
|
||||
// const res = parser.parse({ input, args, location: 'locationId' });
|
||||
// expect(res.output).toEqual({
|
||||
// a: 'a2',
|
||||
// });
|
||||
// expect(res.errors).toMatchInlineSnapshot(`Array []`);
|
||||
// });
|
||||
|
||||
test('_global param object key', () => {
|
||||
const input = {
|
||||
_global: {
|
||||
@ -61,7 +46,6 @@ test('_global param object key', () => {
|
||||
};
|
||||
const parser = new NodeParser({
|
||||
lowdefyGlobal,
|
||||
user,
|
||||
});
|
||||
const res = parser.parse({ input, args, location: 'locationId' });
|
||||
expect(res.output).toEqual('Some String');
|
||||
@ -76,7 +60,6 @@ test('_global param object all', () => {
|
||||
};
|
||||
const parser = new NodeParser({
|
||||
lowdefyGlobal,
|
||||
user,
|
||||
});
|
||||
const res = parser.parse({ input, args, location: 'locationId' });
|
||||
expect(res.output).toEqual(lowdefyGlobal);
|
||||
@ -92,7 +75,6 @@ test('_global param object all and key', () => {
|
||||
};
|
||||
const parser = new NodeParser({
|
||||
lowdefyGlobal,
|
||||
user,
|
||||
});
|
||||
const res = parser.parse({ input, args, location: 'locationId' });
|
||||
expect(res.output).toEqual(lowdefyGlobal);
|
||||
@ -107,7 +89,6 @@ test('_global param object invalid', () => {
|
||||
};
|
||||
const parser = new NodeParser({
|
||||
lowdefyGlobal,
|
||||
user,
|
||||
});
|
||||
const res = parser.parse({ input, args, location: 'locationId' });
|
||||
expect(res.output).toEqual(null);
|
||||
@ -124,7 +105,6 @@ test('_global param array', () => {
|
||||
};
|
||||
const parser = new NodeParser({
|
||||
lowdefyGlobal,
|
||||
user,
|
||||
});
|
||||
const res = parser.parse({ input, args, location: 'locationId' });
|
||||
expect(res.output).toEqual(null);
|
||||
@ -144,7 +124,6 @@ test('_global param object with string default', () => {
|
||||
};
|
||||
const parser = new NodeParser({
|
||||
lowdefyGlobal,
|
||||
user,
|
||||
});
|
||||
const res = parser.parse({ input, args, location: 'locationId' });
|
||||
expect(res.output).toEqual('defaultValue');
|
||||
@ -160,7 +139,6 @@ test('_global param object with zero default', () => {
|
||||
};
|
||||
const parser = new NodeParser({
|
||||
lowdefyGlobal,
|
||||
user,
|
||||
});
|
||||
const res = parser.parse({ input, args, location: 'locationId' });
|
||||
expect(res.output).toEqual(0);
|
||||
@ -176,7 +154,6 @@ test('_global param object with false default', () => {
|
||||
};
|
||||
const parser = new NodeParser({
|
||||
lowdefyGlobal,
|
||||
user,
|
||||
});
|
||||
const res = parser.parse({ input, args, location: 'locationId' });
|
||||
expect(res.output).toEqual(false);
|
||||
@ -191,7 +168,6 @@ test('_global param object with no default', () => {
|
||||
};
|
||||
const parser = new NodeParser({
|
||||
lowdefyGlobal,
|
||||
user,
|
||||
});
|
||||
const res = parser.parse({ input, args, location: 'locationId' });
|
||||
expect(res.output).toEqual(null);
|
||||
|
@ -6,7 +6,6 @@ const state = {
|
||||
number: 42,
|
||||
arr: [{ a: 'a1' }, { a: 'a2' }],
|
||||
};
|
||||
const user = { firstName: 'Name' };
|
||||
const input = {
|
||||
string: 'input String',
|
||||
number: 500,
|
||||
@ -15,7 +14,7 @@ const input = {
|
||||
|
||||
test('_input in object', () => {
|
||||
const obj = { a: { _input: 'string' } };
|
||||
const parser = new NodeParser({ state, user, input });
|
||||
const parser = new NodeParser({ state, input });
|
||||
const res = parser.parse({ input: obj, location: 'locationId' });
|
||||
expect(res.output).toEqual({
|
||||
a: 'input String',
|
||||
@ -25,7 +24,7 @@ test('_input in object', () => {
|
||||
|
||||
test('_input full input', () => {
|
||||
const obj = { _input: true };
|
||||
const parser = new NodeParser({ state, user, input });
|
||||
const parser = new NodeParser({ state, input });
|
||||
const res = parser.parse({ input: obj, location: 'locationId' });
|
||||
expect(res.output).toEqual(input);
|
||||
expect(res.errors).toMatchInlineSnapshot(`Array []`);
|
||||
@ -33,7 +32,7 @@ test('_input full input', () => {
|
||||
|
||||
test('_input array', () => {
|
||||
const obj = { _input: 'arr' };
|
||||
const parser = new NodeParser({ state, user, input });
|
||||
const parser = new NodeParser({ state, input });
|
||||
const res = parser.parse({ input: obj, location: 'locationId' });
|
||||
expect(res.output).toEqual(input.arr);
|
||||
expect(res.errors).toMatchInlineSnapshot(`Array []`);
|
||||
@ -41,7 +40,7 @@ test('_input array', () => {
|
||||
|
||||
test('_input null', () => {
|
||||
const obj = { _input: null };
|
||||
const parser = new NodeParser({ state, user, input });
|
||||
const parser = new NodeParser({ state, input });
|
||||
const res = parser.parse({ input: obj, location: 'locationId' });
|
||||
expect(res.output).toBe(null);
|
||||
expect(res.errors).toMatchInlineSnapshot(`
|
||||
@ -57,7 +56,7 @@ test('_input param object key', () => {
|
||||
key: 'string',
|
||||
},
|
||||
};
|
||||
const parser = new NodeParser({ state, user, input });
|
||||
const parser = new NodeParser({ state, input });
|
||||
const res = parser.parse({ input: obj, location: 'locationId' });
|
||||
expect(res.output).toEqual('input String');
|
||||
expect(res.errors).toMatchInlineSnapshot(`Array []`);
|
||||
@ -69,7 +68,7 @@ test('_input param object all', () => {
|
||||
all: true,
|
||||
},
|
||||
};
|
||||
const parser = new NodeParser({ state, user, input });
|
||||
const parser = new NodeParser({ state, input });
|
||||
const res = parser.parse({ input: obj, location: 'locationId' });
|
||||
expect(res.output).toEqual(input);
|
||||
expect(res.errors).toMatchInlineSnapshot(`Array []`);
|
||||
@ -82,7 +81,7 @@ test('_input param object all and key', () => {
|
||||
key: 'string',
|
||||
},
|
||||
};
|
||||
const parser = new NodeParser({ state, user, input });
|
||||
const parser = new NodeParser({ state, input });
|
||||
const res = parser.parse({ input: obj, location: 'locationId' });
|
||||
expect(res.output).toEqual(input);
|
||||
expect(res.errors).toMatchInlineSnapshot(`Array []`);
|
||||
@ -94,7 +93,7 @@ test('_input param object invalid', () => {
|
||||
other: true,
|
||||
},
|
||||
};
|
||||
const parser = new NodeParser({ state, user, input });
|
||||
const parser = new NodeParser({ state, input });
|
||||
const res = parser.parse({ input: obj, location: 'locationId' });
|
||||
expect(res.output).toEqual(null);
|
||||
expect(res.errors).toMatchInlineSnapshot(`
|
||||
@ -108,7 +107,7 @@ test('_input param array', () => {
|
||||
const obj = {
|
||||
_state: ['string'],
|
||||
};
|
||||
const parser = new NodeParser({ state, user, input });
|
||||
const parser = new NodeParser({ state, input });
|
||||
const res = parser.parse({ input: obj, location: 'locationId' });
|
||||
expect(res.output).toEqual(null);
|
||||
expect(res.errors).toMatchInlineSnapshot(`
|
||||
|
@ -6,7 +6,6 @@ const state = {
|
||||
number: 42,
|
||||
arr: [{ a: 'a1' }, { a: 'a2' }],
|
||||
};
|
||||
const user = { firstName: 'Name' };
|
||||
const args = {};
|
||||
|
||||
test('_mql_aggregate sort', () => {
|
||||
@ -29,7 +28,7 @@ test('_mql_aggregate sort', () => {
|
||||
],
|
||||
},
|
||||
};
|
||||
const parser = new NodeParser({ state, user });
|
||||
const parser = new NodeParser({ state });
|
||||
const res = parser.parse({ input, args, location: 'locationId' });
|
||||
expect(res.output).toEqual([
|
||||
{
|
||||
@ -57,7 +56,7 @@ test('_mql_aggregate on is object', () => {
|
||||
},
|
||||
},
|
||||
};
|
||||
const parser = new NodeParser({ state, user });
|
||||
const parser = new NodeParser({ state });
|
||||
const res = parser.parse({ input, args, location: 'locationId' });
|
||||
expect(res.output).toEqual([
|
||||
{
|
||||
@ -88,7 +87,7 @@ test('_mql_aggregate group', () => {
|
||||
],
|
||||
},
|
||||
};
|
||||
const parser = new NodeParser({ state, user });
|
||||
const parser = new NodeParser({ state });
|
||||
const res = parser.parse({ input, args, location: 'locationId' });
|
||||
expect(res.output).toEqual([
|
||||
{
|
||||
@ -113,7 +112,7 @@ test('_mql_aggregate empty pipeline', () => {
|
||||
],
|
||||
},
|
||||
};
|
||||
const parser = new NodeParser({ state, user });
|
||||
const parser = new NodeParser({ state });
|
||||
const res = parser.parse({ input, args, location: 'locationId' });
|
||||
expect(res.output).toEqual([
|
||||
{
|
||||
@ -139,7 +138,7 @@ test('_mql_aggregate empty collection', () => {
|
||||
on: [],
|
||||
},
|
||||
};
|
||||
const parser = new NodeParser({ state, user });
|
||||
const parser = new NodeParser({ state });
|
||||
const res = parser.parse({ input, args, location: 'locationId' });
|
||||
expect(res.output).toEqual([]);
|
||||
expect(res.errors).toMatchInlineSnapshot(`Array []`);
|
||||
@ -158,7 +157,7 @@ test('_mql_aggregate on is string', () => {
|
||||
on: 'invalid',
|
||||
},
|
||||
};
|
||||
const parser = new NodeParser({ state, user });
|
||||
const parser = new NodeParser({ state });
|
||||
const res = parser.parse({ input, args, location: 'locationId' });
|
||||
expect(res.output).toBe(null);
|
||||
expect(res.errors).toMatchInlineSnapshot(`
|
||||
@ -188,7 +187,7 @@ test('_mql_aggregate invalid', () => {
|
||||
],
|
||||
},
|
||||
};
|
||||
const parser = new NodeParser({ state, user });
|
||||
const parser = new NodeParser({ state });
|
||||
const res = parser.parse({ input, args, location: 'locationId' });
|
||||
expect(res.output).toBe(null);
|
||||
expect(res.errors).toMatchInlineSnapshot(`
|
||||
@ -212,7 +211,7 @@ test('_mql_aggregate pipeline not an array', () => {
|
||||
],
|
||||
},
|
||||
};
|
||||
const parser = new NodeParser({ state, user });
|
||||
const parser = new NodeParser({ state });
|
||||
const res = parser.parse({ input, args, location: 'locationId' });
|
||||
expect(res.output).toBe(null);
|
||||
expect(res.errors).toMatchInlineSnapshot(`
|
||||
@ -232,7 +231,7 @@ test('_mql_aggregate params not object', () => {
|
||||
},
|
||||
],
|
||||
};
|
||||
const parser = new NodeParser({ state, user });
|
||||
const parser = new NodeParser({ state });
|
||||
const res = parser.parse({ input, args, location: 'locationId' });
|
||||
expect(res.output).toBe(null);
|
||||
expect(res.errors).toMatchInlineSnapshot(`
|
||||
|
@ -5,12 +5,12 @@ const state = {
|
||||
number: 42,
|
||||
arr: [{ a: 'a1' }, { a: 'a2' }],
|
||||
};
|
||||
const user = { firstName: 'Name', number: 2 };
|
||||
|
||||
const args = {};
|
||||
|
||||
test('_mql_expr add number', () => {
|
||||
const input = { _mql_expr: { $add: ['$number', 2] } };
|
||||
const parser = new NodeParser({ state, user });
|
||||
const parser = new NodeParser({ state });
|
||||
const res = parser.parse({ input, args, location: 'locationId' });
|
||||
expect(res.output).toBe(44);
|
||||
expect(res.errors).toMatchInlineSnapshot(`Array []`);
|
||||
@ -18,7 +18,7 @@ test('_mql_expr add number', () => {
|
||||
|
||||
test('_mql_expr null', () => {
|
||||
const input = { _mql_expr: null };
|
||||
const parser = new NodeParser({ state, user });
|
||||
const parser = new NodeParser({ state });
|
||||
const res = parser.parse({ input, args, location: 'locationId' });
|
||||
expect(res.output).toBe(null);
|
||||
expect(res.errors).toMatchInlineSnapshot(`
|
||||
@ -32,10 +32,12 @@ test('_mql_expr params on', () => {
|
||||
const input = {
|
||||
_mql_expr: {
|
||||
expr: { $add: ['$number', 2] },
|
||||
on: { _user: true },
|
||||
on: {
|
||||
number: 2,
|
||||
},
|
||||
},
|
||||
};
|
||||
const parser = new NodeParser({ state, user });
|
||||
const parser = new NodeParser({ state });
|
||||
const res = parser.parse({ input, args, location: 'locationId' });
|
||||
expect(res.output).toBe(4);
|
||||
expect(res.errors).toMatchInlineSnapshot(`Array []`);
|
||||
@ -43,7 +45,7 @@ test('_mql_expr params on', () => {
|
||||
|
||||
test('_mql_expr invalid', () => {
|
||||
const input = { _mql_expr: { $cond: ['$number'] } };
|
||||
const parser = new NodeParser({ state, user });
|
||||
const parser = new NodeParser({ state });
|
||||
const res = parser.parse({ input, args, location: 'locationId' });
|
||||
expect(res.output).toBe(null);
|
||||
expect(res.errors).toMatchInlineSnapshot(`
|
||||
|
@ -5,12 +5,11 @@ const state = {
|
||||
number: 42,
|
||||
arr: [{ a: 'a1' }, { a: 'a2' }],
|
||||
};
|
||||
const user = { firstName: 'Name' };
|
||||
const args = {};
|
||||
|
||||
test('_mql_test string equal', () => {
|
||||
const input = { _mql_test: { string: { $eq: 'Some String' } } };
|
||||
const parser = new NodeParser({ state, user });
|
||||
const parser = new NodeParser({ state });
|
||||
const res = parser.parse({ input, args, location: 'locationId' });
|
||||
expect(res.output).toBe(true);
|
||||
expect(res.errors).toMatchInlineSnapshot(`Array []`);
|
||||
@ -18,7 +17,7 @@ test('_mql_test string equal', () => {
|
||||
|
||||
test('_mql_test string equal shorthand', () => {
|
||||
const input = { _mql_test: { string: 'Some String' } };
|
||||
const parser = new NodeParser({ state, user });
|
||||
const parser = new NodeParser({ state });
|
||||
const res = parser.parse({ input, args, location: 'locationId' });
|
||||
expect(res.output).toBe(true);
|
||||
expect(res.errors).toMatchInlineSnapshot(`Array []`);
|
||||
@ -26,7 +25,7 @@ test('_mql_test string equal shorthand', () => {
|
||||
|
||||
test('_mql_test string not equal', () => {
|
||||
const input = { _mql_test: { string: 'Some Other String' } };
|
||||
const parser = new NodeParser({ state, user });
|
||||
const parser = new NodeParser({ state });
|
||||
const res = parser.parse({ input, args, location: 'locationId' });
|
||||
expect(res.output).toBe(false);
|
||||
expect(res.errors).toMatchInlineSnapshot(`Array []`);
|
||||
@ -34,7 +33,7 @@ test('_mql_test string not equal', () => {
|
||||
|
||||
test('_mql_test number equal', () => {
|
||||
const input = { _mql_test: { number: { $eq: 42 } } };
|
||||
const parser = new NodeParser({ state, user });
|
||||
const parser = new NodeParser({ state });
|
||||
const res = parser.parse({ input, args, location: 'locationId' });
|
||||
expect(res.output).toBe(true);
|
||||
expect(res.errors).toMatchInlineSnapshot(`Array []`);
|
||||
@ -42,7 +41,7 @@ test('_mql_test number equal', () => {
|
||||
|
||||
test('_mql_test number not equal', () => {
|
||||
const input = { _mql_test: { number: 'Some Other String' } };
|
||||
const parser = new NodeParser({ state, user });
|
||||
const parser = new NodeParser({ state });
|
||||
const res = parser.parse({ input, args, location: 'locationId' });
|
||||
expect(res.output).toBe(false);
|
||||
expect(res.errors).toMatchInlineSnapshot(`Array []`);
|
||||
@ -50,7 +49,7 @@ test('_mql_test number not equal', () => {
|
||||
|
||||
test('_mql_test number greater than', () => {
|
||||
const input = { _mql_test: { number: { $gt: 1 } } };
|
||||
const parser = new NodeParser({ state, user });
|
||||
const parser = new NodeParser({ state });
|
||||
const res = parser.parse({ input, args, location: 'locationId' });
|
||||
expect(res.output).toBe(true);
|
||||
expect(res.errors).toMatchInlineSnapshot(`Array []`);
|
||||
@ -58,7 +57,7 @@ test('_mql_test number greater than', () => {
|
||||
|
||||
test('_mql_test null', () => {
|
||||
const input = { _mql_test: null };
|
||||
const parser = new NodeParser({ state, user });
|
||||
const parser = new NodeParser({ state });
|
||||
const res = parser.parse({ input, args, location: 'locationId' });
|
||||
expect(res.output).toBe(null);
|
||||
expect(res.errors).toMatchInlineSnapshot(`
|
||||
@ -71,11 +70,11 @@ test('_mql_test null', () => {
|
||||
test('_mql_test object params', () => {
|
||||
const input = {
|
||||
_mql_test: {
|
||||
test: { firstName: 'Name' },
|
||||
on: { _user: true },
|
||||
test: { value: 'test' },
|
||||
on: { value: 'test' },
|
||||
},
|
||||
};
|
||||
const parser = new NodeParser({ state, user });
|
||||
const parser = new NodeParser({ state });
|
||||
const res = parser.parse({ input, args, location: 'locationId' });
|
||||
expect(res.output).toBe(true);
|
||||
expect(res.errors).toMatchInlineSnapshot(`Array []`);
|
||||
@ -84,11 +83,10 @@ test('_mql_test object params', () => {
|
||||
test('_mql_test invalid params', () => {
|
||||
const input = {
|
||||
_mql_test: {
|
||||
other: { firstName: 'Name' },
|
||||
on: { _user: true },
|
||||
test: { value: 'test' },
|
||||
},
|
||||
};
|
||||
const parser = new NodeParser({ state, user });
|
||||
const parser = new NodeParser({ state });
|
||||
const res = parser.parse({ input, args, location: 'locationId' });
|
||||
expect(res.output).toBe(false);
|
||||
expect(res.errors).toMatchInlineSnapshot(`Array []`);
|
||||
@ -96,7 +94,7 @@ test('_mql_test invalid params', () => {
|
||||
|
||||
test('_mql_test invalid test', () => {
|
||||
const input = { _mql_test: { string: { $badOp: 'Some String' } } };
|
||||
const parser = new NodeParser({ state, user });
|
||||
const parser = new NodeParser({ state });
|
||||
const res = parser.parse({ input, args, location: 'locationId' });
|
||||
expect(res.output).toBe(null);
|
||||
expect(res.errors).toMatchInlineSnapshot(`
|
||||
|
@ -5,12 +5,11 @@ const state = {
|
||||
number: 42,
|
||||
arr: [{ a: 'a1' }, { a: 'a2' }],
|
||||
};
|
||||
const user = { firstName: 'Name' };
|
||||
const args = {};
|
||||
|
||||
test('_nunjucks string template', () => {
|
||||
const input = { _nunjucks: 'String with {{ string }} embedded' };
|
||||
const parser = new NodeParser({ state, user });
|
||||
const parser = new NodeParser({ state });
|
||||
const res = parser.parse({ input, args, location: 'locationId' });
|
||||
expect(res.output).toEqual('String with Some String embedded');
|
||||
expect(res.errors).toMatchInlineSnapshot(`Array []`);
|
||||
@ -18,7 +17,7 @@ test('_nunjucks string template', () => {
|
||||
|
||||
test('_nunjucks null', () => {
|
||||
const input = { _nunjucks: null };
|
||||
const parser = new NodeParser({ state, user });
|
||||
const parser = new NodeParser({ state });
|
||||
const res = parser.parse({ input, args, location: 'locationId' });
|
||||
expect(res.output).toBe(null);
|
||||
expect(res.errors).toMatchInlineSnapshot(`Array []`);
|
||||
@ -28,7 +27,7 @@ test('_nunjucks { template: , on: }', () => {
|
||||
const input = {
|
||||
_nunjucks: { template: 'String with {{ string }} embedded', on: { string: 'test' } },
|
||||
};
|
||||
const parser = new NodeParser({ state, user });
|
||||
const parser = new NodeParser({ state });
|
||||
const res = parser.parse({ input, args, location: 'locationId' });
|
||||
expect(res.output).toEqual('String with test embedded');
|
||||
expect(res.errors).toMatchInlineSnapshot(`Array []`);
|
||||
@ -36,7 +35,7 @@ test('_nunjucks { template: , on: }', () => {
|
||||
|
||||
test('_nunjucks template not a string', () => {
|
||||
const input = { _nunjucks: ['String with {{ string }} embedded'] };
|
||||
const parser = new NodeParser({ state, user });
|
||||
const parser = new NodeParser({ state });
|
||||
const res = parser.parse({ input, args, location: 'locationId' });
|
||||
expect(res.output).toBe(null);
|
||||
expect(res.errors).toMatchInlineSnapshot(`Array []`);
|
||||
@ -46,7 +45,7 @@ test('_nunjucks params on template not a string', () => {
|
||||
const input = {
|
||||
_nunjucks: { template: ['String with {{ string }} embedded'], on: { string: 'test' } },
|
||||
};
|
||||
const parser = new NodeParser({ state, user });
|
||||
const parser = new NodeParser({ state });
|
||||
const res = parser.parse({ input, args, location: 'locationId' });
|
||||
expect(res.output).toBe(null);
|
||||
expect(res.errors).toMatchInlineSnapshot(`Array []`);
|
||||
@ -56,7 +55,7 @@ test('_nunjucks on not a object', () => {
|
||||
const input = {
|
||||
_nunjucks: { template: 'String with {{ string }} embedded', on: [{ string: 'test' }] },
|
||||
};
|
||||
const parser = new NodeParser({ state, user });
|
||||
const parser = new NodeParser({ state });
|
||||
const res = parser.parse({ input, args, location: 'locationId' });
|
||||
expect(res.output).toBe('String with embedded');
|
||||
expect(res.errors).toMatchInlineSnapshot(`Array []`);
|
||||
@ -66,7 +65,7 @@ test('_nunjucks on null', () => {
|
||||
const input = {
|
||||
_nunjucks: { template: 'String with {{ string }} embedded', on: null },
|
||||
};
|
||||
const parser = new NodeParser({ state, user });
|
||||
const parser = new NodeParser({ state });
|
||||
const res = parser.parse({ input, args, location: 'locationId' });
|
||||
expect(res.output).toBe('String with embedded');
|
||||
expect(res.errors).toMatchInlineSnapshot(`Array []`);
|
||||
@ -74,7 +73,7 @@ test('_nunjucks on null', () => {
|
||||
|
||||
test('_nunjucks invalid template', () => {
|
||||
const input = { _nunjucks: 'String with {{ string embedded' };
|
||||
const parser = new NodeParser({ state, user });
|
||||
const parser = new NodeParser({ state });
|
||||
const res = parser.parse({ input, args, location: 'locationId' });
|
||||
expect(res.output).toBe(null);
|
||||
expect(res.errors).toMatchInlineSnapshot(`
|
||||
|
@ -5,12 +5,21 @@ const state = {
|
||||
number: 42,
|
||||
arr: [{ a: 'a1' }, { a: 'a2' }],
|
||||
};
|
||||
const user = { firstName: 'Name' };
|
||||
const args = {};
|
||||
|
||||
test('_operator, _state', () => {
|
||||
const input = { a: { _operator: { name: '_state', params: 'string' } } };
|
||||
const parser = new NodeParser({ state });
|
||||
const res = parser.parse({ input, args, location: 'locationId' });
|
||||
expect(res.output).toEqual({
|
||||
a: 'Some String',
|
||||
});
|
||||
expect(res.errors).toMatchInlineSnapshot(`Array []`);
|
||||
});
|
||||
|
||||
test('_operator.name invalid', () => {
|
||||
const input = { a: { _operator: { name: '_a' } } };
|
||||
const parser = new NodeParser({ state, user });
|
||||
const parser = new NodeParser({ state });
|
||||
const res = parser.parse({ input, args, location: 'locationId' });
|
||||
expect(res.output).toEqual({ a: null });
|
||||
expect(res.errors).toMatchInlineSnapshot(`
|
||||
@ -22,7 +31,7 @@ test('_operator.name invalid', () => {
|
||||
|
||||
test('_operator.name not a string', () => {
|
||||
const input = { a: { _operator: { name: 1 } } };
|
||||
const parser = new NodeParser({ state, user });
|
||||
const parser = new NodeParser({ state });
|
||||
const res = parser.parse({ input, args, location: 'locationId' });
|
||||
expect(res.output).toEqual({ a: null });
|
||||
expect(res.errors).toMatchInlineSnapshot(`
|
||||
@ -34,7 +43,7 @@ test('_operator.name not a string', () => {
|
||||
|
||||
test('_operator with value not a object', () => {
|
||||
const input = { a: { _operator: 'a' } };
|
||||
const parser = new NodeParser({ state, user });
|
||||
const parser = new NodeParser({ state });
|
||||
const res = parser.parse({ input, args, location: 'locationId' });
|
||||
expect(res.output).toEqual({ a: null });
|
||||
expect(res.errors).toMatchInlineSnapshot(`
|
||||
@ -46,19 +55,19 @@ test('_operator with value not a object', () => {
|
||||
|
||||
test('_operator cannot be set to _operator', () => {
|
||||
const input = { a: { _operator: { name: '_operator' } } };
|
||||
const parser = new NodeParser({ state, user });
|
||||
const parser = new NodeParser({ state });
|
||||
const res = parser.parse({ input, args, location: 'locationId' });
|
||||
expect(res.output).toEqual({ a: null });
|
||||
expect(res.errors).toMatchInlineSnapshot(`
|
||||
Array [
|
||||
[TypeError: Cannot read property 'name' of undefined],
|
||||
[Error: Operator Error: _operator.name cannot be set to _operator to infinite avoid loop reference. Received: {"name":"_operator"} at locationId.],
|
||||
]
|
||||
`);
|
||||
});
|
||||
|
||||
test('_operator, _not with no params', () => {
|
||||
const input = { a: { _operator: { name: '_not' } } };
|
||||
const parser = new NodeParser({ state, user });
|
||||
const parser = new NodeParser({ state });
|
||||
const res = parser.parse({ input, args, location: 'locationId' });
|
||||
expect(res.output).toEqual({ a: true });
|
||||
expect(res.errors).toMatchInlineSnapshot(`Array []`);
|
||||
@ -66,7 +75,7 @@ test('_operator, _not with no params', () => {
|
||||
|
||||
test('_operator, _parse with params', () => {
|
||||
const input = { a: { _operator: { name: '_parse', params: '[{ "a": "a1"}]' } } };
|
||||
const parser = new NodeParser({ state, user });
|
||||
const parser = new NodeParser({ state });
|
||||
const res = parser.parse({ input, args, location: 'locationId' });
|
||||
expect(res.output).toEqual({
|
||||
a: [{ a: 'a1' }],
|
||||
|
@ -5,12 +5,11 @@ const state = {
|
||||
number: 42,
|
||||
arr: [{ a: 'a1' }, { a: 'a2' }],
|
||||
};
|
||||
const user = { firstName: 'Name', number: 2 };
|
||||
const args = {};
|
||||
|
||||
test('_regex with on, pass', () => {
|
||||
const input = { _regex: { pattern: '^a$', on: 'a' } };
|
||||
const parser = new NodeParser({ state, user });
|
||||
const parser = new NodeParser({ state });
|
||||
const res = parser.parse({ input, args, location: 'locationId' });
|
||||
expect(res.output).toBe(true);
|
||||
expect(res.errors).toMatchInlineSnapshot(`Array []`);
|
||||
@ -18,7 +17,7 @@ test('_regex with on, pass', () => {
|
||||
|
||||
test('_regex with on, fail', () => {
|
||||
const input = { _regex: { pattern: '^a$', on: 'b' } };
|
||||
const parser = new NodeParser({ state, user });
|
||||
const parser = new NodeParser({ state });
|
||||
const res = parser.parse({ input, args, location: 'locationId' });
|
||||
expect(res.output).toBe(false);
|
||||
expect(res.errors).toMatchInlineSnapshot(`Array []`);
|
||||
@ -26,7 +25,7 @@ test('_regex with on, fail', () => {
|
||||
|
||||
test('_regex with key, pass', () => {
|
||||
const input = { _regex: { pattern: '^Some String$', key: 'string' } };
|
||||
const parser = new NodeParser({ state, user });
|
||||
const parser = new NodeParser({ state });
|
||||
const res = parser.parse({ input, args, location: 'locationId' });
|
||||
expect(res.output).toBe(true);
|
||||
expect(res.errors).toMatchInlineSnapshot(`Array []`);
|
||||
@ -34,7 +33,7 @@ test('_regex with key, pass', () => {
|
||||
|
||||
test('_regex with key, fail', () => {
|
||||
const input = { _regex: { pattern: '^a$', key: 'string' } };
|
||||
const parser = new NodeParser({ state, user });
|
||||
const parser = new NodeParser({ state });
|
||||
const res = parser.parse({ input, args, location: 'locationId' });
|
||||
expect(res.output).toBe(false);
|
||||
expect(res.errors).toMatchInlineSnapshot(`Array []`);
|
||||
@ -42,7 +41,7 @@ test('_regex with key, fail', () => {
|
||||
|
||||
test('_regex with null on', () => {
|
||||
const input = { _regex: { pattern: '^a$', on: null } };
|
||||
const parser = new NodeParser({ state, user });
|
||||
const parser = new NodeParser({ state });
|
||||
const res = parser.parse({ input, args, location: 'locationId' });
|
||||
expect(res.output).toBe(false);
|
||||
expect(res.errors).toMatchInlineSnapshot(`Array []`);
|
||||
@ -50,7 +49,7 @@ test('_regex with null on', () => {
|
||||
|
||||
test('_regex with nonexistent key', () => {
|
||||
const input = { _regex: { pattern: '^a$', key: 'notThere' } };
|
||||
const parser = new NodeParser({ state, user });
|
||||
const parser = new NodeParser({ state });
|
||||
const res = parser.parse({ input, args, location: 'locationId' });
|
||||
expect(res.output).toBe(null);
|
||||
expect(res.errors).toMatchInlineSnapshot(`
|
||||
@ -62,7 +61,7 @@ test('_regex with nonexistent key', () => {
|
||||
|
||||
test('_regex with nonexistent key', () => {
|
||||
const input = { _regex: { pattern: '^a$', key: null } };
|
||||
const parser = new NodeParser({ state, user });
|
||||
const parser = new NodeParser({ state });
|
||||
const res = parser.parse({ input, args, location: 'locationId' });
|
||||
expect(res.output).toBe(null);
|
||||
expect(res.errors).toMatchInlineSnapshot(`
|
||||
@ -74,7 +73,7 @@ test('_regex with nonexistent key', () => {
|
||||
|
||||
test('_regex null', () => {
|
||||
const input = { _regex: null };
|
||||
const parser = new NodeParser({ state, user });
|
||||
const parser = new NodeParser({ state });
|
||||
const res = parser.parse({ input, args, location: 'locationId' });
|
||||
expect(res.output).toBe(null);
|
||||
expect(res.errors).toMatchInlineSnapshot(`
|
||||
@ -86,7 +85,7 @@ test('_regex null', () => {
|
||||
|
||||
test('_regex with non-string on', () => {
|
||||
const input = { _regex: { pattern: '^a$', on: 5 } };
|
||||
const parser = new NodeParser({ state, user });
|
||||
const parser = new NodeParser({ state });
|
||||
const res = parser.parse({ input, args, location: 'locationId' });
|
||||
expect(res.output).toBe(null);
|
||||
expect(res.errors).toMatchInlineSnapshot(`
|
||||
@ -98,7 +97,7 @@ test('_regex with non-string on', () => {
|
||||
|
||||
test('_regex flags', () => {
|
||||
const input = { _regex: { pattern: 'a', on: 'A', flags: 'i' } };
|
||||
const parser = new NodeParser({ state, user });
|
||||
const parser = new NodeParser({ state });
|
||||
const res = parser.parse({ input, args, location: 'locationId' });
|
||||
expect(res.output).toBe(true);
|
||||
expect(res.errors).toMatchInlineSnapshot(`Array []`);
|
||||
@ -106,7 +105,7 @@ test('_regex flags', () => {
|
||||
|
||||
test('_regex invalid flags', () => {
|
||||
const input = { _regex: { pattern: 'a', on: 'a', flags: 1 } };
|
||||
const parser = new NodeParser({ state, user });
|
||||
const parser = new NodeParser({ state });
|
||||
const res = parser.parse({ input, args, location: 'locationId' });
|
||||
expect(res.output).toBe(null);
|
||||
expect(res.errors).toMatchInlineSnapshot(`
|
||||
|
@ -6,12 +6,11 @@ const secrets = {
|
||||
number: 42,
|
||||
arr: [{ a: 'a1' }, { a: 'a2' }],
|
||||
};
|
||||
const user = { firstName: 'Name' };
|
||||
const args = {};
|
||||
|
||||
test('_secret in object', () => {
|
||||
const input = { a: { _secret: 'string' } };
|
||||
const parser = new NodeParser({ secrets, user });
|
||||
const parser = new NodeParser({ secrets });
|
||||
const res = parser.parse({ input, args, location: 'locationId' });
|
||||
expect(res.output).toEqual({
|
||||
a: 'Some String',
|
||||
@ -21,7 +20,7 @@ test('_secret in object', () => {
|
||||
|
||||
test('_secret full secrets', () => {
|
||||
const input = { _secret: true };
|
||||
const parser = new NodeParser({ secrets, user });
|
||||
const parser = new NodeParser({ secrets });
|
||||
const res = parser.parse({ input, args, location: 'locationId' });
|
||||
expect(res.output).toEqual(secrets);
|
||||
expect(res.errors).toMatchInlineSnapshot(`Array []`);
|
||||
@ -29,7 +28,7 @@ test('_secret full secrets', () => {
|
||||
|
||||
test('_secret null', () => {
|
||||
const input = { _secret: null };
|
||||
const parser = new NodeParser({ secrets, user });
|
||||
const parser = new NodeParser({ secrets });
|
||||
const res = parser.parse({ input, args, location: 'locationId' });
|
||||
expect(res.output).toBe(null);
|
||||
expect(res.errors).toMatchInlineSnapshot(`
|
||||
@ -47,7 +46,6 @@ test('_secret param object key', () => {
|
||||
};
|
||||
const parser = new NodeParser({
|
||||
secrets,
|
||||
user,
|
||||
});
|
||||
const res = parser.parse({ input, args, location: 'locationId' });
|
||||
expect(res.output).toEqual('Some String');
|
||||
@ -62,7 +60,6 @@ test('_secret param object all', () => {
|
||||
};
|
||||
const parser = new NodeParser({
|
||||
secrets,
|
||||
user,
|
||||
});
|
||||
const res = parser.parse({ input, args, location: 'locationId' });
|
||||
expect(res.output).toEqual(secrets);
|
||||
@ -78,7 +75,6 @@ test('_secret param object all and key', () => {
|
||||
};
|
||||
const parser = new NodeParser({
|
||||
secrets,
|
||||
user,
|
||||
});
|
||||
const res = parser.parse({ input, args, location: 'locationId' });
|
||||
expect(res.output).toEqual(secrets);
|
||||
@ -93,7 +89,6 @@ test('_secret param object invalid', () => {
|
||||
};
|
||||
const parser = new NodeParser({
|
||||
secrets,
|
||||
user,
|
||||
});
|
||||
const res = parser.parse({ input, args, location: 'locationId' });
|
||||
expect(res.output).toEqual(null);
|
||||
@ -110,7 +105,6 @@ test('_secret param array', () => {
|
||||
};
|
||||
const parser = new NodeParser({
|
||||
secrets,
|
||||
user,
|
||||
});
|
||||
const res = parser.parse({ input, args, location: 'locationId' });
|
||||
expect(res.output).toEqual(null);
|
||||
@ -130,7 +124,6 @@ test('_secret param object with string default', () => {
|
||||
};
|
||||
const parser = new NodeParser({
|
||||
secrets,
|
||||
user,
|
||||
});
|
||||
const res = parser.parse({ input, args, location: 'locationId' });
|
||||
expect(res.output).toEqual('defaultValue');
|
||||
@ -146,7 +139,6 @@ test('_secret param object with zero default', () => {
|
||||
};
|
||||
const parser = new NodeParser({
|
||||
secrets,
|
||||
user,
|
||||
});
|
||||
const res = parser.parse({ input, args, location: 'locationId' });
|
||||
expect(res.output).toEqual(0);
|
||||
@ -162,7 +154,6 @@ test('_secret param object with false default', () => {
|
||||
};
|
||||
const parser = new NodeParser({
|
||||
secrets,
|
||||
user,
|
||||
});
|
||||
const res = parser.parse({ input, args, location: 'locationId' });
|
||||
expect(res.output).toEqual(false);
|
||||
@ -177,7 +168,6 @@ test('_secret param object with no default', () => {
|
||||
};
|
||||
const parser = new NodeParser({
|
||||
secrets,
|
||||
user,
|
||||
});
|
||||
const res = parser.parse({ input, args, location: 'locationId' });
|
||||
expect(res.output).toEqual(null);
|
||||
|
@ -6,12 +6,11 @@ const state = {
|
||||
number: 42,
|
||||
arr: [{ a: 'a1' }, { a: 'a2' }],
|
||||
};
|
||||
const user = { firstName: 'Name' };
|
||||
const args = {};
|
||||
|
||||
test('_state in object', () => {
|
||||
const input = { a: { _state: 'string' } };
|
||||
const parser = new NodeParser({ state, user });
|
||||
const parser = new NodeParser({ state });
|
||||
const res = parser.parse({ input, args, location: 'locationId' });
|
||||
expect(res.output).toEqual({
|
||||
a: 'Some String',
|
||||
@ -21,7 +20,7 @@ test('_state in object', () => {
|
||||
|
||||
test('_state full state', () => {
|
||||
const input = { _state: true };
|
||||
const parser = new NodeParser({ state, user });
|
||||
const parser = new NodeParser({ state });
|
||||
const res = parser.parse({ input, args, location: 'locationId' });
|
||||
expect(res.output).toEqual(state);
|
||||
expect(res.errors).toMatchInlineSnapshot(`Array []`);
|
||||
@ -29,7 +28,7 @@ test('_state full state', () => {
|
||||
|
||||
test('_state null', () => {
|
||||
const input = { _state: null };
|
||||
const parser = new NodeParser({ state, user });
|
||||
const parser = new NodeParser({ state });
|
||||
const res = parser.parse({ input, args, location: 'locationId' });
|
||||
expect(res.output).toBe(null);
|
||||
expect(res.errors).toMatchInlineSnapshot(`
|
||||
@ -47,7 +46,6 @@ test('_state param object key', () => {
|
||||
};
|
||||
const parser = new NodeParser({
|
||||
state,
|
||||
user,
|
||||
});
|
||||
const res = parser.parse({ input, args, location: 'locationId' });
|
||||
expect(res.output).toEqual('Some String');
|
||||
@ -62,7 +60,6 @@ test('_state param object all', () => {
|
||||
};
|
||||
const parser = new NodeParser({
|
||||
state,
|
||||
user,
|
||||
});
|
||||
const res = parser.parse({ input, args, location: 'locationId' });
|
||||
expect(res.output).toEqual(state);
|
||||
@ -78,7 +75,6 @@ test('_state param object all and key', () => {
|
||||
};
|
||||
const parser = new NodeParser({
|
||||
state,
|
||||
user,
|
||||
});
|
||||
const res = parser.parse({ input, args, location: 'locationId' });
|
||||
expect(res.output).toEqual(state);
|
||||
@ -93,7 +89,6 @@ test('_state param object invalid', () => {
|
||||
};
|
||||
const parser = new NodeParser({
|
||||
state,
|
||||
user,
|
||||
});
|
||||
const res = parser.parse({ input, args, location: 'locationId' });
|
||||
expect(res.output).toEqual(null);
|
||||
@ -110,7 +105,6 @@ test('_state param array', () => {
|
||||
};
|
||||
const parser = new NodeParser({
|
||||
state,
|
||||
user,
|
||||
});
|
||||
const res = parser.parse({ input, args, location: 'locationId' });
|
||||
expect(res.output).toEqual(null);
|
||||
@ -130,7 +124,6 @@ test('_state param object with string default', () => {
|
||||
};
|
||||
const parser = new NodeParser({
|
||||
state,
|
||||
user,
|
||||
});
|
||||
const res = parser.parse({ input, args, location: 'locationId' });
|
||||
expect(res.output).toEqual('defaultValue');
|
||||
@ -146,7 +139,6 @@ test('_state param object with zero default', () => {
|
||||
};
|
||||
const parser = new NodeParser({
|
||||
state,
|
||||
user,
|
||||
});
|
||||
const res = parser.parse({ input, args, location: 'locationId' });
|
||||
expect(res.output).toEqual(0);
|
||||
@ -162,7 +154,6 @@ test('_state param object with false default', () => {
|
||||
};
|
||||
const parser = new NodeParser({
|
||||
state,
|
||||
user,
|
||||
});
|
||||
const res = parser.parse({ input, args, location: 'locationId' });
|
||||
expect(res.output).toEqual(false);
|
||||
@ -177,7 +168,6 @@ test('_state param object with no default', () => {
|
||||
};
|
||||
const parser = new NodeParser({
|
||||
state,
|
||||
user,
|
||||
});
|
||||
const res = parser.parse({ input, args, location: 'locationId' });
|
||||
expect(res.output).toEqual(null);
|
||||
|
@ -6,12 +6,11 @@ const state = {
|
||||
arr: [{ a: 'a1' }, { a: 'a2' }],
|
||||
boolean: true,
|
||||
};
|
||||
const user = { firstName: 'Name', number: 2 };
|
||||
const args = {};
|
||||
|
||||
test('_type with on, pass', () => {
|
||||
const input = { _type: { type: 'string', on: 'a' } };
|
||||
const parser = new NodeParser({ state, user });
|
||||
const parser = new NodeParser({ state });
|
||||
const res = parser.parse({ input, args, location: 'locationId' });
|
||||
expect(res.output).toBe(true);
|
||||
expect(res.errors).toMatchInlineSnapshot(`Array []`);
|
||||
@ -19,7 +18,7 @@ test('_type with on, pass', () => {
|
||||
|
||||
test('_type with on, fail', () => {
|
||||
const input = { _type: { type: 'number', on: 'b' } };
|
||||
const parser = new NodeParser({ state, user });
|
||||
const parser = new NodeParser({ state });
|
||||
const res = parser.parse({ input, args, location: 'locationId' });
|
||||
expect(res.output).toBe(false);
|
||||
expect(res.errors).toMatchInlineSnapshot(`Array []`);
|
||||
@ -27,7 +26,7 @@ test('_type with on, fail', () => {
|
||||
|
||||
test('_type with key, pass', () => {
|
||||
const input = { _type: { type: 'string', key: 'string' } };
|
||||
const parser = new NodeParser({ state, user });
|
||||
const parser = new NodeParser({ state });
|
||||
const res = parser.parse({ input, args, location: 'locationId' });
|
||||
expect(res.output).toBe(true);
|
||||
expect(res.errors).toMatchInlineSnapshot(`Array []`);
|
||||
@ -35,7 +34,7 @@ test('_type with key, pass', () => {
|
||||
|
||||
test('_type with key, fail', () => {
|
||||
const input = { _type: { type: 'number', key: 'string' } };
|
||||
const parser = new NodeParser({ state, user });
|
||||
const parser = new NodeParser({ state });
|
||||
const res = parser.parse({ input, args, location: 'locationId' });
|
||||
expect(res.output).toBe(false);
|
||||
expect(res.errors).toMatchInlineSnapshot(`Array []`);
|
||||
@ -43,14 +42,14 @@ test('_type with key, fail', () => {
|
||||
|
||||
test('_type with null on pass', () => {
|
||||
const input = { _type: { type: 'null', on: null } };
|
||||
const parser = new NodeParser({ state, user });
|
||||
const parser = new NodeParser({ state });
|
||||
const res = parser.parse({ input, args, location: 'locationId' });
|
||||
expect(res.output).toBe(true);
|
||||
expect(res.errors).toMatchInlineSnapshot(`Array []`);
|
||||
});
|
||||
test('_type with null on fail', () => {
|
||||
const input = { _type: { type: 'boolean', on: null } };
|
||||
const parser = new NodeParser({ state, user });
|
||||
const parser = new NodeParser({ state });
|
||||
const res = parser.parse({ input, args, location: 'locationId' });
|
||||
expect(res.output).toBe(false);
|
||||
expect(res.errors).toMatchInlineSnapshot(`Array []`);
|
||||
@ -58,7 +57,7 @@ test('_type with null on fail', () => {
|
||||
|
||||
test('_type with nonexistent key', () => {
|
||||
const input = { _type: { type: 'string', key: 'notThere' } };
|
||||
const parser = new NodeParser({ state, user });
|
||||
const parser = new NodeParser({ state });
|
||||
const res = parser.parse({ input, args, location: 'locationId' });
|
||||
expect(res.output).toBe(false);
|
||||
expect(res.errors).toMatchInlineSnapshot(`Array []`);
|
||||
@ -66,7 +65,7 @@ test('_type with nonexistent key', () => {
|
||||
|
||||
test('_type with nonexistent key', () => {
|
||||
const input = { _type: { type: 'string', key: null } };
|
||||
const parser = new NodeParser({ state, user });
|
||||
const parser = new NodeParser({ state });
|
||||
const res = parser.parse({ input, args, location: 'locationId' });
|
||||
expect(res.output).toBe(false);
|
||||
expect(res.errors).toMatchInlineSnapshot(`Array []`);
|
||||
@ -74,7 +73,7 @@ test('_type with nonexistent key', () => {
|
||||
|
||||
test('_type null', () => {
|
||||
const input = { _type: null };
|
||||
const parser = new NodeParser({ state, user });
|
||||
const parser = new NodeParser({ state });
|
||||
const res = parser.parse({ input, args, location: 'locationId' });
|
||||
expect(res.output).toBe(null);
|
||||
expect(res.errors).toMatchInlineSnapshot(`
|
||||
@ -86,7 +85,7 @@ test('_type null', () => {
|
||||
|
||||
test('_type with non-string on', () => {
|
||||
const input = { _type: { type: 'number', on: 5 } };
|
||||
const parser = new NodeParser({ state, user });
|
||||
const parser = new NodeParser({ state });
|
||||
const res = parser.parse({ input, args, location: 'locationId' });
|
||||
expect(res.output).toBe(true);
|
||||
expect(res.errors).toMatchInlineSnapshot(`Array []`);
|
||||
@ -94,7 +93,7 @@ test('_type with non-string on', () => {
|
||||
|
||||
test('_type with unknown type', () => {
|
||||
const input = { _type: 'strings', key: 'string' };
|
||||
const parser = new NodeParser({ state, user, arrayIndices: [] });
|
||||
const parser = new NodeParser({ state, arrayIndices: [] });
|
||||
const res = parser.parse({ input, location: 'locationId' });
|
||||
expect(res.output).toBe(null);
|
||||
expect(res.errors).toMatchInlineSnapshot(`
|
||||
@ -106,7 +105,7 @@ test('_type with unknown type', () => {
|
||||
|
||||
test('_type date with on packed date pass', () => {
|
||||
const input = { _type: { type: 'date', on: { _date: Date.now() } } };
|
||||
const parser = new NodeParser({ state, user, arrayIndices: [] });
|
||||
const parser = new NodeParser({ state, arrayIndices: [] });
|
||||
const res = parser.parse({ input, id: '1', location: 'locationId' });
|
||||
expect(res.output).toBe(true);
|
||||
expect(res.errors).toMatchInlineSnapshot(`Array []`);
|
||||
@ -114,7 +113,7 @@ test('_type date with on packed date pass', () => {
|
||||
|
||||
test('_type date on string date fail', () => {
|
||||
const input = { _type: { type: 'date', on: '2019-11-28T08:10:09.844Z' } };
|
||||
const parser = new NodeParser({ state, user, arrayIndices: [] });
|
||||
const parser = new NodeParser({ state, arrayIndices: [] });
|
||||
const res = parser.parse({ input, id: '1', location: 'locationId' });
|
||||
expect(res.output).toBe(false);
|
||||
expect(res.errors).toMatchInlineSnapshot(`Array []`);
|
||||
@ -122,7 +121,7 @@ test('_type date on string date fail', () => {
|
||||
|
||||
test('_type date on date object pass', () => {
|
||||
const input = { _type: { type: 'date', on: new Date() } };
|
||||
const parser = new NodeParser({ state, user, arrayIndices: [] });
|
||||
const parser = new NodeParser({ state, arrayIndices: [] });
|
||||
const res = parser.parse({ input, id: '1', location: 'locationId' });
|
||||
expect(res.output).toBe(true);
|
||||
expect(res.errors).toMatchInlineSnapshot(`Array []`);
|
||||
|
@ -1,165 +0,0 @@
|
||||
import NodeParser from '../../src/nodeParser';
|
||||
|
||||
const state = {
|
||||
string: 'Some String',
|
||||
number: 42,
|
||||
arr: [{ a: 'a1' }, { a: 'a2' }],
|
||||
};
|
||||
const user = { firstName: 'Name' };
|
||||
const args = {};
|
||||
|
||||
test('_user in object', () => {
|
||||
const input = { a: { _user: 'firstName' } };
|
||||
const parser = new NodeParser({ state, user });
|
||||
const res = parser.parse({ input, args, location: 'locationId' });
|
||||
expect(res.output).toEqual({
|
||||
a: 'Name',
|
||||
});
|
||||
expect(res.errors).toMatchInlineSnapshot(`Array []`);
|
||||
});
|
||||
|
||||
test('_user full user', () => {
|
||||
const input = { _user: true };
|
||||
const parser = new NodeParser({ state, user });
|
||||
const res = parser.parse({ input, args, location: 'locationId' });
|
||||
expect(res.output).toEqual(user);
|
||||
expect(res.errors).toMatchInlineSnapshot(`Array []`);
|
||||
});
|
||||
|
||||
test('_user null', () => {
|
||||
const input = { _user: null };
|
||||
const parser = new NodeParser({ state });
|
||||
const res = parser.parse({ input, args, location: 'locationId' });
|
||||
expect(res.output).toBe(null);
|
||||
expect(res.errors).toMatchInlineSnapshot(`
|
||||
Array [
|
||||
[Error: Operator Error: _user params must be of type string or object. Received: null at locationId.],
|
||||
]
|
||||
`);
|
||||
});
|
||||
|
||||
test('_user param object key', () => {
|
||||
const input = {
|
||||
_user: {
|
||||
key: 'firstName',
|
||||
},
|
||||
};
|
||||
const parser = new NodeParser({ state, user });
|
||||
const res = parser.parse({ input, args, location: 'locationId' });
|
||||
expect(res.output).toEqual('Name');
|
||||
expect(res.errors).toMatchInlineSnapshot(`Array []`);
|
||||
});
|
||||
|
||||
test('_user param object all', () => {
|
||||
const input = {
|
||||
_user: {
|
||||
all: true,
|
||||
},
|
||||
};
|
||||
const parser = new NodeParser({ state, user });
|
||||
const res = parser.parse({ input, args, location: 'locationId' });
|
||||
expect(res.output).toEqual(user);
|
||||
expect(res.errors).toMatchInlineSnapshot(`Array []`);
|
||||
});
|
||||
|
||||
test('_user param object all and key', () => {
|
||||
const input = {
|
||||
_user: {
|
||||
all: true,
|
||||
key: 'firstName',
|
||||
},
|
||||
};
|
||||
const parser = new NodeParser({ state, user });
|
||||
const res = parser.parse({ input, args, location: 'locationId' });
|
||||
expect(res.output).toEqual(user);
|
||||
expect(res.errors).toMatchInlineSnapshot(`Array []`);
|
||||
});
|
||||
|
||||
test('_user param object invalid', () => {
|
||||
const input = {
|
||||
_user: {
|
||||
other: true,
|
||||
},
|
||||
};
|
||||
const parser = new NodeParser({ state, user });
|
||||
const res = parser.parse({ input, args, location: 'locationId' });
|
||||
expect(res.output).toEqual(null);
|
||||
expect(res.errors).toMatchInlineSnapshot(`
|
||||
Array [
|
||||
[Error: Operator Error: _user.key must be of type string. Received: {"other":true} at locationId.],
|
||||
]
|
||||
`);
|
||||
});
|
||||
|
||||
test('_user param array', () => {
|
||||
const input = {
|
||||
_user: ['firstName'],
|
||||
};
|
||||
const parser = new NodeParser({ state, user });
|
||||
const res = parser.parse({ input, args, location: 'locationId' });
|
||||
expect(res.output).toEqual(null);
|
||||
expect(res.errors).toMatchInlineSnapshot(`
|
||||
Array [
|
||||
[Error: Operator Error: _user params must be of type string or object. Received: ["firstName"] at locationId.],
|
||||
]
|
||||
`);
|
||||
});
|
||||
|
||||
test('_user param object with string default', () => {
|
||||
const input = {
|
||||
_user: {
|
||||
key: 'notFound',
|
||||
default: 'defaultValue',
|
||||
},
|
||||
};
|
||||
const parser = new NodeParser({
|
||||
user,
|
||||
});
|
||||
const res = parser.parse({ input, args, location: 'locationId' });
|
||||
expect(res.output).toEqual('defaultValue');
|
||||
expect(res.errors).toMatchInlineSnapshot(`Array []`);
|
||||
});
|
||||
|
||||
test('_user param object with zero default', () => {
|
||||
const input = {
|
||||
_user: {
|
||||
key: 'notFound',
|
||||
default: 0,
|
||||
},
|
||||
};
|
||||
const parser = new NodeParser({
|
||||
user,
|
||||
});
|
||||
const res = parser.parse({ input, args, location: 'locationId' });
|
||||
expect(res.output).toEqual(0);
|
||||
expect(res.errors).toMatchInlineSnapshot(`Array []`);
|
||||
});
|
||||
|
||||
test('_user param object with false default', () => {
|
||||
const input = {
|
||||
_user: {
|
||||
key: 'notFound',
|
||||
default: false,
|
||||
},
|
||||
};
|
||||
const parser = new NodeParser({
|
||||
user,
|
||||
});
|
||||
const res = parser.parse({ input, args, location: 'locationId' });
|
||||
expect(res.output).toEqual(false);
|
||||
expect(res.errors).toMatchInlineSnapshot(`Array []`);
|
||||
});
|
||||
|
||||
test('_user param object with no default', () => {
|
||||
const input = {
|
||||
_user: {
|
||||
key: 'notFound',
|
||||
},
|
||||
};
|
||||
const parser = new NodeParser({
|
||||
user,
|
||||
});
|
||||
const res = parser.parse({ input, args, location: 'locationId' });
|
||||
expect(res.output).toEqual(null);
|
||||
expect(res.errors).toMatchInlineSnapshot(`Array []`);
|
||||
});
|
@ -50,10 +50,6 @@ const context = {
|
||||
string: 'urlQuery',
|
||||
arr: [{ a: 'urlQuery1' }, { a: 'urlQuery2' }],
|
||||
},
|
||||
user: {
|
||||
string: 'user',
|
||||
arr: [{ a: 'user1' }, { a: 'user2' }],
|
||||
},
|
||||
};
|
||||
|
||||
const contexts = {};
|
||||
@ -161,3 +157,11 @@ test('parse js dates, do not modify input', () => {
|
||||
expect(input).toEqual({ a: new Date(1) });
|
||||
expect(res.errors).toMatchInlineSnapshot(`Array []`);
|
||||
});
|
||||
|
||||
test('parse location not specified', () => {
|
||||
const input = { _state: 'string' };
|
||||
const parser = new WebParser({ context, contexts });
|
||||
const res = parser.parse({ input, args, arrayIndices });
|
||||
expect(res.output).toEqual('state');
|
||||
expect(res.errors).toMatchInlineSnapshot(`Array []`);
|
||||
});
|
||||
|
@ -64,10 +64,6 @@ const context = {
|
||||
string: 'urlQuery',
|
||||
arr: [{ a: 'urlQuery1' }, { a: 'urlQuery2' }],
|
||||
},
|
||||
user: {
|
||||
string: 'user',
|
||||
arr: [{ a: 'user1' }, { a: 'user2' }],
|
||||
},
|
||||
};
|
||||
|
||||
const contexts = {};
|
||||
|
@ -49,10 +49,6 @@ const context = {
|
||||
string: 'urlQuery',
|
||||
arr: [{ a: 'urlQuery1' }, { a: 'urlQuery2' }],
|
||||
},
|
||||
user: {
|
||||
string: 'user',
|
||||
arr: [{ a: 'user1' }, { a: 'user2' }],
|
||||
},
|
||||
};
|
||||
|
||||
const contexts = {};
|
||||
|
@ -1,216 +0,0 @@
|
||||
/* eslint-disable max-classes-per-file */
|
||||
import WebParser from '../../src/webParser';
|
||||
|
||||
const args = {
|
||||
string: 'args',
|
||||
arr: [{ a: 'args1' }, { a: 'args2' }],
|
||||
};
|
||||
|
||||
const context = {
|
||||
config: {
|
||||
string: 'config',
|
||||
arr: [{ a: 'config1' }, { a: 'config2' }],
|
||||
},
|
||||
input: {
|
||||
string: 'input',
|
||||
arr: [{ a: 'input1' }, { a: 'input2' }],
|
||||
},
|
||||
lowdefyGlobal: {
|
||||
string: 'global',
|
||||
arr: [{ a: 'global1' }, { a: 'global2' }],
|
||||
},
|
||||
menus: [
|
||||
{
|
||||
menuId: 'default',
|
||||
},
|
||||
{
|
||||
menuId: 'm_1',
|
||||
},
|
||||
{
|
||||
menuId: 'm_2',
|
||||
},
|
||||
],
|
||||
mutations: {
|
||||
not_loaded: { loading: true, response: 'fail' },
|
||||
string: { loading: false, response: 'mutation String' },
|
||||
number: { loading: false, response: 500 },
|
||||
arr: { loading: false, response: [{ a: 'mutation a1' }, { a: 'mutation a2' }] },
|
||||
},
|
||||
requests: {
|
||||
not_loaded: { loading: true, response: 'fail' },
|
||||
string: { loading: false, response: 'request String' },
|
||||
number: { loading: false, response: 500 },
|
||||
arr: { loading: false, response: [{ a: 'request a1' }, { a: 'request a2' }] },
|
||||
},
|
||||
state: {
|
||||
string: 'state',
|
||||
arr: [{ a: 'state1' }, { a: 'state2' }],
|
||||
},
|
||||
urlQuery: {
|
||||
string: 'urlQuery',
|
||||
arr: [{ a: 'urlQuery1' }, { a: 'urlQuery2' }],
|
||||
},
|
||||
user: {
|
||||
string: 'user',
|
||||
arr: [{ a: 'user1' }, { a: 'user2' }],
|
||||
},
|
||||
};
|
||||
|
||||
const contexts = {};
|
||||
|
||||
const arrayIndices = [1];
|
||||
|
||||
test('_config in object', () => {
|
||||
const input = { a: { _config: 'string' } };
|
||||
const parser = new WebParser({ context, contexts });
|
||||
const res = parser.parse({ input, args, location: 'locationId', arrayIndices });
|
||||
expect(res.output).toEqual({
|
||||
a: 'config',
|
||||
});
|
||||
expect(res.errors).toMatchInlineSnapshot(`Array []`);
|
||||
});
|
||||
|
||||
test('_config full config', () => {
|
||||
const input = { _config: true };
|
||||
const parser = new WebParser({ context, contexts });
|
||||
const res = parser.parse({ input, args, location: 'locationId', arrayIndices });
|
||||
expect(res.output).toEqual({
|
||||
string: 'config',
|
||||
arr: [{ a: 'config1' }, { a: 'config2' }],
|
||||
});
|
||||
expect(res.errors).toMatchInlineSnapshot(`Array []`);
|
||||
});
|
||||
|
||||
test('_config replace key arrayIndices', () => {
|
||||
const input = { a: { _config: 'arr.$.a' } };
|
||||
const parser = new WebParser({ context, contexts });
|
||||
const res = parser.parse({ input, args, location: 'locationId', arrayIndices });
|
||||
expect(res.output).toEqual({
|
||||
a: 'config2',
|
||||
});
|
||||
expect(res.errors).toMatchInlineSnapshot(`Array []`);
|
||||
});
|
||||
|
||||
test('_config param object key', () => {
|
||||
const input = {
|
||||
_config: {
|
||||
key: 'string',
|
||||
},
|
||||
};
|
||||
const parser = new WebParser({ context, contexts });
|
||||
const res = parser.parse({ input, args, location: 'locationId', arrayIndices });
|
||||
expect(res.output).toEqual('config');
|
||||
expect(res.errors).toMatchInlineSnapshot(`Array []`);
|
||||
});
|
||||
|
||||
test('_config param object all', () => {
|
||||
const input = {
|
||||
_config: {
|
||||
all: true,
|
||||
},
|
||||
};
|
||||
const parser = new WebParser({ context, contexts });
|
||||
const res = parser.parse({ input, args, location: 'locationId', arrayIndices });
|
||||
expect(res.output).toEqual({
|
||||
string: 'config',
|
||||
arr: [{ a: 'config1' }, { a: 'config2' }],
|
||||
});
|
||||
expect(res.errors).toMatchInlineSnapshot(`Array []`);
|
||||
});
|
||||
|
||||
test('_config param object all and key', () => {
|
||||
const input = {
|
||||
_config: {
|
||||
all: true,
|
||||
key: 'string',
|
||||
},
|
||||
};
|
||||
const parser = new WebParser({ context, contexts });
|
||||
const res = parser.parse({ input, args, location: 'locationId', arrayIndices });
|
||||
expect(res.output).toEqual({
|
||||
string: 'config',
|
||||
arr: [{ a: 'config1' }, { a: 'config2' }],
|
||||
});
|
||||
expect(res.errors).toMatchInlineSnapshot(`Array []`);
|
||||
});
|
||||
|
||||
test('_config param object invalid', () => {
|
||||
const input = {
|
||||
_config: {
|
||||
other: true,
|
||||
},
|
||||
};
|
||||
const parser = new WebParser({ context, contexts });
|
||||
const res = parser.parse({ input, args, location: 'locationId', arrayIndices });
|
||||
expect(res.output).toEqual(null);
|
||||
expect(res.errors).toMatchInlineSnapshot(`
|
||||
Array [
|
||||
[Error: Operator Error: _config.key must be of type string. Received: {"other":true} at locationId.],
|
||||
]
|
||||
`);
|
||||
});
|
||||
|
||||
test('_config param array', () => {
|
||||
const input = {
|
||||
_config: ['string'],
|
||||
};
|
||||
const parser = new WebParser({ context, contexts });
|
||||
const res = parser.parse({ input, args, location: 'locationId', arrayIndices });
|
||||
expect(res.output).toEqual(null);
|
||||
expect(res.errors).toMatchInlineSnapshot(`
|
||||
Array [
|
||||
[Error: Operator Error: _config params must be of type string or object. Received: ["string"] at locationId.],
|
||||
]
|
||||
`);
|
||||
});
|
||||
|
||||
test('_config param object with string default', () => {
|
||||
const input = {
|
||||
_config: {
|
||||
key: 'notFound',
|
||||
default: 'defaultValue',
|
||||
},
|
||||
};
|
||||
const parser = new WebParser({ context, contexts });
|
||||
const res = parser.parse({ input, args, location: 'locationId', arrayIndices });
|
||||
expect(res.output).toEqual('defaultValue');
|
||||
expect(res.errors).toMatchInlineSnapshot(`Array []`);
|
||||
});
|
||||
|
||||
test('_config param object with zero default', () => {
|
||||
const input = {
|
||||
_config: {
|
||||
key: 'notFound',
|
||||
default: 0,
|
||||
},
|
||||
};
|
||||
const parser = new WebParser({ context, contexts });
|
||||
const res = parser.parse({ input, args, location: 'locationId', arrayIndices });
|
||||
expect(res.output).toEqual(0);
|
||||
expect(res.errors).toMatchInlineSnapshot(`Array []`);
|
||||
});
|
||||
|
||||
test('_config param object with false default', () => {
|
||||
const input = {
|
||||
_config: {
|
||||
key: 'notFound',
|
||||
default: false,
|
||||
},
|
||||
};
|
||||
const parser = new WebParser({ context, contexts });
|
||||
const res = parser.parse({ input, args, location: 'locationId', arrayIndices });
|
||||
expect(res.output).toEqual(false);
|
||||
expect(res.errors).toMatchInlineSnapshot(`Array []`);
|
||||
});
|
||||
|
||||
test('_config param object with no default', () => {
|
||||
const input = {
|
||||
_config: {
|
||||
key: 'notFound',
|
||||
},
|
||||
};
|
||||
const parser = new WebParser({ context, contexts });
|
||||
const res = parser.parse({ input, args, location: 'locationId', arrayIndices });
|
||||
expect(res.output).toEqual(null);
|
||||
expect(res.errors).toMatchInlineSnapshot(`Array []`);
|
||||
});
|
@ -49,10 +49,6 @@ const context = {
|
||||
string: 'urlQuery',
|
||||
arr: [{ a: 'urlQuery1' }, { a: 'urlQuery2' }],
|
||||
},
|
||||
user: {
|
||||
string: 'user',
|
||||
arr: [{ a: 'user1' }, { a: 'user2' }],
|
||||
},
|
||||
};
|
||||
|
||||
const contexts = {};
|
||||
|
@ -49,10 +49,6 @@ const context = {
|
||||
string: 'urlQuery',
|
||||
arr: [{ a: 'urlQuery1' }, { a: 'urlQuery2' }],
|
||||
},
|
||||
user: {
|
||||
string: 'user',
|
||||
arr: [{ a: 'user1' }, { a: 'user2' }],
|
||||
},
|
||||
};
|
||||
|
||||
const contexts = {};
|
||||
|
@ -50,10 +50,6 @@ const context = {
|
||||
string: 'urlQuery',
|
||||
arr: [{ a: 'urlQuery1' }, { a: 'urlQuery2' }],
|
||||
},
|
||||
user: {
|
||||
string: 'user',
|
||||
arr: [{ a: 'user1' }, { a: 'user2' }],
|
||||
},
|
||||
};
|
||||
|
||||
const contexts = {};
|
||||
|
@ -66,10 +66,6 @@ const context = {
|
||||
string: 'urlQuery',
|
||||
arr: [{ a: 'urlQuery1' }, { a: 'urlQuery2' }],
|
||||
},
|
||||
user: {
|
||||
string: 'user',
|
||||
arr: [{ a: 'user1' }, { a: 'user2' }],
|
||||
},
|
||||
updateListeners: new Set(),
|
||||
};
|
||||
|
||||
@ -133,10 +129,6 @@ const otherContext = {
|
||||
string: 'urlQuery-other',
|
||||
arr: [{ a: 'urlQuery1-other' }, { a: 'urlQuery2-other' }],
|
||||
},
|
||||
user: {
|
||||
string: 'user',
|
||||
arr: [{ a: 'user1' }, { a: 'user2' }],
|
||||
},
|
||||
updateListeners: new Set(),
|
||||
};
|
||||
|
||||
|
@ -51,10 +51,6 @@ const context = {
|
||||
string: 'urlQuery',
|
||||
arr: [{ a: 'urlQuery1' }, { a: 'urlQuery2' }],
|
||||
},
|
||||
user: {
|
||||
string: 'user',
|
||||
arr: [{ a: 'user1' }, { a: 'user2' }],
|
||||
},
|
||||
updateListeners: new Set(),
|
||||
};
|
||||
|
||||
@ -103,10 +99,6 @@ const otherContext = {
|
||||
string: 'urlQuery-other',
|
||||
arr: [{ a: 'urlQuery1-other' }, { a: 'urlQuery2-other' }],
|
||||
},
|
||||
user: {
|
||||
string: 'user',
|
||||
arr: [{ a: 'user1' }, { a: 'user2' }],
|
||||
},
|
||||
updateListeners: new Set(),
|
||||
};
|
||||
|
||||
|
@ -51,10 +51,6 @@ const context = {
|
||||
string: 'urlQuery',
|
||||
arr: [{ a: 'urlQuery1' }, { a: 'urlQuery2' }],
|
||||
},
|
||||
user: {
|
||||
string: 'user',
|
||||
arr: [{ a: 'user1' }, { a: 'user2' }],
|
||||
},
|
||||
updateListeners: new Set(),
|
||||
};
|
||||
|
||||
@ -103,10 +99,6 @@ const otherContext = {
|
||||
string: 'urlQuery-other',
|
||||
arr: [{ a: 'urlQuery1-other' }, { a: 'urlQuery2-other' }],
|
||||
},
|
||||
user: {
|
||||
string: 'user',
|
||||
arr: [{ a: 'user1' }, { a: 'user2' }],
|
||||
},
|
||||
updateListeners: new Set(),
|
||||
};
|
||||
|
||||
|
@ -51,10 +51,6 @@ const context = {
|
||||
string: 'urlQuery',
|
||||
arr: [{ a: 'urlQuery1' }, { a: 'urlQuery2' }],
|
||||
},
|
||||
user: {
|
||||
string: 'user',
|
||||
arr: [{ a: 'user1' }, { a: 'user2' }],
|
||||
},
|
||||
updateListeners: new Set(),
|
||||
};
|
||||
|
||||
@ -103,10 +99,6 @@ const otherContext = {
|
||||
string: 'urlQuery-other',
|
||||
arr: [{ a: 'urlQuery1-other' }, { a: 'urlQuery2-other' }],
|
||||
},
|
||||
user: {
|
||||
string: 'user',
|
||||
arr: [{ a: 'user1' }, { a: 'user2' }],
|
||||
},
|
||||
updateListeners: new Set(),
|
||||
};
|
||||
|
||||
|
@ -51,10 +51,6 @@ const context = {
|
||||
string: 'urlQuery',
|
||||
arr: [{ a: 'urlQuery1' }, { a: 'urlQuery2' }],
|
||||
},
|
||||
user: {
|
||||
string: 'user',
|
||||
arr: [{ a: 'user1' }, { a: 'user2' }],
|
||||
},
|
||||
updateListeners: new Set(),
|
||||
};
|
||||
|
||||
@ -103,10 +99,6 @@ const otherContext = {
|
||||
string: 'urlQuery-other',
|
||||
arr: [{ a: 'urlQuery1-other' }, { a: 'urlQuery2-other' }],
|
||||
},
|
||||
user: {
|
||||
string: 'user',
|
||||
arr: [{ a: 'user1' }, { a: 'user2' }],
|
||||
},
|
||||
updateListeners: new Set(),
|
||||
};
|
||||
|
||||
|
@ -51,10 +51,6 @@ const context = {
|
||||
string: 'urlQuery',
|
||||
arr: [{ a: 'urlQuery1' }, { a: 'urlQuery2' }],
|
||||
},
|
||||
user: {
|
||||
string: 'user',
|
||||
arr: [{ a: 'user1' }, { a: 'user2' }],
|
||||
},
|
||||
updateListeners: new Set(),
|
||||
};
|
||||
|
||||
@ -103,10 +99,6 @@ const otherContext = {
|
||||
string: 'urlQuery-other',
|
||||
arr: [{ a: 'urlQuery1-other' }, { a: 'urlQuery2-other' }],
|
||||
},
|
||||
user: {
|
||||
string: 'user',
|
||||
arr: [{ a: 'user1' }, { a: 'user2' }],
|
||||
},
|
||||
updateListeners: new Set(),
|
||||
};
|
||||
|
||||
|
@ -50,10 +50,6 @@ const context = {
|
||||
string: 'urlQuery',
|
||||
arr: [{ a: 'urlQuery1' }, { a: 'urlQuery2' }],
|
||||
},
|
||||
user: {
|
||||
string: 'user',
|
||||
arr: [{ a: 'user1' }, { a: 'user2' }],
|
||||
},
|
||||
};
|
||||
|
||||
const contexts = {};
|
||||
|
@ -45,10 +45,6 @@ const context = {
|
||||
string: 'urlQuery',
|
||||
arr: [{ a: 'urlQuery1' }, { a: 'urlQuery2' }],
|
||||
},
|
||||
user: {
|
||||
string: 'user',
|
||||
arr: [{ a: 'user1' }, { a: 'user2' }],
|
||||
},
|
||||
};
|
||||
|
||||
const contexts = {};
|
||||
|
@ -46,10 +46,6 @@ const context = {
|
||||
string: 'urlQuery',
|
||||
arr: [{ a: 'urlQuery1' }, { a: 'urlQuery2' }],
|
||||
},
|
||||
user: {
|
||||
string: 'user',
|
||||
arr: [{ a: 'user1' }, { a: 'user2' }],
|
||||
},
|
||||
};
|
||||
|
||||
const contexts = {
|
||||
|
@ -49,10 +49,6 @@ const context = {
|
||||
string: 'urlQuery',
|
||||
arr: [{ a: 'urlQuery1' }, { a: 'urlQuery2' }],
|
||||
},
|
||||
user: {
|
||||
string: 'user',
|
||||
arr: [{ a: 'user1' }, { a: 'user2' }],
|
||||
},
|
||||
};
|
||||
|
||||
const contexts = {};
|
||||
|
@ -44,10 +44,6 @@ const context = {
|
||||
string: 'urlQuery',
|
||||
arr: [{ a: 'urlQuery1' }, { a: 'urlQuery2' }],
|
||||
},
|
||||
user: {
|
||||
string: 'user',
|
||||
arr: [{ a: 'user1' }, { a: 'user2' }],
|
||||
},
|
||||
};
|
||||
|
||||
const contexts = {};
|
||||
|
@ -50,10 +50,6 @@ const context = {
|
||||
string: 'urlQuery',
|
||||
arr: [{ a: 'urlQuery1' }, { a: 'urlQuery2' }],
|
||||
},
|
||||
user: {
|
||||
string: 'user',
|
||||
arr: [{ a: 'user1' }, { a: 'user2' }],
|
||||
},
|
||||
};
|
||||
|
||||
const contexts = {};
|
||||
|
@ -50,10 +50,6 @@ const context = {
|
||||
string: 'urlQuery',
|
||||
arr: [{ a: 'urlQuery1' }, { a: 'urlQuery2' }],
|
||||
},
|
||||
user: {
|
||||
string: 'user',
|
||||
arr: [{ a: 'user1' }, { a: 'user2' }],
|
||||
},
|
||||
};
|
||||
|
||||
const contexts = {};
|
||||
|
@ -49,10 +49,6 @@ const context = {
|
||||
string: 'urlQuery',
|
||||
arr: [{ a: 'urlQuery1' }, { a: 'urlQuery2' }],
|
||||
},
|
||||
user: {
|
||||
string: 'user',
|
||||
arr: [{ a: 'user1' }, { a: 'user2' }],
|
||||
},
|
||||
};
|
||||
|
||||
const contexts = {};
|
||||
|
@ -50,10 +50,6 @@ const context = {
|
||||
string: 'urlQuery',
|
||||
arr: [{ a: 'urlQuery1' }, { a: 'urlQuery2' }],
|
||||
},
|
||||
user: {
|
||||
string: 'user',
|
||||
arr: [{ a: 'user1' }, { a: 'user2' }],
|
||||
},
|
||||
};
|
||||
|
||||
const contexts = {};
|
||||
@ -123,8 +119,8 @@ test('_mql_test null', () => {
|
||||
test('_mql_test object params', () => {
|
||||
const input = {
|
||||
_mql_test: {
|
||||
test: { string: 'user' },
|
||||
on: { _user: true },
|
||||
test: { test: 'value' },
|
||||
on: { test: 'value' },
|
||||
},
|
||||
};
|
||||
const parser = new WebParser({ context, contexts });
|
||||
@ -136,8 +132,7 @@ test('_mql_test object params', () => {
|
||||
test('_mql_test invalid params', () => {
|
||||
const input = {
|
||||
_mql_test: {
|
||||
other: { string: 'user' },
|
||||
on: { _user: true },
|
||||
other: { test: 'value' },
|
||||
},
|
||||
};
|
||||
const parser = new WebParser({ context, contexts });
|
||||
|
@ -49,10 +49,6 @@ const context = {
|
||||
string: 'urlQuery',
|
||||
arr: [{ a: 'urlQuery1' }, { a: 'urlQuery2' }],
|
||||
},
|
||||
user: {
|
||||
string: 'user',
|
||||
arr: [{ a: 'user1' }, { a: 'user2' }],
|
||||
},
|
||||
};
|
||||
|
||||
const contexts = {};
|
||||
|
@ -50,10 +50,6 @@ const context = {
|
||||
string: 'urlQuery',
|
||||
arr: [{ a: 'urlQuery1' }, { a: 'urlQuery2' }],
|
||||
},
|
||||
user: {
|
||||
string: 'user',
|
||||
arr: [{ a: 'user1' }, { a: 'user2' }],
|
||||
},
|
||||
};
|
||||
|
||||
const contexts = {};
|
||||
|
@ -49,10 +49,6 @@ const context = {
|
||||
string: 'urlQuery',
|
||||
arr: [{ a: 'urlQuery1' }, { a: 'urlQuery2' }],
|
||||
},
|
||||
user: {
|
||||
string: 'user',
|
||||
arr: [{ a: 'user1' }, { a: 'user2' }],
|
||||
},
|
||||
};
|
||||
|
||||
const contexts = {};
|
||||
|
@ -49,16 +49,22 @@ const context = {
|
||||
string: 'urlQuery',
|
||||
arr: [{ a: 'urlQuery1' }, { a: 'urlQuery2' }],
|
||||
},
|
||||
user: {
|
||||
string: 'user',
|
||||
arr: [{ a: 'user1' }, { a: 'user2' }],
|
||||
},
|
||||
};
|
||||
|
||||
const contexts = {};
|
||||
|
||||
const arrayIndices = [1];
|
||||
|
||||
test('_operator, _state', () => {
|
||||
const input = { a: { _operator: { name: '_state', params: 'string' } } };
|
||||
const parser = new WebParser({ context, contexts });
|
||||
const res = parser.parse({ input, args, location: 'locationId', arrayIndices });
|
||||
expect(res.output).toEqual({
|
||||
a: 'state',
|
||||
});
|
||||
expect(res.errors).toMatchInlineSnapshot(`Array []`);
|
||||
});
|
||||
|
||||
test('_operator.name invalid', () => {
|
||||
const input = { a: { _operator: { name: '_a' } } };
|
||||
const parser = new WebParser({ context, contexts });
|
||||
@ -102,7 +108,7 @@ test('_operator cannot be set to _operator', () => {
|
||||
expect(res.output).toEqual({ a: null });
|
||||
expect(res.errors).toMatchInlineSnapshot(`
|
||||
Array [
|
||||
[TypeError: Cannot read property 'name' of undefined],
|
||||
[Error: Operator Error: _operator.name cannot be set to _operator to infinite avoid loop reference. Received: {"name":"_operator"} at locationId.],
|
||||
]
|
||||
`);
|
||||
});
|
||||
|
@ -49,10 +49,6 @@ const context = {
|
||||
string: 'urlQuery',
|
||||
arr: [{ a: 'urlQuery1' }, { a: 'urlQuery2' }],
|
||||
},
|
||||
user: {
|
||||
string: 'user',
|
||||
arr: [{ a: 'user1' }, { a: 'user2' }],
|
||||
},
|
||||
};
|
||||
|
||||
const contexts = {};
|
||||
|
@ -50,10 +50,6 @@ const context = {
|
||||
string: 'urlQuery',
|
||||
arr: [{ a: 'urlQuery1' }, { a: 'urlQuery2' }],
|
||||
},
|
||||
user: {
|
||||
string: 'user',
|
||||
arr: [{ a: 'user1' }, { a: 'user2' }],
|
||||
},
|
||||
};
|
||||
|
||||
const contexts = {};
|
||||
|
@ -49,10 +49,6 @@ const context = {
|
||||
string: 'urlQuery',
|
||||
arr: [{ a: 'urlQuery1' }, { a: 'urlQuery2' }],
|
||||
},
|
||||
user: {
|
||||
string: 'user',
|
||||
arr: [{ a: 'user1' }, { a: 'user2' }],
|
||||
},
|
||||
};
|
||||
|
||||
const contexts = {};
|
||||
|
@ -50,10 +50,6 @@ const context = {
|
||||
string: 'urlQuery',
|
||||
arr: [{ a: 'urlQuery1' }, { a: 'urlQuery2' }],
|
||||
},
|
||||
user: {
|
||||
string: 'user',
|
||||
arr: [{ a: 'user1' }, { a: 'user2' }],
|
||||
},
|
||||
};
|
||||
|
||||
const contexts = {};
|
||||
|
@ -50,10 +50,6 @@ const context = {
|
||||
string: 'urlQuery',
|
||||
arr: [{ a: 'urlQuery1' }, { a: 'urlQuery2' }],
|
||||
},
|
||||
user: {
|
||||
string: 'user',
|
||||
arr: [{ a: 'user1' }, { a: 'user2' }],
|
||||
},
|
||||
};
|
||||
|
||||
const contexts = {};
|
||||
|
@ -55,10 +55,6 @@ const context = {
|
||||
string: 'urlQuery',
|
||||
arr: [{ a: 'urlQuery1' }, { a: 'urlQuery2' }],
|
||||
},
|
||||
user: {
|
||||
string: 'user',
|
||||
arr: [{ a: 'user1' }, { a: 'user2' }],
|
||||
},
|
||||
};
|
||||
|
||||
const contexts = {};
|
||||
|
@ -51,10 +51,6 @@ const context = {
|
||||
string: 'urlQuery',
|
||||
arr: [{ a: 'urlQuery1' }, { a: 'urlQuery2' }],
|
||||
},
|
||||
user: {
|
||||
string: 'user',
|
||||
arr: [{ a: 'user1' }, { a: 'user2' }],
|
||||
},
|
||||
};
|
||||
|
||||
const contexts = {};
|
||||
|
@ -49,10 +49,6 @@ const context = {
|
||||
string: 'urlQuery',
|
||||
arr: [{ a: 'urlQuery1' }, { a: 'urlQuery2' }],
|
||||
},
|
||||
user: {
|
||||
string: 'user',
|
||||
arr: [{ a: 'user1' }, { a: 'user2' }],
|
||||
},
|
||||
};
|
||||
|
||||
const contexts = {};
|
||||
|
@ -1,227 +0,0 @@
|
||||
import WebParser from '../../src/webParser';
|
||||
|
||||
const args = {
|
||||
string: 'args',
|
||||
arr: [{ a: 'args1' }, { a: 'args2' }],
|
||||
};
|
||||
|
||||
const context = {
|
||||
config: {
|
||||
string: 'config',
|
||||
arr: [{ a: 'config1' }, { a: 'config2' }],
|
||||
},
|
||||
input: {
|
||||
string: 'input',
|
||||
arr: [{ a: 'input1' }, { a: 'input2' }],
|
||||
},
|
||||
lowdefyGlobal: {
|
||||
string: 'global',
|
||||
arr: [{ a: 'global1' }, { a: 'global2' }],
|
||||
},
|
||||
menus: [
|
||||
{
|
||||
menuId: 'default',
|
||||
},
|
||||
{
|
||||
menuId: 'm_1',
|
||||
},
|
||||
{
|
||||
menuId: 'm_2',
|
||||
},
|
||||
],
|
||||
mutations: {
|
||||
not_loaded: { loading: true, response: 'fail' },
|
||||
string: { loading: false, response: 'mutation String' },
|
||||
number: { loading: false, response: 500 },
|
||||
arr: { loading: false, response: [{ a: 'mutation a1' }, { a: 'mutation a2' }] },
|
||||
},
|
||||
requests: {
|
||||
not_loaded: { loading: true, response: 'fail' },
|
||||
string: { loading: false, response: 'request String' },
|
||||
number: { loading: false, response: 500 },
|
||||
arr: { loading: false, response: [{ a: 'request a1' }, { a: 'request a2' }] },
|
||||
},
|
||||
state: {
|
||||
string: 'state',
|
||||
arr: [{ a: 'state1' }, { a: 'state2' }],
|
||||
},
|
||||
urlQuery: {
|
||||
string: 'urlQuery',
|
||||
arr: [{ a: 'urlQuery1' }, { a: 'urlQuery2' }],
|
||||
},
|
||||
user: {
|
||||
string: 'user',
|
||||
arr: [{ a: 'user1' }, { a: 'user2' }],
|
||||
},
|
||||
};
|
||||
|
||||
const contexts = {};
|
||||
|
||||
const arrayIndices = [1];
|
||||
|
||||
test('_user in object', () => {
|
||||
const input = { a: { _user: 'string' } };
|
||||
const parser = new WebParser({ context, contexts });
|
||||
const res = parser.parse({ input, args, location: 'locationId', arrayIndices });
|
||||
expect(res.output).toEqual({
|
||||
a: 'user',
|
||||
});
|
||||
expect(res.errors).toMatchInlineSnapshot(`Array []`);
|
||||
});
|
||||
|
||||
test('_user full user', () => {
|
||||
const input = { _user: true };
|
||||
const parser = new WebParser({ context, contexts });
|
||||
const res = parser.parse({ input, args, location: 'locationId', arrayIndices });
|
||||
expect(res.output).toEqual({
|
||||
string: 'user',
|
||||
arr: [{ a: 'user1' }, { a: 'user2' }],
|
||||
});
|
||||
expect(res.errors).toMatchInlineSnapshot(`Array []`);
|
||||
});
|
||||
|
||||
test('_user null', () => {
|
||||
const input = { _user: null };
|
||||
const parser = new WebParser({ context, contexts });
|
||||
const res = parser.parse({ input, args, location: 'locationId', arrayIndices });
|
||||
expect(res.output).toBe(null);
|
||||
expect(res.errors).toMatchInlineSnapshot(`
|
||||
Array [
|
||||
[Error: Operator Error: _user params must be of type string or object. Received: null at locationId.],
|
||||
]
|
||||
`);
|
||||
});
|
||||
|
||||
test('_user param object key', () => {
|
||||
const input = {
|
||||
_user: {
|
||||
key: 'string',
|
||||
},
|
||||
};
|
||||
const parser = new WebParser({ context, contexts });
|
||||
const res = parser.parse({ input, args, location: 'locationId', arrayIndices });
|
||||
expect(res.output).toEqual('user');
|
||||
expect(res.errors).toMatchInlineSnapshot(`Array []`);
|
||||
});
|
||||
|
||||
test('_user param object all', () => {
|
||||
const input = {
|
||||
_user: {
|
||||
all: true,
|
||||
},
|
||||
};
|
||||
const parser = new WebParser({ context, contexts });
|
||||
const res = parser.parse({ input, args, location: 'locationId', arrayIndices });
|
||||
expect(res.output).toEqual({
|
||||
string: 'user',
|
||||
arr: [{ a: 'user1' }, { a: 'user2' }],
|
||||
});
|
||||
expect(res.errors).toMatchInlineSnapshot(`Array []`);
|
||||
});
|
||||
|
||||
test('_user param object all and key', () => {
|
||||
const input = {
|
||||
_user: {
|
||||
all: true,
|
||||
key: 'string',
|
||||
},
|
||||
};
|
||||
const parser = new WebParser({ context, contexts });
|
||||
const res = parser.parse({ input, args, location: 'locationId', arrayIndices });
|
||||
expect(res.output).toEqual({
|
||||
string: 'user',
|
||||
arr: [{ a: 'user1' }, { a: 'user2' }],
|
||||
});
|
||||
expect(res.errors).toMatchInlineSnapshot(`Array []`);
|
||||
});
|
||||
|
||||
test('_user param object invalid', () => {
|
||||
const input = {
|
||||
_user: {
|
||||
other: true,
|
||||
},
|
||||
};
|
||||
const parser = new WebParser({ context, contexts });
|
||||
const res = parser.parse({ input, args, location: 'locationId', arrayIndices });
|
||||
expect(res.output).toEqual(null);
|
||||
expect(res.errors).toMatchInlineSnapshot(`
|
||||
Array [
|
||||
[Error: Operator Error: _user.key must be of type string. Received: {"other":true} at locationId.],
|
||||
]
|
||||
`);
|
||||
});
|
||||
|
||||
test('_user param array', () => {
|
||||
const input = {
|
||||
_user: ['firstName'],
|
||||
};
|
||||
const parser = new WebParser({ context, contexts });
|
||||
const res = parser.parse({ input, args, location: 'locationId', arrayIndices });
|
||||
expect(res.output).toEqual(null);
|
||||
expect(res.errors).toMatchInlineSnapshot(`
|
||||
Array [
|
||||
[Error: Operator Error: _user params must be of type string or object. Received: ["firstName"] at locationId.],
|
||||
]
|
||||
`);
|
||||
});
|
||||
|
||||
test('_user param object with string default', () => {
|
||||
const input = {
|
||||
_user: {
|
||||
key: 'notFound',
|
||||
default: 'defaultValue',
|
||||
},
|
||||
};
|
||||
const parser = new WebParser({ context, contexts });
|
||||
const res = parser.parse({ input, args, location: 'locationId', arrayIndices });
|
||||
expect(res.output).toEqual('defaultValue');
|
||||
expect(res.errors).toMatchInlineSnapshot(`Array []`);
|
||||
});
|
||||
|
||||
test('_user param object with zero default', () => {
|
||||
const input = {
|
||||
_user: {
|
||||
key: 'notFound',
|
||||
default: 0,
|
||||
},
|
||||
};
|
||||
const parser = new WebParser({ context, contexts });
|
||||
const res = parser.parse({ input, args, location: 'locationId', arrayIndices });
|
||||
expect(res.output).toEqual(0);
|
||||
expect(res.errors).toMatchInlineSnapshot(`Array []`);
|
||||
});
|
||||
|
||||
test('_user param object with false default', () => {
|
||||
const input = {
|
||||
_user: {
|
||||
key: 'notFound',
|
||||
default: false,
|
||||
},
|
||||
};
|
||||
const parser = new WebParser({ context, contexts });
|
||||
const res = parser.parse({ input, args, location: 'locationId', arrayIndices });
|
||||
expect(res.output).toEqual(false);
|
||||
expect(res.errors).toMatchInlineSnapshot(`Array []`);
|
||||
});
|
||||
|
||||
test('_user param object with no default', () => {
|
||||
const input = {
|
||||
_user: {
|
||||
key: 'notFound',
|
||||
},
|
||||
};
|
||||
const parser = new WebParser({ context, contexts });
|
||||
const res = parser.parse({ input, args, location: 'locationId', arrayIndices });
|
||||
expect(res.output).toEqual(null);
|
||||
expect(res.errors).toMatchInlineSnapshot(`Array []`);
|
||||
});
|
||||
|
||||
test('_user replace key arrayIndices', () => {
|
||||
const input = { a: { _user: 'arr.$.a' } };
|
||||
const parser = new WebParser({ context, contexts });
|
||||
const res = parser.parse({ input, location: 'locationId', arrayIndices });
|
||||
expect(res.output).toEqual({
|
||||
a: 'user2',
|
||||
});
|
||||
expect(res.errors).toMatchInlineSnapshot(`Array []`);
|
||||
});
|
Loading…
Reference in New Issue
Block a user