@webitel/api-services 26.8.20 → 26.8.22
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/package.json
CHANGED
|
@@ -158,13 +158,13 @@ describe('queueSchema', () => {
|
|
|
158
158
|
|
|
159
159
|
/** A cleared *required* number still fails — with the rule's message, not zod's. */
|
|
160
160
|
it('reports a cleared required number as required', () => {
|
|
161
|
-
const queue = validQueueFor(QueueType.
|
|
162
|
-
set(queue, 'payload.
|
|
161
|
+
const queue = validQueueFor(QueueType.PROGRESSIVE_DIALER);
|
|
162
|
+
set(queue, 'payload.progressiveCount', null);
|
|
163
163
|
|
|
164
164
|
const result = queueSchema.safeParse(queue);
|
|
165
165
|
|
|
166
166
|
expect(issuePaths(result)).toEqual([
|
|
167
|
-
'payload.
|
|
167
|
+
'payload.progressiveCount',
|
|
168
168
|
]);
|
|
169
169
|
expect(result.error?.issues[0]).toMatchObject({
|
|
170
170
|
code: 'custom',
|
|
@@ -174,6 +174,24 @@ describe('queueSchema', () => {
|
|
|
174
174
|
});
|
|
175
175
|
});
|
|
176
176
|
|
|
177
|
+
/**
|
|
178
|
+
* Dialing numbers the legacy switch required and the backend does not.
|
|
179
|
+
* WTEL-10292, WTEL-10326
|
|
180
|
+
*/
|
|
181
|
+
const legacyRequiredNumbers = [
|
|
182
|
+
'payload.maxAttempts',
|
|
183
|
+
'payload.originateTimeout',
|
|
184
|
+
'payload.waitBetweenRetries',
|
|
185
|
+
'payload.maxWaitTime',
|
|
186
|
+
];
|
|
187
|
+
|
|
188
|
+
it.each(allQueueTypes)('lets type %i save with those cleared', (type) => {
|
|
189
|
+
const queue = validQueueFor(type);
|
|
190
|
+
for (const path of legacyRequiredNumbers) set(queue, path, null);
|
|
191
|
+
|
|
192
|
+
expect(issuePaths(queueSchema.safeParse(queue))).toEqual([]);
|
|
193
|
+
});
|
|
194
|
+
|
|
177
195
|
/**
|
|
178
196
|
* Regle builds `$fields` from state keys, so anything the defaults seed must
|
|
179
197
|
* survive the schema — a key the schema strips has no validation entry, and
|
|
@@ -12,13 +12,17 @@ export interface QueueTypeRule {
|
|
|
12
12
|
* Per-queue-type validation, transcribed from the admin app's
|
|
13
13
|
* `opened-queue.vue` `validations()` switch.
|
|
14
14
|
*
|
|
15
|
-
*
|
|
15
|
+
* Three things in here look like mistakes and are not:
|
|
16
16
|
*
|
|
17
17
|
* - `team` is commented "required" in every legacy queue schema but was never
|
|
18
18
|
* actually validated. That is preserved — adding it would start rejecting
|
|
19
19
|
* queues that save fine today.
|
|
20
20
|
* - `priority` and `payload.minOnlineAgents` carry `minValue(0)` for *all* ten
|
|
21
21
|
* types, including the ones whose form never shows `minOnlineAgents`.
|
|
22
|
+
* - `payload.originateTimeout`, `payload.waitBetweenRetries`, `payload.maxWaitTime`
|
|
23
|
+
* (WTEL-10292) and `payload.maxAttempts` (WTEL-10326) drop the legacy
|
|
24
|
+
* `required`: the backend takes a queue without them, so it only blocked
|
|
25
|
+
* saving a cleared field. Their `minValue` stays — it skips an empty value.
|
|
22
26
|
*/
|
|
23
27
|
export const sharedQueueRules: QueueTypeRule = {
|
|
24
28
|
required: [
|
|
@@ -43,7 +47,6 @@ export const queueTypeRules: Record<number, QueueTypeRule> = {
|
|
|
43
47
|
[QueueType.INBOUND_QUEUE]: {
|
|
44
48
|
required: [
|
|
45
49
|
'payload.timeBaseScore',
|
|
46
|
-
'payload.maxWaitTime',
|
|
47
50
|
],
|
|
48
51
|
minValue: {
|
|
49
52
|
'payload.maxWaitTime': 0,
|
|
@@ -55,7 +58,6 @@ export const queueTypeRules: Record<number, QueueTypeRule> = {
|
|
|
55
58
|
'strategy',
|
|
56
59
|
'calendar',
|
|
57
60
|
'schema',
|
|
58
|
-
'payload.maxAttempts',
|
|
59
61
|
'payload.resourceStrategy',
|
|
60
62
|
],
|
|
61
63
|
minValue: {
|
|
@@ -68,7 +70,6 @@ export const queueTypeRules: Record<number, QueueTypeRule> = {
|
|
|
68
70
|
required: [
|
|
69
71
|
'strategy',
|
|
70
72
|
'calendar',
|
|
71
|
-
'payload.maxAttempts',
|
|
72
73
|
'payload.resourceStrategy',
|
|
73
74
|
],
|
|
74
75
|
minValue: {
|
|
@@ -80,7 +81,6 @@ export const queueTypeRules: Record<number, QueueTypeRule> = {
|
|
|
80
81
|
required: [
|
|
81
82
|
'strategy',
|
|
82
83
|
'calendar',
|
|
83
|
-
'payload.maxAttempts',
|
|
84
84
|
'payload.resourceStrategy',
|
|
85
85
|
'payload.progressiveCount',
|
|
86
86
|
],
|
|
@@ -94,7 +94,6 @@ export const queueTypeRules: Record<number, QueueTypeRule> = {
|
|
|
94
94
|
required: [
|
|
95
95
|
'strategy',
|
|
96
96
|
'calendar',
|
|
97
|
-
'payload.maxAttempts',
|
|
98
97
|
'payload.resourceStrategy',
|
|
99
98
|
'payload.progressiveCount',
|
|
100
99
|
],
|
|
@@ -109,7 +108,6 @@ export const queueTypeRules: Record<number, QueueTypeRule> = {
|
|
|
109
108
|
required: [
|
|
110
109
|
'strategy',
|
|
111
110
|
'payload.timeBaseScore',
|
|
112
|
-
'payload.maxWaitTime',
|
|
113
111
|
],
|
|
114
112
|
minValue: {
|
|
115
113
|
'payload.maxWaitTime': 0,
|
|
@@ -121,7 +119,6 @@ export const queueTypeRules: Record<number, QueueTypeRule> = {
|
|
|
121
119
|
required: [
|
|
122
120
|
'strategy',
|
|
123
121
|
'payload.timeBaseScore',
|
|
124
|
-
'payload.maxWaitTime',
|
|
125
122
|
],
|
|
126
123
|
minValue: {
|
|
127
124
|
'payload.maxWaitTime': 0,
|
|
@@ -132,8 +129,6 @@ export const queueTypeRules: Record<number, QueueTypeRule> = {
|
|
|
132
129
|
required: [
|
|
133
130
|
'strategy',
|
|
134
131
|
'calendar',
|
|
135
|
-
'payload.maxAttempts',
|
|
136
|
-
'payload.waitBetweenRetries',
|
|
137
132
|
],
|
|
138
133
|
minValue: {
|
|
139
134
|
'payload.waitBetweenRetries': 0,
|
|
@@ -144,7 +139,6 @@ export const queueTypeRules: Record<number, QueueTypeRule> = {
|
|
|
144
139
|
'strategy',
|
|
145
140
|
'calendar',
|
|
146
141
|
'schema',
|
|
147
|
-
'payload.maxAttempts',
|
|
148
142
|
],
|
|
149
143
|
minValue: {
|
|
150
144
|
'payload.originateTimeout': 0,
|