UNPKG

7.68 kBPlain TextView Raw
1import * as postmark from "../../src/index";
2
3import { expect } from "chai";
4import "mocha";
5import {CreateTemplateRequest, TemplatesPushRequest, TemplateTypes} from "../../src/client/models";
6
7import * as nconf from "nconf";
8const testingKeys = nconf.env().file({ file: __dirname + "/../../testing_keys.json" });
9
10describe("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});