(vi: typeof vitestVi)
| 108 | |
| 109 | export const createJobTester = |
| 110 | (vi: typeof vitestVi) => |
| 111 | async < |
| 112 | TTrigger extends Trigger<EventSpecification<any>>, |
| 113 | TIntegrations extends Record<string, TriggerIntegration> = {}, |
| 114 | TTasks extends Record<string, any> = {}, |
| 115 | >( |
| 116 | job: Job<TTrigger, TIntegrations>, |
| 117 | opts: { |
| 118 | payload?: TriggerEventType<TTrigger>; |
| 119 | tasks?: TTasks; |
| 120 | } = {} |
| 121 | ): Promise< |
| 122 | { |
| 123 | output: any; |
| 124 | status: string; |
| 125 | tasks: Record<keyof TTasks, Mock> & Record<string, Mock>; |
| 126 | } & Record<string, any> |
| 127 | > => { |
| 128 | const mockSendEvent = (client: TriggerClient) => |
| 129 | vi |
| 130 | .spyOn(client, "sendEvent") |
| 131 | .mockImplementation( |
| 132 | async (unparsedEvent: SendEvent, unparsedOptions: SendEventOptions = {}) => { |
| 133 | const body = SendEventBodySchema.parse({ |
| 134 | event: unparsedEvent, |
| 135 | options: unparsedOptions, |
| 136 | }); |
| 137 | const { event, options } = body; |
| 138 | |
| 139 | const timestamp = new Date(); |
| 140 | const deliverAt = |
| 141 | options?.deliverAt || |
| 142 | (options?.deliverAfter |
| 143 | ? new Date(Date.now() + options.deliverAfter * 1000) |
| 144 | : undefined); |
| 145 | |
| 146 | const eventLog = { |
| 147 | id: event.id, |
| 148 | name: event.name, |
| 149 | payload: event.payload ?? {}, |
| 150 | context: event.context, |
| 151 | timestamp, |
| 152 | deliverAt, |
| 153 | deliveredAt: !deliverAt ? timestamp : undefined, |
| 154 | cancelledAt: undefined, |
| 155 | }; |
| 156 | |
| 157 | return eventLog; |
| 158 | } |
| 159 | ); |
| 160 | |
| 161 | const { client, trigger } = job; |
| 162 | |
| 163 | mockSendEvent(client!); |
| 164 | const eventLog = await client!.sendEvent({ |
| 165 | name: typeof trigger.event.name === "string" ? trigger.event.name : trigger.event.name[0], |
| 166 | payload: opts.payload, |
| 167 | }); |
no test coverage detected
searching dependent graphs…