V14 Added acceptance tests for DataTypes (#15679)

* Fixed failing tests

* Updated tests to use the updated helpers

* Clean up tests

* Enabled our pipeline for E2E testing

* Updated the CMS URl for our E2E tests

* Bumped version of our testHelpers

* Did some fixing, still a bit more to do

* Updated auth tests to use LoginUiHelper

* Updated Telemetry tests to use TelemetryUiHelper

* Updated LogViewer tests to use LogViewerUiHelper

* Updated api tests to apply AAA pattern and fix failed tests

* Removed unused import

* Fixed comments

* Bumped version of test helper

* Updated the version to 10 instead of 11

* Updated the package-lock.json file to contain the correct versions

* Added a waitForTimeout
The reason for this is that this test is failing on the pipeline

* V14 Added acceptance test for basic functions of Data Type, Approved Color and Label (#15551)

* Updated api tests for DataType

* Added ui tests for basic functions of DataType

* Added ui tests for Approved color

* Added ui tests for Label

* Fixed comments

* V14 Added acceptance tests for Date Picker (#15561)

* Updated api tests for DataType

* Added ui tests for basic functions of DataType

* Added ui tests for Approved color

* Added ui tests for Label

* Added ui tests for Date Picker

* Removed blank line

Co-authored-by: Andreas Zerbst <73799582+andr317c@users.noreply.github.com>

---------

Co-authored-by: Andreas Zerbst <73799582+andr317c@users.noreply.github.com>

* V14 Added acceptance test for List View (#15575)

* Updated api tests for DataType

* Added ui tests for basic functions of DataType

* Added ui tests for Approved color

* Added ui tests for Label

* Added ui tests for Date Picker

* Fix merged

* Updated DatePicker and Label tests to apply best practices

* Added ui tests for ListView

* V14 Added acceptance tests for Image Cropper, Numeric and Radiobox (#15599)

* Added ui tests for ImageCropper

* Added ui tests for Numeric

* Added ui tests for Radiobox

* Updated tests for Approved Color to change the way to arrange test data

* Change "" to '' and updated before/after methods

* V14 Added acceptance test for Textarea, Textstring, Upload (#15606)

* Added ui tests for Textarea

* Added ui tests for Textstring

* Added ui tests for Upload Article, Upload Audio, Upload File, Upload Vector Graphics, Upload Video

* Fixed failing tests due to api changes

* Changed propertyEditorAlias to editorAlias due to api changes

* Removed the step to check notification displays and changed string variables to numeric variables due to api changes

* Updated the skip tests

* Added skip tests and update method name due to test helper changes

* Splited tests out

* Bumped version

* Changed '' to '

---------

Co-authored-by: Andreas Zerbst <andr317c@live.dk>
Co-authored-by: Andreas Zerbst <73799582+andr317c@users.noreply.github.com>
This commit is contained in:
Nhu Dinh
2024-02-12 19:59:39 +07:00
committed by GitHub
parent 629f854bf7
commit d057626f29
16 changed files with 1177 additions and 83 deletions

View File

@@ -8,7 +8,7 @@
"hasInstallScript": true,
"dependencies": {
"@umbraco/json-models-builders": "^2.0.1 ",
"@umbraco/playwright-testhelpers": "^2.0.0-beta.17",
"@umbraco/playwright-testhelpers": "^2.0.0-beta.18",
"camelize": "^1.0.0",
"dotenv": "^16.3.1",
"faker": "^4.1.0",
@@ -87,12 +87,12 @@
}
},
"node_modules/@playwright/test": {
"version": "1.39.0",
"resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.39.0.tgz",
"integrity": "sha512-3u1iFqgzl7zr004bGPYiN/5EZpRUSFddQBra8Rqll5N0/vfpqlP9I9EXqAoGacuAbX6c9Ulg/Cjqglp5VkK6UQ==",
"version": "1.40.1",
"resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.40.1.tgz",
"integrity": "sha512-EaaawMTOeEItCRvfmkI9v6rBkF1svM8wjl/YPRrg2N2Wmp+4qJYkWtJsbew1szfKKDm6fPLy4YAanBhIlf9dWw==",
"dev": true,
"dependencies": {
"playwright": "1.39.0"
"playwright": "1.40.1"
},
"bin": {
"playwright": "cli.js"
@@ -123,9 +123,9 @@
"dev": true
},
"node_modules/@types/node": {
"version": "20.9.0",
"resolved": "https://registry.npmjs.org/@types/node/-/node-20.9.0.tgz",
"integrity": "sha512-nekiGu2NDb1BcVofVcEKMIwzlx4NjHlcjhoxxKBNLtz15Y1z7MYf549DFvkHSId02Ax6kGwWntIBPC3l/JZcmw==",
"version": "20.10.7",
"resolved": "https://registry.npmjs.org/@types/node/-/node-20.10.7.tgz",
"integrity": "sha512-fRbIKb8C/Y2lXxB5eVMj4IU7xpdox0Lh8bUPEdtLysaylsml1hOOx1+STloRs/B9nf7C6kPRmmg/V7aQW7usNg==",
"dev": true,
"dependencies": {
"undici-types": "~5.26.4"
@@ -146,9 +146,9 @@
"integrity": "sha512-9tCqYEDHI5RYFQigXFwF1hnCwcWCOJl/hmll0lr5D2Ljjb0o4wphb69wikeJDz5qCEzXCoPvG6ss5SDP6IfOdg=="
},
"node_modules/@umbraco/playwright-testhelpers": {
"version": "2.0.0-beta.17",
"resolved": "https://registry.npmjs.org/@umbraco/playwright-testhelpers/-/playwright-testhelpers-2.0.0-beta.17.tgz",
"integrity": "sha512-wUaF7AB+x0PHAyfAgGxvBvM+o6QKLcDM6itHjjOJLtnF0Q96JZlZ4wf4d9GcaBdpZkaYq5MBjZtXg8ZSzFFJuw==",
"version": "2.0.0-beta.18",
"resolved": "https://registry.npmjs.org/@umbraco/playwright-testhelpers/-/playwright-testhelpers-2.0.0-beta.18.tgz",
"integrity": "sha512-krL/FwgisdmIJRy1ThaC/BOqeebJj9sCtDDbcy2h0B8Tmz4NhYdjdEMh3X+IvJDnfHX+rS2DiYa97cHyvVMhHA==",
"dependencies": {
"@umbraco/json-models-builders": "2.0.1",
"camelize": "^1.0.0",
@@ -192,12 +192,12 @@
"integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q=="
},
"node_modules/axios": {
"version": "1.6.2",
"resolved": "https://registry.npmjs.org/axios/-/axios-1.6.2.tgz",
"integrity": "sha512-7i24Ri4pmDRfJTR7LDBhsOTtcm+9kjX5WiY1X3wIisx6G9So3pfMkEiU7emUBe46oceVImccTEM3k6C5dbVW8A==",
"version": "1.6.5",
"resolved": "https://registry.npmjs.org/axios/-/axios-1.6.5.tgz",
"integrity": "sha512-Ii012v05KEVuUoFWmMW/UQv9aRIc3ZwkWDcM+h5Il8izZCtRVpDUfwpoFf7eOtajT3QiGR4yDUx7lPqHJULgbg==",
"dev": true,
"dependencies": {
"follow-redirects": "^1.15.0",
"follow-redirects": "^1.15.4",
"form-data": "^4.0.0",
"proxy-from-env": "^1.1.0"
}
@@ -366,9 +366,9 @@
}
},
"node_modules/fastq": {
"version": "1.15.0",
"resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz",
"integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==",
"version": "1.16.0",
"resolved": "https://registry.npmjs.org/fastq/-/fastq-1.16.0.tgz",
"integrity": "sha512-ifCoaXsDrsdkWTtiNJX5uzHDsrck5TzfKKDcuFFTIrrc/BS076qgEIfoIy1VeZqViznfKiysPYTh/QeHtnIsYA==",
"dev": true,
"dependencies": {
"reusify": "^1.0.4"
@@ -387,9 +387,9 @@
}
},
"node_modules/follow-redirects": {
"version": "1.15.3",
"resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.3.tgz",
"integrity": "sha512-1VzOtuEM8pC9SFU1E+8KfTjZyMztRsgEfwQl44z8A25uy13jSzTj6dyK2Df52iV0vgHCfBwLhDWevLn95w5v6Q==",
"version": "1.15.4",
"resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.4.tgz",
"integrity": "sha512-Cr4D/5wlrb0z9dgERpUL3LrmPKVDsETIJhaCMeDfuFYcqa5bldGV6wBsAN6X/vxlXQtFBMrXdXxdL8CbDTGniw==",
"dev": true,
"funding": [
{
@@ -425,20 +425,6 @@
"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",
@@ -498,9 +484,9 @@
"dev": true
},
"node_modules/ignore": {
"version": "5.2.4",
"resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz",
"integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==",
"version": "5.3.0",
"resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.0.tgz",
"integrity": "sha512-g7dmpshy+gD7mh88OC9NwSGTKoc3kyLAZQRU1mt53Aw/vnvfXnbC+F/7F7QoYVKbV+KNvJx8wArewKy1vXMtlg==",
"dev": true,
"engines": {
"node": ">= 4"
@@ -755,12 +741,12 @@
}
},
"node_modules/playwright": {
"version": "1.39.0",
"resolved": "https://registry.npmjs.org/playwright/-/playwright-1.39.0.tgz",
"integrity": "sha512-naE5QT11uC/Oiq0BwZ50gDmy8c8WLPRTEWuSSFVG2egBka/1qMoSqYQcROMT9zLwJ86oPofcTH2jBY/5wWOgIw==",
"version": "1.40.1",
"resolved": "https://registry.npmjs.org/playwright/-/playwright-1.40.1.tgz",
"integrity": "sha512-2eHI7IioIpQ0bS1Ovg/HszsN/XKNwEG1kbzSDDmADpclKc7CyqkHw7Mg2JCz/bbCxg25QUPcjksoMW7JcIFQmw==",
"dev": true,
"dependencies": {
"playwright-core": "1.39.0"
"playwright-core": "1.40.1"
},
"bin": {
"playwright": "cli.js"
@@ -773,9 +759,9 @@
}
},
"node_modules/playwright-core": {
"version": "1.39.0",
"resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.39.0.tgz",
"integrity": "sha512-+k4pdZgs1qiM+OUkSjx96YiKsXsmb59evFoqv8SKO067qBA+Z2s/dCzJij/ZhdQcs2zlTAgRKfeiiLm8PQ2qvw==",
"version": "1.40.1",
"resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.40.1.tgz",
"integrity": "sha512-+hkOycxPiV534c4HhpfX6yrlawqVUzITRKwHAmYfmsVreltEl6fAZJ3DPfLMOODw0H3s1Itd6MDCWmP1fl/QvQ==",
"dev": true,
"bin": {
"playwright-core": "cli.js"

View File

@@ -21,7 +21,7 @@
},
"dependencies": {
"@umbraco/json-models-builders": "^2.0.1 ",
"@umbraco/playwright-testhelpers": "^2.0.0-beta.17",
"@umbraco/playwright-testhelpers": "^2.0.0-beta.18",
"camelize": "^1.0.0",
"dotenv": "^16.3.1",
"faker": "^4.1.0",

View File

@@ -2,11 +2,13 @@
import {expect} from "@playwright/test";
test.describe('DataType tests', () => {
let dataTypeId = "";
let dataTypeFolderId = "";
let dataTypeId = '';
let dataTypeFolderId = '';
let copiedDataTypeId = '';
const dataTypeName = "TestType";
const propertyEditorAlias = "Umbraco.DateTime";
const dataTypeName = 'TestDataType';
const folderName = 'TestDataTypeFolder';
const editorAlias = 'Umbraco.DateTime';
const dataTypeData = [
{
"alias": "tester",
@@ -15,24 +17,27 @@ test.describe('DataType tests', () => {
];
test.beforeEach(async ({umbracoApi}) => {
await umbracoApi.dataType.ensureNameNotExistsAtRoot(dataTypeName);
await umbracoApi.dataType.ensureNameNotExists(dataTypeName);
});
test.afterEach(async ({umbracoApi}) => {
await umbracoApi.dataType.delete(dataTypeId);
await umbracoApi.dataType.ensureNameNotExists(dataTypeName);
if (dataTypeFolderId != '') {
await umbracoApi.dataType.ensureNameNotExists(folderName);
}
});
test('can create dataType', async ({umbracoApi}) => {
// Act
dataTypeId = await umbracoApi.dataType.create(dataTypeName, propertyEditorAlias, dataTypeData);
dataTypeId = await umbracoApi.dataType.create(dataTypeName, editorAlias, dataTypeData);
// Assert
expect(umbracoApi.dataType.exists(dataTypeId)).toBeTruthy();
expect(umbracoApi.dataType.doesExist(dataTypeId)).toBeTruthy();
});
test('can update dataType', async ({umbracoApi}) => {
// Arrange
dataTypeId = await umbracoApi.dataType.create(dataTypeName, propertyEditorAlias, []);
dataTypeId = await umbracoApi.dataType.create(dataTypeName, editorAlias, []);
const dataType = await umbracoApi.dataType.get(dataTypeId);
dataType.values = dataTypeData;
@@ -47,22 +52,23 @@ test.describe('DataType tests', () => {
test('can delete dataType', async ({umbracoApi}) => {
// Arrange
dataTypeId = await umbracoApi.dataType.create(dataTypeName, propertyEditorAlias, dataTypeData);
expect(await umbracoApi.dataType.exists(dataTypeId)).toBeTruthy();
dataTypeId = await umbracoApi.dataType.create(dataTypeName, editorAlias, dataTypeData);
expect(await umbracoApi.dataType.doesExist(dataTypeId)).toBeTruthy();
// Act
await umbracoApi.dataType.delete(dataTypeId);
// Assert
expect(await umbracoApi.dataType.exists(dataTypeId)).toBeFalsy();
expect(await umbracoApi.dataType.doesExist(dataTypeId)).toBeFalsy();
});
test('can move a dataType to a folder', async ({umbracoApi}) => {
// Arrange
const folderName = 'FolderToMoveToo';
await umbracoApi.dataType.ensureNameNotExistsAtRoot(folderName);
dataTypeId = await umbracoApi.dataType.create(dataTypeName, propertyEditorAlias, dataTypeData);
await umbracoApi.dataType.ensureNameNotExists(folderName);
dataTypeId = await umbracoApi.dataType.create(dataTypeName, editorAlias, dataTypeData);
expect(await umbracoApi.dataType.doesNameExist(dataTypeName)).toBeTruthy();
dataTypeFolderId = await umbracoApi.dataType.createFolder(folderName);
expect(await umbracoApi.dataType.doesFolderExist(dataTypeFolderId)).toBeTruthy();
// Act
await umbracoApi.dataType.moveToFolder(dataTypeId, dataTypeFolderId);
@@ -70,19 +76,13 @@ test.describe('DataType tests', () => {
// Assert
// Checks if the datatype has the parentId of the folder
const dataTypeInFolder = await umbracoApi.dataType.getChildren(dataTypeFolderId);
expect(dataTypeInFolder.items[0].parentId).toEqual(dataTypeFolderId);
// Clean
await umbracoApi.dataType.deleteFolder(dataTypeFolderId);
expect(dataTypeInFolder[0].parent.id).toEqual(dataTypeFolderId);
});
test('can copy a dataType to a folder', async ({umbracoApi}) => {
// Arrange
let copiedDataTypeId = "";
const folderName = 'FolderToCopyToo';
await umbracoApi.dataType.ensureNameNotExistsAtRoot(folderName);
dataTypeId = await umbracoApi.dataType.create(dataTypeName, propertyEditorAlias, dataTypeData);
await umbracoApi.dataType.ensureNameNotExists(folderName);
dataTypeId = await umbracoApi.dataType.create(dataTypeName, editorAlias, dataTypeData);
dataTypeFolderId = await umbracoApi.dataType.createFolder(folderName);
const dataType = await umbracoApi.dataType.get(dataTypeId);
@@ -95,10 +95,7 @@ test.describe('DataType tests', () => {
const copiedDataType = await umbracoApi.dataType.get(copiedDataTypeId);
expect(copiedDataType.name).toEqual(dataTypeName + ' (copy)');
// Checks if both dataTypes exists
expect(await umbracoApi.dataType.exists(dataTypeId)).toBeTruthy();
expect(await umbracoApi.dataType.exists(copiedDataTypeId)).toBeTruthy();
// Clean
await umbracoApi.dataType.deleteFolder(dataTypeFolderId);
expect(await umbracoApi.dataType.doesExist(dataTypeId)).toBeTruthy();
expect(await umbracoApi.dataType.doesExist(copiedDataTypeId)).toBeTruthy();
});
});

View File

@@ -2,15 +2,15 @@
import {expect} from "@playwright/test";
test.describe('DataTypeFolder tests', () => {
let dataTypeFolderId = "";
const dataTypeFolderName = "TestTypeFolder";
let dataTypeFolderId = '';
const dataTypeFolderName = 'TestDataTypeFolder';
test.beforeEach(async ({umbracoApi}) => {
await umbracoApi.dataType.ensureNameNotExistsAtRoot(dataTypeFolderName);
await umbracoApi.dataType.ensureNameNotExists(dataTypeFolderName);
});
test.afterEach(async ({umbracoApi}) => {
await umbracoApi.dataType.deleteFolder(dataTypeFolderId);
await umbracoApi.dataType.ensureNameNotExists(dataTypeFolderName);
});
test('can create a dataType folder', async ({umbracoApi}) => {
@@ -18,7 +18,7 @@ test.describe('DataTypeFolder tests', () => {
dataTypeFolderId = await umbracoApi.dataType.createFolder(dataTypeFolderName);
// Assert
expect(umbracoApi.dataType.folderExists(dataTypeFolderId)).toBeTruthy();
expect(umbracoApi.dataType.doesFolderExist(dataTypeFolderId)).toBeTruthy();
});
test('can update a dataType folder', async ({umbracoApi}) => {
@@ -33,7 +33,7 @@ test.describe('DataTypeFolder tests', () => {
await umbracoApi.dataType.updateFolder(dataTypeFolderId, dataTypeFolder);
// Assert
expect(umbracoApi.dataType.folderExists(dataTypeFolderId)).toBeTruthy();
expect(umbracoApi.dataType.doesFolderExist(dataTypeFolderId)).toBeTruthy();
// Checks if the dataType folder was updated
const newDataTypeFolderName = await umbracoApi.dataType.getFolder(dataTypeFolderId);
expect(newDataTypeFolderName.name).toEqual(dataTypeFolderName);
@@ -42,12 +42,12 @@ test.describe('DataTypeFolder tests', () => {
test('can delete a dataType folder', async ({umbracoApi}) => {
// Arrange
await umbracoApi.dataType.createFolder(dataTypeFolderName);
expect(umbracoApi.dataType.folderExists(dataTypeFolderId)).toBeTruthy();
expect(umbracoApi.dataType.doesFolderExist(dataTypeFolderId)).toBeTruthy();
// Act
await umbracoApi.dataType.delete(dataTypeFolderId);
// Assert
expect(await umbracoApi.dataType.folderExists(dataTypeFolderId)).toBeFalsy();
expect(await umbracoApi.dataType.doesFolderExist(dataTypeFolderId)).toBeFalsy();
});
});

View File

@@ -0,0 +1,102 @@
import {test} from '@umbraco/playwright-testhelpers';
import {expect} from "@playwright/test";
const dataTypeName = 'Approved Color';
test.describe(`${dataTypeName} tests`, () => {
let dataTypeDefaultData = null;
let dataTypeData = null;
const colorValue = '#ffffff';
const colorLabel = 'TestColor';
test.beforeEach(async ({umbracoUi, umbracoApi}) => {
await umbracoUi.goToBackOffice();
await umbracoUi.dataType.goToSettingsTreeItem('Data Types');
dataTypeDefaultData = await umbracoApi.dataType.getByName(dataTypeName);
});
test.afterEach(async ({umbracoApi}) => {
if (dataTypeDefaultData !== null) {
await umbracoApi.dataType.update(dataTypeDefaultData.id, dataTypeDefaultData);
}
});
test('can include label', async ({umbracoApi, umbracoUi}) => {
// Arrange
const expectedDataTypeValues = [
{
"alias": "useLabel",
"value": true
}
];
// Remove all existing values
dataTypeData = await umbracoApi.dataType.getByName(dataTypeName);
dataTypeData.values = [];
await umbracoApi.dataType.update(dataTypeData.id, dataTypeData);
await umbracoUi.dataType.goToDataType(dataTypeName);
// Act
await umbracoUi.dataType.clickIncludeLabelsSlider();
await umbracoUi.dataType.clickSaveButton();
// Assert
dataTypeData = await umbracoApi.dataType.getByName(dataTypeName);
expect(dataTypeData.values).toEqual(expectedDataTypeValues);
});
test('can add color', async ({umbracoApi, umbracoUi}) => {
// Arrange
const expectedDataTypeValues = [
{
"alias": "items",
"value": [
{
"value": colorValue,
"label": colorLabel
}
]
}
];
// Remove all existing values
dataTypeData = await umbracoApi.dataType.getByName(dataTypeName);
dataTypeData.values = [];
await umbracoApi.dataType.update(dataTypeData.id, dataTypeData);
await umbracoUi.dataType.goToDataType(dataTypeName);
// Act
await umbracoUi.dataType.addColor(colorValue, colorLabel);
await umbracoUi.dataType.clickSaveButton();
// Assert
dataTypeData = await umbracoApi.dataType.getByName(dataTypeName);
expect(dataTypeData.values).toEqual(expectedDataTypeValues);
});
// TODO: remove .skip when the frontend is able to display the added color. Currently the added colors are not displayed after reloading page
test.skip('can remove color', async ({umbracoApi, umbracoUi}) => {
// Arrange
const removedDataTypeValues = [
{
"alias": "items",
"value": [
{
"value": colorValue,
"label": colorLabel
}
]
}
];
// Remove all existing values and add a color to remove
dataTypeData = await umbracoApi.dataType.getByName(dataTypeName);
dataTypeData.values = removedDataTypeValues;
await umbracoApi.dataType.update(dataTypeData.id, dataTypeData);
await umbracoUi.dataType.goToDataType(dataTypeName);
// Act
await umbracoUi.dataType.removeColorByValue(colorValue);
await umbracoUi.dataType.clickSaveButton();
// Assert
dataTypeData = await umbracoApi.dataType.getByName(dataTypeName);
expect(dataTypeData.values).toEqual([]);
});
});

View File

@@ -0,0 +1,83 @@
import {test} from '@umbraco/playwright-testhelpers';
import {expect} from "@playwright/test";
test.describe('Data Types basic functionalities tests', () => {
const dataTypeName = 'TestDataType';
const editorAlias = 'Umbraco.DateTime';
test.beforeEach(async ({umbracoApi, umbracoUi}) => {
await umbracoApi.dataType.ensureNameNotExists(dataTypeName);
await umbracoUi.goToBackOffice();
await umbracoUi.dataType.goToSettingsTreeItem('Data Types');
});
test.afterEach(async ({umbracoApi}) => {
await umbracoApi.dataType.ensureNameNotExists(dataTypeName);
});
test('can create a data type', async ({umbracoApi, umbracoUi}) => {
// Act
await umbracoUi.dataType.clickActionsMenuAtRoot();
await umbracoUi.dataType.clickCreateThreeDotsButton();
await umbracoUi.dataType.clickNewDataTypeThreeDotsButton();
await umbracoUi.dataType.enterDataTypeName(dataTypeName);
await umbracoUi.dataType.clickSaveButton();
// Assert
await umbracoUi.dataType.isSuccessNotificationVisible();
expect(await umbracoApi.dataType.doesNameExist(dataTypeName)).toBeTruthy();
});
test('can update a data type name', async ({umbracoApi, umbracoUi}) => {
// Arrange
const wrongDataTypeName = 'Wrong Data Type';
await umbracoApi.dataType.ensureNameNotExists(wrongDataTypeName);
await umbracoApi.dataType.create(wrongDataTypeName, editorAlias, []);
expect(await umbracoApi.dataType.doesNameExist(wrongDataTypeName)).toBeTruthy();
// Act
await umbracoUi.dataType.goToDataType(wrongDataTypeName);
await umbracoUi.dataType.enterDataTypeName(dataTypeName);
await umbracoUi.dataType.clickSaveButton();
// Assert
expect(await umbracoApi.dataType.doesNameExist(dataTypeName)).toBeTruthy();
expect(await umbracoApi.dataType.doesNameExist(wrongDataTypeName)).toBeFalsy();
});
test('can delete a data type', async ({umbracoApi, umbracoUi}) => {
// Arrange
await umbracoApi.dataType.create(dataTypeName, editorAlias, []);
expect(await umbracoApi.dataType.doesNameExist(dataTypeName)).toBeTruthy();
// Act
await umbracoUi.dataType.clickRootFolderCaretButton();
await umbracoUi.dataType.deleteDataType(dataTypeName);
// Assert
await umbracoUi.dataType.isSuccessNotificationVisible();
expect(await umbracoApi.dataType.doesNameExist(dataTypeName)).toBeFalsy();
});
test('can change Property Editor in a data type', async ({umbracoApi, umbracoUi}) => {
// Arrange
const updatedEditorName = 'Text Area';
const updatedEditorAlias = 'Umbraco.TextArea';
const updatedEditorUiAlias = 'Umb.PropertyEditorUi.TextArea';
await umbracoApi.dataType.create(dataTypeName, editorAlias, []);
expect(await umbracoApi.dataType.doesNameExist(dataTypeName)).toBeTruthy();
// Act
await umbracoUi.dataType.goToDataType(dataTypeName);
await umbracoUi.dataType.clickChangeButton();
await umbracoUi.dataType.selectPropertyEditorUIByName(updatedEditorName);
await umbracoUi.dataType.clickSaveButton();
// Assert
expect(await umbracoApi.dataType.doesNameExist(dataTypeName)).toBeTruthy();
const dataTypeData = await umbracoApi.dataType.getByName(dataTypeName);
expect(dataTypeData.editorAlias).toBe(updatedEditorAlias);
expect(dataTypeData.editorUiAlias).toBe(updatedEditorUiAlias);
});
});

View File

@@ -0,0 +1,131 @@
import {test} from '@umbraco/playwright-testhelpers';
import {expect} from "@playwright/test";
test.describe('Data Types Folder tests', () => {
const dataTypeName = 'TestDataType';
const dataTypeFolderName = 'TestDataTypeFolder';
const editorAlias = 'Umbraco.DateTime';
test.beforeEach(async ({umbracoApi, umbracoUi}) => {
await umbracoApi.dataType.ensureNameNotExists(dataTypeFolderName);
await umbracoUi.goToBackOffice();
await umbracoUi.dataType.goToSettingsTreeItem('Data Types');
});
test.afterEach(async ({umbracoApi}) => {
await umbracoApi.dataType.ensureNameNotExists(dataTypeFolderName);
});
test('can create a data type folder', async ({umbracoApi, umbracoUi}) => {
// Act
await umbracoUi.dataType.clickActionsMenuAtRoot();
await umbracoUi.dataType.clickCreateThreeDotsButton();
await umbracoUi.dataType.clickNewDataTypeFolderButton();
await umbracoUi.dataType.enterFolderName(dataTypeFolderName);
await umbracoUi.dataType.clickCreateFolderButton();
// Assert
expect(await umbracoApi.dataType.doesNameExist(dataTypeFolderName)).toBeTruthy();
});
test('can rename a data type folder', async ({umbracoApi, umbracoUi}) => {
// Arrange
const wrongDataTypeFolderName = 'Wrong Folder';
await umbracoApi.dataType.ensureNameNotExists(wrongDataTypeFolderName);
await umbracoApi.dataType.createFolder(wrongDataTypeFolderName);
expect(await umbracoApi.dataType.doesNameExist(wrongDataTypeFolderName)).toBeTruthy();
// Act
await umbracoUi.dataType.clickRootFolderCaretButton();
await umbracoUi.dataType.clickActionsMenuForDataType(wrongDataTypeFolderName);
await umbracoUi.dataType.clickRenameFolderThreeDotsButton();
await umbracoUi.dataType.enterFolderName(dataTypeFolderName);
await umbracoUi.dataType.clickUpdateFolderButton();
// Assert
expect(await umbracoApi.dataType.doesNameExist(dataTypeFolderName)).toBeTruthy();
expect(await umbracoApi.dataType.doesNameExist(wrongDataTypeFolderName)).toBeFalsy();
});
test('can delete a data type folder', async ({umbracoApi, umbracoUi}) => {
// Arrange
await umbracoApi.dataType.createFolder(dataTypeFolderName);
expect(await umbracoApi.dataType.doesNameExist(dataTypeFolderName)).toBeTruthy();
// Act
await umbracoUi.dataType.clickRootFolderCaretButton();
await umbracoUi.dataType.deleteDataTypeFolder(dataTypeFolderName);
// Assert
expect(await umbracoApi.dataType.doesNameExist(dataTypeFolderName)).toBeFalsy();
});
test('can create a data type in a folder', async ({umbracoApi, umbracoUi}) => {
// Arrange
let dataTypeFolderId = await umbracoApi.dataType.createFolder(dataTypeFolderName);
expect(await umbracoApi.dataType.doesNameExist(dataTypeFolderName)).toBeTruthy();
// Act
await umbracoUi.dataType.clickRootFolderCaretButton();
await umbracoUi.dataType.clickActionsMenuForDataType(dataTypeFolderName);
await umbracoUi.dataType.clickCreateThreeDotsButton();
await umbracoUi.dataType.clickNewDataTypeThreeDotsButton();
await umbracoUi.dataType.enterDataTypeName(dataTypeName);
await umbracoUi.dataType.clickSaveButton();
// Assert
expect(await umbracoApi.dataType.doesNameExist(dataTypeName)).toBeTruthy();
const dataTypeChildren = await umbracoApi.dataType.getChildren(dataTypeFolderId);
expect(dataTypeChildren[0].name).toBe(dataTypeName);
expect(dataTypeChildren[0].isFolder).toBeFalsy();
});
test('can create a folder in a folder', async ({umbracoApi, umbracoUi}) => {
// Arrange
const childFolderName = 'Child Folder';
let dataTypeFolderId = await umbracoApi.dataType.createFolder(dataTypeFolderName);
expect(await umbracoApi.dataType.doesNameExist(dataTypeFolderName)).toBeTruthy();
// Act
await umbracoUi.dataType.clickRootFolderCaretButton();
await umbracoUi.dataType.clickActionsMenuForDataType(dataTypeFolderName);
await umbracoUi.dataType.clickCreateThreeDotsButton();
await umbracoUi.dataType.clickNewDataTypeFolderButton();
await umbracoUi.dataType.enterFolderName(childFolderName);
await umbracoUi.dataType.clickCreateFolderButton();
// Assert
expect(await umbracoApi.dataType.doesNameExist(childFolderName)).toBeTruthy();
const dataTypeChildren = await umbracoApi.dataType.getChildren(dataTypeFolderId);
expect(dataTypeChildren[0].name).toBe(childFolderName);
expect(dataTypeChildren[0].isFolder).toBeTruthy();
});
test('cannot delete a non-empty data type folder', async ({umbracoApi, umbracoUi}) => {
// Arrange
let dataTypeFolderId = await umbracoApi.dataType.createFolder(dataTypeFolderName);
expect(await umbracoApi.dataType.doesNameExist(dataTypeFolderName)).toBeTruthy();
await umbracoApi.dataType.create(dataTypeName, editorAlias, [], dataTypeFolderId);
expect(await umbracoApi.dataType.doesNameExist(dataTypeName)).toBeTruthy();
// Act
await umbracoUi.dataType.clickRootFolderCaretButton();
await umbracoUi.dataType.deleteDataTypeFolder(dataTypeFolderName);
// Assert
await umbracoUi.dataType.isErrorNotificationVisible();
expect(await umbracoApi.dataType.doesNameExist(dataTypeName)).toBeTruthy();
expect(await umbracoApi.dataType.doesNameExist(dataTypeFolderName)).toBeTruthy();
const dataTypeChildren = await umbracoApi.dataType.getChildren(dataTypeFolderId);
expect(dataTypeChildren[0].name).toBe(dataTypeName);
expect(dataTypeChildren[0].isFolder).toBeFalsy();
});
test.skip('can move a data type to a data type folder', async ({}) => {
// TODO: implement this test later when the front-end is ready
});
test.skip('can copy a data type to a data type folder', async ({}) => {
// TODO: implement this test later when the front-end is ready
});
});

View File

@@ -0,0 +1,73 @@
import { test } from "@umbraco/playwright-testhelpers";
import { expect } from "@playwright/test";
const datePickerTypes = ['Date Picker', 'Date Picker with time'];
for (const datePickerType of datePickerTypes) {
test.describe(`${datePickerType} tests`, () => {
let dataTypeDefaultData = null;
let dataTypeData = null;
test.beforeEach(async ({ umbracoUi, umbracoApi }) => {
await umbracoUi.goToBackOffice();
await umbracoUi.dataType.goToSettingsTreeItem('Data Types');
dataTypeDefaultData = await umbracoApi.dataType.getByName(datePickerType);
await umbracoUi.dataType.goToDataType(datePickerType);
});
test.afterEach(async ({ umbracoApi }) => {
if (dataTypeDefaultData !== null) {
await umbracoApi.dataType.update(dataTypeDefaultData.id,dataTypeDefaultData);
}
});
test(`can update offset time`, async ({ umbracoApi, umbracoUi }) => {
// Arrange
const expectedDataTypeValues =
datePickerType === 'Date Picker'
? [
{
alias: "format",
value: "YYYY-MM-DD",
},
{
alias: "offsetTime",
value: true,
},
]
: [
{
alias: "offsetTime",
value: true,
},
];
// Act
await umbracoUi.dataType.clickOffsetTimeSlider();
await umbracoUi.dataType.clickSaveButton();
// Assert
dataTypeData = await umbracoApi.dataType.getByName(datePickerType);
expect(dataTypeData.values).toEqual(expectedDataTypeValues);
});
test(`can update date format`, async ({ umbracoApi, umbracoUi }) => {
// Arrange
const dateFormatValue =
datePickerType === 'Date Picker' ? 'DD-MM-YYYY' : 'DD-MM-YYYY hh:mm:ss';
const expectedDataTypeValues = [
{
alias: "format",
value: dateFormatValue,
},
];
// Act
await umbracoUi.dataType.enterDateFormatValue(dateFormatValue);
await umbracoUi.dataType.clickSaveButton();
// Assert
dataTypeData = await umbracoApi.dataType.getByName(datePickerType);
expect(dataTypeData.values).toEqual(expectedDataTypeValues);
});
});
}

View File

@@ -0,0 +1,125 @@
import {test} from '@umbraco/playwright-testhelpers';
import {expect} from "@playwright/test";
const dataTypeName = 'Image Cropper';
test.describe(`${dataTypeName} tests`, () => {
let dataTypeDefaultData = null;
let dataTypeData = null;
test.beforeEach(async ({umbracoUi, umbracoApi}) => {
await umbracoUi.goToBackOffice();
await umbracoUi.dataType.goToSettingsTreeItem('Data Types');
dataTypeDefaultData = await umbracoApi.dataType.getByName(dataTypeName);
});
test.afterEach(async ({umbracoApi}) => {
if (dataTypeDefaultData !== null) {
await umbracoApi.dataType.update(dataTypeDefaultData.id, dataTypeDefaultData);
}
});
test('can add crop', async ({umbracoApi, umbracoUi}) => {
// Arrange
const cropData = ['Test Alias', 100, 50];
const expectedDataTypeValues = [{
"alias": "crops",
"value": [
{
"alias": cropData[0],
"width": cropData[1],
"height": cropData[2]
}
]
}];
// Remove all existing crops
dataTypeData = await umbracoApi.dataType.getByName(dataTypeName);
dataTypeData.values = [];
await umbracoApi.dataType.update(dataTypeData.id, dataTypeData);
await umbracoUi.dataType.goToDataType(dataTypeName);
// Act
await umbracoUi.dataType.enterCropValues(
cropData[0].toString(),
cropData[1].toString(),
cropData[2].toString()
);
await umbracoUi.dataType.clickAddCropButton();
await umbracoUi.dataType.clickSaveButton();
// Assert
//await umbracoUi.dataType.isSuccessNotificationVisible();
dataTypeData = await umbracoApi.dataType.getByName(dataTypeName);
expect(dataTypeData.values).toEqual(expectedDataTypeValues);
});
test('can edit crop', async ({umbracoApi, umbracoUi}) => {
// Arrange
const wrongCropData = ['Wrong Alias', 50, 100];
const wrongDataTypeValues = [{
"alias": "crops",
"value": [
{
"alias": wrongCropData[0],
"width": wrongCropData[1],
"height": wrongCropData[2]
}
]
}];
const updatedCropData = ['Updated Test Alias', 100, 50];
const expectedDataTypeValues = [{
"alias": "crops",
"value": [
{
"alias": updatedCropData[0],
"width": updatedCropData[1],
"height": updatedCropData[2]
}
]
}];
// Remove all existing crops and add a crop to edit
dataTypeData = await umbracoApi.dataType.getByName(dataTypeName);
dataTypeData.values = wrongDataTypeValues;
await umbracoApi.dataType.update(dataTypeData.id, dataTypeData);
await umbracoUi.dataType.goToDataType(dataTypeName);
// Act
await umbracoUi.dataType.editCropByAlias(wrongCropData[0].toString());
await umbracoUi.dataType.enterCropValues(updatedCropData[0].toString(), updatedCropData[1].toString(), updatedCropData[2].toString());
await umbracoUi.dataType.clickSaveCropButton();
await umbracoUi.dataType.clickSaveButton();
// Assert
//await umbracoUi.dataType.isSuccessNotificationVisible();
dataTypeData = await umbracoApi.dataType.getByName(dataTypeName);
expect(dataTypeData.values).toEqual(expectedDataTypeValues);
});
test('can delete crop', async ({umbracoApi, umbracoUi}) => {
// Arrange
const wrongCropData = ['Wrong Alias', 50, 100];
const wrongDataTypeValues = [{
"alias": "crops",
"value": [
{
"alias": wrongCropData[0],
"width": wrongCropData[1],
"height": wrongCropData[2]
}
]
}];
// Remove all existing crops and add a crop to remove
dataTypeData = await umbracoApi.dataType.getByName(dataTypeName);
dataTypeData.values = wrongDataTypeValues;
await umbracoApi.dataType.update(dataTypeData.id, dataTypeData);
await umbracoUi.dataType.goToDataType(dataTypeName);
// Act
await umbracoUi.dataType.removeCropByAlias(wrongCropData[0].toString());
await umbracoUi.dataType.clickSaveButton();
// Assert
//await umbracoUi.dataType.isSuccessNotificationVisible();
dataTypeData = await umbracoApi.dataType.getByName(dataTypeName);
expect(dataTypeData.values).toEqual([]);
});
});

View File

@@ -0,0 +1,41 @@
import { test } from "@umbraco/playwright-testhelpers";
import { expect } from "@playwright/test";
const labelTypes = ['Label (bigint)', 'Label (datetime)', 'Label (decimal)', 'Label (integer)', 'Label (string)', 'Label (time)'];
for (const labelType of labelTypes) {
test.describe(`${labelType} tests`, () => {
let dataTypeDefaultData = null;
let dataTypeData = null;
test.beforeEach(async ({ umbracoUi, umbracoApi }) => {
await umbracoUi.goToBackOffice();
await umbracoUi.dataType.goToSettingsTreeItem("Data Types");
dataTypeDefaultData = await umbracoApi.dataType.getByName(labelType);
await umbracoUi.dataType.goToDataType(labelType);
});
test.afterEach(async ({ umbracoApi }) => {
if (dataTypeDefaultData !== null) {
await umbracoApi.dataType.update(dataTypeDefaultData.id,dataTypeDefaultData);
}
});
test(`can change value type`, async ({ umbracoApi, umbracoUi }) => {
// Arrange
const expectedDataTypeValues = [
{
alias: "umbracoDataValueType",
value: "TEXT",
},
];
// Act
await umbracoUi.dataType.changeValueType("Long String");
await umbracoUi.dataType.clickSaveButton();
// Assert
dataTypeData = await umbracoApi.dataType.getByName(labelType);
expect(dataTypeData.values).toEqual(expectedDataTypeValues);
});
});
}

View File

@@ -0,0 +1,204 @@
import { test } from "@umbraco/playwright-testhelpers";
import { expect } from "@playwright/test";
const listViewTypes = ['List View - Content', 'List View - Media', 'List View - Members'];
for (const listViewType of listViewTypes) {
test.describe(`${listViewType} tests`, () => {
let dataTypeDefaultData = null;
let dataTypeData = null;
test.beforeEach(async ({ umbracoUi, umbracoApi }) => {
await umbracoUi.goToBackOffice();
await umbracoUi.dataType.goToSettingsTreeItem('Data Types');
dataTypeDefaultData = await umbracoApi.dataType.getByName(listViewType);
await umbracoUi.dataType.goToDataType(listViewType);
});
test.afterEach(async ({ umbracoApi }) => {
if (dataTypeDefaultData !== null) {
await umbracoApi.dataType.update(dataTypeDefaultData.id,dataTypeDefaultData);
}
});
test(`can update Page Size`, async ({ umbracoApi, umbracoUi }) => {
// Arrange
const pageSizeValue = 5;
const expectedDataTypeValues = {
alias: "pageSize",
value: pageSizeValue,
};
// Act
await umbracoUi.dataType.enterPageSizeValue(pageSizeValue.toString());
await umbracoUi.dataType.clickSaveButton();
// Assert
dataTypeData = await umbracoApi.dataType.getByName(listViewType);
expect(dataTypeData.values).toContainEqual(expectedDataTypeValues);
});
test(`can update Order Direction`, async ({ umbracoApi, umbracoUi }) => {
// Arrange
const isAscending = listViewType == 'List View - Members' ? false : true;
const orderDirectionValue = isAscending ? 'asc' : 'desc';
const expectedDataTypeValues = {
alias: "orderDirection",
value: orderDirectionValue,
};
// Act
await umbracoUi.dataType.chooseOrderDirection(isAscending);
await umbracoUi.dataType.clickSaveButton();
// Assert
dataTypeData = await umbracoApi.dataType.getByName(listViewType);
expect(dataTypeData.values).toContainEqual(expectedDataTypeValues);
});
test(`can add Column Displayed`, async ({ umbracoApi, umbracoUi }) => {
// Arrange
const columnName = 'Document Type';
const expectedIncludePropertiesValues = {
alias: "contentTypeAlias",
header: "Document Type",
isSystem: true,
};
// Act
await umbracoUi.dataType.addColumnDisplayed(columnName);
await umbracoUi.dataType.clickSaveButton();
// Assert
dataTypeData = await umbracoApi.dataType.getByName(listViewType);
const includePropertiesData = dataTypeData.values.find(value => value.alias === "includeProperties");
expect(includePropertiesData.value).toContainEqual(expectedIncludePropertiesValues);
});
test(`can remove Column Displayed`, async ({ umbracoApi, umbracoUi }) => {
// Arrange
const columnName = 'Last edited';
const expectedIncludePropertiesValues = {
alias: "updateDate",
header: "Last edited",
isSystem: 1,
};
// Act
await umbracoUi.dataType.removeColumnDisplayed(columnName);
await umbracoUi.dataType.clickSaveButton();
// Assert
dataTypeData = await umbracoApi.dataType.getByName(listViewType);
const includePropertiesData = dataTypeData.values.find(value => value.alias === "includeProperties");
expect(includePropertiesData.value).not.toContainEqual(expectedIncludePropertiesValues);
});
test(`can update Order By`, async ({ umbracoApi, umbracoUi }) => {
// Arrange
const orderByValue = 'Last edited';
const expectedDataTypeValues = {
alias: "orderBy",
value: "updateDate",
};
// Act
await umbracoUi.dataType.chooseOrderByValue(orderByValue);
await umbracoUi.dataType.clickSaveButton();
// Assert
dataTypeData = await umbracoApi.dataType.getByName(listViewType);
expect(dataTypeData.values).toContainEqual(expectedDataTypeValues);
});
test(`can update Bulk Action Permission`, async ({ umbracoApi, umbracoUi }) => {
// Arrange
const bulkActionPermissionValue = 'Allow bulk copy (content only)';
const expectedDataTypeValues = {
alias: "bulkActionPermissions",
value: {
allowBulkPublish: false,
allowBulkUnpublish: false,
allowBulkCopy: true,
allowBulkDelete: false,
allowBulkMove: false,
},
};
// Act
await umbracoUi.dataType.clickBulkActionPermissionsSliderByValue(bulkActionPermissionValue);
await umbracoUi.dataType.clickSaveButton();
// Assert
dataTypeData = await umbracoApi.dataType.getByName(listViewType);
expect(dataTypeData.values).toContainEqual(expectedDataTypeValues);
});
test(`can update Content App Icon`, async ({ umbracoApi, umbracoUi }) => {
// Arrange
const iconValue = 'icon-activity';
const expectedDataTypeValues = {
"alias": "icon",
"value": iconValue
};
// Act
await umbracoUi.dataType.clickContentAppIconButton();
await umbracoUi.dataType.chooseContentAppIconByValue(iconValue);
await umbracoUi.dataType.clickSaveButton();
// Assert
dataTypeData = await umbracoApi.dataType.getByName(listViewType);
expect(dataTypeData.values).toContainEqual(expectedDataTypeValues);
});
test(`can update Content App Name`, async ({ umbracoApi, umbracoUi }) => {
// Arrange
const contentAppName = 'Test Content App Name';
const expectedDataTypeValues = {
alias: "tabName",
value: contentAppName,
};
// Act
await umbracoUi.dataType.enterContentAppName(contentAppName);
await umbracoUi.dataType.clickSaveButton();
// Assert
dataTypeData = await umbracoApi.dataType.getByName(listViewType);
expect(dataTypeData.values).toContainEqual(expectedDataTypeValues);
});
test(`can enable Show Content App First`, async ({umbracoApi, umbracoUi}) => {
// Arrange
const expectedDataTypeValues = {
alias: "showContentFirst",
value: true,
};
// Act
await umbracoUi.dataType.clickShowContentAppFirstSlider();
await umbracoUi.dataType.clickSaveButton();
// Assert
dataTypeData = await umbracoApi.dataType.getByName(listViewType);
expect(dataTypeData.values).toContainEqual(expectedDataTypeValues);
});
test(`can enable Edit in Infinite Editor`, async ({umbracoApi, umbracoUi}) => {
// Arrange
const expectedDataTypeValues = {
alias: "useInfiniteEditor",
value: true,
};
// Act
await umbracoUi.dataType.clickEditInInfiniteEditorSlider();
await umbracoUi.dataType.clickSaveButton();
// Assert
//await umbracoUi.dataType.isSuccessNotificationVisible();
dataTypeData = await umbracoApi.dataType.getByName(listViewType);
expect(dataTypeData.values).toContainEqual(expectedDataTypeValues);
});
});
}

View File

@@ -0,0 +1,72 @@
import {test} from '@umbraco/playwright-testhelpers';
import {expect} from "@playwright/test";
const dataTypeName = 'Numeric';
test.describe(`${dataTypeName} tests`, () => {
let dataTypeDefaultData = null;
let dataTypeData = null;
test.beforeEach(async ({umbracoUi, umbracoApi}) => {
await umbracoUi.goToBackOffice();
await umbracoUi.dataType.goToSettingsTreeItem('Data Types');
await umbracoUi.dataType.goToDataType(dataTypeName);
dataTypeDefaultData = await umbracoApi.dataType.getByName(dataTypeName);
});
test.afterEach(async ({umbracoApi}) => {
if (dataTypeDefaultData !== null) {
await umbracoApi.dataType.update(dataTypeDefaultData.id, dataTypeDefaultData);
}
});
test('can update Minimum value', async ({umbracoApi, umbracoUi}) => {
// Arrange
const minimumValue = -5;
const expectedDataTypeValues = {
alias: "min",
value: minimumValue,
};
// Act
await umbracoUi.dataType.enterMinimumValue(minimumValue.toString());
await umbracoUi.dataType.clickSaveButton();
// Assert
dataTypeData = await umbracoApi.dataType.getByName(dataTypeName);
expect(dataTypeData.values).toContainEqual(expectedDataTypeValues);
});
test('can update Maximum value', async ({umbracoApi, umbracoUi}) => {
// Arrange
const maximumValue = 1000000;
const expectedDataTypeValues = {
alias: "max",
value: maximumValue,
};
// Act
await umbracoUi.dataType.enterMaximumValue(maximumValue.toString());
await umbracoUi.dataType.clickSaveButton();
// Assert
dataTypeData = await umbracoApi.dataType.getByName(dataTypeName);
expect(dataTypeData.values).toContainEqual(expectedDataTypeValues);
});
test('can update Step Size value', async ({umbracoApi, umbracoUi}) => {
// Arrange
const stepSizeValue = 5;
const expectedDataTypeValues = {
alias: "step",
value: stepSizeValue,
};
// Act
await umbracoUi.dataType.enterStepSizeValue(stepSizeValue.toString());
await umbracoUi.dataType.clickSaveButton();
// Assert
dataTypeData = await umbracoApi.dataType.getByName(dataTypeName);
expect(dataTypeData.values).toContainEqual(expectedDataTypeValues);
});
});

View File

@@ -0,0 +1,74 @@
import {test} from '@umbraco/playwright-testhelpers';
import {expect} from "@playwright/test";
const dataTypeName = 'Radiobox';
test.describe(`${dataTypeName} tests`, () => {
let dataTypeDefaultData = null;
let dataTypeData = null;
test.beforeEach(async ({umbracoUi, umbracoApi}) => {
await umbracoUi.goToBackOffice();
await umbracoUi.dataType.goToSettingsTreeItem('Data Types');
dataTypeDefaultData = await umbracoApi.dataType.getByName(dataTypeName);
});
test.afterEach(async ({umbracoApi}) => {
if (dataTypeDefaultData !== null) {
await umbracoApi.dataType.update(dataTypeDefaultData.id, dataTypeDefaultData);
}
});
test('can add option', async ({umbracoApi, umbracoUi}) => {
// Arrange
const optionName = 'Test option';
const expectedDataTypeValues = [{
"alias": "items",
"value": [
{
"value": optionName
}
]
}];
// Remove all existing options
dataTypeData = await umbracoApi.dataType.getByName(dataTypeName);
dataTypeData.values = [];
await umbracoApi.dataType.update(dataTypeData.id, dataTypeData);
await umbracoUi.dataType.goToDataType(dataTypeName);
// Act
await umbracoUi.dataType.clickAddOptionButton();
await umbracoUi.dataType.enterOptionName(optionName);
await umbracoUi.dataType.clickSaveButton();
// Assert
dataTypeData = await umbracoApi.dataType.getByName(dataTypeName);
expect(dataTypeData.values).toEqual(expectedDataTypeValues);
});
test('can remove option', async ({umbracoApi, umbracoUi}) => {
// Arrange
const removedOptionName = 'Removed Option';
const removedOptionValues = [{
"alias": "items",
"value": [
{
"value": removedOptionName
}
]
}];
// Remove all existing options and add an option to remove
dataTypeData = await umbracoApi.dataType.getByName(dataTypeName);
dataTypeData.values = removedOptionValues;
await umbracoApi.dataType.update(dataTypeData.id, dataTypeData);
await umbracoUi.dataType.goToDataType(dataTypeName);
// Act
await umbracoUi.dataType.removeOptionByName(removedOptionName);
await umbracoUi.dataType.clickSaveButton();
// Assert
dataTypeData = await umbracoApi.dataType.getByName(dataTypeName);
expect(dataTypeData.values).toEqual([]);
});
});

View File

@@ -0,0 +1,89 @@
import {test} from '@umbraco/playwright-testhelpers';
import {expect} from "@playwright/test";
const dataTypeName = 'Textarea';
test.describe(`${dataTypeName} tests`, () => {
let dataTypeDefaultData = null;
let dataTypeData = null;
test.beforeEach(async ({umbracoUi, umbracoApi}) => {
await umbracoUi.goToBackOffice();
await umbracoUi.dataType.goToSettingsTreeItem('Data Types');
await umbracoUi.dataType.goToDataType(dataTypeName);
dataTypeDefaultData = await umbracoApi.dataType.getByName(dataTypeName);
});
test.afterEach(async ({umbracoApi}) => {
if (dataTypeDefaultData !== null) {
await umbracoApi.dataType.update(dataTypeDefaultData.id, dataTypeDefaultData);
}
});
test('can update Maximum allowed characters value', async ({umbracoApi, umbracoUi}) => {
// Arrange
const maxCharsValue = 126;
const expectedDataTypeValues = {
alias: "maxChars",
value: maxCharsValue,
};
// Act
await umbracoUi.dataType.enterMaximumAllowedCharactersValue(maxCharsValue.toString());
await umbracoUi.dataType.clickSaveButton();
// Assert
dataTypeData = await umbracoApi.dataType.getByName(dataTypeName);
expect(dataTypeData.values).toContainEqual(expectedDataTypeValues);
});
test('can update Number of rows value', async ({umbracoApi, umbracoUi}) => {
// Arrange
const numberOfRowsValue = 9;
const expectedDataTypeValues = {
alias: "rows",
value: numberOfRowsValue,
};
// Act
await umbracoUi.dataType.enterNumberOfRowsValue(numberOfRowsValue.toString());
await umbracoUi.dataType.clickSaveButton();
// Assert
dataTypeData = await umbracoApi.dataType.getByName(dataTypeName);
expect(dataTypeData.values).toContainEqual(expectedDataTypeValues);
});
test('can update Min height (pixels) value', async ({umbracoApi, umbracoUi}) => {
// Arrange
const minHeightValue = 150;
const expectedDataTypeValues = {
alias: "minHeight",
value: minHeightValue,
};
// Act
await umbracoUi.dataType.enterMinHeightValue(minHeightValue.toString());
await umbracoUi.dataType.clickSaveButton();
// Assert
dataTypeData = await umbracoApi.dataType.getByName(dataTypeName);
expect(dataTypeData.values).toContainEqual(expectedDataTypeValues);
});
test('can update Max height (pixels) value', async ({umbracoApi, umbracoUi}) => {
// Arrange
const maxHeightValue = 300;
const expectedDataTypeValues = {
alias: "maxHeight",
value: maxHeightValue,
};
// Act
await umbracoUi.dataType.enterMaxHeightValue(maxHeightValue.toString());
await umbracoUi.dataType.clickSaveButton();
// Assert
dataTypeData = await umbracoApi.dataType.getByName(dataTypeName);
expect(dataTypeData.values).toContainEqual(expectedDataTypeValues);
});
});

View File

@@ -0,0 +1,38 @@
import {test} from '@umbraco/playwright-testhelpers';
import {expect} from "@playwright/test";
const dataTypeName = 'Textstring';
test.describe(`${dataTypeName} tests`, () => {
let dataTypeDefaultData = null;
let dataTypeData = null;
test.beforeEach(async ({umbracoUi, umbracoApi}) => {
await umbracoUi.goToBackOffice();
await umbracoUi.dataType.goToSettingsTreeItem('Data Types');
await umbracoUi.dataType.goToDataType(dataTypeName);
dataTypeDefaultData = await umbracoApi.dataType.getByName(dataTypeName);
});
test.afterEach(async ({umbracoApi}) => {
if (dataTypeDefaultData !== null) {
await umbracoApi.dataType.update(dataTypeDefaultData.id, dataTypeDefaultData);
}
});
test('can update Maximum allowed characters value', async ({umbracoApi, umbracoUi}) => {
// Arrange
const maxCharsValue = 126;
const expectedDataTypeValues = {
alias: "maxChars",
value: maxCharsValue,
};
// Act
await umbracoUi.dataType.enterMaximumAllowedCharactersValue(maxCharsValue.toString());
await umbracoUi.dataType.clickSaveButton();
// Assert
dataTypeData = await umbracoApi.dataType.getByName(dataTypeName);
expect(dataTypeData.values).toContainEqual(expectedDataTypeValues);
});
});

View File

@@ -0,0 +1,79 @@
import { test } from "@umbraco/playwright-testhelpers";
import { expect } from "@playwright/test";
const uploadTypes = ['Upload Article', 'Upload Audio', 'Upload File', 'Upload Vector Graphics', 'Upload Video'];
for (const uploadType of uploadTypes) {
test.describe(`${uploadType} tests`, () => {
let dataTypeDefaultData = null;
let dataTypeData = null;
test.beforeEach(async ({ umbracoUi, umbracoApi }) => {
await umbracoUi.goToBackOffice();
await umbracoUi.dataType.goToSettingsTreeItem("Data Types");
dataTypeDefaultData = await umbracoApi.dataType.getByName(uploadType);
});
test.afterEach(async ({ umbracoApi }) => {
if (dataTypeDefaultData !== null) {
await umbracoApi.dataType.update(dataTypeDefaultData.id, dataTypeDefaultData);
}
});
test("can add accepted file extension", async ({ umbracoApi, umbracoUi }) => {
// Arrange
const fileExtensionValue = 'zip';
const expectedDataTypeValues = [
{
alias: "fileExtensions",
value: [
{
"value": fileExtensionValue
},
],
},
];
// Remove all existing accepted file extensions
dataTypeData = await umbracoApi.dataType.getByName(uploadType);
dataTypeData.values = [];
await umbracoApi.dataType.update(dataTypeData.id, dataTypeData);
await umbracoUi.dataType.goToDataType(uploadType);
// Act
await umbracoUi.dataType.clickAddAcceptedFileExtensionsButton();
await umbracoUi.dataType.enterAcceptedFileExtensions(fileExtensionValue);
await umbracoUi.dataType.clickSaveButton();
// Assert
dataTypeData = await umbracoApi.dataType.getByName(uploadType);
expect(dataTypeData.values).toEqual(expectedDataTypeValues);
});
test("can remove accepted file extension", async ({ umbracoApi, umbracoUi }) => {
// Arrange
const removedFileExtensionValue = "bat";
const removedFileExtensionsValues = [
{
alias: "fileExtensions",
value: [
{
"value": removedFileExtensionValue
},
],
},
];
// Remove all existing accepted file extensions and add an file extension to remove
dataTypeData = await umbracoApi.dataType.getByName(uploadType);
dataTypeData.values = removedFileExtensionsValues;
await umbracoApi.dataType.update(dataTypeData.id, dataTypeData);
await umbracoUi.dataType.goToDataType(uploadType);
// Act
await umbracoUi.dataType.removeAcceptedFileExtensionsByValue(removedFileExtensionValue);
await umbracoUi.dataType.clickSaveButton();
// Assert
dataTypeData = await umbracoApi.dataType.getByName(uploadType);
expect(dataTypeData.values).toEqual([]);
});
});
}