@digital-ai/devops-page-object-release 0.0.38 → 0.0.40

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/CHANGELOG.md CHANGED
@@ -1,5 +1,19 @@
1
1
  # @digital-ai/devops-page-object-release
2
2
 
3
+ ## 0.0.40
4
+
5
+ ### Patch Changes
6
+
7
+ - 4067557: S-118970: Migrated task-lock-scenario in playwright
8
+ - 5d8b574: Reduce flaky v2
9
+ - b3befac: S-119232: Migrated parallel-task-scenario in playwright
10
+
11
+ ## 0.0.39
12
+
13
+ ### Patch Changes
14
+
15
+ - 6c894d5: Try to reduce flaky
16
+
3
17
  ## 0.0.38
4
18
 
5
19
  ### Patch Changes
package/dist/main.js CHANGED
@@ -1097,6 +1097,22 @@ class $87643f2d97b0644e$export$a678525e79c4ccc4 extends (0, $f8721861c660dd88$ex
1097
1097
  });
1098
1098
  await (0, $kKeXs$playwrighttest.expect)(releaseStatus).toBeVisible();
1099
1099
  }
1100
+ async expectReleaseFailing(releaseTitle) {
1101
+ const releaseStatus = this.page.locator(".release").filter({
1102
+ hasText: releaseTitle
1103
+ }).locator(".release-status").filter({
1104
+ hasText: "Failing"
1105
+ });
1106
+ await (0, $kKeXs$playwrighttest.expect)(releaseStatus).toBeVisible();
1107
+ }
1108
+ async expectReleaseCompleted(releaseTitle) {
1109
+ const releaseStatus = this.page.locator(".release").filter({
1110
+ hasText: releaseTitle
1111
+ }).locator(".release-status").filter({
1112
+ hasText: "Completed"
1113
+ });
1114
+ await (0, $kKeXs$playwrighttest.expect)(releaseStatus).toBeVisible();
1115
+ }
1100
1116
  async filterReleaseByAllStatus() {
1101
1117
  await this.page.locator(".ci-status .remaining-tags").getByText("more").click();
1102
1118
  await this.page.locator(".ci-status .xl-react-link").getByText("Select all").click();
@@ -1557,16 +1573,25 @@ class $59543fc69900e8db$var$VariableModal extends (0, $f8721861c660dd88$export$2
1557
1573
  }
1558
1574
  async createPossibleValuesVariable(variableName) {
1559
1575
  await this.page.locator(".variable-toggle button").click();
1560
- await this.page.locator(".ui-autocomplete-input").fill(variableName);
1561
- const check = await this.page.locator(".ui-menu-item-wrapper").getByText("${" + variableName + "}", {
1562
- exact: true
1563
- }).isVisible();
1564
- if (check) await this.page.locator(".ui-menu-item-wrapper").getByText("${" + variableName + "}", {
1565
- exact: true
1566
- }).click();
1567
- else await this.page.locator(".ui-menu-item-wrapper").filter({
1568
- hasText: `${variableName}`
1569
- }).click();
1576
+ await (0, $kKeXs$playwrighttest.expect)(async ()=>{
1577
+ await this.page.locator(".ui-autocomplete-input").clear();
1578
+ await this.page.locator(".ui-autocomplete-input").fill(variableName);
1579
+ const check = await this.page.locator(".ui-menu-item-wrapper").getByText("${" + variableName + "}", {
1580
+ exact: true
1581
+ }).isVisible({
1582
+ timeout: 1000
1583
+ });
1584
+ if (check) await this.page.locator(".ui-menu-item-wrapper").getByText("${" + variableName + "}", {
1585
+ exact: true
1586
+ }).click({
1587
+ timeout: 1000
1588
+ });
1589
+ else await this.page.locator(".ui-menu-item-wrapper").filter({
1590
+ hasText: `${variableName}`
1591
+ }).click({
1592
+ timeout: 1000
1593
+ });
1594
+ }).toPass();
1570
1595
  }
1571
1596
  async expectVariableValueToBe(value) {
1572
1597
  (0, $kKeXs$playwrighttest.expect)(await this.page.locator('.variable-value select option[selected="selected"]').textContent()).toBe(value);
@@ -2036,6 +2061,11 @@ class $eb81c1b930e440ff$export$519356f6c50361f7 extends (0, $f8721861c660dd88$ex
2036
2061
  await (0, $kKeXs$playwrighttest.expect)(this.page.locator(`[data-test-id="${propertyName}"]`).getByText(value)).toBeVisible();
2037
2062
  return this;
2038
2063
  }
2064
+ async expectDisabledInputField(propertyName) {
2065
+ const inputField = this.railLocator.locator(`.task-input-property input[id="${propertyName}"]`);
2066
+ if (await inputField.isVisible()) await (0, $kKeXs$playwrighttest.expect)(inputField).toHaveAttribute("readonly", "");
2067
+ return this;
2068
+ }
2039
2069
  async expectRiskProfileValue(value) {
2040
2070
  await (0, $kKeXs$playwrighttest.expect)(this.railLocator.locator("#riskProfileId")).toHaveValue(value);
2041
2071
  }
@@ -2694,9 +2724,16 @@ class $1fbdec5dc9cde599$export$e3515314c13bc477 extends (0, $f8721861c660dd88$ex
2694
2724
  }).locator(".task-date").waitFor({
2695
2725
  timeout: 10000
2696
2726
  });
2697
- await this.page.locator(".flex-section.column").filter({
2698
- hasText: "Start date"
2699
- }).locator(".task-date").click();
2727
+ // reclick if the date picker is not visible
2728
+ await (0, $kKeXs$playwrighttest.expect)(async ()=>{
2729
+ await this.page.locator(".flex-section.column").filter({
2730
+ hasText: "Start date"
2731
+ }).locator(".task-date").click();
2732
+ // month + year, we check for 20xx year
2733
+ await (0, $kKeXs$playwrighttest.expect)(this.page.locator(".MuiPickersCalendarHeader-label")).toContainText("20", {
2734
+ timeout: 100
2735
+ });
2736
+ }).toPass();
2700
2737
  await this.setDate(date, monthYear);
2701
2738
  }
