graphdb-workbench-tests 3.5.0-reactodia-poc-TR2 → 3.5.0-reactodia-resource-construct-TR1

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.
@@ -0,0 +1,45 @@
1
+ import { defineConfig } from 'cypress';
2
+ import setupPlugins from './plugins/index.js';
3
+
4
+ const isCoverage = process.env.COVERAGE === 'true';
5
+
6
+ const loadCodeCoverage = async (on, config) => {
7
+ const mod = await import('@bahmutov/cypress-code-coverage/plugin');
8
+ const plugin = ('default' in mod) ? mod.default : mod;
9
+ plugin(on, config);
10
+ };
11
+
12
+ export default defineConfig({
13
+ projectId: 'v35btb',
14
+ fixturesFolder: 'fixtures',
15
+ screenshotsFolder: 'report/screenshots',
16
+ videosFolder: 'report/videos',
17
+ video: true,
18
+ defaultCommandTimeout: 25000,
19
+ numTestsKeptInMemory: 10,
20
+ viewportWidth: 1600,
21
+ viewportHeight: 1200,
22
+ e2e: {
23
+ retries: {
24
+ runMode: 2,
25
+ openMode: 0
26
+ },
27
+ async setupNodeEvents(on, config) {
28
+ setupPlugins(on, config);
29
+ if (isCoverage) {
30
+ await loadCodeCoverage(on, config);
31
+ }
32
+ return config;
33
+ },
34
+ baseUrl: 'http://localhost:9000',
35
+ specPattern: 'e2e-legacy/guides/**/*.{js,jsx,ts,tsx}',
36
+ supportFile: 'support/e2e.js',
37
+ reporter: "cypress-multi-reporters",
38
+ reporterOptions: {
39
+ configFile: 'cypress-reporter-config.json'
40
+ }
41
+ },
42
+ env: {
43
+ set_default_user_data: true
44
+ }
45
+ });
@@ -9,8 +9,7 @@ import {GuidesStubs} from "../../../../stubs/guides/guides-stubs.js";
9
9
  import {TTYGStubs} from "../../../../stubs/ttyg/ttyg-stubs.js";
10
10
  import {RepositoriesStubs} from "../../../../stubs/repositories/repositories-stubs.js";
11
11
 
