From ba5b8ea33d138f864d5b6588d5544f18f51c302b Mon Sep 17 00:00:00 2001 From: "Fabien \"egg\" O'Carroll" Date: Tue, 29 Nov 2022 14:38:55 +0700 Subject: [PATCH] Added email_spam_complaint_events table and model refs https://github.com/TryGhost/Team/issues/2318 As with our other events, we've disabled destroy and edit static methods on the bookshelf model. --- .../core/server/data/exporter/table-lists.js | 3 +- ...7-add-email-spam-complaint-events-table.js | 9 ++++++ ghost/core/core/server/data/schema/schema.js | 7 ++++ .../models/email-spam-complaint-event.js | 22 +++++++++++++ .../unit/server/data/schema/integrity.test.js | 2 +- .../models/email-spam-complaint-event.test.js | 32 +++++++++++++++++++ 6 files changed, 73 insertions(+), 2 deletions(-) create mode 100644 ghost/core/core/server/data/migrations/versions/5.25/2022-11-24-10-37-add-email-spam-complaint-events-table.js create mode 100644 ghost/core/core/server/models/email-spam-complaint-event.js create mode 100644 ghost/core/test/unit/server/models/email-spam-complaint-event.test.js diff --git a/ghost/core/core/server/data/exporter/table-lists.js b/ghost/core/core/server/data/exporter/table-lists.js index cda5721fcb..97357f9eec 100644 --- a/ghost/core/core/server/data/exporter/table-lists.js +++ b/ghost/core/core/server/data/exporter/table-lists.js @@ -44,7 +44,8 @@ const BACKUP_TABLES = [ 'redirects', 'members_click_events', 'members_feedback', - 'suppressions' + 'suppressions', + 'email_spam_complaint_events' ]; // NOTE: exposing only tables which are going to be included in a "default" export file diff --git a/ghost/core/core/server/data/migrations/versions/5.25/2022-11-24-10-37-add-email-spam-complaint-events-table.js b/ghost/core/core/server/data/migrations/versions/5.25/2022-11-24-10-37-add-email-spam-complaint-events-table.js new file mode 100644 index 0000000000..a9e174299f --- /dev/null +++ b/ghost/core/core/server/data/migrations/versions/5.25/2022-11-24-10-37-add-email-spam-complaint-events-table.js @@ -0,0 +1,9 @@ +const {addTable} = require('../../utils'); + +module.exports = addTable('email_spam_complaint_events', { + id: {type: 'string', maxlength: 24, nullable: false, primary: true}, + member_id: {type: 'string', maxlength: 24, nullable: false, references: 'members.id', cascadeDelete: true}, + email_id: {type: 'string', maxlength: 24, nullable: false, references: 'emails.id'}, + email_address: {type: 'string', maxlength: 191, nullable: false, unique: false}, + created_at: {type: 'dateTime', nullable: false} +}); diff --git a/ghost/core/core/server/data/schema/schema.js b/ghost/core/core/server/data/schema/schema.js index 15f737f916..8ed48a1d1c 100644 --- a/ghost/core/core/server/data/schema/schema.js +++ b/ghost/core/core/server/data/schema/schema.js @@ -966,5 +966,12 @@ module.exports = { } }, created_at: {type: 'dateTime', nullable: false} + }, + email_spam_complaint_events: { + id: {type: 'string', maxlength: 24, nullable: false, primary: true}, + member_id: {type: 'string', maxlength: 24, nullable: false, references: 'members.id', cascadeDelete: true}, + email_id: {type: 'string', maxlength: 24, nullable: false, references: 'emails.id'}, + email_address: {type: 'string', maxlength: 191, nullable: false, unique: false, validations: {isEmail: true}}, + created_at: {type: 'dateTime', nullable: false} } }; diff --git a/ghost/core/core/server/models/email-spam-complaint-event.js b/ghost/core/core/server/models/email-spam-complaint-event.js new file mode 100644 index 0000000000..59d539bc0f --- /dev/null +++ b/ghost/core/core/server/models/email-spam-complaint-event.js @@ -0,0 +1,22 @@ +const errors = require('@tryghost/errors'); +const ghostBookshelf = require('./base'); + +const EmailSpamComplaintEvent = ghostBookshelf.Model.extend({ + tableName: 'email_spam_complaint_events' +}, { + async edit() { + throw new errors.IncorrectUsageError({ + message: 'Cannot edit EmailSpamComplaintEvent' + }); + }, + + async destroy() { + throw new errors.IncorrectUsageError({ + message: 'Cannot destroy EmailSpamComplaintEvent' + }); + } +}); + +module.exports = { + EmailSpamComplaintEvent: ghostBookshelf.model('EmailSpamComplaintEvent', EmailSpamComplaintEvent) +}; diff --git a/ghost/core/test/unit/server/data/schema/integrity.test.js b/ghost/core/test/unit/server/data/schema/integrity.test.js index 3c1d5119b6..7d6412f43d 100644 --- a/ghost/core/test/unit/server/data/schema/integrity.test.js +++ b/ghost/core/test/unit/server/data/schema/integrity.test.js @@ -35,7 +35,7 @@ const validateRouteSettings = require('../../../../../core/server/services/route */ describe('DB version integrity', function () { // Only these variables should need updating - const currentSchemaHash = 'ded409c0ead434761073836b8b6975c6'; + const currentSchemaHash = '7376b855d023c40d1c0ff5770d1d01fd'; const currentFixturesHash = 'dcb7ba7c66b4b98d6c26a722985e756a'; const currentSettingsHash = '9acce72858e75420b831297718595bbd'; const currentRoutesHash = '3d180d52c663d173a6be791ef411ed01'; diff --git a/ghost/core/test/unit/server/models/email-spam-complaint-event.test.js b/ghost/core/test/unit/server/models/email-spam-complaint-event.test.js new file mode 100644 index 0000000000..bbb00b90b0 --- /dev/null +++ b/ghost/core/test/unit/server/models/email-spam-complaint-event.test.js @@ -0,0 +1,32 @@ +const EmailSpamComplaintEvent = require('../../../../core/server/models/email-spam-complaint-event'); +const assert = require('assert'); + +describe('EmailSpamComplaintEvent', function () { + describe('destroy', function () { + it('rejects', async function () { + let threw = false; + try { + await EmailSpamComplaintEvent.destroy({id: 'blah'}); + threw = false; + } catch (err) { + threw = true; + } finally { + assert(threw); + } + }); + }); + + describe('edit', function () { + it('rejects', async function () { + let threw = false; + try { + await EmailSpamComplaintEvent.edit({reason: 'fuck'}, {id: 'blah'}); + threw = false; + } catch (err) { + threw = true; + } finally { + assert(threw); + } + }); + }); +});