mirror of
https://github.com/strapi/strapi.git
synced 2026-01-08 05:04:10 +00:00
add delete locale route
This commit is contained in:
parent
a39dae880c
commit
9bca167d03
@ -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"]]
|
||||
]
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
@ -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));
|
||||
},
|
||||
};
|
||||
|
||||
@ -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,
|
||||
};
|
||||
|
||||
@ -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');
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user