scandit-datacapture-frameworks-label 8.1.1 → 8.2.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/__mocks__/ScanditDataCaptureCore.ts +94 -0
- package/dist/dts/defaults/LabelCaptureDefaults.d.ts +2 -0
- package/dist/dts/defaults/index.d.ts +1 -1
- package/dist/dts/generated/LabelProxy.d.ts +30 -0
- package/dist/dts/generated/LabelProxyAdapter.d.ts +256 -0
- package/dist/dts/generated/index.d.ts +6 -0
- package/dist/dts/labelcapture/AdaptiveRecognitionResult.d.ts +4 -0
- package/dist/dts/labelcapture/AdaptiveRecognitionResultType.d.ts +3 -0
- package/dist/dts/labelcapture/CustomBarcode.d.ts +5 -0
- package/dist/dts/labelcapture/CustomText.d.ts +4 -0
- package/dist/dts/labelcapture/ExpiryDateText.d.ts +4 -0
- package/dist/dts/labelcapture/ImeiOneBarcode.d.ts +5 -0
- package/dist/dts/labelcapture/ImeiTwoBarcode.d.ts +5 -0
- package/dist/dts/labelcapture/LabelCaptureAdaptiveRecognitionSettings.d.ts +11 -0
- package/dist/dts/labelcapture/LabelCaptureListener.d.ts +1 -2
- package/dist/dts/labelcapture/LabelCaptureSession.d.ts +0 -1
- package/dist/dts/labelcapture/LabelCaptureValidationFlowListener.d.ts +1 -0
- package/dist/dts/labelcapture/LabelCaptureValidationFlowSettings.d.ts +22 -0
- package/dist/dts/labelcapture/PackingDateText.d.ts +4 -0
- package/dist/dts/labelcapture/PartNumberBarcode.d.ts +5 -0
- package/dist/dts/labelcapture/ReceiptScanningLineItem.d.ts +13 -0
- package/dist/dts/labelcapture/ReceiptScanningResult.d.ts +27 -0
- package/dist/dts/labelcapture/SerialNumberBarcode.d.ts +5 -0
- package/dist/dts/labelcapture/TotalPriceText.d.ts +4 -0
- package/dist/dts/labelcapture/UnitPriceText.d.ts +4 -0
- package/dist/dts/labelcapture/WeightText.d.ts +4 -0
- package/dist/dts/labelcapture/controller/LabelCaptureAdaptiveRecognitionOverlayController.d.ts +29 -0
- package/dist/dts/labelcapture/controller/LabelCaptureAdvancedOverlayController.d.ts +7 -47
- package/dist/dts/labelcapture/controller/LabelCaptureBasicOverlayController.d.ts +7 -25
- package/dist/dts/labelcapture/controller/LabelCaptureController.d.ts +7 -25
- package/dist/dts/labelcapture/controller/LabelCaptureValidationFlowOverlayController.d.ts +13 -15
- package/dist/dts/labelcapture/index.d.ts +8 -0
- package/dist/dts/labelcapture/private/PrivateLabelCaptureSession.d.ts +1 -6
- package/dist/dts/labelcapture/view/LabelCaptureAdaptiveRecognitionListener.d.ts +5 -0
- package/dist/dts/labelcapture/view/LabelCaptureAdaptiveRecognitionOverlay.d.ts +20 -0
- package/dist/dts/labelcapture/view/LabelCaptureAdvancedOverlay.d.ts +1 -0
- package/dist/dts/labelcapture/view/LabelCaptureBasicOverlay.d.ts +2 -1
- package/dist/dts/labelcapture/view/LabelCaptureValidationFlowOverlay.d.ts +1 -0
- package/dist/dts/proxy-types.d.ts +1 -1
- package/dist/index.js +1152 -54
- package/dist/index.js.map +1 -1
- package/jest.config.js +38 -0
- package/package.json +3 -3
- package/test/AdaptiveRecognitionResultType.test.ts +19 -0
- package/test/LabelCaptureAdaptiveRecognitionSettings.test.ts +115 -0
- package/test/LabelCaptureValidationFlowOverlayController.test.ts +427 -0
- package/test/LabelCaptureValidationFlowSettings.test.ts +120 -0
- package/test/ReceiptScanningLineItem.test.ts +99 -0
- package/test/ReceiptScanningResult.test.ts +247 -0
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
import { describe, it, expect } from '@jest/globals';
|
|
2
|
+
import { ReceiptScanningLineItem } from '../src/labelcapture/ReceiptScanningLineItem';
|
|
3
|
+
|
|
4
|
+
describe('ReceiptScanningLineItem', () => {
|
|
5
|
+
describe('constructor', () => {
|
|
6
|
+
it('should create a line item with all properties', () => {
|
|
7
|
+
const lineItem = new ReceiptScanningLineItem('Milk 2%', 3.99, 0.50, 2.0, 7.48);
|
|
8
|
+
|
|
9
|
+
expect(lineItem.name).toBe('Milk 2%');
|
|
10
|
+
expect(lineItem.unitPrice).toBe(3.99);
|
|
11
|
+
expect(lineItem.discount).toBe(0.50);
|
|
12
|
+
expect(lineItem.quantity).toBe(2.0);
|
|
13
|
+
expect(lineItem.totalPrice).toBe(7.48);
|
|
14
|
+
});
|
|
15
|
+
|
|
16
|
+
it('should create a line item with null optional values', () => {
|
|
17
|
+
const lineItem = new ReceiptScanningLineItem('Item', null, null, 1.0, null);
|
|
18
|
+
|
|
19
|
+
expect(lineItem.name).toBe('Item');
|
|
20
|
+
expect(lineItem.unitPrice).toBeNull();
|
|
21
|
+
expect(lineItem.discount).toBeNull();
|
|
22
|
+
expect(lineItem.quantity).toBe(1.0);
|
|
23
|
+
expect(lineItem.totalPrice).toBeNull();
|
|
24
|
+
});
|
|
25
|
+
|
|
26
|
+
it('should handle empty name', () => {
|
|
27
|
+
const lineItem = new ReceiptScanningLineItem('', null, null, 1.0, null);
|
|
28
|
+
|
|
29
|
+
expect(lineItem.name).toBe('');
|
|
30
|
+
});
|
|
31
|
+
|
|
32
|
+
it('should handle zero values', () => {
|
|
33
|
+
const lineItem = new ReceiptScanningLineItem('Free Item', 0, 0, 0, 0);
|
|
34
|
+
|
|
35
|
+
expect(lineItem.unitPrice).toBe(0);
|
|
36
|
+
expect(lineItem.discount).toBe(0);
|
|
37
|
+
expect(lineItem.quantity).toBe(0);
|
|
38
|
+
expect(lineItem.totalPrice).toBe(0);
|
|
39
|
+
});
|
|
40
|
+
});
|
|
41
|
+
|
|
42
|
+
describe('getters', () => {
|
|
43
|
+
it('name getter returns the correct value', () => {
|
|
44
|
+
const lineItem = new ReceiptScanningLineItem('Test Item', 10.00, null, 1, 10.00);
|
|
45
|
+
expect(lineItem.name).toBe('Test Item');
|
|
46
|
+
});
|
|
47
|
+
|
|
48
|
+
it('unitPrice getter returns the correct value', () => {
|
|
49
|
+
const lineItem = new ReceiptScanningLineItem('Test', 5.99, null, 1, 5.99);
|
|
50
|
+
expect(lineItem.unitPrice).toBe(5.99);
|
|
51
|
+
});
|
|
52
|
+
|
|
53
|
+
it('discount getter returns the correct value', () => {
|
|
54
|
+
const lineItem = new ReceiptScanningLineItem('Test', 10.00, 2.00, 1, 8.00);
|
|
55
|
+
expect(lineItem.discount).toBe(2.00);
|
|
56
|
+
});
|
|
57
|
+
|
|
58
|
+
it('quantity getter returns the correct value', () => {
|
|
59
|
+
const lineItem = new ReceiptScanningLineItem('Test', 5.00, null, 3, 15.00);
|
|
60
|
+
expect(lineItem.quantity).toBe(3);
|
|
61
|
+
});
|
|
62
|
+
|
|
63
|
+
it('totalPrice getter returns the correct value', () => {
|
|
64
|
+
const lineItem = new ReceiptScanningLineItem('Test', 5.00, null, 3, 15.00);
|
|
65
|
+
expect(lineItem.totalPrice).toBe(15.00);
|
|
66
|
+
});
|
|
67
|
+
});
|
|
68
|
+
|
|
69
|
+
describe('edge cases', () => {
|
|
70
|
+
it('should handle very large numbers', () => {
|
|
71
|
+
const lineItem = new ReceiptScanningLineItem('Expensive Item', 999999.99, null, 1000, 999999990.00);
|
|
72
|
+
|
|
73
|
+
expect(lineItem.unitPrice).toBe(999999.99);
|
|
74
|
+
expect(lineItem.quantity).toBe(1000);
|
|
75
|
+
expect(lineItem.totalPrice).toBe(999999990.00);
|
|
76
|
+
});
|
|
77
|
+
|
|
78
|
+
it('should handle negative values', () => {
|
|
79
|
+
// Refunds might have negative prices
|
|
80
|
+
const lineItem = new ReceiptScanningLineItem('Refund', -10.00, null, 1, -10.00);
|
|
81
|
+
|
|
82
|
+
expect(lineItem.unitPrice).toBe(-10.00);
|
|
83
|
+
expect(lineItem.totalPrice).toBe(-10.00);
|
|
84
|
+
});
|
|
85
|
+
|
|
86
|
+
it('should handle special characters in name', () => {
|
|
87
|
+
const lineItem = new ReceiptScanningLineItem('Café Mocha™ (Large) @50% Off!', 5.00, 2.50, 1, 2.50);
|
|
88
|
+
|
|
89
|
+
expect(lineItem.name).toBe('Café Mocha™ (Large) @50% Off!');
|
|
90
|
+
});
|
|
91
|
+
|
|
92
|
+
it('should handle unicode in name', () => {
|
|
93
|
+
const lineItem = new ReceiptScanningLineItem('寿司 🍣', 12.00, null, 2, 24.00);
|
|
94
|
+
|
|
95
|
+
expect(lineItem.name).toBe('寿司 🍣');
|
|
96
|
+
});
|
|
97
|
+
});
|
|
98
|
+
});
|
|
99
|
+
|
|
@@ -0,0 +1,247 @@
|
|
|
1
|
+
import { describe, it, expect } from '@jest/globals';
|
|
2
|
+
import { ReceiptScanningResult } from '../src/labelcapture/ReceiptScanningResult';
|
|
3
|
+
import { ReceiptScanningLineItem } from '../src/labelcapture/ReceiptScanningLineItem';
|
|
4
|
+
import { AdaptiveRecognitionResultType } from '../src/labelcapture/AdaptiveRecognitionResultType';
|
|
5
|
+
|
|
6
|
+
describe('ReceiptScanningResult', () => {
|
|
7
|
+
describe('constructor', () => {
|
|
8
|
+
it('should create a result with all properties', () => {
|
|
9
|
+
const lineItems = [
|
|
10
|
+
new ReceiptScanningLineItem('Milk', 3.99, null, 2, 7.98),
|
|
11
|
+
new ReceiptScanningLineItem('Bread', 2.50, 0.25, 1, 2.25),
|
|
12
|
+
];
|
|
13
|
+
|
|
14
|
+
const result = new ReceiptScanningResult(
|
|
15
|
+
'2024-01-15',
|
|
16
|
+
lineItems,
|
|
17
|
+
12345678,
|
|
18
|
+
45.50,
|
|
19
|
+
3.64,
|
|
20
|
+
49.14,
|
|
21
|
+
'123 Main St, San Francisco, CA 94102',
|
|
22
|
+
'San Francisco',
|
|
23
|
+
'Grocery Store',
|
|
24
|
+
'14:30:00'
|
|
25
|
+
);
|
|
26
|
+
|
|
27
|
+
expect(result.date).toBe('2024-01-15');
|
|
28
|
+
expect(result.lineItems).toHaveLength(2);
|
|
29
|
+
expect(result.loyaltyNumber).toBe(12345678);
|
|
30
|
+
expect(result.paymentPreTaxTotal).toBe(45.50);
|
|
31
|
+
expect(result.paymentTax).toBe(3.64);
|
|
32
|
+
expect(result.paymentTotal).toBe(49.14);
|
|
33
|
+
expect(result.storeAddress).toBe('123 Main St, San Francisco, CA 94102');
|
|
34
|
+
expect(result.storeCity).toBe('San Francisco');
|
|
35
|
+
expect(result.storeName).toBe('Grocery Store');
|
|
36
|
+
expect(result.time).toBe('14:30:00');
|
|
37
|
+
});
|
|
38
|
+
|
|
39
|
+
it('should create a result with all null optional values', () => {
|
|
40
|
+
const result = new ReceiptScanningResult(
|
|
41
|
+
null,
|
|
42
|
+
[],
|
|
43
|
+
null,
|
|
44
|
+
null,
|
|
45
|
+
null,
|
|
46
|
+
null,
|
|
47
|
+
null,
|
|
48
|
+
null,
|
|
49
|
+
null,
|
|
50
|
+
null
|
|
51
|
+
);
|
|
52
|
+
|
|
53
|
+
expect(result.date).toBeNull();
|
|
54
|
+
expect(result.lineItems).toHaveLength(0);
|
|
55
|
+
expect(result.loyaltyNumber).toBeNull();
|
|
56
|
+
expect(result.paymentPreTaxTotal).toBeNull();
|
|
57
|
+
expect(result.paymentTax).toBeNull();
|
|
58
|
+
expect(result.paymentTotal).toBeNull();
|
|
59
|
+
expect(result.storeAddress).toBeNull();
|
|
60
|
+
expect(result.storeCity).toBeNull();
|
|
61
|
+
expect(result.storeName).toBeNull();
|
|
62
|
+
expect(result.time).toBeNull();
|
|
63
|
+
});
|
|
64
|
+
|
|
65
|
+
it('should handle empty line items array', () => {
|
|
66
|
+
const result = new ReceiptScanningResult(
|
|
67
|
+
'2024-01-15',
|
|
68
|
+
[],
|
|
69
|
+
null,
|
|
70
|
+
10.00,
|
|
71
|
+
0.80,
|
|
72
|
+
10.80,
|
|
73
|
+
null,
|
|
74
|
+
null,
|
|
75
|
+
'Test Store',
|
|
76
|
+
null
|
|
77
|
+
);
|
|
78
|
+
|
|
79
|
+
expect(result.lineItems).toHaveLength(0);
|
|
80
|
+
expect(result.lineItems).toEqual([]);
|
|
81
|
+
});
|
|
82
|
+
});
|
|
83
|
+
|
|
84
|
+
describe('resultType', () => {
|
|
85
|
+
it('should return Receipt type', () => {
|
|
86
|
+
const result = new ReceiptScanningResult(
|
|
87
|
+
null, [], null, null, null, null, null, null, null, null
|
|
88
|
+
);
|
|
89
|
+
|
|
90
|
+
expect(result.resultType).toBe(AdaptiveRecognitionResultType.Receipt);
|
|
91
|
+
});
|
|
92
|
+
|
|
93
|
+
it('should always return Receipt regardless of other properties', () => {
|
|
94
|
+
const result = new ReceiptScanningResult(
|
|
95
|
+
'2024-01-15',
|
|
96
|
+
[new ReceiptScanningLineItem('Item', 10.00, null, 1, 10.00)],
|
|
97
|
+
12345,
|
|
98
|
+
10.00,
|
|
99
|
+
0.80,
|
|
100
|
+
10.80,
|
|
101
|
+
'Address',
|
|
102
|
+
'City',
|
|
103
|
+
'Store',
|
|
104
|
+
'10:00:00'
|
|
105
|
+
);
|
|
106
|
+
|
|
107
|
+
expect(result.resultType).toBe(AdaptiveRecognitionResultType.Receipt);
|
|
108
|
+
});
|
|
109
|
+
});
|
|
110
|
+
|
|
111
|
+
describe('getters', () => {
|
|
112
|
+
let result: ReceiptScanningResult;
|
|
113
|
+
|
|
114
|
+
beforeEach(() => {
|
|
115
|
+
result = new ReceiptScanningResult(
|
|
116
|
+
'2024-03-20',
|
|
117
|
+
[new ReceiptScanningLineItem('Test', 5.00, 1.00, 2, 8.00)],
|
|
118
|
+
99999,
|
|
119
|
+
100.00,
|
|
120
|
+
8.50,
|
|
121
|
+
108.50,
|
|
122
|
+
'456 Oak Ave',
|
|
123
|
+
'Los Angeles',
|
|
124
|
+
'Test Market',
|
|
125
|
+
'15:45:30'
|
|
126
|
+
);
|
|
127
|
+
});
|
|
128
|
+
|
|
129
|
+
it('date getter returns correct value', () => {
|
|
130
|
+
expect(result.date).toBe('2024-03-20');
|
|
131
|
+
});
|
|
132
|
+
|
|
133
|
+
it('lineItems getter returns correct array', () => {
|
|
134
|
+
expect(result.lineItems).toHaveLength(1);
|
|
135
|
+
expect(result.lineItems[0].name).toBe('Test');
|
|
136
|
+
});
|
|
137
|
+
|
|
138
|
+
it('loyaltyNumber getter returns correct value', () => {
|
|
139
|
+
expect(result.loyaltyNumber).toBe(99999);
|
|
140
|
+
});
|
|
141
|
+
|
|
142
|
+
it('paymentPreTaxTotal getter returns correct value', () => {
|
|
143
|
+
expect(result.paymentPreTaxTotal).toBe(100.00);
|
|
144
|
+
});
|
|
145
|
+
|
|
146
|
+
it('paymentTax getter returns correct value', () => {
|
|
147
|
+
expect(result.paymentTax).toBe(8.50);
|
|
148
|
+
});
|
|
149
|
+
|
|
150
|
+
it('paymentTotal getter returns correct value', () => {
|
|
151
|
+
expect(result.paymentTotal).toBe(108.50);
|
|
152
|
+
});
|
|
153
|
+
|
|
154
|
+
it('storeAddress getter returns correct value', () => {
|
|
155
|
+
expect(result.storeAddress).toBe('456 Oak Ave');
|
|
156
|
+
});
|
|
157
|
+
|
|
158
|
+
it('storeCity getter returns correct value', () => {
|
|
159
|
+
expect(result.storeCity).toBe('Los Angeles');
|
|
160
|
+
});
|
|
161
|
+
|
|
162
|
+
it('storeName getter returns correct value', () => {
|
|
163
|
+
expect(result.storeName).toBe('Test Market');
|
|
164
|
+
});
|
|
165
|
+
|
|
166
|
+
it('time getter returns correct value', () => {
|
|
167
|
+
expect(result.time).toBe('15:45:30');
|
|
168
|
+
});
|
|
169
|
+
});
|
|
170
|
+
|
|
171
|
+
describe('edge cases', () => {
|
|
172
|
+
it('should handle many line items', () => {
|
|
173
|
+
const lineItems = Array.from({ length: 100 }, (_, i) =>
|
|
174
|
+
new ReceiptScanningLineItem(`Item ${i + 1}`, i + 1, null, 1, i + 1)
|
|
175
|
+
);
|
|
176
|
+
|
|
177
|
+
const result = new ReceiptScanningResult(
|
|
178
|
+
'2024-01-01',
|
|
179
|
+
lineItems,
|
|
180
|
+
null,
|
|
181
|
+
5050, // sum of 1 to 100
|
|
182
|
+
404,
|
|
183
|
+
5454,
|
|
184
|
+
null,
|
|
185
|
+
null,
|
|
186
|
+
'Large Store',
|
|
187
|
+
null
|
|
188
|
+
);
|
|
189
|
+
|
|
190
|
+
expect(result.lineItems).toHaveLength(100);
|
|
191
|
+
expect(result.lineItems[0].name).toBe('Item 1');
|
|
192
|
+
expect(result.lineItems[99].name).toBe('Item 100');
|
|
193
|
+
});
|
|
194
|
+
|
|
195
|
+
it('should handle special characters in store info', () => {
|
|
196
|
+
const result = new ReceiptScanningResult(
|
|
197
|
+
null,
|
|
198
|
+
[],
|
|
199
|
+
null,
|
|
200
|
+
null,
|
|
201
|
+
null,
|
|
202
|
+
null,
|
|
203
|
+
'123 Hauptstraße, München',
|
|
204
|
+
'München',
|
|
205
|
+
'Café & Bäckerei',
|
|
206
|
+
null
|
|
207
|
+
);
|
|
208
|
+
|
|
209
|
+
expect(result.storeName).toBe('Café & Bäckerei');
|
|
210
|
+
expect(result.storeCity).toBe('München');
|
|
211
|
+
expect(result.storeAddress).toBe('123 Hauptstraße, München');
|
|
212
|
+
});
|
|
213
|
+
|
|
214
|
+
it('should handle zero payment values', () => {
|
|
215
|
+
const result = new ReceiptScanningResult(
|
|
216
|
+
null,
|
|
217
|
+
[],
|
|
218
|
+
null,
|
|
219
|
+
0,
|
|
220
|
+
0,
|
|
221
|
+
0,
|
|
222
|
+
null,
|
|
223
|
+
null,
|
|
224
|
+
null,
|
|
225
|
+
null
|
|
226
|
+
);
|
|
227
|
+
|
|
228
|
+
expect(result.paymentPreTaxTotal).toBe(0);
|
|
229
|
+
expect(result.paymentTax).toBe(0);
|
|
230
|
+
expect(result.paymentTotal).toBe(0);
|
|
231
|
+
});
|
|
232
|
+
});
|
|
233
|
+
|
|
234
|
+
describe('implements AdaptiveRecognitionResult', () => {
|
|
235
|
+
it('should have resultType property from interface', () => {
|
|
236
|
+
const result = new ReceiptScanningResult(
|
|
237
|
+
null, [], null, null, null, null, null, null, null, null
|
|
238
|
+
);
|
|
239
|
+
|
|
240
|
+
// Type check - resultType should exist and be of correct type
|
|
241
|
+
const resultType = result.resultType;
|
|
242
|
+
expect(resultType).toBeDefined();
|
|
243
|
+
expect(typeof resultType).toBe('string');
|
|
244
|
+
});
|
|
245
|
+
});
|
|
246
|
+
});
|
|
247
|
+
|