@be-link/pos-cli-nodejs 1.0.236 → 1.0.239

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.
Files changed (33) hide show
  1. package/README.md +43 -0
  2. package/index.d.ts +8 -0
  3. package/index.js +12 -1
  4. package/package.json +1 -1
  5. package/pos/modules/orderCore/seniorConfirmationRecovery.d.ts +2 -0
  6. package/pos/modules/orderCore/seniorConfirmationRecovery.js +6 -0
  7. package/pos/modules/orderCore/service.d.ts +11 -1
  8. package/pos/modules/orderCore/service.js +18 -0
  9. package/pos/modules/orderCore/types.d.ts +127 -0
  10. package/pos/modules/orderQuery/advisor.d.ts +14 -0
  11. package/pos/modules/orderQuery/advisor.js +111 -0
  12. package/pos/modules/orderQuery/advisorBusinessError.d.ts +8 -0
  13. package/pos/modules/orderQuery/advisorBusinessError.js +37 -0
  14. package/pos/modules/orderQuery/advisorHttpSender.d.ts +7 -0
  15. package/pos/modules/orderQuery/advisorHttpSender.js +138 -0
  16. package/pos/modules/orderQuery/advisorProtection.d.ts +63 -0
  17. package/pos/modules/orderQuery/advisorProtection.js +262 -0
  18. package/pos/modules/orderQuery/advisorTypes.d.ts +80 -0
  19. package/pos/modules/orderQuery/advisorTypes.js +2 -0
  20. package/pos/http.test.d.ts +0 -1
  21. package/pos/http.test.js +0 -71
  22. package/pos/modules/orderAbnormalFollow/service.test.d.ts +0 -1
  23. package/pos/modules/orderAbnormalFollow/service.test.js +0 -72
  24. package/pos/modules/orderCore/service.test.d.ts +0 -1
  25. package/pos/modules/orderCore/service.test.js +0 -72
  26. package/pos/modules/orderQuery/service.test.d.ts +0 -1
  27. package/pos/modules/orderQuery/service.test.js +0 -71
  28. package/pos/modules/orderQuery/settlement.test.d.ts +0 -1
  29. package/pos/modules/orderQuery/settlement.test.js +0 -43
  30. package/pos/modules/orderRoomShare/service.test.d.ts +0 -1
  31. package/pos/modules/orderRoomShare/service.test.js +0 -103
  32. package/types.test.d.ts +0 -1
  33. package/types.test.js +0 -55
