graphdb-workbench-tests 3.1.0-WBM-8 → 3.1.0-plugins1

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 (124) hide show
  1. package/.nycrc +10 -0
  2. package/cypress-legacy.config.js +9 -1
  3. package/cypress-security.config.js +40 -0
  4. package/cypress.config.js +3 -1
  5. package/e2e-flaky/import/import-user-data-url.spec.js +63 -0
  6. package/e2e-legacy/cluster/edit-cluster-nodes-modal.spec.js +44 -0
  7. package/e2e-legacy/explore/class-hierarchy/class.hierarchy.spec.js +1 -2
  8. package/e2e-legacy/explore/graphs-overview/graphs.overview.spec.js +2 -3
  9. package/e2e-legacy/explore/visual-graph/graphs-config.spec.js +5 -18
  10. package/e2e-legacy/explore/visual-graph/visual.graph.spec.js +1 -2
  11. package/e2e-legacy/graphql/activate-deactivate-graphql-endpoint.spec.js +1 -1
  12. package/e2e-legacy/graphql/create-graphql-endpoint.spec.js +1 -3
  13. package/e2e-legacy/graphql/delete-graphql-endpoint.spec.js +1 -1
  14. package/e2e-legacy/graphql/edit-graphql-enpoint.spec.js +1 -1
  15. package/e2e-legacy/graphql/export-graphql-endpoint-definition.spec.js +1 -1
  16. package/e2e-legacy/graphql/filter-graphql-endpoints-on-management-view.spec.js +2 -2
  17. package/e2e-legacy/graphql/graphql-endpoint-management-view.spec.js +5 -5
  18. package/e2e-legacy/graphql/graphql-playground.spec.js +1 -1
  19. package/e2e-legacy/graphql/import-graphql-endpoint-definitions.spec.js +1 -7
  20. package/e2e-legacy/graphql/set-default-graphql-endpoint.spec.js +1 -1
  21. package/e2e-legacy/help/guides/guides-with-repository.spec.js +32 -0
  22. package/e2e-legacy/help/guides/guides-without-repository.spec.js +20 -0
  23. package/e2e-legacy/{guides → help/guides}/movies-interactive-guide.spec.js +2 -2
  24. package/e2e-legacy/{guides → help/guides}/star-wars-interactive-guide.js +2 -2
  25. package/e2e-legacy/help/rest-api-documentatio/rest-api-documentation-with-repository.spec.js +32 -0
  26. package/e2e-legacy/help/rest-api-documentatio/rest-api-documentation-without-repository.spec.js +20 -0
  27. package/e2e-legacy/help/system-information/system-information-with-repository.spec.js +32 -0
  28. package/e2e-legacy/help/system-information/system-information-without-repository.spec.js +20 -0
  29. package/e2e-legacy/home/cookie-policy.spec.js +78 -59
  30. package/e2e-legacy/home/create-repository.spec.js +2 -6
  31. package/e2e-legacy/home/documentation-link.spec.js +31 -33
  32. package/e2e-legacy/home/google-analytics.spec.js +4 -6
  33. package/e2e-legacy/home/rdf-resource-search.spec.js +106 -138
  34. package/e2e-legacy/home/view-resource-autocomplete.spec.js +30 -21
  35. package/e2e-legacy/import/import-server-files-batch-operations.spec.js +1 -2
  36. package/e2e-legacy/import/import-server-files.spec.js +1 -2
  37. package/e2e-legacy/import/import-user-data-url.spec.js +1 -25
  38. package/e2e-legacy/import/import-user-data.spec.js +4 -2
  39. package/e2e-legacy/import/import-view.spec.js +1 -2
  40. package/e2e-legacy/monitor/global-operation-statuses-component.spec.js +13 -9
  41. package/e2e-legacy/repository/attach-remote-location.spec.js +2 -5
  42. package/e2e-legacy/repository/ontop-repository.spec.js +3 -12
  43. package/e2e-legacy/repository/repositories.spec.js +35 -46
  44. package/e2e-legacy/setup/aclmanagement/create-rule.spec.js +1 -2
  45. package/e2e-legacy/setup/aclmanagement/edit-rule.spec.js +1 -2
  46. package/e2e-legacy/setup/aclmanagement/reorder-rules.spec.js +1 -2
  47. package/e2e-legacy/setup/aclmanagement/scopes.spec.js +1 -2
  48. package/e2e-legacy/setup/autocomplete/autocomplete-with-repository.spec.js +40 -0
  49. package/e2e-legacy/setup/autocomplete/autocomplete-without-repository.spec.js +27 -0
  50. package/e2e-legacy/setup/{autocomplete.spec.js → autocomplete/autocomplete.spec.js} +5 -6
  51. package/e2e-legacy/setup/cluster/cluster-initial-state-with-cluster.spec.js +34 -0
  52. package/e2e-legacy/setup/cluster/cluster-initial-state-without-cluster.spec.js +25 -0
  53. package/e2e-legacy/setup/connectors-lucene.spec.js +1 -2
  54. package/e2e-legacy/setup/jdbc/jdbc-create.spec.js +2 -2
  55. package/e2e-legacy/setup/namespaces/namespaces-with-repository.spec.js +44 -0
  56. package/e2e-legacy/setup/namespaces/namespaces-without-repository.spec.js +27 -0
  57. package/e2e-legacy/setup/{namespaces.spec.js → namespaces/namespaces.spec.js} +4 -4
  58. package/e2e-legacy/setup/plugins/plugins-with-repository.spec.js +38 -0
  59. package/e2e-legacy/setup/plugins/plugins-without-repository.spec.js +28 -0
  60. package/e2e-legacy/setup/{plugins.spec.js → plugins/plugins.spec.js} +3 -3
  61. package/e2e-legacy/setup/sparql-template/sparql-template-create.js +10 -3
  62. package/e2e-legacy/setup/users-and-access/user-and-access.spec.js +38 -9
  63. package/e2e-legacy/sparql-editor/saved-query/edit-query.spec.js +3 -6
  64. package/e2e-legacy/sparql-editor/saved-query/readonly-query.spec.js +7 -13
  65. package/e2e-legacy/sparql-editor/saved-query/share-query.spec.js +2 -4
  66. package/e2e-legacy/sparql-editor/sparql-editor.spec.js +1 -4
  67. package/e2e-legacy/ttyg/agent-list.spec.js +38 -6
  68. package/e2e-legacy/ttyg/chat-list.spec.js +1 -2
  69. package/e2e-legacy/ttyg/clone-agent.spec.js +1 -0
  70. package/e2e-legacy/ttyg/create-agent.spec.js +10 -16
  71. package/e2e-legacy/ttyg/edit-agent.spec.js +69 -9
  72. package/e2e-legacy/ttyg/ttyg-initial-state-with-configured-api-key.spec.js +46 -0
  73. package/e2e-legacy/ttyg/ttyg-initial-state-with-selected-repository.spec.js +45 -0
  74. package/e2e-legacy/ttyg/ttyg-initial-state-without-repositories.spec.js +21 -0
  75. package/e2e-legacy/ttyg/ttyg-permission.spec.js +28 -20
  76. package/e2e-legacy/ttyg/ttyg-view.spec.js +1 -1
  77. package/e2e-security/setup/home/cookie-policy.spec.js +64 -0
  78. package/e2e-security/setup/users-and-access/create-user-permissions.spec.js +184 -0
  79. package/e2e-security/setup/users-and-access/graphql-user.spec.js +123 -0
  80. package/e2e-security/setup/users-and-access/repo-admin-role.spec.js +69 -0
  81. package/e2e-security/setup/users-and-access/turn-on-security-and-password-change.spec.js +87 -0
  82. package/e2e-security/setup/users-and-access/user-and-access.spec.js +87 -0
  83. package/e2e-security/setup/users-and-access/users-and-access-initial-state.spec.js +38 -0
  84. package/fixtures/repositories/free-access.json +13 -0
  85. package/fixtures/repositories/get-remote-and-local-repositories.json +34 -0
  86. package/fixtures/ttyg/agent/get-agent-defaults-assistant-api.json +44 -0
  87. package/fixtures/ttyg/agent/get-agent-defaults.json +2 -0
  88. package/npm-shrinkwrap.json +7633 -1817
  89. package/package.json +13 -7
  90. package/plugins/index.js +3 -2
  91. package/steps/base-steps.js +4 -0
  92. package/steps/cluster/cluster-page-steps.js +12 -2
  93. package/steps/error-steps.js +4 -7
  94. package/steps/graphql/graphql-endpoint-management-steps.js +2 -2
  95. package/steps/guides/guide-steps.js +20 -1
  96. package/steps/home-steps.js +59 -37
  97. package/steps/import/import-steps.js +8 -3
  98. package/steps/login-steps.js +14 -3
  99. package/steps/main-menu-steps.js +76 -6
  100. package/steps/operations-statuses-component-steps.js +5 -10
  101. package/steps/rdf-resource-search-steps.js +55 -0
  102. package/steps/repository-steps.js +17 -17
  103. package/steps/rest-api-documentation-steps.js +15 -0
  104. package/steps/setup/autocomplete-steps.js +17 -3
  105. package/steps/setup/namespace-steps.js +8 -2
  106. package/steps/setup/plugins-steps.js +11 -1
  107. package/steps/setup/settings-steps.js +18 -0
  108. package/steps/setup/user-and-access-steps.js +28 -2
  109. package/steps/system-information-steps.js +70 -0
  110. package/steps/ttyg/ttyg-agent-settings-modal.steps.js +74 -11
  111. package/steps/ttyg/ttyg-view-steps.js +39 -6
  112. package/steps/widgets/active-repository-widget-steps.js +4 -0
  113. package/steps/yasgui/yasr-steps.js +4 -0
  114. package/stubs/browser-stubs.js +21 -0
  115. package/stubs/environment-stubs.js +9 -1
  116. package/stubs/repositories/repositories-stubs.js +4 -0
  117. package/stubs/security-stubs.js +4 -0
  118. package/stubs/ttyg/ttyg-stubs.js +18 -2
  119. package/support/e2e.js +2 -1
  120. package/support/repository-commands.js +14 -1
  121. package/e2e-flaky/setup/users-and-access/security-and-free-access.spec.js +0 -57
  122. package/e2e-flaky/ttyg/ttyg-permission.spec.js +0 -67
  123. package/fixtures/locale-en.json +0 -3361
  124. /package/e2e-legacy/help/{system-information.spec.js → system-information/system-information.spec.js} +0 -0
