1 | import * as postmark from "../../src/index";
|
2 |
|
3 | import { expect } from "chai";
|
4 | import "mocha";
|
5 | import {CreateTemplateRequest, TemplatesPushRequest, TemplateTypes} from "../../src/client/models";
|
6 |
|
7 | import * as nconf from "nconf";
|
8 | const testingKeys = nconf.env().file({ file: __dirname + "/../../testing_keys.json" });
|
9 |
|
10 | describe("Client - Templates", () => {
|
11 | const serverToken: string = testingKeys.get("SERVER_TOKEN");
|
12 | const accountToken: string = testingKeys.get("ACCOUNT_TOKEN");
|
13 | const client = new postmark.ServerClient(serverToken);
|
14 | const accountClient = new postmark.AccountClient(accountToken);
|
15 | const templatePrefix: string = "testing-template-node-js";
|
16 |
|
17 | function templateToCreate() {
|
18 | return new CreateTemplateRequest(
|
19 | `${templatePrefix}-${Date.now()}`,
|
20 | "Subject",
|
21 | "Html body",
|
22 | "Text body",
|
23 | null,
|
24 | postmark.Models.TemplateTypes.Standard,
|
25 | );
|
26 | }
|
27 |
|
28 | function templateLayoutToCreate() {
|
29 | return new CreateTemplateRequest(
|
30 | `${templatePrefix}-${Date.now()}`,
|
31 | undefined,
|
32 | "Html body {{{@content}}}",
|
33 | "Text body {{{@content}}}",
|
34 | null,
|
35 | postmark.Models.TemplateTypes.Layout,
|
36 | );
|
37 | }
|
38 |
|
39 | async function cleanup() {
|
40 | const templates = await client.getTemplates({count: 50});
|
41 |
|
42 | for (const template of templates.Templates) {
|
43 | if (template.Name.includes(templatePrefix)) {
|
44 | await client.deleteTemplate(template.TemplateId);
|
45 | }
|
46 | }
|
47 | }
|
48 | before(cleanup);
|
49 | after(cleanup);
|
50 |
|
51 | it("getTemplates", async () => {
|
52 | const result = await client.getTemplates({count:5, offset:0, templateType: TemplateTypes.Standard});
|
53 | expect(result.TotalCount).to.above(-1);
|
54 | });
|
55 |
|
56 | it("getTemplate", async () => {
|
57 | const template = await client.createTemplate(templateToCreate());
|
58 | const result = await client.getTemplate(template.TemplateId);
|
59 | expect(result.TemplateId).to.above(-1);
|
60 | });
|
61 |
|
62 | it("getTemplate - layout", async () => {
|
63 | const template = await client.createTemplate(templateLayoutToCreate());
|
64 | const result = await client.getTemplate(template.TemplateId);
|
65 | expect(result.TemplateType).to.equal(TemplateTypes.Layout);
|
66 | });
|
67 |
|
68 | it("createTemplate", async () => {
|
69 | const result = await client.createTemplate(templateToCreate());
|
70 | expect(result.TemplateType).to.equal(TemplateTypes.Standard)
|
71 | });
|
72 |
|
73 | it("createTemplate - layout", async () => {
|
74 | const result = await client.createTemplate(templateLayoutToCreate());
|
75 | expect(result.TemplateType).to.equal(TemplateTypes.Layout)
|
76 | });
|
77 |
|
78 | it("editTemplate", async () => {
|
79 | const templateOptions = templateToCreate();
|
80 | const updatedName = `${templateOptions.Name}-updated`;
|
81 | const template = await client.createTemplate(templateOptions);
|
82 | const result = await client.editTemplate(template.TemplateId, { Name: updatedName });
|
83 | expect(result.Name).to.equal(updatedName);
|
84 | });
|
85 |
|
86 | describe("editTemplate - layout", () => {
|
87 | it("valid", async () => {
|
88 | const templateOptions = templateLayoutToCreate();
|
89 | const updatedName = `${templateOptions.Name}-updated`;
|
90 | const template = await client.createTemplate(templateOptions);
|
91 | const result = await client.editTemplate(template.TemplateId, { Name: updatedName });
|
92 | expect(result.Name).to.equal(updatedName);
|
93 | });
|
94 |
|
95 | it("invalid", async () => {
|
96 | const templateOptions = templateLayoutToCreate();
|
97 | const updatedContent = 'Html content';
|
98 | const template = await client.createTemplate(templateOptions);
|
99 |
|
100 | return await client.editTemplate(template.TemplateId, { HtmlBody: updatedContent }).then((result) => {
|
101 | throw Error(`Should not be here with result: ${result}`);
|
102 | }, (error) => {
|
103 | expect(error.name).to.equal("ApiInputError");
|
104 | expect(error.message).to.include('The layout content placeholder must be present');
|
105 | });
|
106 |
|
107 | });
|
108 | });
|
109 |
|
110 | it("deleteTemplate", async () => {
|
111 | const template = await client.createTemplate(templateToCreate());
|
112 | const result = await client.deleteTemplate(template.TemplateId);
|
113 | expect(result.Message.length).to.above(0);
|
114 | });
|
115 |
|
116 | it("validateTemplate", async () => {
|
117 | const templateToValidate = {
|
118 | TestRenderModel: {
|
119 | Name: "joe!",
|
120 | },
|
121 | HtmlBody: "{{content}}",
|
122 | TextBody: "text body for template {{id}}!",
|
123 | Subject: "{{subject}}",
|
124 | };
|
125 |
|
126 | const templateValidation = await client.validateTemplate(templateToValidate);
|
127 | expect(templateValidation.TextBody.ContentIsValid).to.eq(true);
|
128 | });
|
129 |
|
130 | it("validateTemplate - layout", async () => {
|
131 | const templateToValidate = {
|
132 | TemplateType: TemplateTypes.Layout,
|
133 | TestRenderModel: {
|
134 | Name: "joe!",
|
135 | },
|
136 | HtmlBody: "{{{@content}}}",
|
137 | TextBody: "text body for template {{id}} {{{@content}}}!"
|
138 | };
|
139 |
|
140 | const templateValidation = await client.validateTemplate(templateToValidate);
|
141 | expect(templateValidation.TextBody.ContentIsValid).to.eq(true);
|
142 | });
|
143 |
|
144 | describe("sending", () => {
|
145 | const fromAddress = testingKeys.get("SENDER_EMAIL_ADDRESS");
|
146 | const toAddress = testingKeys.get("EMAIL_RECIPIENT_ADDRESS");
|
147 |
|
148 | it("sendEmailWithTemplate", async () => {
|
149 | const template = await client.createTemplate(templateToCreate());
|
150 |
|
151 | const templatedMessage = new postmark.Models.TemplatedMessage(
|
152 | fromAddress, template.TemplateId, {}, toAddress);
|
153 | templatedMessage.Metadata = { "Key": "Value"};
|
154 |
|
155 | const result = await client.sendEmailWithTemplate(templatedMessage);
|
156 | expect(result.Message).to.eq("OK");
|
157 | });
|
158 | });
|
159 |
|
160 | describe("push templates", () => {
|
161 | it("non existing servers error", () => {
|
162 | const pushRequest = new TemplatesPushRequest(0, 1, false);
|
163 |
|
164 | return accountClient.pushTemplates(pushRequest).then((result) => {
|
165 | throw Error(`Should not be here with result: ${result}`);
|
166 | }, (error) => {
|
167 | expect(error.name).to.equal("ApiInputError");
|
168 | expect(error.message).to.equal("The source and destination servers were not found.");
|
169 | });
|
170 | });
|
171 |
|
172 | it("bad destination server", async () => {
|
173 | const server = await client.getServer();
|
174 | const pushRequest = new TemplatesPushRequest(server.ID, 1, false);
|
175 |
|
176 | return accountClient.pushTemplates(pushRequest).then((result) => {
|
177 | throw Error(`Should not be here with result: ${result}`);
|
178 | }, (error) => {
|
179 | expect(error.name).to.equal("ApiInputError");
|
180 | expect(error.message).to.equal(`The destination server was not found.`);
|
181 | });
|
182 | });
|
183 |
|
184 | it("bad source server", async () => {
|
185 | const server = await client.getServer();
|
186 | const pushRequest = new TemplatesPushRequest(1, server.ID, false);
|
187 |
|
188 | return accountClient.pushTemplates(pushRequest).then((result) => {
|
189 | throw Error(`Should not be here with result: ${result}`);
|
190 | }, (error) => {
|
191 | expect(error.name).to.equal("ApiInputError");
|
192 | expect(error.message).to.equal(`The source server was not found.`);
|
193 | });
|
194 | });
|
195 | });
|
196 | });
|