Skip to content

Commit ab187d0

Browse files
authored
Merge pull request #1372 from javiteri95/deletePermanentBug2
Delete permanent bug2
2 parents 11ca20e + 24424fb commit ab187d0

File tree

4 files changed

+136
-7
lines changed

4 files changed

+136
-7
lines changed

electron_app/src/__integrations__/Email.integration.js

Lines changed: 87 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -677,8 +677,8 @@ describe('Update data email to Email Table:', () => {
677677
describe('Delete emails from Email Table:', () => {
678678
it('Should delete email from DB by key', async () => {
679679
const keysToDelete = [emailSpam.email.key];
680-
const result = await DBManager.deleteEmailByKeys(keysToDelete);
681-
expect(result).toBe(1);
680+
await DBManager.deleteEmailByKeys(keysToDelete);
681+
682682
const [email] = await DBManager.getEmailByKey(emailSpam.email.key);
683683
expect(email).toBeUndefined();
684684
});
@@ -695,6 +695,91 @@ describe('Delete emails from Email Table:', () => {
695695
expect(result).toBe(1);
696696
});
697697

698+
it('Should delete email from DB by key, its emailLabel, emailContact, its files and feeds', async () => {
699+
const emailToDelete = {
700+
email: {
701+
threadId: 'threadZ',
702+
key: '30',
703+
subject: 'A email to delete',
704+
content: '<p>A email to delete</p>',
705+
preview: 'A email to delete',
706+
date: '2019-11-14 08:23:19.120',
707+
status: 0,
708+
unread: true,
709+
secure: true,
710+
unsentDate: '2019-12-14 08:23:30.000',
711+
messageId: 'messageIdZ',
712+
fromAddress: 'User Z <[email protected]>'
713+
},
714+
recipients: {
715+
from: ['User Z <[email protected]>'],
716+
to: Array(400)
717+
.fill()
718+
.map((e, i) => `fake${i}@faker.com`),
719+
720+
721+
},
722+
labels: [1],
723+
files: [
724+
{
725+
token: 'tokenZ',
726+
name: 'Criptext_Image_2018_06_14.png',
727+
readOnly: false,
728+
size: 183241,
729+
status: 1,
730+
date: '2018-06-14T23:45:57.466Z',
731+
mimeType: 'image/png'
732+
}
733+
]
734+
};
735+
736+
const theEmail = await DBManager.createEmail(emailToDelete); //this create emailLabel, emailContact, and files
737+
738+
const feeditem = {
739+
date: '2018-06-14 08:23:19.120',
740+
type: 7,
741+
emailId: theEmail.id,
742+
contactId: 1
743+
};
744+
745+
const feedItemCreated = await DBManager.createFeedItem(feeditem);
746+
expect(feedItemCreated).toHaveProperty('contactId');
747+
expect(feedItemCreated).toHaveProperty('emailId');
748+
749+
const keyToDelete = [emailToDelete.email.key];
750+
const emailContactExist = await DBManager.getContactsByEmailId(theEmail.id);
751+
expect(emailContactExist.to).not.toHaveLength(0);
752+
expect(emailContactExist.cc).not.toHaveLength(0);
753+
expect(emailContactExist.bcc).not.toHaveLength(0);
754+
expect(emailContactExist.from).not.toHaveLength(0);
755+
const emailLabelsExist = await DBManager.getEmailLabelsByEmailId(
756+
theEmail.id
757+
);
758+
expect(emailLabelsExist).not.toHaveLength(0);
759+
const filesExist = await DBManager.getFilesByEmailId(theEmail.id);
760+
expect(filesExist).not.toHaveLength(0);
761+
await DBManager.deleteEmailByKeys(keyToDelete);
762+
763+
const [email] = await DBManager.getEmailByKey(emailToDelete.email.key);
764+
expect(email).toBeUndefined();
765+
766+
const feedItemsDeleted = await DBManager.getAllFeedItems();
767+
expect(feedItemsDeleted).toHaveLength(0);
768+
const emailContactDeleted = await DBManager.getContactsByEmailId(
769+
theEmail.id
770+
);
771+
expect(emailContactDeleted.to).toHaveLength(0);
772+
expect(emailContactDeleted.cc).toHaveLength(0);
773+
expect(emailContactDeleted.bcc).toHaveLength(0);
774+
expect(emailContactDeleted.from).toHaveLength(0);
775+
const emailLabelDeleted = await DBManager.getEmailLabelsByEmailId(
776+
theEmail.id
777+
);
778+
expect(emailLabelDeleted).toHaveLength(0);
779+
const filesExistDeleted = await DBManager.getFilesByEmailId(theEmail.id);
780+
expect(filesExistDeleted).toHaveLength(0);
781+
});
782+
698783
it('Should not delete emails from DB by ids', async () => {
699784
const idsToDelete = [emailIdToDelete];
700785
const result = await DBManager.deleteEmailsByIds(idsToDelete);

electron_app/src/database/DBEmanager.js

Lines changed: 44 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -272,12 +272,53 @@ const createEmail = (params, prevTrx) => {
272272
});
273273
};
274274

275-
const deleteEmailByKeys = keys => {
276-
return Email().destroy({ where: { key: keys } });
275+
const getKeys = (keys, trx) => {
276+
return Email()
277+
.findAll({
278+
attributes: ['id'],
279+
where: { key: keys },
280+
raw: true,
281+
transaction: trx
282+
})
283+
.then(list => list);
284+
};
285+
286+
const deleteEmailByKeys = async keys => {
287+
return await getDB().transaction(async trx => {
288+
const ids = await getKeys(keys, trx).map(el1 => el1.id);
289+
return Feeditem()
290+
.destroy({ where: { emailId: ids }, transaction: trx })
291+
.then(() => {
292+
return EmailContact().destroy({
293+
where: { emailId: ids },
294+
transaction: trx
295+
});
296+
})
297+
.then(() => {
298+
return EmailLabel().destroy({
299+
where: { emailId: ids },
300+
transaction: trx
301+
});
302+
})
303+
.then(() => {
304+
return File().destroy({ where: { emailId: ids }, transaction: trx });
305+
})
306+
.then(() => {
307+
return Email().destroy({
308+
where: { id: ids },
309+
transaction: trx
310+
});
311+
})
312+
.catch(ex => console.log(ex)); //To do
313+
});
277314
};
278315

279316
const deleteEmailsByIds = (ids, trx) => {
280-
return Email().destroy({ where: { id: ids }, transaction: trx });
317+
return Email().destroy({
318+
where: { id: ids },
319+
transaction: trx,
320+
cascade: true
321+
});
281322
};
282323

283324
const deleteEmailsByThreadIdAndLabelId = (threadIds, labelId) => {

electron_app/src/ipc/manager.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ ipc.answerRenderer(
3131
})
3232
)
3333
);
34+
await dbManager.deleteEmailByKeys(emailKeys);
3435
}
3536
await dbManager.deleteEmailsByThreadIdAndLabelId(threadIds, labelId);
3637
}

email_mailbox/src/containers/ActivityPanel.js

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,9 +18,11 @@ const mapStateToProps = state => {
1818
const orderedFeeds = orderFeedsByDate(feeds);
1919
const { newFeeds, oldFeeds } = clasifyFeeds(orderedFeeds);
2020
const newFeedsPlain = newFeeds.toJS();
21-
const feedItemIds = newFeedsPlain.map(feedItem => feedItem.id);
21+
const feedItemIds = newFeedsPlain
22+
.filter(feedItem => feedItem.emailData)
23+
.map(feedItem => feedItem.id);
2224
return {
23-
newFeeds: newFeedsPlain,
25+
newFeeds: newFeedsPlain.filter(item => item.emailData),
2426
oldFeeds: oldFeeds.toJS(),
2527
feedItemIds
2628
};

0 commit comments

Comments
 (0)