Files
ihasmail/server/src/domainrouting.test.ts
T

68 lines
2.5 KiB
TypeScript

import { test } from "node:test";
import assert from "node:assert/strict";
process.env.STALWART_URL = "https://default.example";
const { upstreamFor } = await import("./upstream.js");
const { config } = await import("./config.js");
/**
* Which Stalwart a username goes to (#238).
*
* `STALWART_URL` is required and is the default. The mapping only adds domains
* that go elsewhere, so an installation with no mapping behaves exactly as it
* always has -- which is what these first cases pin.
*/
test("with no mapping at all, everything goes to the default", () => {
assert.deepEqual(config.stalwartServers, {});
assert.equal(upstreamFor("[email protected]"), "https://default.example");
assert.equal(upstreamFor("[email protected]"), "https://default.example");
});
test("a bare username has no domain to map, so it goes to the default", () => {
// Stalwart accepts a login with no domain at all.
assert.equal(upstreamFor("demo"), "https://default.example");
assert.equal(upstreamFor(""), "https://default.example");
});
test("a mapped domain goes to its own server", () => {
config.stalwartServers["mapped.test"] = "https://mail.mapped.test";
try {
assert.equal(upstreamFor("[email protected]"), "https://mail.mapped.test");
} finally {
delete config.stalwartServers["mapped.test"];
}
});
test("an unmapped domain still goes to the default while others are mapped", () => {
config.stalwartServers["mapped.test"] = "https://mail.mapped.test";
try {
assert.equal(upstreamFor("[email protected]"), "https://default.example");
} finally {
delete config.stalwartServers["mapped.test"];
}
});
test("the domain is matched however it was typed", () => {
// Keys are normalized on load; the username has to be normalized the same
// way or a mapping silently never matches.
config.stalwartServers["mapped.test"] = "https://mail.mapped.test";
try {
assert.equal(upstreamFor("[email protected]"), "https://mail.mapped.test");
assert.equal(upstreamFor("[email protected]."), "https://mail.mapped.test", "root dot");
assert.equal(upstreamFor("someone@ mapped.test "), "https://mail.mapped.test", "stray spaces");
} finally {
delete config.stalwartServers["mapped.test"];
}
});
test("an address with an @ in the local part maps on the last one", () => {
config.stalwartServers["mapped.test"] = "https://mail.mapped.test";
try {
assert.equal(upstreamFor('"odd@name"@mapped.test'), "https://mail.mapped.test");
} finally {
delete config.stalwartServers["mapped.test"];
}
});