umbraco-cypress-testhelpers
Version:
Test helpers for making Cypress tests for Umbraco solutions
607 lines (531 loc) • 25.9 kB
text/typescript
import { DataType } from 'src/cms/models/dataTypes/dataType';
declare global {
// eslint-disable-next-line @typescript-eslint/no-namespace
namespace Cypress {
interface Chainable<Subject> {
addTextToUsernameInput: (name: string) => Chainable<void>;
cycleHackWorkaroundForPureLiveIssue: (name: string) => Chainable<void>;
/**
* Select a HTML element in the Umbraco backoffice that has a HTML data attribute
* `<div data-umb="something"></div>`
*
* If the optional child param is sent then it will return that item as the selcted DOM element
*
* @param {string} value Value to search for inside the `data-umb` attribute to select the DOM element
* @param {string} child Optional HTML element to find inside the element with the data-umb selector such as `h1`
* @example cy.dataUmb('forms-add-question').click()
* @returns {Chainable<Element>} A HTML element
*/
dataUmb(value: string, child?: string): Chainable<Element>;
dataUmbScope(value: string, child?: string): Chainable<Element>;
/**
* This will iterate over all top level content nodes in Umbraco and delete them & their children
* @example cy.deleteAllContent();
*/
deleteAllContent: () => Chainable<void>;
/**
* This will iterate over all Forms in Umbraco Forms and delete them
* @example cy.deleteAllForms();
*/
deleteAllForms: () => Chainable<void>;
/**
* This will interate over all Umbraco Forms Datasources and delete them
* @example cy.deleteAllDataSources();
*/
deleteAllDataSources: () => Chainable<void>;
/**
* This will interate over all Umbraco Forms PreValue sources and delete them
* @example cy.deleteAllDataSources();
*/
deleteAllPreValues: () => Chainable<void>;
/**
* Deletes an Umbraco content node by its ID
* @param {string} id The ID of the content node to delete
* @example cy.deleteContentById('1234');
*/
deleteContentById: (id: number) => Chainable<void>;
/**
* Deletes a specific document type by either its Key or Alias
* @param {string} id The `key` or `alias` of the document type to delete
* @example cy.deleteDocumentType('myDocType');
*/
deleteDocumentType: (id: string) => Chainable<void>;
/**
* Deletes document type by its id
* @param {string} id The id of the document type to delete
*/
deleteDocumentTypeById: (id: string) => Chainable<void>;
/**
* Deletes document types that start with a certain prefix for its name
* @param {string} name The prefix used in the document type names that you wish to delete
* @example cy.deleteDocumentTypesByNamePrefix('My');
*/
deleteDocumentTypesByNamePrefix: (name: string) => Chainable<void>;
/**
* Deletes a specific Umbraco Form type by either its Key or Name
* @param {string} name The `key` or `name` of the Umbraco Form to delete
* @example cy.deleteForm('Newsletter');
*/
deleteForm: (name: string) => Chainable<void>;
/**
* Deletes a specific Umbraco Form type by its ID
* @param {string} id The id of the Umbraco Form to delete
*/
deleteFormByGuid: (id: string) => Chainable<void>;
/**
* Deletes Umbraco Forms that start with a certain prefix for its name
* @param {string} name The prefix used for the name of Umbraco Forms that you wish to delete
* @example cy.deleteFormsByNamePrefix('Campaign');
*/
deleteFormsByNamePrefix: (name: string) => Chainable<void>;
/**
* Deletes Umbraco Forms PreValue Source by its ID
* @param {string} id The ID of the Umbraco Forms PreValue source you wish to delete
*/
deletePreValueSourceByGuid: (id: string) => Chainable<void>;
/**
* Deletes Umbraco Template/View by its id
* @param {string} id The ID of the Umbraco Template/view you wish to delete
*/
deleteTemplateById: (id: string) => Chainable<void>;
/**
* Deletes Umbraco Templates/views that start with a certain prefix for its name
* @param {string} name The prefix used for the name of Umbraco templates/views that you wish to delete
* @example cy.deleteTemplatesByNamePrefix('blog');
*/
deleteTemplatesByNamePrefix: (name: string) => Chainable<void>;
/**
* Deletes Umbraco DataTypes that start with a certain prefix for its name
* @param {string} name The prefix used for the name of Umbraco content datatypes that you wish to delete
* @example cy.deleteDataTypesByNamePrefix('home');
*/
deleteDataTypesByNamePrefix: (name: string) => Chainable<void>;
/**
* Deletes Umbraco DataType by its id
* @param {string} id The id of the datatype to delete
*/
deleteDataTypeById: (id: string) => Chainable<void>;
/**
* Edit/update a template/view with specific HTML
* @param {string} name The name of the template/view to edit
* @param {string} content The HTML contents to set for that template/view
*/
editTemplate: (name: string, content: string) => Chainable<any>;
/**
* Gets the global AngularJS library found on the window object
* So that it can be used
*/
getAngular: () => Chainable<any>;
/**
* Upload a file to a specific URL endpoint relative to Umbraco backoffice
* @param {string} fileName This filename is for a file located in the cypress fixture folder `fixturesFolder` which by default is `cypress/fixtures/`
* @param {string} url The URL to POST the file to
* @example cy.postFile('prevaluesource.txt', '/backoffice/UmbracoForms/PreValueFile/PostAddFile')
* @returns This returns the JSON body from the POST request
*/
postFile: (fileName: string, url: string) => Chainable<any>;
/**
* Makes a HTTP POST request to a specific URL endpoint relative to Umbraco backoffice
* @param {string} url The URL to POST the data to
* @param {any} payload The data to POST to the URL such as simple string or JSON object
* @example cy.postRequest('/backoffice/UmbracoForms/PreValueSource/PostSave', {name: 'Some Name'});
* @returns This returns the JSON body from the POST request
*/
postRequest: (url: string, payload: any) => Chainable<any>;
/**
* Save Umbraco Content Node
* **Note** This must be the entire content object that gets sent to the server
* @param {any} content The JSON object for the entire content node
* @see ContentBuilder to help create the object you need
*/
saveContent: (content: any) => Chainable<any>;
/**
* Save Umbraco DataType
* @param {any} datatype The datatype object to save
* @see DataTypesBuilderHelper
*/
saveDataType: (datatype: any) => Chainable<any>;
/**
* Save Umbraco Document Type
* @param {any} doctype The doctype object to save
* @see DocumentTypeBuilder
*/
saveDocumentType: (doctype: any) => Chainable<any>;
/**
* Creates a folder in either Stylesheets or Scripts
* @param {string} section This should be set to 'scripts' or 'stylesheets'
* @param {string} folderName The name of the folder you wish to create
* @example cy.saveFolder('scripts', 'my-awesome-js-code');
*/
saveFolder: (section: string, folderName: string) => Chainable<void>;
/**
* Save an Umbraco Form
* @param {any} form The Umbraco Form object to save
* @see FormBuilder
*/
saveForm: (form: any) => Chainable<any>;
/**
* Saves an Umbraco Macro
* @param {string} name A name to give the new Umbraco macro
* @example cy.saveMacro('InsertMacroTest');
*/
saveMacro: (name: string) => Chainable<any>;
/**
* Save an Umbraco Macro with a partial
* @param {any} macro The Umbraco macro object to save containing the partial view
* @see MacroBuilder
*/
saveMacroWithPartial: (macro: any) => Chainable<any>;
/**
* Save a Partial View
* @param {any} view The Umbraco partial view object to save
* @see PartialViewBuilder
*/
savePartialView: (view: any) => Chainable<void>;
/**
* Save a Partial View Macro
* @param {any} macro The Umbraco Partial View Macro object to save
* @see PartialViewMacroBuilder
*/
savePartialViewMacro: (macro: any) => Chainable<any>;
/**
* Save Javascript file
* @param {any} script The Umbraco Javascript object to save
* @see ScriptBuilder
*/
saveScript: (script: any) => Chainable<void>;
/**
* Save CSS Stylesheet
* @param {any} stylesheet The Umbraco Stylesheet object to save
* @see StylesheetBuilder
*/
saveStylesheet: (stylesheet: any) => Chainable<void>;
/**
* Save Umbraco Template/View
* @param {any} template The Umbraco template/view object to save
* @see TemplateBuilder
*/
saveTemplate: (template: any) => Chainable<any>;
/**
* Save Umbraco User
* @param {any} user The Umbraco user to save
* @see UserBuilder
*/
saveUser: (user: any) => Chainable<any>;
/**
* Make HTTP requests to Umbraco Backoffice APIs
* This will remove the junk JSON data & return a nice object
* @param {string} url The Url to make the HTTP request for
* @param {string} method Such as POST/PUT/GET etc
* @param {any} body The body of the request to send in the HTTP request
* @returns JSON from the API response
* @example cy.umbracoApiRequest(this.relativeBackOfficePath + '/backoffice/UmbracoApi/ContentType/PostSave', 'POST', docType);
*/
umbracoApiRequest: (url: string, method: string, body: any) => Chainable<any>;
/**
* Gets an Umbraco button HTML element for clicking etc
* It selects umb-button elements with label-key for the HTML data attribute
*
* @param {string} name The transaltion label-key the button has
* @example cy.umbracoButtonByLabelKey('buttons_saveAndPublish').click();
*/
umbracoButtonByLabelKey: (name: string) => Chainable<void>;
/**
* Gets a HTML element of a context menu action for clicking etc
* It selects li.umb-action with data-element attribute
* @param {string} actionName The action name key to look for in the [data-element] attribute on li.umb-action
* @example cy.umbracoContextMenuAction("action-refreshNode").click();
*/
umbracoContextMenuAction: (actionName: string) => Chainable<void>;
/**
* Creates a document type and some content for that document type
* @param {string} name Name of the given doc type
* @param {string} alias Alias of the given doc type
* @param {DataType} dataType of the given doc tpye
*/
umbracoCreateDocTypeWithContent: (name: string, alias: string, dataType: DataType) => Chainable<void>;
/**
* Gets the umbEditorHeader types in the name into the textbox and verifies the alias generated
* Is in the format we expect it to be generated
*
* @param {string} name The text we want to enter in the name of the umbracoEditorHeader
* @example cy.umbracoEditorHeaderName('Test member type');
*/
umbracoEditorHeaderName: (name: string) => Chainable<void>;
/**
* Checks to see if DataType with specified name does not exist
* If it does it will automatically delete it
* @param {string} name Name of DataType to delete
* @example cy.umbracoEnsureDataTypeNameNotExists('Content with macro in grid');
*/
umbracoEnsureDataTypeNameNotExists: (name: string) => Chainable<void>;
/**
* Checks to see if DocumentType with specified name does not exist
* If it does it will automatically delete it
* @param {string} name Name of DocumentType to delete
* @example cy.umbracoEnsureDocumentTypeNameNotExists('Home');
*/
umbracoEnsureDocumentTypeNameNotExists: (name: string) => Chainable<void>;
/**
* Checks to see if any document types with the specified array
* of names does not exist, if it does it will automatically delete it
* @param {Array<string>} names Names of DocumentTypes to delete
* @example cy.umbracoEnsureMultipleDocumentTypeNameNotExists(['Home', 'About Us'])
*/
umbracoEnsureMultipleDocumentTypeNameNotExists: (names: Array<string>) => Chainable<void>;
/**
* Checks to see if Language with specified name does not exist
* If it does it will automatically delete it
* @param {string} name Name of Language to delete
* @example cy.umbracoEnsureLanguageNameNotExists('Kyrgyz (Kyrgyzstan)');
*/
umbracoEnsureLanguageNameNotExists: (name: string) => Chainable<void>;
/**
* Checks to see if Macro with specified name does not exist
* If it does it will automatically delete it
* @param {string} name Name of Macro to delete
* @example cy.umbracoEnsureMacroNameNotExists('Content with macro in RTE');
*/
umbracoEnsureMacroNameNotExists: (name: string) => Chainable<void>;
/**
* Checks to see if MediaType with specified name does not exist
* If it does it will automatically delete it
* @param {string} name Name of MediaType to delete
* @example cy.umbracoEnsureMediaTypeNameNotExists('Test media type');
*/
umbracoEnsureMediaTypeNameNotExists: (name: string) => Chainable<void>;
/**
* Checks to see if Member with specified email address does not exist
* If it does it will automatically delete it
* @param {string} email Email address of Member to delete
* @example cy.umbracoEnsureMemberEmailNotExists('alice-bobson@acceptancetest.umbraco');
*/
umbracoEnsureMemberEmailNotExists: (email: string) => Chainable<void>;
/**
* Checks to see if Member Group with specified name does not exist
* If it does it will automatically delete it
* @param {string} name Name of Member Group to delete
* @example cy.umbracoEnsureMemberGroupNameNotExists('Test Group');
*/
umbracoEnsureMemberGroupNameNotExists: (name: string) => Chainable<void>;
/**
* Checks to see if Member Type with specified name does not exist
* If it does it will automatically delete it
* @param {string} name Name of Member Type to delete
* @example cy.umbracoEnsureMemberTypeNameNotExists('Test member type');
*/
umbracoEnsureMemberTypeNameNotExists: (name: string) => Chainable<void>;
/**
* Checks to see if a package with specified name does not exist
* If it does it will automatically delete it
* @param {string} name name of package to delete
* @example cy.umbracoEnsurePartialViewMacroFileNameNotExists('Test Package');
*/
umbracoEnsurePackageNameNotExists: (name: string) => Chainable<void>;
/**
* Checks to see if Partial View Macro File with specified name does not exist
* If it does it will automatically delete it
* @param {string} filename Filename of Partial View Macro File to delete
* @example cy.umbracoEnsurePartialViewMacroFileNameNotExists('RTE.cshtml');
*/
umbracoEnsurePartialViewMacroFileNameNotExists: (filename: string) => Chainable<void>;
/**
* Checks to see if Partial View File with specified name does not exist
* If it does it will automatically delete it
* @param {string} filename Filename of Partial View File to delete
* @example cy.umbracoEnsurePartialViewNameNotExists('navi.cshtml');
*/
umbracoEnsurePartialViewNameNotExists: (name: string) => Chainable<void>;
/**
* Checks to see if Relation Type with specified name does not exist
* If it does it will automatically delete it
* @param {string} name Name of Relation Type to delete
* @example cy.umbracoEnsureRelationTypeNameNotExists('Test relation type');
*/
umbracoEnsureRelationTypeNameNotExists: (name: string) => Chainable<void>;
/**
* Checks to see if Javascript file with specified name does not exist
* If it does it will automatically delete it
* @param {string} filename Filename of Javascript File to delete
* @example cy.umbracoEnsureScriptNameNotExists('TestScript.js');
*/
umbracoEnsureScriptNameNotExists: (filename: string) => Chainable<void>;
/**
* Checks to see if CSS file with specified name does not exist
* If it does it will automatically delete it
* @param {string} filename Filename of Javascript File to delete
* @example cy.umbracoEnsureStylesheetNameNotExists('TestStylesheet.css');
*/
umbracoEnsureStylesheetNameNotExists: (filename: string) => Chainable<void>;
/**
* Checks to see if Template/View file with specified name does not exist
* If it does it will automatically delete it
* @param {string} filename Filename of Javascript File to delete
* @example cy.umbracoEnsureTemplateNameNotExists('Content with macro in RTE');
*/
umbracoEnsureTemplateNameNotExists: (name: string) => Chainable<void>;
/**
* Checks to see if backoffice User with specified email address does not exist
* If it does it will automatically delete it
* @param {string} email Email address of User to delete
* @example cy.umbracoEnsureUserEmailNotExists('alice-bobson@acceptancetest.umbraco');
*/
umbracoEnsureUserEmailNotExists: (email: string) => Chainable<void>;
/**
* Checks to see if User Group with specified name does not exist
* If it does it will automatically delete it
* @param {string} name Name of User Group to delete
* @example cy.umbracoEnsureUserGroupNameNotExists('Test Group');
*/
umbracoEnsureUserGroupNameNotExists: (name: string) => Chainable<void>;
/**
* This checks for the presense of Umbraco error notification banners
* Will wait upto 6000ms as we may be waiting for a server response
* @example cy.umbracoErrorNotification().should('be.visible');
*/
umbracoErrorNotification: () => Chainable<any>;
/**
* A handy shortcut to help select the Umbraco global help
* @example cy.umbracoGlobalHelp().should("be.visible");
* cy.umbracoGlobalHelp().click();
*/
umbracoGlobalHelp: () => Chainable<void>;
/**
* A handy shortcut to help select the Umbraco global user
* @example cy.umbracoGlobalUser().click()
*/
umbracoGlobalUser: () => Chainable<void>;
/**
* Clicks its way through the Umbraco installer UI providing username, password and DB connection string
* @param {string} username Username for install - fallsback to Cypress.ENV('username')
* @param {string} password Password for install - fallsback to Cypress.ENV('password')
* @param {string} connectionString Database connection string to use for install - fallsback to Cypress.ENV('connectionString')
*/
umbracoInstall: (username: string, password: string, connectionString: string) => Chainable<void>;
/**
* Perform a login to the Umbraco backoffice
* Mostly used in beforeEach of cypress intergration tests
* @param {string} username Username of Umbraco backoffice login
* @param {string} password Passowrd of Umbraco backoffice login
* @param {boolean} skipCheckTours Will skip tour prompt on first login - Defaults to false
* @example cy.umbracoLogin(Cypress.env('username'), Cypress.env('password'));
*/
umbracoLogin: (username: string, password: string, skipCheckTours: boolean) => Chainable<void>;
/**
* Checks to see if Macro with specified name exists
* @param {string} name Name of Macro to check for
* @example cy.umbracoMacroExists('TestPartialViewMacro').should('be.true');
*/
umbracoMacroExists: (name: string) => Chainable<boolean>;
/**
* Checks to see if Partial View with specified name exists
* @param {string} filename Name of PartialView to check for
* @example cy.umbracoPartialViewExists('TestPartialView.cshtml').should('be.true');
*/
umbracoPartialViewExists: (filename: string) => Chainable<boolean>;
/**
*
*/
umbracoRefreshContentTree: () => Chainable<void>;
/**
* Checks to see if Partial View with specified name exists
* @param {string} filename Name of Javascript to check for
* @example cy.umbracoScriptExists('TestScript.js').should('be.true');
*/
umbracoScriptExists: (filename: string) => Chainable<boolean>;
/**
* Automatically clicks the Umbraco section in the backoffice to navigate to it
* @param {string} name The name/alias of the section found in [data-element="section-xx"] html selector
* @example cy.umbracoSection('member');
* cy.umbracoSection('settings');
* cy.umbracoSection('users');
*/
umbracoSection: (name: string) => Chainable<void>;
/**
* This will set the currently logged in Users language
*
* @param language The iso code for the language you want
* @returns The JSON data in the body of the response as an object
*/
umbracoSetCurrentUserLanguage: (language: string) => Chainable<any>;
/**
* Checks to see if CSS file with specified name exists
* @param {string} filename Name of CSS file to check for
* @example cy.umbracoStylesheetExists('TestStylesheet.css').should('be.true');
*/
umbracoStylesheetExists: (name: string) => Chainable<boolean>;
/**
* This checks for the presense of Umbraco success notification banners
* Will wait upto 6000ms as we may be waiting for a server response
* @example cy.umbracoSuccessNotification().should('be.visible');
*/
umbracoSuccessNotification: () => Chainable<void>;
/**
* Find an Umbraco tree node to expand and then use to click, rightclick etc
* @param {string} treeName Name of tree root to use
* @param {string[]} itemNamePathArray A string array of names of nodes to help click through and expand
* @example cy.umbracoTreeItem("content", ["Home"]).click();
* cy.umbracoTreeItem("content", ["A-Home", "A-Child"]).click();
* cy.umbracoTreeItem("settings", ["Data Types"]).rightclick();
*/
umbracoTreeItem: (treeName: string, itemNamePathArray: string[]) => Chainable<void>;
/**
* Visits a page on the public website and compares the HTML output
*
* @param {string} endpoint URL of frontend page to view and verify content
* @param {string} expectedContent Content you expect to be in rendered view on frontend of site
* @param {boolean} removeWhiteSpace Boolean to indicate if whitespace should be removed
* @example const expected = `<h1>Acceptance test</h1><p> </p>`;
cy.umbracoVerifyRenderedViewContent('/', expected, true).should('be.true');
*/
umbracoVerifyRenderedViewContent: (
endpoint: string,
expectedContent: string,
removeWhiteSpace: boolean,
) => Chainable<boolean>;
/**
* This verifies a specific Umbraco JS file contents
*
* @param {string} fileName JS Filename to request
* @param {string} expected Expected contents of JS file
* @returns {boolean} A boolean if expected JS matches requested file
* @example const expected = '.h1{ color: red;}\n';
* cy.umbracoVerifyScriptContent("test.js", expected).should('be.true');
*/
umbracoVerifyScriptContent: (fileName: string, expected: string) => Chainable<boolean>;
/**
* This verifies a specific Umbraco CSS file contents
*
* @param {string} fileName CSS Filename to request
* @param {string} expected Expected contents of CSS file
* @returns {boolean} A boolean if expected CSS matches requested file
* @example
* cy.umbracoVerifyStylesheetContent('styles.css', expected).should('be.true');
*/
umbracoVerifyStylesheetContent: (fileName: string, expected: string) => Chainable<boolean>;
upload(fileOrArray, processingOpts?): Chainable<Subject>;
/**
* This saves a user group
*
* @param {any} userGroup The user group to save
* @see UserGroupBuilder
*/
saveUserGroup: (userGroup: any) => Chainable<any>;
/**
* This saves a media item
*
* @param {any} userGroup The media item to save
* @see UserGroupBuilder
*/
saveMedia: (media: any, file: any) => Chainable<any>;
/**
* Checks to see if a media with specified name does not exist
* If it does it will automatically delete it
* @param {string} name Name of Media to delete
* @example cy.umbracoEnsureMediaNameNotExists('Test media');
*/
umbracoEnsureMediaNameNotExists: (name: string) => Chainable<void>;
}
}
}
export class Chainable {}