mirror of
https://github.com/directus/directus.git
synced 2026-01-29 08:17:55 -05:00
* Remove UTC conversion from date, time and datetime fields * Fix mysql / maria timestamps when not in UTC timezone * Add sequential tests with node timezone change * Increase connection attempt check * Add error catching in tests flow setup * Check for server connectivity * Fix promises * Fix timestamp inconsistencies * Revert to previously used parseISO * Ensure database and directus connection * Add another timezone to test positive and negative GMT * Set local server hostname to localhost * Add tests for SQLite * Use notNullable primary key * Revert connection testing sleep duration * Fix nested transactions on SQLite * Increase MSSQL request timeout * Add type override flag for SQLite * Remove commented code * Add type override flags for Oracle * Updated test file path * Increase test servers launch timeout * Increase test servers launch timeout * Update format of tests * Fix typo * Increase test timeout for CockroachDB * Add type overrides when creating fields through collections service * Remove time field type conversion for Oracle * Update collections list in test * Remove check for time field in Oracle * Add missing continue... * Remove database override * Add note for SQLite * Rename flags and extract shared util * Abstract remaining DB specific checks * Revert flags renaming except renaming of test files * Use date helper to add field flag * Move field date typecasting upstream * Use timestamp helper for date-created and date-updated * Fix tests * Remove unused vars * Add tests for date-created * Increase connection attempt count * Fix test for mariadb * Increase allowable difference to account for delays * Add tests for date-updated * Fix tests again for mariadb * Add date helpers post merge Co-authored-by: rijkvanzanten <rijkvanzanten@me.com>
156 lines
4.6 KiB
TypeScript
156 lines
4.6 KiB
TypeScript
import request from 'supertest';
|
|
import vendors from '../get-dbs-to-test';
|
|
import config, { getUrl } from '../config';
|
|
import knex, { Knex } from 'knex';
|
|
import { Collection } from '@directus/shared/types';
|
|
|
|
const TABLES_AFTER_SEED = [
|
|
'artists',
|
|
'artists_events',
|
|
'events',
|
|
'guests',
|
|
'guests_events',
|
|
'organizers',
|
|
'tours',
|
|
'tours_components',
|
|
'schema_date_types',
|
|
'tests_flow_data',
|
|
'tests_flow_completed',
|
|
'directus_activity',
|
|
'directus_collections',
|
|
'directus_dashboards',
|
|
'directus_fields',
|
|
'directus_files',
|
|
'directus_folders',
|
|
'directus_migrations',
|
|
'directus_notifications',
|
|
'directus_panels',
|
|
'directus_permissions',
|
|
'directus_presets',
|
|
'directus_relations',
|
|
'directus_revisions',
|
|
'directus_roles',
|
|
'directus_sessions',
|
|
'directus_settings',
|
|
'directus_shares',
|
|
'directus_users',
|
|
'directus_webhooks',
|
|
];
|
|
|
|
describe('/collections', () => {
|
|
const databases = new Map<string, Knex>();
|
|
|
|
beforeAll(() => {
|
|
for (const vendor of vendors) {
|
|
databases.set(vendor, knex(config.knexConfig[vendor]!));
|
|
}
|
|
});
|
|
|
|
afterAll(() => {
|
|
for (const [_vendor, connection] of databases) {
|
|
connection.destroy();
|
|
}
|
|
});
|
|
|
|
describe.each(vendors)('%s', (vendor) => {
|
|
describe('GET /', () => {
|
|
test('Returns all tables for admin users', async () => {
|
|
const response = await request(getUrl(vendor))
|
|
.get('/collections')
|
|
.set('Authorization', 'Bearer AdminToken')
|
|
.expect(200);
|
|
|
|
const responseData = JSON.parse(response.text);
|
|
const tableNames = responseData.data.map((collection: Collection) => collection.collection).sort();
|
|
|
|
expect(responseData.data.length).toBe(TABLES_AFTER_SEED.length);
|
|
expect(tableNames).toEqual(TABLES_AFTER_SEED.sort());
|
|
});
|
|
});
|
|
|
|
describe('POST /', () => {
|
|
const TEST_COLLECTION_NAME = 'test_creation';
|
|
|
|
afterEach(async () => {
|
|
const db = databases.get(vendor)!;
|
|
await db.schema.dropTableIfExists(TEST_COLLECTION_NAME);
|
|
await db('directus_collections').del().where({ collection: TEST_COLLECTION_NAME });
|
|
});
|
|
|
|
test('Creates a new regular collection', async () => {
|
|
const db = databases.get(vendor)!;
|
|
|
|
const response = await request(getUrl(vendor))
|
|
.post('/collections')
|
|
.send({ collection: TEST_COLLECTION_NAME, meta: {}, schema: {} })
|
|
.set('Authorization', 'Bearer AdminToken')
|
|
.expect(200);
|
|
|
|
expect(response.body.data.collection).toBe(TEST_COLLECTION_NAME);
|
|
expect(response.body.data.meta.collection).toBe(TEST_COLLECTION_NAME);
|
|
expect(response.body.data.schema.name).toBe(TEST_COLLECTION_NAME);
|
|
expect(await db.schema.hasTable(TEST_COLLECTION_NAME)).toBe(true);
|
|
});
|
|
|
|
test('Creates a new folder', async () => {
|
|
const db = databases.get(vendor)!;
|
|
|
|
const response = await request(getUrl(vendor))
|
|
.post('/collections')
|
|
.send({ collection: TEST_COLLECTION_NAME, meta: {}, schema: null })
|
|
.set('Authorization', 'Bearer AdminToken')
|
|
.expect(200);
|
|
|
|
expect(response.body.data.collection).toBe(TEST_COLLECTION_NAME);
|
|
expect(response.body.data.schema).toBeNull();
|
|
expect(response.body.data.meta.collection).toBe(TEST_COLLECTION_NAME);
|
|
expect(await db.schema.hasTable(TEST_COLLECTION_NAME)).toBe(false);
|
|
});
|
|
});
|
|
|
|
describe('DELETE /', () => {
|
|
const TEST_COLLECTION_NAME = 'test_creation';
|
|
|
|
test('Deletes a regular collection', async () => {
|
|
const db = databases.get(vendor)!;
|
|
|
|
await request(getUrl(vendor))
|
|
.post('/collections')
|
|
.send({ collection: TEST_COLLECTION_NAME, meta: {}, schema: {} })
|
|
.set('Authorization', 'Bearer AdminToken')
|
|
.expect(200);
|
|
|
|
expect(await db.schema.hasTable(TEST_COLLECTION_NAME)).toBe(true);
|
|
|
|
const response = await request(getUrl(vendor))
|
|
.delete('/collections/' + TEST_COLLECTION_NAME)
|
|
.set('Authorization', 'Bearer AdminToken')
|
|
.expect(204);
|
|
|
|
expect(response.body).toEqual({});
|
|
expect(await db.schema.hasTable(TEST_COLLECTION_NAME)).toBe(false);
|
|
});
|
|
|
|
test('Deletes a folder', async () => {
|
|
const db = databases.get(vendor)!;
|
|
|
|
await request(getUrl(vendor))
|
|
.post('/collections')
|
|
.send({ collection: TEST_COLLECTION_NAME, meta: {}, schema: null })
|
|
.set('Authorization', 'Bearer AdminToken')
|
|
.expect(200);
|
|
|
|
expect(await db('directus_collections').select().where({ collection: TEST_COLLECTION_NAME })).toHaveLength(1);
|
|
|
|
const response = await request(getUrl(vendor))
|
|
.delete('/collections/' + TEST_COLLECTION_NAME)
|
|
.set('Authorization', 'Bearer AdminToken')
|
|
.expect(204);
|
|
|
|
expect(response.body).toEqual({});
|
|
expect(await db('directus_collections').select().where({ collection: TEST_COLLECTION_NAME })).toHaveLength(0);
|
|
});
|
|
});
|
|
});
|
|
});
|