Add `context` to `Message.upgradeSchema`

Allows us to pass in Electron/Node.js specific functions. This allows better
unit testing in Mocha where we don’t have access to Electron APIs.
pull/1/head
Daniel Gasienica 7 years ago
parent ebe2a769c9
commit aa82a2a5fb

@ -73,7 +73,7 @@ exports.initializeSchemaVersion = (message) => {
}; };
// Middleware // Middleware
// type UpgradeStep = Message -> Promise Message // type UpgradeStep = (Message, Context) -> Promise Message
// SchemaVersion -> UpgradeStep -> UpgradeStep // SchemaVersion -> UpgradeStep -> UpgradeStep
exports._withSchemaVersion = (schemaVersion, upgrade) => { exports._withSchemaVersion = (schemaVersion, upgrade) => {
@ -84,7 +84,7 @@ exports._withSchemaVersion = (schemaVersion, upgrade) => {
throw new TypeError('`upgrade` must be a function'); throw new TypeError('`upgrade` must be a function');
} }
return async (message) => { return async (message, context) => {
if (!exports.isValid(message)) { if (!exports.isValid(message)) {
console.log('Message._withSchemaVersion: Invalid input message:', message); console.log('Message._withSchemaVersion: Invalid input message:', message);
return message; return message;
@ -109,7 +109,7 @@ exports._withSchemaVersion = (schemaVersion, upgrade) => {
let upgradedMessage; let upgradedMessage;
try { try {
upgradedMessage = await upgrade(message); upgradedMessage = await upgrade(message, context);
} catch (error) { } catch (error) {
console.log( console.log(
'Message._withSchemaVersion: error:', 'Message._withSchemaVersion: error:',
@ -137,16 +137,14 @@ exports._withSchemaVersion = (schemaVersion, upgrade) => {
// Public API // Public API
// _mapAttachments :: (Attachment -> Promise Attachment) -> // _mapAttachments :: (Attachment -> Promise Attachment) ->
// Message -> // (Message, Context) ->
// Promise Message // Promise Message
exports._mapAttachments = upgradeAttachment => async message => exports._mapAttachments = upgradeAttachment => async (message, context) => {
Object.assign( const upgradeWithContext = attachment =>
{}, upgradeAttachment(attachment, context);
message, const attachments = await Promise.all(message.attachments.map(upgradeWithContext));
{ return Object.assign({}, message, { attachments });
attachments: await Promise.all(message.attachments.map(upgradeAttachment)), };
}
);
const toVersion0 = async message => const toVersion0 = async message =>
exports.initializeSchemaVersion(message); exports.initializeSchemaVersion(message);
@ -159,7 +157,11 @@ const toVersion2 = exports._withSchemaVersion(
2, 2,
exports._mapAttachments(Attachment.replaceUnicodeOrderOverrides) exports._mapAttachments(Attachment.replaceUnicodeOrderOverrides)
); );
const toVersion3 = exports._withSchemaVersion(
3,
exports._mapAttachments(Attachment.migrateDataToFileSystem)
);
// UpgradeStep // UpgradeStep
exports.upgradeSchema = async message => exports.upgradeSchema = async (message, context) =>
toVersion2(await toVersion1(await toVersion0(message))); toVersion2(await toVersion1(await toVersion0(message)));

Loading…
Cancel
Save