AGPL source offer and name cleanup
Every build writes the exact source it was built from, uncommitted work and new files included, as source.tar.gz next to the app, named after that tree. Docker builds, which have no git, pack the build context and name it by a hash of its files. The sign-in page and Settings > About link to it instead of a repository that can drift. What users, operators and packagers see no longer names the upstream server: - interface text, in all nine catalogues, with a token-session line for Security; - server messages; - the settings, now MAIL_SERVER_URL, MAIL_SERVERS_FILE, ADMIN_URL and MAIL_SERVER_FOLLOW_ADVERTISED_URLS, and mail-servers.example.json; - the Tenants notice, which is gone; - the README, CONTRIBUTING and SECURITY. ihasmail's own FEATURES, KNOWN-ISSUES and ROADMAP stay with public ihasmail, and INBUXA.md is folded into the README.
This commit is contained in:
@@ -112,7 +112,7 @@ describe("the Administration dashboard", () => {
|
||||
});
|
||||
});
|
||||
|
||||
describe("the pointer to Stalwart's own administration", () => {
|
||||
describe("the pointer to INBUXA Admin", () => {
|
||||
let host: HTMLDivElement;
|
||||
let root: Root;
|
||||
beforeEach(() => {
|
||||
@@ -136,7 +136,7 @@ describe("the pointer to Stalwart's own administration", () => {
|
||||
it("names it, and links it where the operator has said where it is", async () => {
|
||||
await renderWith("https://admin.example.com");
|
||||
const note = host.querySelector(".admin-dashboard-note")!;
|
||||
expect(note.textContent).toContain("Stalwart's own administration");
|
||||
expect(note.textContent).toContain("INBUXA Admin");
|
||||
const link = note.querySelector("a")!;
|
||||
expect(link.getAttribute("href")).toBe("https://admin.example.com");
|
||||
expect(link.getAttribute("rel")).toBe("noopener noreferrer");
|
||||
@@ -144,7 +144,7 @@ describe("the pointer to Stalwart's own administration", () => {
|
||||
|
||||
it("names it without a link where nobody has", async () => {
|
||||
await renderWith(null);
|
||||
expect(host.querySelector(".admin-dashboard-note")?.textContent).toContain("Stalwart's own administration");
|
||||
expect(host.querySelector(".admin-dashboard-note")?.textContent).toContain("INBUXA Admin");
|
||||
expect(host.querySelector(".admin-dashboard-note a")).toBeNull();
|
||||
});
|
||||
});
|
||||
|
||||
@@ -86,7 +86,7 @@ describe("the role sheet", () => {
|
||||
it("warns about a default role and will not delete it", async () => {
|
||||
signIn(VIEWER);
|
||||
await render(roles.get("user")!, { user: ["user"], group: [], tenant: [], admin: [] });
|
||||
expect(host.textContent).toContain("Stalwart gives this role by default to users");
|
||||
expect(host.textContent).toContain("The mail server gives this role by default to users");
|
||||
expect(button(host, "Delete role…")?.disabled).toBe(true);
|
||||
});
|
||||
});
|
||||
|
||||
@@ -69,15 +69,14 @@ describe("the Tenants page where the installation asks for Enterprise notices",
|
||||
host.remove();
|
||||
});
|
||||
|
||||
it("says tenants are Enterprise above the list, as the demo does", async () => {
|
||||
it("shows no Enterprise notice, even where the installation asks for one", async () => {
|
||||
signIn("enterprise", true);
|
||||
const { hook } = memoryLocation({ path: "/admin/tenants" });
|
||||
await act(async () => {
|
||||
root.render(<Router hook={hook}><TenantsAdmin /></Router>);
|
||||
});
|
||||
await act(async () => {});
|
||||
expect(host.querySelector(".admin-notice")?.textContent).toBe("Tenants are a Stalwart Enterprise feature.");
|
||||
expect(host.querySelector(".admin-notice.warn")).toBeNull();
|
||||
expect(host.querySelector(".admin-notice")).toBeNull();
|
||||
expect(host.querySelector(".admin-table")?.textContent).toContain("Acme Corp");
|
||||
});
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user