@nice2dev/ui-tools 1.0.10
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/README.md +36 -0
- package/dist/access-control.d.ts +726 -0
- package/dist/access-control.d.ts.map +1 -0
- package/dist/accessibility-i18n.d.ts +1017 -0
- package/dist/accessibility-i18n.d.ts.map +1 -0
- package/dist/ai-assistant.d.ts +263 -0
- package/dist/ai-assistant.d.ts.map +1 -0
- package/dist/ai-playgrounds.d.ts +842 -0
- package/dist/ai-playgrounds.d.ts.map +1 -0
- package/dist/alerting-incidents.d.ts +558 -0
- package/dist/alerting-incidents.d.ts.map +1 -0
- package/dist/api-designer.d.ts +1568 -0
- package/dist/api-designer.d.ts.map +1 -0
- package/dist/api-testing.d.ts +1146 -0
- package/dist/api-testing.d.ts.map +1 -0
- package/dist/apm-profiling.d.ts +656 -0
- package/dist/apm-profiling.d.ts.map +1 -0
- package/dist/artifacts.d.ts +421 -0
- package/dist/artifacts.d.ts.map +1 -0
- package/dist/audit-compliance.d.ts +752 -0
- package/dist/audit-compliance.d.ts.map +1 -0
- package/dist/certificates.d.ts +256 -0
- package/dist/certificates.d.ts.map +1 -0
- package/dist/chart-builder.d.ts +1404 -0
- package/dist/chart-builder.d.ts.map +1 -0
- package/dist/cloud-instances.d.ts +169 -0
- package/dist/cloud-instances.d.ts.map +1 -0
- package/dist/config-management.d.ts +350 -0
- package/dist/config-management.d.ts.map +1 -0
- package/dist/containers.d.ts +256 -0
- package/dist/containers.d.ts.map +1 -0
- package/dist/dashboard-designer.d.ts +1238 -0
- package/dist/dashboard-designer.d.ts.map +1 -0
- package/dist/data-management.d.ts +496 -0
- package/dist/data-management.d.ts.map +1 -0
- package/dist/data-pipeline.d.ts +1105 -0
- package/dist/data-pipeline.d.ts.map +1 -0
- package/dist/data-warehouse.d.ts +1097 -0
- package/dist/data-warehouse.d.ts.map +1 -0
- package/dist/dataset-management.d.ts +782 -0
- package/dist/dataset-management.d.ts.map +1 -0
- package/dist/db-adapters.d.ts +704 -0
- package/dist/db-adapters.d.ts.map +1 -0
- package/dist/db-admin.d.ts +699 -0
- package/dist/db-admin.d.ts.map +1 -0
- package/dist/db-designer.d.ts +366 -0
- package/dist/db-designer.d.ts.map +1 -0
- package/dist/debugger.d.ts +356 -0
- package/dist/debugger.d.ts.map +1 -0
- package/dist/device-management.d.ts +871 -0
- package/dist/device-management.d.ts.map +1 -0
- package/dist/distributed-tracing.d.ts +427 -0
- package/dist/distributed-tracing.d.ts.map +1 -0
- package/dist/dns-management.d.ts +215 -0
- package/dist/dns-management.d.ts.map +1 -0
- package/dist/download-manager.d.ts +271 -0
- package/dist/download-manager.d.ts.map +1 -0
- package/dist/download-torrent.d.ts +1062 -0
- package/dist/download-torrent.d.ts.map +1 -0
- package/dist/edge-computing.d.ts +720 -0
- package/dist/edge-computing.d.ts.map +1 -0
- package/dist/education.d.ts +1135 -0
- package/dist/education.d.ts.map +1 -0
- package/dist/email-template.d.ts +1141 -0
- package/dist/email-template.d.ts.map +1 -0
- package/dist/erp-enterprise.d.ts +1270 -0
- package/dist/erp-enterprise.d.ts.map +1 -0
- package/dist/form-builder.d.ts +1117 -0
- package/dist/form-builder.d.ts.map +1 -0
- package/dist/game-engine-advanced.d.ts +1049 -0
- package/dist/game-engine-advanced.d.ts.map +1 -0
- package/dist/git.d.ts +415 -0
- package/dist/git.d.ts.map +1 -0
- package/dist/hardware-integration.d.ts +966 -0
- package/dist/hardware-integration.d.ts.map +1 -0
- package/dist/iac.d.ts +318 -0
- package/dist/iac.d.ts.map +1 -0
- package/dist/icon-tools.d.ts +1023 -0
- package/dist/icon-tools.d.ts.map +1 -0
- package/dist/ide.d.ts +322 -0
- package/dist/ide.d.ts.map +1 -0
- package/dist/index.cjs +2 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.ts +176 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.mjs +1887 -0
- package/dist/index.mjs.map +1 -0
- package/dist/integration-platform.d.ts +857 -0
- package/dist/integration-platform.d.ts.map +1 -0
- package/dist/kubernetes.d.ts +278 -0
- package/dist/kubernetes.d.ts.map +1 -0
- package/dist/life-management.d.ts +1132 -0
- package/dist/life-management.d.ts.map +1 -0
- package/dist/log-management.d.ts +473 -0
- package/dist/log-management.d.ts.map +1 -0
- package/dist/mathematics.d.ts +870 -0
- package/dist/mathematics.d.ts.map +1 -0
- package/dist/message-queue.d.ts +1006 -0
- package/dist/message-queue.d.ts.map +1 -0
- package/dist/metrics-dashboard.d.ts +596 -0
- package/dist/metrics-dashboard.d.ts.map +1 -0
- package/dist/mobile-components.d.ts +766 -0
- package/dist/mobile-components.d.ts.map +1 -0
- package/dist/model-deployment.d.ts +787 -0
- package/dist/model-deployment.d.ts.map +1 -0
- package/dist/model-registry.d.ts +740 -0
- package/dist/model-registry.d.ts.map +1 -0
- package/dist/model-training.d.ts +706 -0
- package/dist/model-training.d.ts.map +1 -0
- package/dist/network-config.d.ts +334 -0
- package/dist/network-config.d.ts.map +1 -0
- package/dist/network-monitoring.d.ts +291 -0
- package/dist/network-monitoring.d.ts.map +1 -0
- package/dist/pdf-tools.d.ts +1003 -0
- package/dist/pdf-tools.d.ts.map +1 -0
- package/dist/pipelines.d.ts +250 -0
- package/dist/pipelines.d.ts.map +1 -0
- package/dist/remote-desktop.d.ts +207 -0
- package/dist/remote-desktop.d.ts.map +1 -0
- package/dist/report-designer.d.ts +1153 -0
- package/dist/report-designer.d.ts.map +1 -0
- package/dist/scada-industrial.d.ts +848 -0
- package/dist/scada-industrial.d.ts.map +1 -0
- package/dist/scientific-research.d.ts +1149 -0
- package/dist/scientific-research.d.ts.map +1 -0
- package/dist/secret-management.d.ts +617 -0
- package/dist/secret-management.d.ts.map +1 -0
- package/dist/security-scanning.d.ts +714 -0
- package/dist/security-scanning.d.ts.map +1 -0
- package/dist/self-service-analytics.d.ts +1208 -0
- package/dist/self-service-analytics.d.ts.map +1 -0
- package/dist/sensor-dashboard.d.ts +845 -0
- package/dist/sensor-dashboard.d.ts.map +1 -0
- package/dist/server-management.d.ts +331 -0
- package/dist/server-management.d.ts.map +1 -0
- package/dist/smart-home.d.ts +861 -0
- package/dist/smart-home.d.ts.map +1 -0
- package/dist/spreadsheet.d.ts +1043 -0
- package/dist/spreadsheet.d.ts.map +1 -0
- package/dist/sql-editor.d.ts +402 -0
- package/dist/sql-editor.d.ts.map +1 -0
- package/dist/terminal.d.ts +245 -0
- package/dist/terminal.d.ts.map +1 -0
- package/dist/testing-qa.d.ts +1013 -0
- package/dist/testing-qa.d.ts.map +1 -0
- package/dist/torrent-client.d.ts +298 -0
- package/dist/torrent-client.d.ts.map +1 -0
- package/dist/traceless.d.ts +759 -0
- package/dist/traceless.d.ts.map +1 -0
- package/dist/virtual-machines.d.ts +199 -0
- package/dist/virtual-machines.d.ts.map +1 -0
- package/dist/visual-scripting.d.ts +381 -0
- package/dist/visual-scripting.d.ts.map +1 -0
- package/dist/word-processor.d.ts +1124 -0
- package/dist/word-processor.d.ts.map +1 -0
- package/dist/workspace.d.ts +333 -0
- package/dist/workspace.d.ts.map +1 -0
- package/package.json +62 -0
|
@@ -0,0 +1,1013 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file testing-qa.ts
|
|
3
|
+
* @module @nice2dev/ui-tools
|
|
4
|
+
* @description PRO-24 — Testing & QA
|
|
5
|
+
*
|
|
6
|
+
* Types for test management, visual testing, performance testing,
|
|
7
|
+
* and API contract testing.
|
|
8
|
+
*/
|
|
9
|
+
/** Test status */
|
|
10
|
+
export type TestStatus = 'not_run' | 'passed' | 'failed' | 'blocked' | 'skipped' | 'in_progress';
|
|
11
|
+
/** Test priority */
|
|
12
|
+
export type TestPriority = 'critical' | 'high' | 'medium' | 'low';
|
|
13
|
+
/** Test type */
|
|
14
|
+
export type TestType = 'functional' | 'regression' | 'smoke' | 'integration' | 'e2e' | 'performance' | 'security' | 'exploratory' | 'acceptance';
|
|
15
|
+
/** Test manager config */
|
|
16
|
+
export interface TestManagerConfig {
|
|
17
|
+
project: TestProject;
|
|
18
|
+
features?: TestFeatures;
|
|
19
|
+
integrations?: TestIntegrations;
|
|
20
|
+
reporting?: TestReporting;
|
|
21
|
+
}
|
|
22
|
+
/** Test project */
|
|
23
|
+
export interface TestProject {
|
|
24
|
+
id: string;
|
|
25
|
+
name: string;
|
|
26
|
+
description?: string;
|
|
27
|
+
prefix?: string;
|
|
28
|
+
defaultPriority?: TestPriority;
|
|
29
|
+
statuses?: CustomTestStatus[];
|
|
30
|
+
customFields?: CustomField[];
|
|
31
|
+
}
|
|
32
|
+
/** Custom test status */
|
|
33
|
+
export interface CustomTestStatus {
|
|
34
|
+
id: string;
|
|
35
|
+
name: string;
|
|
36
|
+
color: string;
|
|
37
|
+
isFinal?: boolean;
|
|
38
|
+
isDefault?: boolean;
|
|
39
|
+
}
|
|
40
|
+
/** Custom field */
|
|
41
|
+
export interface CustomField {
|
|
42
|
+
id: string;
|
|
43
|
+
name: string;
|
|
44
|
+
type: CustomFieldType;
|
|
45
|
+
required?: boolean;
|
|
46
|
+
options?: string[];
|
|
47
|
+
default?: unknown;
|
|
48
|
+
}
|
|
49
|
+
/** Custom field type */
|
|
50
|
+
export type CustomFieldType = 'text' | 'number' | 'date' | 'select' | 'multiselect' | 'checkbox' | 'url' | 'user';
|
|
51
|
+
/** Test features */
|
|
52
|
+
export interface TestFeatures {
|
|
53
|
+
testCases?: boolean;
|
|
54
|
+
testSuites?: boolean;
|
|
55
|
+
testPlans?: boolean;
|
|
56
|
+
testRuns?: boolean;
|
|
57
|
+
defectTracking?: boolean;
|
|
58
|
+
requirementsCoverage?: boolean;
|
|
59
|
+
exploratoryTesting?: boolean;
|
|
60
|
+
importExport?: boolean;
|
|
61
|
+
}
|
|
62
|
+
/** Test integrations */
|
|
63
|
+
export interface TestIntegrations {
|
|
64
|
+
jira?: JiraIntegration;
|
|
65
|
+
github?: GitHubIntegration;
|
|
66
|
+
azure?: AzureDevOpsIntegration;
|
|
67
|
+
selenium?: SeleniumIntegration;
|
|
68
|
+
cypress?: CypressIntegration;
|
|
69
|
+
playwright?: PlaywrightIntegration;
|
|
70
|
+
}
|
|
71
|
+
/** Jira integration */
|
|
72
|
+
export interface JiraIntegration {
|
|
73
|
+
enabled: boolean;
|
|
74
|
+
url?: string;
|
|
75
|
+
projectKey?: string;
|
|
76
|
+
issueTypes?: string[];
|
|
77
|
+
syncDefects?: boolean;
|
|
78
|
+
syncRequirements?: boolean;
|
|
79
|
+
}
|
|
80
|
+
/** GitHub integration */
|
|
81
|
+
export interface GitHubIntegration {
|
|
82
|
+
enabled: boolean;
|
|
83
|
+
repository?: string;
|
|
84
|
+
syncIssues?: boolean;
|
|
85
|
+
syncPRs?: boolean;
|
|
86
|
+
}
|
|
87
|
+
/** Azure DevOps integration */
|
|
88
|
+
export interface AzureDevOpsIntegration {
|
|
89
|
+
enabled: boolean;
|
|
90
|
+
organization?: string;
|
|
91
|
+
project?: string;
|
|
92
|
+
syncWorkItems?: boolean;
|
|
93
|
+
}
|
|
94
|
+
/** Selenium integration */
|
|
95
|
+
export interface SeleniumIntegration {
|
|
96
|
+
enabled: boolean;
|
|
97
|
+
gridUrl?: string;
|
|
98
|
+
capabilities?: Record<string, unknown>;
|
|
99
|
+
}
|
|
100
|
+
/** Cypress integration */
|
|
101
|
+
export interface CypressIntegration {
|
|
102
|
+
enabled: boolean;
|
|
103
|
+
dashboardKey?: string;
|
|
104
|
+
recordKey?: string;
|
|
105
|
+
}
|
|
106
|
+
/** Playwright integration */
|
|
107
|
+
export interface PlaywrightIntegration {
|
|
108
|
+
enabled: boolean;
|
|
109
|
+
reportServer?: string;
|
|
110
|
+
}
|
|
111
|
+
/** Test reporting */
|
|
112
|
+
export interface TestReporting {
|
|
113
|
+
enabled?: boolean;
|
|
114
|
+
formats?: ReportFormat[];
|
|
115
|
+
schedule?: ReportSchedule;
|
|
116
|
+
recipients?: string[];
|
|
117
|
+
}
|
|
118
|
+
/** Report format */
|
|
119
|
+
export type ReportFormat = 'html' | 'pdf' | 'excel' | 'json' | 'junit';
|
|
120
|
+
/** Report schedule */
|
|
121
|
+
export interface ReportSchedule {
|
|
122
|
+
type: 'daily' | 'weekly' | 'after_run' | 'manual';
|
|
123
|
+
dayOfWeek?: number;
|
|
124
|
+
time?: string;
|
|
125
|
+
}
|
|
126
|
+
/** Test case */
|
|
127
|
+
export interface TestCase {
|
|
128
|
+
id: string;
|
|
129
|
+
key: string;
|
|
130
|
+
title: string;
|
|
131
|
+
description?: string;
|
|
132
|
+
preconditions?: string;
|
|
133
|
+
steps: TestStep[];
|
|
134
|
+
expectedResult?: string;
|
|
135
|
+
priority: TestPriority;
|
|
136
|
+
type: TestType;
|
|
137
|
+
status: TestCaseStatus;
|
|
138
|
+
automationStatus?: AutomationStatus;
|
|
139
|
+
labels?: string[];
|
|
140
|
+
component?: string;
|
|
141
|
+
folder?: string;
|
|
142
|
+
author?: string;
|
|
143
|
+
assignee?: string;
|
|
144
|
+
estimate?: number;
|
|
145
|
+
customFields?: Record<string, unknown>;
|
|
146
|
+
attachments?: TestAttachment[];
|
|
147
|
+
links?: TestLink[];
|
|
148
|
+
createdAt: Date;
|
|
149
|
+
updatedAt: Date;
|
|
150
|
+
version?: number;
|
|
151
|
+
}
|
|
152
|
+
/** Test case status */
|
|
153
|
+
export type TestCaseStatus = 'draft' | 'approved' | 'deprecated' | 'archived';
|
|
154
|
+
/** Automation status */
|
|
155
|
+
export type AutomationStatus = 'not_automated' | 'automated' | 'needs_update' | 'cannot_automate';
|
|
156
|
+
/** Test step */
|
|
157
|
+
export interface TestStep {
|
|
158
|
+
id: string;
|
|
159
|
+
order: number;
|
|
160
|
+
action: string;
|
|
161
|
+
expectedResult?: string;
|
|
162
|
+
data?: string;
|
|
163
|
+
attachments?: TestAttachment[];
|
|
164
|
+
}
|
|
165
|
+
/** Test attachment */
|
|
166
|
+
export interface TestAttachment {
|
|
167
|
+
id: string;
|
|
168
|
+
name: string;
|
|
169
|
+
type: string;
|
|
170
|
+
size: number;
|
|
171
|
+
url: string;
|
|
172
|
+
uploadedAt: Date;
|
|
173
|
+
}
|
|
174
|
+
/** Test link */
|
|
175
|
+
export interface TestLink {
|
|
176
|
+
id: string;
|
|
177
|
+
type: TestLinkType;
|
|
178
|
+
targetId: string;
|
|
179
|
+
targetKey?: string;
|
|
180
|
+
targetTitle?: string;
|
|
181
|
+
url?: string;
|
|
182
|
+
}
|
|
183
|
+
/** Test link type */
|
|
184
|
+
export type TestLinkType = 'requirement' | 'defect' | 'test_case' | 'story' | 'epic' | 'external';
|
|
185
|
+
/** Test suite */
|
|
186
|
+
export interface TestSuite {
|
|
187
|
+
id: string;
|
|
188
|
+
name: string;
|
|
189
|
+
description?: string;
|
|
190
|
+
parentId?: string;
|
|
191
|
+
testCases: string[];
|
|
192
|
+
order?: number;
|
|
193
|
+
metadata?: SuiteMetadata;
|
|
194
|
+
createdAt: Date;
|
|
195
|
+
updatedAt: Date;
|
|
196
|
+
}
|
|
197
|
+
/** Suite metadata */
|
|
198
|
+
export interface SuiteMetadata {
|
|
199
|
+
owner?: string;
|
|
200
|
+
tags?: string[];
|
|
201
|
+
environment?: string;
|
|
202
|
+
browser?: string;
|
|
203
|
+
}
|
|
204
|
+
/** Test suite tree */
|
|
205
|
+
export interface TestSuiteTree {
|
|
206
|
+
id: string;
|
|
207
|
+
name: string;
|
|
208
|
+
testCaseCount: number;
|
|
209
|
+
children: TestSuiteTree[];
|
|
210
|
+
}
|
|
211
|
+
/** Test plan */
|
|
212
|
+
export interface TestPlan {
|
|
213
|
+
id: string;
|
|
214
|
+
name: string;
|
|
215
|
+
description?: string;
|
|
216
|
+
objective?: string;
|
|
217
|
+
scope?: TestScope;
|
|
218
|
+
schedule?: TestPlanSchedule;
|
|
219
|
+
environment?: TestEnvironment;
|
|
220
|
+
entries: TestPlanEntry[];
|
|
221
|
+
status: TestPlanStatus;
|
|
222
|
+
milestone?: string;
|
|
223
|
+
release?: string;
|
|
224
|
+
owner?: string;
|
|
225
|
+
team?: string[];
|
|
226
|
+
createdAt: Date;
|
|
227
|
+
updatedAt: Date;
|
|
228
|
+
}
|
|
229
|
+
/** Test scope */
|
|
230
|
+
export interface TestScope {
|
|
231
|
+
included?: string[];
|
|
232
|
+
excluded?: string[];
|
|
233
|
+
riskyAreas?: string[];
|
|
234
|
+
}
|
|
235
|
+
/** Test plan schedule */
|
|
236
|
+
export interface TestPlanSchedule {
|
|
237
|
+
startDate?: Date;
|
|
238
|
+
endDate?: Date;
|
|
239
|
+
estimatedHours?: number;
|
|
240
|
+
}
|
|
241
|
+
/** Test environment */
|
|
242
|
+
export interface TestEnvironment {
|
|
243
|
+
name: string;
|
|
244
|
+
url?: string;
|
|
245
|
+
database?: string;
|
|
246
|
+
config?: Record<string, string>;
|
|
247
|
+
}
|
|
248
|
+
/** Test plan entry */
|
|
249
|
+
export interface TestPlanEntry {
|
|
250
|
+
id: string;
|
|
251
|
+
type: 'suite' | 'case';
|
|
252
|
+
suiteId?: string;
|
|
253
|
+
caseId?: string;
|
|
254
|
+
assignee?: string;
|
|
255
|
+
configurations?: TestConfiguration[];
|
|
256
|
+
}
|
|
257
|
+
/** Test configuration */
|
|
258
|
+
export interface TestConfiguration {
|
|
259
|
+
id: string;
|
|
260
|
+
name: string;
|
|
261
|
+
browser?: string;
|
|
262
|
+
os?: string;
|
|
263
|
+
device?: string;
|
|
264
|
+
locale?: string;
|
|
265
|
+
}
|
|
266
|
+
/** Test plan status */
|
|
267
|
+
export type TestPlanStatus = 'draft' | 'active' | 'completed' | 'archived';
|
|
268
|
+
/** Test run */
|
|
269
|
+
export interface TestRun {
|
|
270
|
+
id: string;
|
|
271
|
+
name: string;
|
|
272
|
+
planId?: string;
|
|
273
|
+
description?: string;
|
|
274
|
+
environment: TestEnvironment;
|
|
275
|
+
configuration?: TestConfiguration;
|
|
276
|
+
status: TestRunStatus;
|
|
277
|
+
executor?: string;
|
|
278
|
+
startedAt?: Date;
|
|
279
|
+
completedAt?: Date;
|
|
280
|
+
results: TestResult[];
|
|
281
|
+
summary?: TestRunSummary;
|
|
282
|
+
defectsFound?: string[];
|
|
283
|
+
notes?: string;
|
|
284
|
+
}
|
|
285
|
+
/** Test run status */
|
|
286
|
+
export type TestRunStatus = 'not_started' | 'in_progress' | 'completed' | 'aborted';
|
|
287
|
+
/** Test result */
|
|
288
|
+
export interface TestResult {
|
|
289
|
+
id: string;
|
|
290
|
+
testCaseId: string;
|
|
291
|
+
testCaseKey: string;
|
|
292
|
+
status: TestStatus;
|
|
293
|
+
stepResults?: StepResult[];
|
|
294
|
+
duration?: number;
|
|
295
|
+
executedAt?: Date;
|
|
296
|
+
executedBy?: string;
|
|
297
|
+
defects?: string[];
|
|
298
|
+
comment?: string;
|
|
299
|
+
attachments?: TestAttachment[];
|
|
300
|
+
automationResult?: AutomationResult;
|
|
301
|
+
}
|
|
302
|
+
/** Step result */
|
|
303
|
+
export interface StepResult {
|
|
304
|
+
stepId: string;
|
|
305
|
+
status: TestStatus;
|
|
306
|
+
actualResult?: string;
|
|
307
|
+
comment?: string;
|
|
308
|
+
attachments?: TestAttachment[];
|
|
309
|
+
}
|
|
310
|
+
/** Automation result */
|
|
311
|
+
export interface AutomationResult {
|
|
312
|
+
tool: string;
|
|
313
|
+
runId?: string;
|
|
314
|
+
logs?: string;
|
|
315
|
+
screenshots?: string[];
|
|
316
|
+
video?: string;
|
|
317
|
+
trace?: string;
|
|
318
|
+
}
|
|
319
|
+
/** Test run summary */
|
|
320
|
+
export interface TestRunSummary {
|
|
321
|
+
total: number;
|
|
322
|
+
passed: number;
|
|
323
|
+
failed: number;
|
|
324
|
+
blocked: number;
|
|
325
|
+
skipped: number;
|
|
326
|
+
notRun: number;
|
|
327
|
+
passRate: number;
|
|
328
|
+
duration?: number;
|
|
329
|
+
}
|
|
330
|
+
/** Test defect */
|
|
331
|
+
export interface TestDefect {
|
|
332
|
+
id: string;
|
|
333
|
+
key: string;
|
|
334
|
+
title: string;
|
|
335
|
+
description?: string;
|
|
336
|
+
status: DefectStatus;
|
|
337
|
+
priority: TestPriority;
|
|
338
|
+
severity: DefectSeverity;
|
|
339
|
+
stepsToReproduce?: string;
|
|
340
|
+
environment?: string;
|
|
341
|
+
assignee?: string;
|
|
342
|
+
reporter?: string;
|
|
343
|
+
linkedTests: string[];
|
|
344
|
+
attachments?: TestAttachment[];
|
|
345
|
+
externalId?: string;
|
|
346
|
+
externalUrl?: string;
|
|
347
|
+
createdAt: Date;
|
|
348
|
+
updatedAt: Date;
|
|
349
|
+
resolvedAt?: Date;
|
|
350
|
+
}
|
|
351
|
+
/** Defect status */
|
|
352
|
+
export type DefectStatus = 'new' | 'open' | 'in_progress' | 'fixed' | 'verified' | 'closed' | 'rejected' | 'deferred';
|
|
353
|
+
/** Defect severity */
|
|
354
|
+
export type DefectSeverity = 'blocker' | 'critical' | 'major' | 'minor' | 'trivial';
|
|
355
|
+
/** Coverage matrix config */
|
|
356
|
+
export interface CoverageMatrixConfig {
|
|
357
|
+
requirements: RequirementSource;
|
|
358
|
+
testCases: TestCaseSource;
|
|
359
|
+
display?: MatrixDisplay;
|
|
360
|
+
}
|
|
361
|
+
/** Requirement source */
|
|
362
|
+
export interface RequirementSource {
|
|
363
|
+
type: 'jira' | 'azure' | 'csv' | 'manual';
|
|
364
|
+
filter?: string;
|
|
365
|
+
fields?: string[];
|
|
366
|
+
}
|
|
367
|
+
/** Test case source */
|
|
368
|
+
export interface TestCaseSource {
|
|
369
|
+
suites?: string[];
|
|
370
|
+
labels?: string[];
|
|
371
|
+
types?: TestType[];
|
|
372
|
+
}
|
|
373
|
+
/** Matrix display */
|
|
374
|
+
export interface MatrixDisplay {
|
|
375
|
+
groupBy?: 'requirement' | 'feature' | 'epic';
|
|
376
|
+
showStatus?: boolean;
|
|
377
|
+
showLastRun?: boolean;
|
|
378
|
+
}
|
|
379
|
+
/** Coverage report */
|
|
380
|
+
export interface CoverageReport {
|
|
381
|
+
summary: CoverageSummary;
|
|
382
|
+
requirements: RequirementCoverage[];
|
|
383
|
+
gaps: CoverageGap[];
|
|
384
|
+
generatedAt: Date;
|
|
385
|
+
}
|
|
386
|
+
/** Coverage summary */
|
|
387
|
+
export interface CoverageSummary {
|
|
388
|
+
totalRequirements: number;
|
|
389
|
+
coveredRequirements: number;
|
|
390
|
+
coveragePercentage: number;
|
|
391
|
+
passedRequirements: number;
|
|
392
|
+
failedRequirements: number;
|
|
393
|
+
}
|
|
394
|
+
/** Requirement coverage */
|
|
395
|
+
export interface RequirementCoverage {
|
|
396
|
+
requirementId: string;
|
|
397
|
+
requirementKey: string;
|
|
398
|
+
requirementTitle: string;
|
|
399
|
+
testCases: TestCaseCoverage[];
|
|
400
|
+
coverageStatus: CoverageStatus;
|
|
401
|
+
}
|
|
402
|
+
/** Test case coverage */
|
|
403
|
+
export interface TestCaseCoverage {
|
|
404
|
+
testCaseId: string;
|
|
405
|
+
testCaseKey: string;
|
|
406
|
+
lastResult?: TestStatus;
|
|
407
|
+
lastRunDate?: Date;
|
|
408
|
+
}
|
|
409
|
+
/** Coverage status */
|
|
410
|
+
export type CoverageStatus = 'covered_pass' | 'covered_fail' | 'covered_not_run' | 'not_covered';
|
|
411
|
+
/** Coverage gap */
|
|
412
|
+
export interface CoverageGap {
|
|
413
|
+
requirementId: string;
|
|
414
|
+
requirementKey: string;
|
|
415
|
+
reason: 'no_tests' | 'all_failed' | 'not_run';
|
|
416
|
+
recommendation?: string;
|
|
417
|
+
}
|
|
418
|
+
/** Exploratory session */
|
|
419
|
+
export interface ExploratorySession {
|
|
420
|
+
id: string;
|
|
421
|
+
charter: SessionCharter;
|
|
422
|
+
tester: string;
|
|
423
|
+
status: SessionStatus;
|
|
424
|
+
startedAt: Date;
|
|
425
|
+
endedAt?: Date;
|
|
426
|
+
duration?: number;
|
|
427
|
+
notes: SessionNote[];
|
|
428
|
+
findings: SessionFinding[];
|
|
429
|
+
metrics?: SessionMetrics;
|
|
430
|
+
}
|
|
431
|
+
/** Session charter */
|
|
432
|
+
export interface SessionCharter {
|
|
433
|
+
title: string;
|
|
434
|
+
mission: string;
|
|
435
|
+
areas?: string[];
|
|
436
|
+
risks?: string[];
|
|
437
|
+
timeBox?: number;
|
|
438
|
+
}
|
|
439
|
+
/** Session status */
|
|
440
|
+
export type SessionStatus = 'planned' | 'in_progress' | 'paused' | 'completed' | 'cancelled';
|
|
441
|
+
/** Session note */
|
|
442
|
+
export interface SessionNote {
|
|
443
|
+
id: string;
|
|
444
|
+
timestamp: Date;
|
|
445
|
+
type: NoteType;
|
|
446
|
+
content: string;
|
|
447
|
+
screenshot?: string;
|
|
448
|
+
}
|
|
449
|
+
/** Note type */
|
|
450
|
+
export type NoteType = 'observation' | 'question' | 'idea' | 'issue' | 'positive';
|
|
451
|
+
/** Session finding */
|
|
452
|
+
export interface SessionFinding {
|
|
453
|
+
id: string;
|
|
454
|
+
type: FindingType;
|
|
455
|
+
title: string;
|
|
456
|
+
description: string;
|
|
457
|
+
severity?: DefectSeverity;
|
|
458
|
+
screenshots?: string[];
|
|
459
|
+
linkedDefect?: string;
|
|
460
|
+
}
|
|
461
|
+
/** Finding type */
|
|
462
|
+
export type FindingType = 'bug' | 'improvement' | 'question' | 'risk';
|
|
463
|
+
/** Session metrics */
|
|
464
|
+
export interface SessionMetrics {
|
|
465
|
+
areasExplored: number;
|
|
466
|
+
bugsFound: number;
|
|
467
|
+
questionsRaised: number;
|
|
468
|
+
testIdeasGenerated: number;
|
|
469
|
+
coverage?: number;
|
|
470
|
+
}
|
|
471
|
+
/** Visual test config */
|
|
472
|
+
export interface VisualTestConfig {
|
|
473
|
+
project: VisualProject;
|
|
474
|
+
capture?: CaptureConfig;
|
|
475
|
+
comparison?: ComparisonConfig;
|
|
476
|
+
approval?: ApprovalConfig;
|
|
477
|
+
ci?: VisualCIConfig;
|
|
478
|
+
}
|
|
479
|
+
/** Visual project */
|
|
480
|
+
export interface VisualProject {
|
|
481
|
+
id: string;
|
|
482
|
+
name: string;
|
|
483
|
+
baselineUrl?: string;
|
|
484
|
+
branches?: BranchConfig;
|
|
485
|
+
}
|
|
486
|
+
/** Branch config */
|
|
487
|
+
export interface BranchConfig {
|
|
488
|
+
main: string;
|
|
489
|
+
baselineBranch?: string;
|
|
490
|
+
featureBranches?: boolean;
|
|
491
|
+
}
|
|
492
|
+
/** Capture config */
|
|
493
|
+
export interface CaptureConfig {
|
|
494
|
+
fullPage?: boolean;
|
|
495
|
+
selector?: string;
|
|
496
|
+
hideSelectors?: string[];
|
|
497
|
+
removeSelectors?: string[];
|
|
498
|
+
waitForSelector?: string;
|
|
499
|
+
waitForTimeout?: number;
|
|
500
|
+
animations?: 'disabled' | 'allow';
|
|
501
|
+
caret?: 'hide' | 'initial';
|
|
502
|
+
}
|
|
503
|
+
/** Comparison config */
|
|
504
|
+
export interface ComparisonConfig {
|
|
505
|
+
algorithm: ComparisonAlgorithm;
|
|
506
|
+
threshold?: number;
|
|
507
|
+
ignoreRegions?: IgnoreRegion[];
|
|
508
|
+
ignoreColors?: boolean;
|
|
509
|
+
ignoreAntialiasing?: boolean;
|
|
510
|
+
sensitivity?: VisualSensitivity;
|
|
511
|
+
}
|
|
512
|
+
/** Comparison algorithm */
|
|
513
|
+
export type ComparisonAlgorithm = 'pixel' | 'perceptual' | 'structural';
|
|
514
|
+
/** Ignore region */
|
|
515
|
+
export interface IgnoreRegion {
|
|
516
|
+
type: 'selector' | 'coordinates';
|
|
517
|
+
selector?: string;
|
|
518
|
+
x?: number;
|
|
519
|
+
y?: number;
|
|
520
|
+
width?: number;
|
|
521
|
+
height?: number;
|
|
522
|
+
}
|
|
523
|
+
/** Visual sensitivity */
|
|
524
|
+
export type VisualSensitivity = 'strict' | 'balanced' | 'relaxed';
|
|
525
|
+
/** Approval config */
|
|
526
|
+
export interface ApprovalConfig {
|
|
527
|
+
autoApprove?: boolean;
|
|
528
|
+
reviewers?: string[];
|
|
529
|
+
requireApproval?: boolean;
|
|
530
|
+
}
|
|
531
|
+
/** Visual CI config */
|
|
532
|
+
export interface VisualCIConfig {
|
|
533
|
+
failOnDiff?: boolean;
|
|
534
|
+
failThreshold?: number;
|
|
535
|
+
reportFormat?: string;
|
|
536
|
+
artifactsPath?: string;
|
|
537
|
+
}
|
|
538
|
+
/** Visual snapshot */
|
|
539
|
+
export interface VisualSnapshot {
|
|
540
|
+
id: string;
|
|
541
|
+
name: string;
|
|
542
|
+
url: string;
|
|
543
|
+
viewport: Viewport;
|
|
544
|
+
browser?: string;
|
|
545
|
+
os?: string;
|
|
546
|
+
baseline?: SnapshotImage;
|
|
547
|
+
current?: SnapshotImage;
|
|
548
|
+
diff?: SnapshotDiff;
|
|
549
|
+
status: VisualStatus;
|
|
550
|
+
createdAt: Date;
|
|
551
|
+
reviewedAt?: Date;
|
|
552
|
+
reviewedBy?: string;
|
|
553
|
+
}
|
|
554
|
+
/** Viewport */
|
|
555
|
+
export interface Viewport {
|
|
556
|
+
width: number;
|
|
557
|
+
height: number;
|
|
558
|
+
deviceScaleFactor?: number;
|
|
559
|
+
}
|
|
560
|
+
/** Snapshot image */
|
|
561
|
+
export interface SnapshotImage {
|
|
562
|
+
url: string;
|
|
563
|
+
width: number;
|
|
564
|
+
height: number;
|
|
565
|
+
hash?: string;
|
|
566
|
+
}
|
|
567
|
+
/** Snapshot diff */
|
|
568
|
+
export interface SnapshotDiff {
|
|
569
|
+
url: string;
|
|
570
|
+
percentage: number;
|
|
571
|
+
pixelCount: number;
|
|
572
|
+
regions?: DiffRegion[];
|
|
573
|
+
}
|
|
574
|
+
/** Diff region */
|
|
575
|
+
export interface DiffRegion {
|
|
576
|
+
x: number;
|
|
577
|
+
y: number;
|
|
578
|
+
width: number;
|
|
579
|
+
height: number;
|
|
580
|
+
}
|
|
581
|
+
/** Visual status */
|
|
582
|
+
export type VisualStatus = 'new' | 'matching' | 'different' | 'approved' | 'rejected';
|
|
583
|
+
/** Visual test run */
|
|
584
|
+
export interface VisualTestRun {
|
|
585
|
+
id: string;
|
|
586
|
+
name: string;
|
|
587
|
+
branch?: string;
|
|
588
|
+
commit?: string;
|
|
589
|
+
buildId?: string;
|
|
590
|
+
status: VisualRunStatus;
|
|
591
|
+
snapshots: VisualSnapshot[];
|
|
592
|
+
summary: VisualSummary;
|
|
593
|
+
startedAt: Date;
|
|
594
|
+
completedAt?: Date;
|
|
595
|
+
}
|
|
596
|
+
/** Visual run status */
|
|
597
|
+
export type VisualRunStatus = 'running' | 'completed' | 'failed' | 'pending_approval';
|
|
598
|
+
/** Visual summary */
|
|
599
|
+
export interface VisualSummary {
|
|
600
|
+
total: number;
|
|
601
|
+
new: number;
|
|
602
|
+
matching: number;
|
|
603
|
+
different: number;
|
|
604
|
+
approved: number;
|
|
605
|
+
rejected: number;
|
|
606
|
+
}
|
|
607
|
+
/** Load test config */
|
|
608
|
+
export interface LoadTestConfig {
|
|
609
|
+
name: string;
|
|
610
|
+
description?: string;
|
|
611
|
+
target: LoadTarget;
|
|
612
|
+
scenarios: LoadScenario[];
|
|
613
|
+
loadProfile: LoadProfile;
|
|
614
|
+
thresholds?: LoadThreshold[];
|
|
615
|
+
options?: LoadOptions;
|
|
616
|
+
}
|
|
617
|
+
/** Load target */
|
|
618
|
+
export interface LoadTarget {
|
|
619
|
+
baseUrl: string;
|
|
620
|
+
headers?: Record<string, string>;
|
|
621
|
+
auth?: LoadAuth;
|
|
622
|
+
}
|
|
623
|
+
/** Load auth */
|
|
624
|
+
export interface LoadAuth {
|
|
625
|
+
type: 'basic' | 'bearer' | 'oauth2' | 'custom';
|
|
626
|
+
username?: string;
|
|
627
|
+
password?: string;
|
|
628
|
+
token?: string;
|
|
629
|
+
oauth?: OAuthConfig;
|
|
630
|
+
}
|
|
631
|
+
/** OAuth config */
|
|
632
|
+
export interface OAuthConfig {
|
|
633
|
+
tokenUrl: string;
|
|
634
|
+
clientId: string;
|
|
635
|
+
clientSecret?: string;
|
|
636
|
+
scope?: string;
|
|
637
|
+
}
|
|
638
|
+
/** Load scenario */
|
|
639
|
+
export interface LoadScenario {
|
|
640
|
+
id: string;
|
|
641
|
+
name: string;
|
|
642
|
+
weight?: number;
|
|
643
|
+
steps: LoadStep[];
|
|
644
|
+
think?: ThinkTime;
|
|
645
|
+
}
|
|
646
|
+
/** Load step */
|
|
647
|
+
export interface LoadStep {
|
|
648
|
+
id: string;
|
|
649
|
+
type: LoadStepType;
|
|
650
|
+
name: string;
|
|
651
|
+
request?: LoadRequest;
|
|
652
|
+
wait?: number;
|
|
653
|
+
condition?: LoadCondition;
|
|
654
|
+
loop?: LoadLoop;
|
|
655
|
+
}
|
|
656
|
+
/** Load step type */
|
|
657
|
+
export type LoadStepType = 'http' | 'websocket' | 'grpc' | 'wait' | 'group' | 'transaction';
|
|
658
|
+
/** Load request */
|
|
659
|
+
export interface LoadRequest {
|
|
660
|
+
method: HttpMethod;
|
|
661
|
+
url: string;
|
|
662
|
+
headers?: Record<string, string>;
|
|
663
|
+
body?: string | Record<string, unknown>;
|
|
664
|
+
contentType?: string;
|
|
665
|
+
timeout?: number;
|
|
666
|
+
followRedirects?: boolean;
|
|
667
|
+
captures?: LoadCapture[];
|
|
668
|
+
checks?: LoadCheck[];
|
|
669
|
+
}
|
|
670
|
+
/** HTTP method */
|
|
671
|
+
export type HttpMethod = 'GET' | 'POST' | 'PUT' | 'PATCH' | 'DELETE' | 'HEAD' | 'OPTIONS';
|
|
672
|
+
/** Load capture */
|
|
673
|
+
export interface LoadCapture {
|
|
674
|
+
name: string;
|
|
675
|
+
source: 'body' | 'header' | 'json' | 'regex';
|
|
676
|
+
path?: string;
|
|
677
|
+
pattern?: string;
|
|
678
|
+
}
|
|
679
|
+
/** Load check */
|
|
680
|
+
export interface LoadCheck {
|
|
681
|
+
type: 'status' | 'body' | 'header' | 'json' | 'duration';
|
|
682
|
+
condition: CheckCondition;
|
|
683
|
+
value: string | number;
|
|
684
|
+
path?: string;
|
|
685
|
+
}
|
|
686
|
+
/** Check condition */
|
|
687
|
+
export type CheckCondition = 'equals' | 'not_equals' | 'contains' | 'not_contains' | 'lt' | 'lte' | 'gt' | 'gte' | 'regex';
|
|
688
|
+
/** Load condition */
|
|
689
|
+
export interface LoadCondition {
|
|
690
|
+
variable: string;
|
|
691
|
+
condition: CheckCondition;
|
|
692
|
+
value: string | number;
|
|
693
|
+
}
|
|
694
|
+
/** Load loop */
|
|
695
|
+
export interface LoadLoop {
|
|
696
|
+
count?: number;
|
|
697
|
+
duration?: number;
|
|
698
|
+
dataSource?: string;
|
|
699
|
+
}
|
|
700
|
+
/** Think time */
|
|
701
|
+
export interface ThinkTime {
|
|
702
|
+
type: 'fixed' | 'random' | 'normal';
|
|
703
|
+
min?: number;
|
|
704
|
+
max?: number;
|
|
705
|
+
average?: number;
|
|
706
|
+
stddev?: number;
|
|
707
|
+
}
|
|
708
|
+
/** Load profile */
|
|
709
|
+
export interface LoadProfile {
|
|
710
|
+
type: LoadProfileType;
|
|
711
|
+
stages: LoadStage[];
|
|
712
|
+
}
|
|
713
|
+
/** Load profile type */
|
|
714
|
+
export type LoadProfileType = 'constant' | 'ramp' | 'spike' | 'stress' | 'soak';
|
|
715
|
+
/** Load stage */
|
|
716
|
+
export interface LoadStage {
|
|
717
|
+
duration: number;
|
|
718
|
+
target: number;
|
|
719
|
+
rampUp?: number;
|
|
720
|
+
}
|
|
721
|
+
/** Load threshold */
|
|
722
|
+
export interface LoadThreshold {
|
|
723
|
+
metric: LoadMetric;
|
|
724
|
+
condition: ThresholdCondition;
|
|
725
|
+
abortOnFail?: boolean;
|
|
726
|
+
}
|
|
727
|
+
/** Load metric */
|
|
728
|
+
export type LoadMetric = 'response_time_avg' | 'response_time_p95' | 'response_time_p99' | 'error_rate' | 'throughput' | 'active_users' | 'custom';
|
|
729
|
+
/** Threshold condition */
|
|
730
|
+
export interface ThresholdCondition {
|
|
731
|
+
operator: 'lt' | 'lte' | 'gt' | 'gte' | 'eq';
|
|
732
|
+
value: number;
|
|
733
|
+
aggregation?: 'avg' | 'min' | 'max' | 'p95' | 'p99';
|
|
734
|
+
}
|
|
735
|
+
/** Load options */
|
|
736
|
+
export interface LoadOptions {
|
|
737
|
+
maxVUs?: number;
|
|
738
|
+
iterations?: number;
|
|
739
|
+
duration?: number;
|
|
740
|
+
setupTimeout?: number;
|
|
741
|
+
teardownTimeout?: number;
|
|
742
|
+
gracefulStop?: number;
|
|
743
|
+
noConnectionReuse?: boolean;
|
|
744
|
+
}
|
|
745
|
+
/** Load test result */
|
|
746
|
+
export interface LoadTestResult {
|
|
747
|
+
id: string;
|
|
748
|
+
testId: string;
|
|
749
|
+
name: string;
|
|
750
|
+
status: LoadTestStatus;
|
|
751
|
+
startedAt: Date;
|
|
752
|
+
completedAt?: Date;
|
|
753
|
+
duration?: number;
|
|
754
|
+
summary: LoadResultSummary;
|
|
755
|
+
metrics: LoadMetrics;
|
|
756
|
+
timeline: LoadTimelinePoint[];
|
|
757
|
+
errors: LoadError[];
|
|
758
|
+
thresholdResults?: ThresholdResult[];
|
|
759
|
+
}
|
|
760
|
+
/** Load test status */
|
|
761
|
+
export type LoadTestStatus = 'running' | 'completed' | 'failed' | 'aborted';
|
|
762
|
+
/** Load result summary */
|
|
763
|
+
export interface LoadResultSummary {
|
|
764
|
+
totalRequests: number;
|
|
765
|
+
successfulRequests: number;
|
|
766
|
+
failedRequests: number;
|
|
767
|
+
avgResponseTime: number;
|
|
768
|
+
p95ResponseTime: number;
|
|
769
|
+
p99ResponseTime: number;
|
|
770
|
+
minResponseTime: number;
|
|
771
|
+
maxResponseTime: number;
|
|
772
|
+
throughput: number;
|
|
773
|
+
errorRate: number;
|
|
774
|
+
dataReceived: number;
|
|
775
|
+
dataSent: number;
|
|
776
|
+
}
|
|
777
|
+
/** Load metrics */
|
|
778
|
+
export interface LoadMetrics {
|
|
779
|
+
responseTime: MetricSeries;
|
|
780
|
+
throughput: MetricSeries;
|
|
781
|
+
errorRate: MetricSeries;
|
|
782
|
+
activeUsers: MetricSeries;
|
|
783
|
+
custom?: Record<string, MetricSeries>;
|
|
784
|
+
}
|
|
785
|
+
/** Metric series */
|
|
786
|
+
export interface MetricSeries {
|
|
787
|
+
timestamps: number[];
|
|
788
|
+
values: number[];
|
|
789
|
+
percentiles?: PercentileData;
|
|
790
|
+
}
|
|
791
|
+
/** Percentile data */
|
|
792
|
+
export interface PercentileData {
|
|
793
|
+
p50: number;
|
|
794
|
+
p75: number;
|
|
795
|
+
p90: number;
|
|
796
|
+
p95: number;
|
|
797
|
+
p99: number;
|
|
798
|
+
}
|
|
799
|
+
/** Load timeline point */
|
|
800
|
+
export interface LoadTimelinePoint {
|
|
801
|
+
timestamp: number;
|
|
802
|
+
activeUsers: number;
|
|
803
|
+
requestsPerSecond: number;
|
|
804
|
+
avgResponseTime: number;
|
|
805
|
+
errorCount: number;
|
|
806
|
+
}
|
|
807
|
+
/** Load error */
|
|
808
|
+
export interface LoadError {
|
|
809
|
+
timestamp: Date;
|
|
810
|
+
type: string;
|
|
811
|
+
message: string;
|
|
812
|
+
url?: string;
|
|
813
|
+
count: number;
|
|
814
|
+
}
|
|
815
|
+
/** Threshold result */
|
|
816
|
+
export interface ThresholdResult {
|
|
817
|
+
metric: LoadMetric;
|
|
818
|
+
passed: boolean;
|
|
819
|
+
value: number;
|
|
820
|
+
threshold: number;
|
|
821
|
+
}
|
|
822
|
+
/** Contract test config */
|
|
823
|
+
export interface ContractTestConfig {
|
|
824
|
+
provider: ContractProvider;
|
|
825
|
+
consumer?: ContractConsumer;
|
|
826
|
+
broker?: ContractBroker;
|
|
827
|
+
verification?: VerificationConfig;
|
|
828
|
+
}
|
|
829
|
+
/** Contract provider */
|
|
830
|
+
export interface ContractProvider {
|
|
831
|
+
name: string;
|
|
832
|
+
version?: string;
|
|
833
|
+
branch?: string;
|
|
834
|
+
baseUrl?: string;
|
|
835
|
+
stateHandlers?: StateHandler[];
|
|
836
|
+
}
|
|
837
|
+
/** Contract consumer */
|
|
838
|
+
export interface ContractConsumer {
|
|
839
|
+
name: string;
|
|
840
|
+
version?: string;
|
|
841
|
+
branch?: string;
|
|
842
|
+
}
|
|
843
|
+
/** Contract broker */
|
|
844
|
+
export interface ContractBroker {
|
|
845
|
+
url: string;
|
|
846
|
+
token?: string;
|
|
847
|
+
username?: string;
|
|
848
|
+
password?: string;
|
|
849
|
+
}
|
|
850
|
+
/** Verification config */
|
|
851
|
+
export interface VerificationConfig {
|
|
852
|
+
publishResults?: boolean;
|
|
853
|
+
providerVersion?: string;
|
|
854
|
+
providerTags?: string[];
|
|
855
|
+
consumerVersionSelectors?: VersionSelector[];
|
|
856
|
+
enablePending?: boolean;
|
|
857
|
+
includeWipPacts?: boolean;
|
|
858
|
+
}
|
|
859
|
+
/** Version selector */
|
|
860
|
+
export interface VersionSelector {
|
|
861
|
+
tag?: string;
|
|
862
|
+
branch?: string;
|
|
863
|
+
consumer?: string;
|
|
864
|
+
latest?: boolean;
|
|
865
|
+
deployedOrReleased?: boolean;
|
|
866
|
+
deployed?: boolean;
|
|
867
|
+
released?: boolean;
|
|
868
|
+
environment?: string;
|
|
869
|
+
}
|
|
870
|
+
/** State handler */
|
|
871
|
+
export interface StateHandler {
|
|
872
|
+
state: string;
|
|
873
|
+
handler: () => Promise<void>;
|
|
874
|
+
teardown?: () => Promise<void>;
|
|
875
|
+
}
|
|
876
|
+
/** Contract */
|
|
877
|
+
export interface Contract {
|
|
878
|
+
id: string;
|
|
879
|
+
consumer: ContractParticipant;
|
|
880
|
+
provider: ContractParticipant;
|
|
881
|
+
interactions: ContractInteraction[];
|
|
882
|
+
metadata?: ContractMetadata;
|
|
883
|
+
createdAt: Date;
|
|
884
|
+
publishedAt?: Date;
|
|
885
|
+
}
|
|
886
|
+
/** Contract participant */
|
|
887
|
+
export interface ContractParticipant {
|
|
888
|
+
name: string;
|
|
889
|
+
version?: string;
|
|
890
|
+
}
|
|
891
|
+
/** Contract interaction */
|
|
892
|
+
export interface ContractInteraction {
|
|
893
|
+
id: string;
|
|
894
|
+
description: string;
|
|
895
|
+
providerStates?: ProviderState[];
|
|
896
|
+
request: ContractRequest;
|
|
897
|
+
response: ContractResponse;
|
|
898
|
+
}
|
|
899
|
+
/** Provider state */
|
|
900
|
+
export interface ProviderState {
|
|
901
|
+
name: string;
|
|
902
|
+
params?: Record<string, unknown>;
|
|
903
|
+
}
|
|
904
|
+
/** Contract request */
|
|
905
|
+
export interface ContractRequest {
|
|
906
|
+
method: HttpMethod;
|
|
907
|
+
path: string;
|
|
908
|
+
query?: Record<string, string | string[]>;
|
|
909
|
+
headers?: Record<string, string>;
|
|
910
|
+
body?: unknown;
|
|
911
|
+
matchingRules?: MatchingRules;
|
|
912
|
+
}
|
|
913
|
+
/** Contract response */
|
|
914
|
+
export interface ContractResponse {
|
|
915
|
+
status: number;
|
|
916
|
+
headers?: Record<string, string>;
|
|
917
|
+
body?: unknown;
|
|
918
|
+
matchingRules?: MatchingRules;
|
|
919
|
+
}
|
|
920
|
+
/** Matching rules */
|
|
921
|
+
export interface MatchingRules {
|
|
922
|
+
body?: MatcherDefinition;
|
|
923
|
+
header?: MatcherDefinition;
|
|
924
|
+
path?: MatcherDefinition;
|
|
925
|
+
query?: MatcherDefinition;
|
|
926
|
+
}
|
|
927
|
+
/** Matcher definition */
|
|
928
|
+
export interface MatcherDefinition {
|
|
929
|
+
[path: string]: MatcherRule;
|
|
930
|
+
}
|
|
931
|
+
/** Matcher rule */
|
|
932
|
+
export interface MatcherRule {
|
|
933
|
+
match: MatcherType;
|
|
934
|
+
regex?: string;
|
|
935
|
+
min?: number;
|
|
936
|
+
max?: number;
|
|
937
|
+
value?: unknown;
|
|
938
|
+
format?: string;
|
|
939
|
+
}
|
|
940
|
+
/** Matcher type */
|
|
941
|
+
export type MatcherType = 'type' | 'regex' | 'equality' | 'include' | 'integer' | 'decimal' | 'null' | 'date' | 'time' | 'datetime' | 'arrayContains';
|
|
942
|
+
/** Contract metadata */
|
|
943
|
+
export interface ContractMetadata {
|
|
944
|
+
pactSpecification?: PactVersion;
|
|
945
|
+
environment?: string;
|
|
946
|
+
tags?: string[];
|
|
947
|
+
}
|
|
948
|
+
/** Pact version */
|
|
949
|
+
export interface PactVersion {
|
|
950
|
+
version: '2.0.0' | '3.0.0' | '4.0.0';
|
|
951
|
+
}
|
|
952
|
+
/** Verification result */
|
|
953
|
+
export interface ContractVerificationResult {
|
|
954
|
+
id: string;
|
|
955
|
+
contractId: string;
|
|
956
|
+
provider: ContractParticipant;
|
|
957
|
+
consumer: ContractParticipant;
|
|
958
|
+
status: VerificationStatus;
|
|
959
|
+
interactions: InteractionResult[];
|
|
960
|
+
summary: VerificationSummary;
|
|
961
|
+
executedAt: Date;
|
|
962
|
+
publishedAt?: Date;
|
|
963
|
+
}
|
|
964
|
+
/** Verification status */
|
|
965
|
+
export type VerificationStatus = 'passed' | 'failed' | 'pending';
|
|
966
|
+
/** Interaction result */
|
|
967
|
+
export interface InteractionResult {
|
|
968
|
+
interactionId: string;
|
|
969
|
+
description: string;
|
|
970
|
+
status: VerificationStatus;
|
|
971
|
+
mismatches?: ContractMismatch[];
|
|
972
|
+
duration?: number;
|
|
973
|
+
}
|
|
974
|
+
/** Contract mismatch */
|
|
975
|
+
export interface ContractMismatch {
|
|
976
|
+
type: MismatchType;
|
|
977
|
+
path?: string;
|
|
978
|
+
expected?: unknown;
|
|
979
|
+
actual?: unknown;
|
|
980
|
+
message: string;
|
|
981
|
+
}
|
|
982
|
+
/** Mismatch type */
|
|
983
|
+
export type MismatchType = 'StatusMismatch' | 'HeaderMismatch' | 'BodyMismatch' | 'QueryMismatch' | 'PathMismatch' | 'MethodMismatch';
|
|
984
|
+
/** Verification summary */
|
|
985
|
+
export interface VerificationSummary {
|
|
986
|
+
total: number;
|
|
987
|
+
passed: number;
|
|
988
|
+
failed: number;
|
|
989
|
+
pending: number;
|
|
990
|
+
}
|
|
991
|
+
/** Breaking change report */
|
|
992
|
+
export interface BreakingChangeReport {
|
|
993
|
+
baseVersion: string;
|
|
994
|
+
targetVersion: string;
|
|
995
|
+
changes: ContractChange[];
|
|
996
|
+
breakingChanges: ContractChange[];
|
|
997
|
+
isCompatible: boolean;
|
|
998
|
+
generatedAt: Date;
|
|
999
|
+
}
|
|
1000
|
+
/** Contract change */
|
|
1001
|
+
export interface ContractChange {
|
|
1002
|
+
type: ChangeType;
|
|
1003
|
+
severity: ChangeSeverity;
|
|
1004
|
+
path: string;
|
|
1005
|
+
description: string;
|
|
1006
|
+
before?: unknown;
|
|
1007
|
+
after?: unknown;
|
|
1008
|
+
}
|
|
1009
|
+
/** Change type */
|
|
1010
|
+
export type ChangeType = 'added' | 'removed' | 'modified' | 'renamed';
|
|
1011
|
+
/** Change severity */
|
|
1012
|
+
export type ChangeSeverity = 'breaking' | 'compatible' | 'unknown';
|
|
1013
|
+
//# sourceMappingURL=testing-qa.d.ts.map
|