add delete locale route

This commit is contained in:
Pierre Noël 2021-02-12 15:38:25 +01:00
parent a39dae880c
commit 9bca167d03
4 changed files with 78 additions and 0 deletions

View File

@ -43,6 +43,17 @@
["plugins::content-manager.hasPermissions", ["plugins::i18n.locale.update"]]
]
}
},
{
"method": "DELETE",
"path": "/locales/:id",
"handler": "locales.deleteLocale",
"config": {
"policies": [
"admin::isAuthenticatedAdmin",
["plugins::content-manager.hasPermissions", ["plugins::i18n.locale.delete"]]
]
}
}
]
}

View File

@ -81,4 +81,24 @@ module.exports = {
ctx.body = await localesService.setIsDefault(sanitizeLocale(updatedLocale));
},
async deleteLocale(ctx) {
const { id } = ctx.params;
const localesService = getService('locales');
const existingLocale = await localesService.findById(id);
if (!existingLocale) {
return ctx.notFound('locale.notFound');
}
const defaultLocaleCode = await localesService.getDefaultLocale();
if (existingLocale.code === defaultLocaleCode) {
return ctx.badRequest('Cannot delete the default locale');
}
await localesService.delete({ id });
ctx.body = await localesService.setIsDefault(sanitizeLocale(existingLocale));
},
};

View File

@ -14,6 +14,8 @@ const create = locale => strapi.query('locale', 'i18n').create(locale);
const update = (params, updates) => strapi.query('locale', 'i18n').update(params, updates);
const deleteFn = ({ id }) => strapi.query('locale', 'i18n').delete({ id });
const setDefaultLocale = ({ code }) => getCoreStore().set({ key: 'default_locale', value: code });
const getDefaultLocale = () => getCoreStore().get({ key: 'default_locale' });
@ -42,4 +44,5 @@ module.exports = {
setDefaultLocale,
getDefaultLocale,
setIsDefault,
delete: deleteFn,
};

View File

@ -7,6 +7,7 @@ const { createAuthRequest } = require('../../../test/helpers/request');
const data = {
locales: [],
deletedLocales: [],
};
const omitTimestamps = omit(['updatedAt', 'createdAt', 'updated_at', 'created_at']);
@ -268,4 +269,47 @@ describe('CRUD locales', () => {
expect(res.body.isDefault).toBe(true);
});
});
describe('Delete', () => {
test('Cannot delete default locale', async () => {
let res = await rq({
url: `/i18n/locales/${data.locales[0].id}`,
method: 'PUT',
body: { isDefault: true },
});
expect(res.statusCode).toBe(200);
expect(res.body.isDefault).toBe(true);
data.locales[1].isDefault = false;
res = await rq({
url: `/i18n/locales/${data.locales[0].id}`,
method: 'DELETE',
});
expect(res.statusCode).toBe(400);
expect(res.body.message).toBe('Cannot delete the default locale');
});
test('Can delete a locale', async () => {
const res = await rq({
url: `/i18n/locales/${data.locales[1].id}`,
method: 'DELETE',
});
expect(res.statusCode).toBe(200);
expect(res.body).toMatchObject(omitTimestamps(data.locales[1]));
data.deletedLocales.push(res.body);
data.locales.splice(1, 1);
});
test('Cannot delete not found locale', async () => {
let res = await rq({
url: `/i18n/locales/${data.deletedLocales[0].id}`,
method: 'DELETE',
});
expect(res.statusCode).toBe(404);
expect(res.body.message).toBe('locale.notFound');
});
});
});