Update Prisma and harden tests
This commit is contained in:
parent
a2f9d4bd1a
commit
d8eb38fe52
17 changed files with 171 additions and 119 deletions
|
|
@ -185,7 +185,7 @@ describe("convex.machines.listTicketsHistory", () => {
|
|||
})
|
||||
|
||||
expect(result.page).toHaveLength(1)
|
||||
expect(result.page[0].id).toBe("ticket_match")
|
||||
expect(result.page[0].id).toBe("ticket_match" as Id<"tickets">)
|
||||
expect(result.isDone).toBe(true)
|
||||
})
|
||||
})
|
||||
|
|
|
|||
|
|
@ -177,7 +177,7 @@ describe("convex.reports.backlogOverview", () => {
|
|||
})
|
||||
|
||||
expect(result.rangeDays).toBe(7)
|
||||
expect(result.statusCounts).toEqual({
|
||||
expect(result.statusCounts).toMatchObject({
|
||||
PENDING: 1,
|
||||
PAUSED: 1,
|
||||
RESOLVED: 1,
|
||||
|
|
|
|||
|
|
@ -173,7 +173,7 @@ describe("convex.reports.csatOverview", () => {
|
|||
expect(result.averageScore).toBe(4)
|
||||
expect(result.distribution.find((entry) => entry.score === 5)?.total).toBe(1)
|
||||
expect(result.distribution.find((entry) => entry.score === 3)?.total).toBe(1)
|
||||
expect(result.recent[0]?.ticketId).toBe("ticket_a")
|
||||
expect(result.recent[0]?.ticketId).toBe("ticket_a" as Id<"tickets">)
|
||||
})
|
||||
})
|
||||
|
||||
|
|
|
|||
|
|
@ -10,14 +10,14 @@ process.env.BETTER_AUTH_URL ??= process.env.NEXT_PUBLIC_APP_URL
|
|||
const OriginalDate = Date
|
||||
let fixedTimestamp: number | null = null
|
||||
|
||||
type MutableVi = typeof vi & {
|
||||
mocked?: <T>(item: T) => T
|
||||
setSystemTime?: (value: number | Date) => void
|
||||
useFakeTimers?: (...args: Array<unknown>) => void
|
||||
useRealTimers?: (...args: Array<unknown>) => void
|
||||
type ExtendedVi = typeof vi & {
|
||||
mocked?: typeof vi.mocked
|
||||
setSystemTime?: typeof vi.setSystemTime
|
||||
useFakeTimers?: typeof vi.useFakeTimers
|
||||
useRealTimers?: typeof vi.useRealTimers
|
||||
}
|
||||
|
||||
const viExtended = vi as MutableVi
|
||||
const viExtended = vi as ExtendedVi
|
||||
|
||||
if (typeof window === "undefined" || typeof document === "undefined") {
|
||||
const dom = new JSDOM("<!DOCTYPE html><html><body></body></html>", {
|
||||
|
|
@ -57,40 +57,48 @@ const applyFixedDate = () => {
|
|||
}
|
||||
|
||||
if (!viExtended.mocked) {
|
||||
viExtended.mocked = <T>(item: T) => item
|
||||
viExtended.mocked = ((item: unknown) => item) as typeof vi.mocked
|
||||
}
|
||||
|
||||
if (!viExtended.setSystemTime) {
|
||||
viExtended.setSystemTime = (value: number | Date) => {
|
||||
fixedTimestamp = typeof value === "number" ? value : value.getTime()
|
||||
viExtended.setSystemTime = ((value: string | number | Date) => {
|
||||
if (typeof value === "string") {
|
||||
const parsed = Date.parse(value)
|
||||
fixedTimestamp = Number.isFinite(parsed) ? parsed : Date.now()
|
||||
} else {
|
||||
fixedTimestamp = value instanceof Date ? value.getTime() : value
|
||||
}
|
||||
applyFixedDate()
|
||||
}
|
||||
return viExtended
|
||||
}) as typeof vi.setSystemTime
|
||||
}
|
||||
|
||||
if (!viExtended.useFakeTimers) {
|
||||
viExtended.useFakeTimers = () => {
|
||||
// Bun's fake timers are not required for our current tests. This is a noop
|
||||
// placeholder to keep compatibility with the previous Vitest API.
|
||||
}
|
||||
viExtended.useFakeTimers = ((..._args: Parameters<typeof vi.useFakeTimers>) => {
|
||||
return viExtended
|
||||
}) as typeof vi.useFakeTimers
|
||||
} else {
|
||||
const originalUseFakeTimers = viExtended.useFakeTimers.bind(vi)
|
||||
viExtended.useFakeTimers = (...args: Array<unknown>) => {
|
||||
originalUseFakeTimers(...args)
|
||||
}
|
||||
viExtended.useFakeTimers = ((...args: Parameters<typeof vi.useFakeTimers>) => {
|
||||
const result = originalUseFakeTimers(...args)
|
||||
return result ?? viExtended
|
||||
}) as typeof vi.useFakeTimers
|
||||
}
|
||||
|
||||
if (!viExtended.useRealTimers) {
|
||||
viExtended.useRealTimers = () => {
|
||||
viExtended.useRealTimers = ((..._args: Parameters<typeof vi.useRealTimers>) => {
|
||||
fixedTimestamp = null
|
||||
applyFixedDate()
|
||||
}
|
||||
return viExtended
|
||||
}) as typeof vi.useRealTimers
|
||||
} else {
|
||||
const originalUseRealTimers = viExtended.useRealTimers.bind(vi)
|
||||
viExtended.useRealTimers = (...args: Array<unknown>) => {
|
||||
originalUseRealTimers(...args)
|
||||
viExtended.useRealTimers = ((...args: Parameters<typeof vi.useRealTimers>) => {
|
||||
const result = originalUseRealTimers(...args)
|
||||
fixedTimestamp = null
|
||||
applyFixedDate()
|
||||
}
|
||||
return result ?? viExtended
|
||||
}) as typeof vi.useRealTimers
|
||||
}
|
||||
|
||||
applyFixedDate()
|
||||
|
|
|
|||
|
|
@ -1,10 +1,10 @@
|
|||
import { describe, expect, it, vi } from "bun:test"
|
||||
|
||||
import { buildCommentAuthorSummary } from "../convex/tickets"
|
||||
import type { Doc, Id } from "../convex/_generated/dataModel"
|
||||
import type { Doc, Id, TableNames } from "../convex/_generated/dataModel"
|
||||
|
||||
function makeId<TableName extends string>(value: string) {
|
||||
return value as unknown as Id<TableName>
|
||||
function makeId<TableName extends TableNames>(value: string) {
|
||||
return value as Id<TableName>
|
||||
}
|
||||
|
||||
function makeComment(overrides: Partial<Doc<"ticketComments">> = {}) {
|
||||
|
|
|
|||
|
|
@ -2,6 +2,7 @@ import { describe, expect, it } from "bun:test"
|
|||
|
||||
import { normalizeCustomFieldInputs } from "../src/lib/ticket-form-helpers"
|
||||
import type { TicketFormFieldDefinition } from "../src/lib/ticket-form-types"
|
||||
import type { Id } from "../convex/_generated/dataModel"
|
||||
|
||||
describe("ticket form helpers", () => {
|
||||
const baseFields: TicketFormFieldDefinition[] = [
|
||||
|
|
@ -56,9 +57,9 @@ describe("ticket form helpers", () => {
|
|||
expect(result.ok).toBe(true)
|
||||
if (result.ok) {
|
||||
expect(result.payload).toEqual([
|
||||
{ fieldId: "field-nome", value: "Ana Silva" },
|
||||
{ fieldId: "field-numero", value: 123 },
|
||||
{ fieldId: "field-select", value: "nova" },
|
||||
{ fieldId: "field-nome" as Id<"ticketFields">, value: "Ana Silva" },
|
||||
{ fieldId: "field-numero" as Id<"ticketFields">, value: 123 },
|
||||
{ fieldId: "field-select" as Id<"ticketFields">, value: "nova" },
|
||||
])
|
||||
}
|
||||
})
|
||||
|
|
|
|||
|
|
@ -41,29 +41,28 @@ function buildTicket(overrides: Partial<TicketDoc> = {}): MockedTicket {
|
|||
tenantId: "tenant-1",
|
||||
reference: 41_000,
|
||||
subject: "Computador não liga",
|
||||
summary: null,
|
||||
summary: undefined,
|
||||
status: "AWAITING_ATTENDANCE",
|
||||
priority: "MEDIUM",
|
||||
channel: "EMAIL",
|
||||
queueId: null,
|
||||
queueSnapshot: null,
|
||||
queueId: undefined,
|
||||
requesterId: "user_requester" as Id<"users">,
|
||||
requesterSnapshot: { name: "Cliente", email: "cliente@example.com" },
|
||||
assigneeId: "user_agent" as Id<"users">,
|
||||
assigneeSnapshot: { name: "Agente", email: "agente@example.com" },
|
||||
companyId: null,
|
||||
companySnapshot: null,
|
||||
machineId: null,
|
||||
machineSnapshot: null,
|
||||
slaPolicyId: null,
|
||||
dueAt: null,
|
||||
firstResponseAt: null,
|
||||
resolvedAt: null,
|
||||
companyId: undefined,
|
||||
companySnapshot: undefined,
|
||||
machineId: undefined,
|
||||
machineSnapshot: undefined,
|
||||
slaPolicyId: undefined,
|
||||
dueAt: undefined,
|
||||
firstResponseAt: undefined,
|
||||
resolvedAt: undefined,
|
||||
createdAt: NOW - 50_000,
|
||||
updatedAt: NOW - 1_000,
|
||||
tags: [],
|
||||
customFields: [],
|
||||
activeSessionId: null,
|
||||
activeSessionId: undefined,
|
||||
totalWorkedMs: 0,
|
||||
internalWorkedMs: 0,
|
||||
externalWorkedMs: 0,
|
||||
|
|
@ -74,15 +73,12 @@ function buildTicket(overrides: Partial<TicketDoc> = {}): MockedTicket {
|
|||
csatRatedBy: undefined,
|
||||
csatAssigneeId: undefined,
|
||||
csatAssigneeSnapshot: undefined,
|
||||
workSummary: undefined,
|
||||
reopenDeadline: undefined,
|
||||
reopenedAt: undefined,
|
||||
formTemplate: undefined,
|
||||
chatEnabled: true,
|
||||
relatedTicketIds: undefined,
|
||||
resolvedWithTicketId: undefined,
|
||||
reopenWindowDays: undefined,
|
||||
reopenedBy: undefined,
|
||||
}
|
||||
return { ...(base as TicketDoc), ...overrides }
|
||||
}
|
||||
|
|
@ -149,8 +145,12 @@ describe("convex.tickets.resolveTicketHandler", () => {
|
|||
mockedRequireStaff.mockResolvedValue({
|
||||
user: {
|
||||
_id: "user_agent" as Id<"users">,
|
||||
_creationTime: NOW - 5_000,
|
||||
tenantId: "tenant-1",
|
||||
name: "Agente",
|
||||
email: "agente@example.com",
|
||||
role: "ADMIN",
|
||||
teams: [],
|
||||
},
|
||||
role: "ADMIN",
|
||||
})
|
||||
|
|
@ -214,8 +214,13 @@ describe("convex.tickets.reopenTicketHandler", () => {
|
|||
mockedRequireUser.mockResolvedValue({
|
||||
user: {
|
||||
_id: ticket.requesterId,
|
||||
_creationTime: NOW - 20_000,
|
||||
tenantId: "tenant-1",
|
||||
email: "cliente@example.com",
|
||||
companyId: null,
|
||||
name: "Cliente",
|
||||
role: "COLLABORATOR",
|
||||
companyId: undefined,
|
||||
teams: [],
|
||||
},
|
||||
role: "COLLABORATOR",
|
||||
})
|
||||
|
|
@ -247,8 +252,13 @@ describe("convex.tickets.reopenTicketHandler", () => {
|
|||
mockedRequireUser.mockResolvedValue({
|
||||
user: {
|
||||
_id: ticket.requesterId,
|
||||
_creationTime: NOW - 25_000,
|
||||
tenantId: "tenant-1",
|
||||
email: "cliente@example.com",
|
||||
companyId: null,
|
||||
name: "Cliente",
|
||||
role: "COLLABORATOR",
|
||||
companyId: undefined,
|
||||
teams: [],
|
||||
},
|
||||
role: "COLLABORATOR",
|
||||
})
|
||||
|
|
|
|||
|
|
@ -23,29 +23,28 @@ function makeTicket(overrides: Partial<Doc<"tickets">> = {}): Doc<"tickets"> {
|
|||
tenantId: "tenant-1",
|
||||
reference: 42_100,
|
||||
subject: "Computador não liga",
|
||||
summary: null,
|
||||
summary: undefined,
|
||||
status: "RESOLVED",
|
||||
priority: "MEDIUM",
|
||||
channel: "EMAIL",
|
||||
queueId: null,
|
||||
queueSnapshot: null,
|
||||
queueId: undefined,
|
||||
requesterId: "user_requester" as Id<"users">,
|
||||
requesterSnapshot: { name: "Cliente", email: "cliente@example.com" },
|
||||
assigneeId: null,
|
||||
assigneeSnapshot: null,
|
||||
companyId: null,
|
||||
companySnapshot: null,
|
||||
machineId: null,
|
||||
machineSnapshot: null,
|
||||
slaPolicyId: null,
|
||||
dueAt: null,
|
||||
firstResponseAt: null,
|
||||
assigneeId: undefined,
|
||||
assigneeSnapshot: undefined,
|
||||
companyId: undefined,
|
||||
companySnapshot: undefined,
|
||||
machineId: undefined,
|
||||
machineSnapshot: undefined,
|
||||
slaPolicyId: undefined,
|
||||
dueAt: undefined,
|
||||
firstResponseAt: undefined,
|
||||
resolvedAt: FIXED_NOW - 1000,
|
||||
createdAt: FIXED_NOW - 20_000,
|
||||
updatedAt: FIXED_NOW - 100,
|
||||
tags: [],
|
||||
customFields: [],
|
||||
activeSessionId: null,
|
||||
activeSessionId: undefined,
|
||||
totalWorkedMs: 0,
|
||||
internalWorkedMs: 0,
|
||||
externalWorkedMs: 0,
|
||||
|
|
@ -103,8 +102,13 @@ describe("convex.tickets.submitCsat", () => {
|
|||
mockedRequireUser.mockResolvedValue({
|
||||
user: {
|
||||
_id: "user_requester" as Id<"users">,
|
||||
_creationTime: FIXED_NOW - 30_000,
|
||||
tenantId: "tenant-1",
|
||||
name: "Cliente",
|
||||
email: "cliente@example.com",
|
||||
companyId: null,
|
||||
role: "COLLABORATOR",
|
||||
companyId: undefined,
|
||||
teams: [],
|
||||
},
|
||||
role: "COLLABORATOR",
|
||||
})
|
||||
|
|
@ -145,8 +149,13 @@ describe("convex.tickets.submitCsat", () => {
|
|||
mockedRequireUser.mockResolvedValue({
|
||||
user: {
|
||||
_id: "user_requester" as Id<"users">,
|
||||
_creationTime: FIXED_NOW - 30_000,
|
||||
tenantId: "tenant-1",
|
||||
name: "Cliente",
|
||||
email: "cliente@example.com",
|
||||
companyId: null,
|
||||
role: "COLLABORATOR",
|
||||
companyId: undefined,
|
||||
teams: [],
|
||||
},
|
||||
role: "COLLABORATOR",
|
||||
})
|
||||
|
|
@ -174,8 +183,13 @@ describe("convex.tickets.submitCsat", () => {
|
|||
mockedRequireUser.mockResolvedValue({
|
||||
user: {
|
||||
_id: "user_requester" as Id<"users">,
|
||||
_creationTime: FIXED_NOW - 30_000,
|
||||
tenantId: "tenant-1",
|
||||
name: "Cliente",
|
||||
email: "cliente@example.com",
|
||||
companyId: null,
|
||||
role: "COLLABORATOR",
|
||||
companyId: undefined,
|
||||
teams: [],
|
||||
},
|
||||
role: "COLLABORATOR",
|
||||
})
|
||||
|
|
@ -199,8 +213,13 @@ describe("convex.tickets.submitCsat", () => {
|
|||
mockedRequireUser.mockResolvedValue({
|
||||
user: {
|
||||
_id: "user_admin" as Id<"users">,
|
||||
_creationTime: FIXED_NOW - 40_000,
|
||||
tenantId: "tenant-1",
|
||||
name: "Administrador",
|
||||
email: "admin@example.com",
|
||||
companyId: null,
|
||||
role: "ADMIN",
|
||||
companyId: undefined,
|
||||
teams: [],
|
||||
},
|
||||
role: "ADMIN",
|
||||
})
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue