@rbaileysr/zephyr-managed-api 1.3.11 → 1.4.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/README.md CHANGED
@@ -177,7 +177,16 @@ Response Details: {
177
177
  - **DataSets**: `getDataSets`, `createDataSet`, `updateDataSet`
178
178
  - **archiveConfig** - Archive a config item (Environment, Iteration, or Status)
179
179
  - **unarchiveConfig** - Unarchive a config item (Environment, Iteration, or Status)
180
- - ### Versions
180
+ - ### TestCase (entity-based group - v1.4.0+)
181
+ - **Archiving**: `getArchivedTestCases`, `archiveTestCases`, `unarchiveTestCases`
182
+ - **TestScriptData**: `setTestCaseParamTypeToParameter`, `setTestCaseParameters`, `setTestCaseParamTypeToTestData`, `setTestCaseTestData`, `getTestCaseTestData`, `hasTestCaseTestData`
183
+ - **Versions**: `createTestCaseVersion`
184
+ - ### TestCycle (entity-based group - v1.4.0+)
185
+ - **ExtendedData**: `getTestCycleIteration`, `updateTestCycleIteration`
186
+ - ### TestExecution (entity-based group - v1.4.0+)
187
+ - **ExtendedData**: `getTestExecutionIteration`, `updateTestExecutionIteration`, `getTestExecutionVersion`, `updateTestExecutionVersion`
188
+ - **Methods**: `createTestExecutionWithTestData`, `createTestExecutionWithVersion`, `updateTestExecution`, `getTestExecutionSteps`, `updateTestExecutionStepStatus`, `updateTestExecutionStepComment`, `getTestCycleItems`
189
+ - ### Versions (deprecated - use `Private.TestCase.Versions` instead)
181
190
  - **createTestCaseVersion** - Create a new test case version
182
191
  - ### Attachments
183
192
  - **Test Case**: `getTestCaseAttachments`, `downloadAttachment`, `createTestCaseAttachment`
@@ -189,15 +198,15 @@ Response Details: {
189
198
  - ### VersionControl
190
199
  - **Test Case (version-specific)**: `getTestCaseIssueLinks`, `getTestCaseWebLinks`, `getTestCaseTestScript`, `getTestCaseTestSteps`
191
200
  - **Test Execution Step**: `getTestExecutionStepIssueLinks`, `createTestExecutionStepIssueLink`
192
- - ### ExtendedData (supplements public API with extended data: iterations and versions)
201
+ - ### ExtendedData (deprecated - use `Private.TestCycle.ExtendedData` or `Private.TestExecution.ExtendedData` instead)
193
202
  - **Test Cycle**: `getTestCycleIteration`, `updateTestCycleIteration`
194
203
  - **Test Execution**: `getTestExecutionIteration`, `updateTestExecutionIteration`, `getTestExecutionVersion`, `updateTestExecutionVersion`
195
- - ### TestCaseArchiving (access archived test cases and archiving operations)
204
+ - ### TestCaseArchiving (deprecated - use `Private.TestCase.Archiving` instead)
196
205
  - **Test Case**: `getArchivedTestCases`, `archiveTestCases`, `unarchiveTestCases`
197
- - ### TestScriptData (manage test script data: Parameters and Test Data)
206
+ - ### TestScriptData (deprecated - use `Private.TestCase.TestScriptData` instead)
198
207
  - **Test Case**: `setTestCaseParamTypeToParameter`, `setTestCaseParameters`, `setTestCaseParamTypeToTestData`, `setTestCaseTestData`, `getTestCaseTestData`, `hasTestCaseTestData`
199
- - ### TestExecutions (create and update test executions for test cases with test data)
200
- - **Test Execution**: `createTestExecutionWithTestData`, `updateTestExecution`, `getTestExecutionSteps`, `updateTestExecutionStepStatus`, `updateTestExecutionStepComment`
208
+ - ### TestExecutions (deprecated - use `Private.TestExecution` instead)
209
+ - **Test Execution**: `createTestExecutionWithTestData`, `createTestExecutionWithVersion`, `updateTestExecution`, `getTestExecutionSteps`, `updateTestExecutionStepStatus`, `updateTestExecutionStepComment`
201
210
  - **Test Cycle**: `getTestCycleItems`
202
211
 
203
212
  ## Private API Authentication
@@ -305,8 +314,8 @@ await api.Private.Config.unarchiveConfig(credentials, {
305
314
  ### Example: Create Test Case Version
306
315
 
307
316
  ```typescript
308
- // Create a new version of an existing test case
309
- const newVersion = await api.Private.Versions.createTestCaseVersion(
317
+ // Create a new version of an existing test case (v1.4.0+)
318
+ const newVersion = await api.Private.TestCase.Versions.createTestCaseVersion(
310
319
  credentials,
311
320
  {
312
321
  testCaseKey: 'PROJ-T1', // Uses key, looks up ID automatically
@@ -315,6 +324,8 @@ const newVersion = await api.Private.Versions.createTestCaseVersion(
315
324
  );
316
325
  ```
317
326
 
327
+ **Note:** The old path (`Private.Versions.createTestCaseVersion`) still works but is deprecated. Use `Private.TestCase.Versions.createTestCaseVersion` for better organization.
328
+
318
329
  ### Example: Upload Attachment
319
330
 
320
331
  ```typescript
@@ -367,25 +378,25 @@ await api.Private.VersionControl.createTestExecutionStepIssueLink(credentials, {
367
378
 
368
379
  ### Example: Extended Data (Supplements Public API)
369
380
 
370
- The public API does not support iterations for Test Cycles/Executions or Jira version IDs for Test Executions. Use `ExtendedData` to supplement public API calls.
381
+ The public API does not support iterations for Test Cycles/Executions or Jira version IDs for Test Executions. Use entity-based groups (v1.4.0+) to supplement public API calls.
371
382
 
372
383
  ```typescript
373
- // Test Cycle: Set/get iteration
384
+ // Test Cycle: Set/get iteration (v1.4.0+)
374
385
  const testCycle = await api.TestCycle.createTestCycle({
375
386
  projectKey: 'M12',
376
387
  name: 'Sprint 1 Testing'
377
388
  });
378
- await api.Private.ExtendedData.updateTestCycleIteration(credentials, {
389
+ await api.Private.TestCycle.ExtendedData.updateTestCycleIteration(credentials, {
379
390
  testCycleKey: testCycle.key,
380
391
  projectId: 10313,
381
392
  iterationId: 10952254
382
393
  });
383
- const cycleIteration = await api.Private.ExtendedData.getTestCycleIteration(credentials, {
394
+ const cycleIteration = await api.Private.TestCycle.ExtendedData.getTestCycleIteration(credentials, {
384
395
  testCycleKey: 'M12-R1',
385
396
  projectId: 10313
386
397
  });
387
398
 
388
- // Test Execution: Set/get iteration and version
399
+ // Test Execution: Set/get iteration and version (v1.4.0+)
389
400
  await api.TestExecution.createTestExecution({
390
401
  projectKey: 'M12',
391
402
  testCaseKey: 'M12-T1',
@@ -393,32 +404,34 @@ await api.TestExecution.createTestExecution({
393
404
  statusName: 'Pass'
394
405
  });
395
406
  // Note: createTestExecution returns void - use known key or look up via listTestExecutions()
396
- await api.Private.ExtendedData.updateTestExecutionIteration(credentials, {
407
+ await api.Private.TestExecution.ExtendedData.updateTestExecutionIteration(credentials, {
397
408
  testExecutionKey: 'M12-E1',
398
409
  projectId: 10313,
399
410
  iterationId: 10952254
400
411
  });
401
- await api.Private.ExtendedData.updateTestExecutionVersion(credentials, {
412
+ await api.Private.TestExecution.ExtendedData.updateTestExecutionVersion(credentials, {
402
413
  testExecutionKey: 'M15-E3',
403
414
  projectId: 10316,
404
415
  jiraVersionId: 10102
405
416
  });
406
417
 
407
418
  // Clear by setting to null
408
- await api.Private.ExtendedData.updateTestCycleIteration(credentials, {
419
+ await api.Private.TestCycle.ExtendedData.updateTestCycleIteration(credentials, {
409
420
  testCycleKey: 'M12-R1',
410
421
  projectId: 10313,
411
422
  iterationId: null
412
423
  });
413
424
  ```
414
425
 
426
+ **Note:** The old paths (`Private.ExtendedData.*`) still work but are deprecated. Use the new entity-based paths (`Private.TestCycle.ExtendedData.*` and `Private.TestExecution.ExtendedData.*`) for better organization.
427
+
415
428
  ### Example: Test Case Archiving
416
429
 
417
- The public API does not expose the archived flag. Use `TestCaseArchiving` to list, archive, and unarchive test cases.
430
+ The public API does not expose the archived flag. Use `Private.TestCase.Archiving` (v1.4.0+) to list, archive, and unarchive test cases.
418
431
 
419
432
  ```typescript
420
433
  // Get archived test cases (paginated, optional query filter)
421
- const archived = await api.Private.TestCaseArchiving.getArchivedTestCases(credentials, {
434
+ const archived = await api.Private.TestCase.Archiving.getArchivedTestCases(credentials, {
422
435
  projectId: 10316,
423
436
  maxResults: 50,
424
437
  startAt: 0,
@@ -426,45 +439,47 @@ const archived = await api.Private.TestCaseArchiving.getArchivedTestCases(creden
426
439
  });
427
440
 
428
441
  // Archive test cases (single or multiple)
429
- await api.Private.TestCaseArchiving.archiveTestCases(credentials, {
442
+ await api.Private.TestCase.Archiving.archiveTestCases(credentials, {
430
443
  projectId: 10316,
431
444
  testCaseIds: [288004503, 288004504, 288004505]
432
445
  });
433
446
 
434
447
  // Unarchive test cases
435
- await api.Private.TestCaseArchiving.unarchiveTestCases(credentials, {
448
+ await api.Private.TestCase.Archiving.unarchiveTestCases(credentials, {
436
449
  projectId: 10316,
437
450
  testCaseIds: [288004503]
438
451
  });
439
452
  ```
440
453
 
454
+ **Note:** The old path (`Private.TestCaseArchiving.*`) still works but is deprecated. Use `Private.TestCase.Archiving.*` for better organization.
455
+
441
456
  ### Test Script Data
442
457
 
443
- The public API does not expose test script data (Parameters and Test Data). Use `TestScriptData` to manage this data.
458
+ The public API does not expose test script data (Parameters and Test Data). Use `Private.TestCase.TestScriptData` (v1.4.0+) to manage this data.
444
459
 
445
460
  ```typescript
446
461
  // Check if test case has test script data
447
- const hasData = await api.Private.TestScriptData.hasTestCaseTestData(credentials, {
462
+ const hasData = await api.Private.TestCase.TestScriptData.hasTestCaseTestData(credentials, {
448
463
  testCaseKey: 'M14-T6',
449
464
  projectId: 10315
450
465
  });
451
466
  // Returns: { hasData: true, type: 'PARAMETER' } or { hasData: false, type: null }
452
467
 
453
468
  // Get test script data
454
- const testData = await api.Private.TestScriptData.getTestCaseTestData(credentials, {
469
+ const testData = await api.Private.TestCase.TestScriptData.getTestCaseTestData(credentials, {
455
470
  testCaseKey: 'M14-T6',
456
471
  projectId: 10315
457
472
  });
458
473
  // Returns: { paramType: 'PARAMETER' | 'TEST_DATA' | null, parameters: [...], testData: [...] }
459
474
 
460
475
  // Set test case to use Parameters
461
- await api.Private.TestScriptData.setTestCaseParamTypeToParameter(credentials, {
476
+ await api.Private.TestCase.TestScriptData.setTestCaseParamTypeToParameter(credentials, {
462
477
  testCaseKey: 'M14-T6',
463
478
  projectId: 10315
464
479
  });
465
480
 
466
481
  // Set parameters
467
- await api.Private.TestScriptData.setTestCaseParameters(credentials, {
482
+ await api.Private.TestCase.TestScriptData.setTestCaseParameters(credentials, {
468
483
  testCaseKey: 'M14-T6',
469
484
  projectId: 10315,
470
485
  parameters: [
@@ -474,13 +489,13 @@ await api.Private.TestScriptData.setTestCaseParameters(credentials, {
474
489
  });
475
490
 
476
491
  // Set test case to use Test Data
477
- await api.Private.TestScriptData.setTestCaseParamTypeToTestData(credentials, {
492
+ await api.Private.TestCase.TestScriptData.setTestCaseParamTypeToTestData(credentials, {
478
493
  testCaseKey: 'M14-T6',
479
494
  projectId: 10315
480
495
  });
481
496
 
482
497
  // Set test data (simplified array format)
483
- await api.Private.TestScriptData.setTestCaseTestData(credentials, {
498
+ await api.Private.TestCase.TestScriptData.setTestCaseTestData(credentials, {
484
499
  testCaseKey: 'M14-T6',
485
500
  projectId: 10315,
486
501
  testData: [
@@ -493,9 +508,11 @@ await api.Private.TestScriptData.setTestCaseTestData(credentials, {
493
508
  });
494
509
  ```
495
510
 
511
+ **Note:** The old path (`Private.TestScriptData.*`) still works but is deprecated. Use `Private.TestCase.TestScriptData.*` for better organization.
512
+
496
513
  ### Test Executions with Test Data
497
514
 
498
- The public API does not correctly handle creating test executions for test cases with test data or test cases with "Call to Test" steps that reference test cases with test data. Use `TestExecutions` to create and update these executions.
515
+ The public API does not correctly handle creating test executions for test cases with test data or test cases with "Call to Test" steps that reference test cases with test data. Use `Private.TestExecution` (v1.4.0+) to create and update these executions.
499
516
 
500
517
  ```typescript
501
518
  // Create test execution for test case with test data
@@ -503,7 +520,7 @@ The public API does not correctly handle creating test executions for test cases
503
520
  // 1. Creates execution via public API
504
521
  // 2. Gets testRunItemId from private API
505
522
  // 3. Creates actual execution via private API
506
- const execution = await api.Private.TestExecutions.createTestExecutionWithTestData(credentials, {
523
+ const execution = await api.Private.TestExecution.createTestExecutionWithTestData(credentials, {
507
524
  testCaseKey: 'M14-T6',
508
525
  testCycleKey: 'M14-R1',
509
526
  assignedTo: '5d259f2e0b81c60c239bed83', // optional
@@ -511,14 +528,35 @@ const execution = await api.Private.TestExecutions.createTestExecutionWithTestDa
511
528
  });
512
529
  // Returns: { id: 2065132733, key: 'M14-E18' }
513
530
 
531
+ // Create test execution for specific test case version (not just latest)
532
+ // Unlike the public API which only creates executions against the latest version,
533
+ // this allows creating executions against any version of a test case
534
+ const executionWithVersion = await api.Private.TestExecution.createTestExecutionWithVersion(credentials, {
535
+ body: {
536
+ projectKey: 'M14',
537
+ testCaseKey: 'M14-T6',
538
+ testCycleKey: 'M14-R1',
539
+ statusName: 'Not Executed',
540
+ version: 2, // Create execution against version 2 of the test case
541
+ environmentName: 'Production', // optional
542
+ assignedToId: '5d259f2e0b81c60c239bed83', // optional
543
+ comment: 'Testing version 2', // optional
544
+ },
545
+ projectId: 10315,
546
+ assignedTo: '5d259f2e0b81c60c239bed83', // optional, can override body.assignedToId
547
+ iterationId: 10966272, // optional
548
+ jiraVersionId: 10206 // optional
549
+ });
550
+ // Returns: { id: 2068847141, key: 'M2-E13' }
551
+
514
552
  // Get test cycle items (to find testRunItemId for a test case)
515
- const items = await api.Private.TestExecutions.getTestCycleItems(credentials, {
553
+ const items = await api.Private.TestExecution.getTestCycleItems(credentials, {
516
554
  testCycleKey: 'M14-R1',
517
555
  projectId: 10315
518
556
  });
519
557
 
520
558
  // Update parent test execution
521
- await api.Private.TestExecutions.updateTestExecution(credentials, {
559
+ await api.Private.TestExecution.updateTestExecution(credentials, {
522
560
  testExecutionKey: 'M14-E18',
523
561
  id: 2065132733, // Optional if testExecutionKey is provided
524
562
  actualStartDate: '2025-12-24T13:02:50.233Z',
@@ -529,14 +567,14 @@ await api.Private.TestExecutions.updateTestExecution(credentials, {
529
567
  });
530
568
 
531
569
  // Get test execution steps (to get step IDs for updates)
532
- const steps = await api.Private.TestExecutions.getTestExecutionSteps(credentials, {
570
+ const steps = await api.Private.TestExecution.getTestExecutionSteps(credentials, {
533
571
  testCycleKey: 'M14-R1',
534
572
  testRunItemId: 1443476310, // From getTestCycleItems
535
573
  projectId: 10315
536
574
  });
537
575
 
538
576
  // Update test execution step status
539
- await api.Private.TestExecutions.updateTestExecutionStepStatus(credentials, {
577
+ await api.Private.TestExecution.updateTestExecutionStepStatus(credentials, {
540
578
  id: 6287896613, // From getTestExecutionSteps
541
579
  testResultStatusId: 10952942,
542
580
  executionDate: '2025-12-24T13:02:50.232Z',
@@ -544,13 +582,15 @@ await api.Private.TestExecutions.updateTestExecutionStepStatus(credentials, {
544
582
  });
545
583
 
546
584
  // Update test execution step comment (actual result)
547
- await api.Private.TestExecutions.updateTestExecutionStepComment(credentials, {
585
+ await api.Private.TestExecution.updateTestExecutionStepComment(credentials, {
548
586
  id: 6287896613, // From getTestExecutionSteps
549
587
  comment: 'Test passed successfully',
550
588
  projectId: 10315
551
589
  });
552
590
  ```
553
591
 
592
+ **Note:** The old path (`Private.TestExecutions.*`) still works but is deprecated. Use `Private.TestExecution.*` for better organization.
593
+
554
594
  **Notes:**
555
595
  - Version numbers are absolute (1-based). Use `listTestCaseVersions()` to find available versions. If `version` is not provided, the latest version is used.
556
596
  - Private API methods require `PrivateApiCredentials` (`userEmail`, `apiToken`, `jiraInstanceUrl`). Context JWT tokens expire after 15 minutes and are automatically retrieved internally.
@@ -562,6 +602,21 @@ Feel free to drop ideas, suggestions or improvements into our [Community hub](ht
562
602
 
563
603
  ## Changelog
564
604
 
605
+ ### 1.4.0
606
+
607
+ - **Changed**: Major structural reorganization of Private API to follow entity-based grouping (mirrors public API organization)
608
+ - **New Entity-Based Groups**: `Private.TestCase`, `Private.TestCycle`, `Private.TestExecution`
609
+ - **Private.TestCase**: Consolidates `Archiving`, `TestScriptData`, and `Versions` sub-groups
610
+ - **Private.TestCycle**: Adds `ExtendedData` sub-group for iteration operations
611
+ - **Private.TestExecution**: Consolidates all test execution operations and adds `ExtendedData` sub-group for iteration and version operations
612
+ - **Added**: `createTestExecutionWithVersion()` - Create test execution for a specific test case version (not just latest version). Unlike the public API which only creates executions against the latest test case version, this function allows creating executions against any version of a test case.
613
+ - **Deprecated**: Old feature-based paths are deprecated but still functional (will be removed in v2.0.0):
614
+ - `Private.TestExecutions.*` → Use `Private.TestExecution.*` instead
615
+ - `Private.ExtendedData.*` → Use `Private.TestCycle.ExtendedData.*` or `Private.TestExecution.ExtendedData.*` instead
616
+ - `Private.TestCaseArchiving.*` → Use `Private.TestCase.Archiving.*` instead
617
+ - `Private.TestScriptData.*` → Use `Private.TestCase.TestScriptData.*` instead
618
+ - `Private.Versions.*` → Use `Private.TestCase.Versions.*` instead
619
+
565
620
  ### 1.3.11
566
621
 
567
622
  - **Added**: Verbose logging option - Enable detailed request/response logging for failed API calls via `createZephyrApi(connection, true)` or `createZephyrApi(token, baseUrl, true)`
package/dist/README.md CHANGED
@@ -177,7 +177,16 @@ Response Details: {
177
177
  - **DataSets**: `getDataSets`, `createDataSet`, `updateDataSet`
178
178
  - **archiveConfig** - Archive a config item (Environment, Iteration, or Status)
179
179
  - **unarchiveConfig** - Unarchive a config item (Environment, Iteration, or Status)
180
- - ### Versions
180
+ - ### TestCase (entity-based group - v1.4.0+)
181
+ - **Archiving**: `getArchivedTestCases`, `archiveTestCases`, `unarchiveTestCases`
182
+ - **TestScriptData**: `setTestCaseParamTypeToParameter`, `setTestCaseParameters`, `setTestCaseParamTypeToTestData`, `setTestCaseTestData`, `getTestCaseTestData`, `hasTestCaseTestData`
183
+ - **Versions**: `createTestCaseVersion`
184
+ - ### TestCycle (entity-based group - v1.4.0+)
185
+ - **ExtendedData**: `getTestCycleIteration`, `updateTestCycleIteration`
186
+ - ### TestExecution (entity-based group - v1.4.0+)
187
+ - **ExtendedData**: `getTestExecutionIteration`, `updateTestExecutionIteration`, `getTestExecutionVersion`, `updateTestExecutionVersion`
188
+ - **Methods**: `createTestExecutionWithTestData`, `createTestExecutionWithVersion`, `updateTestExecution`, `getTestExecutionSteps`, `updateTestExecutionStepStatus`, `updateTestExecutionStepComment`, `getTestCycleItems`
189
+ - ### Versions (deprecated - use `Private.TestCase.Versions` instead)
181
190
  - **createTestCaseVersion** - Create a new test case version
182
191
  - ### Attachments
183
192
  - **Test Case**: `getTestCaseAttachments`, `downloadAttachment`, `createTestCaseAttachment`
@@ -189,15 +198,15 @@ Response Details: {
189
198
  - ### VersionControl
190
199
  - **Test Case (version-specific)**: `getTestCaseIssueLinks`, `getTestCaseWebLinks`, `getTestCaseTestScript`, `getTestCaseTestSteps`
191
200
  - **Test Execution Step**: `getTestExecutionStepIssueLinks`, `createTestExecutionStepIssueLink`
192
- - ### ExtendedData (supplements public API with extended data: iterations and versions)
201
+ - ### ExtendedData (deprecated - use `Private.TestCycle.ExtendedData` or `Private.TestExecution.ExtendedData` instead)
193
202
  - **Test Cycle**: `getTestCycleIteration`, `updateTestCycleIteration`
194
203
  - **Test Execution**: `getTestExecutionIteration`, `updateTestExecutionIteration`, `getTestExecutionVersion`, `updateTestExecutionVersion`
195
- - ### TestCaseArchiving (access archived test cases and archiving operations)
204
+ - ### TestCaseArchiving (deprecated - use `Private.TestCase.Archiving` instead)
196
205
  - **Test Case**: `getArchivedTestCases`, `archiveTestCases`, `unarchiveTestCases`
197
- - ### TestScriptData (manage test script data: Parameters and Test Data)
206
+ - ### TestScriptData (deprecated - use `Private.TestCase.TestScriptData` instead)
198
207
  - **Test Case**: `setTestCaseParamTypeToParameter`, `setTestCaseParameters`, `setTestCaseParamTypeToTestData`, `setTestCaseTestData`, `getTestCaseTestData`, `hasTestCaseTestData`
199
- - ### TestExecutions (create and update test executions for test cases with test data)
200
- - **Test Execution**: `createTestExecutionWithTestData`, `updateTestExecution`, `getTestExecutionSteps`, `updateTestExecutionStepStatus`, `updateTestExecutionStepComment`
208
+ - ### TestExecutions (deprecated - use `Private.TestExecution` instead)
209
+ - **Test Execution**: `createTestExecutionWithTestData`, `createTestExecutionWithVersion`, `updateTestExecution`, `getTestExecutionSteps`, `updateTestExecutionStepStatus`, `updateTestExecutionStepComment`
201
210
  - **Test Cycle**: `getTestCycleItems`
202
211
 
203
212
  ## Private API Authentication
@@ -305,8 +314,8 @@ await api.Private.Config.unarchiveConfig(credentials, {
305
314
  ### Example: Create Test Case Version
306
315
 
307
316
  ```typescript
308
- // Create a new version of an existing test case
309
- const newVersion = await api.Private.Versions.createTestCaseVersion(
317
+ // Create a new version of an existing test case (v1.4.0+)
318
+ const newVersion = await api.Private.TestCase.Versions.createTestCaseVersion(
310
319
  credentials,
311
320
  {
312
321
  testCaseKey: 'PROJ-T1', // Uses key, looks up ID automatically
@@ -315,6 +324,8 @@ const newVersion = await api.Private.Versions.createTestCaseVersion(
315
324
  );
316
325
  ```
317
326
 
327
+ **Note:** The old path (`Private.Versions.createTestCaseVersion`) still works but is deprecated. Use `Private.TestCase.Versions.createTestCaseVersion` for better organization.
328
+
318
329
  ### Example: Upload Attachment
319
330
 
320
331
  ```typescript
@@ -367,25 +378,25 @@ await api.Private.VersionControl.createTestExecutionStepIssueLink(credentials, {
367
378
 
368
379
  ### Example: Extended Data (Supplements Public API)
369
380
 
370
- The public API does not support iterations for Test Cycles/Executions or Jira version IDs for Test Executions. Use `ExtendedData` to supplement public API calls.
381
+ The public API does not support iterations for Test Cycles/Executions or Jira version IDs for Test Executions. Use entity-based groups (v1.4.0+) to supplement public API calls.
371
382
 
372
383
  ```typescript
373
- // Test Cycle: Set/get iteration
384
+ // Test Cycle: Set/get iteration (v1.4.0+)
374
385
  const testCycle = await api.TestCycle.createTestCycle({
375
386
  projectKey: 'M12',
376
387
  name: 'Sprint 1 Testing'
377
388
  });
378
- await api.Private.ExtendedData.updateTestCycleIteration(credentials, {
389
+ await api.Private.TestCycle.ExtendedData.updateTestCycleIteration(credentials, {
379
390
  testCycleKey: testCycle.key,
380
391
  projectId: 10313,
381
392
  iterationId: 10952254
382
393
  });
383
- const cycleIteration = await api.Private.ExtendedData.getTestCycleIteration(credentials, {
394
+ const cycleIteration = await api.Private.TestCycle.ExtendedData.getTestCycleIteration(credentials, {
384
395
  testCycleKey: 'M12-R1',
385
396
  projectId: 10313
386
397
  });
387
398
 
388
- // Test Execution: Set/get iteration and version
399
+ // Test Execution: Set/get iteration and version (v1.4.0+)
389
400
  await api.TestExecution.createTestExecution({
390
401
  projectKey: 'M12',
391
402
  testCaseKey: 'M12-T1',
@@ -393,32 +404,34 @@ await api.TestExecution.createTestExecution({
393
404
  statusName: 'Pass'
394
405
  });
395
406
  // Note: createTestExecution returns void - use known key or look up via listTestExecutions()
396
- await api.Private.ExtendedData.updateTestExecutionIteration(credentials, {
407
+ await api.Private.TestExecution.ExtendedData.updateTestExecutionIteration(credentials, {
397
408
  testExecutionKey: 'M12-E1',
398
409
  projectId: 10313,
399
410
  iterationId: 10952254
400
411
  });
401
- await api.Private.ExtendedData.updateTestExecutionVersion(credentials, {
412
+ await api.Private.TestExecution.ExtendedData.updateTestExecutionVersion(credentials, {
402
413
  testExecutionKey: 'M15-E3',
403
414
  projectId: 10316,
404
415
  jiraVersionId: 10102
405
416
  });
406
417
 
407
418
  // Clear by setting to null
408
- await api.Private.ExtendedData.updateTestCycleIteration(credentials, {
419
+ await api.Private.TestCycle.ExtendedData.updateTestCycleIteration(credentials, {
409
420
  testCycleKey: 'M12-R1',
410
421
  projectId: 10313,
411
422
  iterationId: null
412
423
  });
413
424
  ```
414
425
 
426
+ **Note:** The old paths (`Private.ExtendedData.*`) still work but are deprecated. Use the new entity-based paths (`Private.TestCycle.ExtendedData.*` and `Private.TestExecution.ExtendedData.*`) for better organization.
427
+
415
428
  ### Example: Test Case Archiving
416
429
 
417
- The public API does not expose the archived flag. Use `TestCaseArchiving` to list, archive, and unarchive test cases.
430
+ The public API does not expose the archived flag. Use `Private.TestCase.Archiving` (v1.4.0+) to list, archive, and unarchive test cases.
418
431
 
419
432
  ```typescript
420
433
  // Get archived test cases (paginated, optional query filter)
421
- const archived = await api.Private.TestCaseArchiving.getArchivedTestCases(credentials, {
434
+ const archived = await api.Private.TestCase.Archiving.getArchivedTestCases(credentials, {
422
435
  projectId: 10316,
423
436
  maxResults: 50,
424
437
  startAt: 0,
@@ -426,45 +439,47 @@ const archived = await api.Private.TestCaseArchiving.getArchivedTestCases(creden
426
439
  });
427
440
 
428
441
  // Archive test cases (single or multiple)
429
- await api.Private.TestCaseArchiving.archiveTestCases(credentials, {
442
+ await api.Private.TestCase.Archiving.archiveTestCases(credentials, {
430
443
  projectId: 10316,
431
444
  testCaseIds: [288004503, 288004504, 288004505]
432
445
  });
433
446
 
434
447
  // Unarchive test cases
435
- await api.Private.TestCaseArchiving.unarchiveTestCases(credentials, {
448
+ await api.Private.TestCase.Archiving.unarchiveTestCases(credentials, {
436
449
  projectId: 10316,
437
450
  testCaseIds: [288004503]
438
451
  });
439
452
  ```
440
453
 
454
+ **Note:** The old path (`Private.TestCaseArchiving.*`) still works but is deprecated. Use `Private.TestCase.Archiving.*` for better organization.
455
+
441
456
  ### Test Script Data
442
457
 
443
- The public API does not expose test script data (Parameters and Test Data). Use `TestScriptData` to manage this data.
458
+ The public API does not expose test script data (Parameters and Test Data). Use `Private.TestCase.TestScriptData` (v1.4.0+) to manage this data.
444
459
 
445
460
  ```typescript
446
461
  // Check if test case has test script data
447
- const hasData = await api.Private.TestScriptData.hasTestCaseTestData(credentials, {
462
+ const hasData = await api.Private.TestCase.TestScriptData.hasTestCaseTestData(credentials, {
448
463
  testCaseKey: 'M14-T6',
449
464
  projectId: 10315
450
465
  });
451
466
  // Returns: { hasData: true, type: 'PARAMETER' } or { hasData: false, type: null }
452
467
 
453
468
  // Get test script data
454
- const testData = await api.Private.TestScriptData.getTestCaseTestData(credentials, {
469
+ const testData = await api.Private.TestCase.TestScriptData.getTestCaseTestData(credentials, {
455
470
  testCaseKey: 'M14-T6',
456
471
  projectId: 10315
457
472
  });
458
473
  // Returns: { paramType: 'PARAMETER' | 'TEST_DATA' | null, parameters: [...], testData: [...] }
459
474
 
460
475
  // Set test case to use Parameters
461
- await api.Private.TestScriptData.setTestCaseParamTypeToParameter(credentials, {
476
+ await api.Private.TestCase.TestScriptData.setTestCaseParamTypeToParameter(credentials, {
462
477
  testCaseKey: 'M14-T6',
463
478
  projectId: 10315
464
479
  });
465
480
 
466
481
  // Set parameters
467
- await api.Private.TestScriptData.setTestCaseParameters(credentials, {
482
+ await api.Private.TestCase.TestScriptData.setTestCaseParameters(credentials, {
468
483
  testCaseKey: 'M14-T6',
469
484
  projectId: 10315,
470
485
  parameters: [
@@ -474,13 +489,13 @@ await api.Private.TestScriptData.setTestCaseParameters(credentials, {
474
489
  });
475
490
 
476
491
  // Set test case to use Test Data
477
- await api.Private.TestScriptData.setTestCaseParamTypeToTestData(credentials, {
492
+ await api.Private.TestCase.TestScriptData.setTestCaseParamTypeToTestData(credentials, {
478
493
  testCaseKey: 'M14-T6',
479
494
  projectId: 10315
480
495
  });
481
496
 
482
497
  // Set test data (simplified array format)
483
- await api.Private.TestScriptData.setTestCaseTestData(credentials, {
498
+ await api.Private.TestCase.TestScriptData.setTestCaseTestData(credentials, {
484
499
  testCaseKey: 'M14-T6',
485
500
  projectId: 10315,
486
501
  testData: [
@@ -493,9 +508,11 @@ await api.Private.TestScriptData.setTestCaseTestData(credentials, {
493
508
  });
494
509
  ```
495
510
 
511
+ **Note:** The old path (`Private.TestScriptData.*`) still works but is deprecated. Use `Private.TestCase.TestScriptData.*` for better organization.
512
+
496
513
  ### Test Executions with Test Data
497
514
 
498
- The public API does not correctly handle creating test executions for test cases with test data or test cases with "Call to Test" steps that reference test cases with test data. Use `TestExecutions` to create and update these executions.
515
+ The public API does not correctly handle creating test executions for test cases with test data or test cases with "Call to Test" steps that reference test cases with test data. Use `Private.TestExecution` (v1.4.0+) to create and update these executions.
499
516
 
500
517
  ```typescript
501
518
  // Create test execution for test case with test data
@@ -503,7 +520,7 @@ The public API does not correctly handle creating test executions for test cases
503
520
  // 1. Creates execution via public API
504
521
  // 2. Gets testRunItemId from private API
505
522
  // 3. Creates actual execution via private API
506
- const execution = await api.Private.TestExecutions.createTestExecutionWithTestData(credentials, {
523
+ const execution = await api.Private.TestExecution.createTestExecutionWithTestData(credentials, {
507
524
  testCaseKey: 'M14-T6',
508
525
  testCycleKey: 'M14-R1',
509
526
  assignedTo: '5d259f2e0b81c60c239bed83', // optional
@@ -511,14 +528,35 @@ const execution = await api.Private.TestExecutions.createTestExecutionWithTestDa
511
528
  });
512
529
  // Returns: { id: 2065132733, key: 'M14-E18' }
513
530
 
531
+ // Create test execution for specific test case version (not just latest)
532
+ // Unlike the public API which only creates executions against the latest version,
533
+ // this allows creating executions against any version of a test case
534
+ const executionWithVersion = await api.Private.TestExecution.createTestExecutionWithVersion(credentials, {
535
+ body: {
536
+ projectKey: 'M14',
537
+ testCaseKey: 'M14-T6',
538
+ testCycleKey: 'M14-R1',
539
+ statusName: 'Not Executed',
540
+ version: 2, // Create execution against version 2 of the test case
541
+ environmentName: 'Production', // optional
542
+ assignedToId: '5d259f2e0b81c60c239bed83', // optional
543
+ comment: 'Testing version 2', // optional
544
+ },
545
+ projectId: 10315,
546
+ assignedTo: '5d259f2e0b81c60c239bed83', // optional, can override body.assignedToId
547
+ iterationId: 10966272, // optional
548
+ jiraVersionId: 10206 // optional
549
+ });
550
+ // Returns: { id: 2068847141, key: 'M2-E13' }
551
+
514
552
  // Get test cycle items (to find testRunItemId for a test case)
515
- const items = await api.Private.TestExecutions.getTestCycleItems(credentials, {
553
+ const items = await api.Private.TestExecution.getTestCycleItems(credentials, {
516
554
  testCycleKey: 'M14-R1',
517
555
  projectId: 10315
518
556
  });
519
557
 
520
558
  // Update parent test execution
521
- await api.Private.TestExecutions.updateTestExecution(credentials, {
559
+ await api.Private.TestExecution.updateTestExecution(credentials, {
522
560
  testExecutionKey: 'M14-E18',
523
561
  id: 2065132733, // Optional if testExecutionKey is provided
524
562
  actualStartDate: '2025-12-24T13:02:50.233Z',
@@ -529,14 +567,14 @@ await api.Private.TestExecutions.updateTestExecution(credentials, {
529
567
  });
530
568
 
531
569
  // Get test execution steps (to get step IDs for updates)
532
- const steps = await api.Private.TestExecutions.getTestExecutionSteps(credentials, {
570
+ const steps = await api.Private.TestExecution.getTestExecutionSteps(credentials, {
533
571
  testCycleKey: 'M14-R1',
534
572
  testRunItemId: 1443476310, // From getTestCycleItems
535
573
  projectId: 10315
536
574
  });
537
575
 
538
576
  // Update test execution step status
539
- await api.Private.TestExecutions.updateTestExecutionStepStatus(credentials, {
577
+ await api.Private.TestExecution.updateTestExecutionStepStatus(credentials, {
540
578
  id: 6287896613, // From getTestExecutionSteps
541
579
  testResultStatusId: 10952942,
542
580
  executionDate: '2025-12-24T13:02:50.232Z',
@@ -544,13 +582,15 @@ await api.Private.TestExecutions.updateTestExecutionStepStatus(credentials, {
544
582
  });
545
583
 
546
584
  // Update test execution step comment (actual result)
547
- await api.Private.TestExecutions.updateTestExecutionStepComment(credentials, {
585
+ await api.Private.TestExecution.updateTestExecutionStepComment(credentials, {
548
586
  id: 6287896613, // From getTestExecutionSteps
549
587
  comment: 'Test passed successfully',
550
588
  projectId: 10315
551
589
  });
552
590
  ```
553
591
 
592
+ **Note:** The old path (`Private.TestExecutions.*`) still works but is deprecated. Use `Private.TestExecution.*` for better organization.
593
+
554
594
  **Notes:**
555
595
  - Version numbers are absolute (1-based). Use `listTestCaseVersions()` to find available versions. If `version` is not provided, the latest version is used.
556
596
  - Private API methods require `PrivateApiCredentials` (`userEmail`, `apiToken`, `jiraInstanceUrl`). Context JWT tokens expire after 15 minutes and are automatically retrieved internally.
@@ -562,6 +602,21 @@ Feel free to drop ideas, suggestions or improvements into our [Community hub](ht
562
602
 
563
603
  ## Changelog
564
604
 
605
+ ### 1.4.0
606
+
607
+ - **Changed**: Major structural reorganization of Private API to follow entity-based grouping (mirrors public API organization)
608
+ - **New Entity-Based Groups**: `Private.TestCase`, `Private.TestCycle`, `Private.TestExecution`
609
+ - **Private.TestCase**: Consolidates `Archiving`, `TestScriptData`, and `Versions` sub-groups
610
+ - **Private.TestCycle**: Adds `ExtendedData` sub-group for iteration operations
611
+ - **Private.TestExecution**: Consolidates all test execution operations and adds `ExtendedData` sub-group for iteration and version operations
612
+ - **Added**: `createTestExecutionWithVersion()` - Create test execution for a specific test case version (not just latest version). Unlike the public API which only creates executions against the latest test case version, this function allows creating executions against any version of a test case.
613
+ - **Deprecated**: Old feature-based paths are deprecated but still functional (will be removed in v2.0.0):
614
+ - `Private.TestExecutions.*` → Use `Private.TestExecution.*` instead
615
+ - `Private.ExtendedData.*` → Use `Private.TestCycle.ExtendedData.*` or `Private.TestExecution.ExtendedData.*` instead
616
+ - `Private.TestCaseArchiving.*` → Use `Private.TestCase.Archiving.*` instead
617
+ - `Private.TestScriptData.*` → Use `Private.TestCase.TestScriptData.*` instead
618
+ - `Private.Versions.*` → Use `Private.TestCase.Versions.*` instead
619
+
565
620
  ### 1.3.11
566
621
 
567
622
  - **Added**: Verbose logging option - Enable detailed request/response logging for failed API calls via `createZephyrApi(connection, true)` or `createZephyrApi(token, baseUrl, true)`
@@ -0,0 +1,34 @@
1
+ /*!
2
+ * Copyright Adaptavist 2025 (c) All rights reserved
3
+ */
4
+ /**
5
+ * Private API Test Case group
6
+ * Consolidates all test case-related private API operations
7
+ *
8
+ * ⚠️ WARNING: These methods use private APIs that are not officially supported.
9
+ */
10
+ import type { ZephyrApiConnection } from '../../index';
11
+ import { PrivateBase } from './PrivateBase';
12
+ import { PrivateTestCaseArchiving } from './PrivateTestCaseArchiving';
13
+ import { PrivateTestScriptData } from './PrivateTestScriptData';
14
+ import { PrivateVersions } from './PrivateVersions';
15
+ /**
16
+ * Private API Test Case group
17
+ * Provides access to test case-specific private API operations
18
+ */
19
+ export declare class PrivateTestCase extends PrivateBase {
20
+ /**
21
+ * Archiving sub-group - List, archive, and unarchive test cases
22
+ */
23
+ readonly Archiving: PrivateTestCaseArchiving;
24
+ /**
25
+ * Test Script Data sub-group - Manage test script data (Parameters and Test Data)
26
+ */
27
+ readonly TestScriptData: PrivateTestScriptData;
28
+ /**
29
+ * Versions sub-group - Create test case versions
30
+ */
31
+ readonly Versions: PrivateVersions;
32
+ constructor(apiConnection?: ZephyrApiConnection);
33
+ }
34
+ //# sourceMappingURL=PrivateTestCase.d.ts.map