12
- // TODO: there is some issue with the context side field focus that breaks the test. Should be fixed soon
13
- describe.skip('ttyg configure agent guide', () => {
12
+ describe('ttyg configure agent guide', () => {
14
13
  let repositoryId;
15
14
 
16
15
  beforeEach(() => {
@@ -0,0 +1,96 @@
1
+ import {ReactodiaSteps} from '../../steps/reactodia-steps.js';
2
+ import {LanguageSelectorSteps} from '../../steps/language-selector-steps.js';
3
+ import {RepositorySelectorSteps} from '../../steps/repository-selector-steps.js';
4
+
5
+ const FILE_TO_IMPORT = 'resource-test-data.ttl';
6
+ const SEED_RESOURCE_ENCODED = 'http:%2F%2Fexample.com%2Fontology%23CustomerLoyalty';
7
+ const SEED_RESOURCE_LABEL = 'CustomerLoyalty';
8
+
9
+ const CONSTRUCT_QUERY = 'CONSTRUCT { <http://example.com/ontology#CustomerLoyalty> ?p ?o } WHERE { <http://example.com/ontology#CustomerLoyalty> ?p ?o }';
10
+ const CONSTRUCT_TARGET_LABEL = 'Metric';
11
+
12
+ describe('Reactodia graph explorer', () => {
13
+ let repositoryId;
14
+
15
+ beforeEach(() => {
16
+ repositoryId = 'repository-' + Date.now();
17
+ cy.createRepository({id: repositoryId});
18
+ cy.presetRepository(repositoryId);
19
+ cy.importServerFile(repositoryId, FILE_TO_IMPORT);
20
+ });
21
+
22
+ afterEach(() => {
23
+ cy.deleteRepository(repositoryId);
24
+ });
25
+
26
+ it('should mount the reactodia workspace when a repository is active', () => {
27
+ // Given I open the reactodia view without a start resource.
28
+ ReactodiaSteps.visit();
29
+
30
+ // Then I expect the reactodia workspace and its canvas to be rendered.
31
+ ReactodiaSteps.getWorkspace().should('exist');
32
+ ReactodiaSteps.getCanvas().should('exist');
33
+
34
+ // And I expect the canvas to start empty because no start resource was provided.
35
+ ReactodiaSteps.getElements().should('not.exist');
36
+ });
37
+
38
+ it('should place the start resource on the canvas as a seed', () => {
39
+ // Given I open the reactodia view with a start resource.
40
+ ReactodiaSteps.visit(SEED_RESOURCE_ENCODED);
41
+
42
+ // Then I expect the start resource to be placed on the canvas as a seed element.
43
+ ReactodiaSteps.getElements().should('have.length', 1);
44
+ ReactodiaSteps.getElement(SEED_RESOURCE_LABEL).should('exist');
45
+ });
46
+
47
+ it('should seed the canvas with the graph computed from a CONSTRUCT query', () => {
48
+ // Given I open the reactodia view with a CONSTRUCT query, as sent from the SPARQL editor.
49
+ ReactodiaSteps.visitWithQuery(CONSTRUCT_QUERY);
50
+
51
+ // Then I expect the computed graph to be seeded on the canvas: the subject and its related resource.
52
+ ReactodiaSteps.getElements().should('have.length', 2);
53
+ ReactodiaSteps.getElement(SEED_RESOURCE_LABEL).should('exist');
54
+ ReactodiaSteps.getElement(CONSTRUCT_TARGET_LABEL).should('exist');
55
+ });
56
+
57
+ it('should keep the displayed resources when the language is switched', () => {
58
+ // Given the reactodia view is opened with a start resource that gets seeded on the canvas.
59
+ ReactodiaSteps.visit(SEED_RESOURCE_ENCODED);
60
+ ReactodiaSteps.getElement(SEED_RESOURCE_LABEL).should('exist');
61
+ ReactodiaSteps.getElements().should('have.length', 1);
62
+
63
+ // When I switch the language.
64
+ LanguageSelectorSteps.switchToFr();
65
+
66
+ // Then I expect the same resources to remain visible because the layout is carried across the remount.
67
+ ReactodiaSteps.getElements().should('have.length', 1);
68
+ ReactodiaSteps.getElement(SEED_RESOURCE_LABEL).should('exist');
69
+ });
70
+
71
+ describe('Repository switch', () => {
72
+ let secondRepositoryId;
73
+
74
+ beforeEach(() => {
75
+ secondRepositoryId = 'repository-second-' + Date.now();
76
+ cy.createRepository({id: secondRepositoryId});
77
+ });
78
+
79
+ afterEach(() => {
80
+ cy.deleteRepository(secondRepositoryId);
81
+ });
82
+
83
+ it('should clear the canvas when the repository is switched', () => {
84
+ // Given the reactodia view is opened with a start resource that gets seeded on the canvas.
85
+ ReactodiaSteps.visit(SEED_RESOURCE_ENCODED);
86
+ ReactodiaSteps.getElements().should('have.length', 1);
87
+
88
+ // When I switch to another repository.
89
+ RepositorySelectorSteps.selectRepository(secondRepositoryId);
90
+
91
+ // Then I expect the workspace to still be mounted, but the canvas to be cleared.
92
+ ReactodiaSteps.getWorkspace().should('exist');
93
+ ReactodiaSteps.getElements().should('not.exist');
94
+ });
95
+ });
96
+ });
@@ -9,6 +9,7 @@ import {YasguiSteps} from "../../steps/yasgui/yasgui-steps";
9
9
  import {JsonLdModalSteps} from "../../steps/json-ld-modal-steps";
10
10
  import {GraphConfigStubs} from '../../stubs/graph-config-stubs.js';
11
11
  import {VisualGraphSplitButtonSteps} from '../../steps/visual-graph-split-button-steps.js';
12
+ import {ReactodiaSteps} from '../../steps/reactodia-steps.js';
12
13
 
13
14
  const FILE_TO_IMPORT = 'resource-test-data.ttl';
14
15
  const SUBJECT_RESOURCE_ENCODED = 'http:%2F%2Fexample.com%2Fontology%23CustomerLoyalty';
@@ -75,6 +76,18 @@ describe('Resource view', () => {
75
76
  VisualGraphSteps.verifyUrl();
76
77
  });
77
78
 
79
+ it('should open reactodia view when click on the "Visualize Reactodia" button', () => {
80
+ // When I am on resource view and page loaded a resource.
81
+ ResourceSteps.visit(`uri=${SUBJECT_RESOURCE_ENCODED}`);
82
+
83
+ // When I click on "Visualize Reactodia" button.
84
+ ResourceSteps.clickOnVisualizeReactodiaButton();
85
+
86
+ // Then I expect to be redirected to the reactodia view with the resource as the start uri.
87
+ ReactodiaSteps.verifyUrl();
88
+ ReactodiaSteps.verifyStartResourceUri(SUBJECT_RESOURCE);
89
+ });
90
+
78
91
  it('should open graphs-visualizations view when select a graph configuration', () => {
79
92
  // When I am on resource view and page loaded a resource.
80
93
  ResourceSteps.visit(`uri=${SUBJECT_RESOURCE_ENCODED}&role=subject`);
@@ -120,7 +133,7 @@ describe('Resource view', () => {
120
133
  YasrSteps.getResults().should('have.length', 24);
121
134
  });
122
135
 
123
- context('Same as', () => {
136
+ describe('Same as', () => {
124
137
 
125
138
  it('should display sameAs button when is enabled by user settings', () => {
126
139
  // When I am on resource view and page loaded a resource that has triplets in explicit and implicit context,
@@ -190,7 +203,7 @@ describe('Resource view', () => {
190
203
  });
191
204
  });
192
205
 
193
- context('Role tabs', () => {
206
+ describe('Role tabs', () => {
194
207
 
195
208
  it('should list the triples of a resource used as subject', () => {
196
209
  // When I am on resource view,
@@ -342,7 +355,7 @@ describe('Resource view', () => {
342
355
  });
343
356
  });
344
357
 
345
- context('Triple resource', () => {
358
+ describe('Triple resource', () => {
346
359
  it('should show triple resource', () => {
347
360
  // When I visit resource view with triple resource.
348
361
  ResourceSteps.visit(`triple=${TRIPLE_RESOURCE}&role=subject`);
@@ -381,7 +394,7 @@ describe('Resource view', () => {
381
394
  });
382
395
  });
383
396
 
384
- context('Download as', () => {
397
+ describe('Download as', () => {
385
398
  it('should download as JSON-LD and then restore defaults', () => {
386
399
  // Given I am in the Resource view
387
400
  ResourceSteps.visit(`uri=${SUBJECT_RESOURCE_ENCODED}&role=subject`);
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "graphdb-workbench-tests",
3
- "version": "3.5.0-reactodia-poc-TR2",
3
+ "version": "3.5.0-reactodia-resource-construct-TR1",
4
4
  "lockfileVersion": 3,
5
5
  "requires": true,
6
6
  "packages": {
7
7
  "": {
8
8
  "name": "graphdb-workbench-tests",
9
- "version": "3.5.0-reactodia-poc-TR2",
9
+ "version": "3.5.0-reactodia-resource-construct-TR1",
10
10
  "license": "Apache-2.0",
11
11
  "devDependencies": {
12
12
  "@bahmutov/cypress-code-coverage": "^2.7.2",
@@ -72,13 +72,13 @@
72
72
  "license": "MIT"
73
73
  },
74
74
  "node_modules/@babel/code-frame": {
75
- "version": "7.29.0",
76
- "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.29.0.tgz",
77
- "integrity": "sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw==",
75
+ "version": "7.29.7",
76
+ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.29.7.tgz",
77
+ "integrity": "sha512-Aup7aUOfpbAUg2ROOJN6Iw5f9DMBlzu0mIkm/malLQFN/YQgO48wCj0Kxa3sEHJvPVFg7siR+qRInwXd2qhQKw==",
78
78
  "dev": true,
79
79
  "license": "MIT",
80
80
  "dependencies": {
81
- "@babel/helper-validator-identifier": "^7.28.5",
81
+ "@babel/helper-validator-identifier": "^7.29.7",
82
82
  "js-tokens": "^4.0.0",
83
83
  "picocolors": "^1.1.1"
84
84
  },
@@ -87,9 +87,9 @@
87
87
  }
88
88
  },
89
89
  "node_modules/@babel/compat-data": {
90
- "version": "7.29.0",
91
- "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.29.0.tgz",
92
- "integrity": "sha512-T1NCJqT/j9+cn8fvkt7jtwbLBfLC/1y1c7NtCeXFRgzGTsafi68MRv8yzkYSapBnFA6L3U2VSc02ciDzoAJhJg==",
90
+ "version": "7.29.7",
91
+ "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.29.7.tgz",
92
+ "integrity": "sha512-locTkQyKvwIEgBzVrn8693ebc97F2U8ZHjbXwDXJ5Fn2TCpNwTlKcaKLkdHop5c/icOFE7qt7Q9JC5hnKNa6Gg==",
93
93
  "dev": true,
94
94
  "license": "MIT",
95
95
  "engines": {
@@ -97,21 +97,21 @@
97
97
  }
98
98
  },
99
99
  "node_modules/@babel/core": {
100
- "version": "7.29.0",
101
- "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.29.0.tgz",
102
- "integrity": "sha512-CGOfOJqWjg2qW/Mb6zNsDm+u5vFQ8DxXfbM09z69p5Z6+mE1ikP2jUXw+j42Pf1XTYED2Rni5f95npYeuwMDQA==",
100
+ "version": "7.29.7",
101
+ "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.29.7.tgz",
102
+ "integrity": "sha512-RgHBCvtjbOK2gXSNBNIkNoEc9qoVEtau3hj8gEqKQuL3HZAibKarWFEI3Lfm6EYKkLalOh8eSrj9b+ch9H/VBA==",
103
103
  "dev": true,
104
104
  "license": "MIT",
105
105
  "dependencies": {
106
- "@babel/code-frame": "^7.29.0",
107
- "@babel/generator": "^7.29.0",
108
- "@babel/helper-compilation-targets": "^7.28.6",
109
- "@babel/helper-module-transforms": "^7.28.6",
110
- "@babel/helpers": "^7.28.6",
111
- "@babel/parser": "^7.29.0",
112
- "@babel/template": "^7.28.6",
113
- "@babel/traverse": "^7.29.0",
114
- "@babel/types": "^7.29.0",
106
+ "@babel/code-frame": "^7.29.7",
107
+ "@babel/generator": "^7.29.7",
108
+ "@babel/helper-compilation-targets": "^7.29.7",
109
+ "@babel/helper-module-transforms": "^7.29.7",
110
+ "@babel/helpers": "^7.29.7",
111
+ "@babel/parser": "^7.29.7",
112
+ "@babel/template": "^7.29.7",
113
+ "@babel/traverse": "^7.29.7",
114
+ "@babel/types": "^7.29.7",
115
115
  "@jridgewell/remapping": "^2.3.5",
116
116
  "convert-source-map": "^2.0.0",
117
117
  "debug": "^4.1.0",
@@ -128,14 +128,14 @@
128
128
  }
129
129
  },
130
130
  "node_modules/@babel/generator": {
131
- "version": "7.29.1",
132
- "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.29.1.tgz",
133
- "integrity": "sha512-qsaF+9Qcm2Qv8SRIMMscAvG4O3lJ0F1GuMo5HR/Bp02LopNgnZBC/EkbevHFeGs4ls/oPz9v+Bsmzbkbe+0dUw==",
131
+ "version": "7.29.7",
132
+ "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.29.7.tgz",
133
+ "integrity": "sha512-DkXD5OJQaAQIdZ1bt3UZdEnHAn9Imd3IVBdX03UFe+ony9Ojw5pzr9YVKGDY1jt+Gcn/FnGkNf8r+Vj5NOJWtQ==",
134
134
  "dev": true,
135
135
  "license": "MIT",
136
136
  "dependencies": {
137
- "@babel/parser": "^7.29.0",
138
- "@babel/types": "^7.29.0",
137
+ "@babel/parser": "^7.29.7",
138
+ "@babel/types": "^7.29.7",
139
139
  "@jridgewell/gen-mapping": "^0.3.12",
140
140
  "@jridgewell/trace-mapping": "^0.3.28",
141
141
  "jsesc": "^3.0.2"
@@ -158,14 +158,14 @@
158
158
  }
159
159
  },
160
160
  "node_modules/@babel/helper-compilation-targets": {
161
- "version": "7.28.6",
162
- "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.28.6.tgz",
163
- "integrity": "sha512-JYtls3hqi15fcx5GaSNL7SCTJ2MNmjrkHXg4FSpOA/grxK8KwyZ5bubHsCq8FXCkua6xhuaaBit+3b7+VZRfcA==",
161
+ "version": "7.29.7",
162
+ "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.29.7.tgz",
163
+ "integrity": "sha512-wem6WaBj4NaVYVdNhLPPVacES6ZJ+KBBfSkTMD3YZxbP3rm3Di85tJU5ljaUNhaOynt+Aj0xruhYuzQBt8n71g==",
164
164
  "dev": true,
165
165
  "license": "MIT",
166
166
  "dependencies": {
167
- "@babel/compat-data": "^7.28.6",
168
- "@babel/helper-validator-option": "^7.27.1",
167
+ "@babel/compat-data": "^7.29.7",
168
+ "@babel/helper-validator-option": "^7.29.7",
169
169
  "browserslist": "^4.24.0",
170
170
  "lru-cache": "^5.1.1",
171
171
  "semver": "^6.3.1"
@@ -232,9 +232,9 @@
232
232
  }
233
233
  },
234
234
  "node_modules/@babel/helper-globals": {
235
- "version": "7.28.0",
236
- "resolved": "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.28.0.tgz",
237
- "integrity": "sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==",
235
+ "version": "7.29.7",
236
+ "resolved": "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.29.7.tgz",
237
+ "integrity": "sha512-3nQVUAtvkKH9zahfWgw96Jc/uFOmjACE1kQz82E2lqWmHBgjzbNlsC22nuQTfahmWeQtTq5nQ/4Nnd2A1wj4zA==",
238
238
  "dev": true,
239
239
  "license": "MIT",
240
240
  "engines": {
@@ -256,29 +256,29 @@
256
256
  }
257
257
  },
258
258
  "node_modules/@babel/helper-module-imports": {
259
- "version": "7.28.6",
260
- "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.28.6.tgz",
261
- "integrity": "sha512-l5XkZK7r7wa9LucGw9LwZyyCUscb4x37JWTPz7swwFE/0FMQAGpiWUZn8u9DzkSBWEcK25jmvubfpw2dnAMdbw==",
259
+ "version": "7.29.7",
260
+ "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.29.7.tgz",
261
+ "integrity": "sha512-ejHwrQQYcm9xnTivShn2IDOlIzInN34AXskvq9QicvCtEzq1Vzclu/tKF8Jq1Cg8JG2GL6/EmjgsCT7lXepE3g==",
262
262
  "dev": true,
263
263
  "license": "MIT",
264
264
  "dependencies": {
265
- "@babel/traverse": "^7.28.6",
266
- "@babel/types": "^7.28.6"
265
+ "@babel/traverse": "^7.29.7",
266
+ "@babel/types": "^7.29.7"
267
267
  },
268
268
  "engines": {
269
269
  "node": ">=6.9.0"
270
270
  }
271
271
  },
272
272
  "node_modules/@babel/helper-module-transforms": {
273
- "version": "7.28.6",
274
- "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.28.6.tgz",
275
- "integrity": "sha512-67oXFAYr2cDLDVGLXTEABjdBJZ6drElUSI7WKp70NrpyISso3plG9SAGEF6y7zbha/wOzUByWWTJvEDVNIUGcA==",
273
+ "version": "7.29.7",
274
+ "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.29.7.tgz",
275
+ "integrity": "sha512-UPUVSyXbOh627KiCIGQSgwWzGeBKLkaJ9PJEdrngIwMSzxLR4jS4+f1f1jb7VzBbg8nFLaYotvVPFCTqdrmTAg==",
276
276
  "dev": true,
277
277
  "license": "MIT",
278
278
  "dependencies": {
279
- "@babel/helper-module-imports": "^7.28.6",
280
- "@babel/helper-validator-identifier": "^7.28.5",
281
- "@babel/traverse": "^7.28.6"
279
+ "@babel/helper-module-imports": "^7.29.7",
280
+ "@babel/helper-validator-identifier": "^7.29.7",
281
+ "@babel/traverse": "^7.29.7"
282
282
  },
283
283
  "engines": {
284
284
  "node": ">=6.9.0"
@@ -361,9 +361,9 @@
361
361
  }
362
362
  },
363
363
  "node_modules/@babel/helper-string-parser": {
364
- "version": "7.27.1",
365
- "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz",
366
- "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==",
364
+ "version": "7.29.7",
365
+ "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.29.7.tgz",
366
+ "integrity": "sha512-Pb5ijPrZ89GDH8223L4UP8i6QApWxs04RbPQJTeWDV0/keR2E36MeKnyr6LYmUUvqRRI+Iv87SuF1W6ErINzYw==",
367
367
  "dev": true,
368
368
  "license": "MIT",
369
369
  "engines": {
@@ -371,9 +371,9 @@
371
371
  }
372
372
  },
373
373
  "node_modules/@babel/helper-validator-identifier": {
374
- "version": "7.28.5",
375
- "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz",
376
- "integrity": "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==",
374
+ "version": "7.29.7",
375
+ "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.29.7.tgz",
376
+ "integrity": "sha512-qehxGkRj55h/ff8EMaJ+cYhyaKlHIxqYDn682wQD7RNp9UujOQsHog2uS0r2vzr4pW+sXf90NeeayjcNaX3fFg==",
377
377
  "dev": true,
378
378
  "license": "MIT",
379
379
  "engines": {
@@ -381,9 +381,9 @@
381
381
  }
382
382
  },
383
383
  "node_modules/@babel/helper-validator-option": {
384
- "version": "7.27.1",
385
- "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.27.1.tgz",
386
- "integrity": "sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==",
384
+ "version": "7.29.7",
385
+ "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.29.7.tgz",
386
+ "integrity": "sha512-N9ZErrD+yW5geCDtBqnOoxmR8+tNKiGuxKlDpuJxfsqpa2dFcexaziGAE/qoHLiDDreVNMupxGmSoNlyvsA3gw==",
387
387
  "dev": true,
388
388
  "license": "MIT",
389
389
  "engines": {
@@ -406,27 +406,27 @@
406
406
  }
407
407
  },
408
408
  "node_modules/@babel/helpers": {
409
- "version": "7.28.6",
410
- "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.28.6.tgz",
411
- "integrity": "sha512-xOBvwq86HHdB7WUDTfKfT/Vuxh7gElQ+Sfti2Cy6yIWNW05P8iUslOVcZ4/sKbE+/jQaukQAdz/gf3724kYdqw==",
409
+ "version": "7.29.7",
410
+ "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.29.7.tgz",
411
+ "integrity": "sha512-1k2lAGRMfHTcwuNYcCNUmaUffmQv8KWMfh2iJUUeRlwlwH4FdNG7mfPI10NPfLHJFThE4Tyr4mv7kTNZOiPuBg==",
412
412
  "dev": true,
413
413
  "license": "MIT",
414
414
  "dependencies": {
415
- "@babel/template": "^7.28.6",
416
- "@babel/types": "^7.28.6"
415
+ "@babel/template": "^7.29.7",
416
+ "@babel/types": "^7.29.7"
417
417
  },
418
418
  "engines": {
419
419
  "node": ">=6.9.0"
420
420
  }
421
421
  },
422
422
  "node_modules/@babel/parser": {
423
- "version": "7.29.0",
424
- "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.0.tgz",
425
- "integrity": "sha512-IyDgFV5GeDUVX4YdF/3CPULtVGSXXMLh1xVIgdCgxApktqnQV0r7/8Nqthg+8YLGaAtdyIlo2qIdZrbCv4+7ww==",
423
+ "version": "7.29.7",
424
+ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.7.tgz",
425
+ "integrity": "sha512-hnORnjP/1P/zFEndoeX+n+t1RwWRJiJpM/jO7FW32Kn9r5+sJB2JWOdYo4L6k78j15eCwY3Gm/7364B1EMwtNg==",
426
426
  "dev": true,
427
427
  "license": "MIT",
428
428
  "dependencies": {
429
- "@babel/types": "^7.29.0"
429
+ "@babel/types": "^7.29.7"
430
430
  },
431
431
  "bin": {
432
432
  "parser": "bin/babel-parser.js"
@@ -1741,33 +1741,33 @@
1741
1741
  }
1742
1742
  },
1743
1743
  "node_modules/@babel/template": {
1744
- "version": "7.28.6",
1745
- "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.28.6.tgz",
1746
- "integrity": "sha512-YA6Ma2KsCdGb+WC6UpBVFJGXL58MDA6oyONbjyF/+5sBgxY/dwkhLogbMT2GXXyU84/IhRw/2D1Os1B/giz+BQ==",
1744
+ "version": "7.29.7",
1745
+ "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.29.7.tgz",
1746
+ "integrity": "sha512-puq+Gf35oI24FeN11LkoUQFqv9uwNeWpxXZi/Ji3rRIoKAzKnxRaZ+Gkj0vKS9ZCiTESfng1N9LyOyXvo+m+Gg==",
1747
1747
  "dev": true,
1748
1748
  "license": "MIT",
1749
1749
  "dependencies": {
1750
- "@babel/code-frame": "^7.28.6",
1751
- "@babel/parser": "^7.28.6",
1752
- "@babel/types": "^7.28.6"
1750
+ "@babel/code-frame": "^7.29.7",
1751
+ "@babel/parser": "^7.29.7",
1752
+ "@babel/types": "^7.29.7"
1753
1753
  },
1754
1754
  "engines": {
1755
1755
  "node": ">=6.9.0"
1756
1756
  }
1757
1757
  },
1758
1758
  "node_modules/@babel/traverse": {
1759
- "version": "7.29.0",
1760
- "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.29.0.tgz",
1761
- "integrity": "sha512-4HPiQr0X7+waHfyXPZpWPfWL/J7dcN1mx9gL6WdQVMbPnF3+ZhSMs8tCxN7oHddJE9fhNE7+lxdnlyemKfJRuA==",
1759
+ "version": "7.29.7",
1760
+ "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.29.7.tgz",
1761
+ "integrity": "sha512-EhlfNQtZ+NK22w5BM61ciuiq1m58ed33Wr1Xan//ZRTy6hgjnwyCffRYwzsGXdASJSUJ1guZILsErh1eQcl+zw==",
1762
1762
  "dev": true,
1763
1763
  "license": "MIT",
1764
1764
  "dependencies": {
1765
- "@babel/code-frame": "^7.29.0",
1766
- "@babel/generator": "^7.29.0",
1767
- "@babel/helper-globals": "^7.28.0",
1768
- "@babel/parser": "^7.29.0",
1769
- "@babel/template": "^7.28.6",
1770
- "@babel/types": "^7.29.0",
1765
+ "@babel/code-frame": "^7.29.7",
1766
+ "@babel/generator": "^7.29.7",
1767
+ "@babel/helper-globals": "^7.29.7",
1768
+ "@babel/parser": "^7.29.7",
1769
+ "@babel/template": "^7.29.7",
1770
+ "@babel/types": "^7.29.7",
1771
1771
  "debug": "^4.3.1"
1772
1772
  },
1773
1773
  "engines": {
@@ -1775,14 +1775,14 @@
1775
1775
  }
1776
1776
  },
1777
1777
  "node_modules/@babel/types": {
1778
- "version": "7.29.0",
1779
- "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.0.tgz",
1780
- "integrity": "sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==",
1778
+ "version": "7.29.7",
1779
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.7.tgz",
1780
+ "integrity": "sha512-4zBIxpPzowiZpusoFkyGVwakdRJUyuH5PxQ/PrqghfdFWWasvnCdPfQXHrenDai+gyLARulZjZowCOj6fjT4pA==",
1781
1781
  "dev": true,
1782
1782
  "license": "MIT",
1783
1783
  "dependencies": {
1784
- "@babel/helper-string-parser": "^7.27.1",
1785
- "@babel/helper-validator-identifier": "^7.28.5"
1784
+ "@babel/helper-string-parser": "^7.29.7",
1785
+ "@babel/helper-validator-identifier": "^7.29.7"
1786
1786
  },
1787
1787
  "engines": {
1788
1788
  "node": ">=6.9.0"
@@ -2083,10 +2083,20 @@
2083
2083
  }
2084
2084
  },
2085
2085
  "node_modules/@eslint/eslintrc/node_modules/js-yaml": {
2086
- "version": "4.1.1",
2087
- "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.1.tgz",
2088
- "integrity": "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==",
2086
+ "version": "4.2.0",
2087
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.2.0.tgz",
2088
+ "integrity": "sha512-ePWsvanv0DWuDRsW8dnt+R4jQ31SCRCQ7hhNcPXZPsoBZiemuZNYGf7adZdqX2D86j6rvKp3RpCxVTSb8WQlOw==",
2089
2089
  "dev": true,
2090
+ "funding": [
2091
+ {
2092
+ "type": "github",
2093
+ "url": "https://github.com/sponsors/puzrin"
2094
+ },
2095
+ {
2096
+ "type": "github",
2097
+ "url": "https://github.com/sponsors/nodeca"
2098
+ }
2099
+ ],
2090
2100
  "license": "MIT",
2091
2101
  "dependencies": {
2092
2102
  "argparse": "^2.0.1"
@@ -3562,13 +3572,13 @@
3562
3572
  }
3563
3573
  },
3564
3574
  "node_modules/browserify-sign": {
3565
- "version": "4.2.5",
3566
- "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.5.tgz",
3567
- "integrity": "sha512-C2AUdAJg6rlM2W5QMp2Q4KGQMVBwR1lIimTsUnutJ8bMpW5B52pGpR2gEnNBNwijumDo5FojQ0L9JrXA8m4YEw==",
3575
+ "version": "4.2.6",
3576
+ "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.6.tgz",
3577
+ "integrity": "sha512-sd+Q65fjlWCYWtZKXiKfrUc8d+4jtp/8f0W2NkwzLtoW4bI6UDnWusLWIurHnmurW0XShIRxpwiOX4EoPtXUAg==",
3568
3578
  "dev": true,
3569
3579
  "license": "ISC",
3570
3580
  "dependencies": {
3571
- "bn.js": "^5.2.2",
3581
+ "bn.js": "^5.2.3",
3572
3582
  "browserify-rsa": "^4.1.1",
3573
3583
  "create-hash": "^1.2.0",
3574
3584
  "create-hmac": "^1.1.7",
@@ -5633,17 +5643,17 @@
5633
5643
  }
5634
5644
  },
5635
5645
  "node_modules/form-data": {
5636
- "version": "4.0.5",
5637
- "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.5.tgz",
5638
- "integrity": "sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w==",
5646
+ "version": "4.0.6",
5647
+ "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.6.tgz",
5648
+ "integrity": "sha512-vKatAh4SlVfgbv+YtmhiRjhEMJsYpsG1Y2rMQtR+SVSbytsSD1YGzDIcrAJmdFec88u/+VoGmxnl+80gL1tRCQ==",
5639
5649
  "dev": true,
5640
5650
  "license": "MIT",
5641
5651
  "dependencies": {
5642
5652
  "asynckit": "^0.4.0",
5643
5653
  "combined-stream": "^1.0.8",
5644
5654
  "es-set-tostringtag": "^2.1.0",
5645
- "hasown": "^2.0.2",
5646
- "mime-types": "^2.1.12"
5655
+ "hasown": "^2.0.4",
5656
+ "mime-types": "^2.1.35"
5647
5657
  },
5648
5658
  "engines": {
5649
5659
  "node": ">= 6"
@@ -6058,9 +6068,9 @@
6058
6068
  }
6059
6069
  },
6060
6070
  "node_modules/hasown": {
6061
- "version": "2.0.2",
6062
- "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz",
6063
- "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==",
6071
+ "version": "2.0.4",
6072
+ "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.4.tgz",
6073
+ "integrity": "sha512-T2UbfbBEF32wiepXIsMlTW9+dDYC6wMh/t/vYA4tuOMKqWz/n3vr1NFSxQiyP+zk2mXsoMA/i/7qV6LKut1t1A==",
6064
6074
  "dev": true,
6065
6075
  "license": "MIT",
6066
6076
  "dependencies": {
@@ -7654,10 +7664,20 @@
7654
7664
  }
7655
7665
  },
7656
7666
  "node_modules/mocha/node_modules/js-yaml": {
7657
- "version": "4.1.1",
7658
- "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.1.tgz",
7659
- "integrity": "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==",
7667
+ "version": "4.2.0",
7668
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.2.0.tgz",
7669
+ "integrity": "sha512-ePWsvanv0DWuDRsW8dnt+R4jQ31SCRCQ7hhNcPXZPsoBZiemuZNYGf7adZdqX2D86j6rvKp3RpCxVTSb8WQlOw==",
7660
7670
  "dev": true,
7671
+ "funding": [
7672
+ {
7673
+ "type": "github",
7674
+ "url": "https://github.com/sponsors/puzrin"
7675
+ },
7676
+ {
7677
+ "type": "github",
7678
+ "url": "https://github.com/sponsors/nodeca"
7679
+ }
7680
+ ],
7661
7681
  "license": "MIT",
7662
7682
  "peer": true,
7663
7683
  "dependencies": {
@@ -9303,9 +9323,9 @@
9303
9323
  }
9304
9324
  },
9305
9325
  "node_modules/shell-quote": {
9306
- "version": "1.8.3",
9307
- "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.3.tgz",
9308
- "integrity": "sha512-ObmnIF4hXNg1BqhnHmgbDETF8dLPCggZWBjkQfhZpbszZnYur5DUljTcCHii5LC3J5E0yeO/1LIMyH+UvHQgyw==",
9326
+ "version": "1.8.4",
9327
+ "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.4.tgz",
9328
+ "integrity": "sha512-VsC6n6vz1ihYYyZZwX7YZSF5l5x36ca17OC+a69h94YqB7X6XLwf+5MOgynYir2SLFUbl8gIYvBo8K8RoNQ6bQ==",
9309
9329
  "dev": true,
9310
9330
  "license": "MIT",
9311
9331
  "engines": {
@@ -9974,9 +9994,9 @@
9974
9994
  "license": "MIT"
9975
9995
  },
9976
9996
  "node_modules/tmp": {
9977
- "version": "0.2.5",
9978
- "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.5.tgz",
9979
- "integrity": "sha512-voyz6MApa1rQGUxT3E+BK7/ROe8itEx7vD8/HEvt4xwXucvQ5G5oeEiHkmHZJuBO21RpOf+YYm9MOivj709jow==",
9997
+ "version": "0.2.7",
9998
+ "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.7.tgz",
9999
+ "integrity": "sha512-e0votIpp4Uo2AJYSzVHV6xCcawuiez3DzqDAbrTc3YxBkplN6e+dM13ZeIcZnDg/QpSuU2zfZ3rzwY8ukEnaXw==",
9980
10000
  "dev": true,
9981
10001
  "license": "MIT",
9982
10002
  "engines": {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "graphdb-workbench-tests",
3
- "version": "3.5.0-reactodia-poc-TR2",
3
+ "version": "3.5.0-reactodia-resource-construct-TR1",
4
4
  "description": "Cypress tests for GraphDB workbench",
5
5
  "type": "module",
6
6
  "scripts": {
@@ -10,7 +10,8 @@
10
10
  "cy:open-legacy": "cypress open --config-file cypress-legacy.config.js",
11
11
  "cy:open-security": "cypress open --config-file cypress-security.config.js",
12
12
  "cy:open-flaky": "cypress open --config-file cypress-flaky.config.js",
13
- "cy:guides": "cypress run --config-file cypress-legacy.config.js --spec \"e2e-legacy/guides/**/*.spec.js\" --browser chrome",
13
+ "cy:open-guides": "cypress open --config-file cypress-guides.config.js",
14
+ "cy:run-guides": "cypress run --config-file cypress-guides.config.js",
14
15
  "cy:run": "npm run cy:run-legacy && cypress run",
15
16
  "cy:run:partial": "cypress run --config-file cypress-legacy.config.js --spec \"e2e-legacy/**/jdbc-create.spec.js\" --browser chrome",
16
17
  "cy:run-legacy": "cypress run --config-file cypress-legacy.config.js --browser chrome",
@@ -0,0 +1,42 @@
1
+ import {BaseSteps} from "./base-steps.js";
2
+
3
+ const VIEW_URL = '/reactodia';
4
+
5
+ export class ReactodiaSteps extends BaseSteps {
6
+
7
+ static visit(uri) {
8
+ cy.visit(`${VIEW_URL}${uri ? ('?uri=' + uri) : ''}`);
9
+ }
10
+
11
+ static visitWithQuery(query, {inference = false, sameAs = false} = {}) {
12
+ cy.visit(`${VIEW_URL}?query=${encodeURIComponent(query)}&inference=${inference}&sameAs=${sameAs}`);
13
+ }
14
+
15
+ static verifyUrl() {
16
+ this.validateUrl(`${Cypress.config('baseUrl')}${VIEW_URL}`);
17
+ }
18
+
19
+ static verifyStartResourceUri(uri) {
20
+ cy.getQueryParam('uri').should('eq', uri);
21
+ }
22
+
23
+ static getComponent() {
24
+ return cy.get('graphwise-reactodia');
25
+ }
26
+
27
+ static getWorkspace() {
28
+ return ReactodiaSteps.getComponent().find('.reactodia-workspace');
29
+ }
30
+
31
+ static getCanvas() {
32
+ return ReactodiaSteps.getComponent().find('.reactodia-canvas');
33
+ }
34
+
35
+ static getElements() {
36
+ return ReactodiaSteps.getCanvas().find('[data-element-id]');
37
+ }
38
+
39
+ static getElement(text) {
40
+ return ReactodiaSteps.getCanvas().find(`[data-element-id]`).contains(text).first();
41
+ }
42
+ }
@@ -147,4 +147,12 @@ export class ResourceSteps {
147
147
  static getDataTable() {
148
148
  return cy.get('.dataTable');
149
149
  }
150
+
151
+ static getVisualizeReactodiaButton() {
152
+ return cy.getByTestId('visualize-reactodia-button');
153
+ }
154
+
155
+ static clickOnVisualizeReactodiaButton() {
156
+ ResourceSteps.getVisualizeReactodiaButton().click();
157
+ }
150
158
  }