2702
2739
  async setEndDate(date, monthYear) {
@@ -2705,9 +2742,16 @@ class $1fbdec5dc9cde599$export$e3515314c13bc477 extends (0, $f8721861c660dd88$ex
2705
2742
  }).locator(".task-date").waitFor({
2706
2743
  timeout: 10000
2707
2744
  });
2708
- await this.page.locator(".flex-section.column").filter({
2709
- hasText: "End date"
2710
- }).locator(".task-date").click();
2745
+ // reclick if the date picker is not visible
2746
+ await (0, $kKeXs$playwrighttest.expect)(async ()=>{
2747
+ await this.page.locator(".flex-section.column").filter({
2748
+ hasText: "End date"
2749
+ }).locator(".task-date").click();
2750
+ // month + year, we check for 20xx year
2751
+ await (0, $kKeXs$playwrighttest.expect)(this.page.locator(".MuiPickersCalendarHeader-label")).toContainText("20", {
2752
+ timeout: 100
2753
+ });
2754
+ }).toPass();
2711
2755
  await this.setDate(date, monthYear);
2712
2756
  }
2713
2757
  async setDate(date, monthYear) {
@@ -2760,6 +2804,10 @@ class $6a21661eb4695574$export$e946776eae644790 extends (0, $f8721861c660dd88$ex
2760
2804
  });
2761
2805
  this.taskDrawerLocator = this.page.locator("task-drawer .dot-drawer");
2762
2806
  }
2807
+ async waitForTaskDrawer() {
2808
+ const handle = await this.page.locator(".dot-drawer-paper").elementHandle();
2809
+ await handle?.waitForElementState("stable");
2810
+ }
2763
2811
  async openOverviewRail() {
2764
2812
  await this.openRail("Overview");
2765
2813
  }
@@ -3093,6 +3141,7 @@ class $e8395395d01b66bb$export$5a82be0a2a261cc6 extends (0, $f8721861c660dd88$ex
3093
3141
  }
3094
3142
  async openTaskDrawer(title) {
3095
3143
  await this.page.getByTitle(title).dblclick();
3144
+ await this.taskDrawer.waitForTaskDrawer();
3096
3145
  return this.taskDrawer;
3097
3146
  }
