@digital-ai/devops-page-object-release 0.0.14 → 0.0.16

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,25 @@
1
1
  # @digital-ai/devops-page-object-release
2
2
 
3
+ ## 0.0.16
4
+
5
+ ### Patch Changes
6
+
7
+ - 92bf617: S-111286: page objects modifications for reopen-task-scenario
8
+ - 63ff9f6: S-111156: page objects modifications for claim-scenario
9
+ - 3747dfc: S-110037: Migrated releaseProperties and ci-properties scenario to
10
+ - 5f07582: + global variable page object creation
11
+ - 28fab68: S-111782: page object modifications for skip-scenario.ts
12
+ - e327dee: S-111571: page object modifications for task-flag-scenario.ts
13
+
14
+ ## 0.0.15
15
+
16
+ ### Patch Changes
17
+
18
+ - 8d73cc7: Added methods related to release page on release attachment and flow scenario testscript migration
19
+ - 75e0e3d: S-106378: Create page Object for Release Group and Release timeline page
20
+ - a08d087: Fixtures for roles and permissions are created.
21
+ Pages objects created to migrate cypress test - tasks-list-scenario.
22
+
3
23
  ## 0.0.14
4
24
 
5
25
  ### Patch Changes
package/dist/main.js CHANGED
@@ -1,8 +1,8 @@
1
1
  var $kKeXs$playwrighttest = require("@playwright/test");
2
2
  var $kKeXs$child_process = require("child_process");
3
3
  var $kKeXs$process = require("process");
4
- var $kKeXs$fs = require("fs");
5
4
  var $kKeXs$moment = require("moment");
5
+ var $kKeXs$fs = require("fs");
6
6
 
7
7
  var $parcel$global =
8
8
  typeof globalThis !== 'undefined'
@@ -1440,13 +1440,18 @@ class $f9016705c1a1eb20$export$aa59788fdecae2f2 extends (0, $f8721861c660dd88$ex
1440
1440
  hasText: fileName
1441
1441
  }).click();
1442
1442
  await this.page.getByLabel("delete file").click();
1443
+ await this.page.getByRole("button", {
1444
+ name: "Delete"
1445
+ }).waitFor({
1446
+ state: "visible"
1447
+ });
1443
1448
  await this.page.getByRole("button", {
1444
1449
  name: "Delete"
1445
1450
  }).click();
1446
1451
  }
1447
1452
  async expectWithNoAttachment(tempFile) {
1448
- const test = await this.page.locator(".task-attachments-grid .file-item-text").isVisible();
1449
- if (test) await (0, $kKeXs$playwrighttest.expect)(this.page.locator(".task-attachments-grid .file-item-text")).not.toContainText(tempFile);
1453
+ const test = await this.page.locator(".task-attachments-grid .file-item-text").count();
1454
+ if (test > 0) await (0, $kKeXs$playwrighttest.expect)(this.page.locator(".task-attachments-grid .file-item-text")).not.toContainText(tempFile);
1450
1455
  else await (0, $kKeXs$playwrighttest.expect)(this.page.locator(".task-attachments-grid .file-item-text")).not.toBeVisible();
1451
1456
  }
1452
1457
  }
@@ -1527,11 +1532,40 @@ class $6a21661eb4695574$export$e946776eae644790 extends (0, $f8721861c660dd88$ex
1527
1532
  await this.page.locator(".icon-fullscreen-exit").click();
1528
1533
  await (0, $kKeXs$playwrighttest.expect)(this.page.locator(".icon-fullscreen-exit")).not.toBeVisible();
1529
1534
  }
