Files
famdone/proxy/scripts/test-admin.ts
T
2026-07-29 09:41:52 +01:00

100 lines
3.6 KiB
TypeScript

const HONO = "http://192.168.1.225:3456";
async function main() {
// Signup
const signup = await fetch(`${HONO}/api/admin/signup`, {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({ email: "admin2@test.com", password: "password1234", famName: "Admin Test" }),
});
const s = await signup.json();
console.log("Signup:", s.famId, s.famSlug);
const famId = s.famId;
// Test admin authenticated calls
const headers = {
"x-session-famid": famId,
"x-session-role": "admin",
"x-session-userid": s.userId,
"Content-Type": "application/json",
};
// Create a chore template
console.log("\nCreate template...");
const tmpl = await fetch(`${HONO}/api/admin/${famId}/chore-templates`, {
method: "POST", headers, body: JSON.stringify({
name: "Make Bed", defaultFrequency: "daily", defaultType: "points", defaultValue: 10,
}),
});
const t = await tmpl.json();
console.log("Template:", t.id, t.name);
// List templates
console.log("\nList templates...");
const list = await fetch(`${HONO}/api/admin/${famId}/chore-templates`, { headers });
console.log("Templates:", (await list.json()).length);
// Create a member
console.log("\nCreate member...");
const mem = await fetch(`${HONO}/api/admin/${famId}/members`, {
method: "POST", headers, body: JSON.stringify({ name: "Kid", color: "#6366f1" }),
});
const m = await mem.json();
console.log("Member:", m.id, m.name);
// Assign chore
console.log("\nAssign chore...");
const assign = await fetch(`${HONO}/api/admin/${famId}/assigned-chores`, {
method: "POST", headers, body: JSON.stringify({
memberId: m.id, templateId: t.id, frequency: "daily", type: "points", value: 10,
}),
});
const a = await assign.json();
console.log("Assigned:", a.id);
// Test device token auth
console.log("\nTest completion toggle with device token...");
const devHeaders = {
"x-device-token": "dev-token-test",
"x-device-famid": famId,
"Content-Type": "application/json",
};
// First need to join with this device token
const join = await fetch(`${HONO}/api/members/join`, {
method: "POST", headers: { "Content-Type": "application/json" },
body: JSON.stringify({ inviteCode: s.famSlug, ...(await (await fetch(`${HONO}/api/admin/${famId}/members`, { headers })).json()).length > 1 ? {} : { name: "Test", deviceToken: "dev-token-test" } }),
});
// Actually, just use the member we already created but we can't use device token with it since it has no token
// Let's join a new one
console.log("Joining with device token...");
const j = await fetch(`${HONO}/api/members/join`, {
method: "POST", headers: { "Content-Type": "application/json" },
body: JSON.stringify({ inviteCode: "TEST", name: "Test Kid", deviceToken: "dev-token-test" }),
});
const joinData = await j.json();
console.log("Join result:", JSON.stringify(joinData));
if (joinData.famId) {
// Toggle completion
console.log("\nToggle completion...");
const toggle = await fetch(`${HONO}/api/completions/toggle`, {
method: "POST",
headers: { "x-device-token": "dev-token-test", "x-device-famid": famId, "Content-Type": "application/json" },
body: JSON.stringify({ assignedChoreId: a.id, date: "2026-06-24" }),
});
console.log("Toggle:", await toggle.json());
// Toggle again (should undo)
const toggle2 = await fetch(`${HONO}/api/completions/toggle`, {
method: "POST",
headers: { "x-device-token": "dev-token-test", "x-device-famid": famId, "Content-Type": "application/json" },
body: JSON.stringify({ assignedChoreId: a.id, date: "2026-06-24" }),
});
console.log("Toggle undo:", await toggle2.json());
}
console.log("\n✅ All admin tests passed");
}
main().catch(console.error);