Import tests: backend/tests/e2e/tier4
Import the existing local project snapshot. This commit organizes existing files; it does not represent newly developed functionality.
This commit is contained in:
@@ -0,0 +1,184 @@
|
||||
import { describe, expect, it } from "vitest";
|
||||
import { apiFetch, clearCookieJar } from "./setup.js";
|
||||
import type { User, Website, Domain, DnsRecord } from "../../../src/api/contracts/models.js";
|
||||
|
||||
describe("Tier 4 E2E - Workload Application Scenarios", () => {
|
||||
it("should successfully execute a complete real-world lifecycle workload scenario", async () => {
|
||||
const sessionId = "tier4_lifecycle_scenario";
|
||||
clearCookieJar(sessionId);
|
||||
|
||||
// 1. LOGIN
|
||||
const loginRes = await apiFetch<{ user: User }>(
|
||||
"/api/auth/login",
|
||||
{
|
||||
method: "POST",
|
||||
sessionId,
|
||||
body: JSON.stringify({
|
||||
email: "owner@example.com",
|
||||
password: "correct-password",
|
||||
}),
|
||||
}
|
||||
);
|
||||
expect(loginRes.$status).toBe(200);
|
||||
expect(loginRes.data?.user.role).toBe("owner");
|
||||
|
||||
// 2. CONFIRM USER CONTEXT
|
||||
const meRes = await apiFetch<User>("/api/auth/me", {
|
||||
method: "GET",
|
||||
sessionId,
|
||||
});
|
||||
expect(meRes.$status).toBe(200);
|
||||
expect(meRes.data?.email).toBe("owner@example.com");
|
||||
|
||||
// 3. CREATE DOMAIN
|
||||
const domainName = "workload-lifecycle.com";
|
||||
const createDomRes = await apiFetch<Domain>("/api/domains", {
|
||||
method: "POST",
|
||||
sessionId,
|
||||
body: JSON.stringify({
|
||||
name: domainName,
|
||||
type: "primary",
|
||||
documentRoot: `/home/coaxys/${domainName}`,
|
||||
}),
|
||||
});
|
||||
expect(createDomRes.$status).toBe(201);
|
||||
const domainId = createDomRes.data!.id;
|
||||
expect(domainId).toBeDefined();
|
||||
|
||||
// 4. CONFIRM DOMAIN IN LIST
|
||||
const listDomRes = await apiFetch<Domain[]>("/api/domains", {
|
||||
method: "GET",
|
||||
sessionId,
|
||||
});
|
||||
expect(listDomRes.$status).toBe(200);
|
||||
const foundDom = listDomRes.data!.find((d) => d.id === domainId);
|
||||
expect(foundDom).toBeDefined();
|
||||
expect(foundDom?.name).toBe(domainName);
|
||||
|
||||
// 5. CREATE WEBSITE MAPPED TO DOMAIN
|
||||
const siteName = "Workload Production App";
|
||||
const createSiteRes = await apiFetch<Website>("/api/websites", {
|
||||
method: "POST",
|
||||
sessionId,
|
||||
body: JSON.stringify({
|
||||
name: siteName,
|
||||
domain: domainName,
|
||||
runtime: "Node.js",
|
||||
environment: "production",
|
||||
}),
|
||||
});
|
||||
expect(createSiteRes.$status).toBe(201);
|
||||
const siteId = createSiteRes.data!.id;
|
||||
expect(siteId).toBeDefined();
|
||||
|
||||
// 6. CONFIRM WEBSITE IN LIST
|
||||
const listSiteRes = await apiFetch<Website[]>("/api/websites", {
|
||||
method: "GET",
|
||||
sessionId,
|
||||
});
|
||||
expect(listSiteRes.$status).toBe(200);
|
||||
const foundSite = listSiteRes.data!.find((w) => w.id === siteId);
|
||||
expect(foundSite).toBeDefined();
|
||||
expect(foundSite?.name).toBe(siteName);
|
||||
expect(foundSite?.domain).toBe(domainName);
|
||||
|
||||
// 7. GET WEBSITE DETAILS
|
||||
const detailSiteRes = await apiFetch<Website>(`/api/websites/${siteId}`, {
|
||||
method: "GET",
|
||||
sessionId,
|
||||
});
|
||||
expect(detailSiteRes.$status).toBe(200);
|
||||
expect(detailSiteRes.data?.name).toBe(siteName);
|
||||
|
||||
// 8. UPDATE WEBSITE CONFIGS
|
||||
const updateSiteRes = await apiFetch<Website>(`/api/websites/${siteId}`, {
|
||||
method: "PUT",
|
||||
sessionId,
|
||||
body: JSON.stringify({
|
||||
runtime: "Docker",
|
||||
environment: "staging",
|
||||
}),
|
||||
});
|
||||
expect(updateSiteRes.$status).toBe(200);
|
||||
expect(updateSiteRes.data?.runtime).toBe("Docker");
|
||||
expect(updateSiteRes.data?.environment).toBe("staging");
|
||||
|
||||
// 9. ADD DNS RECORD TO DOMAIN
|
||||
const createDnsRes = await apiFetch<DnsRecord>(`/api/domains/${domainId}/dns`, {
|
||||
method: "POST",
|
||||
sessionId,
|
||||
body: JSON.stringify({
|
||||
name: "api",
|
||||
ttl: 14400,
|
||||
type: "A",
|
||||
record: "192.0.2.99",
|
||||
}),
|
||||
});
|
||||
expect(createDnsRes.$status).toBe(201);
|
||||
const recordId = createDnsRes.data!.id;
|
||||
expect(recordId).toBeDefined();
|
||||
|
||||
// 10. LIST AND VERIFY DNS RECORD
|
||||
const listDnsRes = await apiFetch<DnsRecord[]>(`/api/domains/${domainId}/dns`, {
|
||||
method: "GET",
|
||||
sessionId,
|
||||
});
|
||||
expect(listDnsRes.$status).toBe(200);
|
||||
const foundRecord = listDnsRes.data!.find((r) => r.id === recordId);
|
||||
expect(foundRecord).toBeDefined();
|
||||
expect(foundRecord?.record).toBe("192.0.2.99");
|
||||
|
||||
// 11. DELETE DNS RECORD
|
||||
const deleteDnsRes = await apiFetch<{ deleted: string }>(
|
||||
`/api/domains/${domainId}/dns/${recordId}`,
|
||||
{
|
||||
method: "DELETE",
|
||||
sessionId,
|
||||
}
|
||||
);
|
||||
expect(deleteDnsRes.$status).toBe(200);
|
||||
|
||||
// 12. DELETE WEBSITE
|
||||
const deleteSiteRes = await apiFetch<{ deleted: string }>(`/api/websites/${siteId}`, {
|
||||
method: "DELETE",
|
||||
sessionId,
|
||||
});
|
||||
expect(deleteSiteRes.$status).toBe(200);
|
||||
|
||||
// 13. CONFIRM WEBSITE DELETED
|
||||
const confirmSiteDeleted = await apiFetch(`/api/websites/${siteId}`, {
|
||||
method: "GET",
|
||||
sessionId,
|
||||
});
|
||||
expect(confirmSiteDeleted.$status).toBe(404);
|
||||
|
||||
// 14. DELETE DOMAIN
|
||||
const deleteDomRes = await apiFetch<{ deleted: string }>(`/api/domains/${domainId}`, {
|
||||
method: "DELETE",
|
||||
sessionId,
|
||||
});
|
||||
expect(deleteDomRes.$status).toBe(200);
|
||||
|
||||
// 15. CONFIRM DOMAIN DELETED
|
||||
const confirmDomDeleted = await apiFetch(`/api/domains/${domainId}`, {
|
||||
method: "GET",
|
||||
sessionId,
|
||||
});
|
||||
expect(confirmDomDeleted.$status).toBe(404);
|
||||
|
||||
// 16. LOGOUT
|
||||
const logoutRes = await apiFetch<{ ok: boolean }>("/api/auth/logout", {
|
||||
method: "POST",
|
||||
sessionId,
|
||||
});
|
||||
expect(logoutRes.$status).toBe(200);
|
||||
expect(logoutRes.data?.ok).toBe(true);
|
||||
|
||||
// 17. CONFIRM LOGGED OUT
|
||||
const confirmMeLoggedOut = await apiFetch("/api/auth/me", {
|
||||
method: "GET",
|
||||
sessionId,
|
||||
});
|
||||
expect(confirmMeLoggedOut.$status).toBe(401);
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user