@umbraco/playwright-testhelpers 2.0.0-beta.78 → 2.0.0-beta.79

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.
@@ -5,7 +5,6 @@ const UiBaseLocators_1 = require("./UiBaseLocators");
5
5
  const test_1 = require("@playwright/test");
6
6
  class MediaUiHelper extends UiBaseLocators_1.UiBaseLocators {
7
7
  createMediaItemBtn;
8
- mediaTypePopoverBtn;
9
8
  mediaNameTxt;
10
9
  actionModalCreateBtn;
11
10
  mediaSearchTxt;
@@ -18,15 +17,15 @@ class MediaUiHelper extends UiBaseLocators_1.UiBaseLocators {
18
17
  confirmEmptyRecycleBinBtn;
19
18
  recycleBinMenuItem;
20
19
  recycleBinMenuItemCaretBtn;
20
+ mediaSectionCreateBtn;
21
21
  constructor(page) {
22
22
  super(page);
23
23
  this.createMediaItemBtn = page.locator('umb-create-media-collection-action').getByLabel('Create');
24
- this.mediaTypePopoverBtn = page.locator('#collection-action-menu-popover');
25
24
  this.mediaNameTxt = page.locator('#name-input #input');
26
25
  this.actionModalCreateBtn = page.locator('#action-modal').getByLabel('Create');
27
26
  this.mediaSearchTxt = page.getByLabel('Search', { exact: true });
28
27
  this.trashBtn = page.getByLabel('Trash', { exact: true });
29
- this.restoreThreeDotsBtn = page.getByLabel('Restore...', { exact: true });
28
+ this.restoreThreeDotsBtn = page.getByRole('button', { name: 'Restore...' });
30
29
  this.emptyRecycleBinThreeDotsBtn = page.getByLabel('Empty Recycle Bin...', { exact: true });
31
30
  this.confirmTrashBtn = page.locator('#confirm').getByLabel('Trash');
32
31
  this.recycleBinBtn = page.getByLabel('Recycle Bin', { exact: true });
@@ -34,6 +33,7 @@ class MediaUiHelper extends UiBaseLocators_1.UiBaseLocators {
34
33
  this.confirmEmptyRecycleBinBtn = page.getByLabel('Empty Recycle Bin', { exact: true });
35
34
  this.recycleBinMenuItem = page.locator('uui-menu-item[label="Recycle Bin"]');
36
35
  this.recycleBinMenuItemCaretBtn = this.recycleBinMenuItem.locator('#caret-button');
36
+ this.mediaSectionCreateBtn = this.page.locator('#header').filter({ hasText: 'Media' }).getByLabel('#actions_create');
37
37
  }
38
38
  async clickCreateMediaItemButton() {
39
39
  await this.createMediaItemBtn.click();
@@ -43,7 +43,7 @@ class MediaUiHelper extends UiBaseLocators_1.UiBaseLocators {
43
43
  await this.mediaNameTxt.fill(name);
44
44
  }
45
45
  async clickMediaTypeWithNameButton(mediaTypeName) {
46
- await this.mediaTypePopoverBtn.getByLabel(mediaTypeName).click();
46
+ await this.page.getByLabel(mediaTypeName, { exact: true }).click({ force: true });
47
47
  }
48
48
  async searchForMediaItemByName(name) {
49
49
  await this.mediaSearchTxt.clear();
@@ -64,6 +64,7 @@ class MediaUiHelper extends UiBaseLocators_1.UiBaseLocators {
64
64
  async restoreMediaItem(name) {
65
65
  await this.clickActionsMenuForName(name);
66
66
  await this.restoreThreeDotsBtn.click();
67
+ await this.page.waitForTimeout(1000);
67
68
  await this.restoreBtn.click();
68
69
  }
69
70
  async deleteMediaItem(name) {
@@ -71,6 +72,13 @@ class MediaUiHelper extends UiBaseLocators_1.UiBaseLocators {
71
72
  await this.clickDeleteButton();
72
73
  await this.clickConfirmToDeleteButton();
73
74
  }
75
+ async clickCreateMediaWithType(mediaTypeName) {
76
+ await this.mediaSectionCreateBtn.click({ force: true });
77
+ await this.clickMediaTypeName(mediaTypeName);
78
+ }
79
+ async clickMediaTypeName(mediaTypeName) {
80
+ await this.documentTypeNode.filter({ hasText: mediaTypeName }).click();
81
+ }
74
82
  async clickEmptyRecycleBinButton() {
75
83
  await this.emptyRecycleBinThreeDotsBtn.click({ force: true });
76
84
  }
@@ -1 +1 @@
1
- {"version":3,"file":"MediaUiHelper.js","sourceRoot":"","sources":["../../../lib/helpers/MediaUiHelper.ts"],"names":[],"mappings":"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","sourcesContent":["import {UiBaseLocators} from \"./UiBaseLocators\";\nimport {expect, Locator, Page} from \"@playwright/test\";\n\nexport class MediaUiHelper extends UiBaseLocators {\n private readonly createMediaItemBtn: Locator;\n private readonly mediaTypePopoverBtn: Locator;\n private readonly mediaNameTxt: Locator;\n private readonly actionModalCreateBtn: Locator;\n private readonly mediaSearchTxt: Locator;\n private readonly trashBtn: Locator;\n private readonly restoreThreeDotsBtn: Locator;\n private readonly emptyRecycleBinThreeDotsBtn: Locator;\n private readonly confirmTrashBtn: Locator;\n private readonly recycleBinBtn: Locator;\n private readonly restoreBtn: Locator;\n private readonly confirmEmptyRecycleBinBtn: Locator;\n private readonly recycleBinMenuItem: Locator;\n private readonly recycleBinMenuItemCaretBtn: Locator;\n\n constructor(page: Page) {\n super(page);\n this.createMediaItemBtn = page.locator('umb-create-media-collection-action').getByLabel('Create');\n this.mediaTypePopoverBtn = page.locator('#collection-action-menu-popover');\n this.mediaNameTxt = page.locator('#name-input #input');\n this.actionModalCreateBtn = page.locator('#action-modal').getByLabel('Create');\n this.mediaSearchTxt = page.getByLabel('Search', {exact: true});\n this.trashBtn = page.getByLabel('Trash', {exact: true});\n this.restoreThreeDotsBtn = page.getByLabel('Restore...', {exact: true});\n this.emptyRecycleBinThreeDotsBtn = page.getByLabel('Empty Recycle Bin...', {exact: true});\n this.confirmTrashBtn = page.locator('#confirm').getByLabel('Trash');\n this.recycleBinBtn = page.getByLabel('Recycle Bin', {exact: true});\n this.restoreBtn = page.getByLabel('Restore', {exact: true});\n this.confirmEmptyRecycleBinBtn = page.getByLabel('Empty Recycle Bin', {exact: true});\n this.recycleBinMenuItem = page.locator('uui-menu-item[label=\"Recycle Bin\"]');\n this.recycleBinMenuItemCaretBtn = this.recycleBinMenuItem.locator('#caret-button');\n }\n\n async clickCreateMediaItemButton() {\n await this.createMediaItemBtn.click();\n }\n\n async enterMediaItemName(name: string) {\n await this.mediaNameTxt.clear();\n await this.mediaNameTxt.fill(name);\n }\n\n async clickMediaTypeWithNameButton(mediaTypeName: string) {\n await this.mediaTypePopoverBtn.getByLabel(mediaTypeName).click();\n }\n\n async searchForMediaItemByName(name: string) {\n await this.mediaSearchTxt.clear();\n await this.mediaSearchTxt.fill(name);\n }\n\n async doesMediaCardsContainAmount(count: number) {\n await expect(this.mediaCardItems).toHaveCount(count);\n }\n\n async doesMediaCardContainText(name: string) {\n await expect(this.mediaCardItems).toContainText(name);\n }\n\n async clickTrashButton() {\n await this.trashBtn.click();\n }\n\n async clickConfirmTrashButton() {\n await this.confirmTrashBtn.click();\n }\n\n async restoreMediaItem(name: string) {\n await this.clickActionsMenuForName(name);\n await this.restoreThreeDotsBtn.click();\n await this.restoreBtn.click();\n }\n\n async deleteMediaItem(name: string) {\n await this.clickActionsMenuForName(name);\n await this.clickDeleteButton();\n await this.clickConfirmToDeleteButton();\n }\n\n async clickEmptyRecycleBinButton() {\n await this.emptyRecycleBinThreeDotsBtn.click({force: true});\n }\n\n async clickConfirmEmptyRecycleBinButton() {\n await this.confirmEmptyRecycleBinBtn.click();\n }\n\n async clickCreateModalButton() {\n await this.actionModalCreateBtn.click();\n }\n\n async clickMediaCaretButtonForName(name: string) {\n await this.page.locator('umb-media-tree-item [label=\"' + name + '\"]').locator('#caret-button').click();\n }\n\n async reloadRecycleBin(containsMediaItems = true) {\n // We need to wait to be sure that the item is visible after reload\n await this.page.waitForTimeout(500);\n await this.page.reload();\n\n await expect(this.recycleBinMenuItem).toBeVisible();\n\n await this.clickActionsMenuForName('Recycle Bin');\n await this.clickReloadButton();\n await expect(this.recycleBinMenuItem).toBeVisible();\n\n // If the Recycle Bin does not contain any media items, the caret button should not be visible. and we should not try to click it\n if (!containsMediaItems) {\n await expect(this.recycleBinMenuItemCaretBtn).not.toBeVisible();\n return;\n }\n\n await expect(this.recycleBinMenuItemCaretBtn).toBeVisible();\n const isCaretButtonOpen = await this.recycleBinMenuItem.getAttribute('show-children');\n\n if (isCaretButtonOpen === null) {\n // We need to wait before clicking the caret button. Because the reload might not have happened yet. \n await this.clickCaretButtonForName('Recycle Bin');\n }\n }\n\n async clickRecycleBinButton() {\n await this.recycleBinBtn.click();\n }\n\n async isMediaItemVisibleInRecycleBin(mediaItem: string, isVisible: boolean = true) {\n await this.reloadRecycleBin(isVisible);\n return expect(this.page.locator('[label=\"Recycle Bin\"] [label=\"' + mediaItem + '\"]')).toBeVisible({visible: isVisible});\n }\n}"]}
1
+ {"version":3,"file":"MediaUiHelper.js","sourceRoot":"","sources":["../../../lib/helpers/MediaUiHelper.ts"],"names":[],"mappings":"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","sourcesContent":["import {UiBaseLocators} from \"./UiBaseLocators\";\nimport {expect, Locator, Page} from \"@playwright/test\";\n\nexport class MediaUiHelper extends UiBaseLocators {\n private readonly createMediaItemBtn: Locator;\n private readonly mediaNameTxt: Locator;\n private readonly actionModalCreateBtn: Locator;\n private readonly mediaSearchTxt: Locator;\n private readonly trashBtn: Locator;\n private readonly restoreThreeDotsBtn: Locator;\n private readonly emptyRecycleBinThreeDotsBtn: Locator;\n private readonly confirmTrashBtn: Locator;\n private readonly recycleBinBtn: Locator;\n private readonly restoreBtn: Locator;\n private readonly confirmEmptyRecycleBinBtn: Locator;\n private readonly recycleBinMenuItem: Locator;\n private readonly recycleBinMenuItemCaretBtn: Locator;\n private readonly mediaSectionCreateBtn: Locator;\n\n constructor(page: Page) {\n super(page);\n this.createMediaItemBtn = page.locator('umb-create-media-collection-action').getByLabel('Create');\n this.mediaNameTxt = page.locator('#name-input #input');\n this.actionModalCreateBtn = page.locator('#action-modal').getByLabel('Create');\n this.mediaSearchTxt = page.getByLabel('Search', {exact: true});\n this.trashBtn = page.getByLabel('Trash', {exact: true});\n this.restoreThreeDotsBtn = page.getByRole('button', {name: 'Restore...'});\n this.emptyRecycleBinThreeDotsBtn = page.getByLabel('Empty Recycle Bin...', {exact: true});\n this.confirmTrashBtn = page.locator('#confirm').getByLabel('Trash');\n this.recycleBinBtn = page.getByLabel('Recycle Bin', {exact: true});\n this.restoreBtn = page.getByLabel('Restore', {exact: true});\n this.confirmEmptyRecycleBinBtn = page.getByLabel('Empty Recycle Bin', {exact: true});\n this.recycleBinMenuItem = page.locator('uui-menu-item[label=\"Recycle Bin\"]');\n this.recycleBinMenuItemCaretBtn = this.recycleBinMenuItem.locator('#caret-button');\n this.mediaSectionCreateBtn = this.page.locator('#header').filter({hasText: 'Media'}).getByLabel('#actions_create');\n }\n\n async clickCreateMediaItemButton() {\n await this.createMediaItemBtn.click();\n }\n\n async enterMediaItemName(name: string) {\n await this.mediaNameTxt.clear();\n await this.mediaNameTxt.fill(name);\n }\n\n async clickMediaTypeWithNameButton(mediaTypeName: string) {\n await this.page.getByLabel(mediaTypeName, {exact: true}).click({force: true});\n }\n\n async searchForMediaItemByName(name: string) {\n await this.mediaSearchTxt.clear();\n await this.mediaSearchTxt.fill(name);\n }\n\n async doesMediaCardsContainAmount(count: number) {\n await expect(this.mediaCardItems).toHaveCount(count);\n }\n\n async doesMediaCardContainText(name: string) {\n await expect(this.mediaCardItems).toContainText(name);\n }\n\n async clickTrashButton() {\n await this.trashBtn.click();\n }\n\n async clickConfirmTrashButton() {\n await this.confirmTrashBtn.click();\n }\n\n async restoreMediaItem(name: string) {\n await this.clickActionsMenuForName(name);\n await this.restoreThreeDotsBtn.click();\n await this.page.waitForTimeout(1000);\n await this.restoreBtn.click();\n }\n\n async deleteMediaItem(name: string) {\n await this.clickActionsMenuForName(name);\n await this.clickDeleteButton();\n await this.clickConfirmToDeleteButton();\n }\n\n async clickCreateMediaWithType(mediaTypeName: string) {\n await this.mediaSectionCreateBtn.click({force: true});\n await this.clickMediaTypeName(mediaTypeName);\n }\n\n async clickMediaTypeName(mediaTypeName: string) {\n await this.documentTypeNode.filter({hasText: mediaTypeName}).click();\n }\n\n async clickEmptyRecycleBinButton() {\n await this.emptyRecycleBinThreeDotsBtn.click({force: true});\n }\n\n async clickConfirmEmptyRecycleBinButton() {\n await this.confirmEmptyRecycleBinBtn.click();\n }\n\n async clickCreateModalButton() {\n await this.actionModalCreateBtn.click();\n }\n\n async clickMediaCaretButtonForName(name: string) {\n await this.page.locator('umb-media-tree-item [label=\"' + name + '\"]').locator('#caret-button').click();\n }\n\n async reloadRecycleBin(containsMediaItems = true) {\n // We need to wait to be sure that the item is visible after reload\n await this.page.waitForTimeout(500);\n await this.page.reload();\n\n await expect(this.recycleBinMenuItem).toBeVisible();\n\n await this.clickActionsMenuForName('Recycle Bin');\n await this.clickReloadButton();\n await expect(this.recycleBinMenuItem).toBeVisible();\n\n // If the Recycle Bin does not contain any media items, the caret button should not be visible. and we should not try to click it\n if (!containsMediaItems) {\n await expect(this.recycleBinMenuItemCaretBtn).not.toBeVisible();\n return;\n }\n\n await expect(this.recycleBinMenuItemCaretBtn).toBeVisible();\n const isCaretButtonOpen = await this.recycleBinMenuItem.getAttribute('show-children');\n\n if (isCaretButtonOpen === null) {\n // We need to wait before clicking the caret button. Because the reload might not have happened yet. \n await this.clickCaretButtonForName('Recycle Bin');\n }\n }\n\n async clickRecycleBinButton() {\n await this.recycleBinBtn.click();\n }\n\n async isMediaItemVisibleInRecycleBin(mediaItem: string, isVisible: boolean = true) {\n await this.reloadRecycleBin(isVisible);\n return expect(this.page.locator('[label=\"Recycle Bin\"] [label=\"' + mediaItem + '\"]')).toBeVisible({visible: isVisible});\n }\n}"]}
@@ -14,6 +14,10 @@ export declare class TemporaryFileApiHelper {
14
14
  mediaTypeId: any;
15
15
  temporaryFileId: any;
16
16
  }>;
17
+ createDefaultTemporaryArticleFile(): Promise<{
18
+ mediaTypeId: any;
19
+ temporaryFileId: any;
20
+ }>;
17
21
  createTemporaryFile(fileName: string, mediaTypeName: string, mimeType: string): Promise<{
18
22
  mediaTypeId: any;
19
23
  temporaryFileId: any;
@@ -26,6 +26,9 @@ class TemporaryFileApiHelper {
26
26
  async createDefaultTemporaryImageFile() {
27
27
  return this.createTemporaryFile('Umbraco.png', 'Image', 'image/png');
28
28
  }
29
+ async createDefaultTemporaryArticleFile() {
30
+ return this.createTemporaryFile('Article.pdf', 'Article', 'application/pdf');
31
+ }
29
32
  async createTemporaryFile(fileName, mediaTypeName, mimeType) {
30
33
  const mediaType = await this.api.mediaType.getByName(mediaTypeName);
31
34
  const crypto = require('crypto');
@@ -1 +1 @@
1
- {"version":3,"file":"TemporaryFileApiHelper.js","sourceRoot":"","sources":["../../../lib/helpers/TemporaryFileApiHelper.ts"],"names":[],"mappings":";;;AAEA,MAAa,sBAAsB;IACjC,GAAG,CAAY;IAEf,YAAY,GAAe;QACzB,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;IACjB,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,EAAU;QACxB,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,GAAG,4CAA4C,GAAG,EAAE,CAAC,CAAC;QAC1G,OAAO,QAAQ,CAAC,MAAM,EAAE,KAAK,GAAG,CAAC;IACnC,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,EAAU,EAAE,IAAY,EAAE,QAAQ,EAAE,QAAQ;QACvD,OAAO,IAAI,CAAC,GAAG,CAAC,iBAAiB,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,GAAG,2CAA2C,EAAE,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAA;IACjI,CAAC;IAED,KAAK,CAAC,GAAG,CAAC,EAAU;QAClB,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,GAAG,4CAA4C,GAAG,EAAE,CAAC,CAAC;QAC1G,OAAO,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;IAC/B,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,EAAU;QACrB,OAAO,MAAM,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,GAAG,4CAA4C,GAAG,EAAE,CAAC,CAAC;IACrG,CAAC;IAED,KAAK,CAAC,0BAA0B;QAC9B,OAAO,IAAI,CAAC,mBAAmB,CAAC,UAAU,EAAE,MAAM,EAAE,YAAY,CAAC,CAAC;IACpE,CAAC;IAED,KAAK,CAAC,+BAA+B;QACnC,OAAO,IAAI,CAAC,mBAAmB,CAAC,aAAa,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC;IACvE,CAAC;IAED,KAAK,CAAC,mBAAmB,CAAC,QAAgB,EAAE,aAAqB,EAAE,QAAgB;QACjF,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC;QACpE,MAAM,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;QACjC,MAAM,eAAe,GAAG,MAAM,CAAC,UAAU,EAAE,CAAC;QAC5C,MAAM,QAAQ,GAAG,0BAA0B,GAAG,QAAQ,CAAC;QACvD,MAAM,IAAI,CAAC,MAAM,CAAC,eAAe,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;QAEjE,OAAO,EAAC,WAAW,EAAE,SAAS,CAAC,EAAE,EAAE,eAAe,EAAE,eAAe,EAAC,CAAC;IACvE,CAAC;CACF;AA1CD,wDA0CC","sourcesContent":["import {ApiHelpers} from \"./ApiHelpers\";\n\nexport class TemporaryFileApiHelper {\n api: ApiHelpers\n\n constructor(api: ApiHelpers) {\n this.api = api;\n }\n\n async doesExist(id: string) {\n const response = await this.api.get(this.api.baseUrl + '/umbraco/management/api/v1/temporary-file/' + id);\n return response.status() === 200;\n }\n\n async create(id: string, name: string, mimeType, filePath) {\n return this.api.postMultiPartForm(this.api.baseUrl + '/umbraco/management/api/v1/temporary-file', id, name, mimeType, filePath)\n }\n\n async get(id: string) {\n const response = await this.api.get(this.api.baseUrl + '/umbraco/management/api/v1/temporary-file/' + id);\n return await response.json();\n }\n\n async delete(id: string) {\n return await this.api.delete(this.api.baseUrl + '/umbraco/management/api/v1/temporary-file/' + id);\n }\n\n async createDefaultTemporaryFile() {\n return this.createTemporaryFile('File.txt', 'File', 'text/plain');\n }\n\n async createDefaultTemporaryImageFile() {\n return this.createTemporaryFile('Umbraco.png', 'Image', 'image/png');\n }\n\n async createTemporaryFile(fileName: string, mediaTypeName: string, mimeType: string) {\n const mediaType = await this.api.mediaType.getByName(mediaTypeName);\n const crypto = require('crypto');\n const temporaryFileId = crypto.randomUUID();\n const filePath = './fixtures/mediaLibrary/' + fileName;\n await this.create(temporaryFileId, fileName, mimeType, filePath);\n\n return {mediaTypeId: mediaType.id, temporaryFileId: temporaryFileId};\n }\n}"]}
1
+ {"version":3,"file":"TemporaryFileApiHelper.js","sourceRoot":"","sources":["../../../lib/helpers/TemporaryFileApiHelper.ts"],"names":[],"mappings":";;;AAEA,MAAa,sBAAsB;IACjC,GAAG,CAAY;IAEf,YAAY,GAAe;QACzB,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;IACjB,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,EAAU;QACxB,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,GAAG,4CAA4C,GAAG,EAAE,CAAC,CAAC;QAC1G,OAAO,QAAQ,CAAC,MAAM,EAAE,KAAK,GAAG,CAAC;IACnC,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,EAAU,EAAE,IAAY,EAAE,QAAQ,EAAE,QAAQ;QACvD,OAAO,IAAI,CAAC,GAAG,CAAC,iBAAiB,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,GAAG,2CAA2C,EAAE,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAA;IACjI,CAAC;IAED,KAAK,CAAC,GAAG,CAAC,EAAU;QAClB,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,GAAG,4CAA4C,GAAG,EAAE,CAAC,CAAC;QAC1G,OAAO,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;IAC/B,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,EAAU;QACrB,OAAO,MAAM,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,GAAG,4CAA4C,GAAG,EAAE,CAAC,CAAC;IACrG,CAAC;IAED,KAAK,CAAC,0BAA0B;QAC9B,OAAO,IAAI,CAAC,mBAAmB,CAAC,UAAU,EAAE,MAAM,EAAE,YAAY,CAAC,CAAC;IACpE,CAAC;IAED,KAAK,CAAC,+BAA+B;QACnC,OAAO,IAAI,CAAC,mBAAmB,CAAC,aAAa,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC;IACvE,CAAC;IAED,KAAK,CAAC,iCAAiC;QACrC,OAAO,IAAI,CAAC,mBAAmB,CAAC,aAAa,EAAE,SAAS,EAAE,iBAAiB,CAAC,CAAC;IAC/E,CAAC;IAED,KAAK,CAAC,mBAAmB,CAAC,QAAgB,EAAE,aAAqB,EAAE,QAAgB;QACjF,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC;QACpE,MAAM,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;QACjC,MAAM,eAAe,GAAG,MAAM,CAAC,UAAU,EAAE,CAAC;QAC5C,MAAM,QAAQ,GAAG,0BAA0B,GAAG,QAAQ,CAAC;QACvD,MAAM,IAAI,CAAC,MAAM,CAAC,eAAe,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;QAEjE,OAAO,EAAC,WAAW,EAAE,SAAS,CAAC,EAAE,EAAE,eAAe,EAAE,eAAe,EAAC,CAAC;IACvE,CAAC;CACF;AA9CD,wDA8CC","sourcesContent":["import {ApiHelpers} from \"./ApiHelpers\";\n\nexport class TemporaryFileApiHelper {\n api: ApiHelpers\n\n constructor(api: ApiHelpers) {\n this.api = api;\n }\n\n async doesExist(id: string) {\n const response = await this.api.get(this.api.baseUrl + '/umbraco/management/api/v1/temporary-file/' + id);\n return response.status() === 200;\n }\n\n async create(id: string, name: string, mimeType, filePath) {\n return this.api.postMultiPartForm(this.api.baseUrl + '/umbraco/management/api/v1/temporary-file', id, name, mimeType, filePath)\n }\n\n async get(id: string) {\n const response = await this.api.get(this.api.baseUrl + '/umbraco/management/api/v1/temporary-file/' + id);\n return await response.json();\n }\n\n async delete(id: string) {\n return await this.api.delete(this.api.baseUrl + '/umbraco/management/api/v1/temporary-file/' + id);\n }\n\n async createDefaultTemporaryFile() {\n return this.createTemporaryFile('File.txt', 'File', 'text/plain');\n }\n\n async createDefaultTemporaryImageFile() {\n return this.createTemporaryFile('Umbraco.png', 'Image', 'image/png');\n }\n\n async createDefaultTemporaryArticleFile() {\n return this.createTemporaryFile('Article.pdf', 'Article', 'application/pdf');\n }\n\n async createTemporaryFile(fileName: string, mediaTypeName: string, mimeType: string) {\n const mediaType = await this.api.mediaType.getByName(mediaTypeName);\n const crypto = require('crypto');\n const temporaryFileId = crypto.randomUUID();\n const filePath = './fixtures/mediaLibrary/' + fileName;\n await this.create(temporaryFileId, fileName, mimeType, filePath);\n\n return {mediaTypeId: mediaType.id, temporaryFileId: temporaryFileId};\n }\n}"]}
@@ -90,6 +90,7 @@ export declare class UiBaseLocators {
90
90
  readonly allowedChildNodesModal: Locator;
91
91
  readonly configureAsACollectionBtn: Locator;
92
92
  readonly errorNotification: Locator;
93
+ readonly confirmRenameFolderBtn: Locator;
93
94
  readonly successNotification: Locator;
94
95
  readonly leftArrowBtn: Locator;
95
96
  readonly clickToUploadBtn: Locator;
@@ -100,6 +101,9 @@ export declare class UiBaseLocators {
100
101
  readonly mediaCardItems: Locator;
101
102
  readonly enterPropertyEditorDescriptionTxt: Locator;
102
103
  readonly breadcrumbsTemplateModal: Locator;
104
+ readonly containerChooseBtn: Locator;
105
+ readonly documentTypeNode: Locator;
106
+ readonly groupLabel: Locator;
103
107
  constructor(page: Page);
104
108
  clickActionsMenuForName(name: string): Promise<void>;
105
109
  clickCaretButtonForName(name: string): Promise<void>;
@@ -108,9 +112,11 @@ export declare class UiBaseLocators {
108
112
  clickReloadButton(): Promise<void>;
109
113
  clickSaveButton(): Promise<void>;
110
114
  clickChooseButton(): Promise<void>;
115
+ clickChooseContainerButton(): Promise<void>;
111
116
  clickFilterChooseButton(): Promise<void>;
112
117
  clickRenameFolderThreeDotsButton(): Promise<void>;
113
118
  clickRenameFolderButton(): Promise<void>;
119
+ clickConfirmRenameFolderButton(): Promise<void>;
114
120
  clickUpdateFolderButton(): Promise<void>;
115
121
  clickUpdateButton(): Promise<void>;
116
122
  clickSubmitButton(): Promise<void>;
@@ -190,6 +196,7 @@ export declare class UiBaseLocators {
190
196
  clickAddGroupButton(): Promise<void>;
191
197
  clickChooseModalButton(): Promise<void>;
192
198
  enterGroupName(groupName: string, index?: number): Promise<void>;
199
+ isGroupVisible(groupName: string, isVisible?: boolean): Promise<void>;
193
200
  doesGroupHaveValue(value: string): Promise<void>;
194
201
  rename(newName: string): Promise<void>;
195
202
  isSuccessButtonWithTextVisible(text: string): Promise<void>;
@@ -94,6 +94,7 @@ class UiBaseLocators {
94
94
  allowedChildNodesModal;
95
95
  configureAsACollectionBtn;
96
96
  errorNotification;
97
+ confirmRenameFolderBtn;
97
98
  successNotification;
98
99
  leftArrowBtn;
99
100
  clickToUploadBtn;
@@ -104,6 +105,9 @@ class UiBaseLocators {
104
105
  mediaCardItems;
105
106
  enterPropertyEditorDescriptionTxt;
106
107
  breadcrumbsTemplateModal;
108
+ containerChooseBtn;
109
+ documentTypeNode;
110
+ groupLabel;
107
111
  constructor(page) {
108
112
  this.page = page;
109
113
  this.saveBtn = page.getByLabel('Save', { exact: true });
@@ -133,6 +137,7 @@ class UiBaseLocators {
133
137
  this.queryBuilderShowCode = page.locator('umb-code-block');
134
138
  this.createThreeDotsBtn = page.getByText('Create...', { exact: true });
135
139
  this.chooseBtn = page.getByLabel('Choose', { exact: true });
140
+ this.containerChooseBtn = page.locator('#container').getByLabel('Choose');
136
141
  this.newFolderThreeDotsBtn = page.getByLabel('New Folder...');
137
142
  this.renameThreeDotsBtn = page.getByLabel('Rename...', { exact: true });
138
143
  this.newNameTxt = page.getByRole('textbox', { name: 'Enter new name...' });
@@ -141,9 +146,10 @@ class UiBaseLocators {
141
146
  this.successState = page.locator('[state="success"]');
142
147
  this.chooseModalBtn = page.locator('umb-tree-picker-modal').getByLabel('Choose');
143
148
  this.addBtn = page.getByLabel('Add', { exact: true });
144
- this.renameFolderThreeDotsBtn = page.getByLabel('Rename Folder...');
149
+ this.renameFolderThreeDotsBtn = page.getByLabel('Rename folder...');
145
150
  this.renameFolderBtn = page.getByLabel('Rename folder');
146
- this.updateFolderBtn = page.getByLabel('Update Folder');
151
+ this.confirmRenameFolderBtn = page.locator('#confirm').getByLabel('Rename folder');
152
+ this.updateFolderBtn = page.getByLabel('Update folder');
147
153
  this.filterChooseBtn = page.locator('button').filter({ hasText: 'Choose' });
148
154
  this.updateBtn = page.getByLabel('Update');
149
155
  this.changeBtn = page.getByLabel('Change');
@@ -176,7 +182,7 @@ class UiBaseLocators {
176
182
  this.enableBtn = page.getByLabel('Enable');
177
183
  this.confirmEnableBtn = page.locator('#confirm').getByLabel('Enable');
178
184
  this.iconBtn = page.getByLabel('icon');
179
- this.aliasLockBtn = page.locator('#name #alias-lock');
185
+ this.aliasLockBtn = page.locator('#name #lock');
180
186
  this.aliasNameTxt = page.locator('#name').getByLabel('alias');
181
187
  this.deleteFolderThreeDotsBtn = page.locator('#action-modal').getByLabel('Delete Folder...');
182
188
  this.createLink = page.getByRole('link', { name: 'Create' });
@@ -199,12 +205,14 @@ class UiBaseLocators {
199
205
  this.errorNotification = page.locator('uui-toast-notification >> [color="danger"]');
200
206
  this.successNotification = page.locator('uui-toast-notification >> [color="positive"]');
201
207
  this.leftArrowBtn = page.locator('[name="icon-arrow-left"] svg');
202
- this.clickToUploadBtn = page.locator('uui-file-dropzone');
208
+ this.clickToUploadBtn = page.locator('uui-file-dropzone').filter({ hasText: 'Click to upload' });
203
209
  this.backOfficeHeader = page.locator('umb-backoffice-header');
204
210
  this.failedStateButton = page.locator('uui-button[state="failed"]');
205
211
  this.mediaCardItems = page.locator('uui-card-media');
206
212
  this.enterPropertyEditorDescriptionTxt = this.sidebarModal.getByLabel('Enter a description...');
207
213
  this.breadcrumbsTemplateModal = this.sidebarModal.locator('umb-template-workspace-editor uui-breadcrumbs');
214
+ this.documentTypeNode = page.locator('uui-ref-node-document-type');
215
+ this.groupLabel = page.getByLabel('Group', { exact: true });
208
216
  }
209
217
  async clickActionsMenuForName(name) {
210
218
  await this.page.locator('[label="' + name + '"]').click();
@@ -242,6 +250,9 @@ class UiBaseLocators {
242
250
  async clickChooseButton() {
243
251
  await this.chooseBtn.click();
244
252
  }
253
+ async clickChooseContainerButton() {
254
+ await this.containerChooseBtn.click();
255
+ }
245
256
  async clickFilterChooseButton() {
246
257
  await this.filterChooseBtn.click();
247
258
  }
@@ -251,6 +262,9 @@ class UiBaseLocators {
251
262
  async clickRenameFolderButton() {
252
263
  await this.renameFolderBtn.click();
253
264
  }
265
+ async clickConfirmRenameFolderButton() {
266
+ await this.confirmRenameFolderBtn.click();
267
+ }
254
268
  async clickUpdateFolderButton() {
255
269
  await this.updateFolderBtn.click();
256
270
  }
@@ -308,7 +322,7 @@ class UiBaseLocators {
308
322
  await this.insertBtn.click();
309
323
  }
310
324
  async clickDeleteButton() {
311
- await this.deleteBtn.click();
325
+ await this.deleteBtn.click({ force: true });
312
326
  }
313
327
  async clickConfirmToDeleteButton() {
314
328
  await this.confirmToDeleteBtn.click();
@@ -374,11 +388,11 @@ class UiBaseLocators {
374
388
  await this.queryBuilderBtn.click({ force: true });
375
389
  // Wait and choose property alias
376
390
  await (0, test_1.expect)(this.wherePropertyAliasBtn).toBeVisible();
377
- await this.wherePropertyAliasBtn.click({ force: true });
391
+ await this.wherePropertyAliasBtn.click();
378
392
  await this.waitAndSelectQueryBuilderDropDownList(propertyAlias);
379
393
  // Wait and choose operator
380
394
  await (0, test_1.expect)(this.whereOperatorBtn).toBeVisible();
381
- await this.whereOperatorBtn.click({ force: true });
395
+ await this.whereOperatorBtn.click();
382
396
  await this.waitAndSelectQueryBuilderDropDownList(operator);
383
397
  // Wait and choose constrain value and press Enter
384
398
  await (0, test_1.expect)(this.whereConstrainValueTxt).toBeVisible();
@@ -524,6 +538,8 @@ class UiBaseLocators {
524
538
  await this.addTabBtn.click();
525
539
  }
526
540
  async enterTabName(tabName) {
541
+ await (0, test_1.expect)(this.unnamedTxt).toBeVisible();
542
+ await this.unnamedTxt.clear();
527
543
  await this.unnamedTxt.fill(tabName);
528
544
  }
529
545
  async searchForTypeToFilterValue(searchValue) {
@@ -532,7 +548,7 @@ class UiBaseLocators {
532
548
  }
533
549
  async addPropertyEditor(propertyEditorName, index = 0) {
534
550
  await (0, test_1.expect)(this.addPropertyBtn.nth(index)).toBeVisible();
535
- await this.addPropertyBtn.nth(index).click({ force: true });
551
+ await this.addPropertyBtn.nth(index).click();
536
552
  await this.enterAPropertyName(propertyEditorName);
537
553
  await (0, test_1.expect)(this.propertyNameTxt).toHaveValue(propertyEditorName);
538
554
  await this.clickSelectPropertyEditorButton();
@@ -558,14 +574,18 @@ class UiBaseLocators {
558
574
  await this.chooseModalBtn.click();
559
575
  }
560
576
  async enterGroupName(groupName, index = 0) {
561
- const groupNameTxt = this.page.getByLabel('Group', { exact: true }).nth(index);
577
+ await this.page.waitForTimeout(200);
578
+ const groupNameTxt = this.groupLabel.nth(index);
562
579
  await (0, test_1.expect)(groupNameTxt).toBeVisible();
563
580
  await groupNameTxt.clear();
564
581
  await groupNameTxt.fill(groupName);
565
582
  }
583
+ async isGroupVisible(groupName, isVisible = true) {
584
+ await (0, test_1.expect)(this.groupLabel.filter({ hasText: groupName })).toBeVisible({ visible: isVisible });
585
+ }
566
586
  async doesGroupHaveValue(value) {
567
- await (0, test_1.expect)(this.page.getByLabel('Group', { exact: true })).toBeVisible();
568
- return await (0, test_1.expect)(this.page.getByLabel('Group', { exact: true })).toHaveValue(value);
587
+ await (0, test_1.expect)(this.groupLabel).toBeVisible();
588
+ return await (0, test_1.expect)(this.groupLabel).toHaveValue(value);
569
589
  }
570
590
  async rename(newName) {
571
591
  await this.clickRenameButton();