package/.nycrc ADDED
@@ -0,0 +1,10 @@
1
+ {
2
+ "temp-directory": "../.nyc_output",
3
+ "include": [
4
+ "packages/legacy-workbench/src/**/*.js"
5
+ ],
6
+ "exclude": [
7
+ "packages/root-config/**",
8
+ "packages/shared-components/**"
9
+ ]
10
+ }
@@ -1,5 +1,7 @@
1
1
  const {defineConfig} = require('cypress');
2
2
 
3
+ const isCoverage = process.env.COVERAGE === 'true';
4
+
3
5
  module.exports = defineConfig({
4
6
  projectId: 'v35btb',
5
7
  fixturesFolder: 'fixtures',
@@ -8,6 +10,8 @@ module.exports = defineConfig({
8
10
  video: true,
9
11
  defaultCommandTimeout: 25000,
10
12
  numTestsKeptInMemory: 10,
13
+ viewportWidth: 1280,
14
+ viewportHeight: 720,
11
15
  e2e: {
12
16
  retries: {
13
17
  runMode: 2,
@@ -16,7 +20,11 @@ module.exports = defineConfig({
16
20
  // We've imported your old cypress plugins here.
17
21
  // You may want to clean this up later by importing these.
18
22
  setupNodeEvents(on, config) {
19
- return require('./plugins')(on, config);
23
+ require('./plugins')(on, config);
24
+ if (isCoverage) {
25
+ require('@bahmutov/cypress-code-coverage/plugin')(on, config)
26
+ }
27
+ return config;
20
28
  },
21
29
  baseUrl: 'http://localhost:9000',
22
30
  specPattern: 'e2e-legacy/**/*.{js,jsx,ts,tsx}',
@@ -0,0 +1,40 @@
1
+ const {defineConfig} = require('cypress');
2
+
3
+ const isCoverage = process.env.COVERAGE === 'true';
4
+
5
+ module.exports = defineConfig({
6
+ projectId: 'v35btb',
7
+ fixturesFolder: 'fixtures',
8
+ screenshotsFolder: 'report/screenshots',
9
+ videosFolder: 'report/videos',
10
+ video: true,
11
+ defaultCommandTimeout: 25000,
12
+ numTestsKeptInMemory: 10,
13
+ viewportWidth: 1280,
14
+ viewportHeight: 720,
15
+ e2e: {
16
+ retries: {
17
+ runMode: 2,
18
+ openMode: 0
19
+ },
20
+ // We've imported your old cypress plugins here.
21
+ // You may want to clean this up later by importing these.
22
+ setupNodeEvents(on, config) {
23
+ require('./plugins')(on, config);
24
+ if (isCoverage) {
25
+ require('@bahmutov/cypress-code-coverage/plugin')(on, config)
26
+ }
27
+ return config;
28
+ },
29
+ baseUrl: 'http://localhost:9000',
30
+ specPattern: 'e2e-security/**/*.{js,jsx,ts,tsx}',
31
+ supportFile: 'support/e2e.js',
32
+ reporter: "cypress-multi-reporters",
33
+ reporterOptions: {
34
+ configFile: 'cypress-reporter-config.json'
35
+ }
36
+ },
37
+ env: {
38
+ set_default_user_data: true
39
+ }
40
+ });
package/cypress.config.js CHANGED
@@ -8,8 +8,10 @@ module.exports = defineConfig({
8
8
  video: true,
9
9
  screenshotOnRunFailure: true,
10
10
  trashAssetsBeforeRuns: true,
11
- defaultCommandTimeout: 40000,
11
+ defaultCommandTimeout: 10000,
12
12
  numTestsKeptInMemory: 10,
13
+ viewportWidth: 1280,
14
+ viewportHeight: 720,
13
15
  e2e: {
14
16
  retries: {
15
17
  runMode: 2,
@@ -0,0 +1,63 @@
1
+ import {ImportUserDataSteps} from "../../steps/import/import-user-data-steps";
2
+ import {ImportSettingsDialogSteps} from "../../steps/import/import-settings-dialog-steps";
3
+
4
+ describe('Import user data: URL import', () => {
5
+
6
+ let repositoryId;
7
+
8
+ const IMPORT_URL = 'https://www.w3.org/TR/owl-guide/wine.rdf';
9
+ const JSONLD_FORMAT = 'JSON-LD';
10
+ const VALID_URL_RDF_FORMAT = 'RDF/XML';
11
+ const RDF_ERROR_MESSAGE = 'RDF Parse Error:';
12
+ const IMPORT_JSONLD_URL = 'https://example.com/0007-context.jsonld';
13
+
14
+ beforeEach(() => {
15
+ repositoryId = 'user-import-' + Date.now();
16
+ cy.createRepository({id: repositoryId});
17
+ ImportUserDataSteps.visitUserImport(repositoryId);
18
+ });
19
+
20
+ afterEach(() => {
21
+ cy.deleteRepository(repositoryId);
22
+ });
23
+
24
+ // Test fails because GDB waits for the import link to be resolved and since it is invalid it waits for a timeout, blocking all other requests
25
+ it('should import JSON-LD file via URL with correct request body', () => {
26
+ cy.intercept('GET', `/rest/repositories/${repositoryId}/import/upload`).as('upload');
27
+
28
+ ImportUserDataSteps.stubPostJSONLDFromURL(repositoryId);
29
+ ImportUserDataSteps.openImportURLDialog(IMPORT_JSONLD_URL);
30
+ ImportUserDataSteps.selectRDFFormat(JSONLD_FORMAT);
31
+ ImportUserDataSteps.clickImportUrlButton();
32
+ ImportSettingsDialogSteps.import();
33
+ cy.wait('@postJsonldUrl').then((xhr) => {
34
+ expect(xhr.request.body.name).to.eq('https://example.com/0007-context.jsonld');
35
+ expect(xhr.request.body.data).to.eq('https://example.com/0007-context.jsonld');
36
+ expect(xhr.request.body.type).to.eq('url');
37
+ expect(xhr.request.body.hasContextLink).to.be.true;
38
+ });
39
+ cy.waitUntil(() =>
40
+ cy.wait('@upload').then((xhr) => {
41
+ console.log(xhr.response.body)
42
+ return xhr.response.body[0]?.status === 'ERROR'
43
+ }), {timeout: 10000, interval: 1000}
44
+ )
45
+ });
46
+
47
+ it('should show error on invalid JSON-LD URL', () => {
48
+ cy.intercept('GET', `/rest/repositories/${repositoryId}/import/upload`).as('upload');
49
+
50
+ ImportUserDataSteps.stubPostJSONLDFromURL();
51
+ ImportUserDataSteps.openImportURLDialog(IMPORT_JSONLD_URL);
52
+ ImportUserDataSteps.selectRDFFormat(JSONLD_FORMAT);
53
+ ImportUserDataSteps.clickImportUrlButton();
54
+ ImportSettingsDialogSteps.import();
55
+ cy.waitUntil(() =>
56
+ cy.wait('@upload').then((xhr) => {
57
+ console.log(xhr.response.body)
58
+ return xhr.response.body[0]?.status === 'ERROR'
59
+ }), {timeout: 10000, interval: 1000}
60
+ )
61
+ ImportUserDataSteps.checkImportedResource(0, IMPORT_JSONLD_URL, 'https://example.com/0007-context.jsonld');
62
+ });
63
+ });
@@ -358,6 +358,50 @@ describe('Cluster management', () => {
358
358
  ApplicationSteps.getSuccessNotifications().contains('Cluster updated successfully');
359
359
  });
360
360
 
361
+ it('should not replace node after replace action is canceled and a new node is added', () => {
362
+ const clusterLocations = ['http://pc-desktop:7200', 'http://pc-desktop:7201', 'http://pc-desktop:7202'];
363
+ ClusterStubs.stubClusterConfigByList(clusterLocations);
364
+ ClusterStubs.stubClusterGroupStatus();
365
+ ClusterStubs.stubClusterNodeStatus();
366
+ RemoteLocationStubs.stubGetRemoteLocations(3);
367
+ RemoteLocationStubs.stubRemoteLocationFilter();
368
+ RemoteLocationStubs.stubRemoteLocationStatusInCluster();
369
+ RemoteLocationStubs.stubRemoteLocationCheckByAddress([
370
+ {uri: 'pc-desktop:7200', rpc: 'pc-desktop:7300'},
371
+ {uri: 'pc-desktop:7201', rpc: 'pc-desktop:7301'},
372
+ {uri: 'pc-desktop:7202', rpc: 'pc-desktop:7302'}
373
+ ]);
374
+
375
+ // Given I have opened the cluster management page
376
+ ClusterPageSteps.visit();
377
+ // When I click on update cluster
378
+ ClusterPageSteps.updateCluster();
379
+ ClusterNodesConfigurationSteps.getClusterNodesConfigurationModal().should('be.visible');
380
+ // When I replace a node
381
+ ClusterNodesConfigurationSteps.clickReplaceNodeButtonByEndpoint('http://pc-desktop:7201');
382
+ // I expect to see replacing confirmation dialog
383
+ ModalDialogSteps.getDialogBody().should('contain', 'Are you sure you want to change the location?');
384
+ // When I confirm
385
+ ModalDialogSteps.clickOnConfirmButton();
386
+ // Then I should see the edit node row
387
+ ClusterNodesConfigurationSteps.getEditNodeRow().should('be.visible');
388
+ // Then I cancel the action
389
+ ClusterNodesConfigurationSteps.clickCancelNodeButton();
390
+ // Then I add a new node
391
+ ClusterNodesConfigurationSteps.clickAddNodeButton();
392
+ const newNodeEndpoint = 'http://pc-desktop:7233';
393
+ ClusterNodesConfigurationSteps.enterNodeEndpoint(newNodeEndpoint);
394
+ // And I save the new node
395
+ RemoteLocationStubs.stubAddRemoteLocation();
396
+ ClusterNodesConfigurationSteps.clickSaveNodeButton();
397
+ // Then the originally replaced node (canceled action) should not be replaced
398
+ ClusterNodesConfigurationSteps.getNodeStatusByEndpoint('http://pc-desktop:7201').should('eq', '');
399
+ // And the new node should be added
400
+ ClusterNodesConfigurationSteps.getNodeStatusByEndpoint('http://pc-desktop:7233').should('eq', 'Node will be added');
401
+ ClusterStubs.stubClusterGroupStatusAfterAdd();
402
+ ClusterNodesConfigurationSteps.clickOkButton();
403
+ });
404
+
361
405
  it('Should be able to open a create cluster dialog', () => {
362
406
  ClusterStubs.stubNoClusterNodeStatus();
363
407
  ClusterStubs.stubNoClusterGroupStatus();
@@ -5,8 +5,7 @@ const CLASS_COUNT_OF_NEWS_GRAPH = 35;
5
5
  const FILE_TO_IMPORT = 'wine.rdf';
6
6
  const CLASS_HIERARCHY = 'class hierarchy';
7
7
 
8
- // TODO: Fix me. Broken due to migration (Error: beforeEach)
9
- describe.skip('Class hierarchy screen validation', () => {
8
+ describe('Class hierarchy screen validation', () => {
10
9
  let repositoryId;
11
10
 
12
11
  beforeEach(() => {
@@ -6,8 +6,7 @@ const EXPORT_GRAPHS_TABLE_ID = '#export-graphs';
6
6
  const ROWS_PER_PAGE_20 = '1';
7
7
  const ROWS_PER_PAGE_50 = '2';
8
8
 
9
- // TODO: Fix me. Broken due to migration (Error: beforeEach)
10
- describe.skip('Graphs overview screen validation', () => {
9
+ describe('Graphs overview screen validation', () => {
11
10
 
12
11
  let repositoryId;
13
12
 
@@ -126,7 +125,7 @@ describe.skip('Graphs overview screen validation', () => {
126
125
  verifyVisibleGraphsCount(1);
127
126
  verifyGraphExistence('The default graph');
128
127
  // open default graph through the link and verify that the table view is rendered
129
- cy.contains('The default graph').click();
128
+ cy.getByTestId('graph-is-not-shaql').contains('The default graph').trigger('mouseover').click();
130
129
  cy.url().should('contain', Cypress.config('baseUrl') + '/resource');
131
130
  YasrSteps.getResultTableHeader().should('be.visible');
132
131
  YasrSteps.getResultTableHeaderColumns().should('have.length', 5);
@@ -9,8 +9,7 @@ const FILE_TO_IMPORT = 'wine.rdf';
9
9
  const QUERY_START = `# 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
10
  const QUERY_EXPAND_NODE = `# Note that ?node is the node you clicked and must be used in the query\nPREFIX rank: <http://www.ontotext.com/owlim/RDFRank#>\nPREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>\n\nCONSTRUCT {\n # The triples that will be added to the visual graph\n ?node ?edge ?newNodeLTR .\n ?newNodeRTL ?edge ?node .\n} WHERE {\n {\n # Left to right relations (starting IRI is the subject)\n ?node ?edge ?newNodeLTR .\n\n # Select only IRIs\n FILTER(isIRI(?newNodeLTR) || rdf:isTriple(?newNodeLTR))\n } UNION {\n # Right to left relations (starting IRI is the object)\n ?newNodeRTL ?edge ?node .\n\n # Select only IRIs\n FILTER(isIRI(?newNodeRTL) || rdf:isTriple(?newNodeRTL))\n }\n FILTER(isIRI(?node) || rdf:isTriple(?node))\n} ORDER BY ?edge`;
11
11
 
12
- // TODO: Fix me. Broken due to migration (Error unknown)
13
- describe.skip('Graphs config', () => {
12
+ describe('Graphs config', () => {
14
13
 
15
14
  let repositoryId = 'graphRepo' + Date.now();
16
15
  let graphConfigName = 'graph-config' + Date.now();
@@ -37,10 +36,7 @@ describe.skip('Graphs config', () => {
37
36
  cy.deleteGraphConfig(graphConfigName);
38
37
  });
39
38
 
40
- /**
41
- * TODO: Fix me. Broken due to migration (Error: unknown)
42
- */
43
- it.skip('Should be able to switch between wizard tabs using the previous-next buttons', () => {
39
+ it('Should be able to switch between wizard tabs using the previous-next buttons', () => {
44
40
  // Given I have started a create config wizard
45
41
  startCreateConfigWizard();
46
42
  // Then I expect to see the first wizard tab
@@ -221,10 +217,7 @@ describe.skip('Graphs config', () => {
221
217
  VisualGraphSteps.getGraphConfigSearchPanelName().should('contain', graphConfigName);
222
218
  });
223
219
 
224
- /**
225
- * TODO: Fix me. Broken due to migration (Error: unknown)
226
- */
227
- it.skip('Should create graph config with fixed node', () => {
220
+ it('Should create graph config with fixed node', () => {
228
221
  cy.enableAutocomplete(repositoryId);
229
222
  // Given I have started a create config wizard
230
223
  startCreateConfigWizard();
@@ -306,10 +299,7 @@ describe.skip('Graphs config', () => {
306
299
  VisualGraphSteps.getGraphVisualizationPane().should('be.visible');
307
300
  });
308
301
 
309
- /**
310
- * TODO: Fix me. Broken due to migration (Error: unknown)
311
- */
312
- it.skip('Should be able to update existing graph config', () => {
302
+ it('Should be able to update existing graph config', () => {
313
303
  // Given I have created a graph config with start query
314
304
  startCreateConfigWizard();
315
305
  VisualGraphSteps.typeGraphConfigName(graphConfigName);
@@ -385,10 +375,7 @@ describe.skip('Graphs config', () => {
385
375
  cy.url().should('eq', Cypress.config('baseUrl') + '/graphs-visualizations');
386
376
  });
387
377
 
388
- /**
389
- * TODO: Fix me. Broken due to migration (Changes in main menu)
390
- */
391
- it.skip('Should prevent leaving with confirmation when expand query is changed', () => {
378
+ it('Should prevent leaving with confirmation when expand query is changed', () => {
392
379
  // Given I have created a graph config with start query
393
380
  startCreateConfigWizard();
394
381
  VisualGraphSteps.typeGraphConfigName(graphConfigName);
@@ -6,8 +6,7 @@ import {AutocompleteStubs} from "../../../stubs/autocomplete/autocomplete-stubs"
6
6
  const FILE_TO_IMPORT = 'wine.rdf';
7
7
  const VALID_RESOURCE = 'USRegion';
8
8
 
9
- // TODO: Fix me. Broken due to migration (Error: unknown)
10
- describe.skip('Visual graph screen validation', () => {
9
+ describe('Visual graph screen validation', () => {
11
10
 
12
11
  let repositoryId;
13
12
 
@@ -1,7 +1,7 @@
1
1
  import {GraphqlEndpointManagementSteps} from "../../steps/graphql/graphql-endpoint-management-steps";
2
2
  import {ApplicationSteps} from "../../steps/application-steps";
3
3
 
4
- describe.skip('GraphQL: activate and deactivate endpoint', () => {
4
+ describe('GraphQL: activate and deactivate endpoint', () => {
5
5
  let repositoryId;
6
6
 
7
7
  beforeEach(() => {
@@ -4,7 +4,7 @@ import {CreateGraphqlEndpointSteps} from "../../steps/graphql/create-graphql-end
4
4
  import {RepositoriesStubs} from "../../stubs/repositories/repositories-stubs";
5
5
  import {ModalDialogSteps} from "../../steps/modal-dialog-steps";
6
6
 
7
- describe.skip('Graphql: create endpoint', () => {
7
+ describe('Graphql: create endpoint', () => {
8
8
  let repositoryId;
9
9
 
10
10
  beforeEach(() => {
@@ -245,7 +245,6 @@ describe.skip('Graphql: create endpoint', () => {
245
245
  // Then I should be on the generate endpoint step
246
246
  CreateGraphqlEndpointSteps.getActiveStep().should('contain', 'Create');
247
247
  CreateGraphqlEndpointSteps.getGenerateEndpointView().should('be.visible');
248
-
249
248
  });
250
249
 
251
250
  it('should be able to cancel the endpoint creation wizard', () => {
@@ -277,5 +276,4 @@ describe.skip('Graphql: create endpoint', () => {
277
276
  ModalDialogSteps.getDialog().should('not.exist');
278
277
  cy.url().should('include', '/graphql/endpoints');
279
278
  });
280
-
281
279
  });
@@ -2,7 +2,7 @@ import {GraphqlEndpointManagementSteps} from "../../steps/graphql/graphql-endpoi
2
2
  import {ModalDialogSteps} from "../../steps/modal-dialog-steps";
3
3
  import {ApplicationSteps} from "../../steps/application-steps";
4
4
 
5
- describe.skip('Graphql: delete endpoint', () => {
5
+ describe('Graphql: delete endpoint', () => {
6
6
  let repositoryId;
7
7
 
8
8
  beforeEach(() => {
@@ -3,7 +3,7 @@ import {GraphqlEndpointManagementSteps} from "../../steps/graphql/graphql-endpoi
3
3
  import {EditGraphqlEndpointSteps} from "../../steps/graphql/edit-graphql-endpoint-steps";
4
4
  import {ApplicationSteps} from "../../steps/application-steps";
5
5
 
6
- describe.skip('Graphql: edit endpoint settings', () => {
6
+ describe('Graphql: edit endpoint settings', () => {
7
7
  let repositoryId;
8
8
 
9
9
  beforeEach(() => {
@@ -1,7 +1,7 @@
1
1
  import {GraphqlEndpointManagementSteps} from "../../steps/graphql/graphql-endpoint-management-steps";
2
2
  import {GraphqlStubs} from "../../stubs/graphql/graphql-stubs";
3
3
 
4
- describe.skip('Graphql: export endpoint definition', () => {
4
+ describe('Graphql: export endpoint definition', () => {
5
5
  let repositoryId;
6
6
 
7
7
  beforeEach(() => {
@@ -1,7 +1,7 @@
1
1
  import {GraphqlEndpointManagementSteps} from "../../steps/graphql/graphql-endpoint-management-steps";
2
2
  import {ApplicationSteps} from "../../steps/application-steps";
3
3
 
4
- describe.skip('GraphQL endpoints filtering', () => {
4
+ describe('GraphQL endpoints filtering', () => {
5
5
  let repositoryId;
6
6
 
7
7
  beforeEach(() => {
@@ -45,7 +45,7 @@ describe.skip('GraphQL endpoints filtering', () => {
45
45
  GraphqlEndpointManagementSteps.getEndpointsInfo().should('have.length', 3);
46
46
  });
47
47
 
48
- it.only('should render no results banner when all endpoints are filtered', () => {
48
+ it('should render no results banner when all endpoints are filtered', () => {
49
49
  // Given I have a repository with active GraphQL endpoints
50
50
  // When I visit the endpoint management view
51
51
  GraphqlEndpointManagementSteps.visit();
@@ -3,7 +3,7 @@ import {GraphqlStubs} from "../../stubs/graphql/graphql-stubs";
3
3
  import {GraphqlPlaygroundSteps} from "../../steps/graphql/graphql-playground-steps";
4
4
  import {ApplicationSteps} from "../../steps/application-steps";
5
5
 
6
- describe.skip('GraphQL endpoints management', () => {
6
+ describe('GraphQL endpoints management', () => {
7
7
  let repositoryId;
8
8
 
9
9
  beforeEach(() => {
@@ -69,6 +69,8 @@ describe.skip('GraphQL endpoints management', () => {
69
69
  // Given I have a repository with active GraphQL endpoints
70
70
  // When I visit the endpoint management view
71
71
  GraphqlEndpointManagementSteps.visit();
72
+ // And I toggle the 3rd endpoint's active state to inactive
73
+ GraphqlEndpointManagementSteps.toggleEndpointActiveState(2);
72
74
  // Then I should see the endpoints info
73
75
  GraphqlEndpointManagementSteps.getEndpointTable().within(() => {
74
76
  cy.get('thead th').should('have.length', 10);
@@ -85,7 +87,6 @@ describe.skip('GraphQL endpoints management', () => {
85
87
  GraphqlEndpointManagementSteps.getEndpointsInfo().should('have.length', 3);
86
88
  GraphqlEndpointManagementSteps.verifyEndpointInfo([
87
89
  {
88
- status: 'deleted',
89
90
  id: 'swapi',
90
91
  label: 'Ontotext Star Wars Ontology',
91
92
  description: '',
@@ -96,7 +97,6 @@ describe.skip('GraphQL endpoints management', () => {
96
97
  properties: 68
97
98
  },
98
99
  {
99
- status: 'deleted',
100
100
  id: 'swapi-planets',
101
101
  label: 'Star Wars planets API',
102
102
  description: '',
@@ -107,12 +107,12 @@ describe.skip('GraphQL endpoints management', () => {
107
107
  properties: 10
108
108
  },
109
109
  {
110
- status: 'deleted',
110
+ status: "deleted",
111
111
  id: 'swapi-species',
112
112
  label: 'Star Wars species API',
113
113
  description: '',
114
114
  default: false,
115
- active: true,
115
+ active: false,
116
116
  modified: ApplicationSteps.getCurrentDate(),
117
117
  types: 2,
118
118
  properties: 17
@@ -3,7 +3,7 @@ import {GraphiqlPlaygroundSteps} from "../../steps/graphql/graphiql-playground-s
3
3
  import {GraphiQLEditorToolsSteps} from "../../steps/graphql/graphiql-editor-tools-steps";
4
4
  import {LanguageSelectorSteps} from "../../steps/language-selector-steps";
5
5
 
6
- describe.skip('GraphQL Playground', () => {
6
+ describe('GraphQL Playground', () => {
7
7
  let repositoryId;
8
8
 
9
9
  beforeEach(() => {
@@ -3,7 +3,7 @@ import {ImportEndpointDefinitionModalSteps} from "../../steps/graphql/import-end
3
3
  import {GenerationReportModalSteps} from "../../steps/graphql/generation-report-modal-steps";
4
4
  import {ApplicationSteps} from "../../steps/application-steps";
5
5
 
6
- describe.skip('Graphql: import endpoint definitions', () => {
6
+ describe('Graphql: import endpoint definitions', () => {
7
7
  let repositoryId;
8
8
  const swapiDefinitionPath = 'graphql/soml/swapi-schema.yaml';
9
9
  const swapiPlanetsDefinitionPath = 'graphql/soml/swapi-schema-planets.yaml';
@@ -73,7 +73,6 @@ describe.skip('Graphql: import endpoint definitions', () => {
73
73
 
74
74
  GraphqlEndpointManagementSteps.verifyEndpointInfo([
75
75
  {
76
- status: 'deleted',
77
76
  id: 'swapi',
78
77
  label: 'Ontotext Star Wars Ontology',
79
78
  description: '',
@@ -167,7 +166,6 @@ describe.skip('Graphql: import endpoint definitions', () => {
167
166
  GraphqlEndpointManagementSteps.getEndpointsInfo().should('have.length', 3);
168
167
  GraphqlEndpointManagementSteps.verifyEndpointInfo([
169
168
  {
170
- status: 'deleted',
171
169
  id: 'swapi',
172
170
  label: 'Ontotext Star Wars Ontology',
173
171
  description: '',
@@ -178,7 +176,6 @@ describe.skip('Graphql: import endpoint definitions', () => {
178
176
  properties: 68
179
177
  },
180
178
  {
181
- status: 'deleted',
182
179
  id: 'swapi-planets',
183
180
  label: 'Star Wars planets API',
184
181
  description: '',
@@ -189,7 +186,6 @@ describe.skip('Graphql: import endpoint definitions', () => {
189
186
  properties: 10
190
187
  },
191
188
  {
192
- status: 'deleted',
193
189
  id: 'swapi-species',
194
190
  label: 'Star Wars species API',
195
191
  description: '',
@@ -233,7 +229,6 @@ describe.skip('Graphql: import endpoint definitions', () => {
233
229
  GraphqlEndpointManagementSteps.getEndpointsInfo().should('have.length', 2);
234
230
  GraphqlEndpointManagementSteps.verifyEndpointInfo([
235
231
  {
236
- status: 'deleted',
237
232
  id: 'swapi-planets',
238
233
  label: 'Star Wars planets API',
239
234
  description: '',
@@ -244,7 +239,6 @@ describe.skip('Graphql: import endpoint definitions', () => {
244
239
  properties: 10
245
240
  },
246
241
  {
247
- status: 'deleted',
248
242
  id: 'swapi-species',
249
243
  label: 'Star Wars species API',
250
244
  description: '',
@@ -2,7 +2,7 @@ import {GraphqlEndpointManagementSteps} from "../../steps/graphql/graphql-endpoi
2
2
  import {ApplicationSteps} from "../../steps/application-steps";
3
3
  import {GraphqlPlaygroundSteps} from "../../steps/graphql/graphql-playground-steps";
4
4
 
5
- describe.skip('Graphql: set default endpoint', () => {
5
+ describe('Graphql: set default endpoint', () => {
6
6
  let repositoryId;
7
7
 
8
8
  beforeEach(() => {
@@ -0,0 +1,32 @@
1
+ import HomeSteps from "../../../steps/home-steps";
2
+ import {MainMenuSteps} from "../../../steps/main-menu-steps";
3
+ import {GuideSteps} from "../../../steps/guides/guide-steps";
4
+
5
+ describe('Interactive guides with selected repository', () => {
6
+ let repositoryId;
7
+
8
+ beforeEach(() => {
9
+ repositoryId = 'interactive-guides-init-' + Date.now();
10
+ cy.createRepository({id: repositoryId});
11
+ cy.presetRepository(repositoryId);
12
+ });
13
+
14
+ afterEach(() => {
15
+ cy.deleteRepository(repositoryId);
16
+ });
17
+
18
+ it('Should display the correct initial state when navigating via URL', () => {
19
+ // Given, I visit the Interactive guides page via URL with a repository selected
20
+ GuideSteps.visit();
21
+ // Then,
22
+ GuideSteps.verifyInitialState();
23
+ });
24
+
25
+ it('Should display the correct initial state when navigating via the navigation bar', () => {
26
+ // Given, I visit the Interactive guides page via the navigation menu with a repository selected
27
+ HomeSteps.visit();
28
+ MainMenuSteps.clickOnInteractiveGuides();
29
+ // Then,
30
+ GuideSteps.verifyInitialState();
31
+ });
32
+ })
@@ -0,0 +1,20 @@
1
+ import HomeSteps from "../../../steps/home-steps";
2
+ import {MainMenuSteps} from "../../../steps/main-menu-steps";
3
+ import {GuideSteps} from "../../../steps/guides/guide-steps";
4
+
5
+ describe('Interactive guides without selected repository', () => {
6
+ it('Should display the correct initial state when navigating via URL', () => {
7
+ // Given, I visit the Interactive guides page via URL without a repository selected
8
+ GuideSteps.visit();
9
+ // Then,
10
+ GuideSteps.verifyInitialState();
11
+ });
12
+
13
+ it('Should display the correct initial state when navigating via the navigation menu', () => {
14
+ // Given, I visit the Interactive guides page via the navigation menu without a repository selected
15
+ HomeSteps.visit();
16
+ MainMenuSteps.clickOnInteractiveGuides();
17
+ // Then,
18
+ GuideSteps.verifyInitialState();
19
+ });
20
+ })
@@ -1,5 +1,5 @@
1
- import {GuideSteps} from "../../steps/guides/guide-steps";
2
- import {MoviesGuideSteps} from "../../steps/guides/movies-guide-steps";
1
+ import {GuideSteps} from "../../../steps/guides/guide-steps";
2
+ import {MoviesGuideSteps} from "../../../steps/guides/movies-guide-steps";
3
3
 
4
4
  const MOVIES_FILE_FOR_IMPORT = 'movies.ttl';
5
5
 
@@ -1,5 +1,5 @@
1
- import {GuideSteps} from "../../steps/guides/guide-steps";
2
- import {StarWarsGuideSteps} from "../../steps/guides/star-wars-guide-steps";
1
+ import {GuideSteps} from "../../../steps/guides/guide-steps";
2
+ import {StarWarsGuideSteps} from "../../../steps/guides/star-wars-guide-steps";
3
3
 
4
4
  const STAR_WARS_FILE_FOR_IMPORT = 'starwars.ttl';
5
5
 
@@ -0,0 +1,32 @@
1
+ import HomeSteps from "../../../steps/home-steps";
2
+ import {MainMenuSteps} from "../../../steps/main-menu-steps";
3
+ import {RestApiDocumentationSteps} from "../../../steps/rest-api-documentation-steps";
4
+
5
+ describe('REST API Documentation with selected repository', () => {
6
+ let repositoryId;
7
+
8
+ beforeEach(() => {
9
+ repositoryId = 'rest-api-documentation-init-' + Date.now();
10
+ cy.createRepository({id: repositoryId});
11
+ cy.presetRepository(repositoryId);
12
+ });
13
+
14
+ afterEach(() => {
15
+ cy.deleteRepository(repositoryId);
16
+ });
17
+
18
+ it('Should display the correct initial state when navigating via URL', () => {
19
+ // Given, I visit the REST API Documentation page via URL with a repository selected
20
+ RestApiDocumentationSteps.visit();
21
+ // Then,
22
+ RestApiDocumentationSteps.verifyInitialState();
23
+ });
24
+
25
+ it('Should display the correct initial state when navigating via the navigation bar', () => {
26
+ // Given, I visit the REST API Documentation page via the navigation menu with a repository selected
27
+ HomeSteps.visit();
28
+ MainMenuSteps.clickOnRestApiDocumentation();
29
+ // Then,
30
+ RestApiDocumentationSteps.verifyInitialState();
31
+ });
32
+ })
@@ -0,0 +1,20 @@
1
+ import HomeSteps from "../../../steps/home-steps";
2
+ import {MainMenuSteps} from "../../../steps/main-menu-steps";
3
+ import {RestApiDocumentationSteps} from "../../../steps/rest-api-documentation-steps";
4
+
5
+ describe('REST API Documentation without selected repository', () => {
6
+ it('Should display the correct initial state when navigating via URL', () => {
7
+ // Given, I visit the REST API Documentation page via URL without a repository selected
8
+ RestApiDocumentationSteps.visit();
9
+ // Then,
10
+ RestApiDocumentationSteps.verifyInitialState();
11
+ });
12
+
13
+ it('Should display the correct initial state when navigating via the navigation menu', () => {
14
+ // Given, I visit the REST API Documentation page via the navigation menu without a repository selected
15
+ HomeSteps.visit();
16
+ MainMenuSteps.clickOnRestApiDocumentation();
17
+ // Then,
18
+ RestApiDocumentationSteps.verifyInitialState();
19
+ });
20
+ })