@jahia/cypress 1.0.8 → 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (47) hide show
  1. package/.graphqlconfig +16 -0
  2. package/README.md +2 -0
  3. package/dist/page-object/baseComponent.d.ts +2 -0
  4. package/dist/page-object/baseComponent.js +14 -0
  5. package/dist/page-object/moonstone/menu.js +5 -1
  6. package/dist/support/fixture.js +6 -2
  7. package/dist/support/index.d.ts +1 -0
  8. package/dist/support/index.js +1 -0
  9. package/dist/support/provisioning/executeGroovy.d.ts +8 -2
  10. package/dist/support/provisioning/executeGroovy.js +8 -2
  11. package/dist/support/provisioning/runProvisioningScript.d.ts +7 -2
  12. package/dist/support/provisioning/runProvisioningScript.js +10 -4
  13. package/dist/support/registerSupport.js +2 -0
  14. package/dist/support/repeatUntil.d.ts +15 -0
  15. package/dist/support/repeatUntil.js +52 -0
  16. package/fixtures/graphql/jcr/addNode.graphql +16 -0
  17. package/fixtures/graphql/jcr/deleteNode.graphql +5 -0
  18. package/fixtures/graphql/jcr/mutateNode.graphql +13 -0
  19. package/fixtures/groovy/admin/createSite.groovy +14 -0
  20. package/fixtures/groovy/admin/deleteSite.groovy +6 -0
  21. package/package.json +2 -2
  22. package/schema.graphql +2874 -0
  23. package/src/page-object/baseComponent.ts +5 -0
  24. package/src/page-object/moonstone/menu.ts +5 -1
  25. package/src/support/fixture.ts +5 -2
  26. package/src/support/index.ts +1 -0
  27. package/src/support/provisioning/executeGroovy.md +9 -0
  28. package/src/support/provisioning/executeGroovy.ts +15 -3
  29. package/src/support/provisioning/runProvisioningScript.md +9 -0
  30. package/src/support/provisioning/runProvisioningScript.ts +17 -5
  31. package/src/support/registerSupport.ts +2 -0
  32. package/src/support/repeatUntil.md +40 -0
  33. package/src/support/repeatUntil.ts +59 -0
  34. package/.idea/jahia-cypress.iml +0 -9
  35. package/.idea/misc.xml +0 -6
  36. package/.idea/modules.xml +0 -8
  37. package/.idea/sonarlint/issuestore/8/9/8995cd54601f633e8bca96b4e0b06ae4272afe02 +0 -3
  38. package/.idea/sonarlint/issuestore/index.pb +0 -3
  39. package/.idea/vcs.xml +0 -6
  40. package/dist/page-object/iframe.d.ts +0 -10
  41. package/dist/page-object/iframe.js +0 -46
  42. package/dist/page-object/moonstone/muiinput.d.ts +0 -8
  43. package/dist/page-object/moonstone/muiinput.js +0 -36
  44. package/dist/page-object/moonstone/muiradio.d.ts +0 -5
  45. package/dist/page-object/moonstone/muiradio.js +0 -32
  46. package/fixtures/test.json +0 -0
  47. package/yalc.lock +0 -9
package/.graphqlconfig ADDED
@@ -0,0 +1,16 @@
1
+ {
2
+ "name": "Untitled GraphQL Schema",
3
+ "schemaPath": "schema.graphql",
4
+ "extensions": {
5
+ "endpoints": {
6
+ "Default GraphQL Endpoint": {
7
+ "url": "http://localhost:8080/modules/graphql",
8
+ "headers": {
9
+ "user-agent": "JS GraphQL",
10
+ "Authorization": "Basic cm9vdDpyb290MTIzNA=="
11
+ },
12
+ "introspect": true
13
+ }
14
+ }
15
+ }
16
+ }
package/README.md CHANGED
@@ -14,6 +14,8 @@
14
14
 
15
15
  [`.logout()`](./src/support/logout.md)