1535
+ async expectAssignedTo(username) {
1536
+ await (0, $kKeXs$playwrighttest.expect)(this.page.getByRole("button", {
1537
+ name: username
1538
+ })).toBeVisible();
1539
+ }
1540
+ async assignToMe(userName, existingUsername) {
1541
+ await this.page.getByRole("button", {
1542
+ name: existingUsername
1543
+ }).click();
1544
+ await this.page.getByTestId(`render-option-${userName}`).click();
1545
+ }
1546
+ async setFlag(flagName, flagComment) {
1547
+ await this.page.getByTestId("flag-btn").click();
1548
+ await this.page.getByLabel(flagName).click();
1549
+ await this.page.getByPlaceholder("Set message").click();
1550
+ await this.page.getByPlaceholder("Set message").fill(flagComment);
1551
+ await this.page.getByPlaceholder("Set message").press("Enter");
1552
+ await (0, $kKeXs$playwrighttest.expect)(this.page.getByRole("button", {
1553
+ name: `flag icon ${flagComment}`
1554
+ })).toBeVisible();
1555
+ }
1556
+ async expectFlaggedWith(flagName, flagComment) {
1557
+ await this.page.getByRole("button", {
1558
+ name: "flag icon"
1559
+ }).click();
1560
+ const regexPattern = new RegExp(`${flagComment}.*${flagName}`, "i");
1561
+ await (0, $kKeXs$playwrighttest.expect)(this.page.getByText(regexPattern)).toBeVisible();
1562
+ }
1530
1563
  }
1531
1564
 
1532
1565
 
1533
1566
 
1534
1567
 
1568
+
1535
1569
  class $8681d8a3f46f87b7$export$d1077068a9cc9f17 extends (0, $f8721861c660dd88$export$2b65d1d97338f32b) {
1536
1570
  constructor(page){
1537
1571
  super(page);
@@ -1564,9 +1598,10 @@ class $8681d8a3f46f87b7$export$d1077068a9cc9f17 extends (0, $f8721861c660dd88$ex
1564
1598
  async save() {
1565
1599
  await this.page.getByRole("button", {
1566
1600
  name: "Save"
1567
- }).click({
1568
- timeout: 2000
1569
- });
1601
+ }).waitFor();
1602
+ await this.page.getByRole("button", {
1603
+ name: "Save"
1604
+ }).click();
1570
1605
  await (0, $kKeXs$playwrighttest.expect)(this.page.locator(".form-footer .last-saved")).toBeVisible();
1571
1606
  }
1572
1607
  async reset() {
@@ -1582,6 +1617,128 @@ class $8681d8a3f46f87b7$export$d1077068a9cc9f17 extends (0, $f8721861c660dd88$ex
1582
1617
  hasText: filename
1583
1618
  })).toBeVisible();
1584
1619
  }
