V14 Acceptance Test for the Package Section (#15618)

* In progress tests

* Updated createdPackaged tests

* Added test for checking if we are able to see the marketplace

* Added tests for checking if the correct message is shown

* Made quite a lot of changes, used the locators in the testHelpers. Added additional tests

* Updated to match changes to the Ui TestHelpers

* Fixed test

* added package file

* Bumped versions

* Updated naming

* Fixed Acceptance Test to match patterns

* Updated locator in test.

* Added Act comment

* Followed comments from PR
This commit is contained in:
Andreas Zerbst
2024-01-25 10:56:25 +01:00
committed by GitHub
parent d8eef9eca5
commit a93980b64c
7 changed files with 534 additions and 40 deletions

View File

@@ -0,0 +1,20 @@
<?xml version="1.0" encoding="utf-8"?>
<umbPackage>
<info>
<package>
<name>TestPackage</name>
</package>
</info>
<DocumentTypes />
<MediaTypes />
<Templates />
<Stylesheets />
<Scripts />
<PartialViews />
<Macros />
<MacroPartialViews />
<DictionaryItems />
<Languages />
<DataTypes />
<MediaItems />
</umbPackage>

View File

@@ -7,8 +7,8 @@
"name": "acceptancetest",
"hasInstallScript": true,
"dependencies": {
"@umbraco/json-models-builders": "^1.0.6",
"@umbraco/playwright-testhelpers": "^2.0.0-beta.11",
"@umbraco/json-models-builders": "^2.0.1 ",
"@umbraco/playwright-testhelpers": "^2.0.0-beta.12",
"camelize": "^1.0.0",
"dotenv": "^16.3.1",
"faker": "^4.1.0",
@@ -87,12 +87,12 @@
}
},
"node_modules/@playwright/test": {
"version": "1.40.1",
"resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.40.1.tgz",
"integrity": "sha512-EaaawMTOeEItCRvfmkI9v6rBkF1svM8wjl/YPRrg2N2Wmp+4qJYkWtJsbew1szfKKDm6fPLy4YAanBhIlf9dWw==",
"version": "1.39.0",
"resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.39.0.tgz",
"integrity": "sha512-3u1iFqgzl7zr004bGPYiN/5EZpRUSFddQBra8Rqll5N0/vfpqlP9I9EXqAoGacuAbX6c9Ulg/Cjqglp5VkK6UQ==",
"dev": true,
"dependencies": {
"playwright": "1.40.1"
"playwright": "1.39.0"
},
"bin": {
"playwright": "cli.js"
@@ -123,29 +123,34 @@
"dev": true
},
"node_modules/@types/node": {
"version": "20.10.7",
"resolved": "https://registry.npmjs.org/@types/node/-/node-20.10.7.tgz",
"integrity": "sha512-fRbIKb8C/Y2lXxB5eVMj4IU7xpdox0Lh8bUPEdtLysaylsml1hOOx1+STloRs/B9nf7C6kPRmmg/V7aQW7usNg==",
"version": "20.9.0",
"resolved": "https://registry.npmjs.org/@types/node/-/node-20.9.0.tgz",
"integrity": "sha512-nekiGu2NDb1BcVofVcEKMIwzlx4NjHlcjhoxxKBNLtz15Y1z7MYf549DFvkHSId02Ax6kGwWntIBPC3l/JZcmw==",
"dev": true,
"dependencies": {
"undici-types": "~5.26.4"
}
},
"node_modules/@umbraco/json-models-builders": {
"version": "1.0.7",
"resolved": "https://registry.npmjs.org/@umbraco/json-models-builders/-/json-models-builders-1.0.7.tgz",
"integrity": "sha512-cN4C4W9sRoAUSa3GsjqAaLRScdbQ2FKKibI7mlo69iTZ6IQ/tPFRAK0BejJ7gw6a+jAvPVdZnVVSVOVmn8qSMg==",
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/@umbraco/json-models-builders/-/json-models-builders-2.0.1.tgz",
"integrity": "sha512-VS95Ssmb75lvMcZqr8W2oUUDVz4lFZereKTELmOL8T3vuFNs3Q5wsH5sE8WXdFkzO+b1Qqo7LP7Mk9szETxgvw==",
"dependencies": {
"camelize": "^1.0.0",
"faker": "^4.1.0"
"camelize": "^1.0.1",
"faker": "^6.6.6"
}
},
"node_modules/@umbraco/json-models-builders/node_modules/faker": {
"version": "6.6.6",
"resolved": "https://registry.npmjs.org/faker/-/faker-6.6.6.tgz",
"integrity": "sha512-9tCqYEDHI5RYFQigXFwF1hnCwcWCOJl/hmll0lr5D2Ljjb0o4wphb69wikeJDz5qCEzXCoPvG6ss5SDP6IfOdg=="
},
"node_modules/@umbraco/playwright-testhelpers": {
"version": "2.0.0-beta.11",
"resolved": "https://registry.npmjs.org/@umbraco/playwright-testhelpers/-/playwright-testhelpers-2.0.0-beta.11.tgz",
"integrity": "sha512-SwliAxtSIBJGbZGSDgPqanhC7ul/T1Z3OdFTQlll4eHOwEijhPyTjz17IlHJAnuBRtgF7oUxO6Mle2RaedgOAA==",
"version": "2.0.0-beta.12",
"resolved": "https://registry.npmjs.org/@umbraco/playwright-testhelpers/-/playwright-testhelpers-2.0.0-beta.12.tgz",
"integrity": "sha512-2lfFCVOMIfzu+cBOohEyc9dgsW5QnxmbKT4r0pXpB2U7DesASQ7Erg0RScxXnPmcjA+geIJ2bMmg7RhdlgJ/yQ==",
"dependencies": {
"@umbraco/json-models-builders": "^1.0.6",
"@umbraco/json-models-builders": "2.0.1",
"camelize": "^1.0.0",
"faker": "^4.1.0",
"form-data": "^4.0.0",
@@ -187,12 +192,12 @@
"integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q=="
},
"node_modules/axios": {
"version": "1.6.5",
"resolved": "https://registry.npmjs.org/axios/-/axios-1.6.5.tgz",
"integrity": "sha512-Ii012v05KEVuUoFWmMW/UQv9aRIc3ZwkWDcM+h5Il8izZCtRVpDUfwpoFf7eOtajT3QiGR4yDUx7lPqHJULgbg==",
"version": "1.6.2",
"resolved": "https://registry.npmjs.org/axios/-/axios-1.6.2.tgz",
"integrity": "sha512-7i24Ri4pmDRfJTR7LDBhsOTtcm+9kjX5WiY1X3wIisx6G9So3pfMkEiU7emUBe46oceVImccTEM3k6C5dbVW8A==",
"dev": true,
"dependencies": {
"follow-redirects": "^1.15.4",
"follow-redirects": "^1.15.0",
"form-data": "^4.0.0",
"proxy-from-env": "^1.1.0"
}
@@ -361,9 +366,9 @@
}
},
"node_modules/fastq": {
"version": "1.16.0",
"resolved": "https://registry.npmjs.org/fastq/-/fastq-1.16.0.tgz",
"integrity": "sha512-ifCoaXsDrsdkWTtiNJX5uzHDsrck5TzfKKDcuFFTIrrc/BS076qgEIfoIy1VeZqViznfKiysPYTh/QeHtnIsYA==",
"version": "1.15.0",
"resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz",
"integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==",
"dev": true,
"dependencies": {
"reusify": "^1.0.4"
@@ -382,9 +387,9 @@
}
},
"node_modules/follow-redirects": {
"version": "1.15.4",
"resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.4.tgz",
"integrity": "sha512-Cr4D/5wlrb0z9dgERpUL3LrmPKVDsETIJhaCMeDfuFYcqa5bldGV6wBsAN6X/vxlXQtFBMrXdXxdL8CbDTGniw==",
"version": "1.15.3",
"resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.3.tgz",
"integrity": "sha512-1VzOtuEM8pC9SFU1E+8KfTjZyMztRsgEfwQl44z8A25uy13jSzTj6dyK2Df52iV0vgHCfBwLhDWevLn95w5v6Q==",
"dev": true,
"funding": [
{
@@ -420,6 +425,20 @@
"integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==",
"dev": true
},
"node_modules/fsevents": {
"version": "2.3.2",
"resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz",
"integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==",
"dev": true,
"hasInstallScript": true,
"optional": true,
"os": [
"darwin"
],
"engines": {
"node": "^8.16.0 || ^10.6.0 || >=11.0.0"
}
},
"node_modules/glob": {
"version": "7.2.3",
"resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
@@ -479,9 +498,9 @@
"dev": true
},
"node_modules/ignore": {
"version": "5.3.0",
"resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.0.tgz",
"integrity": "sha512-g7dmpshy+gD7mh88OC9NwSGTKoc3kyLAZQRU1mt53Aw/vnvfXnbC+F/7F7QoYVKbV+KNvJx8wArewKy1vXMtlg==",
"version": "5.2.4",
"resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz",
"integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==",
"dev": true,
"engines": {
"node": ">= 4"
@@ -736,12 +755,12 @@
}
},
"node_modules/playwright": {
"version": "1.40.1",
"resolved": "https://registry.npmjs.org/playwright/-/playwright-1.40.1.tgz",
"integrity": "sha512-2eHI7IioIpQ0bS1Ovg/HszsN/XKNwEG1kbzSDDmADpclKc7CyqkHw7Mg2JCz/bbCxg25QUPcjksoMW7JcIFQmw==",
"version": "1.39.0",
"resolved": "https://registry.npmjs.org/playwright/-/playwright-1.39.0.tgz",
"integrity": "sha512-naE5QT11uC/Oiq0BwZ50gDmy8c8WLPRTEWuSSFVG2egBka/1qMoSqYQcROMT9zLwJ86oPofcTH2jBY/5wWOgIw==",
"dev": true,
"dependencies": {
"playwright-core": "1.40.1"
"playwright-core": "1.39.0"
},
"bin": {
"playwright": "cli.js"
@@ -754,9 +773,9 @@
}
},
"node_modules/playwright-core": {
"version": "1.40.1",
"resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.40.1.tgz",
"integrity": "sha512-+hkOycxPiV534c4HhpfX6yrlawqVUzITRKwHAmYfmsVreltEl6fAZJ3DPfLMOODw0H3s1Itd6MDCWmP1fl/QvQ==",
"version": "1.39.0",
"resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.39.0.tgz",
"integrity": "sha512-+k4pdZgs1qiM+OUkSjx96YiKsXsmb59evFoqv8SKO067qBA+Z2s/dCzJij/ZhdQcs2zlTAgRKfeiiLm8PQ2qvw==",
"dev": true,
"bin": {
"playwright-core": "cli.js"

View File

@@ -20,8 +20,8 @@
"wait-on": "^7.2.0"
},
"dependencies": {
"@umbraco/json-models-builders": "^1.0.6",
"@umbraco/playwright-testhelpers": "^2.0.0-beta.11",
"@umbraco/json-models-builders": "^2.0.1 ",
"@umbraco/playwright-testhelpers": "^2.0.0-beta.12",
"camelize": "^1.0.0",
"dotenv": "^16.3.1",
"faker": "^4.1.0",

View File

@@ -0,0 +1,50 @@
import {test} from '@umbraco/playwright-testhelpers';
import {expect} from '@playwright/test';
test.describe('Package tests', () => {
let packageId = '';
const packageName = 'TestName';
test.beforeEach(async ({umbracoApi}) => {
await umbracoApi.package.ensureNameNotExists(packageName);
});
test.afterEach(async ({umbracoApi}) => {
await umbracoApi.package.delete(packageId);
});
test('can create a package', async ({umbracoApi}) => {
// Act
packageId = await umbracoApi.package.create(packageName);
// Assert
expect(await umbracoApi.package.doesExist(packageId)).toBeTruthy();
});
test('can update a package', async ({umbracoApi}) => {
// Arrange
const wrongPackageName = 'WrongName';
await umbracoApi.package.ensureNameNotExists(wrongPackageName);
// Act
packageId = await umbracoApi.package.create(wrongPackageName);
const packageData = await umbracoApi.package.get(packageId);
packageData.name = packageName;
await umbracoApi.package.update(packageId, packageData);
// Assert
const updatedPackageData = await umbracoApi.package.get(packageId);
expect(updatedPackageData.name).toEqual(packageName);
});
test('can delete a package', async ({umbracoApi}) => {
// Arrange
packageId = await umbracoApi.package.create(packageName);
// Act
await umbracoApi.package.delete(packageId);
// Assert
expect(await umbracoApi.package.doesExist(packageId)).toBeFalsy();
});
});

View File

@@ -0,0 +1,373 @@
import {ConstantHelper, test} from '@umbraco/playwright-testhelpers';
import {expect} from '@playwright/test';
import * as fs from 'fs';
test.describe('Created packages tests', () => {
const packageName = 'TestPackage';
test.beforeEach(async ({umbracoApi, umbracoUi}) => {
await umbracoApi.package.ensureNameNotExists(packageName);
await umbracoUi.goToBackOffice();
await umbracoUi.package.goToSection(ConstantHelper.sections.packages);
await umbracoUi.package.clickCreatedTab();
});
test.afterEach(async ({umbracoApi}) => {
await umbracoApi.package.ensureNameNotExists(packageName);
});
test('can create a empty package', async ({umbracoUi}) => {
// Act
await umbracoUi.package.clickCreatePackageButton();
await umbracoUi.package.enterPackageName(packageName);
await umbracoUi.package.clickSaveButton();
// Assert
await umbracoUi.package.isPackageNameVisible(packageName);
});
test('can update package name', async ({umbracoApi, umbracoUi}) => {
// Arrange
const wrongPackageName = 'WrongPackageName';
await umbracoApi.package.ensureNameNotExists(wrongPackageName);
await umbracoApi.package.createEmptyPackage(wrongPackageName);
await umbracoUi.reloadPage();
// Act
await umbracoUi.package.clickExistingPackageName(wrongPackageName);
await umbracoUi.package.enterPackageName(packageName);
await umbracoUi.package.clickSaveButton();
// Assert
await umbracoUi.package.isPackageNameVisible(packageName);
expect(umbracoApi.package.doesNameExist(packageName)).toBeTruthy();
});
test('can delete a package', async ({umbracoApi, umbracoUi}) => {
// Arrange
await umbracoApi.package.createEmptyPackage(packageName);
await umbracoUi.reloadPage();
// Act
await umbracoUi.package.clickDeleteButtonForPackageName(packageName);
await umbracoUi.package.clickDeleteExactLabel();
// Assert
await umbracoUi.package.isPackageNameVisible(packageName, false);
expect(await umbracoApi.package.doesNameExist(packageName)).toBeFalsy();
});
// TODO: Update the locators for the choose button. If it is updated or not
test('can create a package with content', async ({page, umbracoApi, umbracoUi}) => {
// Arrange
const documentTypeName = 'TestDocumentType';
const documentName = 'TestDocument';
await umbracoApi.documentType.ensureNameNotExists(documentTypeName);
await umbracoApi.package.createEmptyPackage(packageName);
const documentTypeId = await umbracoApi.documentType.createDefaultDocumentTypeWithAllowAsRoot(documentTypeName);
const documentId = await umbracoApi.document.createDefaultDocument(documentName, documentTypeId);
await umbracoUi.reloadPage();
// Act
await umbracoUi.package.clickExistingPackageName(packageName);
// The frontend has updated the button name to "Choose" of "Add". But they are a bit unsure if they want to change it to select instead.
// So for the moment I have used the page instead of our UiHelper. Because it is easier to change the locator.
// await umbracoUi.package.clickAddContentToPackageButton();
await page.locator('[label="Content"] >> [label="Choose"]').click();
await umbracoUi.package.clickLabelWithName(documentName);
await umbracoUi.package.clickChooseBtn();
await umbracoUi.package.clickSaveChangesToPackageButton();
// Assert
const packageData = await umbracoApi.package.getByName(packageName);
expect(packageData.contentNodeId == documentId).toBeTruthy();
await umbracoUi.package.clickExistingPackageName(packageName);
expect(umbracoUi.package.isButtonWithNameVisible(documentName + ' ' + documentId)).toBeTruthy();
// Clean
await umbracoApi.documentType.ensureNameNotExists(documentTypeName);
});
// Currently unable to run this test. Because you are not able to save a mediaId
test.skip('can create a package with media', async ({umbracoApi, umbracoUi}) => {
// Arrange
const mediaTypeName = 'TestMediaType';
const mediaName = 'TestMedia';
await umbracoApi.mediaType.ensureNameNotExists(mediaTypeName);
await umbracoApi.package.createEmptyPackage(packageName);
const mediaTypeId = await umbracoApi.mediaType.createDefaultMediaType(mediaTypeName);
const mediaId = await umbracoApi.media.createDefaultMedia(mediaName, mediaTypeId);
await umbracoUi.reloadPage();
// Act
await umbracoUi.package.clickExistingPackageName(packageName);
await umbracoUi.package.clickAddMediaToPackageButton();
await umbracoUi.package.clickCaretButton();
await umbracoUi.package.clickLabelWithName(mediaName);
await umbracoUi.package.clickSubmitButton();
await umbracoUi.package.clickSaveChangesToPackageButton();
// Assert
await umbracoUi.package.clickExistingPackageName(packageName);
expect(umbracoUi.package.isButtonWithNameVisible(mediaTypeName + ' ' + mediaId)).toBeTruthy();
const packageData = await umbracoApi.package.getByName(packageName);
expect(packageData.mediaIds[0] == mediaId).toBeTruthy();
// Clean
await umbracoApi.mediaType.ensureNameNotExists(mediaTypeName);
});
test.skip('can create a package with document types', async ({umbracoApi, umbracoUi}) => {
// Arrange
const documentTypeName = 'TestDocumentType';
await umbracoApi.documentType.ensureNameNotExists(documentTypeName);
await umbracoApi.package.createEmptyPackage(packageName);
const documentTypeId = await umbracoApi.documentType.createDefaultDocumentTypeWithAllowAsRoot(documentTypeName);
await umbracoUi.reloadPage();
// Act
await umbracoUi.package.clickExistingPackageName(packageName);
await umbracoUi.package.clickAddDocumentTypeToPackageButton();
await umbracoUi.package.clickCaretButton();
await umbracoUi.package.clickLabelWithName(documentTypeName);
await umbracoUi.package.clickSubmitButton();
await umbracoUi.package.clickSaveChangesToPackageButton();
// Assert
await umbracoUi.package.clickExistingPackageName(packageName);
expect(umbracoUi.package.isButtonWithNameVisible(documentTypeName + ' ' + documentTypeId)).toBeTruthy();
const packageData = await umbracoApi.package.getByName(packageName);
expect(packageData.documentTypes[0] == documentTypeId).toBeTruthy();
// Clean
await umbracoApi.documentType.ensureNameNotExists(documentTypeName);
});
// TODO: Remove .skip when the test is able to run. Currently waiting for button
test.skip('can create a package with media types', async ({umbracoApi, umbracoUi}) => {
// Arrange
const mediaTypeName = 'TestMediaType';
await umbracoApi.mediaType.ensureNameNotExists(mediaTypeName);
await umbracoApi.package.createEmptyPackage(packageName);
const mediaTypeId = await umbracoApi.mediaType.createDefaultMediaType(mediaTypeName);
await umbracoUi.reloadPage();
// Act
await umbracoUi.package.clickExistingPackageName(packageName);
await umbracoUi.package.clickAddMediaTypeToPackageButton();
await umbracoUi.package.clickCaretButton();
await umbracoUi.package.clickLabelWithName(mediaTypeName);
await umbracoUi.package.clickSubmitButton()
await umbracoUi.package.clickSaveChangesToPackageButton();
// Assert
await umbracoUi.package.clickExistingPackageName(packageName);
expect(umbracoUi.package.isButtonWithNameVisible(mediaTypeName + ' ' + mediaTypeId)).toBeTruthy();
const packageData = await umbracoApi.package.getByName(packageName);
expect(packageData.mediaTypes[0] == mediaTypeId).toBeTruthy();
// Clean
await umbracoApi.mediaType.ensureNameNotExists(mediaTypeName);
});
// TODO: Remove .skip when the test is able to run. After adding a language to a package and saving. The language is not saved or anything.
test.skip('can create a package with languages', async ({umbracoApi, umbracoUi}) => {
// Arrange
const languageId = await umbracoApi.language.createDefaultDanishLanguage();
await umbracoApi.package.createEmptyPackage(packageName);
await umbracoUi.reloadPage();
const languageData = await umbracoApi.language.get(languageId);
const languageName = languageData.name;
// Act
await umbracoUi.package.clickExistingPackageName(packageName);
await umbracoUi.package.clickAddLanguageToPackageButton();
await umbracoUi.package.clickCaretButton();
await umbracoUi.package.clickLabelWithName(languageName);
await umbracoUi.package.clickSubmitButton()
await umbracoUi.package.clickSaveChangesToPackageButton();
// Assert
await umbracoUi.package.clickExistingPackageName(packageName);
expect(umbracoUi.package.isButtonWithNameVisible(languageName + ' ' + languageId)).toBeTruthy();
const packageData = await umbracoApi.package.getByName(packageName);
expect(packageData.languages[0] == languageId).toBeTruthy();
// Clean
await umbracoApi.language.ensureNameNotExists(languageName);
});
// TODO: Remove .skip when the test is able to run. Currently waiting for button
test.skip('can create a package with dictionary', async ({umbracoApi, umbracoUi}) => {
// Arrange
const dictionaryName = 'TestDictionary';
await umbracoApi.dictionary.createDefaultDictionary(dictionaryName);
await umbracoApi.package.createEmptyPackage(packageName);
await umbracoUi.reloadPage();
// Act
await umbracoUi.package.clickExistingPackageName(packageName);
await umbracoUi.package.clickAddDictionaryToPackageButton();
await umbracoUi.package.clickCaretButton();
await umbracoUi.package.clickLabelWithName(dictionaryName);
await umbracoUi.package.clickSubmitButton()
await umbracoUi.package.clickSaveChangesToPackageButton();
// Assert
await umbracoUi.package.clickExistingPackageName(packageName);
expect(umbracoUi.package.isButtonWithNameVisible(dictionaryName)).toBeTruthy();
const packageData = await umbracoApi.package.getByName(packageName);
expect(packageData.dictionaryItems[0] == dictionaryName).toBeTruthy();
// Clean
await umbracoApi.dictionary.ensureNameNotExists(dictionaryName);
});
// TODO: Remove .skip when the test is able to run. After adding a dataType to a package and saving. The datatype is not saved or anything.
test.skip('can create a package with data types', async ({umbracoApi, umbracoUi}) => {
// Arrange
const dataTypeName = 'TestDataType';
const dataTypeId = await umbracoApi.dataType.createDateTypeDataType(dataTypeName);
await umbracoApi.package.createEmptyPackage(packageName);
await umbracoUi.reloadPage();
// Act
await umbracoUi.package.clickExistingPackageName(packageName);
await umbracoUi.package.clickAddDataTypesToPackageButton();
await umbracoUi.package.clickCaretButton();
await umbracoUi.package.clickLabelWithName(dataTypeName);
await umbracoUi.package.clickSubmitButton()
await umbracoUi.package.clickSaveChangesToPackageButton();
// Assert
await umbracoUi.package.clickExistingPackageName(packageName);
expect(umbracoUi.package.isButtonWithNameVisible(dataTypeName)).toBeTruthy();
const packageData = await umbracoApi.package.getByName(packageName);
expect(packageData.dataTypes[0] == dataTypeId).toBeTruthy();
// Clean
await umbracoApi.dictionary.ensureNameNotExists(dataTypeName);
});
// TODO: Remove .skip when the test is able to run. Currently waiting for button
test.skip('can create a package with templates', async ({umbracoApi, umbracoUi}) => {
// Arrange
const templateName = 'TestTemplate';
const templateId = await umbracoApi.template.createDefaultTemplate(templateName);
await umbracoApi.package.createEmptyPackage(packageName);
await umbracoUi.reloadPage();
// Act
await umbracoUi.package.clickExistingPackageName(packageName);
await umbracoUi.package.clickAddTemplatesToPackageButton();
await umbracoUi.package.clickCaretButton();
await umbracoUi.package.clickLabelWithName(templateName);
await umbracoUi.package.clickSubmitButton()
await umbracoUi.package.clickSaveChangesToPackageButton();
// Assert
await umbracoUi.package.clickExistingPackageName(packageName);
expect(umbracoUi.package.isButtonWithNameVisible(templateName)).toBeTruthy();
const packageData = await umbracoApi.package.getByName(packageName);
expect(packageData.templates[0] == templateId).toBeTruthy();
// Clean
await umbracoApi.template.ensureNameNotExists(templateName);
});
// TODO: Remove .skip when the test is able to run. Currently waiting for button
test.skip('can create a package with stylesheets', async ({umbracoApi, umbracoUi}) => {
// Arrange
const stylesheetName = 'TestStylesheet';
const stylesheetId = await umbracoApi.stylesheet.createDefaultStylesheet(stylesheetName);
await umbracoApi.package.createEmptyPackage(packageName);
await umbracoUi.reloadPage();
// Act
await umbracoUi.package.clickExistingPackageName(packageName);
await umbracoUi.package.clickAddStylesheetToPackageButton();
await umbracoUi.package.clickCaretButton();
await umbracoUi.package.clickLabelWithName(stylesheetName);
await umbracoUi.package.clickSubmitButton()
await umbracoUi.package.clickSaveChangesToPackageButton();
// Assert
await umbracoUi.package.clickExistingPackageName(packageName);
expect(umbracoUi.package.isButtonWithNameVisible(stylesheetName)).toBeTruthy();
const packageData = await umbracoApi.package.getByName(packageName);
expect(packageData.stylesheets[0] == stylesheetId).toBeTruthy();
// Clean
await umbracoApi.stylesheet.ensureNameNotExists(stylesheetName);
});
// TODO: Remove .skip when the test is able to run. Currently waiting for button
test.skip('can create a package with scripts', async ({umbracoApi, umbracoUi}) => {
// Arrange
const scriptName = 'TestScripts';
const scriptId = await umbracoApi.script.createDefaultScript(scriptName);
await umbracoApi.package.createEmptyPackage(packageName);
await umbracoUi.reloadPage();
// Act
await umbracoUi.package.clickExistingPackageName(packageName);
await umbracoUi.package.clickAddScriptToPackageButton();
await umbracoUi.package.clickCaretButton();
await umbracoUi.package.clickLabelWithName(scriptName);
await umbracoUi.package.clickSubmitButton()
await umbracoUi.package.clickSaveChangesToPackageButton();
// Assert
await umbracoUi.package.clickExistingPackageName(packageName);
expect(umbracoUi.package.isButtonWithNameVisible(scriptName)).toBeTruthy();
const packageData = await umbracoApi.package.getByName(packageName);
expect(packageData.scripts[0] == scriptId).toBeTruthy();
// Clean
await umbracoApi.script.ensureNameNotExists(scriptName);
});
// TODO: Remove .skip when the test is able to run. Currently waiting for button
test.skip('can create a package with partial views', async ({umbracoApi, umbracoUi}) => {
// Arrange
const partialViewName = 'TestPartialView';
const partialViewId = await umbracoApi.partialView.createDefaultPartialView(partialViewName);
await umbracoApi.package.createEmptyPackage(packageName);
await umbracoUi.reloadPage();
// Act
await umbracoUi.package.clickExistingPackageName(packageName);
await umbracoUi.package.clickAddPartialViewToPackageButton();
await umbracoUi.package.clickCaretButton();
await umbracoUi.package.clickLabelWithName(partialViewName);
await umbracoUi.package.clickSubmitButton()
await umbracoUi.package.clickSaveChangesToPackageButton();
// Assert
await umbracoUi.package.clickExistingPackageName(packageName);
expect(umbracoUi.package.isButtonWithNameVisible(partialViewName)).toBeTruthy();
const packageData = await umbracoApi.package.getByName(packageName);
expect(packageData.partialViews[0] == partialViewId).toBeTruthy();
// Clean
await umbracoApi.package.ensureNameNotExists(packageName);
});
// Currently you are not able to download a package
test('can download a package', async ({umbracoApi, umbracoUi}) => {
// Arrange
const packageId = await umbracoApi.package.createEmptyPackage(packageName);
await umbracoUi.reloadPage();
// Act
await umbracoUi.package.clickExistingPackageName(packageName);
const packageData = await umbracoUi.package.downloadPackage(packageId);
// Reads the packageFixture we have in the fixture library
const path = require('path');
const filePath = path.resolve('./fixtures/packageLibrary/package.xml');
const packageFixture = fs.readFileSync(filePath);
// Assert
expect(packageData).toMatch(packageFixture.toString().trim());
});
});

View File

@@ -0,0 +1,16 @@
import {ConstantHelper, test} from '@umbraco/playwright-testhelpers';
test.describe('Installed packages tests', () => {
// We can't install any packages so we do not have any installed.
test('can see no package have been installed', async ({page, umbracoUi}) => {
// Arrange
await umbracoUi.goToBackOffice();
await umbracoUi.package.goToSection(ConstantHelper.sections.packages);
// Act
await umbracoUi.package.clickInstalledTab();
// Assert
await umbracoUi.package.isTextNoPackagesHaveBeenInstalledVisible();
});
});

View File

@@ -0,0 +1,16 @@
import {ConstantHelper, test} from '@umbraco/playwright-testhelpers';
test.describe('Packages tests', () => {
// The MarketPlace is a iFrame we are using from the DXP team, so it is not something we should test. This test is just checking if we have the IFrame
test('can see the marketplace', async ({umbracoUi}) => {
// Arrange
await umbracoUi.goToBackOffice();
await umbracoUi.package.goToSection(ConstantHelper.sections.packages);
// Act
await umbracoUi.package.clickPackagesTab();
// Assert
await umbracoUi.package.isMarketPlaceIFrameVisible();
});
});