16
16
 
17
+ [`.repeatUntil()`](./src/support/repeatUntil.md)
18
+
17
19
  ## Page / component objects
18
20
 
19
21
  In Page Object Model, a set of object is provided to handle known and reused web elements.
@@ -5,10 +5,12 @@ export declare type ComponentType<Component> = {
5
5
  defaultSelector: string;
6
6
  };
7
7
  export declare class BaseComponent {
8
+ static defaultSelector: string;
8
9
  static count: number;
9
10
  element: Chainable<JQuery>;
10
11
  id: number;
11
12
  assertion?: (s: JQuery) => void;
12
13
  constructor(element: Chainable<JQuery>, assertion?: (s: JQuery) => void);
13
14
  get(): Chainable<JQuery>;
15
+ should(arg: any, ...others: any[]): Chainable<JQuery<HTMLElement>>;
14
16
  }
@@ -1,4 +1,9 @@
1
1
  "use strict";
2
+ var __spreadArray = (this && this.__spreadArray) || function (to, from) {
3
+ for (var i = 0, il = from.length, j = to.length; i < il; i++, j++)
4
+ to[j] = from[i];
5
+ return to;
6
+ };
2
7
  exports.__esModule = true;
3
8
  exports.BaseComponent = void 0;
4
9
  var BaseComponent = /** @class */ (function () {
@@ -13,6 +18,15 @@ var BaseComponent = /** @class */ (function () {
13
18
  }
14
19
  return cy.get('@component' + this.id, { log: false });
15
20
  };
21
+ BaseComponent.prototype.should = function (arg) {
22
+ var _a;
23
+ var others = [];
24
+ for (var _i = 1; _i < arguments.length; _i++) {
25
+ others[_i - 1] = arguments[_i];
26
+ }
27
+ return (_a = cy.get('@component' + this.id, { log: false })).should.apply(_a, __spreadArray([arg], others));
28
+ };
29
+ BaseComponent.defaultSelector = '';
16
30
  BaseComponent.count = 0;
17
31
  return BaseComponent;
18
32
  }());
@@ -23,14 +23,18 @@ var Menu = /** @class */ (function (_super) {
23
23
  return _super !== null && _super.apply(this, arguments) || this;
24
24
  }
25
25
  Menu.prototype.select = function (item) {
26
+ // eslint-disable-next-line cypress/no-unnecessary-waiting
27
+ cy.wait(500);
26
28
  this.get().find(".moonstone-menuItem").should("contain", item).contains(item).trigger('click');
27
29
  return this;
28
30
  };
29
31
  Menu.prototype.selectByRole = function (item) {
32
+ // eslint-disable-next-line cypress/no-unnecessary-waiting
33
+ cy.wait(500);
30
34
  this.get().find(".moonstone-menuItem[data-sel-role=\"" + item + "\"]").trigger('click');
31
35
  return this;
32
36
  };
33
- Menu.defaultSelector = '.moonstone-menu';
37
+ Menu.defaultSelector = '.moonstone-menu:visible';
34
38
  return Menu;
35
39
  }(baseComponent_1.BaseComponent));
36
40
  exports.Menu = Menu;
@@ -16,7 +16,6 @@ var fixture = function (originalCommand, fixture) {
16
16
  return originalCommand.apply(void 0, __spreadArray([fixture], args)).then(function (f) {
17
17
  return f;
18
18
  })["catch"](function (err) {
19
- console.log(err);
20
19
  return null;
21
20
  });
22
21
  }).then(function (file) {
@@ -25,7 +24,12 @@ var fixture = function (originalCommand, fixture) {
25
24
  if (typeof args[0] === 'string') {
26
25
  encoding = args[0];
27
26
  }
28
- cy.readFile('./node_modules/@jahia/cypress/fixtures/' + fixture, encoding, { log: false, timeout: 0 });
27
+ try {
28
+ cy.readFile('./node_modules/@jahia/cypress/fixtures/' + fixture, encoding, { log: false, timeout: 0 });
29
+ }
30
+ catch (e) {
31
+ console.log(e);
32
+ }
29
33
  }
30
34
  });
31
35
  };
@@ -2,3 +2,4 @@ export * from './apollo';
2
2
  export * from './provisioning';
3
3
  export * from './login';
4
4
  export * from './logout';
5
+ export * from './repeatUntil';
@@ -14,3 +14,4 @@ __exportStar(require("./apollo"), exports);
14
14
  __exportStar(require("./provisioning"), exports);
15
15
  __exportStar(require("./login"), exports);
16
16
  __exportStar(require("./logout"), exports);
17
+ __exportStar(require("./repeatUntil"), exports);
@@ -3,10 +3,16 @@ declare global {
3
3
  interface Chainable<Subject> {
4
4
  executeGroovy(scriptFile: string, replacements?: {
5
5
  [key: string]: string;
6
- }): Chainable<any>;
6
+ }, jahiaServer?: JahiaServer): Chainable<any>;
7
7
  }
8
8
  }
9
9
  }
10
+ declare type JahiaServer = {
11
+ url: string;
12
+ username: string;
13
+ password: string;
14
+ };
10
15
  export declare const executeGroovy: (scriptFile: string, replacements?: {
11
16
  [key: string]: string;
12
- }) => void;
17
+ }, jahiaServer?: JahiaServer) => void;
18
+ export {};
@@ -3,7 +3,13 @@
3
3
  exports.__esModule = true;
4
4
  exports.executeGroovy = void 0;
5
5
  /// <reference types="cypress" />
6
- var executeGroovy = function (scriptFile, replacements) {
6
+ var serverDefaults = {
7
+ url: Cypress.config().baseUrl,
8
+ username: 'root',
9
+ password: Cypress.env('SUPER_USER_PASSWORD')
10
+ };
11
+ var executeGroovy = function (scriptFile, replacements, jahiaServer) {
12
+ if (jahiaServer === void 0) { jahiaServer = serverDefaults; }
7
13
  cy.runProvisioningScript({
8
14
  fileContent: '- executeScript: "' + scriptFile + '"',
9
15
  type: 'application/yaml'
@@ -11,6 +17,6 @@ var executeGroovy = function (scriptFile, replacements) {
11
17
  fileName: scriptFile,
12
18
  replacements: replacements,
13
19
  type: 'text/plain'
14
- }]).then(function (r) { return r[0]; });
20
+ }], jahiaServer).then(function (r) { return r[0]; });
15
21
  };
16
22
  exports.executeGroovy = executeGroovy;
@@ -2,7 +2,7 @@
2
2
  declare global {
3
3
  namespace Cypress {
4
4
  interface Chainable<Subject> {
5
- runProvisioningScript(script: FormFile, files?: FormFile[]): Chainable<any>;
5
+ runProvisioningScript(script: FormFile, files?: FormFile[], jahiaServer?: JahiaServer): Chainable<any>;
6
6
  }
7
7
  }
8
8
  }
@@ -15,5 +15,10 @@ declare type FormFile = {
15
15
  [key: string]: string;
16
16
  };
17
17
  };
18
- export declare const runProvisioningScript: (script: FormFile, files?: FormFile[], options?: Cypress.Loggable) => void;
18
+ declare type JahiaServer = {
19
+ url: string;
20
+ username: string;
21
+ password: string;
22
+ };
23
+ export declare const runProvisioningScript: (script: FormFile, files?: FormFile[], jahiaServer?: JahiaServer, options?: Cypress.Loggable) => void;
19
24
  export {};
@@ -27,7 +27,13 @@ function append(formFile, formData, key) {
27
27
  });
28
28
  }
29
29
  }
