mirror of
https://github.com/directus/directus.git
synced 2026-02-05 16:15:06 -05:00
* Add singleton tests * Test if working for all vendors * Revert triggering for all vendors
127 lines
3.0 KiB
TypeScript
127 lines
3.0 KiB
TypeScript
import vendors from '@common/get-dbs-to-test';
|
|
import {
|
|
CreateCollection,
|
|
CreateField,
|
|
CreateFieldO2M,
|
|
CreateItem,
|
|
DeleteCollection,
|
|
PRIMARY_KEY_TYPES,
|
|
SeedFunctions,
|
|
UpdateItem,
|
|
} from '@common/index';
|
|
|
|
export const collectionSingleton = 'test_items_singleton';
|
|
export const collectionSingletonO2M = 'test_items_singleton_o2m';
|
|
|
|
export type Singleton = {
|
|
id?: number | string;
|
|
name: string;
|
|
};
|
|
|
|
export type SingletonO2M = {
|
|
id?: number | string;
|
|
name: string;
|
|
country_id?: number | string | null;
|
|
};
|
|
|
|
export const seedDBStructure = () => {
|
|
it.each(vendors)(
|
|
'%s',
|
|
async (vendor) => {
|
|
for (const pkType of PRIMARY_KEY_TYPES) {
|
|
try {
|
|
const localCollectionSingleton = `${collectionSingleton}_${pkType}`;
|
|
const localCollectionSingletonO2M = `${collectionSingletonO2M}_${pkType}`;
|
|
|
|
// Delete existing collections
|
|
await DeleteCollection(vendor, { collection: localCollectionSingletonO2M });
|
|
await DeleteCollection(vendor, { collection: localCollectionSingleton });
|
|
|
|
// Create singleton collection
|
|
await CreateCollection(vendor, {
|
|
collection: localCollectionSingleton,
|
|
primaryKeyType: pkType,
|
|
meta: { singleton: true },
|
|
});
|
|
|
|
await CreateField(vendor, {
|
|
collection: localCollectionSingleton,
|
|
field: 'name',
|
|
type: 'string',
|
|
});
|
|
|
|
// Create singleton O2M collection
|
|
await CreateCollection(vendor, {
|
|
collection: localCollectionSingletonO2M,
|
|
primaryKeyType: pkType,
|
|
});
|
|
|
|
await CreateField(vendor, {
|
|
collection: localCollectionSingletonO2M,
|
|
field: 'name',
|
|
type: 'string',
|
|
});
|
|
|
|
// Create O2M relationships
|
|
await CreateFieldO2M(vendor, {
|
|
collection: localCollectionSingleton,
|
|
field: 'o2m',
|
|
otherCollection: localCollectionSingletonO2M,
|
|
otherField: 'singleton_id',
|
|
primaryKeyType: pkType,
|
|
});
|
|
|
|
expect(true).toBeTruthy();
|
|
} catch (error) {
|
|
expect(error).toBeFalsy();
|
|
}
|
|
}
|
|
},
|
|
600000
|
|
);
|
|
};
|
|
|
|
export const seedDBValues = async () => {
|
|
let isSeeded = false;
|
|
|
|
await Promise.all(
|
|
vendors.map(async (vendor) => {
|
|
for (const pkType of PRIMARY_KEY_TYPES) {
|
|
const localCollectionSingleton = `${collectionSingleton}_${pkType}`;
|
|
const localCollectionSingletonO2M = `${collectionSingletonO2M}_${pkType}`;
|
|
|
|
const item = await UpdateItem(vendor, {
|
|
collection: localCollectionSingleton,
|
|
item: {
|
|
id:
|
|
pkType === 'string'
|
|
? SeedFunctions.generatePrimaryKeys(pkType, { quantity: 1, seed: localCollectionSingleton })[0]
|
|
: undefined,
|
|
name: 'parent',
|
|
},
|
|
});
|
|
|
|
await CreateItem(vendor, {
|
|
collection: localCollectionSingletonO2M,
|
|
item: {
|
|
id:
|
|
pkType === 'string'
|
|
? SeedFunctions.generatePrimaryKeys(pkType, { quantity: 1, seed: localCollectionSingletonO2M })[0]
|
|
: undefined,
|
|
name: 'child_o2m',
|
|
singleton_id: item.id,
|
|
},
|
|
});
|
|
}
|
|
})
|
|
)
|
|
.then(() => {
|
|
isSeeded = true;
|
|
})
|
|
.catch(() => {
|
|
isSeeded = false;
|
|
});
|
|
|
|
return isSeeded;
|
|
};
|