Files
directus/tests/api/items/aggregate.test.ts
Azri Kahar 7d62a70007 Fix GraphQL aggregate query (#14560)
* FIx aggregate query in GraphQL

* change type to Query and alter previous logic

* test
2022-07-22 09:55:51 -04:00

85 lines
2.0 KiB
TypeScript

import config, { getUrl } from '../../config';
import vendors from '../../get-dbs-to-test';
import request from 'supertest';
import knex, { Knex } from 'knex';
import { createGuest, seedTable, createMany } from '../../setup/utils/factories';
describe('/items', () => {
const databases = new Map<string, Knex>();
beforeAll(async () => {
for (const vendor of vendors) {
databases.set(vendor, knex(config.knexConfig[vendor]!));
}
});
afterAll(async () => {
for (const [_vendor, connection] of databases) {
await connection.destroy();
}
});
beforeEach(async () => {
for (const [, connection] of databases) {
await connection('guests').delete();
}
});
describe('/:collection GET', () => {
describe('returns count correctly', () => {
it.each(vendors)('%s', async (vendor) => {
const count = 10;
const guests: any[] = createMany(createGuest, count);
await seedTable(databases.get(vendor)!, 1, 'guests', guests);
const response = await request(getUrl(vendor))
.get(`/items/guests?aggregate[count]=id`)
.set('Authorization', 'Bearer AdminToken')
.expect('Content-Type', /application\/json/)
.expect(200);
const { data } = response.body;
expect(data[0]).toMatchObject({
count: {
id: guests.length,
},
});
});
});
});
describe('/:collection GraphQL Query', () => {
describe('returns count correctly', () => {
it.each(vendors)('%s', async (vendor) => {
const count = 10;
const guests: any[] = createMany(createGuest, count);
await seedTable(databases.get(vendor)!, 1, 'guests', guests);
const query = `
{
guests_aggregated {
count {
id
}
}
}`;
const response = await request(getUrl(vendor))
.post('/graphql')
.send({ query })
.set('Authorization', 'Bearer AdminToken')
.expect('Content-Type', /application\/json/)
.expect(200);
const { data } = response.body;
expect(data.guests_aggregated[0]).toMatchObject({
count: {
id: guests.length,
},
});
});
});
});
});