graphdb-workbench-tests 3.4.0-dynamic-guides-test → 3.4.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 (69) hide show
  1. package/e2e-legacy/cluster/cluster-states.spec.js +3 -3
  2. package/e2e-legacy/explore/visual-graph/node-info-panel.spec.js +58 -0
  3. package/e2e-legacy/explore/visual-graph/visual-graph-links-limit.spec.js +167 -0
  4. package/e2e-legacy/explore/visual-graph/visual.graph.spec.js +55 -78
  5. package/e2e-legacy/graphql/graphql-in-remote-location.spec.js +49 -0
  6. package/e2e-legacy/guides/navigation/navigation-guide.spec.js +64 -0
  7. package/e2e-legacy/guides/table-graph-explore/table-graph-explore-guide.spec.js +2 -1
  8. package/e2e-legacy/guides/ttyg/configure-agent/configure-agent-guide.spec.js +34 -26
  9. package/e2e-legacy/guides/ttyg/edit-agent/edit-ttyg-agent-guide.spec.js +1 -0
  10. package/e2e-legacy/guides/visual-graph/visual-graph-guide.spec.js +330 -124
  11. package/e2e-legacy/help/guides/guides-autostart.spec.js +36 -3
  12. package/e2e-legacy/help/guides/guides-confirm-cancel-dialog.js +83 -0
  13. package/e2e-legacy/home/cookie-policy/cookie-policy.spec.js +182 -0
  14. package/e2e-legacy/home/create-repository.spec.js +6 -0
  15. package/e2e-legacy/repository/attach-remote-location.spec.js +47 -12
  16. package/e2e-legacy/resource/resource.spec.js +33 -13
  17. package/e2e-legacy/setup/aclmanagement/acl-management-with-selected repository.spec.js +44 -0
  18. package/e2e-legacy/sparql-editor/actions/expand-results-over-sameas.spec.js +8 -8
  19. package/e2e-legacy/sparql-editor/actions/include-inferred-statements.spec.js +4 -4
  20. package/e2e-legacy/sparql-editor/actions/inferred-sameas.spec.js +3 -3
  21. package/e2e-legacy/sparql-editor/yasr/toolbar/visual-graph-button.spec.js +90 -36
  22. package/e2e-legacy/sparql-editor/yasr/yasr.spec.js +80 -0
  23. package/e2e-legacy/ttyg/chat-panel.spec.js +9 -0
  24. package/e2e-legacy/ttyg/clone-agent.spec.js +22 -0
  25. package/e2e-legacy/ttyg/edit-agent.spec.js +17 -0
  26. package/e2e-security/setup/home/cookie-policy.spec.js +232 -6
  27. package/e2e-security/setup/users-and-access/turn-on-security-and-password-change.spec.js +72 -59
  28. package/fixtures/graph/graph-configurations.json +59 -0
  29. package/fixtures/guides/confirm-cancel-dialog/confirm-cancel-dialog-guide.json +15 -0
  30. package/fixtures/guides/navigation/navigation-guide.json +60 -0
  31. package/fixtures/guides/ttyg/configure-agent/configure-ttyg-agent-guide.json +6 -1
  32. package/fixtures/guides/visual-graph/visual-graph-config-guide.json +39 -0
  33. package/fixtures/ttyg/chats/explain-response-1.json +2 -48
  34. package/npm-shrinkwrap.json +32 -33
  35. package/package.json +1 -1
  36. package/steps/cookie-policy/cookie-consent-banner-steps.js +21 -0
  37. package/steps/cookie-policy/cookie-policy-modal.steps.js +56 -0
  38. package/steps/graphql/create-graphql-endpoint-steps.js +8 -0
  39. package/steps/graphql/graphql-endpoint-management-steps.js +8 -0
  40. package/steps/graphql/graphql-playground-steps.js +8 -0
  41. package/steps/guides/guide-dialog-steps.js +56 -2
  42. package/steps/guides/movies-guide-steps.js +2 -1
  43. package/steps/header-steps.js +13 -0
  44. package/steps/home-steps.js +4 -27
  45. package/steps/login-steps.js +1 -0
  46. package/steps/main-menu-steps.js +1 -0
  47. package/steps/repositories/attach-repository-steps.js +16 -0
  48. package/steps/repository-steps.js +24 -0
  49. package/steps/resource/resource-steps.js +0 -8
  50. package/steps/setup/acl-management-steps.js +12 -0
  51. package/steps/setup/settings-steps.js +1 -1
  52. package/steps/shared-modal-dialog-steps.js +45 -0
  53. package/steps/sparql-editor-steps.js +18 -4
  54. package/steps/ttyg/ttyg-agent-settings-modal.steps.js +1 -1
  55. package/steps/visual-graph-split-button-steps.js +45 -0
  56. package/steps/visual-graph-steps.js +69 -3
  57. package/steps/yasgui/yasr-steps.js +30 -6
  58. package/stubs/cluster/remote-location-stubs.js +4 -0
  59. package/stubs/graph-config-stubs.js +17 -0
  60. package/stubs/guides/guides-stubs.js +8 -0
  61. package/stubs/repositories/repositories-stubs.js +22 -0
  62. package/stubs/security-stubs.js +4 -0
  63. package/stubs/sparql-stubs.js +10 -0
  64. package/support/commands.js +1 -0
  65. package/support/e2e-security.js +1 -1
  66. package/support/repository-commands.js +22 -3
  67. package/support/settings-commands.js +18 -2
  68. package/support/url-commands.js +13 -0
  69. package/e2e-legacy/home/cookie-policy.spec.js +0 -108
