Skip to content

Commit 01a5e8b

Browse files
authored
fix(user): correctly change image of another user (#1042)
* fix(user): correctly change image of another user * chore(image-tests): add more tests for changing other user * chore(image-tests): add more more assertions for changing other user
1 parent 42f86b2 commit 01a5e8b

File tree

3 files changed

+109
-7
lines changed

3 files changed

+109
-7
lines changed

lib/imageserv.js

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ const upload = multer({
4242
const uploadAsync = util.promisify(upload);
4343

4444
exports.uploadImage = async (req, res) => {
45-
const oldimg = req.user.image;
45+
const oldimg = req.currentUser.image;
4646

4747
// If upload folder doesn't exists, create it.
4848
if (!fs.existsSync(uploadFolderName)) {
@@ -72,7 +72,7 @@ exports.uploadImage = async (req, res) => {
7272
return errors.makeValidationError(res, 'Malformed file content.');
7373
}
7474

75-
await req.user.update({
75+
await req.currentUser.update({
7676
image: req.file.filename
7777
});
7878

@@ -84,24 +84,24 @@ exports.uploadImage = async (req, res) => {
8484
return res.json({
8585
success: true,
8686
message: 'File uploaded successfully',
87-
data: req.user.image,
87+
data: req.currentUser.image,
8888
});
8989
};
9090

9191
exports.removeImage = async (req, res) => {
92-
if (!req.user.image) {
92+
if (!req.currentUser.image) {
9393
return errors.makeValidationError(res, 'No image is specified for the user.');
9494
}
9595

96-
await fs.promises.unlink(path.join(uploadFolderName, req.user.image));
96+
await fs.promises.unlink(path.join(uploadFolderName, req.currentUser.image));
9797

98-
await req.user.update({
98+
await req.currentUser.update({
9999
image: null
100100
});
101101

102102
return res.json({
103103
success: true,
104104
message: 'File removed successfully',
105-
data: req.user.image
105+
data: req.currentUser.image
106106
});
107107
};

test/api/users-image-remove.test.js

Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,4 +71,61 @@ describe('Users image remove', () => {
7171
userFromDb = await User.findByPk(user.id);
7272
expect(userFromDb.image).toEqual(null);
7373
});
74+
75+
it('should remove a file of another user', async () => {
76+
const admin = await generator.createUser({ superadmin: true });
77+
const token = await generator.createAccessToken(admin);
78+
79+
const user = await generator.createUser();
80+
81+
const firstRequest = await request({
82+
uri: '/members/' + admin.id + '/upload',
83+
method: 'POST',
84+
headers: { 'X-Auth-Token': token.value },
85+
formData: {
86+
head_image: fs.createReadStream('./test/assets/valid_image.png')
87+
}
88+
});
89+
90+
expect(firstRequest.statusCode).toEqual(200);
91+
92+
const adminFromDbBeforeChange = await User.findByPk(admin.id);
93+
94+
const secondRequest = await request({
95+
uri: '/members/' + user.id + '/upload',
96+
method: 'POST',
97+
headers: { 'X-Auth-Token': token.value },
98+
formData: {
99+
head_image: fs.createReadStream('./test/assets/valid_second_image.PNG')
100+
}
101+
});
102+
103+
expect(secondRequest.statusCode).toEqual(200);
104+
105+
let userFromDb = await User.findByPk(user.id);
106+
107+
const res = await request({
108+
uri: '/members/' + user.id + '/image',
109+
method: 'DELETE',
110+
headers: { 'X-Auth-Token': token.value }
111+
});
112+
113+
expect(res.statusCode).toEqual(200);
114+
expect(res.body.success).toEqual(true);
115+
expect(res.body).toHaveProperty('message');
116+
117+
const oldImgPath = path.join(__dirname, '..', '..', config.media_dir, 'headimages', userFromDb.image);
118+
expect(fs.existsSync(oldImgPath)).toEqual(false);
119+
120+
userFromDb = await User.findByPk(user.id);
121+
expect(userFromDb.image).toEqual(null);
122+
123+
const adminFromDb = await User.findByPk(admin.id);
124+
125+
expect(adminFromDb.image).not.toEqual(null);
126+
expect(adminFromDbBeforeChange.image).toEqual(adminFromDb.image);
127+
128+
const adminImgPath = path.join(__dirname, '..', '..', config.media_dir, 'headimages', adminFromDb.image);
129+
expect(fs.existsSync(adminImgPath)).toEqual(true);
130+
});
74131
});

test/api/users-image-upload.test.js

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -178,4 +178,49 @@ describe('Users image upload', () => {
178178
const oldImgPath = path.join(__dirname, '..', '..', config.media_dir, 'headimages', userFromDb.image);
179179
expect(fs.existsSync(oldImgPath)).toEqual(false);
180180
});
181+
182+
it('should update a valid image to only another user if other user is selected', async () => {
183+
const admin = await generator.createUser({ superadmin: true });
184+
const token = await generator.createAccessToken(admin);
185+
186+
const user = await generator.createUser();
187+
188+
const firstRequest = await request({
189+
uri: '/members/' + admin.id + '/upload',
190+
method: 'POST',
191+
headers: { 'X-Auth-Token': token.value },
192+
formData: {
193+
head_image: fs.createReadStream('./test/assets/valid_image.png')
194+
}
195+
});
196+
197+
expect(firstRequest.statusCode).toEqual(200);
198+
199+
const adminFromDbBeforeChange = await User.findByPk(admin.id);
200+
201+
const res = await request({
202+
uri: '/members/' + user.id + '/upload',
203+
method: 'POST',
204+
headers: { 'X-Auth-Token': token.value },
205+
formData: {
206+
head_image: fs.createReadStream('./test/assets/valid_second_image.PNG')
207+
}
208+
});
209+
210+
expect(res.statusCode).toEqual(200);
211+
expect(res.body.success).toEqual(true);
212+
expect(res.body).toHaveProperty('message');
213+
214+
const userFromDb = await User.findByPk(user.id);
215+
216+
const imgPath = path.join(__dirname, '..', '..', config.media_dir, 'headimages', userFromDb.image);
217+
expect(fs.existsSync(imgPath)).toEqual(true);
218+
219+
const adminFromDb = await User.findByPk(admin.id);
220+
221+
expect(adminFromDbBeforeChange.image).toEqual(adminFromDb.image);
222+
223+
const adminImgPath = path.join(__dirname, '..', '..', config.media_dir, 'headimages', adminFromDb.image);
224+
expect(fs.existsSync(adminImgPath)).toEqual(true);
225+
});
181226
});

0 commit comments

Comments
 (0)