playwright-automation-core 1.0.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/LICENSE +21 -0
- package/README.md +225 -0
- package/dist/api/api.assertions.d.ts +196 -0
- package/dist/api/api.assertions.d.ts.map +1 -0
- package/dist/api/api.assertions.js +462 -0
- package/dist/api/api.assertions.js.map +1 -0
- package/dist/api/api.builder.d.ts +134 -0
- package/dist/api/api.builder.d.ts.map +1 -0
- package/dist/api/api.builder.js +273 -0
- package/dist/api/api.builder.js.map +1 -0
- package/dist/api/api.client.d.ts +157 -0
- package/dist/api/api.client.d.ts.map +1 -0
- package/dist/api/api.client.js +493 -0
- package/dist/api/api.client.js.map +1 -0
- package/dist/api/index.d.ts +8 -0
- package/dist/api/index.d.ts.map +1 -0
- package/dist/api/index.js +17 -0
- package/dist/api/index.js.map +1 -0
- package/dist/core/base.driver.d.ts +130 -0
- package/dist/core/base.driver.d.ts.map +1 -0
- package/dist/core/base.driver.js +264 -0
- package/dist/core/base.driver.js.map +1 -0
- package/dist/core/driver.factory.d.ts +120 -0
- package/dist/core/driver.factory.d.ts.map +1 -0
- package/dist/core/driver.factory.js +222 -0
- package/dist/core/driver.factory.js.map +1 -0
- package/dist/core/element.actions.d.ts +119 -0
- package/dist/core/element.actions.d.ts.map +1 -0
- package/dist/core/element.actions.js +379 -0
- package/dist/core/element.actions.js.map +1 -0
- package/dist/core/hook.manager.d.ts +186 -0
- package/dist/core/hook.manager.d.ts.map +1 -0
- package/dist/core/hook.manager.js +297 -0
- package/dist/core/hook.manager.js.map +1 -0
- package/dist/core/index.d.ts +8 -0
- package/dist/core/index.d.ts.map +1 -0
- package/dist/core/index.js +22 -0
- package/dist/core/index.js.map +1 -0
- package/dist/index.d.ts +17 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +128 -0
- package/dist/index.js.map +1 -0
- package/dist/mobile/index.d.ts +7 -0
- package/dist/mobile/index.d.ts.map +1 -0
- package/dist/mobile/index.js +14 -0
- package/dist/mobile/index.js.map +1 -0
- package/dist/mobile/mobile.assertions.d.ts +146 -0
- package/dist/mobile/mobile.assertions.d.ts.map +1 -0
- package/dist/mobile/mobile.assertions.js +333 -0
- package/dist/mobile/mobile.assertions.js.map +1 -0
- package/dist/mobile/mobile.driver.d.ts +297 -0
- package/dist/mobile/mobile.driver.d.ts.map +1 -0
- package/dist/mobile/mobile.driver.js +808 -0
- package/dist/mobile/mobile.driver.js.map +1 -0
- package/dist/types/common.types.d.ts +200 -0
- package/dist/types/common.types.d.ts.map +1 -0
- package/dist/types/common.types.js +3 -0
- package/dist/types/common.types.js.map +1 -0
- package/dist/types/config.types.d.ts +192 -0
- package/dist/types/config.types.d.ts.map +1 -0
- package/dist/types/config.types.js +3 -0
- package/dist/types/config.types.js.map +1 -0
- package/dist/types/driver.types.d.ts +500 -0
- package/dist/types/driver.types.d.ts.map +1 -0
- package/dist/types/driver.types.js +3 -0
- package/dist/types/driver.types.js.map +1 -0
- package/dist/types/enums.d.ts +53 -0
- package/dist/types/enums.d.ts.map +1 -0
- package/dist/types/enums.js +62 -0
- package/dist/types/enums.js.map +1 -0
- package/dist/types/index.d.ts +8 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +15 -0
- package/dist/types/index.js.map +1 -0
- package/dist/utils/config.manager.d.ts +144 -0
- package/dist/utils/config.manager.d.ts.map +1 -0
- package/dist/utils/config.manager.js +473 -0
- package/dist/utils/config.manager.js.map +1 -0
- package/dist/utils/errors.d.ts +149 -0
- package/dist/utils/errors.d.ts.map +1 -0
- package/dist/utils/errors.js +290 -0
- package/dist/utils/errors.js.map +1 -0
- package/dist/utils/helpers.d.ts +124 -0
- package/dist/utils/helpers.d.ts.map +1 -0
- package/dist/utils/helpers.js +421 -0
- package/dist/utils/helpers.js.map +1 -0
- package/dist/utils/index.d.ts +9 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +78 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/logger.d.ts +145 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +235 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/wait.utils.d.ts +95 -0
- package/dist/utils/wait.utils.d.ts.map +1 -0
- package/dist/utils/wait.utils.js +306 -0
- package/dist/utils/wait.utils.js.map +1 -0
- package/dist/web/index.d.ts +8 -0
- package/dist/web/index.d.ts.map +1 -0
- package/dist/web/index.js +16 -0
- package/dist/web/index.js.map +1 -0
- package/dist/web/web.assertions.d.ts +164 -0
- package/dist/web/web.assertions.d.ts.map +1 -0
- package/dist/web/web.assertions.js +427 -0
- package/dist/web/web.assertions.js.map +1 -0
- package/dist/web/web.driver.d.ts +174 -0
- package/dist/web/web.driver.d.ts.map +1 -0
- package/dist/web/web.driver.js +571 -0
- package/dist/web/web.driver.js.map +1 -0
- package/dist/web/web.page.d.ts +286 -0
- package/dist/web/web.page.d.ts.map +1 -0
- package/dist/web/web.page.js +570 -0
- package/dist/web/web.page.js.map +1 -0
- package/package.json +115 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2025 <rahulr/>
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,225 @@
|
|
|
1
|
+
# Playwright-Core Framework
|
|
2
|
+
|
|
3
|
+
A unified automation framework supporting **Web** (Playwright), **API** (Playwright), and **Mobile** (WebdriverIO + Appium) automation.
|
|
4
|
+
|
|
5
|
+
## 🎯 Features
|
|
6
|
+
|
|
7
|
+
- **Web Automation**: Powered by Playwright for modern web testing
|
|
8
|
+
- **API Testing**: Built-in API client using Playwright's request context
|
|
9
|
+
- **Mobile Automation**: WebdriverIO + Appium integration for iOS/Android
|
|
10
|
+
- **Unified Interface**: Consistent driver pattern across all platforms
|
|
11
|
+
- **TypeScript First**: Full type safety and IntelliSense support
|
|
12
|
+
- **Modular Design**: Import only what you need
|
|
13
|
+
|
|
14
|
+
## 📁 Project Structure
|
|
15
|
+
|
|
16
|
+
``` shell
|
|
17
|
+
playwright-core/
|
|
18
|
+
├── src/
|
|
19
|
+
│ ├── core/ # Core abstractions & base classes
|
|
20
|
+
│ ├── web/ # Playwright Web driver & methods
|
|
21
|
+
│ ├── api/ # Playwright API client & methods
|
|
22
|
+
│ ├── mobile/ # WebdriverIO + Appium driver & methods
|
|
23
|
+
│ ├── utils/ # Common utilities (logger, waits, etc.)
|
|
24
|
+
│ ├── config/ # Configuration management
|
|
25
|
+
│ └── types/ # TypeScript interfaces & types
|
|
26
|
+
├── examples/ # Usage examples
|
|
27
|
+
├── docs/ # Documentation
|
|
28
|
+
├── package.json
|
|
29
|
+
├── tsconfig.json
|
|
30
|
+
└── README.md
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
## 🚀 Installation
|
|
34
|
+
|
|
35
|
+
### Prerequisites
|
|
36
|
+
|
|
37
|
+
- Node.js >= 18.0.0
|
|
38
|
+
- npm >= 9.0.0
|
|
39
|
+
|
|
40
|
+
### As a Dependency (for other projects)
|
|
41
|
+
|
|
42
|
+
```bash
|
|
43
|
+
npm install playwright-core
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
### For Development
|
|
47
|
+
|
|
48
|
+
```bash
|
|
49
|
+
# Clone the repository
|
|
50
|
+
git clone <repository-url>
|
|
51
|
+
cd playwright-core
|
|
52
|
+
|
|
53
|
+
# Install dependencies
|
|
54
|
+
npm install
|
|
55
|
+
|
|
56
|
+
# Install Playwright browsers
|
|
57
|
+
npx playwright install
|
|
58
|
+
|
|
59
|
+
# Build the project
|
|
60
|
+
npm run build
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
### Mobile Testing Prerequisites (Optional)
|
|
64
|
+
|
|
65
|
+
For mobile automation, you'll need:
|
|
66
|
+
|
|
67
|
+
1. **Appium Server**
|
|
68
|
+
|
|
69
|
+
``` bash
|
|
70
|
+
npm install -g appium
|
|
71
|
+
appium driver install uiautomator2 # For Android
|
|
72
|
+
appium driver install xcuitest # For iOS
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
2. **Android Setup**
|
|
76
|
+
- Android SDK installed
|
|
77
|
+
- ANDROID_HOME environment variable set
|
|
78
|
+
- Android emulator or real device connected
|
|
79
|
+
|
|
80
|
+
3. **iOS Setup** (macOS only)
|
|
81
|
+
- Xcode installed
|
|
82
|
+
- iOS Simulator or real device connected
|
|
83
|
+
|
|
84
|
+
## 📖 Usage
|
|
85
|
+
|
|
86
|
+
### Web Automation
|
|
87
|
+
|
|
88
|
+
```typescript
|
|
89
|
+
import { WebDriver, WebConfig } from 'playwright-core';
|
|
90
|
+
|
|
91
|
+
const config: WebConfig = {
|
|
92
|
+
browser: 'chromium',
|
|
93
|
+
headless: false,
|
|
94
|
+
baseURL: 'https://example.com'
|
|
95
|
+
};
|
|
96
|
+
|
|
97
|
+
const driver = new WebDriver(config);
|
|
98
|
+
await driver.initialize();
|
|
99
|
+
|
|
100
|
+
// Use the driver
|
|
101
|
+
const page = driver.getPage();
|
|
102
|
+
await page.goto('/login');
|
|
103
|
+
|
|
104
|
+
await driver.quit();
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
### API Testing
|
|
108
|
+
|
|
109
|
+
```typescript
|
|
110
|
+
import { ApiClient, ApiConfig } from 'playwright-core';
|
|
111
|
+
|
|
112
|
+
const config: ApiConfig = {
|
|
113
|
+
baseURL: 'https://api.example.com',
|
|
114
|
+
headers: {
|
|
115
|
+
'Authorization': 'Bearer token'
|
|
116
|
+
}
|
|
117
|
+
};
|
|
118
|
+
|
|
119
|
+
const api = new ApiClient(config);
|
|
120
|
+
await api.initialize();
|
|
121
|
+
|
|
122
|
+
const response = await api.get('/users');
|
|
123
|
+
console.log(response.data);
|
|
124
|
+
|
|
125
|
+
await api.dispose();
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
### Mobile Automation
|
|
129
|
+
|
|
130
|
+
```typescript
|
|
131
|
+
import { MobileDriver, MobileConfig } from 'playwright-core';
|
|
132
|
+
|
|
133
|
+
const config: MobileConfig = {
|
|
134
|
+
platform: 'android',
|
|
135
|
+
deviceName: 'Pixel 6',
|
|
136
|
+
app: '/path/to/app.apk',
|
|
137
|
+
automationName: 'UiAutomator2'
|
|
138
|
+
};
|
|
139
|
+
|
|
140
|
+
const driver = new MobileDriver(config);
|
|
141
|
+
await driver.initialize();
|
|
142
|
+
|
|
143
|
+
// Use WebdriverIO commands
|
|
144
|
+
await driver.click('~loginButton');
|
|
145
|
+
|
|
146
|
+
await driver.quit();
|
|
147
|
+
```
|
|
148
|
+
|
|
149
|
+
## 🔧 Configuration
|
|
150
|
+
|
|
151
|
+
### Environment Variables
|
|
152
|
+
|
|
153
|
+
Create a `.env` file in your project root:
|
|
154
|
+
|
|
155
|
+
```env
|
|
156
|
+
# Platform Selection
|
|
157
|
+
PLATFORM=web # web | api | mobile
|
|
158
|
+
|
|
159
|
+
# Web Configuration
|
|
160
|
+
BROWSER=chromium # chromium | firefox | webkit
|
|
161
|
+
HEADLESS=false
|
|
162
|
+
BASE_URL=https://example.com
|
|
163
|
+
VIEWPORT_WIDTH=1920
|
|
164
|
+
VIEWPORT_HEIGHT=1080
|
|
165
|
+
|
|
166
|
+
# API Configuration
|
|
167
|
+
API_BASE_URL=https://api.example.com
|
|
168
|
+
API_TIMEOUT=30000
|
|
169
|
+
|
|
170
|
+
# Mobile Configuration
|
|
171
|
+
MOBILE_PLATFORM=android # android | ios
|
|
172
|
+
DEVICE_NAME=Pixel 6
|
|
173
|
+
APP_PATH=/path/to/app
|
|
174
|
+
APPIUM_HOST=localhost
|
|
175
|
+
APPIUM_PORT=4723
|
|
176
|
+
```
|
|
177
|
+
|
|
178
|
+
## 🛠️ Development
|
|
179
|
+
|
|
180
|
+
### Build
|
|
181
|
+
|
|
182
|
+
```bash
|
|
183
|
+
npm run build
|
|
184
|
+
```
|
|
185
|
+
|
|
186
|
+
### Watch Mode
|
|
187
|
+
|
|
188
|
+
```bash
|
|
189
|
+
npm run build:watch
|
|
190
|
+
```
|
|
191
|
+
|
|
192
|
+
### Lint
|
|
193
|
+
|
|
194
|
+
```bash
|
|
195
|
+
npm run lint
|
|
196
|
+
npm run lint:fix
|
|
197
|
+
```
|
|
198
|
+
|
|
199
|
+
### Clean
|
|
200
|
+
|
|
201
|
+
```bash
|
|
202
|
+
npm run clean
|
|
203
|
+
```
|
|
204
|
+
|
|
205
|
+
## 📦 Publishing as NPM Module
|
|
206
|
+
|
|
207
|
+
```bash
|
|
208
|
+
# Build the project
|
|
209
|
+
npm run build
|
|
210
|
+
|
|
211
|
+
# Publish (requires npm login)
|
|
212
|
+
npm publish --access public
|
|
213
|
+
```
|
|
214
|
+
|
|
215
|
+
## 🤝 Contributing
|
|
216
|
+
|
|
217
|
+
1. Fork the repository
|
|
218
|
+
2. Create a feature branch
|
|
219
|
+
3. Make your changes
|
|
220
|
+
4. Run linting and build
|
|
221
|
+
5. Submit a pull request
|
|
222
|
+
|
|
223
|
+
## 📄 License
|
|
224
|
+
|
|
225
|
+
MIT
|
|
@@ -0,0 +1,196 @@
|
|
|
1
|
+
import { ApiResponse, AssertionOptions } from "../types";
|
|
2
|
+
import { Logger } from "../utils";
|
|
3
|
+
/**
|
|
4
|
+
* Soft assertion result
|
|
5
|
+
*/
|
|
6
|
+
export interface ApiSoftAssertionResult {
|
|
7
|
+
passed: boolean;
|
|
8
|
+
message: string;
|
|
9
|
+
expected?: unknown;
|
|
10
|
+
actual?: unknown;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* JSON Schema type (simplified)
|
|
14
|
+
*/
|
|
15
|
+
export interface JsonSchema {
|
|
16
|
+
type?: string | string[];
|
|
17
|
+
properties?: Record<string, JsonSchema>;
|
|
18
|
+
required?: string[];
|
|
19
|
+
items?: JsonSchema;
|
|
20
|
+
enum?: unknown[];
|
|
21
|
+
minimum?: number;
|
|
22
|
+
maximum?: number;
|
|
23
|
+
minLength?: number;
|
|
24
|
+
maxLength?: number;
|
|
25
|
+
pattern?: string;
|
|
26
|
+
additionalProperties?: boolean | JsonSchema;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* API Assertions class providing assertion methods for API responses.
|
|
30
|
+
*/
|
|
31
|
+
export declare class ApiAssertions {
|
|
32
|
+
private logger;
|
|
33
|
+
private softErrors;
|
|
34
|
+
constructor(logger?: Logger);
|
|
35
|
+
/**
|
|
36
|
+
* Get soft assertion errors
|
|
37
|
+
*/
|
|
38
|
+
getSoftErrors(): ApiSoftAssertionResult[];
|
|
39
|
+
/**
|
|
40
|
+
* Clear soft assertion errors
|
|
41
|
+
*/
|
|
42
|
+
clearSoftErrors(): void;
|
|
43
|
+
/**
|
|
44
|
+
* Check if all soft assertions passed
|
|
45
|
+
*/
|
|
46
|
+
allSoftAssertionsPassed(): boolean;
|
|
47
|
+
/**
|
|
48
|
+
* Assert all soft assertions and throw if any failed
|
|
49
|
+
*/
|
|
50
|
+
assertAllSoftAssertions(): void;
|
|
51
|
+
/**
|
|
52
|
+
* Handle assertion result
|
|
53
|
+
*/
|
|
54
|
+
private handleAssertion;
|
|
55
|
+
/**
|
|
56
|
+
* Assert response status code equals expected
|
|
57
|
+
*/
|
|
58
|
+
assertStatus<T>(response: ApiResponse<T>, expectedStatus: number, options?: AssertionOptions): void;
|
|
59
|
+
/**
|
|
60
|
+
* Assert response status is 200 OK
|
|
61
|
+
*/
|
|
62
|
+
assertOk<T>(response: ApiResponse<T>, options?: AssertionOptions): void;
|
|
63
|
+
/**
|
|
64
|
+
* Assert response status is 201 Created
|
|
65
|
+
*/
|
|
66
|
+
assertCreated<T>(response: ApiResponse<T>, options?: AssertionOptions): void;
|
|
67
|
+
/**
|
|
68
|
+
* Assert response status is 204 No Content
|
|
69
|
+
*/
|
|
70
|
+
assertNoContent<T>(response: ApiResponse<T>, options?: AssertionOptions): void;
|
|
71
|
+
/**
|
|
72
|
+
* Assert response status is 400 Bad Request
|
|
73
|
+
*/
|
|
74
|
+
assertBadRequest<T>(response: ApiResponse<T>, options?: AssertionOptions): void;
|
|
75
|
+
/**
|
|
76
|
+
* Assert response status is 401 Unauthorized
|
|
77
|
+
*/
|
|
78
|
+
assertUnauthorized<T>(response: ApiResponse<T>, options?: AssertionOptions): void;
|
|
79
|
+
/**
|
|
80
|
+
* Assert response status is 403 Forbidden
|
|
81
|
+
*/
|
|
82
|
+
assertForbidden<T>(response: ApiResponse<T>, options?: AssertionOptions): void;
|
|
83
|
+
/**
|
|
84
|
+
* Assert response status is 404 Not Found
|
|
85
|
+
*/
|
|
86
|
+
assertNotFound<T>(response: ApiResponse<T>, options?: AssertionOptions): void;
|
|
87
|
+
/**
|
|
88
|
+
* Assert response status is 500 Internal Server Error
|
|
89
|
+
*/
|
|
90
|
+
assertServerError<T>(response: ApiResponse<T>, options?: AssertionOptions): void;
|
|
91
|
+
/**
|
|
92
|
+
* Assert response status is in range
|
|
93
|
+
*/
|
|
94
|
+
assertStatusInRange<T>(response: ApiResponse<T>, min: number, max: number, options?: AssertionOptions): void;
|
|
95
|
+
/**
|
|
96
|
+
* Assert response is successful (2xx)
|
|
97
|
+
*/
|
|
98
|
+
assertSuccess<T>(response: ApiResponse<T>, options?: AssertionOptions): void;
|
|
99
|
+
/**
|
|
100
|
+
* Assert response is client error (4xx)
|
|
101
|
+
*/
|
|
102
|
+
assertClientError<T>(response: ApiResponse<T>, options?: AssertionOptions): void;
|
|
103
|
+
/**
|
|
104
|
+
* Assert response is server error (5xx)
|
|
105
|
+
*/
|
|
106
|
+
assertServerErrorRange<T>(response: ApiResponse<T>, options?: AssertionOptions): void;
|
|
107
|
+
/**
|
|
108
|
+
* Assert response has header
|
|
109
|
+
*/
|
|
110
|
+
assertHasHeader<T>(response: ApiResponse<T>, headerName: string, options?: AssertionOptions): void;
|
|
111
|
+
/**
|
|
112
|
+
* Assert response header equals value
|
|
113
|
+
*/
|
|
114
|
+
assertHeader<T>(response: ApiResponse<T>, headerName: string, expectedValue: string | RegExp, options?: AssertionOptions): void;
|
|
115
|
+
/**
|
|
116
|
+
* Assert response header contains value
|
|
117
|
+
*/
|
|
118
|
+
assertHeaderContains<T>(response: ApiResponse<T>, headerName: string, expectedValue: string, options?: AssertionOptions): void;
|
|
119
|
+
/**
|
|
120
|
+
* Assert content type
|
|
121
|
+
*/
|
|
122
|
+
assertContentType<T>(response: ApiResponse<T>, expectedType: string, options?: AssertionOptions): void;
|
|
123
|
+
/**
|
|
124
|
+
* Assert JSON content type
|
|
125
|
+
*/
|
|
126
|
+
assertJsonContentType<T>(response: ApiResponse<T>, options?: AssertionOptions): void;
|
|
127
|
+
/**
|
|
128
|
+
* Assert response body equals expected
|
|
129
|
+
*/
|
|
130
|
+
assertBody<T>(response: ApiResponse<T>, expected: T, options?: AssertionOptions): void;
|
|
131
|
+
/**
|
|
132
|
+
* Assert response body contains key
|
|
133
|
+
*/
|
|
134
|
+
assertBodyHasKey<T>(response: ApiResponse<T>, key: string, options?: AssertionOptions): void;
|
|
135
|
+
/**
|
|
136
|
+
* Assert response body has nested key (dot notation)
|
|
137
|
+
*/
|
|
138
|
+
assertBodyHasPath<T>(response: ApiResponse<T>, path: string, options?: AssertionOptions): void;
|
|
139
|
+
/**
|
|
140
|
+
* Assert response body value at path equals expected
|
|
141
|
+
*/
|
|
142
|
+
assertBodyValue<T, V>(response: ApiResponse<T>, path: string, expected: V, options?: AssertionOptions): void;
|
|
143
|
+
/**
|
|
144
|
+
* Assert response body value at path matches regex
|
|
145
|
+
*/
|
|
146
|
+
assertBodyMatches<T>(response: ApiResponse<T>, path: string, pattern: RegExp, options?: AssertionOptions): void;
|
|
147
|
+
/**
|
|
148
|
+
* Assert response body is array
|
|
149
|
+
*/
|
|
150
|
+
assertBodyIsArray<T>(response: ApiResponse<T>, options?: AssertionOptions): void;
|
|
151
|
+
/**
|
|
152
|
+
* Assert response body array length
|
|
153
|
+
*/
|
|
154
|
+
assertBodyArrayLength<T>(response: ApiResponse<T>, expectedLength: number, options?: AssertionOptions): void;
|
|
155
|
+
/**
|
|
156
|
+
* Assert response body array length is greater than
|
|
157
|
+
*/
|
|
158
|
+
assertBodyArrayLengthGreaterThan<T>(response: ApiResponse<T>, minLength: number, options?: AssertionOptions): void;
|
|
159
|
+
/**
|
|
160
|
+
* Assert response body is not empty
|
|
161
|
+
*/
|
|
162
|
+
assertBodyNotEmpty<T>(response: ApiResponse<T>, options?: AssertionOptions): void;
|
|
163
|
+
/**
|
|
164
|
+
* Assert response time is less than expected
|
|
165
|
+
*/
|
|
166
|
+
assertResponseTime<T>(response: ApiResponse<T>, maxTimeMs: number, options?: AssertionOptions): void;
|
|
167
|
+
/**
|
|
168
|
+
* Assert response body matches JSON schema (simplified)
|
|
169
|
+
*/
|
|
170
|
+
assertSchema<T>(response: ApiResponse<T>, schema: JsonSchema, options?: AssertionOptions): void;
|
|
171
|
+
/**
|
|
172
|
+
* Simple schema validation
|
|
173
|
+
*/
|
|
174
|
+
private validateSchema;
|
|
175
|
+
/**
|
|
176
|
+
* Get value by dot notation path
|
|
177
|
+
*/
|
|
178
|
+
private getValueByPath;
|
|
179
|
+
/**
|
|
180
|
+
* Assert condition is true
|
|
181
|
+
*/
|
|
182
|
+
assertTrue(condition: boolean, message: string, options?: AssertionOptions): void;
|
|
183
|
+
/**
|
|
184
|
+
* Assert condition is false
|
|
185
|
+
*/
|
|
186
|
+
assertFalse(condition: boolean, message: string, options?: AssertionOptions): void;
|
|
187
|
+
/**
|
|
188
|
+
* Assert values are equal
|
|
189
|
+
*/
|
|
190
|
+
assertEqual<T>(actual: T, expected: T, message?: string, options?: AssertionOptions): void;
|
|
191
|
+
/**
|
|
192
|
+
* Always fail with message
|
|
193
|
+
*/
|
|
194
|
+
fail(message: string, options?: AssertionOptions): void;
|
|
195
|
+
}
|
|
196
|
+
//# sourceMappingURL=api.assertions.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"api.assertions.d.ts","sourceRoot":"","sources":["../../src/api/api.assertions.ts"],"names":[],"mappings":"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"}
|