30
- var runProvisioningScript = function (script, files, options) {
30
+ var serverDefaults = {
31
+ url: Cypress.config().baseUrl,
32
+ username: 'root',
33
+ password: Cypress.env('SUPER_USER_PASSWORD')
34
+ };
35
+ var runProvisioningScript = function (script, files, jahiaServer, options) {
36
+ if (jahiaServer === void 0) { jahiaServer = serverDefaults; }
31
37
  if (options === void 0) { options = { log: true }; }
32
38
  var formData = new FormData();
33
39
  append(script, formData, "script");
@@ -56,11 +62,11 @@ var runProvisioningScript = function (script, files, options) {
56
62
  });
57
63
  }
58
64
  cy.request({
59
- url: Cypress.config().baseUrl + "/modules/api/provisioning",
65
+ url: jahiaServer.url + "/modules/api/provisioning",
60
66
  method: 'POST',
61
67
  auth: {
62
- user: 'root',
63
- pass: Cypress.env('SUPER_USER_PASSWORD'),
68
+ user: jahiaServer.username,
69
+ pass: jahiaServer.password,
64
70
  sendImmediately: true
65
71
  },
66
72
  body: formData,
@@ -10,6 +10,7 @@ var login_1 = require("./login");
10
10
  var logout_1 = require("./logout");
11
11
  var installLogsCollector_1 = __importDefault(require("cypress-terminal-report/src/installLogsCollector"));
12
12
  var fixture_1 = require("./fixture");
13
+ var repeatUntil_1 = require("./repeatUntil");
13
14
  var registerSupport = function () {
14
15
  Cypress.Commands.add('apolloClient', apollo_1.apolloClient);
15
16
  Cypress.Commands.add('apollo', { prevSubject: 'optional' }, apollo_1.apollo);
@@ -17,6 +18,7 @@ var registerSupport = function () {
17
18
  Cypress.Commands.add('executeGroovy', provisioning_1.executeGroovy);
18
19
  Cypress.Commands.add('login', login_1.login);
19
20
  Cypress.Commands.add('logout', logout_1.logout);
21
+ Cypress.Commands.add('repeatUntil', repeatUntil_1.repeatUntil);
20
22
  Cypress.Commands.overwrite('fixture', fixture_1.fixture);
21
23
  installLogsCollector_1["default"]();
22
24
  };
@@ -0,0 +1,15 @@
1
+ /// <reference types="cypress" />
2
+ declare type RepeatUntilOptions = {
3
+ attempts: number;
4
+ callback: () => void;
5
+ delay: number;
6
+ };
7
+ declare global {
8
+ namespace Cypress {
9
+ interface Chainable<Subject> {
10
+ repeatUntil(selector: string, options?: Partial<RepeatUntilOptions>): Chainable<JQuery>;
11
+ }
12
+ }
13
+ }
14
+ export declare const repeatUntil: (selector: string, options?: Partial<RepeatUntilOptions>) => void;
15
+ export {};
@@ -0,0 +1,52 @@
1
+ "use strict";
2
+ /* eslint-disable @typescript-eslint/no-explicit-any, @typescript-eslint/no-namespace */
3
+ var __assign = (this && this.__assign) || function () {
4
+ __assign = Object.assign || function(t) {
5
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
6
+ s = arguments[i];
7
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
8
+ t[p] = s[p];
9
+ }
10
+ return t;
11
+ };
12
+ return __assign.apply(this, arguments);
13
+ };
14
+ exports.__esModule = true;
15
+ exports.repeatUntil = void 0;
16
+ var defaultOptions = {
17
+ attempts: 10,
18
+ callback: function () { return cy.reload({ log: false }); },
19
+ delay: 1000
20
+ };
21
+ var repeatUntil = function (selector, options) {
22
+ if (options === void 0) { options = {}; }
23
+ options = __assign(__assign({}, defaultOptions), options);
24
+ var log = Cypress.log({
25
+ name: 'repeatUntil',
26
+ message: "Reload until " + selector + ", remaining attempts : " + options.attempts,
27
+ consoleProps: function () {
28
+ return {
29
+ attempts: options.attempts
30
+ };
31
+ }
32
+ });
33
+ var items = Cypress.$(selector);
34
+ if (items.length) {
35
+ log.set({ $el: items });
36
+ cy.wrap(items, { log: false });
37
+ return;
38
+ }
39
+ if (options.attempts > 1) {
40
+ log.end();
41
+ options.callback();
42
+ // eslint-disable-next-line cypress/no-unnecessary-waiting
43
+ cy.wait(options.delay);
44
+ cy.repeatUntil(selector, __assign(__assign({}, options), { attempts: options.attempts - 1 }));
45
+ }
46
+ else {
47
+ var err = Error('Items not found.');
48
+ log.error(err);
49
+ throw err;
50
+ }
51
+ };
52
+ exports.repeatUntil = repeatUntil;
@@ -0,0 +1,16 @@
1
+ mutation($parentPathOrId: String!, $nodeName: String!, $nodeType: String!, $children: [InputJCRNode] = [],
2
+ $properties: [InputJCRProperty]) {
3
+ jcr(workspace: EDIT) {
4
+ addNode(
5
+ parentPathOrId: $parentPathOrId,
6
+ name: $nodeName,
7
+ primaryNodeType: $nodeType,
8
+ properties: $properties,
9
+ ) {
10
+ addChildrenBatch(nodes: $children){
11
+ uuid
12
+ }
13
+ uuid
14
+ }
15
+ }
16
+ }
@@ -0,0 +1,5 @@
1
+ mutation($pathOrId: String!) {
2
+ jcr(workspace: EDIT) {
3
+ deleteNode(pathOrId: $pathOrId)
4
+ }
5
+ }
@@ -0,0 +1,13 @@
1
+ mutation($pathOrId: String!, $children: [InputJCRNode] = [], $properties: [InputJCRProperty] = []) {
2
+ jcr(workspace: EDIT) {
3
+ mutateNode(pathOrId: $pathOrId) {
4
+ setPropertiesBatch(properties: $properties) {
5
+ path
6
+ }
7
+ addChildrenBatch(nodes: $children){
8
+ uuid
9
+ }
10
+ uuid
11
+ }
12
+ }
13
+ }
@@ -0,0 +1,14 @@
1
+ import org.jahia.services.sites.JahiaSite
2
+ import org.jahia.services.sites.JahiaSitesService
3
+ import org.jahia.services.sites.SiteCreationInfo
4
+
5
+ JahiaSitesService sitesService = JahiaSitesService.getInstance();
6
+ if (sitesService.getSiteByKey("SITEKEY") == null) {
7
+ JahiaSite site = sitesService.addSite(SiteCreationInfo.builder().
8
+ siteKey("SITEKEY").
9
+ serverName("localhost").
10
+ title("SITEKEY").
11
+ templateSet("TEMPLATES_SET").
12
+ locale("en").build())
13
+ }
14
+
@@ -0,0 +1,6 @@
1
+ import org.jahia.services.sites.JahiaSitesService
2
+
3
+ JahiaSitesService sitesService = JahiaSitesService.getInstance();
4
+ if (sitesService.getSiteByKey("SITEKEY") != null) {
5
+ sitesService.removeSite(sitesService.getSiteByKey("SITEKEY"));
6
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jahia/cypress",
3
- "version": "1.0.8",
3
+ "version": "1.1.0",
4
4
  "scripts": {
5
5
  "build": "tsc",
6
6
  "lint": "eslint src -c .eslintrc.json --ext .ts"
@@ -18,7 +18,7 @@
18
18
  },
19
19
  "dependencies": {
20
20
  "@apollo/client": "^3.4.9",
21
- "cypress-terminal-report": "^3.3.2",
21
+ "cypress-terminal-report": "^3.4.2",
22
22
  "graphql": "^15.5.0",
23
23
  "graphql-tag": "^2.11.0"
24
24
  }