@@ -3,6 +3,7 @@ import {UserAndAccessSteps} from "../../../steps/setup/user-and-access-steps";
3
3
  import {LoginSteps} from "../../../steps/login-steps";
4
4
  import {ToasterSteps} from "../../../steps/toaster-steps";
5
5
  import {HeaderSteps} from '../../../steps/header-steps.js';
6
+ import HomeSteps from '../../../steps/home-steps.js';
6
7
 
7
8
  describe('Turn on Security', () => {
8
9
 
@@ -11,76 +12,88 @@ describe('Turn on Security', () => {
11
12
  cy.switchOnSecurity();
12
13
  });
13
14
 
14
- afterEach(() =>{
15
+ afterEach(() => {
15
16
  cy.loginAsAdmin();
16
17
  cy.switchOffSecurity(true);
17
18
  })
18
19
 
19
- it('should enable security and show login screen', () => {
20
- // Navigate to Users & Access
21
- UserAndAccessSteps.visit();
22
- // Verify we are redirected to login page
23
- cy.url().should('include', '/login');
24
- HeaderSteps.getHeader().should('not.exist');
25
- MainMenuSteps.getMainMenu().should('not.exist');
26
- });
20
+ it('should enable security and show login screen', () => {
21
+ // Navigate to Users & Access
22
+ UserAndAccessSteps.visit();
23
+ // Verify we are redirected to login page
24
+ cy.url().should('include', '/login');
25
+ HeaderSteps.getHeader().should('not.exist');
26
+ MainMenuSteps.getMainMenu().should('not.exist');
27
+ });
27
28
 
28
- it('should reject wrong credentials and accept admin/root', () => {
29
- // Attempt login with invalid credentials
30
- LoginSteps.visitLoginPage();
31
- LoginSteps.loginWithUser('wrongUser', 'wrongPass');
32
- // Expect error message
33
- ToasterSteps.verifyNewToasterError('Wrong credentials');
29
+ it('should reject wrong credentials and accept admin/root', () => {
30
+ // Attempt login with invalid credentials
31
+ LoginSteps.visitLoginPage();
32
+ LoginSteps.loginWithUser('wrongUser', 'wrongPass');
33
+ // Expect error message
34
+ ToasterSteps.verifyNewToasterError('Wrong credentials');
34
35
 
35
- // Login with correct admin credentials
36
- LoginSteps.visitLoginPage();
37
- LoginSteps.loginWithUser('admin', 'root');
38
- cy.url().should('include', '/');
39
- });
36
+ // Login with correct admin credentials
37
+ LoginSteps.visitLoginPage();
38
+ LoginSteps.loginWithUser('admin', 'root');
39
+ cy.url().should('include', '/');
40
+ });
40
41
 
41
- it('should change admin password and enforce new credentials', () => {
42
- // Navigate to Users & Access after login
43
- UserAndAccessSteps.visit();
44
- // Verify we are redirected to login page
45
- cy.url().should('include', '/login');
46
- LoginSteps.loginWithUser('admin', 'root');
42
+ it('should show toaster after logging out', () => {
43
+ UserAndAccessSteps.visit();
44
+ LoginSteps.loginWithUser('admin', 'root');
45
+ // Verify we are logged in
46
+ UserAndAccessSteps.getUsersCatalogContainer().should('be.visible');
47
+ // Log out
48
+ HeaderSteps.logout();
49
+ cy.url().should('include', '/login');
50
+ // Verify toaster message
51
+ ToasterSteps.verifySuccess('Signed out');
52
+ })
47
53
 
48
- // Open edit page for admin user
49
- UserAndAccessSteps.openEditUserPage('admin');
54
+ describe('Password Change', () => {
55
+ afterEach(() => {
56
+ // Reset password back to original value for test isolation
57
+ UserAndAccessSteps.visit();
58
+ UserAndAccessSteps.openEditUserPage('admin');
59
+ UserAndAccessSteps.typePassword('root');
60
+ UserAndAccessSteps.typeConfirmPasswordField('root');
61
+ UserAndAccessSteps.confirmUserEdit();
62
+ UserAndAccessSteps.getUsersCatalogContainer().should('be.visible');
63
+ })
50
64
 
51
- // Change password to a new value
52
- let newPassword = 'MyNewP@ssw0rd!';
53
- UserAndAccessSteps.typePassword(newPassword);
54
- UserAndAccessSteps.typeConfirmPasswordField(newPassword);
55
- UserAndAccessSteps.confirmUserEdit();
65
+ it('should change admin password and enforce new credentials', () => {
66
+ // Navigate to Users & Access after login
67
+ UserAndAccessSteps.visit();
68
+ // Verify we are redirected to login page
69
+ cy.url().should('include', '/login');
70
+ // Login with admin credentials
71
+ LoginSteps.loginWithUser('admin', 'root');
72
+ // Verify we are logged in
73
+ UserAndAccessSteps.getUsersCatalogContainer().should('be.visible');
56
74
 
57
- // Log out
58
- LoginSteps.logout();
59
- cy.url().should('include', '/login');
75
+ // Open edit page for admin user
76
+ UserAndAccessSteps.openEditUserPage('admin');
60
77
 
61
- // Attempt login with old password
62
- LoginSteps.loginWithUser('admin', 'root');
63
- ToasterSteps.verifyNewToasterError('Wrong credentials');
78
+ // Change password to a new value
79
+ let newPassword = 'MyNewP@ssw0rd!';
80
+ UserAndAccessSteps.typePassword(newPassword);
81
+ UserAndAccessSteps.typeConfirmPasswordField(newPassword);
82
+ UserAndAccessSteps.confirmUserEdit();
64
83
 
65
- // Attempt login with new password
66
- LoginSteps.visitLoginPage();
67
- LoginSteps.loginWithUser('admin', newPassword);
68
- MainMenuSteps.clickOnUsersAndAccess();
69
- // Open edit page for admin user
70
- UserAndAccessSteps.openEditUserPage('admin');
71
- newPassword = 'root';
72
- UserAndAccessSteps.typePassword(newPassword);
73
- UserAndAccessSteps.typeConfirmPasswordField(newPassword);
74
- UserAndAccessSteps.confirmUserEdit();
75
- });
84
+ // Log out
85
+ LoginSteps.logout();
86
+ cy.url().should('include', '/login');
76
87
 
77
- it('should show toaster when after logging out', () => {
78
- UserAndAccessSteps.visit();
79
- LoginSteps.loginWithUser('admin', 'root');
80
- // Log out
81
- LoginSteps.logout();
82
- cy.url().should('include', '/login');
83
- // Verify toaster message
84
- ToasterSteps.verifySuccess('Signed out');
85
- })
88
+ // Attempt login with old password
89
+ LoginSteps.loginWithUser('admin', 'root');
90
+ ToasterSteps.verifyNewToasterError('Wrong credentials');
91
+
92
+ // Attempt login with new password
93
+ LoginSteps.visitLoginPage();
94
+ LoginSteps.loginWithUser('admin', newPassword);
95
+ // Verify we are logged in and we are on the home page
96
+ HomeSteps.getView().should('be.visible');
97
+ });
98
+ });
86
99
  });
@@ -0,0 +1,59 @@
1
+ [
2
+ {
3
+ "id": "de99fd5de7f94ef98f1875dff55fc1c9",
4
+ "name": "Graph Config 1",
5
+ "startMode": "search",
6
+ "owner": "admin",
7
+ "startQueryIncludeInferred": true,
8
+ "startQuerySameAs": true,
9
+ "startGraphQuery": "# CONSTRUCT or DESCRIBE query. The results will be rendered visually as a graph of triples.\nCONSTRUCT WHERE {\n\t?s ?p ?o\n} LIMIT 10",
10
+ "startIRI": null,
11
+ "startIRILabel": null,
12
+ "expandQuery": null,
13
+ "resourceQuery": null,
14
+ "predicateLabelQuery": null,
15
+ "resourcePropertiesQuery": null,
16
+ "shared": false,
17
+ "description": null,
18
+ "hint": null,
19
+ "repositoryId": "A_test"
20
+ },
21
+ {
22
+ "id": "94cab6579df445c68c454b2156013811",
23
+ "name": "Graph Config 1",
24
+ "startMode": "search",
25
+ "owner": "admin",
26
+ "startQueryIncludeInferred": true,
27
+ "startQuerySameAs": true,
28
+ "startGraphQuery": "# CONSTRUCT or DESCRIBE query. The results will be rendered visually as a graph of triples.\nCONSTRUCT WHERE {\n\t?s ?p ?o\n} LIMIT 10",
29
+ "startIRI": null,
30
+ "startIRILabel": null,
31
+ "expandQuery": null,
32
+ "resourceQuery": null,
33
+ "predicateLabelQuery": null,
34
+ "resourcePropertiesQuery": null,
35
+ "shared": false,
36
+ "description": null,
37
+ "hint": null,
38
+ "repositoryId": null
39
+ },
40
+ {
41
+ "id": "94cab6579df445c68c454b2156013661",
42
+ "name": "Graph Config 1",
43
+ "startMode": "query",
44
+ "owner": "admin",
45
+ "startQueryIncludeInferred": true,
46
+ "startQuerySameAs": true,
47
+ "startGraphQuery": "# CONSTRUCT or DESCRIBE query. The results will be rendered visually as a graph of triples.\nCONSTRUCT WHERE {\n\t?s ?p ?o\n} LIMIT 10",
48
+ "startIRI": null,
49
+ "startIRILabel": null,
50
+ "expandQuery": null,
51
+ "resourceQuery": null,
52
+ "predicateLabelQuery": null,
53
+ "resourcePropertiesQuery": null,
54
+ "shared": false,
55
+ "description": null,
56
+ "hint": null,
57
+ "repositoryId": null
58
+ }
59
+ ]
@@ -0,0 +1,15 @@
1
+ [
2
+ {
3
+ "guideName": {
4
+ "en": "Confirm cancel dialog"
5
+ },
6
+ "guideDescription": {
7
+ "en": "Confirm cancel dialog guide"
8
+ },
9
+ "steps": [
10
+ {
11
+ "guideBlockName": "welcome"
12
+ }
13
+ ]
14
+ }
15
+ ]
@@ -0,0 +1,60 @@
1
+ [
2
+ {
3
+ "guideName": {
4
+ "en": "Navigate microfrontends"
5
+ },
6
+ "guideDescription": {
7
+ "en": "Navigate microfrontends"
8
+ },
9
+ "steps": [
10
+ {
11
+ "guideBlockName": "read-only-element",
12
+ "options": {
13
+ "url": "404",
14
+ "elementSelector": "[guide-selector=\"not-found-banner\"]",
15
+ "title": "Navigation",
16
+ "content": "This is a 404 page"
17
+ }
18
+ },
19
+ {
20
+ "guideBlockName": "clickable-element",
21
+ "options": {
22
+ "url": "404",
23
+ "elementSelector": "[guide-selector=\"go-back-home-btn\"]",
24
+ "title": "Navigation",
25
+ "disableNextFlow": true,
26
+ "content": "This is the go back home button"
27
+ }
28
+ },
29
+ {
30
+ "guideBlockName": "clickable-element",
31
+ "options": {
32
+ "elementSelector": "[guide-selector=\"tutorial-container\"]",
33
+ "title": "Navigation",
34
+ "content": "This is the home page"
35
+ }
36
+ },
37
+ {
38
+ "guideBlockName": "read-only-element",
39
+ "options": {
40
+ "url": "sparql-new",
41
+ "elementSelector": "[guide-selector=\"sparql-editor\"]",
42
+ "title": "Navigation",
43
+ "content": "This is the new sparql view"
44
+ }
45
+ },
46
+ {
47
+ "guideBlockName": "read-only-element",
48
+ "options": {
49
+ "url": "import",
50
+ "elementSelector": "[guide-selector=\"uploadRdfFileButton\"]",
51
+ "title": "Navigation",
52
+ "content": "This is the import view"
53
+ }
54
+ },
55
+ {
56
+ "guideBlockName": "guide-end"
57
+ }
58
+ ]
59
+ }
60
+ ]
@@ -56,8 +56,13 @@
56
56
  "options": {
57
57
  "maxIrisPerCall": 15
58
58
  }
59
+ },
60
+ {
61
+ "guideBlockName": "set-context-window-size",
62
+ "options": {
63
+ "contextSize": 4096
64
+ }
59
65
  }
60
-
61
66
  ]
