btrz-api-client 9.25.0 → 9.26.0

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/lib/client.js CHANGED
@@ -191,6 +191,10 @@ function createInventory({
191
191
  client,
192
192
  internalAuthTokenProvider
193
193
  }),
194
+ cloverTerminals: require("./endpoints/inventory/clover-terminals.js")({
195
+ client,
196
+ internalAuthTokenProvider
197
+ }),
194
198
  giftCertificateDefinitions: require("./endpoints/inventory/gift-certificate-definitions.js")({
195
199
  client,
196
200
  internalAuthTokenProvider
@@ -0,0 +1,181 @@
1
+ const {
2
+ authorizationHeaders
3
+ } = require("../endpoints_helpers.js");
4
+
5
+ /**
6
+ * Query params for GET /clover-terminals (btrz-api-inventory). See get-handler getSpec().
7
+ * @typedef {Object} CloverTerminalsQuery
8
+ * @property {number} [page] - The page number to retrieve
9
+ * @property {string} [stationId] - Filter terminals by station (location) ID
10
+ * @property {string} [serialNumber] - Filter terminals by serial number
11
+ */
12
+
13
+ /**
14
+ * Factory for clover-terminals API (btrz-api-inventory).
15
+ * @param {Object} deps
16
+ * @param {import("axios").AxiosInstance} deps.client
17
+ * @param {{ getToken: function(): string }} [deps.internalAuthTokenProvider]
18
+ * @returns {{ all: function, get: function, create: function, remove: function, update: function }}
19
+ */
20
+ function cloverTerminalFactory({
21
+ client,
22
+ internalAuthTokenProvider
23
+ }) {
24
+ /**
25
+ * GET /clover-terminals - list Clover terminals (paginated).
26
+ * @param {Object} opts
27
+ * @param {string} [opts.token] - API key
28
+ * @param {string} [opts.jwtToken] - JWT or internal auth symbol
29
+ * @param {CloverTerminalsQuery} [opts.query] - Query params (page, stationId, serialNumber)
30
+ * @param {Object} [opts.headers] - Optional headers
31
+ * @returns {Promise<import("axios").AxiosResponse<{ cloverTerminals: Array, next?: string, previous?: string, count: number }>>}
32
+ * @throws When response is 4xx/5xx (400 INVALID_PAGE, 401, 500)
33
+ */
34
+ function all({
35
+ token,
36
+ jwtToken,
37
+ query = {},
38
+ headers
39
+ }) {
40
+ return client.get("/clover-terminals", {
41
+ params: query,
42
+ headers: authorizationHeaders({
43
+ token,
44
+ jwtToken,
45
+ internalAuthTokenProvider,
46
+ headers
47
+ })
48
+ });
49
+ }
50
+
51
+ /**
52
+ * GET /clover-terminals/:cloverTerminalId - get a Clover terminal by id.
53
+ * @param {Object} opts
54
+ * @param {string} [opts.token] - API key
55
+ * @param {string} [opts.jwtToken] - JWT or internal auth symbol
56
+ * @param {string} opts.cloverTerminalId - Clover terminal id (24 hex characters)
57
+ * @param {Object} [opts.headers] - Optional headers
58
+ * @returns {Promise<import("axios").AxiosResponse<{ cloverTerminal: Object }>>}
59
+ * @throws When response is 4xx/5xx (400 INVALID_CLOVER_TERMINAL_ID, 401, 404 CLOVER_TERMINAL_NOT_FOUND, 500)
60
+ */
61
+ function get({
62
+ cloverTerminalId,
63
+ token,
64
+ jwtToken,
65
+ headers
66
+ }) {
67
+ return client.get(`/clover-terminals/${cloverTerminalId}`, {
68
+ headers: authorizationHeaders({
69
+ token,
70
+ jwtToken,
71
+ internalAuthTokenProvider,
72
+ headers
73
+ })
74
+ });
75
+ }
76
+
77
+ /**
78
+ * POST /clover-terminals - create Clover terminal.
79
+ * @param {Object} opts
80
+ * @param {string} [opts.token] - API key
81
+ * @param {string} [opts.jwtToken] - JWT or internal auth symbol
82
+ * @param {Object} opts.cloverTerminal - Clover terminal payload (name, serialNumber, stationId optional)
83
+ * @param {Object} [opts.headers] - Optional headers
84
+ * @returns {Promise<import("axios").AxiosResponse<{ cloverTerminal: Object }>>}
85
+ * @throws When response is 4xx/5xx (400 WRONG_DATA/INVALID_STATION_ID/STATION_NOT_FOUND, 401, 409 duplicate name/serial, 500)
86
+ */
87
+ function create({
88
+ jwtToken,
89
+ token,
90
+ cloverTerminal,
91
+ headers
92
+ }) {
93
+ return client({
94
+ url: "/clover-terminals",
95
+ method: "post",
96
+ headers: authorizationHeaders({
97
+ token,
98
+ jwtToken,
99
+ internalAuthTokenProvider,
100
+ headers
101
+ }),
102
+ data: {
103
+ cloverTerminal
104
+ }
105
+ });
106
+ }
107
+
108
+ /**
109
+ * DELETE /clover-terminals/:cloverTerminalId - remove Clover terminal.
110
+ * @param {Object} opts
111
+ * @param {string} [opts.token] - API key
112
+ * @param {string} [opts.jwtToken] - JWT or internal auth symbol
113
+ * @param {string} opts.cloverTerminalId - Clover terminal id (24 hex characters)
114
+ * @param {Object} [opts.headers] - Optional headers
115
+ * @returns {Promise<import("axios").AxiosResponse<{ cloverTerminalId: string }>>}
116
+ * @throws When response is 4xx/5xx (400 INVALID_CLOVER_TERMINAL_ID, 401, 404 CLOVER_TERMINAL_NOT_FOUND, 500)
117
+ */
118
+ function remove({
119
+ jwtToken,
120
+ cloverTerminalId,
121
+ token,
122
+ headers
123
+ }) {
124
+ return client({
125
+ url: `/clover-terminals/${cloverTerminalId}`,
126
+ method: "delete",
127
+ headers: authorizationHeaders({
128
+ token,
129
+ jwtToken,
130
+ internalAuthTokenProvider,
131
+ headers
132
+ })
133
+ });
134
+ }
135
+
136
+ /**
137
+ * PUT /clover-terminals/:cloverTerminalId - update Clover terminal.
138
+ * @param {Object} opts
139
+ * @param {string} [opts.token] - API key
140
+ * @param {string} [opts.jwtToken] - JWT or internal auth symbol
141
+ * @param {string} opts.cloverTerminalId - Clover terminal id (24 hex characters)
142
+ * @param {Object} opts.cloverTerminal - Clover terminal payload (name, serialNumber, stationId)
143
+ * @param {Object} [opts.headers] - Optional headers
144
+ * @returns {Promise<import("axios").AxiosResponse<{ cloverTerminal: Object }>>}
145
+ * @throws When response is 4xx/5xx (400, 401, 404 CLOVER_TERMINAL_NOT_FOUND, 409 duplicate name/serial, 500)
146
+ */
147
+ function update({
148
+ jwtToken,
149
+ token,
150
+ cloverTerminalId,
151
+ cloverTerminal,
152
+ headers
153
+ }) {
154
+ const _cloverTerminalId = cloverTerminalId || cloverTerminal._id;
155
+ return client({
156
+ url: `/clover-terminals/${_cloverTerminalId}`,
157
+ method: "put",
158
+ headers: authorizationHeaders({
159
+ token,
160
+ jwtToken,
161
+ internalAuthTokenProvider,
162
+ headers
163
+ }),
164
+ data: {
165
+ cloverTerminal: {
166
+ name: cloverTerminal.name,
167
+ serialNumber: cloverTerminal.serialNumber,
168
+ stationId: cloverTerminal.stationId
169
+ }
170
+ }
171
+ });
172
+ }
173
+ return {
174
+ all,
175
+ get,
176
+ create,
177
+ remove,
178
+ update
179
+ };
180
+ }
181
+ module.exports = cloverTerminalFactory;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "btrz-api-client",
3
- "version": "9.25.0",
3
+ "version": "9.26.0",
4
4
  "description": "Api client for Betterez endpoints",
5
5
  "main": "index.js",
6
6
  "scripts": {
package/src/client.js CHANGED
@@ -86,6 +86,7 @@ function createInventory({baseURL, headers, timeout, overrideFn, internalAuthTok
86
86
  garages: require("./endpoints/inventory/garages.js")({client, internalAuthTokenProvider}),
87
87
  banorteTerminals: require("./endpoints/inventory/banorte-terminals.js")({client, internalAuthTokenProvider}),
88
88
  getnetTerminals: require("./endpoints/inventory/getnet-terminals.js")({client, internalAuthTokenProvider}),
89
+ cloverTerminals: require("./endpoints/inventory/clover-terminals.js")({client, internalAuthTokenProvider}),
89
90
  giftCertificateDefinitions: require("./endpoints/inventory/gift-certificate-definitions.js")({client, internalAuthTokenProvider}),
90
91
  healthCheck: require("./endpoints/inventory/healthcheck.js")({client, internalAuthTokenProvider}),
91
92
  holidays: require("./endpoints/inventory/holidays.js")({client, internalAuthTokenProvider}),
@@ -0,0 +1,156 @@
1
+ const {
2
+ authorizationHeaders
3
+ } = require("../endpoints_helpers.js");
4
+
5
+ /**
6
+ * Query params for GET /clover-terminals (btrz-api-inventory). See get-handler getSpec().
7
+ * @typedef {Object} CloverTerminalsQuery
8
+ * @property {number} [page] - The page number to retrieve
9
+ * @property {string} [stationId] - Filter terminals by station (location) ID
10
+ * @property {string} [serialNumber] - Filter terminals by serial number
11
+ */
12
+
13
+ /**
14
+ * Factory for clover-terminals API (btrz-api-inventory).
15
+ * @param {Object} deps
16
+ * @param {import("axios").AxiosInstance} deps.client
17
+ * @param {{ getToken: function(): string }} [deps.internalAuthTokenProvider]
18
+ * @returns {{ all: function, get: function, create: function, remove: function, update: function }}
19
+ */
20
+ function cloverTerminalFactory({client, internalAuthTokenProvider}) {
21
+ /**
22
+ * GET /clover-terminals - list Clover terminals (paginated).
23
+ * @param {Object} opts
24
+ * @param {string} [opts.token] - API key
25
+ * @param {string} [opts.jwtToken] - JWT or internal auth symbol
26
+ * @param {CloverTerminalsQuery} [opts.query] - Query params (page, stationId, serialNumber)
27
+ * @param {Object} [opts.headers] - Optional headers
28
+ * @returns {Promise<import("axios").AxiosResponse<{ cloverTerminals: Array, next?: string, previous?: string, count: number }>>}
29
+ * @throws When response is 4xx/5xx (400 INVALID_PAGE, 401, 500)
30
+ */
31
+ function all({
32
+ token,
33
+ jwtToken,
34
+ query = {},
35
+ headers
36
+ }) {
37
+ return client.get("/clover-terminals", {
38
+ params: query,
39
+ headers: authorizationHeaders({token, jwtToken, internalAuthTokenProvider, headers})
40
+ });
41
+ }
42
+
43
+ /**
44
+ * GET /clover-terminals/:cloverTerminalId - get a Clover terminal by id.
45
+ * @param {Object} opts
46
+ * @param {string} [opts.token] - API key
47
+ * @param {string} [opts.jwtToken] - JWT or internal auth symbol
48
+ * @param {string} opts.cloverTerminalId - Clover terminal id (24 hex characters)
49
+ * @param {Object} [opts.headers] - Optional headers
50
+ * @returns {Promise<import("axios").AxiosResponse<{ cloverTerminal: Object }>>}
51
+ * @throws When response is 4xx/5xx (400 INVALID_CLOVER_TERMINAL_ID, 401, 404 CLOVER_TERMINAL_NOT_FOUND, 500)
52
+ */
53
+ function get({
54
+ cloverTerminalId,
55
+ token,
56
+ jwtToken,
57
+ headers
58
+ }) {
59
+ return client.get(`/clover-terminals/${cloverTerminalId}`, {
60
+ headers: authorizationHeaders({token, jwtToken, internalAuthTokenProvider, headers})
61
+ });
62
+ }
63
+
64
+ /**
65
+ * POST /clover-terminals - create Clover terminal.
66
+ * @param {Object} opts
67
+ * @param {string} [opts.token] - API key
68
+ * @param {string} [opts.jwtToken] - JWT or internal auth symbol
69
+ * @param {Object} opts.cloverTerminal - Clover terminal payload (name, serialNumber, stationId optional)
70
+ * @param {Object} [opts.headers] - Optional headers
71
+ * @returns {Promise<import("axios").AxiosResponse<{ cloverTerminal: Object }>>}
72
+ * @throws When response is 4xx/5xx (400 WRONG_DATA/INVALID_STATION_ID/STATION_NOT_FOUND, 401, 409 duplicate name/serial, 500)
73
+ */
74
+ function create({
75
+ jwtToken,
76
+ token,
77
+ cloverTerminal,
78
+ headers
79
+ }) {
80
+ return client({
81
+ url: "/clover-terminals",
82
+ method: "post",
83
+ headers: authorizationHeaders({token, jwtToken, internalAuthTokenProvider, headers}),
84
+ data: {
85
+ cloverTerminal
86
+ }
87
+ });
88
+ }
89
+
90
+ /**
91
+ * DELETE /clover-terminals/:cloverTerminalId - remove Clover terminal.
92
+ * @param {Object} opts
93
+ * @param {string} [opts.token] - API key
94
+ * @param {string} [opts.jwtToken] - JWT or internal auth symbol
95
+ * @param {string} opts.cloverTerminalId - Clover terminal id (24 hex characters)
96
+ * @param {Object} [opts.headers] - Optional headers
97
+ * @returns {Promise<import("axios").AxiosResponse<{ cloverTerminalId: string }>>}
98
+ * @throws When response is 4xx/5xx (400 INVALID_CLOVER_TERMINAL_ID, 401, 404 CLOVER_TERMINAL_NOT_FOUND, 500)
99
+ */
100
+ function remove({
101
+ jwtToken,
102
+ cloverTerminalId,
103
+ token,
104
+ headers
105
+ }) {
106
+ return client({
107
+ url: `/clover-terminals/${cloverTerminalId}`,
108
+ method: "delete",
109
+ headers: authorizationHeaders({token, jwtToken, internalAuthTokenProvider, headers})
110
+ });
111
+ }
112
+
113
+ /**
114
+ * PUT /clover-terminals/:cloverTerminalId - update Clover terminal.
115
+ * @param {Object} opts
116
+ * @param {string} [opts.token] - API key
117
+ * @param {string} [opts.jwtToken] - JWT or internal auth symbol
118
+ * @param {string} opts.cloverTerminalId - Clover terminal id (24 hex characters)
119
+ * @param {Object} opts.cloverTerminal - Clover terminal payload (name, serialNumber, stationId)
120
+ * @param {Object} [opts.headers] - Optional headers
121
+ * @returns {Promise<import("axios").AxiosResponse<{ cloverTerminal: Object }>>}
122
+ * @throws When response is 4xx/5xx (400, 401, 404 CLOVER_TERMINAL_NOT_FOUND, 409 duplicate name/serial, 500)
123
+ */
124
+ function update({
125
+ jwtToken,
126
+ token,
127
+ cloverTerminalId,
128
+ cloverTerminal,
129
+ headers
130
+ }) {
131
+ const _cloverTerminalId = cloverTerminalId || cloverTerminal._id;
132
+
133
+ return client({
134
+ url: `/clover-terminals/${_cloverTerminalId}`,
135
+ method: "put",
136
+ headers: authorizationHeaders({token, jwtToken, internalAuthTokenProvider, headers}),
137
+ data: {
138
+ cloverTerminal: {
139
+ name: cloverTerminal.name,
140
+ serialNumber: cloverTerminal.serialNumber,
141
+ stationId: cloverTerminal.stationId
142
+ }
143
+ }
144
+ });
145
+ }
146
+
147
+ return {
148
+ all,
149
+ get,
150
+ create,
151
+ remove,
152
+ update
153
+ };
154
+ }
155
+
156
+ module.exports = cloverTerminalFactory;
package/test/all.test.js CHANGED
@@ -98,6 +98,7 @@ require("./endpoints/inventory/filtered-trips.test.js");
98
98
  require("./endpoints/inventory/financing-costs.test.js");
99
99
  require("./endpoints/inventory/garages.test.js");
100
100
  require("./endpoints/inventory/banorte-terminals.test.js");
101
+ require("./endpoints/inventory/clover-terminals.test.js");
101
102
  require("./endpoints/inventory/getnet-terminals.test.js");
102
103
  require("./endpoints/inventory/gift-certificate-definitions.test.js");
103
104
  require("./endpoints/inventory/holidays.test.js");
@@ -0,0 +1,256 @@
1
+ describe("inventory/clover-terminals", () => {
2
+ const assert = require("node:assert/strict");
3
+ const {
4
+ axiosMock,
5
+ expectRequest
6
+ } = require("../../test-helpers.js");
7
+ const api = require("../../../src/client.js").createApiClient({
8
+ baseURL: "http://test.com"
9
+ });
10
+
11
+ const token = "I owe you a token";
12
+ const jwtToken = "I owe you a JWT token";
13
+
14
+ afterEach(() => {
15
+ axiosMock.restore();
16
+ });
17
+
18
+ it("should retrieve a list of Clover terminals", () => {
19
+ const query = {page: 2, stationId: "5f243d100617680712e78dd7", serialNumber: "DEV-001"};
20
+
21
+ axiosMock.onGet("/clover-terminals", {params: query}).reply(expectRequest({
22
+ statusCode: 200, token, jwtToken
23
+ }));
24
+
25
+ return api.inventory.cloverTerminals.all({
26
+ jwtToken,
27
+ token,
28
+ query
29
+ });
30
+ });
31
+
32
+ it("should retrieve an existing Clover terminal by id", () => {
33
+ const cloverTerminalId = "1234123412341234";
34
+
35
+ axiosMock.onGet(`/clover-terminals/${cloverTerminalId}`).reply(expectRequest({
36
+ statusCode: 200, token, jwtToken
37
+ }));
38
+
39
+ return api.inventory.cloverTerminals.get({
40
+ jwtToken,
41
+ token,
42
+ cloverTerminalId
43
+ });
44
+ });
45
+
46
+ it("should create a new Clover terminal", async () => {
47
+ const cloverTerminal = {
48
+ name: "New Clover Terminal",
49
+ serialNumber: "Test Serial Number"
50
+ };
51
+
52
+ axiosMock.onPost("/clover-terminals").reply(expectRequest({
53
+ statusCode: 200, token, jwtToken, body: {cloverTerminal}
54
+ }));
55
+
56
+ return api.inventory.cloverTerminals.create({
57
+ jwtToken,
58
+ token,
59
+ cloverTerminal
60
+ });
61
+ });
62
+
63
+ it("should create a new Clover terminal with stationId (location)", async () => {
64
+ const cloverTerminal = {
65
+ name: "Clover Terminal at Station",
66
+ serialNumber: "SN-001",
67
+ stationId: "5f243d100617680712e78dd7"
68
+ };
69
+
70
+ axiosMock.onPost("/clover-terminals").reply(expectRequest({
71
+ statusCode: 200, token, jwtToken, body: {cloverTerminal}
72
+ }));
73
+
74
+ return api.inventory.cloverTerminals.create({
75
+ jwtToken,
76
+ token,
77
+ cloverTerminal
78
+ });
79
+ });
80
+
81
+ it("should delete a Clover terminal", () => {
82
+ const cloverTerminalId = "1234";
83
+
84
+ axiosMock.onDelete(`/clover-terminals/${cloverTerminalId}`).reply(expectRequest({
85
+ statusCode: 200, token, jwtToken
86
+ }));
87
+
88
+ return api.inventory.cloverTerminals.remove({
89
+ jwtToken,
90
+ token,
91
+ cloverTerminalId
92
+ });
93
+ });
94
+
95
+ it("should update an existing Clover terminal", async () => {
96
+ const cloverTerminal = {
97
+ _id: "terminal-id-123",
98
+ name: "Updated Clover Terminal",
99
+ serialNumber: "Updated Serial Number"
100
+ };
101
+
102
+ const cloverTerminalFieldsToUpdate = {
103
+ name: cloverTerminal.name,
104
+ serialNumber: cloverTerminal.serialNumber,
105
+ stationId: cloverTerminal.stationId
106
+ };
107
+
108
+ axiosMock.onPut(`/clover-terminals/${cloverTerminal._id}`).reply(expectRequest({
109
+ statusCode: 200, token, jwtToken, body: {cloverTerminal: cloverTerminalFieldsToUpdate}
110
+ }));
111
+
112
+ return api.inventory.cloverTerminals.update({
113
+ jwtToken,
114
+ token,
115
+ cloverTerminal
116
+ });
117
+ });
118
+
119
+ it("should update an existing Clover terminal with stationId (location)", async () => {
120
+ const cloverTerminalId = "terminal-id-456";
121
+ const cloverTerminal = {
122
+ _id: cloverTerminalId,
123
+ name: "Terminal at Station",
124
+ serialNumber: "SN-789",
125
+ stationId: "5f243d100617680712e78dd7"
126
+ };
127
+
128
+ const expectedBody = {
129
+ cloverTerminal: {
130
+ name: cloverTerminal.name,
131
+ serialNumber: cloverTerminal.serialNumber,
132
+ stationId: cloverTerminal.stationId
133
+ }
134
+ };
135
+
136
+ axiosMock.onPut(`/clover-terminals/${cloverTerminalId}`).reply(expectRequest({
137
+ statusCode: 200, token, jwtToken, body: expectedBody
138
+ }));
139
+
140
+ return api.inventory.cloverTerminals.update({
141
+ jwtToken,
142
+ token,
143
+ cloverTerminalId,
144
+ cloverTerminal
145
+ });
146
+ });
147
+
148
+ it("should update an existing Clover terminal with empty stationId", async () => {
149
+ const cloverTerminal = {
150
+ _id: "terminal-id-999",
151
+ name: "Terminal No Location",
152
+ serialNumber: "SN-999",
153
+ stationId: ""
154
+ };
155
+
156
+ const expectedBody = {
157
+ cloverTerminal: {
158
+ name: cloverTerminal.name,
159
+ serialNumber: cloverTerminal.serialNumber,
160
+ stationId: ""
161
+ }
162
+ };
163
+
164
+ axiosMock.onPut(`/clover-terminals/${cloverTerminal._id}`).reply(expectRequest({
165
+ statusCode: 200, token, jwtToken, body: expectedBody
166
+ }));
167
+
168
+ return api.inventory.cloverTerminals.update({
169
+ jwtToken,
170
+ token,
171
+ cloverTerminal
172
+ });
173
+ });
174
+
175
+ it("should reject when Clover terminal is not found", async () => {
176
+ const cloverTerminalId = "5f243d100617680712e78dd7";
177
+
178
+ axiosMock.onGet(`/clover-terminals/${cloverTerminalId}`).reply(404, {
179
+ code: "CLOVER_TERMINAL_NOT_FOUND"
180
+ });
181
+
182
+ await assert.rejects(
183
+ () => {
184
+ return api.inventory.cloverTerminals.get({jwtToken, token, cloverTerminalId});
185
+ },
186
+ (err) => {
187
+ assert.equal(err.response.status, 404);
188
+ assert.equal(err.response.data.code, "CLOVER_TERMINAL_NOT_FOUND");
189
+ return true;
190
+ }
191
+ );
192
+ });
193
+
194
+ it("should reject when Clover terminal id is invalid", async () => {
195
+ const cloverTerminalId = "not-an-object-id";
196
+
197
+ axiosMock.onGet(`/clover-terminals/${cloverTerminalId}`).reply(400, {
198
+ code: "INVALID_CLOVER_TERMINAL_ID"
199
+ });
200
+
201
+ await assert.rejects(
202
+ () => {
203
+ return api.inventory.cloverTerminals.get({jwtToken, token, cloverTerminalId});
204
+ },
205
+ (err) => {
206
+ assert.equal(err.response.status, 400);
207
+ assert.equal(err.response.data.code, "INVALID_CLOVER_TERMINAL_ID");
208
+ return true;
209
+ }
210
+ );
211
+ });
212
+
213
+ it("should reject when Clover terminal name is duplicated", async () => {
214
+ const cloverTerminal = {
215
+ name: "Duplicate Name",
216
+ serialNumber: "SN-UNIQUE"
217
+ };
218
+
219
+ axiosMock.onPost("/clover-terminals").reply(409, {
220
+ code: "DUPLICATED_CLOVER_TERMINAL_NAME"
221
+ });
222
+
223
+ await assert.rejects(
224
+ () => {
225
+ return api.inventory.cloverTerminals.create({jwtToken, token, cloverTerminal});
226
+ },
227
+ (err) => {
228
+ assert.equal(err.response.status, 409);
229
+ assert.equal(err.response.data.code, "DUPLICATED_CLOVER_TERMINAL_NAME");
230
+ return true;
231
+ }
232
+ );
233
+ });
234
+
235
+ it("should reject when Clover terminal serial number is duplicated", async () => {
236
+ const cloverTerminal = {
237
+ name: "Unique Name",
238
+ serialNumber: "SN-DUPLICATE"
239
+ };
240
+
241
+ axiosMock.onPost("/clover-terminals").reply(409, {
242
+ code: "DUPLICATE_CLOVER_TERMINAL_SERIAL_NUMBER"
243
+ });
244
+
245
+ await assert.rejects(
246
+ () => {
247
+ return api.inventory.cloverTerminals.create({jwtToken, token, cloverTerminal});
248
+ },
249
+ (err) => {
250
+ assert.equal(err.response.status, 409);
251
+ assert.equal(err.response.data.code, "DUPLICATE_CLOVER_TERMINAL_SERIAL_NUMBER");
252
+ return true;
253
+ }
254
+ );
255
+ });
256
+ });