67 lines
2.3 KiB
TypeScript
67 lines
2.3 KiB
TypeScript
import { describe, expect, test } from "bun:test";
|
|
import { LoginSchema } from "@edgeever/shared";
|
|
import {
|
|
groupLoginDeviceSessions,
|
|
resolveSessionDeviceId,
|
|
type LoginDeviceSessionRow,
|
|
} from "../apps/api/src/auth-session-devices";
|
|
|
|
describe("login device sessions", () => {
|
|
test("accepts an optional stable client device id", () => {
|
|
expect(LoginSchema.parse({ username: "owner", password: "secret", deviceId: "web-device-123456" }).deviceId)
|
|
.toBe("web-device-123456");
|
|
expect(LoginSchema.parse({ username: "owner", password: "secret" }).deviceId).toBeUndefined();
|
|
expect(() => LoginSchema.parse({ username: "owner", password: "secret", deviceId: "short" })).toThrow();
|
|
});
|
|
|
|
test("falls back to a stable legacy user-agent device id", () => {
|
|
expect(resolveSessionDeviceId(undefined, "EdgeEver/1.4.0", "sess_new"))
|
|
.toBe("legacy-ua:EdgeEver/1.4.0");
|
|
expect(resolveSessionDeviceId(undefined, null, "sess_new")).toBe("legacy-session:sess_new");
|
|
});
|
|
|
|
test("groups repeated sessions from the same device and preserves the current session", () => {
|
|
const rows: LoginDeviceSessionRow[] = [
|
|
{
|
|
id: "sess_latest",
|
|
device_id: "mobile-installation-1",
|
|
user_agent: "EdgeEver/1.4.0",
|
|
device_label: "手机",
|
|
ip_address: "203.0.113.10",
|
|
ip_country: "CN",
|
|
ip_region: "Guangdong",
|
|
created_at: "2026-07-20T00:00:00.000Z",
|
|
last_seen_at: "2026-07-22T04:00:00.000Z",
|
|
expires_at: "2027-07-20T00:00:00.000Z",
|
|
},
|
|
{
|
|
id: "sess_current",
|
|
device_id: "mobile-installation-1",
|
|
user_agent: "EdgeEver/1.4.0",
|
|
device_label: "手机",
|
|
ip_address: "203.0.113.11",
|
|
ip_country: "CN",
|
|
ip_region: "Guangdong",
|
|
created_at: "2026-07-18T00:00:00.000Z",
|
|
last_seen_at: "2026-07-21T04:00:00.000Z",
|
|
expires_at: "2027-07-18T00:00:00.000Z",
|
|
},
|
|
];
|
|
|
|
expect(groupLoginDeviceSessions(rows, "sess_current")).toEqual([
|
|
{
|
|
id: "sess_current",
|
|
userAgent: "EdgeEver/1.4.0",
|
|
label: "手机",
|
|
ipAddress: "203.0.113.11",
|
|
ipCountry: "CN",
|
|
ipRegion: "Guangdong",
|
|
isCurrent: true,
|
|
createdAt: "2026-07-18T00:00:00.000Z",
|
|
lastSeenAt: "2026-07-22T04:00:00.000Z",
|
|
expiresAt: "2027-07-18T00:00:00.000Z",
|
|
},
|
|
]);
|
|
});
|
|
});
|