1620
+ async getAttachmentsListCount() {
1621
+ return await this.page.locator(".attachments tr").count();
1622
+ }
1623
+ async uploadFile(filePath) {
1624
+ const fileChooserPromise = this.page.waitForEvent("filechooser");
1625
+ await this.page.locator('input[type="file"]').click();
1626
+ const fileChooser = await fileChooserPromise;
1627
+ await fileChooser.setFiles(filePath);
1628
+ }
1629
+ async expectWithNoAttachment(filename) {
1630
+ const test = await this.page.locator(".attachments").isVisible();
1631
+ if (test) await (0, $kKeXs$playwrighttest.expect)(this.page.locator(".attachments tr td a").filter({
1632
+ hasText: filename
1633
+ })).not.toBeVisible();
1634
+ }
1635
+ async downloadFile(filename) {
1636
+ // eslint-disable-next-line @typescript-eslint/no-empty-function
1637
+ const downloadPromise1 = this.page.waitForEvent("download");
1638
+ await this.page.getByText(filename).click();
1639
+ const download = await downloadPromise1;
1640
+ // Wait for the download process to complete and save the downloaded file in given path.
1641
+ await download.saveAs("./core/xlr-ui/build/playwright/" + download.suggestedFilename());
1642
+ (0, $kKeXs$playwrighttest.expect)(download.suggestedFilename()).toBe(filename);
1643
+ }
1644
+ async deleteAttachment(fileName) {
1645
+ await this.page.getByRole("row", {
1646
+ name: fileName
1647
+ }).locator("span").click();
1648
+ await this.page.getByText("Remove").click();
1649
+ }
1650
+ async expectVariableDisplayed(variable, present) {
1651
+ if (present) await (0, $kKeXs$playwrighttest.expect)(this.page.locator(`#release-properties .form-group`, {
1652
+ hasText: variable
1653
+ })).toHaveCount(1);
1654
+ else await (0, $kKeXs$playwrighttest.expect)(this.page.locator(`#release-properties .form-group`, {
1655
+ hasText: variable
1656
+ })).toHaveCount(0);
1657
+ }
1658
+ async setScheduledStartDate(date, monthYear) {
1659
+ await this.page.locator(`.scheduled-start-date .date`).click();
1660
+ const prev = this.page.locator(".datepicker-days .prev");
1661
+ const next = this.page.locator(".datepicker-days .next");
1662
+ const monYear = this.page.locator(".datepicker-days .datepicker-switch");
1663
+ const thisMonth = (0, ($parcel$interopDefault($kKeXs$moment)))(monthYear, "MMMM YYYY").isBefore();
1664
+ while(await monYear.textContent() != monthYear)if (thisMonth) await prev.click();
1665
+ else await next.click();
1666
+ await this.page.getByRole("cell", {
1667
+ name: "" + date + ""
1668
+ }).first().click();
1669
+ }
1670
+ async setScheduledStartTime(hrs, mins, meridian) {
1671
+ await this.page.locator(".scheduled-start-date .time-picker-holder").click();
1672
+ if (typeof hrs !== "undefined") {
1673
+ await this.page.locator(".bootstrap-timepicker-hour").click();
1674
+ await this.page.locator(".bootstrap-timepicker-hour").clear();
1675
+ await this.page.locator(".bootstrap-timepicker-hour").fill(hrs);
1676
+ }
1677
+ if (typeof mins !== "undefined") {
1678
+ await this.page.locator(".bootstrap-timepicker-minute").click();
1679
+ await this.page.locator(".bootstrap-timepicker-minute").clear();
1680
+ await this.page.locator(".bootstrap-timepicker-minute").fill(mins);
1681
+ }
1682
+ if (typeof meridian !== "undefined") {
1683
+ await this.page.locator(".bootstrap-timepicker-meridian").click();
1684
+ await this.page.locator(".bootstrap-timepicker-meridian").clear();
1685
+ await this.page.locator(".bootstrap-timepicker-meridian").fill(meridian);
1686
+ }
1687
+ await this.page.keyboard.press("Escape");
1688
+ }
1689
+ async setDuration(days, hours, mins) {
1690
+ await this.page.locator(".duration-editor").click();
1691
+ if (typeof days !== "undefined") {
1692
+ await this.page.locator(".days").click();
1693
+ await this.page.locator(".days").clear();
1694
+ await this.page.locator(".days").fill(days);
1695
+ }
1696
+ if (typeof hours !== "undefined") {
1697
+ await this.page.locator(".hours").click();
1698
+ await this.page.locator(".hours").clear();
1699
+ await this.page.locator(".hours").fill(hours);
1700
+ }
1701
+ if (typeof mins !== "undefined") {
1702
+ await this.page.locator(".minutes").click();
1703
+ await this.page.locator(".minutes").clear();
1704
+ await this.page.locator(".minutes").fill(mins);
1705
+ }
1706
+ await this.page.keyboard.press("Escape");
1707
+ }
1708
+ async expectScheduledStartDateToBe(date) {
1709
+ (0, $kKeXs$playwrighttest.expect)(await this.page.locator(`.scheduled-start-date .date input`).getAttribute("value")).toContain(date);
1710
+ }
1711
+ async expectScheduledStartTimeToBe(date) {
1712
+ (0, $kKeXs$playwrighttest.expect)(await this.page.locator(`.scheduled-start-date .time input`).getAttribute("value")).toContain(date);
1713
+ }
1714
+ async expectDueDateToBe(date) {
1715
+ (0, $kKeXs$playwrighttest.expect)(await this.page.locator(".due-date .date input").getAttribute("value")).toContain(date);
1716
+ }
1717
+ async expectedDueDateTime(time) {
1718
+ (0, $kKeXs$playwrighttest.expect)(await this.page.locator(".due-date .time input").getAttribute("value")).toContain(time);
1719
+ }
1720
+ async expectDurationToBe(duration) {
1721
+ (0, $kKeXs$playwrighttest.expect)(await this.page.locator(".duration-editor").textContent()).toBe(duration);
1722
+ }
1723
+ async setDueDate(hrs, min, meridian) {
1724
+ await this.page.locator(".due-date .time-picker-holder").click();
1725
+ if (typeof hrs !== "undefined") {
1726
+ await this.page.locator(".bootstrap-timepicker-widget .bootstrap-timepicker-hour").click();
1727
+ await this.page.locator(".bootstrap-timepicker-widget .bootstrap-timepicker-hour").clear();
1728
+ await this.page.locator(".bootstrap-timepicker-widget .bootstrap-timepicker-hour").fill(hrs);
1729
+ }
1730
+ if (typeof min !== "undefined") {
1731
+ await this.page.locator(".bootstrap-timepicker-widget .bootstrap-timepicker-minute").click();
1732
+ await this.page.locator(".bootstrap-timepicker-widget .bootstrap-timepicker-minute").clear();
1733
+ await this.page.locator(".bootstrap-timepicker-widget .bootstrap-timepicker-minute").fill(min);
1734
+ }
1735
+ if (typeof meridian !== "undefined") {
1736
+ await this.page.locator(".bootstrap-timepicker-widget .bootstrap-timepicker-meridian").click();
1737
+ await this.page.locator(".bootstrap-timepicker-widget .bootstrap-timepicker-meridian").clear();
1738
+ await this.page.locator(".bootstrap-timepicker-widget .bootstrap-timepicker-meridian").fill(meridian);
1739
+ }
1740
+ await this.page.keyboard.press("Escape");
1741
+ }
1585
1742
  }
