mirror of
https://github.com/HabitRPG/habitica.git
synced 2025-12-18 07:07:35 +01:00
Group category update issue (#14186)
* Overwrite arrays instead of merging * Test removing a category * Fix previous duplicated categories on group edit
This commit is contained in:
@@ -11,6 +11,12 @@ describe('PUT /group', () => {
|
|||||||
const groupName = 'Test Public Guild';
|
const groupName = 'Test Public Guild';
|
||||||
const groupType = 'guild';
|
const groupType = 'guild';
|
||||||
const groupUpdatedName = 'Test Public Guild Updated';
|
const groupUpdatedName = 'Test Public Guild Updated';
|
||||||
|
const groupCategories = [
|
||||||
|
{
|
||||||
|
slug: 'initialCat',
|
||||||
|
name: 'Initial Category',
|
||||||
|
},
|
||||||
|
];
|
||||||
|
|
||||||
beforeEach(async () => {
|
beforeEach(async () => {
|
||||||
const { group, groupLeader, members } = await createAndPopulateGroup({
|
const { group, groupLeader, members } = await createAndPopulateGroup({
|
||||||
@@ -18,6 +24,7 @@ describe('PUT /group', () => {
|
|||||||
name: groupName,
|
name: groupName,
|
||||||
type: groupType,
|
type: groupType,
|
||||||
privacy: 'public',
|
privacy: 'public',
|
||||||
|
categories: groupCategories,
|
||||||
},
|
},
|
||||||
members: 1,
|
members: 1,
|
||||||
});
|
});
|
||||||
@@ -61,6 +68,35 @@ describe('PUT /group', () => {
|
|||||||
expect(updatedGroup.categories[0].name).to.eql(categories[0].name);
|
expect(updatedGroup.categories[0].name).to.eql(categories[0].name);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it('removes the initial group category', async () => {
|
||||||
|
const categories = [];
|
||||||
|
|
||||||
|
const updatedGroup = await leader.put(`/groups/${groupToUpdate._id}`, {
|
||||||
|
categories,
|
||||||
|
});
|
||||||
|
|
||||||
|
expect(updatedGroup.categories.length).to.equal(0);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('removes duplicate group categories', async () => {
|
||||||
|
const categories = [
|
||||||
|
{
|
||||||
|
slug: 'newCat',
|
||||||
|
name: 'New Category',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
slug: 'newCat',
|
||||||
|
name: 'New Category',
|
||||||
|
},
|
||||||
|
];
|
||||||
|
|
||||||
|
const updatedGroup = await leader.put(`/groups/${groupToUpdate._id}`, {
|
||||||
|
categories,
|
||||||
|
});
|
||||||
|
|
||||||
|
expect(updatedGroup.categories.length).to.equal(1);
|
||||||
|
});
|
||||||
|
|
||||||
it('allows an admin to update a guild', async () => {
|
it('allows an admin to update a guild', async () => {
|
||||||
const updatedGroup = await adminUser.put(`/groups/${groupToUpdate._id}`, {
|
const updatedGroup = await adminUser.put(`/groups/${groupToUpdate._id}`, {
|
||||||
name: groupUpdatedName,
|
name: groupUpdatedName,
|
||||||
|
|||||||
@@ -492,7 +492,17 @@ api.updateGroup = {
|
|||||||
|
|
||||||
if (req.body.leader !== user._id && group.hasNotCancelled()) throw new NotAuthorized(res.t('cannotChangeLeaderWithActiveGroupPlan'));
|
if (req.body.leader !== user._id && group.hasNotCancelled()) throw new NotAuthorized(res.t('cannotChangeLeaderWithActiveGroupPlan'));
|
||||||
|
|
||||||
_.assign(group, _.merge(group.toObject(), Group.sanitizeUpdate(req.body)));
|
const handleArrays = (currentValue, updatedValue) => {
|
||||||
|
if (!_.isArray(currentValue)) {
|
||||||
|
return undefined;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Previously, categories could get duplicated. By making the updated category list unique,
|
||||||
|
// the duplication issue is fixed on every group edit
|
||||||
|
return _.uniqBy(updatedValue, 'slug');
|
||||||
|
};
|
||||||
|
|
||||||
|
_.assign(group, _.mergeWith(group.toObject(), Group.sanitizeUpdate(req.body), handleArrays));
|
||||||
|
|
||||||
const savedGroup = await group.save();
|
const savedGroup = await group.save();
|
||||||
const response = await Group.toJSONCleanChat(savedGroup, user);
|
const response = await Group.toJSONCleanChat(savedGroup, user);
|
||||||
|
|||||||
Reference in New Issue
Block a user