@kombo-api/sdk 0.2.0 → 0.2.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm/funcs/generalSendPassthroughRequest.d.ts +3 -0
- package/esm/funcs/generalSendPassthroughRequest.d.ts.map +1 -1
- package/esm/funcs/generalSendPassthroughRequest.js +3 -0
- package/esm/funcs/generalSendPassthroughRequest.js.map +1 -1
- package/esm/lib/config.d.ts +3 -3
- package/esm/lib/config.js +3 -3
- package/esm/models/deletehrisabsencesabsenceidpositiveresponse.d.ts.map +1 -1
- package/esm/models/deletehrisabsencesabsenceidpositiveresponse.js +2 -6
- package/esm/models/deletehrisabsencesabsenceidpositiveresponse.js.map +1 -1
- package/esm/models/getatsjobspositiveresponse.d.ts.map +1 -1
- package/esm/models/getatsjobspositiveresponse.js +6 -26
- package/esm/models/getatsjobspositiveresponse.js.map +1 -1
- package/esm/models/gethrisabsencespositiveresponse.d.ts.map +1 -1
- package/esm/models/gethrisabsencespositiveresponse.js +2 -6
- package/esm/models/gethrisabsencespositiveresponse.js.map +1 -1
- package/esm/models/gethrisemployeespositiveresponse.d.ts +4 -0
- package/esm/models/gethrisemployeespositiveresponse.d.ts.map +1 -1
- package/esm/models/gethrisemployeespositiveresponse.js +11 -46
- package/esm/models/gethrisemployeespositiveresponse.js.map +1 -1
- package/esm/models/gethrisemploymentspositiveresponse.d.ts.map +1 -1
- package/esm/models/gethrisemploymentspositiveresponse.js +4 -16
- package/esm/models/gethrisemploymentspositiveresponse.js.map +1 -1
- package/esm/models/postconnectcreatelinkrequestbody.d.ts +2 -0
- package/esm/models/postconnectcreatelinkrequestbody.d.ts.map +1 -1
- package/esm/models/postconnectcreatelinkrequestbody.js +2 -0
- package/esm/models/postconnectcreatelinkrequestbody.js.map +1 -1
- package/esm/models/posthrisabsencespositiveresponse.d.ts.map +1 -1
- package/esm/models/posthrisabsencespositiveresponse.js +2 -6
- package/esm/models/posthrisabsencespositiveresponse.js.map +1 -1
- package/esm/models/posthrisemployeesformpositiveresponse.d.ts +8 -0
- package/esm/models/posthrisemployeesformpositiveresponse.d.ts.map +1 -1
- package/esm/models/posthrisemployeesformpositiveresponse.js +2 -0
- package/esm/models/posthrisemployeesformpositiveresponse.js.map +1 -1
- package/esm/sdk/general.d.ts +3 -0
- package/esm/sdk/general.d.ts.map +1 -1
- package/esm/sdk/general.js +3 -0
- package/esm/sdk/general.js.map +1 -1
- package/esm/types/enums.d.ts +10 -6
- package/esm/types/enums.d.ts.map +1 -1
- package/esm/types/enums.js +38 -1
- package/esm/types/enums.js.map +1 -1
- package/esm/types/index.d.ts +0 -1
- package/esm/types/index.d.ts.map +1 -1
- package/esm/types/index.js +0 -1
- package/esm/types/index.js.map +1 -1
- package/examples/package-lock.json +4 -2
- package/jsr.json +1 -1
- package/package.json +6 -3
- package/src/funcs/generalSendPassthroughRequest.ts +3 -0
- package/src/lib/config.ts +3 -3
- package/src/models/deletehrisabsencesabsenceidpositiveresponse.ts +5 -6
- package/src/models/getatsjobspositiveresponse.ts +7 -26
- package/src/models/gethrisabsencespositiveresponse.ts +3 -6
- package/src/models/gethrisemployeespositiveresponse.ts +16 -46
- package/src/models/gethrisemploymentspositiveresponse.ts +5 -16
- package/src/models/postconnectcreatelinkrequestbody.ts +2 -0
- package/src/models/posthrisabsencespositiveresponse.ts +3 -6
- package/src/models/posthrisemployeesformpositiveresponse.ts +10 -0
- package/src/sdk/general.ts +3 -0
- package/src/types/enums.ts +55 -6
- package/src/types/index.ts +0 -1
- package/tests/basic-behavior.spec.ts +162 -0
- package/tests/error-handling.spec.ts +604 -0
- package/tests/helpers/test-context.ts +147 -0
- package/tests/job-board.spec.ts +32 -0
- package/vitest.config.ts +8 -0
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
import { describe, beforeAll, afterAll } from "vitest";
|
|
2
|
+
import nock from "nock";
|
|
3
|
+
import { Kombo } from "../../src/index";
|
|
4
|
+
|
|
5
|
+
export interface CapturedRequest {
|
|
6
|
+
method: string;
|
|
7
|
+
path: string;
|
|
8
|
+
headers: Record<string, string>;
|
|
9
|
+
body?: unknown;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
export interface TestContextOptions {
|
|
13
|
+
apiKey?: string;
|
|
14
|
+
integrationId?: string | undefined;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
export class TestContext {
|
|
18
|
+
readonly kombo: Kombo;
|
|
19
|
+
#capturedRequests: CapturedRequest[] = [];
|
|
20
|
+
|
|
21
|
+
constructor(options?: TestContextOptions) {
|
|
22
|
+
const apiKey = options?.apiKey ?? "test-api-key";
|
|
23
|
+
const integrationId =
|
|
24
|
+
options && "integrationId" in options
|
|
25
|
+
? options.integrationId
|
|
26
|
+
: "test-integration-id";
|
|
27
|
+
|
|
28
|
+
this.kombo = new Kombo({
|
|
29
|
+
api_key: apiKey,
|
|
30
|
+
integration_id: integrationId,
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
mockEndpoint(config: {
|
|
35
|
+
method: "GET" | "POST" | "PUT" | "DELETE" | "PATCH";
|
|
36
|
+
path: string;
|
|
37
|
+
response: {
|
|
38
|
+
body: unknown;
|
|
39
|
+
statusCode?: number;
|
|
40
|
+
headers?: Record<string, string>;
|
|
41
|
+
};
|
|
42
|
+
delayResponseMs?: number;
|
|
43
|
+
}): void {
|
|
44
|
+
const { method, path, response } = config;
|
|
45
|
+
const statusCode = response.statusCode ?? 200;
|
|
46
|
+
|
|
47
|
+
const nockInstance = nock("https://api.kombo.dev");
|
|
48
|
+
|
|
49
|
+
// Set up the appropriate HTTP method
|
|
50
|
+
let interceptor;
|
|
51
|
+
switch (method) {
|
|
52
|
+
case "GET":
|
|
53
|
+
interceptor = nockInstance.get(path);
|
|
54
|
+
break;
|
|
55
|
+
case "POST":
|
|
56
|
+
interceptor = nockInstance.post(path);
|
|
57
|
+
break;
|
|
58
|
+
case "PUT":
|
|
59
|
+
interceptor = nockInstance.put(path);
|
|
60
|
+
break;
|
|
61
|
+
case "DELETE":
|
|
62
|
+
interceptor = nockInstance.delete(path);
|
|
63
|
+
break;
|
|
64
|
+
case "PATCH":
|
|
65
|
+
interceptor = nockInstance.patch(path);
|
|
66
|
+
break;
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
// Accept any query parameters for GET requests
|
|
70
|
+
if (method === "GET") {
|
|
71
|
+
interceptor = interceptor.query(true);
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
// Add connection delay if specified
|
|
75
|
+
if (config.delayResponseMs !== undefined) {
|
|
76
|
+
interceptor = interceptor.delay(config.delayResponseMs);
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
// Set up the reply handler to capture request details
|
|
80
|
+
const capturedRequests = this.#capturedRequests;
|
|
81
|
+
interceptor.reply(function (_uri: string, requestBody: unknown) {
|
|
82
|
+
const req = (this as any).req;
|
|
83
|
+
|
|
84
|
+
const captured: CapturedRequest = {
|
|
85
|
+
method: req.method || method,
|
|
86
|
+
path: req.path || "",
|
|
87
|
+
headers: req.headers as Record<string, string>,
|
|
88
|
+
};
|
|
89
|
+
|
|
90
|
+
// Capture body for non-GET requests
|
|
91
|
+
if (method !== "GET" && requestBody) {
|
|
92
|
+
captured.body = requestBody;
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
capturedRequests.push(captured);
|
|
96
|
+
|
|
97
|
+
// Set Content-Type header for JSON responses (unless overridden)
|
|
98
|
+
const headers: Record<string, string> = {};
|
|
99
|
+
if (
|
|
100
|
+
typeof response.body === "object" &&
|
|
101
|
+
!response.headers?.["Content-Type"]
|
|
102
|
+
) {
|
|
103
|
+
headers["Content-Type"] = "application/json";
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
// Merge any provided headers
|
|
107
|
+
if (response.headers) {
|
|
108
|
+
Object.assign(headers, response.headers);
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
return [statusCode, response.body, headers];
|
|
112
|
+
});
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
getRequests(): CapturedRequest[] {
|
|
116
|
+
return [...this.#capturedRequests];
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
getLastRequest(): CapturedRequest {
|
|
120
|
+
const request = this.#capturedRequests[this.#capturedRequests.length - 1];
|
|
121
|
+
if (!request) {
|
|
122
|
+
throw new Error("No requests captured!");
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
return request;
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
clear(): void {
|
|
129
|
+
this.#capturedRequests.length = 0;
|
|
130
|
+
nock.cleanAll();
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
export function describeSdkSuite(name: string, fn: () => void) {
|
|
135
|
+
describe(name, () => {
|
|
136
|
+
beforeAll(() => {
|
|
137
|
+
nock.disableNetConnect();
|
|
138
|
+
});
|
|
139
|
+
|
|
140
|
+
afterAll(() => {
|
|
141
|
+
nock.cleanAll();
|
|
142
|
+
nock.enableNetConnect();
|
|
143
|
+
});
|
|
144
|
+
|
|
145
|
+
fn();
|
|
146
|
+
});
|
|
147
|
+
}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { it, expect } from "vitest";
|
|
2
|
+
import { TestContext, describeSdkSuite } from "./helpers/test-context";
|
|
3
|
+
|
|
4
|
+
describeSdkSuite("Kombo ATS Jobs API", () => {
|
|
5
|
+
it("should make correct HTTP request for getJobs", async () => {
|
|
6
|
+
const ctx = new TestContext();
|
|
7
|
+
|
|
8
|
+
// Mock the API endpoint
|
|
9
|
+
ctx.mockEndpoint({
|
|
10
|
+
method: "GET",
|
|
11
|
+
path: "/v1/ats/jobs",
|
|
12
|
+
response: {
|
|
13
|
+
body: {
|
|
14
|
+
status: "success",
|
|
15
|
+
data: {
|
|
16
|
+
results: [],
|
|
17
|
+
next: null,
|
|
18
|
+
},
|
|
19
|
+
},
|
|
20
|
+
},
|
|
21
|
+
});
|
|
22
|
+
|
|
23
|
+
// Make the API call
|
|
24
|
+
const _jobs = await ctx.kombo.ats.getJobs({});
|
|
25
|
+
|
|
26
|
+
// Verify and snapshot the request details
|
|
27
|
+
const request = ctx.getLastRequest();
|
|
28
|
+
expect(request.path).toMatchInlineSnapshot(
|
|
29
|
+
`"/v1/ats/jobs?include_deleted=false&page_size=100"`
|
|
30
|
+
);
|
|
31
|
+
});
|
|
32
|
+
});
|