59 lines
2.1 KiB
TypeScript
59 lines
2.1 KiB
TypeScript
import { describe, expect, it } from "vitest"
|
|
import { deriveServerOffset, reconcileLocalSessionStart, toServerTimestamp } from "@/components/tickets/ticket-timer.utils"
|
|
|
|
describe("reconcileLocalSessionStart", () => {
|
|
it("usa o timestamp remoto quando não há marcador local", () => {
|
|
const result = reconcileLocalSessionStart({ remoteStart: 5000, localStart: 0, origin: "unknown" })
|
|
expect(result).toEqual({ localStart: 5000, origin: "remote" })
|
|
})
|
|
|
|
it("mantém o fallback local quando o remoto é menor e a sessão acabou de começar", () => {
|
|
const result = reconcileLocalSessionStart({
|
|
remoteStart: 1_000,
|
|
localStart: 2_000,
|
|
origin: "fresh-local",
|
|
})
|
|
expect(result).toEqual({ localStart: 2_000, origin: "fresh-local" })
|
|
})
|
|
|
|
it("substitui o fallback local quando já havia sessão em andamento", () => {
|
|
const result = reconcileLocalSessionStart({
|
|
remoteStart: 1_000,
|
|
localStart: 2_000,
|
|
origin: "already-running-fallback",
|
|
})
|
|
expect(result).toEqual({ localStart: 1_000, origin: "remote" })
|
|
})
|
|
|
|
it("sincroniza com o servidor quando o remoto é mais recente", () => {
|
|
const result = reconcileLocalSessionStart({
|
|
remoteStart: 4_000,
|
|
localStart: 2_000,
|
|
origin: "fresh-local",
|
|
})
|
|
expect(result).toEqual({ localStart: 4_000, origin: "remote" })
|
|
})
|
|
})
|
|
|
|
describe("deriveServerOffset", () => {
|
|
it("calcula deslocamento simples entre relógios", () => {
|
|
const offset = deriveServerOffset({ currentOffset: 0, localNow: 1_700_000, serverNow: 1_699_000 })
|
|
expect(offset).toBe(1_000)
|
|
})
|
|
|
|
it("ignora serverNow inválido", () => {
|
|
const offset = deriveServerOffset({ currentOffset: 500, localNow: 2_000_000, serverNow: Number.NaN })
|
|
expect(offset).toBe(500)
|
|
})
|
|
|
|
it("aceita saltos grandes quando necessário", () => {
|
|
const offset = deriveServerOffset({ currentOffset: 500, localNow: 2_000_000, serverNow: 1_000_000 })
|
|
expect(offset).toBe(1_000_000)
|
|
})
|
|
})
|
|
|
|
describe("toServerTimestamp", () => {
|
|
it("aplica offset corretamente", () => {
|
|
expect(toServerTimestamp(1_000_000, 1_500)).toBe(998_500)
|
|
})
|
|
})
|