Skip to content

Commit 0529f8f

Browse files
authored
fix(filters-actions-spam): ZMSA-71-2: Allow spam action to be null thus deleting it (#967)
* ZMSA-71-2: Allow spam action to be null thus deleting it * remove .only from filter spam action tests
1 parent cdc7c63 commit 0529f8f

File tree

4 files changed

+55
-3
lines changed

4 files changed

+55
-3
lines changed

lib/api/filters.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ const { nextPageCursorSchema, previousPageCursorSchema, sessSchema, sessIPSchema
1010
const { publish, FILTER_DELETED, FILTER_CREATED, FORWARD_ADDED } = require('../events');
1111
const { successRes, totalRes, previousCursorRes, nextCursorRes } = require('../schemas/response/general-schemas');
1212
const { GetAllFiltersResult, GetFiltersResult } = require('../schemas/response/filters-schemas');
13-
const { FilterQuery, FilterAction } = require('../schemas/request/filters-schemas');
13+
const { FilterQuery, FilterAction, FilterActionUpdate } = require('../schemas/request/filters-schemas');
1414
const { userId, filterId } = require('../schemas/request/general-schemas');
1515
const { mongopagingFindWrapper } = require('../mongopaging-find-wrapper');
1616

@@ -995,7 +995,7 @@ module.exports = (db, server, userHandler, settingsHandler) => {
995995
name: Joi.string().trim().max(255).empty('').description('Name of the Filter'),
996996

997997
query: FilterQuery,
998-
action: FilterAction,
998+
action: FilterActionUpdate,
999999

10001000
disabled: booleanSchema.description('If true then this filter is ignored'),
10011001

lib/filter-handler.js

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -283,6 +283,10 @@ class FilterHandler {
283283
return;
284284
}
285285

286+
if (key === 'spam' && filterData.action[key] === null) {
287+
return;
288+
}
289+
286290
// if a previous filter already has set a value then do not touch it
287291
if (!filterActions.has(key)) {
288292
filterActions.set(key, filterData.action[key]);

lib/schemas/request/filters-schemas.js

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,4 +51,8 @@ const FilterQuery = Joi.object({
5151
.description('Rules that a message must match')
5252
.$_setFlag('objectName', 'Query');
5353

54-
module.exports = { FilterAction, FilterQuery };
54+
const FilterActionUpdate = FilterAction.keys({
55+
spam: booleanSchema.allow(null).description('If true then store matching messages to Junk Mail folder (null clears action)')
56+
});
57+
58+
module.exports = { FilterAction, FilterQuery, FilterActionUpdate };

test/api/filters-test.js

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -207,6 +207,50 @@ describe('API Filters', function () {
207207
expect(responseGet.body.action.mailbox).to.be.equal(inbox);
208208
});
209209

210+
describe('Filter spam action', function () {
211+
let spamFilter;
212+
213+
it('should POST /users/{user}/filters expect success / with spam action', async () => {
214+
const response = await server
215+
.post(`/users/${user}/filters`)
216+
.send({
217+
name: 'spam action filter',
218+
query: {
219+
from: 'account-spam'
220+
},
221+
action: {
222+
spam: true,
223+
seen: true
224+
}
225+
})
226+
.expect(200);
227+
expect(response.body.success).to.be.true;
228+
spamFilter = response.body.id;
229+
230+
const filterDataResponse = await server.get(`/users/${user}/filters/${spamFilter}`).expect(200);
231+
expect(filterDataResponse.body.success).to.be.true;
232+
expect(filterDataResponse.body.action.spam).to.equal(true);
233+
expect(filterDataResponse.body.action.seen).to.equal(true);
234+
});
235+
236+
it('should PUT /users/{user}/filters/{filter} expect success / clear spam action', async () => {
237+
const response = await server
238+
.put(`/users/${user}/filters/${spamFilter}`)
239+
.send({
240+
action: {
241+
spam: null
242+
}
243+
})
244+
.expect(200);
245+
expect(response.body.success).to.be.true;
246+
247+
const filterDataResponse = await server.get(`/users/${user}/filters/${spamFilter}`).expect(200);
248+
expect(filterDataResponse.body.success).to.be.true;
249+
expect(filterDataResponse.body.action).to.not.have.property('spam');
250+
expect(filterDataResponse.body.action.seen).to.equal(true);
251+
});
252+
});
253+
210254
describe('Filter metaData', function () {
211255
let metaDataFilter;
212256

0 commit comments

Comments
 (0)