UNPKG

@mediarithmics/plugins-nodejs-sdk

Version:

This is the mediarithmics nodejs to help plugin developers bootstrapping their plugin without having to deal with most of the plugin boilerplate

180 lines (164 loc) 5.23 kB
import { expect } from "chai"; import "mocha"; import { core } from "../"; import * as request from "supertest"; import * as sinon from "sinon"; import * as mockery from "mockery"; import * as rp from "request-promise-native"; class MyFakeEmailRendererPlugin extends core.EmailRendererPlugin { protected onEmailContents( request: core.EmailRenderRequest, instanceContext: core.EmailRendererBaseInstanceContext ): Promise<core.EmailRendererPluginResponse> { const response: core.EmailRendererPluginResponse = { content: { html: request.call_id }, meta: { from_email: "hello@hello.com", from_name: "Hello", to_email: "hello@destination.com", to_name: "Destination", reply_to: "hello@hello.com", subject_line: "Hello You!" } }; return Promise.resolve(response); } } const rpMockup: sinon.SinonStub = sinon.stub().returns( new Promise((resolve, reject) => { resolve("Yolo"); }) ); describe("Fetch Email Renderer API", () => { // All the magic is here const plugin = new MyFakeEmailRendererPlugin(); const runner = new core.TestingPluginRunner(plugin, rpMockup); it("Check that email_renderer_id is passed correctly in fetchCreative & fetchCreativeProperties", function( done ) { const fakeId = "42000000"; // We try a call to the Gateway (runner.plugin as MyFakeEmailRendererPlugin) .fetchCreative(fakeId) .then(() => { expect(rpMockup.args[0][0].uri).to.be.eq( `${runner.plugin.outboundPlatformUrl}/v1/creatives/${fakeId}` ); // We try a call to the Gateway (runner.plugin as MyFakeEmailRendererPlugin) .fetchCreativeProperties(fakeId) .then(() => { expect(rpMockup.args[1][0].uri).to.be.eq( `${runner.plugin .outboundPlatformUrl}/v1/creatives/${fakeId}/renderer_properties` ); done(); }); }); }); }); describe("Email Renderer API test", function() { // All the magic is here const plugin = new MyFakeEmailRendererPlugin(); it("Check that the plugin is giving good results with a simple onEmailContents handler", function( done ) { const rpMockup = sinon.stub(); rpMockup.onCall(0).returns( new Promise((resolve, reject) => { const creative: core.ResponseData<core.Creative> = { status: "ok", data: { type: "EMAIL_TEMPLATE", id: "8592", organisation_id: "1135", name: "Market Box", technical_name: "hello", archived: false, editor_version_id: "1020", editor_version_value: "1.0.0", editor_group_id: "com.mediarithmics.template.email", editor_artifact_id: "default-editor", editor_plugin_id: "1015", renderer_version_id: "1047", renderer_version_value: "1.0.1", renderer_group_id: "com.mediarithmics.email-renderer", renderer_artifact_id: "email-handlebars-template", renderer_plugin_id: "1034", creation_date: 1504533940679, subtype: "EMAIL_TEMPLATE" } }; resolve(creative); }) ); rpMockup.onCall(1).returns( new Promise((resolve, reject) => { const pluginInfo: core.PluginPropertyResponse = { status: "ok", count: 45, data: [ { technical_name: "hello_world", value: { value: "Yay" }, property_type: "STRING", origin: "PLUGIN", writable: true, deletable: false } ] }; resolve(pluginInfo); }) ); const runner = new core.TestingPluginRunner(plugin, rpMockup); // We init the plugin request(runner.plugin.app) .post("/v1/init") .send({ authentication_token: "Manny", worker_id: "Calavera" }) .end((err, res) => { expect(res.status).to.equal(200); }); const requestBody = JSON.parse(`{ "email_renderer_id": "1034", "call_id": "8e20e0fc-acb5-4bf3-8e36-f85a9ff25150", "context": "LIVE", "creative_id": "6475", "campaign_id": "1810", "campaign_technical_name": null, "user_identifiers": [ { "type": "USER_POINT", "user_point_id": "62ce5f30-191d-40fb-bd6b-8ea6f39c80eb" }, { "type": "USER_EMAIL", "hash": "8865501e69c464f42a5ae7bada6d342a", "email": "email_mics_152@yopmail.com", "operator": null, "creation_ts": 1489688728108, "last_activity_ts": 1489688728108, "providers": [ ] } ], "user_data_bag": { }, "click_urls": [ ], "email_tracking_url": null }`); request(runner.plugin.app) .post("/v1/email_contents") .send(requestBody) .end(function(err, res) { expect(res.status).to.equal(200); expect(JSON.parse(res.text).content.html).to.be.eq(requestBody.call_id); done(); }); }); });