feat: add timezone-aware TOTP time travel
This commit is contained in:
@@ -1,4 +1,10 @@
|
||||
import { render, screen } from "@testing-library/react";
|
||||
import {
|
||||
fireEvent,
|
||||
render,
|
||||
screen,
|
||||
waitFor,
|
||||
within,
|
||||
} from "@testing-library/react";
|
||||
import userEvent from "@testing-library/user-event";
|
||||
import { describe, expect, it } from "vitest";
|
||||
import { Workbench } from "../../src/components/Workbench";
|
||||
@@ -38,4 +44,46 @@ describe("authentication workbench", () => {
|
||||
screen.getByRole("button", { name: "Create test credential" }),
|
||||
).toBeDisabled();
|
||||
});
|
||||
|
||||
it("generates a TOTP at an absolute wall-clock time in an explicit timezone", async () => {
|
||||
const user = userEvent.setup();
|
||||
render(<Workbench />);
|
||||
|
||||
fireEvent.change(screen.getByLabelText("Base32 secret"), {
|
||||
target: { value: "GEZDGNBVGY3TQOJQGEZDGNBVGY3TQOJQ" },
|
||||
});
|
||||
fireEvent.change(screen.getByLabelText("Account"), {
|
||||
target: { value: "rfc-vector" },
|
||||
});
|
||||
await user.click(screen.getByRole("button", { name: "Show secret" }));
|
||||
await waitFor(() =>
|
||||
expect(
|
||||
(screen.getByLabelText("Provisioning URI") as HTMLTextAreaElement)
|
||||
.value,
|
||||
).toContain("secret=GEZDGNBVGY3TQOJQGEZDGNBVGY3TQOJQ"),
|
||||
);
|
||||
await user.selectOptions(screen.getByLabelText("Digits"), "8");
|
||||
await user.click(screen.getByRole("button", { name: "Point in time" }));
|
||||
fireEvent.change(screen.getByLabelText("Local date and time"), {
|
||||
target: { value: "1970-01-01T00:00:59" },
|
||||
});
|
||||
fireEvent.change(screen.getByLabelText("IANA timezone"), {
|
||||
target: { value: "UTC" },
|
||||
});
|
||||
|
||||
expect(screen.getByLabelText("Local date and time")).toHaveValue(
|
||||
"1970-01-01T00:00:59.000",
|
||||
);
|
||||
expect(screen.getByLabelText("IANA timezone")).toHaveValue("UTC");
|
||||
expect(screen.queryByRole("alert")).not.toBeInTheDocument();
|
||||
expect(screen.getByText("1970-01-01T00:00:59.000Z")).toBeInTheDocument();
|
||||
expect(
|
||||
within(screen.getByText("TOTP counter").parentElement!).getByText("1"),
|
||||
).toBeInTheDocument();
|
||||
await waitFor(() =>
|
||||
expect(document.querySelector(".code-display")).toHaveTextContent(
|
||||
"942 870 82",
|
||||
),
|
||||
);
|
||||
});
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user