fix(email-renderer): validate brand settings and apply them to AMP
This commit is contained in:
1 parent
fd777605e1
commit
371c23db46
5 files changed
+74
-9
No files matched your search
@@ -57,6 +57,25 @@ const document: BlockDocument = {
|
||||
};
|
||||
|
||||
describe("email renderer", () => {
|
||||
test("AMP inherits the saved brand font, colors and body width", async () => {
|
||||
const draft = structuredClone(document);
|
||||
Object.assign(draft.root.props, {width:"720",fontFamily:"Georgia, serif",textColor:"#112233",linkColor:"#445566",background:"#eeeeee",contentBackground:"#fafafa"});
|
||||
const rendered = await renderEmail(draft, {amp:true});
|
||||
expect(rendered.ok).toBe(true);
|
||||
if (!rendered.ok) return;
|
||||
const amp = rendered.value.parts.amp;
|
||||
expect(amp?.validation.valid).toBe(true);
|
||||
for (const style of ["font-family:Georgia, serif", "color:#112233", "a{color:#445566}", "background:#eeeeee", "background:#fafafa", "max-width:720px"]) expect(amp?.content).toContain(style);
|
||||
});
|
||||
test("brand fields reject arbitrary CSS and invalid widths before rendering", async () => {
|
||||
for (const [key,value] of [["fontFamily","Arial;position:fixed"],["fontFamily","</style><script>alert(1)</script>"],["textColor","red;background:url(https://example.com)"],["background","#fff;display:none"],["width","600;position:absolute"],["width","9999"]]) {
|
||||
const draft = structuredClone(document);
|
||||
draft.root.props[key!] = value!;
|
||||
const rendered = await renderEmail(draft, {amp:true});
|
||||
expect(rendered.ok).toBe(false);
|
||||
if (!rendered.ok) expect(rendered.errors.some(error => error.code === "email.brand")).toBe(true);
|
||||
}
|
||||
});
|
||||
test("responsive stacking begins below the desktop email width", async () => {
|
||||
const rendered = await renderEmail(document);
|
||||
expect(rendered.ok).toBe(true);
|
||||
|
||||
Reference in new issue
Block a user