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

188 lines (164 loc) 5.03 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 MyFakeEmailRouterPlugin extends core.EmailRouterPlugin { protected onEmailRouting( request: core.EmailRoutingRequest, instanceContext: core.EmailRouterBaseInstanceContext ) { const response: core.EmailRoutingPluginResponse = { result: true }; return Promise.resolve(response); } protected onEmailCheck( request: core.CheckEmailsRequest, instanceContext: core.EmailRouterBaseInstanceContext ): Promise<core.CheckEmailsPluginResponse> { const response: core.CheckEmailsPluginResponse = { result: true }; return Promise.resolve(response); } } const rpMockup: sinon.SinonStub = sinon.stub().returns( new Promise((resolve, reject) => { resolve("Yolo"); }) ); describe("Fetch Email Router API", () => { // All the magic is here const plugin = new MyFakeEmailRouterPlugin(); const runner = new core.TestingPluginRunner(plugin, rpMockup); it("Check that email_router_id is passed correctly in fetchEmailRouterProperties", function( done ) { const fakeId = "42000000"; // We try a call to the Gateway (runner.plugin as MyFakeEmailRouterPlugin) .fetchEmailRouterProperties(fakeId) .then(() => { expect(rpMockup.args[0][0].uri).to.be.eq( `${runner.plugin .outboundPlatformUrl}/v1/email_routers/${fakeId}/properties` ); done(); }); }); }); describe("Email Router API test", function() { // All the magic is here const plugin = new MyFakeEmailRouterPlugin(); it("Check that the plugin is giving good results with a simple onEmailRouting handler", function( done ) { const rpMockup = sinon.stub(); rpMockup.onCall(0).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_router_id": "2", "call_id": "ba568918-2f06-4f16-bd0e-f50e04b92d34", "context": "LIVE", "creative_id": "7197", "campaign_id": "1896", "blast_id": "1993", "datamart_id": "1090", "user_identifiers": [ { "type": "USER_POINT", "user_point_id": "26340584-f777-404c-82c5-56220667464b" }, { "type": "USER_ACCOUNT", "user_account_id": "914eb2aa50cef7f3a8705b6bb54e50bb", "creation_ts": null }, { "type": "USER_EMAIL", "hash": "e2749f6f4d8104ec385a75490b587c86", "email": null, "operator": null, "creation_ts": 1493118667529, "last_activity_ts": 1493127642622, "providers": [] }, { "type": "USER_AGENT", "vector_id": "vec:886742516", "device": { "form_factor": "PERSONAL_COMPUTER", "os_family": "MAC_OS", "browser_family": "CHROME", "brand": null, "model": null, "os_version": null, "carrier": null }, "creation_ts": 1493118667529, "last_activity_ts": 1493126966889, "providers": [], "mappings": [] } ], "meta": { "from_email": "news@info.velvetconsulting.paris", "from_name": "Velvet Consulting", "to_email": null, "to_name": null, "reply_to": "no-reply@vlvt1.com", "subject_line": "Engagez-vous assez vos shoppers avec votre marque ?" }, "content": { "html": "<html><head></head><body><h1>Hello World!</h1></body></html>", "text": "Hello World!" }, "data": {} }`); request(runner.plugin.app) .post("/v1/email_router_check") .send(requestBody) .end(function(err, res) { expect(res.status).to.equal(200); expect(JSON.parse(res.text).result).to.be.true; }); request(runner.plugin.app) .post("/v1/email_routing") .send(requestBody) .end(function(err, res) { expect(res.status).to.equal(200); expect(JSON.parse(res.text).result).to.be.true; done(); }); }); });