diff --git a/tests/Umbraco.Tests.AcceptanceTest/fixtures/packageLibrary/package.xml b/tests/Umbraco.Tests.AcceptanceTest/fixtures/packageLibrary/package.xml new file mode 100644 index 0000000000..72693f113d --- /dev/null +++ b/tests/Umbraco.Tests.AcceptanceTest/fixtures/packageLibrary/package.xml @@ -0,0 +1,20 @@ + + + + + TestPackage + + + + + + + + + + + + + + + diff --git a/tests/Umbraco.Tests.AcceptanceTest/package-lock.json b/tests/Umbraco.Tests.AcceptanceTest/package-lock.json index af8b633bc5..5b94b7a72d 100644 --- a/tests/Umbraco.Tests.AcceptanceTest/package-lock.json +++ b/tests/Umbraco.Tests.AcceptanceTest/package-lock.json @@ -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" diff --git a/tests/Umbraco.Tests.AcceptanceTest/package.json b/tests/Umbraco.Tests.AcceptanceTest/package.json index a7330965b8..1764e81376 100644 --- a/tests/Umbraco.Tests.AcceptanceTest/package.json +++ b/tests/Umbraco.Tests.AcceptanceTest/package.json @@ -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", diff --git a/tests/Umbraco.Tests.AcceptanceTest/tests/ApiTesting/Package/Package.spec.ts b/tests/Umbraco.Tests.AcceptanceTest/tests/ApiTesting/Package/Package.spec.ts new file mode 100644 index 0000000000..27dc8fcbf8 --- /dev/null +++ b/tests/Umbraco.Tests.AcceptanceTest/tests/ApiTesting/Package/Package.spec.ts @@ -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(); + }); +}); diff --git a/tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Packages/CreatedPackages.spec.ts b/tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Packages/CreatedPackages.spec.ts new file mode 100644 index 0000000000..26739903c5 --- /dev/null +++ b/tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Packages/CreatedPackages.spec.ts @@ -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()); + }); +}); diff --git a/tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Packages/InstalledPackages.spec.ts b/tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Packages/InstalledPackages.spec.ts new file mode 100644 index 0000000000..8e5d455a89 --- /dev/null +++ b/tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Packages/InstalledPackages.spec.ts @@ -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(); + }); +}); diff --git a/tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Packages/PackagesPackages.spec.ts b/tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Packages/PackagesPackages.spec.ts new file mode 100644 index 0000000000..b886d5f895 --- /dev/null +++ b/tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Packages/PackagesPackages.spec.ts @@ -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(); + }); +});