GraphQL: Remove underline from operators (#6024)
* Change _or, _and, _nor to OR, AND, NOR * Renaming where operators maps * Fix tests * Fix tests * Remove CreateResult and UpdateResult types * Remove KEYS_ATT and INCLUDE_ATT * Full text search test * Change the operation generator functions names * Fix object constraints * Improve constraint transformation
This commit is contained in:
committed by
GitHub
parent
618fe37c5a
commit
34f1bf384d
@@ -604,44 +604,6 @@ describe('ParseGraphQLServer', () => {
|
||||
]);
|
||||
});
|
||||
|
||||
it('should have CreateResult object type', async () => {
|
||||
const createResultType = (await apolloClient.query({
|
||||
query: gql`
|
||||
query CreateResultType {
|
||||
__type(name: "CreateResult") {
|
||||
kind
|
||||
fields {
|
||||
name
|
||||
}
|
||||
}
|
||||
}
|
||||
`,
|
||||
})).data['__type'];
|
||||
expect(createResultType.kind).toEqual('OBJECT');
|
||||
expect(
|
||||
createResultType.fields.map(field => field.name).sort()
|
||||
).toEqual(['createdAt', 'id']);
|
||||
});
|
||||
|
||||
it('should have UpdateResult object type', async () => {
|
||||
const updateResultType = (await apolloClient.query({
|
||||
query: gql`
|
||||
query UpdateResultType {
|
||||
__type(name: "UpdateResult") {
|
||||
kind
|
||||
fields {
|
||||
name
|
||||
}
|
||||
}
|
||||
}
|
||||
`,
|
||||
})).data['__type'];
|
||||
expect(updateResultType.kind).toEqual('OBJECT');
|
||||
expect(updateResultType.fields.map(field => field.name)).toEqual([
|
||||
'updatedAt',
|
||||
]);
|
||||
});
|
||||
|
||||
it('should have Class interface type', async () => {
|
||||
const classType = (await apolloClient.query({
|
||||
query: gql`
|
||||
@@ -740,12 +702,10 @@ describe('ParseGraphQLServer', () => {
|
||||
|
||||
const expectedTypes = [
|
||||
'ParseObject',
|
||||
'CreateResult',
|
||||
'Date',
|
||||
'FileInfo',
|
||||
'FindResult',
|
||||
'ReadPreference',
|
||||
'UpdateResult',
|
||||
'Upload',
|
||||
];
|
||||
expect(
|
||||
@@ -1376,78 +1336,86 @@ describe('ParseGraphQLServer', () => {
|
||||
})).data.superCar;
|
||||
expect(getSuperCar.id).toBe(superCar.id);
|
||||
});
|
||||
|
||||
it('should only allow the supplied constraint fields for a class', async () => {
|
||||
const schemaController = await parseServer.config.databaseController.loadSchema();
|
||||
try {
|
||||
const schemaController = await parseServer.config.databaseController.loadSchema();
|
||||
|
||||
await schemaController.addClassIfNotExists('SuperCar', {
|
||||
model: { type: 'String' },
|
||||
engine: { type: 'String' },
|
||||
doors: { type: 'Number' },
|
||||
price: { type: 'String' },
|
||||
mileage: { type: 'Number' },
|
||||
insuranceCertificate: { type: 'String' },
|
||||
});
|
||||
await schemaController.addClassIfNotExists('SuperCar', {
|
||||
model: { type: 'String' },
|
||||
engine: { type: 'String' },
|
||||
doors: { type: 'Number' },
|
||||
price: { type: 'String' },
|
||||
mileage: { type: 'Number' },
|
||||
insuranceCertificate: { type: 'String' },
|
||||
});
|
||||
|
||||
await new Parse.Object('SuperCar').save({
|
||||
model: 'McLaren',
|
||||
engine: 'petrol',
|
||||
doors: 3,
|
||||
price: '£7500',
|
||||
mileage: 0,
|
||||
insuranceCertificate: 'private-file.pdf',
|
||||
});
|
||||
await new Parse.Object('SuperCar').save({
|
||||
model: 'McLaren',
|
||||
engine: 'petrol',
|
||||
doors: 3,
|
||||
price: '£7500',
|
||||
mileage: 0,
|
||||
insuranceCertificate: 'private-file.pdf',
|
||||
});
|
||||
|
||||
await parseGraphQLServer.setGraphQLConfig({
|
||||
classConfigs: [
|
||||
{
|
||||
className: 'SuperCar',
|
||||
type: {
|
||||
constraintFields: ['engine', 'doors', 'price'],
|
||||
await parseGraphQLServer.setGraphQLConfig({
|
||||
classConfigs: [
|
||||
{
|
||||
className: 'SuperCar',
|
||||
type: {
|
||||
constraintFields: ['engine', 'doors', 'price'],
|
||||
},
|
||||
},
|
||||
},
|
||||
],
|
||||
});
|
||||
],
|
||||
});
|
||||
|
||||
await resetGraphQLCache();
|
||||
await resetGraphQLCache();
|
||||
|
||||
await expectAsync(
|
||||
apolloClient.query({
|
||||
query: gql`
|
||||
query FindSuperCar {
|
||||
superCars(
|
||||
where: { insuranceCertificate: { _eq: "private-file.pdf" } }
|
||||
) {
|
||||
count
|
||||
await expectAsync(
|
||||
apolloClient.query({
|
||||
query: gql`
|
||||
query FindSuperCar {
|
||||
superCars(
|
||||
where: {
|
||||
insuranceCertificate: { equalTo: "private-file.pdf" }
|
||||
}
|
||||
) {
|
||||
count
|
||||
}
|
||||
}
|
||||
}
|
||||
`,
|
||||
})
|
||||
).toBeRejected();
|
||||
`,
|
||||
})
|
||||
).toBeRejected();
|
||||
|
||||
await expectAsync(
|
||||
apolloClient.query({
|
||||
query: gql`
|
||||
query FindSuperCar {
|
||||
superCars(where: { mileage: { _eq: 0 } }) {
|
||||
count
|
||||
await expectAsync(
|
||||
apolloClient.query({
|
||||
query: gql`
|
||||
query FindSuperCar {
|
||||
superCars(where: { mileage: { equalTo: 0 } }) {
|
||||
count
|
||||
}
|
||||
}
|
||||
}
|
||||
`,
|
||||
})
|
||||
).toBeRejected();
|
||||
`,
|
||||
})
|
||||
).toBeRejected();
|
||||
|
||||
await expectAsync(
|
||||
apolloClient.query({
|
||||
query: gql`
|
||||
query FindSuperCar {
|
||||
superCars(where: { engine: { _eq: "petrol" } }) {
|
||||
count
|
||||
await expectAsync(
|
||||
apolloClient.query({
|
||||
query: gql`
|
||||
query FindSuperCar {
|
||||
superCars(where: { engine: { equalTo: "petrol" } }) {
|
||||
count
|
||||
}
|
||||
}
|
||||
}
|
||||
`,
|
||||
})
|
||||
).toBeResolved();
|
||||
`,
|
||||
})
|
||||
).toBeResolved();
|
||||
} catch (e) {
|
||||
handleError(e);
|
||||
}
|
||||
});
|
||||
|
||||
it('should only allow the supplied sort fields for a class', async () => {
|
||||
const schemaController = await parseServer.config.databaseController.loadSchema();
|
||||
|
||||
@@ -3411,12 +3379,12 @@ describe('ParseGraphQLServer', () => {
|
||||
variables: {
|
||||
where: {
|
||||
someField: {
|
||||
_in: ['someValue1', 'someValue2', 'someValue3'],
|
||||
in: ['someValue1', 'someValue2', 'someValue3'],
|
||||
},
|
||||
_or: [
|
||||
OR: [
|
||||
{
|
||||
pointerToUser: {
|
||||
_eq: {
|
||||
equalTo: {
|
||||
__type: 'Pointer',
|
||||
className: '_User',
|
||||
objectId: user5.id,
|
||||
@@ -3425,7 +3393,7 @@ describe('ParseGraphQLServer', () => {
|
||||
},
|
||||
{
|
||||
id: {
|
||||
_eq: object1.id,
|
||||
equalTo: object1.id,
|
||||
},
|
||||
},
|
||||
],
|
||||
@@ -3445,7 +3413,7 @@ describe('ParseGraphQLServer', () => {
|
||||
).toEqual(['someValue1', 'someValue3']);
|
||||
});
|
||||
|
||||
it('should support _or operation', async () => {
|
||||
it('should support OR operation', async () => {
|
||||
await prepareData();
|
||||
|
||||
await parseGraphQLServer.parseGraphQLSchema.databaseController.schemaCache.clear();
|
||||
@@ -3455,9 +3423,9 @@ describe('ParseGraphQLServer', () => {
|
||||
query {
|
||||
graphQLClasses(
|
||||
where: {
|
||||
_or: [
|
||||
{ someField: { _eq: "someValue1" } }
|
||||
{ someField: { _eq: "someValue2" } }
|
||||
OR: [
|
||||
{ someField: { equalTo: "someValue1" } }
|
||||
{ someField: { equalTo: "someValue2" } }
|
||||
]
|
||||
}
|
||||
) {
|
||||
@@ -3481,6 +3449,53 @@ describe('ParseGraphQLServer', () => {
|
||||
).toEqual(['someValue1', 'someValue2']);
|
||||
});
|
||||
|
||||
it('should support full text search', async () => {
|
||||
try {
|
||||
const obj = new Parse.Object('FullTextSearchTest');
|
||||
obj.set('field1', 'Parse GraphQL Server');
|
||||
obj.set('field2', 'It rocks!');
|
||||
await obj.save();
|
||||
|
||||
await parseGraphQLServer.parseGraphQLSchema.databaseController.schemaCache.clear();
|
||||
|
||||
const result = await apolloClient.query({
|
||||
query: gql`
|
||||
query FullTextSearchTests(
|
||||
$where: FullTextSearchTestWhereInput
|
||||
) {
|
||||
fullTextSearchTests(where: $where) {
|
||||
results {
|
||||
id
|
||||
}
|
||||
}
|
||||
}
|
||||
`,
|
||||
context: {
|
||||
headers: {
|
||||
'X-Parse-Master-Key': 'test',
|
||||
},
|
||||
},
|
||||
variables: {
|
||||
where: {
|
||||
field1: {
|
||||
text: {
|
||||
search: {
|
||||
term: 'graphql',
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
expect(result.data.fullTextSearchTests.results[0].id).toEqual(
|
||||
obj.id
|
||||
);
|
||||
} catch (e) {
|
||||
handleError(e);
|
||||
}
|
||||
});
|
||||
|
||||
it('should support order, skip and limit arguments', async () => {
|
||||
const promises = [];
|
||||
for (let i = 0; i < 100; i++) {
|
||||
@@ -3516,7 +3531,7 @@ describe('ParseGraphQLServer', () => {
|
||||
variables: {
|
||||
where: {
|
||||
someField: {
|
||||
_regex: '^someValue',
|
||||
matchesRegex: '^someValue',
|
||||
},
|
||||
},
|
||||
order: ['numberField_DESC', 'someField_ASC'],
|
||||
@@ -3538,12 +3553,12 @@ describe('ParseGraphQLServer', () => {
|
||||
|
||||
const where = {
|
||||
someField: {
|
||||
_in: ['someValue1', 'someValue2', 'someValue3'],
|
||||
in: ['someValue1', 'someValue2', 'someValue3'],
|
||||
},
|
||||
_or: [
|
||||
OR: [
|
||||
{
|
||||
pointerToUser: {
|
||||
_eq: {
|
||||
equalTo: {
|
||||
__type: 'Pointer',
|
||||
className: '_User',
|
||||
objectId: user5.id,
|
||||
@@ -3552,7 +3567,7 @@ describe('ParseGraphQLServer', () => {
|
||||
},
|
||||
{
|
||||
id: {
|
||||
_eq: object1.id,
|
||||
equalTo: object1.id,
|
||||
},
|
||||
},
|
||||
],
|
||||
@@ -3594,12 +3609,12 @@ describe('ParseGraphQLServer', () => {
|
||||
|
||||
const where = {
|
||||
someField: {
|
||||
_in: ['someValue1', 'someValue2', 'someValue3'],
|
||||
in: ['someValue1', 'someValue2', 'someValue3'],
|
||||
},
|
||||
_or: [
|
||||
OR: [
|
||||
{
|
||||
pointerToUser: {
|
||||
_eq: {
|
||||
equalTo: {
|
||||
__type: 'Pointer',
|
||||
className: '_User',
|
||||
objectId: user5.id,
|
||||
@@ -3608,7 +3623,7 @@ describe('ParseGraphQLServer', () => {
|
||||
},
|
||||
{
|
||||
id: {
|
||||
_eq: object1.id,
|
||||
equalTo: object1.id,
|
||||
},
|
||||
},
|
||||
],
|
||||
@@ -3654,7 +3669,7 @@ describe('ParseGraphQLServer', () => {
|
||||
query: gql`
|
||||
query FindSomeObjects($limit: Int) {
|
||||
find: someClasses(
|
||||
where: { id: { _exists: true } }
|
||||
where: { id: { exists: true } }
|
||||
limit: $limit
|
||||
) {
|
||||
results {
|
||||
@@ -3695,7 +3710,7 @@ describe('ParseGraphQLServer', () => {
|
||||
`,
|
||||
variables: {
|
||||
where: {
|
||||
id: { _eq: object3.id },
|
||||
id: { equalTo: object3.id },
|
||||
},
|
||||
},
|
||||
context: {
|
||||
@@ -3720,7 +3735,7 @@ describe('ParseGraphQLServer', () => {
|
||||
`,
|
||||
variables: {
|
||||
where: {
|
||||
id: { _eq: object3.id },
|
||||
id: { equalTo: object3.id },
|
||||
},
|
||||
},
|
||||
context: {
|
||||
@@ -3743,7 +3758,7 @@ describe('ParseGraphQLServer', () => {
|
||||
|
||||
const where = {
|
||||
id: {
|
||||
_eq: object3.id,
|
||||
equalTo: object3.id,
|
||||
},
|
||||
};
|
||||
|
||||
@@ -3991,7 +4006,7 @@ describe('ParseGraphQLServer', () => {
|
||||
variables: {
|
||||
where: {
|
||||
pointerToUser: {
|
||||
_inQuery: { where: {}, className: '_User' },
|
||||
inQuery: { where: {}, className: '_User' },
|
||||
},
|
||||
},
|
||||
},
|
||||
@@ -5326,7 +5341,9 @@ describe('ParseGraphQLServer', () => {
|
||||
someClass(id: $id) {
|
||||
someField
|
||||
}
|
||||
someClasses(where: { someField: { _eq: $someFieldValue } }) {
|
||||
someClasses(
|
||||
where: { someField: { equalTo: $someFieldValue } }
|
||||
) {
|
||||
results {
|
||||
someField
|
||||
}
|
||||
@@ -5397,7 +5414,9 @@ describe('ParseGraphQLServer', () => {
|
||||
someClass(id: $id) {
|
||||
someField
|
||||
}
|
||||
someClasses(where: { someField: { _eq: $someFieldValue } }) {
|
||||
someClasses(
|
||||
where: { someField: { equalTo: $someFieldValue } }
|
||||
) {
|
||||
results {
|
||||
someField
|
||||
}
|
||||
@@ -5468,7 +5487,9 @@ describe('ParseGraphQLServer', () => {
|
||||
someClass(id: $id) {
|
||||
someField
|
||||
}
|
||||
someClasses(where: { someField: { _eq: $someFieldValue } }) {
|
||||
someClasses(
|
||||
where: { someField: { equalTo: $someFieldValue } }
|
||||
) {
|
||||
results {
|
||||
someField
|
||||
}
|
||||
@@ -5552,8 +5573,8 @@ describe('ParseGraphQLServer', () => {
|
||||
}
|
||||
someClasses(
|
||||
where: {
|
||||
someFieldTrue: { _eq: $someFieldValueTrue }
|
||||
someFieldFalse: { _eq: $someFieldValueFalse }
|
||||
someFieldTrue: { equalTo: $someFieldValueTrue }
|
||||
someFieldFalse: { equalTo: $someFieldValueFalse }
|
||||
}
|
||||
) {
|
||||
results {
|
||||
@@ -5633,7 +5654,7 @@ describe('ParseGraphQLServer', () => {
|
||||
someClass(id: $id) {
|
||||
someField
|
||||
}
|
||||
someClasses(where: { someField: { _exists: true } }) {
|
||||
someClasses(where: { someField: { exists: true } }) {
|
||||
results {
|
||||
id
|
||||
}
|
||||
@@ -6101,7 +6122,7 @@ describe('ParseGraphQLServer', () => {
|
||||
variables: {
|
||||
where: {
|
||||
name: {
|
||||
_eq: 'imACompany2',
|
||||
equalTo: 'imACompany2',
|
||||
},
|
||||
},
|
||||
fields: {
|
||||
@@ -6198,7 +6219,7 @@ describe('ParseGraphQLServer', () => {
|
||||
variables: {
|
||||
id: country.id,
|
||||
where: {
|
||||
name: { _eq: 'imACompany1' },
|
||||
name: { equalTo: 'imACompany1' },
|
||||
},
|
||||
},
|
||||
});
|
||||
@@ -6314,7 +6335,7 @@ describe('ParseGraphQLServer', () => {
|
||||
}
|
||||
}
|
||||
findSomeClass1: someClasses(
|
||||
where: { someField: { _exists: true } }
|
||||
where: { someField: { exists: true } }
|
||||
) {
|
||||
results {
|
||||
someField {
|
||||
@@ -6324,7 +6345,7 @@ describe('ParseGraphQLServer', () => {
|
||||
}
|
||||
}
|
||||
findSomeClass2: someClasses(
|
||||
where: { someField: { _exists: true } }
|
||||
where: { someField: { exists: true } }
|
||||
) {
|
||||
results {
|
||||
someField {
|
||||
@@ -6408,10 +6429,10 @@ describe('ParseGraphQLServer', () => {
|
||||
|
||||
const where = {
|
||||
someField: {
|
||||
_eq: { _key: 'foo.bar', _value: 'baz' },
|
||||
_ne: { _key: 'foo.bar', _value: 'bat' },
|
||||
_gt: { _key: 'number', _value: 9 },
|
||||
_lt: { _key: 'number', _value: 11 },
|
||||
equalTo: { key: 'foo.bar', value: 'baz' },
|
||||
notEqualTo: { key: 'foo.bar', value: 'bat' },
|
||||
greaterThan: { key: 'number', value: 9 },
|
||||
lessThan: { key: 'number', value: 11 },
|
||||
},
|
||||
};
|
||||
const queryResult = await apolloClient.query({
|
||||
@@ -6507,27 +6528,27 @@ describe('ParseGraphQLServer', () => {
|
||||
});
|
||||
|
||||
const where = {
|
||||
_and: [
|
||||
AND: [
|
||||
{
|
||||
someField: {
|
||||
_gt: { _key: 'number', _value: 9 },
|
||||
greaterThan: { key: 'number', value: 9 },
|
||||
},
|
||||
},
|
||||
{
|
||||
someField: {
|
||||
_lt: { _key: 'number', _value: 11 },
|
||||
lessThan: { key: 'number', value: 11 },
|
||||
},
|
||||
},
|
||||
{
|
||||
_or: [
|
||||
OR: [
|
||||
{
|
||||
someField: {
|
||||
_eq: { _key: 'lorem', _value: 'ipsum' },
|
||||
equalTo: { key: 'lorem', value: 'ipsum' },
|
||||
},
|
||||
},
|
||||
{
|
||||
someField: {
|
||||
_eq: { _key: 'foo.test', _value: 'bar' },
|
||||
equalTo: { key: 'foo.test', value: 'bar' },
|
||||
},
|
||||
},
|
||||
],
|
||||
@@ -6627,7 +6648,7 @@ describe('ParseGraphQLServer', () => {
|
||||
}
|
||||
}
|
||||
}
|
||||
someClasses(where: { someField: { _exists: true } }) {
|
||||
someClasses(where: { someField: { exists: true } }) {
|
||||
results {
|
||||
id
|
||||
someField {
|
||||
@@ -6845,7 +6866,9 @@ describe('ParseGraphQLServer', () => {
|
||||
someClass(id: $id) {
|
||||
someField
|
||||
}
|
||||
someClasses(where: { someField: { _eq: $someFieldValue } }) {
|
||||
someClasses(
|
||||
where: { someField: { equalTo: $someFieldValue } }
|
||||
) {
|
||||
results {
|
||||
id
|
||||
someField
|
||||
@@ -6927,7 +6950,7 @@ describe('ParseGraphQLServer', () => {
|
||||
longitude
|
||||
}
|
||||
}
|
||||
someClasses(where: { someField: { _exists: true } }) {
|
||||
someClasses(where: { someField: { exists: true } }) {
|
||||
results {
|
||||
id
|
||||
someField {
|
||||
@@ -7012,7 +7035,7 @@ describe('ParseGraphQLServer', () => {
|
||||
longitude
|
||||
}
|
||||
}
|
||||
someClasses(where: { somePolygonField: { _exists: true } }) {
|
||||
someClasses(where: { somePolygonField: { exists: true } }) {
|
||||
results {
|
||||
id
|
||||
somePolygonField {
|
||||
@@ -7133,7 +7156,7 @@ describe('ParseGraphQLServer', () => {
|
||||
variables: {
|
||||
where: {
|
||||
someField: {
|
||||
_eq: updatedSomeFieldValue.base64,
|
||||
equalTo: updatedSomeFieldValue.base64,
|
||||
},
|
||||
},
|
||||
},
|
||||
|
||||
Reference in New Issue
Block a user