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.
111 lines
3.1 KiB
111 lines
3.1 KiB
import type { Core, Modules } from '@strapi/types';
|
|
|
|
import { createTestSetup, destroyTestSetup } from '../../../utils/builder-helper';
|
|
import { testInTransaction } from '../../../utils/index';
|
|
import resources from './resources/index';
|
|
import { ARTICLE_UID, findArticlesDb, AUTHOR_UID } from './utils';
|
|
|
|
let strapi: Core.Strapi;
|
|
|
|
const createArticle = async (params: Modules.Documents.ServiceParams['create']) => {
|
|
return strapi.documents(ARTICLE_UID).create({ populate: '*', ...params });
|
|
};
|
|
|
|
const createAuthor = async (params: Modules.Documents.ServiceParams['create']) => {
|
|
return strapi.documents(AUTHOR_UID).create(params);
|
|
};
|
|
|
|
describe('Document Service', () => {
|
|
let testUtils;
|
|
|
|
beforeAll(async () => {
|
|
testUtils = await createTestSetup(resources);
|
|
strapi = testUtils.strapi;
|
|
});
|
|
|
|
afterAll(async () => {
|
|
await destroyTestSetup(testUtils);
|
|
});
|
|
|
|
describe('Create', () => {
|
|
testInTransaction('Can create a draft document', async () => {
|
|
const data = {
|
|
title: 'Article',
|
|
comp: {
|
|
text: 'comp-1',
|
|
},
|
|
dz: [
|
|
{
|
|
__component: 'article.dz-comp',
|
|
name: 'dz-comp-1',
|
|
},
|
|
],
|
|
};
|
|
|
|
const article = await createArticle({ data });
|
|
|
|
// verify that the returned document was updated
|
|
expect(article).toMatchObject({
|
|
...data,
|
|
locale: 'en', // default locale
|
|
publishedAt: null, // should be a draft
|
|
});
|
|
|
|
const articles = await findArticlesDb({ documentId: article.documentId });
|
|
// Only one article should have been created
|
|
expect(articles).toHaveLength(1);
|
|
});
|
|
|
|
testInTransaction('Can create an article in dutch', async () => {
|
|
const article = await createArticle({
|
|
locale: 'nl',
|
|
data: { title: 'Article' },
|
|
});
|
|
|
|
// verify that the returned document was updated
|
|
expect(article).toMatchObject({
|
|
title: 'Article',
|
|
locale: 'nl', // selected locale
|
|
publishedAt: null, // should be a draft
|
|
});
|
|
});
|
|
|
|
testInTransaction('Can draft and publish', async () => {
|
|
const article = await createArticle({
|
|
data: { title: 'Article' },
|
|
status: 'published',
|
|
});
|
|
|
|
expect(article).toMatchObject({
|
|
title: 'Article',
|
|
publishedAt: expect.any(String),
|
|
});
|
|
});
|
|
|
|
testInTransaction('publishedAt attribute is ignored when creating document', async () => {
|
|
const article = await createArticle({
|
|
data: { title: 'Article', publishedAt: new Date() },
|
|
});
|
|
|
|
expect(article).toMatchObject({
|
|
title: 'Article',
|
|
publishedAt: null, // should be a draft
|
|
});
|
|
});
|
|
|
|
testInTransaction('ignores locale parameter on non-localized content type', async () => {
|
|
const author = await createAuthor({
|
|
// Should be ignored on non-localized content types
|
|
locale: 'nl',
|
|
data: { name: 'Author' },
|
|
});
|
|
|
|
// verify that the returned document was updated
|
|
expect(author).toMatchObject({
|
|
name: 'Author',
|
|
locale: null, // should be null, as it is not a localized content type
|
|
});
|
|
});
|
|
});
|
|
});
|