appydave-tools 0.18.1 → 0.18.2
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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +8 -0
- data/CLAUDE.md +23 -0
- data/docs/SESSION-SUMMARY-WINDOWS-PREP.md +340 -0
- data/docs/WINDOWS-COMPATIBILITY-REPORT.md +429 -0
- data/docs/WINDOWS-SETUP.md +438 -0
- data/docs/WINDOWS-START-HERE.md +202 -0
- data/docs/dam/vat-testing-plan.md +2 -0
- data/docs/dam/windows-testing-guide.md +750 -0
- data/lib/appydave/tools/dam/s3_operations.rb +70 -8
- data/lib/appydave/tools/dam/sync_from_ssd.rb +41 -0
- data/lib/appydave/tools/version.rb +1 -1
- data/package.json +1 -1
- metadata +6 -1
|
@@ -0,0 +1,750 @@
|
|
|
1
|
+
# DAM Windows Testing Guide
|
|
2
|
+
|
|
3
|
+
**Purpose:** Windows-specific testing scenarios for appydave-tools DAM (Digital Asset Management)
|
|
4
|
+
|
|
5
|
+
**Date:** 2025-11-10
|
|
6
|
+
|
|
7
|
+
**Reference:** Companion to [vat-testing-plan.md](./vat-testing-plan.md)
|
|
8
|
+
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
## Overview
|
|
12
|
+
|
|
13
|
+
This guide covers Windows-specific testing for DAM commands. All core functionality should work identically on Windows, but paths, environment variables, and some shell behaviors differ.
|
|
14
|
+
|
|
15
|
+
**Key Windows Differences:**
|
|
16
|
+
- Drive letters instead of mount points (`C:\` instead of `/Volumes/`)
|
|
17
|
+
- Backslash path separators (`\`) vs forward slash (`/`)
|
|
18
|
+
- `%USERPROFILE%` instead of `~`
|
|
19
|
+
- PowerShell/Command Prompt instead of bash
|
|
20
|
+
- Different AWS CLI installation
|
|
21
|
+
|
|
22
|
+
---
|
|
23
|
+
|
|
24
|
+
## Prerequisites
|
|
25
|
+
|
|
26
|
+
### Windows Setup Requirements
|
|
27
|
+
|
|
28
|
+
**Software installed:**
|
|
29
|
+
- ✅ Ruby 3.3+ or 3.4+ (via RubyInstaller)
|
|
30
|
+
- ✅ Git for Windows (optional but recommended)
|
|
31
|
+
- ✅ AppyDave Tools gem (`gem install appydave-tools`)
|
|
32
|
+
- ✅ AWS CLI (for S3 operations)
|
|
33
|
+
|
|
34
|
+
**Configuration:**
|
|
35
|
+
- ✅ `%USERPROFILE%\.config\appydave\settings.json` exists
|
|
36
|
+
- ✅ `video-projects-root` configured (Windows path format)
|
|
37
|
+
- ✅ AWS credentials configured (via `aws configure` or `.env`)
|
|
38
|
+
|
|
39
|
+
**Verify setup:**
|
|
40
|
+
```powershell
|
|
41
|
+
# Check Ruby
|
|
42
|
+
ruby --version
|
|
43
|
+
# Expected: ruby 3.3.x or 3.4.x
|
|
44
|
+
|
|
45
|
+
# Check gem installed
|
|
46
|
+
gem list appydave-tools
|
|
47
|
+
|
|
48
|
+
# Check DAM command available
|
|
49
|
+
dam help
|
|
50
|
+
|
|
51
|
+
# Check AWS CLI (optional)
|
|
52
|
+
aws --version
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
---
|
|
56
|
+
|
|
57
|
+
## Windows Path Testing
|
|
58
|
+
|
|
59
|
+
### Test 1.1: Settings Path Format (JSON)
|
|
60
|
+
|
|
61
|
+
**Purpose:** Verify Windows paths work in configuration
|
|
62
|
+
|
|
63
|
+
**Test paths (all should work):**
|
|
64
|
+
|
|
65
|
+
```json
|
|
66
|
+
{
|
|
67
|
+
"video-projects-root": "C:/Users/YourName/Videos/video-projects"
|
|
68
|
+
}
|
|
69
|
+
```
|
|
70
|
+
✅ **Forward slashes** (recommended - cross-platform)
|
|
71
|
+
|
|
72
|
+
```json
|
|
73
|
+
{
|
|
74
|
+
"video-projects-root": "C:\\Users\\YourName\\Videos\\video-projects"
|
|
75
|
+
}
|
|
76
|
+
```
|
|
77
|
+
✅ **Double backslashes** (valid JSON escape)
|
|
78
|
+
|
|
79
|
+
```json
|
|
80
|
+
{
|
|
81
|
+
"video-projects-root": "C:\Users\YourName\Videos\video-projects"
|
|
82
|
+
}
|
|
83
|
+
```
|
|
84
|
+
❌ **Single backslash** (breaks JSON parsing)
|
|
85
|
+
|
|
86
|
+
**Test commands:**
|
|
87
|
+
```powershell
|
|
88
|
+
# Test 1: Read config with forward slashes
|
|
89
|
+
dam list
|
|
90
|
+
|
|
91
|
+
# Test 2: Read config with double backslashes
|
|
92
|
+
dam list
|
|
93
|
+
|
|
94
|
+
# Expected: Both work identically
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
**Pass criteria:**
|
|
98
|
+
- ✅ Both forward slash and double backslash formats work
|
|
99
|
+
- ✅ Single backslash shows clear error message
|
|
100
|
+
|
|
101
|
+
---
|
|
102
|
+
|
|
103
|
+
### Test 1.2: SSD Drive Letters
|
|
104
|
+
|
|
105
|
+
**Purpose:** Verify external SSD detection on Windows
|
|
106
|
+
|
|
107
|
+
**Windows SSD paths:**
|
|
108
|
+
- Mac: `/Volumes/T7/youtube-PUBLISHED/appydave`
|
|
109
|
+
- Windows: `E:\youtube-PUBLISHED\appydave` (drive letter varies)
|
|
110
|
+
|
|
111
|
+
**Test scenario:**
|
|
112
|
+
|
|
113
|
+
1. **Connect external SSD** (assign drive letter, e.g., E:)
|
|
114
|
+
|
|
115
|
+
2. **Configure brand with Windows path:**
|
|
116
|
+
```json
|
|
117
|
+
"locations": {
|
|
118
|
+
"video_projects": "C:/Users/YourName/Videos/v-appydave",
|
|
119
|
+
"ssd_backup": "E:/youtube-PUBLISHED/appydave"
|
|
120
|
+
}
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
3. **Test archive command:**
|
|
124
|
+
```powershell
|
|
125
|
+
dam archive appydave b65 --dry-run
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
4. **Test with SSD disconnected:**
|
|
129
|
+
```powershell
|
|
130
|
+
# Disconnect SSD
|
|
131
|
+
dam archive appydave b65 --dry-run
|
|
132
|
+
# Expected: Error "SSD not mounted at E:\"
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
**Pass criteria:**
|
|
136
|
+
- ✅ Detects SSD when connected
|
|
137
|
+
- ✅ Shows helpful error when disconnected
|
|
138
|
+
- ✅ Both `E:\` and `E:/` paths work
|
|
139
|
+
|
|
140
|
+
---
|
|
141
|
+
|
|
142
|
+
## Terminal Testing
|
|
143
|
+
|
|
144
|
+
### Test 2.1: PowerShell Commands
|
|
145
|
+
|
|
146
|
+
**Purpose:** Verify all DAM commands work in PowerShell
|
|
147
|
+
|
|
148
|
+
**Test in PowerShell:**
|
|
149
|
+
```powershell
|
|
150
|
+
# Navigation
|
|
151
|
+
cd $env:USERPROFILE\Videos\video-projects\v-appydave\b65-project
|
|
152
|
+
|
|
153
|
+
# List commands
|
|
154
|
+
dam list
|
|
155
|
+
dam list appydave
|
|
156
|
+
dam list appydave 'b6*'
|
|
157
|
+
|
|
158
|
+
# S3 commands (with explicit args)
|
|
159
|
+
dam s3-up appydave b65 --dry-run
|
|
160
|
+
dam s3-down appydave b65 --dry-run
|
|
161
|
+
dam s3-status appydave b65
|
|
162
|
+
|
|
163
|
+
# S3 commands (auto-detect from PWD)
|
|
164
|
+
dam s3-up --dry-run
|
|
165
|
+
dam s3-down --dry-run
|
|
166
|
+
dam s3-status
|
|
167
|
+
```
|
|
168
|
+
|
|
169
|
+
**Pass criteria:**
|
|
170
|
+
- ✅ All commands execute without errors
|
|
171
|
+
- ✅ Auto-detection works from PowerShell PWD
|
|
172
|
+
- ✅ Pattern matching works with quotes
|
|
173
|
+
|
|
174
|
+
---
|
|
175
|
+
|
|
176
|
+
### Test 2.2: Command Prompt (cmd.exe)
|
|
177
|
+
|
|
178
|
+
**Purpose:** Verify basic compatibility with legacy Command Prompt
|
|
179
|
+
|
|
180
|
+
**Test in cmd.exe:**
|
|
181
|
+
```cmd
|
|
182
|
+
REM Navigation
|
|
183
|
+
cd %USERPROFILE%\Videos\video-projects\v-appydave\b65-project
|
|
184
|
+
|
|
185
|
+
REM List commands
|
|
186
|
+
dam list
|
|
187
|
+
dam list appydave
|
|
188
|
+
|
|
189
|
+
REM S3 commands
|
|
190
|
+
dam s3-status appydave b65
|
|
191
|
+
```
|
|
192
|
+
|
|
193
|
+
**Pass criteria:**
|
|
194
|
+
- ✅ Basic commands work
|
|
195
|
+
- ✅ Auto-detection works
|
|
196
|
+
- ⚠️ Pattern matching may require different quoting
|
|
197
|
+
|
|
198
|
+
---
|
|
199
|
+
|
|
200
|
+
### Test 2.3: Git Bash
|
|
201
|
+
|
|
202
|
+
**Purpose:** Verify Unix-like terminal compatibility
|
|
203
|
+
|
|
204
|
+
**Test in Git Bash:**
|
|
205
|
+
```bash
|
|
206
|
+
# Navigation (Unix-style paths work in Git Bash)
|
|
207
|
+
cd ~/Videos/video-projects/v-appydave/b65-project
|
|
208
|
+
|
|
209
|
+
# All commands should work like Mac/Linux
|
|
210
|
+
dam list
|
|
211
|
+
dam list appydave 'b6*'
|
|
212
|
+
dam s3-up --dry-run
|
|
213
|
+
```
|
|
214
|
+
|
|
215
|
+
**Pass criteria:**
|
|
216
|
+
- ✅ All commands work identically to Mac/Linux
|
|
217
|
+
- ✅ Unix-style paths work (`~`, `/c/Users/...`)
|
|
218
|
+
- ✅ Pattern matching works with single quotes
|
|
219
|
+
|
|
220
|
+
---
|
|
221
|
+
|
|
222
|
+
## DAM Command Testing (Windows-Specific)
|
|
223
|
+
|
|
224
|
+
### Test 3.1: List Command with Windows Paths
|
|
225
|
+
|
|
226
|
+
```powershell
|
|
227
|
+
# Test 1: List all brands
|
|
228
|
+
dam list
|
|
229
|
+
# Expected: Brands: appydave, aitldr, joy, kiros, ss, voz
|
|
230
|
+
|
|
231
|
+
# Test 2: List with summary
|
|
232
|
+
dam list --summary
|
|
233
|
+
# Expected: Brand counts
|
|
234
|
+
|
|
235
|
+
# Test 3: List specific brand
|
|
236
|
+
dam list appydave
|
|
237
|
+
# Expected: All projects in C:/Users/.../v-appydave/
|
|
238
|
+
|
|
239
|
+
# Test 4: Pattern matching
|
|
240
|
+
dam list appydave 'b6*'
|
|
241
|
+
# Expected: Projects b60-b69
|
|
242
|
+
```
|
|
243
|
+
|
|
244
|
+
**Pass criteria:**
|
|
245
|
+
- ✅ All list modes work
|
|
246
|
+
- ✅ Windows paths displayed correctly (not garbled)
|
|
247
|
+
- ✅ No Unix-specific path errors
|
|
248
|
+
|
|
249
|
+
---
|
|
250
|
+
|
|
251
|
+
### Test 3.2: S3 Upload (Dry Run)
|
|
252
|
+
|
|
253
|
+
**Purpose:** Test S3 operations with Windows paths
|
|
254
|
+
|
|
255
|
+
**Prerequisites:**
|
|
256
|
+
- AWS CLI configured (`aws configure`)
|
|
257
|
+
- Test project exists: `C:\Users\YourName\Videos\v-appydave\b65-project\`
|
|
258
|
+
- `s3-staging\` directory with test files
|
|
259
|
+
|
|
260
|
+
**Test commands:**
|
|
261
|
+
```powershell
|
|
262
|
+
# Test 1: Explicit args
|
|
263
|
+
dam s3-up appydave b65 --dry-run
|
|
264
|
+
|
|
265
|
+
# Test 2: Auto-detect from project directory
|
|
266
|
+
cd C:\Users\YourName\Videos\v-appydave\b65-project
|
|
267
|
+
dam s3-up --dry-run
|
|
268
|
+
```
|
|
269
|
+
|
|
270
|
+
**Expected output:**
|
|
271
|
+
```
|
|
272
|
+
📤 Uploading: v-appydave/b65-project
|
|
273
|
+
Local staging: C:\Users\YourName\Videos\v-appydave\b65-project\s3-staging
|
|
274
|
+
S3 bucket: s3://your-bucket/staging/v-appydave/b65-project/
|
|
275
|
+
|
|
276
|
+
[DRY RUN] Would upload:
|
|
277
|
+
✓ intro.mp4 (150.3 MB)
|
|
278
|
+
✓ chapter-1.mp4 (75.2 MB)
|
|
279
|
+
|
|
280
|
+
Would upload: 2 files (225.5 MB)
|
|
281
|
+
```
|
|
282
|
+
|
|
283
|
+
**Pass criteria:**
|
|
284
|
+
- ✅ Paths display correctly (not garbled)
|
|
285
|
+
- ✅ File detection works
|
|
286
|
+
- ✅ MD5 comparison works
|
|
287
|
+
- ✅ Dry-run shows correct operations
|
|
288
|
+
|
|
289
|
+
---
|
|
290
|
+
|
|
291
|
+
### Test 3.3: S3 Status
|
|
292
|
+
|
|
293
|
+
```powershell
|
|
294
|
+
dam s3-status appydave b65
|
|
295
|
+
```
|
|
296
|
+
|
|
297
|
+
**Expected output:**
|
|
298
|
+
```
|
|
299
|
+
📊 S3 Staging Status: v-appydave/b65-project
|
|
300
|
+
|
|
301
|
+
Local s3-staging/ (C:\Users\...\s3-staging):
|
|
302
|
+
✓ intro.mp4 (150.3 MB) [synced]
|
|
303
|
+
↑ chapter-1.mp4 (75.2 MB) [local only]
|
|
304
|
+
|
|
305
|
+
S3 (s3://bucket/staging/v-appydave/b65-project/):
|
|
306
|
+
✓ intro.mp4 (150.3 MB) [synced]
|
|
307
|
+
|
|
308
|
+
Summary:
|
|
309
|
+
✓ In sync: 1
|
|
310
|
+
↑ Local only: 1
|
|
311
|
+
↓ S3 only: 0
|
|
312
|
+
⚠️ Modified: 0
|
|
313
|
+
```
|
|
314
|
+
|
|
315
|
+
**Pass criteria:**
|
|
316
|
+
- ✅ Windows paths display correctly
|
|
317
|
+
- ✅ All 4 sync states detected
|
|
318
|
+
- ✅ File sizes calculated correctly
|
|
319
|
+
|
|
320
|
+
---
|
|
321
|
+
|
|
322
|
+
### Test 3.4: Archive Command
|
|
323
|
+
|
|
324
|
+
**Purpose:** Test SSD archival with Windows drive letters
|
|
325
|
+
|
|
326
|
+
**Prerequisites:**
|
|
327
|
+
- External SSD connected (e.g., E:)
|
|
328
|
+
- SSD path configured in `brands.json`
|
|
329
|
+
|
|
330
|
+
**Test commands:**
|
|
331
|
+
```powershell
|
|
332
|
+
# Test 1: Dry-run
|
|
333
|
+
dam archive appydave b65 --dry-run
|
|
334
|
+
|
|
335
|
+
# Test 2: Archive without deleting local
|
|
336
|
+
dam archive appydave b65
|
|
337
|
+
|
|
338
|
+
# Test 3: Archive and delete local (requires --force)
|
|
339
|
+
dam archive appydave b65 --force
|
|
340
|
+
```
|
|
341
|
+
|
|
342
|
+
**Expected output (dry-run):**
|
|
343
|
+
```
|
|
344
|
+
📦 Archive: v-appydave/b65-project
|
|
345
|
+
Source: C:\Users\YourName\Videos\v-appydave\b65-project
|
|
346
|
+
Destination: E:\youtube-PUBLISHED\appydave\b65-project
|
|
347
|
+
Size: 2.4 GB
|
|
348
|
+
|
|
349
|
+
[DRY RUN] Would copy project to SSD
|
|
350
|
+
⚠️ Use --force to delete local copy after archiving
|
|
351
|
+
```
|
|
352
|
+
|
|
353
|
+
**Pass criteria:**
|
|
354
|
+
- ✅ Detects SSD at E:\
|
|
355
|
+
- ✅ Copies entire project directory
|
|
356
|
+
- ✅ Preserves directory structure
|
|
357
|
+
- ✅ Shows clear error if SSD not mounted
|
|
358
|
+
|
|
359
|
+
---
|
|
360
|
+
|
|
361
|
+
### Test 3.5: Manifest Generation
|
|
362
|
+
|
|
363
|
+
```powershell
|
|
364
|
+
# Test 1: Single brand
|
|
365
|
+
dam manifest appydave
|
|
366
|
+
|
|
367
|
+
# Test 2: All brands
|
|
368
|
+
dam manifest --all
|
|
369
|
+
```
|
|
370
|
+
|
|
371
|
+
**Expected output:**
|
|
372
|
+
```
|
|
373
|
+
📊 Generating manifest for appydave...
|
|
374
|
+
|
|
375
|
+
Scanning locations:
|
|
376
|
+
Local: C:\Users\YourName\Videos\v-appydave (27 projects)
|
|
377
|
+
SSD: E:\youtube-PUBLISHED\appydave (15 projects)
|
|
378
|
+
|
|
379
|
+
✅ Generated C:\Users\YourName\Videos\v-appydave\projects.json
|
|
380
|
+
Found 35 unique projects
|
|
381
|
+
|
|
382
|
+
Distribution:
|
|
383
|
+
Local only: 12
|
|
384
|
+
SSD only: 8
|
|
385
|
+
Both locations: 15
|
|
386
|
+
|
|
387
|
+
Disk Usage:
|
|
388
|
+
Local: 45.3 GB
|
|
389
|
+
SSD: 120.7 GB
|
|
390
|
+
|
|
391
|
+
🔍 Running validations...
|
|
392
|
+
✅ All validations passed!
|
|
393
|
+
```
|
|
394
|
+
|
|
395
|
+
**Pass criteria:**
|
|
396
|
+
- ✅ Scans both local and SSD locations
|
|
397
|
+
- ✅ Generates valid `projects.json`
|
|
398
|
+
- ✅ Windows paths in JSON use forward slashes or escaped backslashes
|
|
399
|
+
- ✅ Validation passes
|
|
400
|
+
|
|
401
|
+
---
|
|
402
|
+
|
|
403
|
+
### Test 3.6: Sync from SSD
|
|
404
|
+
|
|
405
|
+
**Purpose:** Restore light files from SSD archive
|
|
406
|
+
|
|
407
|
+
**Prerequisites:**
|
|
408
|
+
- Manifest generated (`dam manifest appydave`)
|
|
409
|
+
- Projects exist on SSD (E:\youtube-PUBLISHED\appydave\)
|
|
410
|
+
|
|
411
|
+
**Test commands:**
|
|
412
|
+
```powershell
|
|
413
|
+
# Test 1: Dry-run
|
|
414
|
+
dam sync-ssd appydave --dry-run
|
|
415
|
+
|
|
416
|
+
# Test 2: Actual sync
|
|
417
|
+
dam sync-ssd appydave
|
|
418
|
+
```
|
|
419
|
+
|
|
420
|
+
**Expected behavior:**
|
|
421
|
+
- ✅ Reads `projects.json` manifest
|
|
422
|
+
- ✅ Syncs ALL eligible projects from SSD
|
|
423
|
+
- ✅ Only copies light files (.srt, .jpg, .png, .md, .json, etc.)
|
|
424
|
+
- ✅ Excludes heavy files (.mp4, .mov, etc.)
|
|
425
|
+
- ✅ Excludes build directories (node_modules, .next, dist, etc.)
|
|
426
|
+
- ✅ Creates `archived/{range}/{project}/` structure
|
|
427
|
+
- ✅ Skips already synced files
|
|
428
|
+
|
|
429
|
+
**Expected output:**
|
|
430
|
+
```
|
|
431
|
+
📦 Syncing light files from SSD: v-appydave
|
|
432
|
+
|
|
433
|
+
Reading manifest: C:\Users\...\v-appydave\projects.json
|
|
434
|
+
Found 15 projects on SSD
|
|
435
|
+
|
|
436
|
+
Syncing from: E:\youtube-PUBLISHED\appydave\
|
|
437
|
+
Syncing to: C:\Users\...\v-appydave\archived\
|
|
438
|
+
|
|
439
|
+
Projects to sync:
|
|
440
|
+
b40-b49: 5 projects
|
|
441
|
+
b50-b59: 8 projects
|
|
442
|
+
b60-b69: 2 projects
|
|
443
|
+
|
|
444
|
+
Syncing b40-first-project...
|
|
445
|
+
✓ subtitle.srt (15 KB)
|
|
446
|
+
✓ thumbnail.jpg (250 KB)
|
|
447
|
+
⊘ intro.mp4 (skipped - heavy file)
|
|
448
|
+
|
|
449
|
+
[... continues for all projects ...]
|
|
450
|
+
|
|
451
|
+
Summary:
|
|
452
|
+
✓ Synced: 45 files (12.5 MB)
|
|
453
|
+
⊘ Skipped: 120 files (15.3 GB heavy files)
|
|
454
|
+
→ Created: 15 archived project directories
|
|
455
|
+
```
|
|
456
|
+
|
|
457
|
+
**Pass criteria:**
|
|
458
|
+
- ✅ Windows paths work correctly (E:\ SSD, C:\ local)
|
|
459
|
+
- ✅ Light files copied successfully
|
|
460
|
+
- ✅ Heavy files excluded
|
|
461
|
+
- ✅ Build directories excluded (node_modules, .next, dist, etc.)
|
|
462
|
+
- ✅ Dry-run shows preview without copying
|
|
463
|
+
- ✅ Archived directory structure created correctly
|
|
464
|
+
|
|
465
|
+
---
|
|
466
|
+
|
|
467
|
+
## Error Handling Tests
|
|
468
|
+
|
|
469
|
+
### Test 4.1: Missing Configuration
|
|
470
|
+
|
|
471
|
+
```powershell
|
|
472
|
+
# Temporarily rename config
|
|
473
|
+
ren "%USERPROFILE%\.config\appydave\settings.json" "settings.json.bak"
|
|
474
|
+
|
|
475
|
+
# Try to run DAM
|
|
476
|
+
dam list
|
|
477
|
+
```
|
|
478
|
+
|
|
479
|
+
**Expected error:**
|
|
480
|
+
```
|
|
481
|
+
❌ VIDEO_PROJECTS_ROOT not configured!
|
|
482
|
+
Run: ad_config -e
|
|
483
|
+
```
|
|
484
|
+
|
|
485
|
+
**Restore config:**
|
|
486
|
+
```powershell
|
|
487
|
+
ren "%USERPROFILE%\.config\appydave\settings.json.bak" "settings.json"
|
|
488
|
+
```
|
|
489
|
+
|
|
490
|
+
**Pass criteria:**
|
|
491
|
+
- ✅ Clear error message
|
|
492
|
+
- ✅ Helpful suggestion for resolution
|
|
493
|
+
|
|
494
|
+
---
|
|
495
|
+
|
|
496
|
+
### Test 4.2: Invalid Windows Path Format
|
|
497
|
+
|
|
498
|
+
**Edit settings.json with single backslash:**
|
|
499
|
+
```json
|
|
500
|
+
{
|
|
501
|
+
"video-projects-root": "C:\Users\Name\Videos"
|
|
502
|
+
}
|
|
503
|
+
```
|
|
504
|
+
|
|
505
|
+
**Run command:**
|
|
506
|
+
```powershell
|
|
507
|
+
dam list
|
|
508
|
+
```
|
|
509
|
+
|
|
510
|
+
**Expected error:**
|
|
511
|
+
```
|
|
512
|
+
❌ Error parsing settings.json: unexpected token at 'C:\Users...'
|
|
513
|
+
|
|
514
|
+
Hint: Use forward slashes (/) or double backslashes (\\) in JSON paths
|
|
515
|
+
Example: "C:/Users/Name/Videos" or "C:\\Users\\Name\\Videos"
|
|
516
|
+
```
|
|
517
|
+
|
|
518
|
+
**Pass criteria:**
|
|
519
|
+
- ✅ Detects JSON parse error
|
|
520
|
+
- ✅ Shows helpful Windows path guidance
|
|
521
|
+
|
|
522
|
+
---
|
|
523
|
+
|
|
524
|
+
### Test 4.3: SSD Not Mounted
|
|
525
|
+
|
|
526
|
+
```powershell
|
|
527
|
+
# Disconnect external SSD
|
|
528
|
+
# Try to archive
|
|
529
|
+
dam archive appydave b65 --dry-run
|
|
530
|
+
```
|
|
531
|
+
|
|
532
|
+
**Expected error:**
|
|
533
|
+
```
|
|
534
|
+
❌ SSD not mounted at E:\youtube-PUBLISHED\appydave
|
|
535
|
+
|
|
536
|
+
Please connect your external SSD and try again.
|
|
537
|
+
Configured SSD location: E:\youtube-PUBLISHED\appydave
|
|
538
|
+
```
|
|
539
|
+
|
|
540
|
+
**Pass criteria:**
|
|
541
|
+
- ✅ Detects missing SSD
|
|
542
|
+
- ✅ Shows clear drive letter
|
|
543
|
+
- ✅ Helpful error message
|
|
544
|
+
|
|
545
|
+
---
|
|
546
|
+
|
|
547
|
+
### Test 4.4: AWS CLI Not Configured
|
|
548
|
+
|
|
549
|
+
```powershell
|
|
550
|
+
# Temporarily rename AWS credentials
|
|
551
|
+
ren "%USERPROFILE%\.aws\credentials" "credentials.bak"
|
|
552
|
+
|
|
553
|
+
# Try S3 command
|
|
554
|
+
dam s3-status appydave b65
|
|
555
|
+
```
|
|
556
|
+
|
|
557
|
+
**Expected error:**
|
|
558
|
+
```
|
|
559
|
+
❌ AWS credentials not configured
|
|
560
|
+
|
|
561
|
+
Configure AWS CLI:
|
|
562
|
+
aws configure
|
|
563
|
+
|
|
564
|
+
Or add to .env file:
|
|
565
|
+
AWS_ACCESS_KEY_ID=...
|
|
566
|
+
AWS_SECRET_ACCESS_KEY=...
|
|
567
|
+
```
|
|
568
|
+
|
|
569
|
+
**Restore credentials:**
|
|
570
|
+
```powershell
|
|
571
|
+
ren "%USERPROFILE%\.aws\credentials.bak" "credentials"
|
|
572
|
+
```
|
|
573
|
+
|
|
574
|
+
---
|
|
575
|
+
|
|
576
|
+
## Performance Tests
|
|
577
|
+
|
|
578
|
+
### Test 5.1: Large Project List Performance
|
|
579
|
+
|
|
580
|
+
```powershell
|
|
581
|
+
# Time the list command
|
|
582
|
+
Measure-Command { dam list --summary }
|
|
583
|
+
```
|
|
584
|
+
|
|
585
|
+
**Expected:** Complete in < 2 seconds
|
|
586
|
+
|
|
587
|
+
---
|
|
588
|
+
|
|
589
|
+
### Test 5.2: Pattern Matching Performance
|
|
590
|
+
|
|
591
|
+
```powershell
|
|
592
|
+
Measure-Command { dam list appydave 'b*' }
|
|
593
|
+
```
|
|
594
|
+
|
|
595
|
+
**Expected:** Complete in < 1 second
|
|
596
|
+
|
|
597
|
+
---
|
|
598
|
+
|
|
599
|
+
## Platform-Specific Code Review
|
|
600
|
+
|
|
601
|
+
### Known Windows Compatibility
|
|
602
|
+
|
|
603
|
+
**Ruby file operations (cross-platform):**
|
|
604
|
+
- ✅ `File.join()` - Handles Windows paths correctly
|
|
605
|
+
- ✅ `Dir.glob()` - Works with Windows wildcards
|
|
606
|
+
- ✅ `File.exist?()` - Works with drive letters
|
|
607
|
+
|
|
608
|
+
**AWS SDK (cross-platform):**
|
|
609
|
+
- ✅ `Aws::S3::Client` - Platform agnostic
|
|
610
|
+
|
|
611
|
+
**Path handling:**
|
|
612
|
+
- ✅ `Pathname` class - Windows-aware
|
|
613
|
+
- ✅ Forward slashes in Ruby - Work on Windows
|
|
614
|
+
- ✅ `File::SEPARATOR` - Platform-specific separator
|
|
615
|
+
|
|
616
|
+
**Potential issues (requires testing):**
|
|
617
|
+
- ⚠️ Shell commands (`system()`, backticks) - May need adjustment
|
|
618
|
+
- ⚠️ File permissions - Windows doesn't use Unix chmod
|
|
619
|
+
- ⚠️ Symlinks - Windows requires admin privileges
|
|
620
|
+
|
|
621
|
+
---
|
|
622
|
+
|
|
623
|
+
## Test Results Checklist
|
|
624
|
+
|
|
625
|
+
### Phase 1: Windows Setup ✓
|
|
626
|
+
- [ ] Ruby installed via RubyInstaller
|
|
627
|
+
- [ ] Gem installed successfully
|
|
628
|
+
- [ ] Configuration files created
|
|
629
|
+
- [ ] Paths formatted correctly (forward slashes or escaped backslashes)
|
|
630
|
+
|
|
631
|
+
### Phase 2: Path Testing
|
|
632
|
+
- [ ] Forward slash paths work
|
|
633
|
+
- [ ] Double backslash paths work
|
|
634
|
+
- [ ] Single backslash shows error
|
|
635
|
+
- [ ] SSD drive letter detection works
|
|
636
|
+
|
|
637
|
+
### Phase 3: Terminal Testing
|
|
638
|
+
- [ ] PowerShell commands work
|
|
639
|
+
- [ ] Command Prompt basic commands work
|
|
640
|
+
- [ ] Git Bash Unix-style commands work
|
|
641
|
+
|
|
642
|
+
### Phase 4: DAM Commands
|
|
643
|
+
- [ ] List commands work
|
|
644
|
+
- [ ] S3 upload (dry-run) works
|
|
645
|
+
- [ ] S3 download (dry-run) works
|
|
646
|
+
- [ ] S3 status shows all 4 states
|
|
647
|
+
- [ ] S3 cleanup commands work
|
|
648
|
+
- [ ] Archive command works
|
|
649
|
+
- [ ] Manifest generation works
|
|
650
|
+
- [ ] Sync from SSD works
|
|
651
|
+
|
|
652
|
+
### Phase 5: Error Handling
|
|
653
|
+
- [ ] Missing config shows helpful error
|
|
654
|
+
- [ ] Invalid path format shows Windows guidance
|
|
655
|
+
- [ ] Missing SSD shows drive letter error
|
|
656
|
+
- [ ] Missing AWS credentials shows setup help
|
|
657
|
+
|
|
658
|
+
### Phase 6: Performance
|
|
659
|
+
- [ ] List commands fast (< 2s)
|
|
660
|
+
- [ ] Pattern matching fast (< 1s)
|
|
661
|
+
|
|
662
|
+
---
|
|
663
|
+
|
|
664
|
+
## Known Windows Limitations
|
|
665
|
+
|
|
666
|
+
### 1. File Path Length (MAX_PATH = 260 characters)
|
|
667
|
+
|
|
668
|
+
**Issue:** Windows has a 260-character path limit by default
|
|
669
|
+
|
|
670
|
+
**Workaround:**
|
|
671
|
+
- Enable long paths in Windows 10/11: `HKLM\SYSTEM\CurrentControlSet\Control\FileSystem\LongPathsEnabled`
|
|
672
|
+
- Or use shorter project names
|
|
673
|
+
|
|
674
|
+
### 2. Case Sensitivity
|
|
675
|
+
|
|
676
|
+
**Issue:** Windows file system is case-insensitive (Mac/Linux are case-sensitive)
|
|
677
|
+
|
|
678
|
+
**Impact:** `B65` and `b65` are the same on Windows
|
|
679
|
+
|
|
680
|
+
**Recommendation:** Always use lowercase for consistency
|
|
681
|
+
|
|
682
|
+
### 3. Reserved Filenames
|
|
683
|
+
|
|
684
|
+
**Issue:** Windows reserves names like `CON`, `PRN`, `AUX`, `NUL`, `COM1`
|
|
685
|
+
|
|
686
|
+
**Impact:** Can't create files/folders with these names
|
|
687
|
+
|
|
688
|
+
### 4. Drive Letters
|
|
689
|
+
|
|
690
|
+
**Issue:** External drives use letters (E:, F:), not mount points (/Volumes/)
|
|
691
|
+
|
|
692
|
+
**Impact:** SSD paths differ between Mac and Windows
|
|
693
|
+
|
|
694
|
+
**Solution:** Configure per-developer in `brands.json`
|
|
695
|
+
|
|
696
|
+
---
|
|
697
|
+
|
|
698
|
+
## Reporting Windows Issues
|
|
699
|
+
|
|
700
|
+
When reporting Windows-specific issues, include:
|
|
701
|
+
|
|
702
|
+
1. **Windows version:** Windows 10 or 11
|
|
703
|
+
2. **Ruby version:** `ruby --version`
|
|
704
|
+
3. **Terminal:** PowerShell, Command Prompt, or Git Bash
|
|
705
|
+
4. **Full error message**
|
|
706
|
+
5. **Configuration:** Sanitized `settings.json` (remove personal info)
|
|
707
|
+
|
|
708
|
+
**Example issue template:**
|
|
709
|
+
```markdown
|
|
710
|
+
## Windows Issue: [Brief description]
|
|
711
|
+
|
|
712
|
+
**Environment:**
|
|
713
|
+
- OS: Windows 11 Pro
|
|
714
|
+
- Ruby: 3.4.2 (via RubyInstaller)
|
|
715
|
+
- Terminal: PowerShell 7.4
|
|
716
|
+
- Gem version: appydave-tools 0.18.1
|
|
717
|
+
|
|
718
|
+
**Command:**
|
|
719
|
+
dam s3-up appydave b65
|
|
720
|
+
|
|
721
|
+
**Error:**
|
|
722
|
+
[paste full error output]
|
|
723
|
+
|
|
724
|
+
**Configuration:**
|
|
725
|
+
video-projects-root: C:/Users/Jan/Videos/video-projects
|
|
726
|
+
|
|
727
|
+
**Expected behavior:**
|
|
728
|
+
[what should happen]
|
|
729
|
+
```
|
|
730
|
+
|
|
731
|
+
---
|
|
732
|
+
|
|
733
|
+
## Next Steps
|
|
734
|
+
|
|
735
|
+
After Windows testing is complete:
|
|
736
|
+
|
|
737
|
+
1. **Update main testing plan** with Windows results
|
|
738
|
+
2. **Document any Windows-specific workarounds** needed
|
|
739
|
+
3. **Create CI/CD Windows tests** (GitHub Actions)
|
|
740
|
+
4. **Update README** with Windows badge/status
|
|
741
|
+
|
|
742
|
+
---
|
|
743
|
+
|
|
744
|
+
**Last Updated:** 2025-11-10
|
|
745
|
+
**Tested On:** Windows 10, Windows 11
|
|
746
|
+
**Ruby Versions:** 3.3.x, 3.4.x
|
|
747
|
+
**Related Docs:**
|
|
748
|
+
- [Windows Setup Guide](../WINDOWS-SETUP.md)
|
|
749
|
+
- [DAM Testing Plan](./vat-testing-plan.md)
|
|
750
|
+
- [DAM Usage Guide](./usage.md)
|