@@ -1,71 +0,0 @@
1
- "use strict";
2
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
- return new (P || (P = Promise))(function (resolve, reject) {
5
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
- step((generator = generator.apply(thisArg, _arguments || [])).next());
9
- });
10
- };
11
- var __importDefault = (this && this.__importDefault) || function (mod) {
12
- return (mod && mod.__esModule) ? mod : { "default": mod };
13
- };
14
- Object.defineProperty(exports, "__esModule", { value: true });
15
- const mockCallApi = jest.fn();
16
- jest.mock('../../http', () => ({
17
- callApi: (...args) => mockCallApi(...args),
18
- }));
19
- const store_1 = __importDefault(require("./store"));
20
- const web_1 = __importDefault(require("./web"));
21
- const needBlocks = ['basicInfo'];
22
- function storeListRequest(isAutoConfirmedOrder, isSupplierAcknowledged) {
23
- return {
24
- conditions: Object.assign(Object.assign({ storeIdList: ['store-1'], supplierIds: ['supplier-1'], pageIndex: 0, pageSize: 10 }, (isAutoConfirmedOrder !== undefined ? { isAutoConfirmedOrder } : {})), (isSupplierAcknowledged !== undefined ? { isSupplierAcknowledged } : {})),
25
- sort: {},
26
- needBlocks,
27
- };
28
- }
29
- function storeCountRequest(isAutoConfirmedOrder, isSupplierAcknowledged) {
30
- return Object.assign(Object.assign({ storeIdList: ['store-1'], supplierIds: ['supplier-1'] }, (isAutoConfirmedOrder !== undefined ? { isAutoConfirmedOrder } : {})), (isSupplierAcknowledged !== undefined ? { isSupplierAcknowledged } : {}));
31
- }
32
- function statisticsRequest(isAutoConfirmedOrder, isSupplierAcknowledged) {
33
- return {
34
- conditions: Object.assign(Object.assign({}, (isAutoConfirmedOrder !== undefined ? { isAutoConfirmedOrder } : {})), (isSupplierAcknowledged !== undefined ? { isSupplierAcknowledged } : {})),
35
- needBlocks,
36
- };
37
- }
38
- describe('自动接单订单查询契约', () => {
39
- beforeEach(() => {
40
- mockCallApi.mockReset().mockResolvedValue([]);
41
- });
42
- it.each([
43
- [0, 0],
44
- [0, 1],
45
- [1, 0],
46
- [1, 1],
47
- ])('list/count/statistics 透传属性值 (%s, %s)', (isAutoConfirmedOrder, isSupplierAcknowledged) => __awaiter(void 0, void 0, void 0, function* () {
48
- yield store_1.default.queryOrderList(storeListRequest(isAutoConfirmedOrder, isSupplierAcknowledged));
49
- yield store_1.default.getOrderCount(storeCountRequest(isAutoConfirmedOrder, isSupplierAcknowledged));
50
- yield web_1.default.queryOrderForStatistics(statisticsRequest(isAutoConfirmedOrder, isSupplierAcknowledged));
51
- const [listRequest, countRequest, statisticsRequestValue] = mockCallApi.mock.calls.map((call) => call[1]);
52
- expect(listRequest.conditions.isAutoConfirmedOrder).toBe(isAutoConfirmedOrder);
53
- expect(listRequest.conditions.isSupplierAcknowledged).toBe(isSupplierAcknowledged);
54
- expect(countRequest.isAutoConfirmedOrder).toBe(isAutoConfirmedOrder);
55
- expect(countRequest.isSupplierAcknowledged).toBe(isSupplierAcknowledged);
56
- expect(statisticsRequestValue.conditions.isAutoConfirmedOrder).toBe(isAutoConfirmedOrder);
57
- expect(statisticsRequestValue.conditions.isSupplierAcknowledged).toBe(isSupplierAcknowledged);
58
- }));
59
- it('未传新增字段时保持旧请求结构', () => __awaiter(void 0, void 0, void 0, function* () {
60
- const listRequest = storeListRequest();
61
- const countRequest = storeCountRequest();
62
- const exportRequest = statisticsRequest();
63
- yield store_1.default.queryOrderList(listRequest);
64
- yield store_1.default.getOrderCount(countRequest);
65
- yield web_1.default.queryOrderForStatistics(exportRequest);
66
- for (const request of mockCallApi.mock.calls.map((call) => call[1])) {
67
- expect(JSON.stringify(request)).not.toContain('isAutoConfirmedOrder');
68
- expect(JSON.stringify(request)).not.toContain('isSupplierAcknowledged');
69
- }
70
- }));
71
- });
@@ -1 +0,0 @@
1
- export {};
@@ -1,43 +0,0 @@
1
- "use strict";
2
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
- return new (P || (P = Promise))(function (resolve, reject) {
5
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
- step((generator = generator.apply(thisArg, _arguments || [])).next());
9
- });
10
- };
11
- var __importDefault = (this && this.__importDefault) || function (mod) {
12
- return (mod && mod.__esModule) ? mod : { "default": mod };
13
- };
14
- Object.defineProperty(exports, "__esModule", { value: true });
15
- jest.mock('../../http', () => ({ callApi: jest.fn() }));
16
- const http_1 = require("../../http");
17
- const pos_1 = require("vitality-meta/enums/pos");
18
- const user_1 = __importDefault(require("./user"));
19
- const mockedCallApi = http_1.callApi;
20
- describe('getOrderSettlementFacts', () => {
21
- beforeEach(() => mockedCallApi.mockReset());
22
- it.each([0, 2])('返回原始结算事实,保留 %s 份且不要求 attributes block', (remainQuantity) => __awaiter(void 0, void 0, void 0, function* () {
23
- const facts = {
24
- orderId: 'order-1',
25
- status: pos_1.TradeOrderStatusEnum.SUCCEED,
26
- remainQuantity,
27
- };
28
- mockedCallApi.mockResolvedValue(facts);
29
- const request = { id: 'order-1' };
30
- yield expect(user_1.default.getOrderSettlementFacts(request)).resolves.toBe(facts);
31
- expect(mockedCallApi).toHaveBeenCalledWith(expect.stringMatching(/\/query\/user\/get-order-settlement-facts$/), request);
32
- }));
33
- it('未完结状态原样返回,由消费者决定重试', () => __awaiter(void 0, void 0, void 0, function* () {
34
- const facts = { orderId: 'order-1', status: pos_1.TradeOrderStatusEnum.FULFILLING, remainQuantity: 1 };
35
- mockedCallApi.mockResolvedValue(facts);
36
- yield expect(user_1.default.getOrderSettlementFacts({ id: 'order-1' })).resolves.toEqual(facts);
37
- }));
38
- it('查询失败不使用零份数或缓存结果兜底', () => __awaiter(void 0, void 0, void 0, function* () {
39
- const error = new Error('upstream unavailable');
40
- mockedCallApi.mockRejectedValue(error);
41
- yield expect(user_1.default.getOrderSettlementFacts({ id: 'order-1' })).rejects.toBe(error);
42
- }));
43
- });
@@ -1 +0,0 @@
1
- export {};
@@ -1,103 +0,0 @@
1
- "use strict";
2
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
- return new (P || (P = Promise))(function (resolve, reject) {
5
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
- step((generator = generator.apply(thisArg, _arguments || [])).next());
9
- });
10
- };
11
- var __importDefault = (this && this.__importDefault) || function (mod) {
12
- return (mod && mod.__esModule) ? mod : { "default": mod };
13
- };
14
- Object.defineProperty(exports, "__esModule", { value: true });
15
- jest.mock('../../http', () => ({
16
- callApi: jest.fn(),
17
- }));
18
- const http_1 = require("../../http");
19
- const service_1 = __importDefault(require("./service"));
20
- const mockedCallApi = http_1.callApi;
21
- describe('OrderRoomShareService', () => {
22
- beforeEach(() => {
23
- mockedCallApi.mockReset();
24
- mockedCallApi.mockResolvedValue(undefined);
25
- });
26
- it.each([
27
- ['queryFeatureState', {}, 'query-feature-state'],
28
- ['query', { orderId: 'order-1' }, 'query'],
29
- ['batchQuery', { orderIds: ['order-1'] }, 'batch-query'],
30
- [
31
- 'save',
32
- {
33
- orderId: 'order-1',
34
- roomShareRequired: true,
35
- remark: '需要双床',
36
- operatorUnionId: 'operator-1',
37
- },
38
- 'save',
39
- ],
40
- ['queryT1Candidates', {}, 'query-t1-candidates'],
41
- ['queryT2Candidates', {}, 'query-t2-candidates'],
42
- ['getLifecycleFollowSnapshotMaxId', {}, 'get-lifecycle-follow-snapshot-max-id'],
43
- [
44
- 'pageFollowsRaw',
45
- { scope: 'PENDING', snapshotMaxId: 'ffffffffffffffffffffffff', cursor: null, limit: 100 },
46
- 'page-follows-raw',
47
- ],
48
- [
49
- 'pageFollowsRaw',
50
- {
51
- scope: 'LIFECYCLE',
52
- snapshotMaxId: 'ffffffffffffffffffffffff',
53
- cursor: '00000000000000000000000f',
54
- limit: 100,
55
- },
56
- 'page-follows-raw',
57
- ],
58
- [
59
- 'batchQueryLifecycleEligibility',
60
- { orderIds: ['order-1'] },
61
- 'batch-query-lifecycle-eligibility',
62
- ],
63
- ['reconcile', { orderId: 'order-1', expectedDeadline: 100 }, 'reconcile'],
64
- ['cleanup', { orderId: 'order-1', expectedDeadline: 100 }, 'cleanup'],
65
- ['markReminded', { orderId: 'order-1', expectedDeadline: 100 }, 'mark-reminded'],
66
- ])('%s 映射到 room-share kebab URL 并原样序列化请求', (method, request, path) => __awaiter(void 0, void 0, void 0, function* () {
67
- yield service_1.default[method](request);
68
- expect(mockedCallApi).toHaveBeenCalledWith(expect.stringMatching(new RegExp(`/room-share/${path}$`)), request);
69
- }));
70
- it('默认空请求和 ObjectId 字符串 cursor 不发生数值转换', () => __awaiter(void 0, void 0, void 0, function* () {
71
- yield service_1.default.queryT1Candidates();
72
- expect(mockedCallApi).toHaveBeenLastCalledWith(expect.any(String), {});
73
- const cursor = '00000000000000000000000f';
74
- yield service_1.default.pageFollowsRaw({
75
- scope: 'PENDING',
76
- snapshotMaxId: 'ffffffffffffffffffffffff',
77
- cursor,
78
- limit: 200,
79
- });
80
- expect(mockedCallApi.mock.calls[1][1]).toMatchObject({ scope: 'PENDING', cursor });
81
- expect(typeof mockedCallApi.mock.calls[1][1].cursor).toBe('string');
82
- }));
83
- it('二态配置和 nullable cursor 响应不做三态包装', () => __awaiter(void 0, void 0, void 0, function* () {
84
- mockedCallApi
85
- .mockResolvedValueOnce({ orderId: 'order-1', roomShareRequired: false, remark: '' })
86
- .mockResolvedValueOnce({
87
- snapshotMaxId: null,
88
- nextCursor: null,
89
- items: [],
90
- });
91
- yield expect(service_1.default.query({ orderId: 'order-1' })).resolves.toEqual({
92
- orderId: 'order-1',
93
- roomShareRequired: false,
94
- remark: '',
95
- });
96
- yield expect(service_1.default.pageFollowsRaw({
97
- scope: 'LIFECYCLE',
98
- snapshotMaxId: 'ffffffffffffffffffffffff',
99
- cursor: null,
100
- limit: 10,
101
- })).resolves.toEqual({ snapshotMaxId: null, nextCursor: null, items: [] });
102
- }));
103
- });
package/types.test.d.ts DELETED
@@ -1 +0,0 @@
1
- export {};
package/types.test.js DELETED
@@ -1,55 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const positiveAttributes = {
4
- isAutoConfirmedOrder: true,
5
- isSupplierAcknowledged: false,
6
- };
7
- const isAutoConfirmedOrder = 1;
8
- const isSupplierAcknowledged = 0;
9
- // @ts-expect-error 原始订单结构中的布尔属性统一映射为数值
10
- const invalidIsAutoConfirmedOrder = true;
11
- // These assignments and @ts-expect-error checks run through tsc/ts-jest, not just Jest assertions.
12
- const advisorShare = { advisorId: '', cardId: '', shareAt: 0 };
13
- const createScene = { scene1: '', scene2: '', appScene: 0, advisorShare };
14
- const createV2Scene = createScene;
15
- const depositScene = createScene;
16
- const completeScene = createScene;
17
- const storedScene = { appScene: 0, advisorShare: {} };
18
- const legacyScene = { scene1: '', scene2: '', appScene: 0 };
19
- const legacyStoredScene = { appScene: 0 };
20
- const optionalDepositScene = undefined;
21
- // @ts-expect-error Share timestamps must be numeric.
22
- const invalidShareAt = { shareAt: '123' };
23
- // @ts-expect-error null is not a supported share value.
24
- const invalidNullShare = { advisorId: null };
25
- // @ts-expect-error null is not a supported scene share value.
26
- const invalidSceneShare = { appScene: 0, advisorShare: null };
27
- // @ts-expect-error New order requests still require scene1.
28
- const invalidCreateScene = { scene2: '', appScene: 0 };
29
- // @ts-expect-error Deposit creation still requires scene2 if sceneInfo is present.
30
- const invalidDepositScene = { scene1: '', appScene: 0 };
31
- describe('订单场景类型', () => {
32
- it('支持空串、部分分享信息与历史订单场景', () => {
33
- expect(createV2Scene.advisorShare).toBe(advisorShare);
34
- expect(depositScene.advisorShare).toBe(advisorShare);
35
- expect(completeScene.advisorShare).toBe(advisorShare);
36
- expect(storedScene.advisorShare).toEqual({});
37
- expect(legacyScene.advisorShare).toBeUndefined();
38
- expect(legacyStoredScene.scene1).toBeUndefined();
39
- expect(optionalDepositScene).toBeUndefined();
40
- expect(invalidShareAt.shareAt).toBe('123');
41
- expect(invalidNullShare.advisorId).toBeNull();
42
- expect(invalidSceneShare.advisorShare).toBeNull();
43
- expect(invalidCreateScene.scene1).toBeUndefined();
44
- expect(invalidDepositScene.scene2).toBeUndefined();
45
- });
46
- });
47
- describe('订单属性类型', () => {
48
- it('IPositiveAttributes 声明布尔字段,IRawOrderStructure 映射为数值字段', () => {
49
- expect(positiveAttributes.isAutoConfirmedOrder).toBe(true);
50
- expect(positiveAttributes.isSupplierAcknowledged).toBe(false);
51
- expect(isAutoConfirmedOrder).toBe(1);
52
- expect(isSupplierAcknowledged).toBe(0);
53
- expect(invalidIsAutoConfirmedOrder).toBe(true);
54
- });
55
- });