3098
3147
  async openPhaseDetails(phaseName) {
@@ -3439,6 +3488,8 @@ class $c5c393ea4aecca6c$export$649fde34d823ece7 extends (0, $f8721861c660dd88$ex
3439
3488
  constructor(page){
3440
3489
  super(page);
3441
3490
  this.commentBox = this.page.locator(`.input-block-level`);
3491
+ this.contextMenuButton = this.page.locator("#context-menu-container li");
3492
+ this.completeButton = this.page.getByTestId("release-grid-complete-btn");
3442
3493
  this.dateUtil = new (0, $880df57ffbf6e614$export$9b575f14aa5e09a1)(page);
3443
3494
  this.refreshButton = this.page.getByTestId("refresh-btn");
3444
3495
  this.taskDrawer = new (0, $6a21661eb4695574$export$e946776eae644790)(page);
@@ -3450,8 +3501,12 @@ class $c5c393ea4aecca6c$export$649fde34d823ece7 extends (0, $f8721861c660dd88$ex
3450
3501
  }
3451
3502
  // eslint-disable-next-line max-params
3452
3503
  async callMenuOptionsForTask(taskTitle, option, taskGroup, taskType) {
3453
- await this.openContextMenuForTask(taskTitle);
3454
- await this.page.locator(".dropdown-menu li").getByText(option).click();
3504
+ await (0, $kKeXs$playwrighttest.expect)(async ()=>{
3505
+ await this.openContextMenuForTask(taskTitle);
3506
+ await this.page.locator(".dropdown-menu li").getByText(option).click({
3507
+ timeout: 1000
3508
+ });
3509
+ }).toPass();
3455
3510
  if (await this.commentBox.isVisible()) await this.commentBox.fill(" Automation Test Comment");
3456
3511
  else if (await this.page.getByRole("heading", {
3457
3512
  name: "Change task type"
@@ -3485,9 +3540,9 @@ class $c5c393ea4aecca6c$export$649fde34d823ece7 extends (0, $f8721861c660dd88$ex
3485
3540
  }
3486
3541
  async expectTaskRowCountToBe(title, expectedCount) {
3487
3542
  await this.refreshButton.click();
3488
- (0, $kKeXs$playwrighttest.expect)(await this.page.locator(".name-cell-title").filter({
3543
+ await (0, $kKeXs$playwrighttest.expect)(this.page.locator(".name-cell-title").filter({
3489
3544
  hasText: title
3490
- }).count()).toBe(expectedCount);
3545
+ })).toHaveCount(expectedCount);
3491
3546
  }
3492
3547
  async setHeaderFilter(columnTitle, valueToFilter) {
3493
3548
  const filter = this.page.locator(`.ui-grid-header-cell`).filter({
@@ -3497,8 +3552,7 @@ class $c5c393ea4aecca6c$export$649fde34d823ece7 extends (0, $f8721861c660dd88$ex
3497
3552
  await filter.fill(valueToFilter);
3498
3553
  }
3499
3554
  async expectRowCountToBe(cellCount) {
3500
- const cont = await this.page.locator(".ui-grid-canvas .name-cell").count();
3501
- (0, $kKeXs$playwrighttest.expect)(cont).toBe(cellCount);
3555
+ await (0, $kKeXs$playwrighttest.expect)(this.page.locator(".ui-grid-canvas .name-cell")).toHaveCount(cellCount);
3502
3556
  }
3503
3557
  async filterStartDate(date, monthYear) {
3504
3558
  await this.page.locator(`.ui-grid-header-cell`).filter({
@@ -3516,6 +3570,7 @@ class $c5c393ea4aecca6c$export$649fde34d823ece7 extends (0, $f8721861c660dd88$ex
3516
3570
  await this.page.locator(".name-cell-title").filter({
3517
3571
  hasText: taskTitle
3518
3572
  }).click();
3573
+ await this.taskDrawer.waitForTaskDrawer();
3519
3574
  return this.taskDrawer;
3520
3575
  }
3521
3576
  async collapseNthRowByIndex(Indexnumber) {
@@ -3526,25 +3581,31 @@ class $c5c393ea4aecca6c$export$649fde34d823ece7 extends (0, $f8721861c660dd88$ex
3526
3581
  }
3527
3582
  async expectTaskToHaveStatus(taskTitle, status) {
3528
3583
  await this.refreshButton.click();
3529
- (0, $kKeXs$playwrighttest.expect)(await this.page.locator(".ui-grid-row").filter({
3584
+ await (0, $kKeXs$playwrighttest.expect)(this.page.locator(".ui-grid-row").filter({
3530
3585
  hasText: taskTitle
3531
- }).locator(".label ").textContent()).toContain(status);
3586
+ }).locator(".label")).toContainText(status);
3532
3587
  }
3533
3588
  async expectOverdueOnEndDate(taskTitle) {
3534
- (0, $kKeXs$playwrighttest.expect)(await this.page.locator(`.ui-grid-row`).filter({
3589
+ await (0, $kKeXs$playwrighttest.expect)(this.page.locator(`.ui-grid-row`).filter({
3535
3590
  hasText: taskTitle
3536
- }).locator(`i.xl-icon.delay-icon.overdue-icon`).isVisible()).toBe(true);
3591
+ }).locator(`i.xl-icon.delay-icon.overdue-icon`)).toBeVisible();
3537
3592
  }
3538
3593
  async selectTask(taskTitle) {
3539
- await this.page.locator(`.ui-grid-cell-contents`).filter({
3594
+ const checkboxLocator = this.page.locator(`.ui-grid-cell-contents`).filter({
3540
3595
  hasText: taskTitle
3541
- }).locator(`.item-selector`).click({
3542
- force: true
3543
- });
3596
+ }).locator(`input.item-selector`);
3597
+ await (0, $kKeXs$playwrighttest.expect)(async ()=>{
3598
+ await checkboxLocator.click({
3599
+ force: true
3600
+ });
3601
+ await (0, $kKeXs$playwrighttest.expect)(checkboxLocator).toBeChecked({
3602
+ timeout: 1000
3603
+ });
3604
+ }).toPass();
3544
3605
  }
3545
3606
  async expectSelectedTasksCounter(text) {
3546
3607
  await (0, $kKeXs$playwrighttest.expect)(this.page.getByTestId("release-grid-selected-tasks")).toBeVisible();
3547
- (0, $kKeXs$playwrighttest.expect)(await this.page.getByTestId("release-grid-selected-tasks").textContent()).toContain(text);
3608
+ await (0, $kKeXs$playwrighttest.expect)(this.page.getByTestId("release-grid-selected-tasks")).toContainText(text);
3548
3609
  }
3549
3610
  async clearSelection() {
3550
3611
  await this.page.getByTestId("release-grid-unselect-btn").click();
@@ -3579,9 +3640,9 @@ class $c5c393ea4aecca6c$export$649fde34d823ece7 extends (0, $f8721861c660dd88$ex
3579
3640
  return this;
3580
3641
  }
3581
3642
  async completeSelectedTasks(comment) {
3582
- await this.page.getByTestId("release-grid-complete-btn").click();
3643
+ await this.completeButton.click();
3583
3644
  await this.page.getByPlaceholder("Give feedback or place a").fill(comment);
3584
- await this.page.getByRole("button", {
3645
+ await this.page.locator(".modal-footer").getByRole("button", {
3585
3646
  name: "Complete"
3586
3647
  }).click();
3587
3648
  return this;
@@ -3591,11 +3652,13 @@ class $c5c393ea4aecca6c$export$649fde34d823ece7 extends (0, $f8721861c660dd88$ex
3591
3652
  await this.page.getByRole("menuitem", {
3592
3653
  name: menuItem
3593
3654
  }).click();
3594
- if (await this.commentBox.isVisible() == true) await this.commentBox.fill(" Automation Test Comment");
3595
- if (await this.page.getByRole("button", {
3596
- name: menuItem,
3597
- exact: true
3598
- }).isVisible() == true) await this.page.getByRole("button", {
3655
+ if ([
3656
+ "Skip",
3657
+ "Reopen",
3658
+ "Retry",
3659
+ "Fail"
3660
+ ].includes(menuItem)) await this.commentBox.fill("Automation Test Comment");
3661
+ await this.page.getByRole("button", {
3599
3662
  name: menuItem,
3600
3663
  exact: true
3601
3664
  }).click();
@@ -3634,6 +3697,47 @@ class $c5c393ea4aecca6c$export$649fde34d823ece7 extends (0, $f8721861c660dd88$ex
3634
3697
  await this.page.keyboard.up("Shift");
3635
3698
  return this;
3636
3699
  }
3700
+ async isContextualMenuItemEnabled(menuName, taskTitle) {
3701
+ await this.openContextMenuForTask(taskTitle);
3702
+ await (0, $kKeXs$playwrighttest.expect)(this.contextMenuButton.filter({
3703
+ hasText: menuName
3704
+ })).not.toHaveClass(/disabled/);
3705
+ await (0, $kKeXs$playwrighttest.expect)(this.contextMenuButton.filter({
3706
+ hasText: menuName
3707
+ }).locator("a")).not.toBeDisabled();
3708
+ await this.closeContextMenu();
3709
+ }
3710
+ async isContextualMenuItemDisabled(menuName, taskTitle) {
3711
+ await this.openContextMenuForTask(taskTitle);
3712
+ const menuItem = this.contextMenuButton.filter({
3713
+ hasText: menuName
3714
+ });
3715
+ await (0, $kKeXs$playwrighttest.expect)(menuItem).toHaveClass(/disabled/);
3716
+ const anchorTag = menuItem.locator("a");
3717
+ const disabledAttribute = await anchorTag.getAttribute("disabled");
3718
+ (0, $kKeXs$playwrighttest.expect)(disabledAttribute).not.toBeNull();
3719
+ await this.closeContextMenu();
3720
+ }
3721
+ async closeContextMenu() {
3722
+ await this.page.locator("#release-header").click();
3723
+ }
3724
+ async expectDisabledActions(actionName) {
3725
+ await (0, $kKeXs$playwrighttest.expect)(this.page.getByTestId(`release-grid-${actionName}-btn`)).toBeDisabled();
3726
+ return this;
3727
+ }
3728
+ async expectDisabledActionsOnMoreActionsMenu(menuItem) {
3729
+ await this.page.getByTestId("release-grid-dropdown-btn").click();
3730
+ if (menuItem instanceof Array) for (const val of menuItem)await (0, $kKeXs$playwrighttest.expect)(this.page.getByRole("button", {
3731
+ name: val,
3732
+ exact: true
3733
+ })).toBeDisabled();
3734
+ else await (0, $kKeXs$playwrighttest.expect)(this.page.getByRole("button", {
3735
+ name: menuItem,
3736
+ exact: true
3737
+ })).toBeDisabled();
3738
+ await this.closeContextMenu();
3739
+ return this;
3740
+ }
3637
3741
  }
3638
3742
 
3639
3743
 
@@ -3911,18 +4015,21 @@ class $9b9a8c3da392d020$export$f43492e8ac3c566 extends (0, $f8721861c660dd88$exp
3911
4015
  await this.page.locator(".task-header").getByText(taskName, {
3912
4016
  exact: true
3913
4017
  }).click();
4018
+ await this.taskDrawer.waitForTaskDrawer();
3914
4019
  return this.taskDrawer;
3915
4020
  }
3916
4021
  async openTaskDrawerFromTableView(taskName) {
3917
4022
  await this.page.locator(".name-cell-title").getByText(taskName, {
3918
4023
  exact: true
3919
4024
  }).click();
4025
+ await this.taskDrawer.waitForTaskDrawer();
3920
4026
  return this.taskDrawer;
3921
4027
  }
3922
4028
  async openTaskDrawerFromGrantt(taskName) {
3923
4029
  await this.page.locator(".gantt_tree_content").getByText(taskName, {
3924
4030
  exact: true
3925
4031
  }).dblclick();
4032
+ await this.taskDrawer.waitForTaskDrawer();
3926
4033
  return this.taskDrawer;
3927
4034
  }
3928
4035
  async openVariables() {
@@ -4078,12 +4185,12 @@ class $9b9a8c3da392d020$export$f43492e8ac3c566 extends (0, $f8721861c660dd88$exp
4078
4185
  await downloadPromise;
4079
4186
  }
4080
4187
  async expectTaskToBePresent(taskName) {
4081
- await (0, $kKeXs$playwrighttest.expect)(this.page.locator(".task").filter({
4188
+ await (0, $kKeXs$playwrighttest.expect)(this.page.locator(".task .task-title").filter({
4082
4189
  hasText: taskName
4083
4190
  })).toBeVisible();
4084
4191
  }
4085
4192
  async expectTaskNotToBePresent(taskName) {
4086
- await (0, $kKeXs$playwrighttest.expect)(this.page.locator(".task").filter({
4193
+ await (0, $kKeXs$playwrighttest.expect)(this.page.locator(".task .task-title").filter({
4087
4194
  hasText: taskName
4088
4195
  })).not.toBeVisible();
4089
4196
  }
@@ -4121,6 +4228,12 @@ class $9b9a8c3da392d020$export$f43492e8ac3c566 extends (0, $f8721861c660dd88$exp
4121
4228
  async expectAddTaskNotVisible() {
4122
4229
  await (0, $kKeXs$playwrighttest.expect)(this.page.locator(".add-task.link")).not.toBeVisible();
4123
4230
  }
4231
+ async expectTaskCount(count) {
4232
+ (0, $kKeXs$playwrighttest.expect)(await this.page.locator(".task-container").count()).toBe(count);
4233
+ }
4234
+ async expectCurrentTaskCount(count) {
4235
+ (0, $kKeXs$playwrighttest.expect)(await this.page.locator(".task.active").count()).toBe(count);
4236
+ }
4124
4237
  }
4125
4238
  class $9b9a8c3da392d020$var$Phase extends (0, $f8721861c660dd88$export$2b65d1d97338f32b) {
4126
4239
  constructor(page, phaseName){
@@ -4138,8 +4251,8 @@ class $9b9a8c3da392d020$var$Phase extends (0, $f8721861c660dd88$export$2b65d1d97
4138
4251
  await this.phaseLocator.locator(".phase-header input").fill(title);
4139
4252
  await this.phaseLocator.locator(".phase-header input").blur();
4140
4253
  }
4141
- async isMenuItemEnabled(menuName, taskTitle) {
4142
- await this.openContextMenuForTask(taskTitle);
4254
+ async isMenuItemEnabled(menuName, taskTitle, group = false) {
4255
+ await this.openContextMenuForTask(taskTitle, group);
4143
4256
  await (0, $kKeXs$playwrighttest.expect)(this.contextMenuButton.filter({
4144
4257
  hasText: menuName
4145
4258
  })).not.toHaveClass(/disabled/);
@@ -4148,8 +4261,8 @@ class $9b9a8c3da392d020$var$Phase extends (0, $f8721861c660dd88$export$2b65d1d97
4148
4261
  }).locator("a")).not.toBeDisabled();
4149
4262
  await this.closeContextMenu();
4150
4263
  }
4151
- async isMenuItemDisabled(menuName, taskTitle) {
4152
- await this.openContextMenuForTask(taskTitle);
4264
+ async isMenuItemDisabled(menuName, taskTitle, group = false) {
4265
+ await this.openContextMenuForTask(taskTitle, group);
4153
4266
  const menuItem = this.contextMenuButton.filter({
4154
4267
  hasText: menuName
4155
4268
  });
@@ -4202,8 +4315,11 @@ class $9b9a8c3da392d020$var$Phase extends (0, $f8721861c660dd88$export$2b65d1d97
4202
4315
  async expectToHaveTitle(phaseTitle) {
4203
4316
  await (0, $kKeXs$playwrighttest.expect)(this.phaseLocator.locator(".phase-title")).toContainText(phaseTitle);
4204
4317
  }
4205
- async openContextMenuForTask(taskTitle) {
4206
- await this.phaseLocator.locator(".task").filter({
4318
+ async openContextMenuForTask(taskTitle, group = false) {
4319
+ if (!group) await this.phaseLocator.locator(".task").filter({
4320
+ hasText: taskTitle
4321
+ }).locator(".context-menu-button").click();
4322
+ else await this.phaseLocator.locator(".task-group .task").filter({
4207
4323
  hasText: taskTitle
4208
4324
  }).locator(".context-menu-button").click();
4209
4325
  }
@@ -4235,6 +4351,16 @@ class $9b9a8c3da392d020$var$Phase extends (0, $f8721861c660dd88$export$2b65d1d97
4235
4351
  }).click();
4236
4352
  return this;
4237
4353
  }
4354
+ async unlockFromContextMenu(taskTitle, group = false) {
4355
+ await this.openContextMenuForTask(taskTitle, group);
4356
+ await this.page.locator(".dropdown-menu li").getByText("Unlock").click();
4357
+ await this.expectLockCheckMark(taskTitle, false);
4358
+ }
4359
+ async lockFromContextMenu(taskTitle, group = false) {
4360
+ await this.openContextMenuForTask(taskTitle, group);
4361
+ await this.page.locator(".dropdown-menu li").getByText("Lock").click();
4362
+ await this.expectLockCheckMark(taskTitle, true);
4363
+ }
4238
4364
  async expectChangeTypeContextMenuDisabled(taskTitle, taskGroup, taskType) {
4239
4365
  await this.openContextMenuForTask(taskTitle);
4240
4366
  await this.page.locator(".dropdown-menu li").getByText("Change type").click();
@@ -4252,6 +4378,15 @@ class $9b9a8c3da392d020$var$Phase extends (0, $f8721861c660dd88$export$2b65d1d97
4252
4378
  await (0, $kKeXs$playwrighttest.expect)(this.page.locator(".task-type-gatetask .marker-check-icon")).toBeVisible();
4253
4379
  return this;
4254
4380
  }
4381
+ async expectLockCheckMark(taskTitle, isVisible = true) {
4382
+ if (isVisible) await (0, $kKeXs$playwrighttest.expect)(this.page.locator(".task-header").filter({
4383
+ hasText: taskTitle
4384
+ }).locator(".lock-icon")).toBeVisible();
4385
+ else await (0, $kKeXs$playwrighttest.expect)(this.page.locator(".task-header").filter({
4386
+ hasText: taskTitle
4387
+ }).locator(".lock-icon")).not.toBeVisible();
4388
+ return this;
4389
+ }
4255
4390
  async expectFailureHandlerCheckMar(taskTitle, isVisible = true) {
4256
4391
  if (isVisible) await (0, $kKeXs$playwrighttest.expect)(this.page.locator(".task").filter({
4257
4392
  hasText: taskTitle
@@ -4364,10 +4499,10 @@ class $9b9a8c3da392d020$var$Phase extends (0, $f8721861c660dd88$export$2b65d1d97
4364
4499
  await this.page.getByText("View all completed phases").click();
4365
4500
  }
4366
4501
  async expectTaskToBePresent(taskName, visible = true) {
4367
- if (visible) await (0, $kKeXs$playwrighttest.expect)(this.phaseLocator.locator(".task").filter({
4502
+ if (visible) await (0, $kKeXs$playwrighttest.expect)(this.phaseLocator.locator(".task .task-title").filter({
4368
4503
  hasText: taskName
4369
4504
  })).toBeVisible();
4370
- else await (0, $kKeXs$playwrighttest.expect)(this.phaseLocator.locator(".task").filter({
4505
+ else await (0, $kKeXs$playwrighttest.expect)(this.phaseLocator.locator(".task .task-title").filter({
4371
4506
  hasText: taskName
4372
4507
  })).not.toBeVisible();
4373
4508
  }
@@ -4441,6 +4576,21 @@ class $9b9a8c3da392d020$var$Phase extends (0, $f8721861c660dd88$export$2b65d1d97
4441
4576
  hasText: "Your request has been rejected, your permissions may have been revoked."
4442
4577
  })).toBeVisible();
4443
4578
  }
4579
+ async expectCurrentTaskCount(count) {
4580
+ (0, $kKeXs$playwrighttest.expect)(await this.phaseLocator.locator(".task.active").count()).toBe(count);
4581
+ }
4582
+ async expectCompletedTaskCount(count) {
4583
+ (0, $kKeXs$playwrighttest.expect)(await this.phaseLocator.locator(".task.completed").count()).toBe(count);
4584
+ }
4585
+ async expectFailedTaskCount(count) {
4586
+ (0, $kKeXs$playwrighttest.expect)(await this.phaseLocator.locator(".task.failed").count()).toBe(count);
4587
+ }
4588
+ async expectFailingTaskCount(count) {
4589
+ (0, $kKeXs$playwrighttest.expect)(await this.phaseLocator.locator(".task.failing").count()).toBe(count);
4590
+ }
4591
+ async expectSkippedTaskCount(count) {
4592
+ (0, $kKeXs$playwrighttest.expect)(await this.phaseLocator.locator(".task.skipped").count()).toBe(count);
4593
+ }
4444
4594
  }
4445
4595
  class $9b9a8c3da392d020$var$RestartPhaseModel extends (0, $f8721861c660dd88$export$2b65d1d97338f32b) {
4446
4596
  constructor(page){
@@ -6096,18 +6246,21 @@ class $a8855257f8bb2b12$export$43682cddead1dd78 extends (0, $f8721861c660dd88$ex
6096
6246
  await this.page.getByRole("button", {
6097
6247
  name: "Today"
6098
6248
  }).click();
6099
- await this.page.locator(".tl-event-title").getByText(release_title).scrollIntoViewIfNeeded();
6100
- await this.page.locator(".tl-event-title").getByText(release_title).click();
6101
- const modalWindow = await this.page.locator(".release-modal-container").isVisible();
6102
- if (!modalWindow) {
6103
- await this.page.locator(".tl-event-title").getByText(release_title).scrollIntoViewIfNeeded();
6104
- await this.page.locator(".tl-event-title").getByText(release_title).click();
6105
- }
6249
+ await (0, $kKeXs$playwrighttest.expect)(async ()=>{
6250
+ await this.page.locator(".tl-event-title").getByText(release_title).scrollIntoViewIfNeeded({
6251
+ timeout: 1000
6252
+ });
6253
+ await this.page.locator(".tl-event-title").getByText(release_title).click({
6254
+ timeout: 1000
6255
+ });
6256
+ await (0, $kKeXs$playwrighttest.expect)(this.page.locator(".release-modal-container .xl-icon.release-icon")).toBeVisible({
6257
+ timeout: 1000
6258
+ });
6259
+ }).toPass();
6106
6260
  await this.page.locator(".release-modal-container").locator(".xl-icon.release-icon").click();
6107
6261
  const releaseurl = `/#/releases/${release_id}`;
6108
- const currentURL = await this.page.url();
6109
6262
  // Check if the release name present in redirected URL
6110
- (0, $kKeXs$playwrighttest.expect)(currentURL).toContain(releaseurl);
6263
+ (0, $kKeXs$playwrighttest.expect)(this.page.url()).toContain(releaseurl);
6111
6264
  }
6112
6265
  async viewDependency(source_release, dest_release) {
6113
6266
  const source_text = source_release + "dependencies";
@@ -6168,12 +6321,12 @@ class $a6a3c1345fc4767e$export$b6fbc3e67030138f extends (0, $f8721861c660dd88$ex
6168
6321
  await (0, $kKeXs$playwrighttest.expect)(this.page.locator(".release-status")).toContainText(status);
6169
6322
  }
6170
6323
  async expectReleaseGroupDisplayed(title) {
6171
- await (0, $kKeXs$playwrighttest.expect)(this.page.getByText(title, {
6324
+ await (0, $kKeXs$playwrighttest.expect)(this.page.locator(".row").getByText(title, {
6172
6325
  exact: true
6173
6326
  })).toBeVisible();
6174
6327
  }
6175
6328
  async expectReleaseGroupNotDisplayed(title) {
6176
- await (0, $kKeXs$playwrighttest.expect)(this.page.getByText(title, {
6329
+ await (0, $kKeXs$playwrighttest.expect)(this.page.locator(".row").getByText(title, {
6177
6330
  exact: true
6178
6331
  })).not.toBeVisible();
6179
6332
  }
@@ -6674,6 +6827,7 @@ class $ed2d4739e27d43c1$export$60c3bfa6385e2a10 extends (0, $f8721861c660dd88$ex
6674
6827
  await this.page.locator(`.row.task-inner`, {
6675
6828
  hasText: taskName
6676
6829
  }).getByText(taskName).click();
6830
+ await this.taskDrawer.waitForTaskDrawer();
6677
6831
  }
6678
6832
  async filterTaskByTitle(taskname) {
6679
6833
  await this.page.locator(".searchFilter").click();
@@ -6864,6 +7018,7 @@ class $ed2d4739e27d43c1$var$GridView extends (0, $f8721861c660dd88$export$2b65d1
6864
7018
  await this.page.locator(`[data-test-id="${taskId}"] .title`).filter({
6865
7019
  hasText: taskTitle
6866
7020
  }).click();
7021
+ await this.taskDrawer.waitForTaskDrawer();
6867
7022
  return this.taskDrawer;
6868
7023
  }
6869
7024
  async openContextualMenu(taskId) {
@@ -7110,18 +7265,21 @@ class $959d38250779aa22$export$8c8e7207254accc2 extends (0, $f8721861c660dd88$ex
7110
7265
  await this.page.getByText(taskName, {
7111
7266
  exact: true
7112
7267
  }).click();
7268
+ await this.taskDrawer.waitForTaskDrawer();
7113
7269
  return this.taskDrawer;
7114
7270
  }
7115
7271
  async openTaskDrawerFromTableView(taskName) {
7116
7272
  await this.page.locator(".name-cell-title").getByText(taskName, {
7117
7273
  exact: true
7118
7274
  }).click();
7275
+ await this.taskDrawer.waitForTaskDrawer();
7119
7276
  return this.taskDrawer;
7120
7277
  }
7121
7278
  async openTaskDrawerFromGrantt(taskName) {
7122
7279
  await this.page.locator(".gantt_tree_content").getByText(taskName, {
7123
7280
  exact: true
7124
7281
  }).dblclick();
7282
+ await this.taskDrawer.waitForTaskDrawer();
7125
7283
  return this.taskDrawer;
7126
7284
  }
7127
7285
  async openProperties() {
@@ -9310,6 +9468,9 @@ class $6998c6a53a9eb4fa$var$Fixtures {
9310
9468
  deleteFolder(folderId) {
9311
9469
  return this.doDelete(`api/v1/folders/${folderId}`);
9312
9470
  }
9471
+ deleteGlobalVariables() {
9472
+ return this.doDelete("fixtures/globalVariables");
9473
+ }
9313
9474
  activityLogs(id, logs) {
9314
9475
  return this.doPost(`fixtures/activityLogs/${id}`, logs);
9315
9476
  }
@@ -9361,6 +9522,8 @@ class $6998c6a53a9eb4fa$var$Fixtures {
9361
9522
  for (const releaseId of this.releaseIds.reverse())await this.deleteRelease(releaseId);
9362
9523
  for (const confId of this.configurationIds)await this.deleteConfiguration(confId);
9363
9524
  for (const folderId of this.folderIds.reverse())await this.deleteFolder(folderId);
9525
+ await this.deleteGlobalVariables();
9526
+ this.globalVariableIds = [];
9364
9527
  this.folderIds = [];
9365
9528
  this.releaseIds = [];
9366
9529
  this.triggerIds = [];