Files
directus/tests-blackbox/routes/items/singleton.seed.ts
ian cb914746d2 Add singleton tests (#15402)
* Add singleton tests

* Test if working for all vendors

* Revert triggering for all vendors
2022-09-05 09:58:59 -04:00

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;
};