You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

110 lines
3.3 KiB

import type { Core } from '@strapi/types';
import { createTestSetup, destroyTestSetup } from '../../../utils/builder-helper';
import { testInTransaction } from '../../../utils';
import resources from './resources/index';
import { ARTICLE_UID, findArticleDb, findArticlesDb } from './utils';
describe('Document Service', () => {
let testUtils;
let strapi: Core.Strapi;
beforeAll(async () => {
testUtils = await createTestSetup(resources);
strapi = testUtils.strapi;
});
afterAll(async () => {
await destroyTestSetup(testUtils);
});
describe('Delete', () => {
testInTransaction('Can delete an entire document', async () => {
const articleDb = await findArticleDb({ title: 'Article1-Draft-EN' });
await strapi.documents(ARTICLE_UID).delete({ documentId: articleDb.documentId, locale: '*' });
const articles = await findArticlesDb({ documentId: articleDb.documentId });
expect(articles).toHaveLength(0);
});
testInTransaction('Can delete a document with a component', async (trx: any) => {
const componentData = {
comp: {
text: 'comp-1',
},
dz: [
{
__component: 'article.dz-comp',
name: 'dz-comp-1',
},
],
} as const;
const articleDb = await findArticleDb({ title: 'Article1-Draft-EN' });
// update article
const updatedArticle = await strapi.documents(ARTICLE_UID).update({
documentId: articleDb.documentId,
locale: 'en',
data: {
comp: componentData.comp,
dz: [...componentData.dz],
},
populate: ['comp', 'dz'],
});
// delete article
await strapi.documents(ARTICLE_UID).delete({
documentId: articleDb.documentId,
locale: 'en',
});
// Components should not be in the database anymore
const compTable = strapi.db.metadata.get('article.comp').tableName;
const dzTable = strapi.db.metadata.get('article.dz-comp').tableName;
const comp = await strapi.db
.getConnection(compTable)
.where({ id: updatedArticle.comp.id })
.transacting(trx)
.first();
const dz = await strapi.db
.getConnection(dzTable)
.where({ id: updatedArticle.dz.at(0)!.id })
.transacting(trx)
.first();
expect(comp).toBeUndefined();
expect(dz).toBeUndefined();
});
testInTransaction('Can delete a single document locale', async () => {
const articleDb = await findArticleDb({ title: 'Article1-Draft-NL' });
await strapi.documents(ARTICLE_UID).delete({
documentId: articleDb.documentId,
locale: 'nl',
});
const articles = await findArticlesDb({ documentId: articleDb.documentId });
expect(articles.length).toBeGreaterThan(0);
// Should not have dutch locale
articles.forEach((article) => {
expect(article.locale).not.toBe('nl');
});
});
testInTransaction('Status is ignored when deleting a document', async () => {
const articleDb = await findArticleDb({ title: 'Article2-Draft-EN' });
await strapi.documents(ARTICLE_UID).delete({
documentId: articleDb.documentId,
status: 'published',
});
const articles = await findArticlesDb({ documentId: articleDb.documentId });
expect(articles.length).toBe(0);
});
});
});