1586
1743
 
1587
1744
 
@@ -1606,6 +1763,16 @@ class $9b9a8c3da392d020$export$f43492e8ac3c566 extends (0, $f8721861c660dd88$exp
1606
1763
  getPhase(phaseName) {
1607
1764
  return new $9b9a8c3da392d020$var$Phase(this.page, phaseName);
1608
1765
  }
1766
+ async expectNotFlagged() {
1767
+ await (0, $kKeXs$playwrighttest.expect)(this.page.locator(".flag-none-icon")).toBeHidden();
1768
+ }
1769
+ async expectFlagOnTaskCard() {
1770
+ await (0, $kKeXs$playwrighttest.expect)(this.page.locator(".risk-flag-icon")).toBeVisible();
1771
+ }
1772
+ async refresh() {
1773
+ await this.page.reload();
1774
+ await this.page.waitForSelector("#release");
1775
+ }
1609
1776
  async start() {
1610
1777
  await this.page.getByTestId("start-btn").click();
1611
1778
  await this.page.getByRole("button", {
@@ -1659,6 +1826,25 @@ class $9b9a8c3da392d020$export$f43492e8ac3c566 extends (0, $f8721861c660dd88$exp
1659
1826
  timeout: 10000
1660
1827
  });
1661
1828
  }
1829
+ async waitForTaskPlanned(title) {
1830
+ await (0, $kKeXs$playwrighttest.expect)(this.page.locator(`.task:has-text('${title}').planned`)).toBeVisible();
1831
+ }
1832
+ async openManualTaskDetails(title) {
1833
+ await this.page.locator(`text=${title}`).click({
1834
+ force: true
1835
+ });
1836
+ await (0, $kKeXs$playwrighttest.expect)(this.page.locator("div").filter({
1837
+ hasText: title
1838
+ }).first()).toBeVisible();
1839
+ }
1840
+ async reopenTask(comment) {
1841
+ await this.page.locator("div").filter({
1842
+ hasText: /^Reopen$/
1843
+ }).click();
1844
+ await this.page.getByTestId("task-action-comment").click();
1845
+ await this.page.getByTestId("task-action-comment").fill(comment);
1846
+ await this.page.getByTestId("task-action-confirm").click();
1847
+ }
1662
1848
  async openTaskDrawer(taskName) {
1663
1849
  await this.page.locator(".task-header").getByText(taskName, {
1664
1850
  exact: true
@@ -1754,6 +1940,16 @@ class $9b9a8c3da392d020$export$f43492e8ac3c566 extends (0, $f8721861c660dd88$exp
1754
1940
  }
1755
1941
  }
1756
1942
  }
1943
+ async expectTitleToBeInBreadcrumbLink(title) {
1944
+ await (0, $kKeXs$playwrighttest.expect)(this.page.locator(".dot-breadcrumbs a", {
1945
+ hasText: title
1946
+ })).toBeVisible();
1947
+ }
1948
+ async expectHasPhase(title) {
1949
+ await (0, $kKeXs$playwrighttest.expect)(this.page.locator(`#release-content .phase-title`, {
1950
+ hasText: title
1951
+ })).toBeVisible();
1952
+ }
1757
1953
  }
1758
1954
  class $9b9a8c3da392d020$var$Phase extends (0, $f8721861c660dd88$export$2b65d1d97338f32b) {
1759
1955
  constructor(page, phaseName){
@@ -2206,15 +2402,46 @@ class $ed2d4739e27d43c1$export$60c3bfa6385e2a10 extends (0, $f8721861c660dd88$ex
2206
2402
  }
2207
2403
  async openTask(taskName) {
2208
2404
  await this.filterTaskByTitle(taskName);
2209
- await this.page.getByText(taskName).click();
2405
+ await this.page.getByText(taskName).first().click();
2406
+ }
2407
+ async skip(taskName, comment) {
2408
+ await this.page.locator(`.row.task-inner`, {
2409
+ hasText: taskName
2410
+ }).locator("span.skip").click();
2411
+ await this.page.getByPlaceholder("Give feedback or place a comment...").click();
2412
+ await this.page.getByPlaceholder("Give feedback or place a comment...").fill(comment);
2413
+ await this.page.getByRole("button", {
2414
+ name: "Skip",
2415
+ exact: true
2416
+ }).click();
2417
+ }
2418
+ async waitForTaskInProgress(taskName) {
2419
+ await (0, $kKeXs$playwrighttest.expect)(this.page.locator(`.row.task-inner`, {
2420
+ hasText: taskName
2421
+ }).getByText("In progress")).toBeVisible();
2422
+ }
2423
+ async openTaskInReleaseView(taskName) {
2424
+ await this.page.locator(`.row.task-inner`, {
2425
+ hasText: taskName
2426
+ }).locator("a.view-in-release").click();
2427
+ }
2428
+ async openCalendarViaTaskDueDate(taskName) {
2429
+ await this.page.locator(`.row.task-inner`, {
2430
+ hasText: taskName
2431
+ }).locator(`.calendar-link a`).click();
2432
+ }
2433
+ async openTaskDrawer(taskName) {
2434
+ await this.page.locator(`.row.task-inner`, {
2435
+ hasText: taskName
2436
+ }).getByText(taskName).click();
2210
2437
  }
2211
2438
  async filterTaskByTitle(taskname) {
2212
- await this.page.locator(".toggle-search-filter").click();
2439
+ await this.page.locator(".searchFilter").click();
2213
2440
  await this.page.locator(".searchFilter").fill(taskname);
2214
2441
  await this.page.locator(".searchFilter").press("Enter");
2215
2442
  await (0, $kKeXs$playwrighttest.expect)(this.page.locator("//div[@data-task-title]").filter({
2216
2443
  hasText: taskname
2217
- })).toBeVisible();
2444
+ }).first()).toBeVisible();
2218
2445
  }
2219
2446
  async filterTasksByTag(tag, taskTitleForValidation) {
2220
2447
  await this.page.locator(".toggle-search-filter").click();
@@ -2249,9 +2476,41 @@ class $ed2d4739e27d43c1$export$60c3bfa6385e2a10 extends (0, $f8721861c660dd88$ex
2249
2476
  await (0, $kKeXs$playwrighttest.expect)(this.page.locator(".view-in-release")).not.toBeVisible();
2250
2477
  }
2251
2478
  }
2479
+ async openTaskList() {
2480
+ await this.page.goto("./#/tasks");
2481
+ }
2482
+ async clickOnAssigneeButton(title) {
2483
+ await this.page.locator(`.btn-group-filter.btn-group button.btn.btn-flat[title="${title}"]`).click();
2484
+ }
2485
+ async assignTaskToMe(title) {
2486
+ await this.page.locator(`.task-line`).filter({
2487
+ hasText: title
2488
+ }).locator(`.assign-to-me`).click();
2489
+ await this.page.locator('.modal:visible >> text="Assign to me"').click();
2490
+ }
2491
+ async expectTaskAssignedToMe(title) {
2492
+ await this.expectTaskAssignedTo(title, "me");
2493
+ }
2494
+ async expectTaskAssignedTo(title, user) {
2495
+ await (0, $kKeXs$playwrighttest.expect)(this.page.locator(`.task-line:has-text("${title}") >> text="${user}"`).first()).toHaveCount(1);
2496
+ }
2252
2497
  async expectTaskTitle(taskTitle) {
2253
2498
  (0, $kKeXs$playwrighttest.expect)(await this.page.locator("#tasks0").innerText()).toContain(taskTitle);
2254
2499
  }
2500
+ async expectGroupView(expected = true) {
2501
+ if (expected) {
2502
+ await (0, $kKeXs$playwrighttest.expect)(this.page.locator("#group-tasks-by-release")).toBeChecked();
2503
+ await (0, $kKeXs$playwrighttest.expect)(this.page.locator("#task-list-grouped-view")).toBeVisible();
2504
+ await (0, $kKeXs$playwrighttest.expect)(this.page.locator("#task-ungrouped-view")).not.toBeVisible();
2505
+ } else {
2506
+ await (0, $kKeXs$playwrighttest.expect)(this.page.locator("#group-tasks-by-release")).not.toBeChecked();
2507
+ await (0, $kKeXs$playwrighttest.expect)(this.page.locator("#task-list-grouped-view")).not.toBeVisible();
2508
+ await (0, $kKeXs$playwrighttest.expect)(this.page.locator("#task-ungrouped-view")).toBeVisible();
2509
+ }
2510
+ }
2511
+ async changeGroupView() {
2512
+ await this.page.locator("#group-tasks-by-release").click();
2513
+ }
2255
2514
  }