62
67
  }
63
68
  },
@@ -0,0 +1,39 @@
1
+ [
2
+ {
3
+ "guideName": {
4
+ "en": "Create visual graph config guide"
5
+ },
6
+ "steps": [
7
+ {
8
+ "guideBlockName": "visual-graph-config-create",
9
+ "options": {
10
+ "configDescription": "my description",
11
+ "configHint": "my hint",
12
+ "shareConfig": true,
13
+ "linkLimit": 200,
14
+ "expandIri": "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine#WineGrape",
15
+ "iriLabel": "WineGrape",
16
+ "tabConfig": [
17
+ {
18
+ "tabName": "startingPoint",
19
+ "startingPoint": "fixed",
20
+ "searchTerm": "MerlotGrape",
21
+ "iri": "http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine#MerlotGrape"
22
+ },
23
+ {
24
+ "tabName": "graphExpansion",
25
+ "query": "construct {\n ?node ?p ?o .\n ?s ?p ?node .\n} where {\n { ?node ?p ?o . }\n union\n { ?s ?p ?node . }\n}",
26
+ "queryExtraContent": "The graph expansion query defines what happens when a node is expanded in the visual graph. Expanding a node loads additional resources connected to it and adds them to the graph as new nodes and edges.",
27
+ "sampleQueryContent": "The <b>Sample queries</b> includes example graph expansion queries. <b>Unfiltered object properties</b> shows all object property connections of a node, while <b>Filtered object properties</b> shows only selected ones.",
28
+ "includeInferredData": true,
29
+ "expandResultsOverOwl": true
30
+ }
31
+ ]
32
+ }
33
+ },
34
+ {
35
+ "guideBlockName": "guide-end"
36
+ }
37
+ ]
38
+ }
39
+ ]
@@ -4,54 +4,8 @@
4
4
  "queryMethods": [
5
5
  {
6
6
  "name": "sparql_query",
7
- "rawQuery": "SELECT ?character ?name ?height WHERE {\n ?character a voc:Character;\n rdfs:label ?name;\n voc:height ?height.\n FILTER(?name = \"Luke Skywalker\" || ?name = \"Leia Organa\")\n}",
8
- "query": "SELECT ?character ?name ?height WHERE {\n ?character a voc:Character;\n rdfs:label ?name;\n voc:height ?height.\n FILTER(?name = \"Luke Skywalker\" || ?name = \"Leia Organa\")\n}",
9
- "queryType": "sparql",
10
- "errorOutput": "Error: org.eclipse.rdf4j.query.MalformedQueryException: org.eclipse.rdf4j.query.parser.sparql.ast.VisitorException: QName 'voc:Character' uses an undefined prefix"
11
- }, {
12
- "name": "retrieval_search",
13
- "rawQuery": "{\"queries\":[{\"query\":\"pilots that work with Luke Skywalker\",\"filter\":{\"document_id\":\"https://swapi.co/resource/human/1\"},\"top_k\":3}]}",
14
- "query": "{\n \"queries\" : [ {\n \"query\" : \"pilots that work with Luke Skywalker\",\n \"filter\" : {\n \"document_id\" : \"https://swapi.co/resource/human/1\"\n },\n \"top_k\" : 3\n } ]\n}",
15
- "queryType": "json",
16
- "errorOutput": null
17
- },
18
- {
19
- "name": "iri_discovery",
20
- "rawQuery": "Luke Skywalker",
21
- "query": "PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>\nPREFIX skos: <http://www.w3.org/2004/02/skos/core#>\nPREFIX onto: <http://www.ontotext.com/>\nSELECT ?label ?iri {\n ?label onto:fts ('''Luke~ Skywalker~''' '*') .\n ?iri rdfs:label|skos:prefLabel ?label .\n}",
22
- "queryType": "sparql",
23
- "errorOutput": null
24
- },
25
- {
26
- "name": "sparql_query",
27
- "rawQuery": "SELECT ?height WHERE {\n <https://swapi.co/resource/human/1> voc:height ?height.\n}",
28
- "query": "SELECT ?height WHERE {\n <https://swapi.co/resource/human/1> voc:height ?height.\n}",
29
- "queryType": "sparql",
30
- "errorOutput": "Error: org.eclipse.rdf4j.query.MalformedQueryException: org.eclipse.rdf4j.query.parser.sparql.ast.VisitorException: QName 'voc:height' uses an undefined prefix"
31
- },
32
- {
33
- "name": "sparql_query",
34
- "rawQuery": "PREFIX voc: <https://swapi.co/vocabulary/>\nSELECT ?name ?height WHERE {\n ?character voc:height ?height;\n rdfs:label ?name.\n FILTER(?name = \"Luke Skywalker\" || ?name = \"Leia Organa\")\n}",
35
- "query": "PREFIX voc: <https://swapi.co/vocabulary/>\nSELECT ?name ?height WHERE {\n ?character voc:height ?height;\n rdfs:label ?name.\n FILTER(?name = \"Luke Skywalker\" || ?name = \"Leia Organa\")\n}",
36
- "queryType": "sparql",
37
- "errorOutput": null
38
- },
39
- {
40
- "name": "fts_search",
41
- "rawQuery": "Second Luke",
42
- "query": "PREFIX onto: <http://www.ontotext.com/>\nDESCRIBE ?iri {\n\t?x onto:fts \\'\\'\\'Second Luke\\'\\'\\' .\n\t{\n\t\t?x ?p ?iri .\n\t} union {\n\t\t?iri ?p ?x .\n\t}\n}",
43
- "queryType": "sparql",
44
- "errorOutput": null
45
- }, {
46
- "name": "similarity_search",
47
- "rawQuery": "Second Luke",
48
- "query": "PREFIX onto: <http://www.ontotext.com/>\nDESCRIBE ?iri {\n\t?x onto:fts \\'\\'\\'Second Luke\\'\\'\\' .\n\t{\n\t\t?x ?p ?iri .\n\t} union {\n\t\t?iri ?p ?x .\n\t}\n}",
49
- "queryType": "sparql",
50
- "errorOutput": null
51
- }, {
52
- "name": "iri_discovery",
53
- "rawQuery": "Luke Skywalker",
54
- "query": "PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>\nPREFIX skos: <http://www.w3.org/2004/02/skos/core#>\nPREFIX onto: <http://www.ontotext.com/>\nSELECT ?label ?iri {\n ?label onto:fts ('''Luke~ Skywalker~''' '*') .\n ?iri rdfs:label|skos:prefLabel ?label .\n}",
7
+ "rawQuery": "SELECT ?name ?height WHERE {\n ?character voc:height ?height;\n rdfs:label ?name.\n FILTER(?name = \"Luke Skywalker\" || ?name = \"Leia Organa\")\n}",
8
+ "query": "SELECT ?name ?height WHERE {\n ?character voc:height ?height;\n rdfs:label ?name.\n FILTER(?name = \"Luke Skywalker\" || ?name = \"Leia Organa\")\n}",
55
9
  "queryType": "sparql",
56
10
  "errorOutput": null
57
11
  }
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "graphdb-workbench-tests",
3
- "version": "3.4.0-dynamic-guides-test",
3
+ "version": "3.4.0",
4
4
  "lockfileVersion": 3,
5
5
  "requires": true,
6
6
  "packages": {
7
7
  "": {
8
8
  "name": "graphdb-workbench-tests",
9
- "version": "3.4.0-dynamic-guides-test",
9
+ "version": "3.4.0",
10
10
  "license": "Apache-2.0",
11
11
  "devDependencies": {
12
12
  "@bahmutov/cypress-code-coverage": "^2.7.2",
@@ -1071,9 +1071,9 @@
1071
1071
  }
1072
1072
  },
1073
1073
  "node_modules/@babel/plugin-transform-modules-systemjs": {
1074
- "version": "7.29.0",
1075
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.29.0.tgz",
1076
- "integrity": "sha512-PrujnVFbOdUpw4UHiVwKvKRLMMic8+eC0CuNlxjsyZUiBjhFdPsewdXCkveh2KqBA9/waD0W1b4hXSOBQJezpQ==",
1074
+ "version": "7.29.4",
1075
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.29.4.tgz",
1076
+ "integrity": "sha512-N7QmZ0xRZfjHOfZeQLJjwgX2zS9pdGHSVl/cjSGlo4dXMqvurfxXDMKY4RqEKzPozV78VMcd0lxyG13mlbKc4w==",
1077
1077
  "dev": true,
1078
1078
  "license": "MIT",
1079
1079
  "dependencies": {
@@ -3377,9 +3377,9 @@
3377
3377
  "license": "MIT"
3378
3378
  },
3379
3379
  "node_modules/brace-expansion": {
3380
- "version": "1.1.12",
3381
- "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz",
3382
- "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==",
3380
+ "version": "1.1.13",
3381
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.13.tgz",
3382
+ "integrity": "sha512-9ZLprWS6EENmhEOpjCYW2c8VkmOvckIJZfkr7rBW6dObmfgJ/L1GpSYW5Hpo9lDz4D1+n0Ckz8rU7FwHDQiG/w==",
3383
3383
  "dev": true,
3384
3384
  "license": "MIT",
3385
3385
  "dependencies": {
@@ -5420,9 +5420,9 @@
5420
5420
  "license": "MIT"
5421
5421
  },
5422
5422
  "node_modules/fast-uri": {
5423
- "version": "3.1.0",
5424
- "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.0.tgz",
5425
- "integrity": "sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA==",
5423
+ "version": "3.1.2",
5424
+ "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.2.tgz",
5425
+ "integrity": "sha512-rVjf7ArG3LTk+FS6Yw81V1DLuZl1bRbNrev6Tmd/9RaroeeRRJhAt7jg/6YFxbvAQXUCavSoZhPPj6oOx+5KjQ==",
5426
5426
  "dev": true,
5427
5427
  "funding": [
5428
5428
  {
@@ -5570,9 +5570,9 @@
5570
5570
  }
5571
5571
  },
5572
5572
  "node_modules/flatted": {
5573
- "version": "3.3.3",
5574
- "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.3.tgz",
5575
- "integrity": "sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==",
5573
+ "version": "3.4.2",
5574
+ "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.4.2.tgz",
5575
+ "integrity": "sha512-PjDse7RzhcPkIJwy5t7KPWQSZ9cAbzQXcafsetQoD7sOJRQlGikNbx7yZp2OotDnJyrDcbyRq3Ttb18iYOqkxA==",
5576
5576
  "dev": true,
5577
5577
  "license": "ISC"
5578
5578
  },
@@ -7111,9 +7111,9 @@
7111
7111
  }
7112
7112
  },
7113
7113
  "node_modules/lodash": {
7114
- "version": "4.17.23",
7115
- "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.23.tgz",
7116
- "integrity": "sha512-LgVTMpQtIopCi79SJeDiP0TfWi5CNEc/L/aRdTh3yIvmZXTnheWpKjSZhnvMl8iXbC1tFg9gdHHDMLoV7CnG+w==",
7114
+ "version": "4.18.1",
7115
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.18.1.tgz",
7116
+ "integrity": "sha512-dMInicTPVE8d1e5otfwmmjlxkZoUpiVLwyeTdUsi/Caj/gfzzblBcCE5sRHV/AsjuCmxWrte2TNGSYuCeCq+0Q==",
7117
7117
  "dev": true,
7118
7118
  "license": "MIT"
7119
7119
  },
@@ -7606,9 +7606,9 @@
7606
7606
  }
7607
7607
  },
7608
7608
  "node_modules/mocha/node_modules/brace-expansion": {
7609
- "version": "5.0.3",
7610
- "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.3.tgz",
7611
- "integrity": "sha512-fy6KJm2RawA5RcHkLa1z/ScpBeA762UF9KmZQxwIbDtRJrgLzM10depAiEQ+CXYcoiqW1/m96OAAoke2nE9EeA==",
7609
+ "version": "5.0.6",
7610
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.6.tgz",
7611
+ "integrity": "sha512-kLpxurY4Z4r9sgMsyG0Z9uzsBlgiU/EFKhj/h91/8yHu0edo7XuixOIH3VcJ8kkxs6/jPzoI6U9Vj3WqbMQ94g==",
7612
7612
  "dev": true,
7613
7613
  "license": "MIT",
7614
7614
  "peer": true,
@@ -8369,9 +8369,9 @@
8369
8369
  "license": "ISC"
8370
8370
  },
8371
8371
  "node_modules/picomatch": {
8372
- "version": "2.3.1",
8373
- "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
8374
- "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
8372
+ "version": "2.3.2",
8373
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz",
8374
+ "integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==",
8375
8375
  "dev": true,
8376
8376
  "license": "MIT",
8377
8377
  "engines": {
@@ -8921,9 +8921,9 @@
8921
8921
  }
8922
8922
  },
8923
8923
  "node_modules/rimraf/node_modules/brace-expansion": {
8924
- "version": "5.0.3",
8925
- "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.3.tgz",
8926
- "integrity": "sha512-fy6KJm2RawA5RcHkLa1z/ScpBeA762UF9KmZQxwIbDtRJrgLzM10depAiEQ+CXYcoiqW1/m96OAAoke2nE9EeA==",
8924
+ "version": "5.0.6",
8925
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.6.tgz",
8926
+ "integrity": "sha512-kLpxurY4Z4r9sgMsyG0Z9uzsBlgiU/EFKhj/h91/8yHu0edo7XuixOIH3VcJ8kkxs6/jPzoI6U9Vj3WqbMQ94g==",
8927
8927
  "dev": true,
8928
8928
  "license": "MIT",
8929
8929
  "dependencies": {
@@ -9794,9 +9794,9 @@
9794
9794
  }
9795
9795
  },
9796
9796
  "node_modules/systeminformation": {
9797
- "version": "5.31.1",
9798
- "resolved": "https://registry.npmjs.org/systeminformation/-/systeminformation-5.31.1.tgz",
9799
- "integrity": "sha512-6pRwxoGeV/roJYpsfcP6tN9mep6pPeCtXbUOCdVa0nme05Brwcwdge/fVNhIZn2wuUitAKZm4IYa7QjnRIa9zA==",
9797
+ "version": "5.31.6",
9798
+ "resolved": "https://registry.npmjs.org/systeminformation/-/systeminformation-5.31.6.tgz",
9799
+ "integrity": "sha512-Uv2b2uGGM6ns+26czgW2cYRabYdnswM0ddSOOlryHOaelzsmDSet1iM/NT7VOYxW8x/BW+HkY+b1Ve2pLTSGSA==",
9800
9800
  "dev": true,
9801
9801
  "license": "MIT",
9802
9802
  "os": [
@@ -9856,9 +9856,9 @@
9856
9856
  }
9857
9857
  },
9858
9858
  "node_modules/terser-webpack-plugin": {
9859
- "version": "5.3.16",
9860
- "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.16.tgz",
9861
- "integrity": "sha512-h9oBFCWrq78NyWWVcSwZarJkZ01c2AyGrzs1crmHZO3QUg9D61Wu4NPjBy69n7JqylFF5y+CsUZYmYEIZ3mR+Q==",
9859
+ "version": "5.4.0",
9860
+ "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.4.0.tgz",
9861
+ "integrity": "sha512-Bn5vxm48flOIfkdl5CaD2+1CiUVbonWQ3KQPyP7/EuIl9Gbzq/gQFOzaMFUEgVjB1396tcK0SG8XcNJ/2kDH8g==",
9862
9862
  "dev": true,
9863
9863
  "license": "MIT",
9864
9864
  "peer": true,
@@ -9866,7 +9866,6 @@
9866
9866
  "@jridgewell/trace-mapping": "^0.3.25",
9867
9867
  "jest-worker": "^27.4.5",
9868
9868
  "schema-utils": "^4.3.0",
9869
- "serialize-javascript": "^6.0.2",
9870
9869
  "terser": "^5.31.1"
9871
9870
  },
9872
9871
  "engines": {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "graphdb-workbench-tests",
3
- "version": "3.4.0-dynamic-guides-test",
3
+ "version": "3.4.0",
4
4
  "description": "Cypress tests for GraphDB workbench",
5
5
  "type": "module",
6
6
  "scripts": {
@@ -0,0 +1,21 @@
1
+ export class CookieConsentBannerSteps {
2
+ static getCookieConsentBanner() {
3
+ return cy.get('.cookie-consent-banner');
4
+ }
5
+
6
+ static getCookieConsentButton() {
7
+ return this.getCookieConsentBanner().find('button');
8
+ }
9
+
10
+ static giveCookieConsent() {
11
+ return this.getCookieConsentButton().click();
12
+ }
13
+
14
+ static getCookiePolicyLink() {
15
+ return cy.get('.cookie-consent-content a');
16
+ }
17
+
18
+ static clickCookiePolicyLink() {
19
+ return this.getCookiePolicyLink().click();
20
+ }
21
+ }
@@ -0,0 +1,56 @@
1
+ import {SharedModalDialogSteps} from '../shared-modal-dialog-steps';
2
+
3
+ export class CookiePolicyModalSteps extends SharedModalDialogSteps {
4
+ static getDialogComponent(cssClass = '.cookie-policy-modal') {
5
+ return super.getDialogComponent(cssClass);
6
+ }
7
+
8
+ static getStatisticCookiesToggle() {
9
+ return this.getBody().find('.statistic-cookies-toggle .toggle-switch');
10
+ }
11
+
12
+ static getStatisticCookiesCheckbox() {
13
+ return this.getStatisticCookiesToggle().find('input');
14
+ }
15
+
16
+ static toggleStatisticCookies() {
17
+ this.getStatisticCookiesToggle().click();
18
+ // Wait here is intentional because there is a debounce before the checkbox state is updated
19
+ // eslint-disable-next-line cypress/no-unnecessary-waiting
20
+ cy.wait(500);
21
+ }
22
+
23
+ static getThirdPartyCookiesToggle() {
24
+ return this.getBody().find('.third-party-cookies-toggle .toggle-switch');
25
+ }
26
+
27
+ static getThirdPartyCookiesCheckbox() {
28
+ return this.getThirdPartyCookiesToggle().find('input');
29
+ }
30
+
31
+ static toggleThirdPartyCookies() {
32
+ this.getThirdPartyCookiesToggle().click();
33
+ // Wait here is intentional because there is a debounce before the checkbox state is updated
34
+ // eslint-disable-next-line cypress/no-unnecessary-waiting
35
+ cy.wait(500);
36
+ }
37
+
38
+ static closeDialog() {
39
+ this.getFooter().find('.close-btn').click();
40
+ }
41
+
42
+ /**
43
+ * Validates the cookie policy dialog by checking the visibility of the dialog and the state of the checkboxes for
44
+ * analytic and third party cookies.
45
+ * @param {boolean} expectedStatisticChecked
46
+ * @param {boolean} expectedThirdPartyChecked
47
+ */
48
+ static validateCookiePolicyDialog(expectedStatisticChecked, expectedThirdPartyChecked) {
49
+ // I should see the cookie policy
50
+ CookiePolicyModalSteps.getDialogComponent().should('be.visible');
51
+ CookiePolicyModalSteps.getBody().should('be.visible');
52
+ // And I expect to see that analytic and third party cookies are allowed
53
+ CookiePolicyModalSteps.getStatisticCookiesCheckbox().should(expectedStatisticChecked ? 'be.checked' : 'not.be.checked');
54
+ CookiePolicyModalSteps.getThirdPartyCookiesCheckbox().should(expectedThirdPartyChecked ? 'be.checked' : 'not.be.checked');
55
+ }
56
+ }