strapi/tests/api/plugins/i18n/content-manager/find-existing-relations.test.api.js
2024-04-02 16:25:24 +02:00

165 lines
3.5 KiB
JavaScript

'use strict';
const { pick } = require('lodash/fp');
const { createTestBuilder } = require('api-tests/builder');
const { createStrapiInstance } = require('api-tests/strapi');
const { createAuthRequest } = require('api-tests/request');
let strapi;
let rq;
const data = {
products: [],
shops: [],
};
const productModel = {
pluginOptions: {
i18n: {
localized: true,
},
},
attributes: {
name: {
type: 'string',
},
},
draftAndPublish: false,
displayName: 'Product',
singularName: 'product',
pluralName: 'products',
description: '',
collectionName: '',
};
const shopModel = {
pluginOptions: {
i18n: {
localized: true,
},
},
attributes: {
name: {
type: 'string',
},
products: {
type: 'relation',
relation: 'manyToMany',
target: 'api::product.product',
targetAttribute: 'shops',
},
},
draftAndPublish: false,
displayName: 'Shop',
singularName: 'shop',
pluralName: 'shops',
};
const shops = [
{
name: 'mercato',
locale: 'it',
},
{
name: 'market',
locale: 'en',
},
];
const products = ({ shop: shops }) => {
const entries = [
{
name: 'pomodoro',
shops: [shops[0].id],
locale: 'it',
},
{
name: 'apple',
shops: [shops[1].id],
locale: 'en',
},
];
return entries;
};
describe('i18n - Find existing relations', () => {
const builder = createTestBuilder();
beforeAll(async () => {
await builder
.addContentTypes([productModel, shopModel])
.addFixtures('plugin::i18n.locale', [
{
name: 'It',
code: 'it',
},
])
.addFixtures(shopModel.singularName, shops)
.addFixtures(productModel.singularName, products)
.build();
strapi = await createStrapiInstance();
rq = await createAuthRequest({ strapi });
data.shops = await builder.sanitizedFixturesFor(shopModel.singularName, strapi);
data.products = await builder.sanitizedFixturesFor(productModel.singularName, strapi);
});
afterAll(async () => {
// Delete all locales that have been created
await strapi.db.query('plugin::i18n.locale').deleteMany({ code: { $ne: 'en' } });
await strapi.destroy();
await builder.cleanup();
});
test('Get Italian product for italian shop filter on any locale', async () => {
const res = await rq({
method: 'GET',
url: `/content-manager/relations/api::shop.shop/${data.shops[0].documentId}/products`,
qs: {
locale: 'it',
status: 'published',
},
});
const { id, documentId, name, publishedAt, updatedAt, locale } = data.products[0];
const expectedObj = {
documentId,
id,
name,
locale,
publishedAt,
updatedAt,
};
expect(res.body.results).toHaveLength(1);
expect(res.body.results[0]).toStrictEqual(expectedObj);
});
test('Get english product for english shop', async () => {
const res = await rq({
method: 'GET',
url: `/content-manager/relations/api::shop.shop/${data.shops[1].documentId}/products`,
qs: {
locale: 'en',
status: 'published',
},
});
const { id, documentId, name, publishedAt, updatedAt, locale } = data.products[1];
const expectedObj = {
documentId,
id,
name,
locale,
publishedAt,
updatedAt,
};
expect(res.body.results).toHaveLength(1);
expect(res.body.results[0]).toStrictEqual(expectedObj);
});
});