2256
2515
 
2257
2516
 
@@ -2609,6 +2868,143 @@ class $8b6ce149dd48e48b$export$7e1d435fa474ee21 extends (0, $f8721861c660dd88$ex
2609
2868
  }
2610
2869
 
2611
2870
 
2871
+
2872
+
2873
+ class $a6a3c1345fc4767e$export$b6fbc3e67030138f extends (0, $f8721861c660dd88$export$2b65d1d97338f32b) {
2874
+ async setStatus(status) {
2875
+ await this.page.locator(".react-tagsinput").click({
2876
+ force: true
2877
+ });
2878
+ await this.page.getByText("Clear all").click();
2879
+ await this.page.locator(".react-tagsinput").click({
2880
+ force: true
2881
+ });
2882
+ if (status === "Select all") await this.page.getByText(status).click();
2883
+ else await this.page.getByTitle(status).locator("i").first().click();
2884
+ }
2885
+ async openReleaseGroup(title) {
2886
+ await this.page.locator("xlr-release-group-row").filter({
2887
+ hasText: title
2888
+ }).getByRole("link").click();
2889
+ await this.page.getByTitle(title).click();
2890
+ await (0, $kKeXs$playwrighttest.expect)(this.page).toHaveURL(/.*ReleaseGroup/);
2891
+ }
2892
+ async expectReleaseGroupStatus(status) {
2893
+ await (0, $kKeXs$playwrighttest.expect)(this.page.locator(".release-status")).toContainText(status);
2894
+ }
2895
+ async expectReleaseGroupDisplayed(title) {
2896
+ await (0, $kKeXs$playwrighttest.expect)(this.page.getByText(title, {
2897
+ exact: true
2898
+ })).toBeVisible();
2899
+ }
2900
+ async expectReleaseGroupNotDisplayed(title) {
2901
+ await (0, $kKeXs$playwrighttest.expect)(this.page.getByText(title, {
2902
+ exact: true
2903
+ })).not.toBeVisible();
2904
+ }
2905
+ async searchReleaseGroupByTitle(title) {
2906
+ await this.page.getByPlaceholder("Search for groups...", {
2907
+ exact: true
2908
+ }).click();
2909
+ await this.page.getByPlaceholder("Search for groups...", {
2910
+ exact: true
2911
+ }).fill(title);
2912
+ await this.page.getByPlaceholder("Search for groups...", {
2913
+ exact: true
2914
+ }).press("Enter");
2915
+ }
2916
+ async deleteReleaseGroup(title) {
2917
+ await this.page.locator(".fc-list-item-line").filter({
2918
+ hasText: title
2919
+ }).locator(".fc-item-delete").click();
2920
+ await this.page.getByRole("button", {
2921
+ name: "Delete"
2922
+ }).click();
2923
+ }
2924
+ async clickReleaseGroupEdit(title) {
2925
+ await this.page.locator(".fc-list-item-line").filter({
2926
+ hasText: title
2927
+ }).locator(".fc-item-update").click();
2928
+ }
2929
+ async enterReleaseGroupDetails(new_title) {
2930
+ await this.page.locator(".modal-body").locator("#title").fill(new_title);
2931
+ }
2932
+ async clickSaveButton() {
2933
+ await this.page.locator(".modal-footer").getByRole("button", {
2934
+ name: "Save"
2935
+ }).click();
2936
+ }
2937
+ async clickCancelButton() {
2938
+ await this.page.locator(".modal-footer").getByRole("button", {
2939
+ name: "Cancel"
2940
+ }).click();
2941
+ }
2942
+ }
2943
+
2944
+
2945
+
2946
+
2947
+ class $3fad6a9449b6416f$export$1a0994e9c202d529 extends (0, $f8721861c660dd88$export$2b65d1d97338f32b) {
2948
+ async expectReleaseDisplayed(title) {
2949
+ await (0, $kKeXs$playwrighttest.expect)(this.page.getByText(title, {
2950
+ exact: true
2951
+ })).toBeVisible();
2952
+ }
2953
+ async expectReleaseNotDisplayed(title) {
2954
+ await (0, $kKeXs$playwrighttest.expect)(this.page.getByText(title, {
2955
+ exact: true
2956
+ })).not.toBeVisible({
2957
+ timeout: 10000
2958
+ });
2959
+ }
2960
+ async expectPhaseDisplayed(title) {
2961
+ await (0, $kKeXs$playwrighttest.expect)(this.page.getByText(title, {
2962
+ exact: true
2963
+ })).toBeVisible();
2964
+ }
2965
+ async openContextMenu(title) {
2966
+ await this.page.locator(".timeline-row-name").filter({
2967
+ hasText: title
2968
+ }).locator(".options-icon").click();
2969
+ }
2970
+ async removeFromReleaseGroup() {
2971
+ await this.page.getByRole("menuitem", {
2972
+ name: "Remove from group"
2973
+ }).locator("a").click();
2974
+ await this.page.getByRole("button", {
2975
+ name: "Remove"
2976
+ }).click();
2977
+ }
2978
+ async expectNumberOfReleases(num_of_release) {
2979
+ const elementCount = await this.page.locator(".timeline-row-name-release").count();
2980
+ (0, $kKeXs$playwrighttest.expect)(elementCount).toBe(num_of_release);
2981
+ }
2982
+ async openAddReleaseList() {
2983
+ await this.page.getByRole("button", {
2984
+ name: "Add release"
2985
+ }).click();
2986
+ }
2987
+ async filterReleases(title) {
2988
+ await this.page.getByPlaceholder("Search for a release...").click();
2989
+ await this.page.getByPlaceholder("Search for a release...").fill(title);
2990
+ await this.page.waitForTimeout(5000);
2991
+ await this.page.getByPlaceholder("Search for a release...").press("Enter");
2992
+ }
2993
+ async expectNumberOfReleasesOnModal(num_of_release) {
2994
+ const elementCount = await this.page.locator(".release-modal-line").count();
2995
+ (0, $kKeXs$playwrighttest.expect)(elementCount).toBe(num_of_release);
2996
+ }
2997
+ async selectAllReleaseCheckbox() {
2998
+ await this.page.getByLabel("Select all").check();
2999
+ }
3000
+ async addReleasesToGroup() {
3001
+ await this.page.getByRole("button", {
3002
+ name: "Add"
3003
+ }).click();
3004
+ }
3005
+ }
3006
+
3007
+
2612
3008
  class $4ef41cf96a5fae4c$export$b8a61e5c71402559 {
2613
3009
  constructor(page){
2614
3010
  this.page = page;
@@ -2622,6 +3018,8 @@ class $4ef41cf96a5fae4c$export$b8a61e5c71402559 {
2622
3018
  this.taskDetailsPage = new (0, $a642d735048996f9$export$922081b54f2ab994)(page);
2623
3019
  this.releaseCalendarPage = new (0, $a8855257f8bb2b12$export$43682cddead1dd78)(page);
2624
3020
  this.releaseListPage = new (0, $87643f2d97b0644e$export$a678525e79c4ccc4)(page);
3021
+ this.releaseGroupPage = new (0, $a6a3c1345fc4767e$export$b6fbc3e67030138f)(page);
3022
+ this.releaseGroupTimelinePage = new (0, $3fad6a9449b6416f$export$1a0994e9c202d529)(page);
2625
3023
  this.util = new (0, $4efca3d4eadf892b$export$6adb8dd3f0d1e432)(page);
2626
3024
  }
2627
3025
  async openTemplate(id) {
@@ -2755,6 +3153,7 @@ class $258749e0671c845a$export$f14c0e3f98d164c0 extends (0, $f8721861c660dd88$ex
2755
3153
  timeout: 10000
2756
3154
  });
2757
3155
  await this.page.waitForTimeout(1000);
3156
+ await this.closePendoModalWindow();
2758
3157
  }
2759
3158
  /**
2760
3159
  * Logout as authenticated user
@@ -2777,6 +3176,10 @@ class $258749e0671c845a$export$f14c0e3f98d164c0 extends (0, $f8721861c660dd88$ex
2777
3176
  const val = await this.page.locator("top-toolbar .avatar-wrapper span.dot-tooltip").getAttribute("aria-label");
2778
3177
  (0, $kKeXs$playwrighttest.expect)(val).toContain(username);
2779
3178
  }
3179
+ async closePendoModalWindow() {
3180
+ await this.page.waitForTimeout(1000);
3181
+ if (await this.page.locator("._pendo-close-guide").count() > 0) await this.page.locator("._pendo-close-guide").click();
3182
+ }
2780
3183
  }
2781
3184
 
2782
3185
 
@@ -3670,6 +4073,15 @@ class $6998c6a53a9eb4fa$var$Fixtures {
3670
4073
  this.triggerIds.push(trigger.id);
3671
4074
  return this.doPost("fixtures/trigger", trigger);
3672
4075
  }
4076
+ roles(rolePrincipals) {
4077
+ return this.doPost("fixtures/roles/principals", rolePrincipals);
4078
+ }
4079
+ permissions(rolePermissions) {
4080
+ return this.doPost("fixtures/roles/permissions/global", rolePermissions);
4081
+ }
4082
+ deleteRole(roleName) {
4083
+ return this.doDelete(`fixtures/role/${roleName}`);
4084
+ }
3673
4085
  deleteArchivedRelease(id) {
3674
4086
  const releaseId = id.includes("Applications/") ? id : `Applications/${id}`;
3675
4087
  return this.doDelete("fixtures/cis", [
@@ -3698,8 +4110,7 @@ class $6998c6a53a9eb4fa$var$Fixtures {
3698
4110
  ]);
3699
4111
  }
3700
4112
  deleteFolder(folderId) {
3701
- const id = this.doGet(`api/v1/folders/${folderId}`);
3702
- return this.doDelete(`api/v1/folders/${id}`);
4113
+ return this.doDelete(`api/v1/folders/${folderId}`);
3703
4114
  }
3704
4115
  activityLogs(id, logs) {
3705
4116
  return this.doPost(`fixtures/activityLogs/${id}`, logs);
@@ -3850,6 +4261,9 @@ class $6998c6a53a9eb4fa$var$Fixtures {
3850
4261
  }
3851
4262
  ]);
3852
4263
  }
4264
+ async createReleaseGroup(releaseGroup) {
4265
+ return this.doPost("fixtures/release-groups", releaseGroup);
4266
+ }
3853
4267
  doPost(url, body) {
3854
4268
  return this.request.post(url, {
3855
4269
  data: body,