wup 0.2.13__tar.gz → 0.2.15__tar.gz
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.
- {wup-0.2.13/wup.egg-info → wup-0.2.15}/PKG-INFO +96 -56
- {wup-0.2.13 → wup-0.2.15}/README.md +95 -55
- {wup-0.2.13 → wup-0.2.15}/pyproject.toml +1 -1
- {wup-0.2.13 → wup-0.2.15}/tests/test_testql_watcher.py +55 -1
- {wup-0.2.13 → wup-0.2.15}/tests/test_wup.py +278 -0
- {wup-0.2.13 → wup-0.2.15}/wup/__init__.py +1 -1
- {wup-0.2.13 → wup-0.2.15}/wup/cli.py +22 -0
- {wup-0.2.13 → wup-0.2.15}/wup/config.py +79 -2
- {wup-0.2.13 → wup-0.2.15}/wup/models/config.py +19 -0
- {wup-0.2.13 → wup-0.2.15}/wup/testql_watcher.py +6 -0
- wup-0.2.15/wup/visual_diff.py +333 -0
- {wup-0.2.13 → wup-0.2.15/wup.egg-info}/PKG-INFO +96 -56
- {wup-0.2.13 → wup-0.2.15}/wup.egg-info/SOURCES.txt +1 -0
- {wup-0.2.13 → wup-0.2.15}/LICENSE +0 -0
- {wup-0.2.13 → wup-0.2.15}/setup.cfg +0 -0
- {wup-0.2.13 → wup-0.2.15}/tests/test_e2e.py +0 -0
- {wup-0.2.13 → wup-0.2.15}/wup/core.py +0 -0
- {wup-0.2.13 → wup-0.2.15}/wup/dependency_mapper.py +0 -0
- {wup-0.2.13 → wup-0.2.15}/wup/models/__init__.py +0 -0
- {wup-0.2.13 → wup-0.2.15}/wup/testql_discovery.py +0 -0
- {wup-0.2.13 → wup-0.2.15}/wup.egg-info/dependency_links.txt +0 -0
- {wup-0.2.13 → wup-0.2.15}/wup.egg-info/entry_points.txt +0 -0
- {wup-0.2.13 → wup-0.2.15}/wup.egg-info/requires.txt +0 -0
- {wup-0.2.13 → wup-0.2.15}/wup.egg-info/top_level.txt +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: wup
|
|
3
|
-
Version: 0.2.
|
|
3
|
+
Version: 0.2.15
|
|
4
4
|
Summary: WUP (What's Up) - Intelligent file watcher for regression testing in large projects
|
|
5
5
|
Author-email: Tom Sapletta <tom@sapletta.com>
|
|
6
6
|
License: Apache-2.0
|
|
@@ -29,17 +29,17 @@ Dynamic: license-file
|
|
|
29
29
|
|
|
30
30
|
## AI Cost Tracking
|
|
31
31
|
|
|
32
|
-
    
|
|
33
|
+
  
|
|
34
34
|
|
|
35
|
-
- 🤖 **LLM usage:** $2.
|
|
36
|
-
- 👤 **Human dev:** ~$
|
|
35
|
+
- 🤖 **LLM usage:** $2.4000 (16 commits)
|
|
36
|
+
- 👤 **Human dev:** ~$411 (4.1h @ $100/h, 30min dedup)
|
|
37
37
|
|
|
38
38
|
Generated on 2026-04-29 using [openrouter/qwen/qwen3-coder-next](https://openrouter.ai/qwen/qwen3-coder-next)
|
|
39
39
|
|
|
40
40
|
---
|
|
41
41
|
|
|
42
|
-
    
|
|
43
43
|
|
|
44
44
|
**WUP (What's Up)** - Intelligent file watcher for regression testing in large projects.
|
|
45
45
|
|
|
@@ -285,56 +285,86 @@ export WUP_CPU_THROTTLE=0.5
|
|
|
285
285
|
export WUP_DEBOUNCE=3
|
|
286
286
|
```
|
|
287
287
|
|
|
288
|
-
##
|
|
289
|
-
|
|
290
|
-
WUP
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
288
|
+
## Visual DOM Diff
|
|
289
|
+
|
|
290
|
+
WUP optionally scans configured pages with Playwright after each successful quick test, compares the DOM structure to the previous snapshot, and reports significant changes.
|
|
291
|
+
|
|
292
|
+
### Setup
|
|
293
|
+
|
|
294
|
+
```bash
|
|
295
|
+
pip install playwright
|
|
296
|
+
playwright install chromium
|
|
297
|
+
```
|
|
298
|
+
|
|
299
|
+
### Configuration
|
|
300
|
+
|
|
301
|
+
```yaml
|
|
302
|
+
visual_diff:
|
|
303
|
+
enabled: true
|
|
304
|
+
base_url: "http://localhost:8100" # or leave empty and set WUP_BASE_URL env var
|
|
305
|
+
base_url_env: "WUP_BASE_URL"
|
|
306
|
+
delay_seconds: 5.0 # wait after file change before scanning
|
|
307
|
+
max_depth: 10 # DOM snapshot depth
|
|
308
|
+
pages:
|
|
309
|
+
- "/health"
|
|
310
|
+
- "/dashboard"
|
|
311
|
+
pages_from_endpoints: true # also scan endpoints from testql config
|
|
312
|
+
threshold_added: 3 # min node additions to report as "changed"
|
|
313
|
+
threshold_removed: 3
|
|
314
|
+
threshold_changed: 5
|
|
315
|
+
headless: true
|
|
316
|
+
```
|
|
317
|
+
|
|
318
|
+
Or set the base URL in `.wup.env` in the project root (not committed to git):
|
|
319
|
+
|
|
320
|
+
```bash
|
|
321
|
+
# .wup.env
|
|
322
|
+
WUP_BASE_URL=http://localhost:8100
|
|
313
323
|
```
|
|
314
324
|
|
|
325
|
+
### Output
|
|
326
|
+
|
|
327
|
+
- **Snapshots** — `.wup/visual-snapshots/<service>/<page>.json`
|
|
328
|
+
- **Diff events** — `.wup/visual-diffs/<service>/<page>.jsonl` (appended on each change)
|
|
329
|
+
|
|
330
|
+
Visible in `wup status` as a "Visual DOM diffs" section.
|
|
331
|
+
|
|
332
|
+
### Graceful degradation
|
|
333
|
+
|
|
334
|
+
If Playwright is not installed, the visual diff module logs a warning and skips scanning — it does **not** break the watcher.
|
|
335
|
+
|
|
315
336
|
## Project Structure
|
|
316
337
|
|
|
317
338
|
```
|
|
318
339
|
wup/
|
|
319
340
|
├── wup/
|
|
320
|
-
│ ├── __init__.py
|
|
321
|
-
│ ├──
|
|
322
|
-
│ ├──
|
|
323
|
-
│
|
|
324
|
-
│
|
|
325
|
-
│ ├──
|
|
326
|
-
│ ├──
|
|
327
|
-
│ ├──
|
|
328
|
-
│ └──
|
|
341
|
+
│ ├── __init__.py # Package exports
|
|
342
|
+
│ ├── cli.py # CLI: watch, map-deps, status, init, testql-endpoints
|
|
343
|
+
│ ├── config.py # Config loading/saving + .wup.env support
|
|
344
|
+
│ ├── core.py # WupWatcher: detection, inference, scheduling
|
|
345
|
+
│ ├── dependency_mapper.py # DependencyMapper: codebase → deps.json
|
|
346
|
+
│ ├── testql_discovery.py # TestQLEndpointDiscovery: scenario parsing
|
|
347
|
+
│ ├── testql_watcher.py # TestQLWatcher: scenario runner + health tracking
|
|
348
|
+
│ ├── visual_diff.py # VisualDiffer: Playwright DOM snapshot + diff engine
|
|
349
|
+
│ └── models/
|
|
350
|
+
│ ├── __init__.py
|
|
351
|
+
│ └── config.py # Dataclasses: WupConfig, VisualDiffConfig, TestQLConfig...
|
|
329
352
|
├── tests/
|
|
330
|
-
│
|
|
353
|
+
│ ├── test_wup.py # unit/integration tests (incl. VisualDiffer, config)
|
|
354
|
+
│ ├── test_testql_watcher.py # TestQLWatcher + VisualDiffer integration tests
|
|
355
|
+
│ └── test_e2e.py # end-to-end CLI tests
|
|
356
|
+
├── examples/
|
|
357
|
+
│ ├── fastapi-app/ # FastAPI example project
|
|
358
|
+
│ ├── flask-app/ # Flask example project
|
|
359
|
+
│ ├── multi-service/ # Multi-service example
|
|
360
|
+
│ ├── testql_demo.py # TestQL simulation demo
|
|
361
|
+
│ ├── testql_integration.py # Custom TestQLWatcher + visual diff example
|
|
362
|
+
│ └── visual_diff_demo.py # Visual DOM diff demo (no Playwright required)
|
|
331
363
|
├── docs/
|
|
332
|
-
│
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
├── pyproject.toml # Package configuration
|
|
337
|
-
└── README.md # This file
|
|
364
|
+
│ └── TESTQL_INTEGRATION.md # TestQL integration guide
|
|
365
|
+
├── testql-scenarios/ # Auto-generated TestQL scenarios
|
|
366
|
+
├── pyproject.toml # Package config (setuptools)
|
|
367
|
+
└── README.md
|
|
338
368
|
```
|
|
339
369
|
|
|
340
370
|
## Development
|
|
@@ -343,23 +373,33 @@ wup/
|
|
|
343
373
|
|
|
344
374
|
```bash
|
|
345
375
|
# Run all tests
|
|
346
|
-
pytest
|
|
376
|
+
python3 -m pytest tests/ -v
|
|
377
|
+
|
|
378
|
+
# Run specific suite
|
|
379
|
+
python3 -m pytest tests/test_wup.py -v
|
|
380
|
+
python3 -m pytest tests/test_testql_watcher.py -v
|
|
347
381
|
|
|
348
382
|
# Run with coverage
|
|
349
|
-
pytest --cov=wup
|
|
383
|
+
python3 -m pytest tests/ --cov=wup
|
|
384
|
+
```
|
|
385
|
+
|
|
386
|
+
### Examples
|
|
387
|
+
|
|
388
|
+
```bash
|
|
389
|
+
# Visual diff demo (no Playwright required)
|
|
390
|
+
python3 examples/visual_diff_demo.py
|
|
391
|
+
|
|
392
|
+
# With live page scan (requires playwright)
|
|
393
|
+
python3 examples/visual_diff_demo.py http://localhost:8100/health
|
|
350
394
|
|
|
351
|
-
#
|
|
352
|
-
|
|
395
|
+
# TestQL + visual diff integration
|
|
396
|
+
python3 examples/testql_integration.py /path/to/project
|
|
353
397
|
```
|
|
354
398
|
|
|
355
|
-
### Building
|
|
399
|
+
### Building & Publishing
|
|
356
400
|
|
|
357
401
|
```bash
|
|
358
|
-
# Build wheel and source distribution
|
|
359
402
|
python -m build
|
|
360
|
-
|
|
361
|
-
# Install from dist
|
|
362
|
-
pip install dist/wup-0.1.6-py3-none-any.whl
|
|
363
403
|
```
|
|
364
404
|
|
|
365
405
|
## License
|
|
@@ -3,17 +3,17 @@
|
|
|
3
3
|
|
|
4
4
|
## AI Cost Tracking
|
|
5
5
|
|
|
6
|
-
    
|
|
7
|
+
  
|
|
8
8
|
|
|
9
|
-
- 🤖 **LLM usage:** $2.
|
|
10
|
-
- 👤 **Human dev:** ~$
|
|
9
|
+
- 🤖 **LLM usage:** $2.4000 (16 commits)
|
|
10
|
+
- 👤 **Human dev:** ~$411 (4.1h @ $100/h, 30min dedup)
|
|
11
11
|
|
|
12
12
|
Generated on 2026-04-29 using [openrouter/qwen/qwen3-coder-next](https://openrouter.ai/qwen/qwen3-coder-next)
|
|
13
13
|
|
|
14
14
|
---
|
|
15
15
|
|
|
16
|
-
    
|
|
17
17
|
|
|
18
18
|
**WUP (What's Up)** - Intelligent file watcher for regression testing in large projects.
|
|
19
19
|
|
|
@@ -259,56 +259,86 @@ export WUP_CPU_THROTTLE=0.5
|
|
|
259
259
|
export WUP_DEBOUNCE=3
|
|
260
260
|
```
|
|
261
261
|
|
|
262
|
-
##
|
|
263
|
-
|
|
264
|
-
WUP
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
262
|
+
## Visual DOM Diff
|
|
263
|
+
|
|
264
|
+
WUP optionally scans configured pages with Playwright after each successful quick test, compares the DOM structure to the previous snapshot, and reports significant changes.
|
|
265
|
+
|
|
266
|
+
### Setup
|
|
267
|
+
|
|
268
|
+
```bash
|
|
269
|
+
pip install playwright
|
|
270
|
+
playwright install chromium
|
|
271
|
+
```
|
|
272
|
+
|
|
273
|
+
### Configuration
|
|
274
|
+
|
|
275
|
+
```yaml
|
|
276
|
+
visual_diff:
|
|
277
|
+
enabled: true
|
|
278
|
+
base_url: "http://localhost:8100" # or leave empty and set WUP_BASE_URL env var
|
|
279
|
+
base_url_env: "WUP_BASE_URL"
|
|
280
|
+
delay_seconds: 5.0 # wait after file change before scanning
|
|
281
|
+
max_depth: 10 # DOM snapshot depth
|
|
282
|
+
pages:
|
|
283
|
+
- "/health"
|
|
284
|
+
- "/dashboard"
|
|
285
|
+
pages_from_endpoints: true # also scan endpoints from testql config
|
|
286
|
+
threshold_added: 3 # min node additions to report as "changed"
|
|
287
|
+
threshold_removed: 3
|
|
288
|
+
threshold_changed: 5
|
|
289
|
+
headless: true
|
|
290
|
+
```
|
|
291
|
+
|
|
292
|
+
Or set the base URL in `.wup.env` in the project root (not committed to git):
|
|
293
|
+
|
|
294
|
+
```bash
|
|
295
|
+
# .wup.env
|
|
296
|
+
WUP_BASE_URL=http://localhost:8100
|
|
287
297
|
```
|
|
288
298
|
|
|
299
|
+
### Output
|
|
300
|
+
|
|
301
|
+
- **Snapshots** — `.wup/visual-snapshots/<service>/<page>.json`
|
|
302
|
+
- **Diff events** — `.wup/visual-diffs/<service>/<page>.jsonl` (appended on each change)
|
|
303
|
+
|
|
304
|
+
Visible in `wup status` as a "Visual DOM diffs" section.
|
|
305
|
+
|
|
306
|
+
### Graceful degradation
|
|
307
|
+
|
|
308
|
+
If Playwright is not installed, the visual diff module logs a warning and skips scanning — it does **not** break the watcher.
|
|
309
|
+
|
|
289
310
|
## Project Structure
|
|
290
311
|
|
|
291
312
|
```
|
|
292
313
|
wup/
|
|
293
314
|
├── wup/
|
|
294
|
-
│ ├── __init__.py
|
|
295
|
-
│ ├──
|
|
296
|
-
│ ├──
|
|
297
|
-
│
|
|
298
|
-
│
|
|
299
|
-
│ ├──
|
|
300
|
-
│ ├──
|
|
301
|
-
│ ├──
|
|
302
|
-
│ └──
|
|
315
|
+
│ ├── __init__.py # Package exports
|
|
316
|
+
│ ├── cli.py # CLI: watch, map-deps, status, init, testql-endpoints
|
|
317
|
+
│ ├── config.py # Config loading/saving + .wup.env support
|
|
318
|
+
│ ├── core.py # WupWatcher: detection, inference, scheduling
|
|
319
|
+
│ ├── dependency_mapper.py # DependencyMapper: codebase → deps.json
|
|
320
|
+
│ ├── testql_discovery.py # TestQLEndpointDiscovery: scenario parsing
|
|
321
|
+
│ ├── testql_watcher.py # TestQLWatcher: scenario runner + health tracking
|
|
322
|
+
│ ├── visual_diff.py # VisualDiffer: Playwright DOM snapshot + diff engine
|
|
323
|
+
│ └── models/
|
|
324
|
+
│ ├── __init__.py
|
|
325
|
+
│ └── config.py # Dataclasses: WupConfig, VisualDiffConfig, TestQLConfig...
|
|
303
326
|
├── tests/
|
|
304
|
-
│
|
|
327
|
+
│ ├── test_wup.py # unit/integration tests (incl. VisualDiffer, config)
|
|
328
|
+
│ ├── test_testql_watcher.py # TestQLWatcher + VisualDiffer integration tests
|
|
329
|
+
│ └── test_e2e.py # end-to-end CLI tests
|
|
330
|
+
├── examples/
|
|
331
|
+
│ ├── fastapi-app/ # FastAPI example project
|
|
332
|
+
│ ├── flask-app/ # Flask example project
|
|
333
|
+
│ ├── multi-service/ # Multi-service example
|
|
334
|
+
│ ├── testql_demo.py # TestQL simulation demo
|
|
335
|
+
│ ├── testql_integration.py # Custom TestQLWatcher + visual diff example
|
|
336
|
+
│ └── visual_diff_demo.py # Visual DOM diff demo (no Playwright required)
|
|
305
337
|
├── docs/
|
|
306
|
-
│
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
├── pyproject.toml # Package configuration
|
|
311
|
-
└── README.md # This file
|
|
338
|
+
│ └── TESTQL_INTEGRATION.md # TestQL integration guide
|
|
339
|
+
├── testql-scenarios/ # Auto-generated TestQL scenarios
|
|
340
|
+
├── pyproject.toml # Package config (setuptools)
|
|
341
|
+
└── README.md
|
|
312
342
|
```
|
|
313
343
|
|
|
314
344
|
## Development
|
|
@@ -317,23 +347,33 @@ wup/
|
|
|
317
347
|
|
|
318
348
|
```bash
|
|
319
349
|
# Run all tests
|
|
320
|
-
pytest
|
|
350
|
+
python3 -m pytest tests/ -v
|
|
351
|
+
|
|
352
|
+
# Run specific suite
|
|
353
|
+
python3 -m pytest tests/test_wup.py -v
|
|
354
|
+
python3 -m pytest tests/test_testql_watcher.py -v
|
|
321
355
|
|
|
322
356
|
# Run with coverage
|
|
323
|
-
pytest --cov=wup
|
|
357
|
+
python3 -m pytest tests/ --cov=wup
|
|
358
|
+
```
|
|
359
|
+
|
|
360
|
+
### Examples
|
|
361
|
+
|
|
362
|
+
```bash
|
|
363
|
+
# Visual diff demo (no Playwright required)
|
|
364
|
+
python3 examples/visual_diff_demo.py
|
|
365
|
+
|
|
366
|
+
# With live page scan (requires playwright)
|
|
367
|
+
python3 examples/visual_diff_demo.py http://localhost:8100/health
|
|
324
368
|
|
|
325
|
-
#
|
|
326
|
-
|
|
369
|
+
# TestQL + visual diff integration
|
|
370
|
+
python3 examples/testql_integration.py /path/to/project
|
|
327
371
|
```
|
|
328
372
|
|
|
329
|
-
### Building
|
|
373
|
+
### Building & Publishing
|
|
330
374
|
|
|
331
375
|
```bash
|
|
332
|
-
# Build wheel and source distribution
|
|
333
376
|
python -m build
|
|
334
|
-
|
|
335
|
-
# Install from dist
|
|
336
|
-
pip install dist/wup-0.1.6-py3-none-any.whl
|
|
337
377
|
```
|
|
338
378
|
|
|
339
379
|
## License
|
|
@@ -6,7 +6,7 @@ from pathlib import Path
|
|
|
6
6
|
from subprocess import CompletedProcess
|
|
7
7
|
|
|
8
8
|
from wup.testql_watcher import TestQLWatcher
|
|
9
|
-
from wup.models.config import WupConfig, ProjectConfig, TestQLConfig
|
|
9
|
+
from wup.models.config import WupConfig, ProjectConfig, TestQLConfig, VisualDiffConfig
|
|
10
10
|
|
|
11
11
|
|
|
12
12
|
def test_process_changed_file_creates_track_on_failure():
|
|
@@ -199,3 +199,57 @@ def test_service_health_transitions_are_persisted():
|
|
|
199
199
|
statuses = [event.get("status") for event in events if event.get("service") == "connect-config"]
|
|
200
200
|
assert "down" in statuses
|
|
201
201
|
assert "up" in statuses
|
|
202
|
+
|
|
203
|
+
|
|
204
|
+
def test_visual_differ_disabled_by_default():
|
|
205
|
+
"""visual_differ exists but is disabled (no-op) when visual_diff.enabled=False."""
|
|
206
|
+
with tempfile.TemporaryDirectory() as tmpdir:
|
|
207
|
+
root = Path(tmpdir)
|
|
208
|
+
cfg = WupConfig(
|
|
209
|
+
project=ProjectConfig(name="demo"),
|
|
210
|
+
testql=TestQLConfig(scenario_dir="testql-scenarios"),
|
|
211
|
+
visual_diff=VisualDiffConfig(enabled=False),
|
|
212
|
+
)
|
|
213
|
+
|
|
214
|
+
watcher = TestQLWatcher(
|
|
215
|
+
project_root=str(root),
|
|
216
|
+
deps_file=str(root / "deps.json"),
|
|
217
|
+
scenarios_dir="testql-scenarios",
|
|
218
|
+
track_dir=".wup/tracks",
|
|
219
|
+
config=cfg,
|
|
220
|
+
)
|
|
221
|
+
|
|
222
|
+
# Differ is created but flagged disabled — run_for_service() must be a no-op
|
|
223
|
+
assert watcher.visual_differ is not None
|
|
224
|
+
assert watcher.visual_differ.cfg.enabled is False
|
|
225
|
+
results = asyncio.run(watcher.visual_differ.run_for_service("svc", ["/x"]))
|
|
226
|
+
assert results == []
|
|
227
|
+
|
|
228
|
+
|
|
229
|
+
def test_visual_differ_initialized_when_enabled():
|
|
230
|
+
"""When visual_diff.enabled=True, TestQLWatcher.visual_differ is a VisualDiffer."""
|
|
231
|
+
from wup.visual_diff import VisualDiffer
|
|
232
|
+
|
|
233
|
+
with tempfile.TemporaryDirectory() as tmpdir:
|
|
234
|
+
root = Path(tmpdir)
|
|
235
|
+
cfg = WupConfig(
|
|
236
|
+
project=ProjectConfig(name="demo"),
|
|
237
|
+
testql=TestQLConfig(scenario_dir="testql-scenarios"),
|
|
238
|
+
visual_diff=VisualDiffConfig(
|
|
239
|
+
enabled=True,
|
|
240
|
+
base_url="http://localhost:9000",
|
|
241
|
+
pages=["/dashboard"],
|
|
242
|
+
),
|
|
243
|
+
)
|
|
244
|
+
|
|
245
|
+
watcher = TestQLWatcher(
|
|
246
|
+
project_root=str(root),
|
|
247
|
+
deps_file=str(root / "deps.json"),
|
|
248
|
+
scenarios_dir="testql-scenarios",
|
|
249
|
+
track_dir=".wup/tracks",
|
|
250
|
+
config=cfg,
|
|
251
|
+
)
|
|
252
|
+
|
|
253
|
+
assert isinstance(watcher.visual_differ, VisualDiffer)
|
|
254
|
+
assert watcher.visual_differ.cfg.enabled is True
|
|
255
|
+
assert watcher.visual_differ.base_url == "http://localhost:9000"
|