graphdb-workbench-tests 3.4.0-TR4 → 3.4.0-TR5

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 (365) hide show
  1. package/.editorconfig +17 -0
  2. package/.nycrc +10 -0
  3. package/cypress-flaky.config.js +20 -6
  4. package/cypress-legacy.config.js +47 -0
  5. package/cypress-security.config.js +36 -0
  6. package/cypress.config.js +45 -6
  7. package/{integration-flaky → e2e-flaky}/explore/visual.graph.spec.js +4 -1
  8. package/{integration-flaky → e2e-flaky}/import/import-server-files-operations.spec.js +2 -2
  9. package/{integration-flaky → e2e-flaky}/import/import-user-data-batch-operations.spec.js +3 -3
  10. package/e2e-flaky/import/import-user-data-url.spec.js +63 -0
  11. package/{integration-flaky → e2e-flaky}/setup/sparql-template-create.js +10 -18
  12. package/{integration-flaky → e2e-flaky}/sparql-editor/actions/execute-update-query.spec.js +2 -12
  13. package/{integration-flaky → e2e-flaky}/sparql-editor/actions/share-query.spec.js +1 -7
  14. package/{integration-flaky → e2e-flaky}/sparql-editor/yasr/table-plugin.spec.js +3 -7
  15. package/{integration → e2e-legacy}/cluster/cluster-states.spec.js +3 -3
  16. package/e2e-legacy/explore/class-hierarchy/class-hierarchy-with-selected-repository-without-class-hierarchy.spec.js +42 -0
  17. package/e2e-legacy/explore/class-hierarchy/class-hierarchy-with-selected-repository.spec.js +43 -0
  18. package/e2e-legacy/explore/class-hierarchy/class-hierarchy-without-selected-repository.spec.js +30 -0
  19. package/{integration/explore → e2e-legacy/explore/class-hierarchy}/class.hierarchy.spec.js +1 -1
  20. package/e2e-legacy/explore/class-relationships/class-relationships-repository-with-data.spec.js +42 -0
  21. package/e2e-legacy/explore/class-relationships/class-relationships-with-selected-repository.spec.js +39 -0
  22. package/e2e-legacy/explore/class-relationships/class-relationships-without-selected-repository.spec.js +21 -0
  23. package/{integration/explore/class.relationships.spec.js → e2e-legacy/explore/class-relationships/class-relationships.spec.js} +20 -50
  24. package/{integration/explore → e2e-legacy/explore/graphs-overview}/graphs.overview.spec.js +4 -4
  25. package/e2e-legacy/explore/graphs-overview/initial-state/graphs-overview-with-selected-repository.spec.js +44 -0
  26. package/e2e-legacy/explore/graphs-overview/initial-state/graphs-overview-without-selected-repository.spec.js +32 -0
  27. package/e2e-legacy/explore/similarity-index/similarity-index-with-repository.spec.js +38 -0
  28. package/e2e-legacy/explore/similarity-index/similarity-index-without-repository.spec.js +21 -0
  29. package/{integration → e2e-legacy}/explore/visual-graph/graphs-config.spec.js +5 -10
  30. package/e2e-legacy/explore/visual-graph/node-info-panel.spec.js +58 -0
  31. package/e2e-legacy/explore/visual-graph/visual-graph-links-limit.spec.js +142 -0
  32. package/{integration → e2e-legacy}/explore/visual-graph/visual-graph-node-labels.spec.js +14 -2
  33. package/e2e-legacy/explore/visual-graph/visual-graph-with-selected-repository.js +38 -0
  34. package/e2e-legacy/explore/visual-graph/visual-graph-without-selected-repository.js +21 -0
  35. package/{integration → e2e-legacy}/explore/visual-graph/visual.graph.spec.js +75 -96
  36. package/{integration → e2e-legacy}/graphql/create-graphql-endpoint.spec.js +0 -2
  37. package/{integration → e2e-legacy}/graphql/edit-graphql-enpoint.spec.js +1 -1
  38. package/{integration → e2e-legacy}/graphql/filter-graphql-endpoints-on-management-view.spec.js +1 -1
  39. package/{integration → e2e-legacy}/graphql/graphql-endpoint-management-view.spec.js +4 -4
  40. package/e2e-legacy/graphql/graphql-endpoint-management-with-endpoints.spec.js +43 -0
  41. package/e2e-legacy/graphql/graphql-endpoint-management-with-selected-repository.spec.js +39 -0
  42. package/e2e-legacy/graphql/graphql-endpoint-management-without-selected-repository.spec.js +21 -0
  43. package/e2e-legacy/graphql/graphql-playground-with-endpoints.spec.js +40 -0
  44. package/e2e-legacy/graphql/graphql-playground-with-selected-repository.spec.js +38 -0
  45. package/e2e-legacy/graphql/graphql-playground-without-selected-repository.spec.js +22 -0
  46. package/{integration → e2e-legacy}/graphql/graphql-playground.spec.js +1 -1
  47. package/e2e-legacy/graphql/graphql-theme.spec.js +73 -0
  48. package/{integration → e2e-legacy}/graphql/import-graphql-endpoint-definitions.spec.js +0 -6
  49. package/e2e-legacy/guides/autocomplete/enable-autocomplete-guide.spec.js +49 -0
  50. package/e2e-legacy/guides/class-hierarcy/class-hierarchy-guide.spec.js +89 -0
  51. package/e2e-legacy/guides/class-relations/class-relations-guide.spec.js +76 -0
  52. package/e2e-legacy/guides/connectors/connectors-guide.spec.js +163 -0
  53. package/e2e-legacy/guides/create-similarity-index/create-similarity-index-guide.spec.js +74 -0
  54. package/e2e-legacy/guides/download-guide-resource/download-guide-resource-guide.js +55 -0
  55. package/e2e-legacy/guides/execute-sparql-query/execute-sparql-query-guide.spec.js +92 -0
  56. package/e2e-legacy/guides/import-rdf-file/confirm-duplicate-rdf-file.spec.js +63 -0
  57. package/e2e-legacy/guides/import-rdf-file/import-rdf-file.spec.js +105 -0
  58. package/e2e-legacy/guides/main-menu/main-menu-guide.spec.js +302 -0
  59. package/e2e-legacy/guides/navigation/navigation-guide.spec.js +64 -0
  60. package/e2e-legacy/guides/rdf-rank/rdf-rank-guide.spec.js +42 -0
  61. package/e2e-legacy/guides/repositories/create-repository-guide.spec.js +69 -0
  62. package/e2e-legacy/guides/table-graph-explore/table-graph-explore-guide.spec.js +168 -0
  63. package/e2e-legacy/guides/ttyg/configure-agent/configure-agent-guide.spec.js +158 -0
  64. package/e2e-legacy/guides/ttyg/conversation/ttyg-conversation-guide.spec.js +92 -0
  65. package/e2e-legacy/guides/ttyg/edit-agent/edit-ttyg-agent-guide.spec.js +88 -0
  66. package/e2e-legacy/guides/visual-graph/visual-graph-guide.spec.js +372 -0
  67. package/e2e-legacy/guides/welcome/welcome-guide.spec.js +36 -0
  68. package/e2e-legacy/help/guides/guides-autostart.spec.js +126 -0
  69. package/e2e-legacy/help/guides/guides-confirm-cancel-dialog.js +83 -0
  70. package/e2e-legacy/help/guides/guides-with-repository.spec.js +32 -0
  71. package/e2e-legacy/help/guides/guides-without-repository.spec.js +20 -0
  72. package/e2e-legacy/help/guides/movies-interactive-guide.spec.js +71 -0
  73. package/{integration/guides/star-wars-interactive-guide.js → e2e-legacy/help/guides/star-wars-interactive-guide.spec.js} +3 -2
  74. package/e2e-legacy/help/rest-api-documentatio/rest-api-documentation-with-repository.spec.js +32 -0
  75. package/e2e-legacy/help/rest-api-documentatio/rest-api-documentation-without-repository.spec.js +20 -0
  76. package/e2e-legacy/help/system-information/system-information-with-repository.spec.js +32 -0
  77. package/e2e-legacy/help/system-information/system-information-without-repository.spec.js +20 -0
  78. package/e2e-legacy/home/cookie-policy/cookie-policy.spec.js +182 -0
  79. package/e2e-legacy/home/documentation-link.spec.js +41 -0
  80. package/{integration → e2e-legacy}/home/google-analytics.spec.js +4 -6
  81. package/e2e-legacy/home/home-page-with-selected-repository.spec.js +69 -0
  82. package/e2e-legacy/home/home-page-without-repositories.spec.js +87 -0
  83. package/e2e-legacy/home/home-page-without-selected-repository.spec.js +59 -0
  84. package/{integration → e2e-legacy}/home/language-change.spec.js +2 -2
  85. package/e2e-legacy/home/rdf-resource-search.spec.js +160 -0
  86. package/e2e-legacy/home/view-resource-autocomplete.spec.js +65 -0
  87. package/{integration → e2e-legacy}/import/import-server-files.spec.js +5 -3
  88. package/{integration → e2e-legacy}/import/import-user-data-file-upload.spec.js +19 -13
  89. package/{integration → e2e-legacy}/import/import-user-data-text-snippet.spec.js +0 -2
  90. package/{integration → e2e-legacy}/import/import-user-data-url.spec.js +0 -23
  91. package/{integration → e2e-legacy}/import/import-user-data.spec.js +11 -4
  92. package/e2e-legacy/import/initial-state/import-page-with-selected-repositor.js +51 -0
  93. package/e2e-legacy/import/initial-state/import-page-with-selected-repository-without-imported-files.js +45 -0
  94. package/e2e-legacy/import/initial-state/import-page-without-selected-repository.spec.js +28 -0
  95. package/e2e-legacy/license/license-with-repository.spec.js +113 -0
  96. package/e2e-legacy/license/license-without-repository.spec.js +103 -0
  97. package/{integration → e2e-legacy}/license/license.spec.js +4 -4
  98. package/e2e-legacy/monitor/backup-and-restore/backup-and-restore-with-repository.spec.js +36 -0
  99. package/e2e-legacy/monitor/backup-and-restore/backup-and-restore-without-repository.spec.js +25 -0
  100. package/{integration/monitor/monitor.backup-and-restore.spec.js → e2e-legacy/monitor/backup-and-restore/backup-and-restore.spec.js} +2 -2
  101. package/{integration → e2e-legacy}/monitor/global-operation-statuses-component.spec.js +12 -5
  102. package/e2e-legacy/monitor/query-and-updates/queries-and-updates-with-repository.spec.js +39 -0
  103. package/e2e-legacy/monitor/query-and-updates/queries-and-updates-without-repository.spec.js +21 -0
  104. package/{integration/monitor → e2e-legacy/monitor/system}/monitor.resources.spec.js +3 -2
  105. package/e2e-legacy/monitor/system/system-monitoring-with-repository.spec.js +32 -0
  106. package/e2e-legacy/monitor/system/system-monitoring-without-repository.spec.js +20 -0
  107. package/e2e-legacy/not-found/not-found.spec.js +23 -0
  108. package/{integration → e2e-legacy}/repository/ontop-repository.spec.js +1 -1
  109. package/{integration → e2e-legacy}/repository/repositories.spec.js +37 -45
  110. package/e2e-legacy/repository/url-with-repository-id-parameter.spec.js +181 -0
  111. package/{integration → e2e-legacy}/resource/resource.spec.js +50 -20
  112. package/e2e-legacy/setup/aclmanagement/acl-management-with-selected repository.spec.js +84 -0
  113. package/e2e-legacy/setup/aclmanagement/acl-management-without-repositories.spec.js +21 -0
  114. package/{integration → e2e-legacy}/setup/aclmanagement/create-rule.spec.js +4 -0
  115. package/e2e-legacy/setup/autocomplete/autocomplete-with-repository.spec.js +40 -0
  116. package/e2e-legacy/setup/autocomplete/autocomplete-without-repository.spec.js +27 -0
  117. package/{integration/setup → e2e-legacy/setup/autocomplete}/autocomplete.spec.js +6 -7
  118. package/e2e-legacy/setup/cluster/cluster-initial-state-with-cluster.spec.js +34 -0
  119. package/e2e-legacy/setup/cluster/cluster-initial-state-without-cluster.spec.js +25 -0
  120. package/e2e-legacy/setup/connectors/connectors-initial-state-with-selected-repository.spec.js +41 -0
  121. package/e2e-legacy/setup/connectors/connectors-initial-state-without-repositories.spec.js +21 -0
  122. package/{integration → e2e-legacy}/setup/connectors-lucene.spec.js +26 -10
  123. package/{integration → e2e-legacy}/setup/jdbc/jdbc-create.spec.js +4 -4
  124. package/e2e-legacy/setup/jdbc/jdbc-with-repository.spec.js +39 -0
  125. package/e2e-legacy/setup/jdbc/jdbc-without-repository.spec.js +27 -0
  126. package/e2e-legacy/setup/namespaces/namespaces-with-repository.spec.js +44 -0
  127. package/e2e-legacy/setup/namespaces/namespaces-without-repository.spec.js +27 -0
  128. package/{integration/setup → e2e-legacy/setup/namespaces}/namespaces.spec.js +6 -5
  129. package/e2e-legacy/setup/plugins/plugins-with-repository.spec.js +38 -0
  130. package/e2e-legacy/setup/plugins/plugins-without-repository.spec.js +28 -0
  131. package/{integration/setup → e2e-legacy/setup/plugins}/plugins.spec.js +3 -3
  132. package/e2e-legacy/setup/rdf-rank/rdf-rank-with-repository.spec.js +40 -0
  133. package/e2e-legacy/setup/rdf-rank/rdf-rank-without-repository.spec.js +30 -0
  134. package/{integration/setup → e2e-legacy/setup/rdf-rank}/rdf-rank.spec.js +3 -5
  135. package/e2e-legacy/setup/repositories/repositories-view-with-repositories.spec.js +40 -0
  136. package/e2e-legacy/setup/repositories/repositories-view-without-repositories.spec.js +28 -0
  137. package/e2e-legacy/setup/settings/my-settings-initial-state.spec.js +86 -0
  138. package/e2e-legacy/setup/settings/my-settings.spec.js +207 -0
  139. package/{integration/setup/sparql-template-create.js → e2e-legacy/setup/sparql-template/sparql-template-create.spec.js} +16 -8
  140. package/e2e-legacy/setup/sparql-template/sparql-template-with-repository.spec.js +39 -0
  141. package/e2e-legacy/setup/sparql-template/sparql-template-without-repository.spec.js +29 -0
  142. package/{integration/setup → e2e-legacy/setup/sparql-template}/sparql-templates.spec.js +4 -4
  143. package/{integration/setup → e2e-legacy/setup/users-and-access}/user-and-access.spec.js +184 -87
  144. package/e2e-legacy/setup/users-and-access/users-and-access-initial-state.spec.js +25 -0
  145. package/{integration → e2e-legacy}/sparql-editor/actions/expand-results-over-sameas.spec.js +12 -12
  146. package/{integration → e2e-legacy}/sparql-editor/actions/include-inferred-statements.spec.js +6 -6
  147. package/{integration → e2e-legacy}/sparql-editor/actions/inferred-sameas.spec.js +10 -8
  148. package/{integration → e2e-legacy}/sparql-editor/actions/show-saved-queries.spec.js +1 -6
  149. package/{integration → e2e-legacy}/sparql-editor/saved-query/abort-query.spec.js +1 -1
  150. package/{integration → e2e-legacy}/sparql-editor/saved-query/edit-query.spec.js +3 -3
  151. package/{integration → e2e-legacy}/sparql-editor/saved-query/readonly-query.spec.js +15 -24
  152. package/{integration → e2e-legacy}/sparql-editor/saved-query/share-query.spec.js +32 -1
  153. package/e2e-legacy/sparql-editor/sparql-page-with-selected-repository.spec.js +33 -0
  154. package/e2e-legacy/sparql-editor/sparql-page-without-selected-repository.spec.js +26 -0
  155. package/{integration → e2e-legacy}/sparql-editor/yasgui-tabs.spec.js +2 -12
  156. package/e2e-legacy/sparql-editor/yasqe-themes.spec.js +54 -0
  157. package/{integration → e2e-legacy}/sparql-editor/yasr/pagination.spec.js +5 -18
  158. package/{integration → e2e-legacy}/sparql-editor/yasr/table-plugin.spec.js +1 -6
  159. package/e2e-legacy/sparql-editor/yasr/toolbar/visual-graph-button.spec.js +106 -0
  160. package/e2e-legacy/sparql-editor/yasr/yasr.spec.js +80 -0
  161. package/{integration → e2e-legacy}/ttyg/agent-list.spec.js +53 -2
  162. package/{integration → e2e-legacy}/ttyg/agent-select-menu.spec.js +25 -2
  163. package/{integration → e2e-legacy}/ttyg/chat-list.spec.js +3 -14
  164. package/{integration → e2e-legacy}/ttyg/chat-panel.spec.js +74 -6
  165. package/{integration → e2e-legacy}/ttyg/clone-agent.spec.js +24 -2
  166. package/{integration → e2e-legacy}/ttyg/create-agent.spec.js +37 -66
  167. package/{integration → e2e-legacy}/ttyg/create-chat.spec.js +6 -4
  168. package/{integration → e2e-legacy}/ttyg/delete-agent.spec.js +1 -2
  169. package/e2e-legacy/ttyg/edit-agent.spec.js +178 -0
  170. package/e2e-legacy/ttyg/ttyg-initial-state-with-configured-api-key.spec.js +46 -0
  171. package/e2e-legacy/ttyg/ttyg-initial-state-with-selected-repository.spec.js +45 -0
  172. package/e2e-legacy/ttyg/ttyg-initial-state-without-repositories.spec.js +21 -0
  173. package/{integration-flaky → e2e-legacy}/ttyg/ttyg-permission.spec.js +23 -17
  174. package/{integration → e2e-legacy}/ttyg/ttyg-view.spec.js +2 -2
  175. package/e2e-security/repository/url-with-repository-id-parameter.spec.js +57 -0
  176. package/e2e-security/setup/home/cookie-policy.spec.js +290 -0
  177. package/e2e-security/setup/users-and-access/create-user-permissions.spec.js +193 -0
  178. package/e2e-security/setup/users-and-access/graphql-user.spec.js +126 -0
  179. package/e2e-security/setup/users-and-access/repo-admin-role.spec.js +70 -0
  180. package/e2e-security/setup/users-and-access/turn-on-security-and-password-change.spec.js +99 -0
  181. package/e2e-security/setup/users-and-access/user-and-access.spec.js +87 -0
  182. package/e2e-security/setup/users-and-access/users-and-access-initial-state.spec.js +38 -0
  183. package/eslint.config.js +39 -0
  184. package/fixtures/graph/graph-configurations.json +59 -0
  185. package/fixtures/guides/autocomplete/enable-autocomplete-guide.json +12 -0
  186. package/fixtures/guides/class-hierarchy/class-hierarchy-guide.json +35 -0
  187. package/fixtures/guides/class-relations/class-relations-guide.json +33 -0
  188. package/fixtures/guides/confirm-cancel-dialog/confirm-cancel-dialog-guide.json +15 -0
  189. package/fixtures/guides/connectors/connectors-guide.json +66 -0
  190. package/fixtures/guides/connectors/lucene-connector-guide.json +120 -0
  191. package/fixtures/guides/create-repository/create-repository-guide.json +25 -0
  192. package/fixtures/guides/create-similarity-index/create-similarity-index-guide.json +36 -0
  193. package/fixtures/guides/download-guide-resource/download-guide-resource-guide.json +25 -0
  194. package/fixtures/guides/download-resource.ttl +629 -0
  195. package/fixtures/guides/execute-sparql-query/execute-sparql-query-guide.json +54 -0
  196. package/fixtures/guides/import-rdf-file/confirm-duplicate-rdf-file-guide.json +30 -0
  197. package/fixtures/guides/import-rdf-file/import-rdf-file-guide.json +21 -0
  198. package/fixtures/guides/main-menu/main-menu-guide.json +98 -0
  199. package/fixtures/guides/navigation/navigation-guide.json +60 -0
  200. package/fixtures/guides/rdf-rank/rdf-rank-guide.json +18 -0
  201. package/fixtures/guides/table-graph-explore/table-graph-explore-guide.json +51 -0
  202. package/fixtures/guides/table-graph-explore/table-graph-explore-without-substeps-guide.json +25 -0
  203. package/fixtures/guides/ttyg/configure-agent/configure-ttyg-agent-guide.json +74 -0
  204. package/fixtures/guides/ttyg/conversation/ttyg-conversation-guide.json +26 -0
  205. package/fixtures/guides/ttyg/edit-ttyg-agent/edit-ttyg-agent-guide.json +22 -0
  206. package/fixtures/guides/visual-graph/visual-graph-config-guide.json +39 -0
  207. package/fixtures/guides/visual-graph/visual-graph-guide.json +85 -0
  208. package/fixtures/guides/welcome/welcome-guide.json +18 -0
  209. package/fixtures/repositories/free-access.json +13 -0
  210. package/fixtures/similarity/get-ttyg-similarity-instances.json +10 -0
  211. package/fixtures/ttyg/agent/get-agent-defaults-assistant-api.json +44 -0
  212. package/fixtures/ttyg/agent/get-agent-defaults.json +9 -2
  213. package/fixtures/ttyg/agent/get-agent-list-with-incompatible-agents.json +79 -0
  214. package/fixtures/ttyg/agent/get-similarity-indexes-for-another-repo.json +8 -0
  215. package/fixtures/ttyg/agent/get-similarity-indexes.json +22 -0
  216. package/fixtures/ttyg/chats/ask-question-cancel.json +12 -0
  217. package/fixtures/ttyg/chats/ask-question.json +12 -2
  218. package/fixtures/ttyg/chats/cancel-question-response.json +1 -0
  219. package/fixtures/ttyg/chats/create/create-chat-response.json +10 -14
  220. package/fixtures/ttyg/chats/create/question-response-after-chat-creation.json +29 -0
  221. package/fixtures/ttyg/chats/explain-response-1.json +2 -48
  222. package/fixtures/ttyg/chats/explain-response-3.json +12 -0
  223. package/fixtures/ttyg/chats/get-chat.json +6 -1
  224. package/npm-shrinkwrap.json +11004 -3815
  225. package/package.json +58 -42
  226. package/plugins/index.js +10 -5
  227. package/steps/application-steps.js +8 -6
  228. package/steps/base-steps.js +29 -0
  229. package/steps/class-views-steps.js +35 -7
  230. package/steps/cluster/cluster-page-steps.js +12 -2
  231. package/steps/cookie-policy/cookie-consent-banner-steps.js +21 -0
  232. package/steps/cookie-policy/cookie-policy-modal.steps.js +56 -0
  233. package/steps/error-page-steps.js +9 -0
  234. package/steps/error-steps.js +15 -3
  235. package/steps/explore/class-relationships-steps.js +64 -0
  236. package/steps/explore/graphs-overview-steps.js +21 -1
  237. package/steps/explore/similarity-index-create-steps.js +5 -3
  238. package/steps/explore/similarity-indexes-steps.js +16 -2
  239. package/steps/graphql/graphql-endpoint-management-steps.js +2 -2
  240. package/steps/graphql/playground-editor-steps.js +46 -0
  241. package/steps/guides/guide-dialog-steps.js +81 -2
  242. package/steps/guides/guide-steps.js +54 -2
  243. package/steps/guides/movies-guide-steps.js +2 -1
  244. package/steps/header-steps.js +22 -0
  245. package/steps/home-steps.js +184 -77
  246. package/steps/import/import-resource-message-dialog.js +1 -1
  247. package/steps/import/import-steps.js +12 -16
  248. package/steps/import/import-user-data-steps.js +5 -1
  249. package/steps/language-selector-steps.js +2 -2
  250. package/steps/license-steps.js +91 -9
  251. package/steps/login-steps.js +31 -6
  252. package/steps/main-menu-steps.js +244 -19
  253. package/steps/modal-dialog-steps.js +32 -1
  254. package/steps/monitoring/backup-and-restore-steps.js +9 -3
  255. package/steps/monitoring/queries-and-updates-steps.js +20 -0
  256. package/steps/monitoring/system-monitoring-steps.js +40 -0
  257. package/steps/not-found/not-found-steps.js +23 -0
  258. package/steps/operations-statuses-component-steps.js +5 -10
  259. package/steps/rdf-resource-search-steps.js +55 -0
  260. package/steps/repository-selector-steps.js +3 -3
  261. package/steps/repository-steps.js +88 -18
  262. package/steps/resource/resource-steps.js +6 -10
  263. package/steps/rest-api-documentation-steps.js +15 -0
  264. package/steps/setup/acl-management-steps.js +18 -2
  265. package/steps/setup/autocomplete-steps.js +23 -8
  266. package/steps/setup/connectors-steps.js +32 -0
  267. package/steps/setup/jdbc-steps.js +18 -4
  268. package/steps/setup/namespace-steps.js +10 -7
  269. package/steps/setup/plugins-steps.js +12 -5
  270. package/steps/setup/rdf-rank-steps.js +23 -9
  271. package/steps/setup/settings-steps.js +101 -2
  272. package/steps/setup/sparql-templates-steps.js +19 -1
  273. package/steps/setup/user-and-access-steps.js +50 -16
  274. package/steps/shared-modal-dialog-steps.js +45 -0
  275. package/steps/sparql-editor-steps.js +21 -2
  276. package/steps/sparql-steps.js +13 -1
  277. package/steps/system-information-steps.js +70 -0
  278. package/steps/toaster-steps.js +18 -6
  279. package/steps/ttyg/chat-panel-steps.js +40 -2
  280. package/steps/ttyg/ttyg-agent-settings-modal.steps.js +136 -31
  281. package/steps/ttyg/ttyg-view-steps.js +80 -10
  282. package/steps/visual-graph-split-button-steps.js +45 -0
  283. package/steps/visual-graph-steps.js +106 -10
  284. package/steps/widgets/active-repository-widget-steps.js +29 -0
  285. package/steps/widgets/license-widget-steps.js +9 -0
  286. package/steps/widgets/repository-errors-widget-steps.js +21 -0
  287. package/steps/widgets/saved-sparql-queries-widget-steps.js +9 -0
  288. package/steps/yasgui/yasgui-loader.js +3 -3
  289. package/steps/yasgui/yasgui-steps.js +1 -1
  290. package/steps/yasgui/yasqe-steps.js +35 -4
  291. package/steps/yasgui/yasr-steps.js +35 -5
  292. package/stubs/autocomplete/autocomplete-stubs.js +7 -0
  293. package/stubs/browser-stubs.js +21 -0
  294. package/stubs/environment-stubs.js +9 -1
  295. package/stubs/graph-config-stubs.js +17 -0
  296. package/stubs/guides/guides-stubs.js +103 -0
  297. package/stubs/license-stubs.js +51 -0
  298. package/stubs/repositories/repositories-stubs.js +180 -75
  299. package/stubs/saved-queries-stubs.js +5 -0
  300. package/stubs/security-stubs.js +12 -0
  301. package/stubs/similarity-index-stubs.js +4 -0
  302. package/stubs/sparql-stubs.js +10 -0
  303. package/stubs/ttyg/ttyg-stubs.js +64 -15
  304. package/stubs/yasgui/query-stubs.js +5 -1
  305. package/support/commands.js +22 -1
  306. package/support/connector-commands.js +13 -0
  307. package/support/e2e-security.js +9 -0
  308. package/support/{index.js → e2e.js} +9 -3
  309. package/support/repository-commands.js +29 -4
  310. package/support/settings-commands.js +33 -1
  311. package/support/url-commands.js +13 -0
  312. package/support/user-commands.js +9 -4
  313. package/utils/html-util.js +24 -4
  314. package/Dockerfile +0 -11
  315. package/fixtures/locale-en.json +0 -3342
  316. package/integration/explore/similarity-index/similarity-index-create.spec.js +0 -333
  317. package/integration/explore/similarity-index/similarity-index.spec.js +0 -88
  318. package/integration/explore/similarity-index/similarity.spec.js +0 -628
  319. package/integration/guides/movies-interactive-guide.spec.js +0 -73
  320. package/integration/home/cookie-policy.spec.js +0 -90
  321. package/integration/home/documentation-link.spec.js +0 -60
  322. package/integration/home/language-selector.spec.js +0 -19
  323. package/integration/home/rdf-resource-search.spec.js +0 -177
  324. package/integration/home/view-resource-autocomplete.spec.js +0 -52
  325. package/integration/home/workbench.home.spec.js +0 -30
  326. package/integration/monitor/monitor.queries.spec.js +0 -31
  327. package/integration/setup/my-settings.spec.js +0 -289
  328. package/integration/sparql-editor/yasr/toolbar/visual-graph-button.spec.js +0 -57
  329. package/integration/ttyg/edit-agent.spec.js +0 -99
  330. package/integration-flaky/setup/users-and-access/security-and-free-access.spec.js +0 -54
  331. package/stubs/repositories-stub.js +0 -73
  332. package/{integration-flaky → e2e-flaky}/import/import.server.files.spec.js +0 -0
  333. package/{integration-flaky → e2e-flaky}/sparql-editor/lucene-connector.spec.js +0 -0
  334. package/{integration-flaky → e2e-flaky}/sparql-editor/plugins/error-plugin.spec.js +0 -0
  335. package/{integration → e2e-legacy}/cluster/cluster-configuration/cluster-configuration-multi-region.spec.js +0 -0
  336. package/{integration → e2e-legacy}/cluster/cluster-configuration/cluster-configuration-nodes.spec.js +0 -0
  337. package/{integration → e2e-legacy}/cluster/cluster-configuration/cluster-configuration-properties.spec.js +0 -0
  338. package/{integration → e2e-legacy}/cluster/cluster-configuration/cluster-configuration.spec.js +0 -0
  339. package/{integration → e2e-legacy}/cluster/cluster-legend.spec.js +0 -0
  340. package/{integration → e2e-legacy}/cluster/edit-cluster-nodes-modal.spec.js +0 -0
  341. package/{integration → e2e-legacy}/graphql/activate-deactivate-graphql-endpoint.spec.js +0 -0
  342. package/{integration → e2e-legacy}/graphql/delete-graphql-endpoint.spec.js +0 -0
  343. package/{integration → e2e-legacy}/graphql/export-graphql-endpoint-definition.spec.js +0 -0
  344. package/{integration → e2e-legacy}/graphql/set-default-graphql-endpoint.spec.js +0 -0
  345. package/{integration/help → e2e-legacy/help/system-information}/system-information.spec.js +0 -0
  346. package/{integration → e2e-legacy}/home/create-repository.spec.js +0 -0
  347. package/{integration → e2e-legacy}/import/import-server-files-batch-operations.spec.js +0 -0
  348. package/{integration → e2e-legacy}/import/import-user-data-settings-dialog.spec.js +0 -0
  349. package/{integration → e2e-legacy}/import/import-view.spec.js +0 -0
  350. package/{integration → e2e-legacy}/repository/attach-remote-location.spec.js +1 -1
  351. /package/{integration → e2e-legacy}/repository/repository-commands.spec.js +0 -0
  352. /package/{integration → e2e-legacy}/setup/aclmanagement/delete-rule.spec.js +0 -0
  353. /package/{integration → e2e-legacy}/setup/aclmanagement/edit-rule.spec.js +0 -0
  354. /package/{integration → e2e-legacy}/setup/aclmanagement/render-rules.spec.js +0 -0
  355. /package/{integration → e2e-legacy}/setup/aclmanagement/reorder-rules.spec.js +0 -0
  356. /package/{integration → e2e-legacy}/setup/aclmanagement/revert-rules.spec.js +0 -0
  357. /package/{integration → e2e-legacy}/setup/aclmanagement/scopes.spec.js +0 -0
  358. /package/{integration → e2e-legacy}/setup/aclmanagement/update-rules.spec.js +0 -0
  359. /package/{integration → e2e-legacy}/setup/jdbc/jdbc.spec.js +0 -0
  360. /package/{integration → e2e-legacy}/sparql-editor/actions/execute-query.spec.js +0 -0
  361. /package/{integration → e2e-legacy}/sparql-editor/actions/save-query.spec.js +0 -0
  362. /package/{integration → e2e-legacy}/sparql-editor/internationalization.spec.js +0 -0
  363. /package/{integration → e2e-legacy}/sparql-editor/saved-query/delete-query.spec.js +0 -0
  364. /package/{integration → e2e-legacy}/sparql-editor/sparql-editor.spec.js +0 -0
  365. /package/{integration → e2e-legacy}/sparql-editor/yasr/download-as.spec.js +0 -0
@@ -187,7 +187,7 @@ describe('Ontop repositories', () => {
187
187
  // The Ontop repository should be created
188
188
  RepositorySteps.visit();
189
189
  // The repository list should contain the new repository, which can be activated
190
- RepositorySteps.clickRepositoryConnectionOffBtn(repositoryId);
190
+ RepositorySteps.activateRepository(repositoryId);
191
191
  // When the repository is restarted
192
192
  RepositorySteps.restartRepository(repositoryId);
193
193
  ModalDialogSteps.getDialogBody().should('contain', repositoryId);
@@ -8,6 +8,7 @@ import {ImportSettingsDialogSteps} from "../../steps/import/import-settings-dial
8
8
  import {ClusterStubs} from "../../stubs/cluster/cluster-stubs";
9
9
  import {RepositoriesStubs} from "../../stubs/repositories/repositories-stubs";
10
10
 
11
+ // TODO: Refactor these tests to follow our step based approach for better decoupling from the page implementation
11
12
  describe('Repositories', () => {
12
13
 
13
14
  let repositoryId;
@@ -110,32 +111,28 @@ describe('Repositories', () => {
110
111
  .should('be.visible')
111
112
  .and('not.be.disabled');
112
113
 
114
+ // It should have not selected the new repo
115
+ RepositorySteps.getRepositorySelection().should('have.class', 'no-selected-repository')
116
+
113
117
  // Connect to the repository via the menu
114
- RepositorySteps.getRepositoriesDropdown().click().within(() => {
115
- // It should have not selected the new repo
116
-
117
- // Note: The better test here should verify for .no-selected-repository presence but in Travis it seems there is a selected
118
- // repository although Cypress clears cookies before each test OR the dropdown is not yet fully loaded which is strange
119
- // because the test has been running for several seconds before this check
120
- cy.get('#btnReposGroup').should('not.contain', repositoryId);
121
-
122
- // The dropdown should contain the newly created repository
123
- cy.get('#btnReposGroup').should('have.attr', 'aria-expanded', 'true');
124
- // Wait about the menu to become visible due to a strange behavior of elements having size 0x0px thus treated as invisible.
125
- // Alternative is to have the click forced, which might lead to false positive result.
126
- cy.get('.dropdown-menu-right').should('be.visible').wait(500);
127
- cy.get('.dropdown-menu-right .dropdown-item')
128
- .contains(repositoryId)
129
- .closest('a')
130
- .scrollIntoView()
131
- .click();
118
+ RepositorySteps.getRepositoriesDropdown().click()
119
+ // The dropdown should contain the newly created repository
120
+ cy.get('.onto-dropdown-menu-item').should('exist');
121
+ cy.get('.onto-dropdown-menu-item')
122
+ .contains(repositoryId)
123
+ .first()
124
+ .scrollIntoView();
125
+ cy.get('.onto-dropdown-menu-item')
126
+ .contains(repositoryId)
127
+ .first()
128
+ .click();
129
+
130
+ // Should visualize the selected repo
131
+ cy.get('.no-selected-repository').should('not.exist');
132
+ cy.get('.active-repository')
133
+ .should('be.visible')
134
+ .and('contain', repositoryId);
132
135
 
133
- // Should visualize the selected repo
134
- cy.get('.no-selected-repository').should('not.exist');
135
- cy.get('.active-repository')
136
- .should('be.visible')
137
- .and('contain', repositoryId);
138
- });
139
136
 
140
137
  // The repo should be connected after selecting it from the menu
141
138
  RepositorySteps.getRepositoryConnectionOnBtn(repositoryId).should('be.visible');
@@ -144,7 +141,7 @@ describe('Repositories', () => {
144
141
  RepositorySteps.getRepositoriesDropdown()
145
142
  .click()
146
143
  .then(() => {
147
- cy.get('.dropdown-menu-right')
144
+ cy.get('.onto-dropdown-menu-item')
148
145
  .should('not.contain', repositoryId);
149
146
  });
150
147
  });
@@ -289,7 +286,7 @@ describe('Repositories', () => {
289
286
  // The first should return back to the dropdown items
290
287
  RepositorySteps.getRepositoriesDropdown()
291
288
  .click()
292
- .find('.dropdown-menu-right .dropdown-item')
289
+ .find('.onto-dropdown-menu-item')
293
290
  .should('contain', repositoryId);
294
291
  // Hide the menu
295
292
  RepositorySteps.getRepositoriesDropdown().click();
@@ -380,9 +377,8 @@ describe('Repositories', () => {
380
377
  RepositorySteps.confirmModal();
381
378
 
382
379
  // Check the repo has been deselected and is not present in the repo dropdown menu
383
- RepositorySteps.getRepositoriesDropdown().click().within(() => {
384
- cy.get('#btnReposGroup').should('not.contain', repositoryId);
385
- });
380
+ RepositorySteps.getRepositoriesDropdown().click();
381
+ RepositorySteps.getRepositoriesInDropdown().should('not.contain', repositoryId);
386
382
  });
387
383
 
388
384
  it('should restart an existing repository', () => {
@@ -408,21 +404,17 @@ describe('Repositories', () => {
408
404
  //Make sure that repository is in status INACTIVE
409
405
  RepositorySteps.assertRepositoryStatus(repositoryId, "INACTIVE");
410
406
 
411
- RepositorySteps.getRepositoriesDropdown().click().within(() => {
412
-
413
- // Wait about the menu to become visible due to a strange behavior of elements having size 0x0px thus treated as invisible.
414
- // Alternative is to have the click forced, which might lead to false positive result.
415
- cy.get('.dropdown-menu-right').should('be.visible').wait(500);
416
- cy.get('.dropdown-menu-right .dropdown-item')
417
- .contains(repositoryId)
418
- .closest('a')
419
- .click();
407
+ RepositorySteps.getRepositoriesDropdown().click();
408
+ RepositorySteps.getRepositoriesInDropdown()
409
+ .should('be.visible')
410
+ .contains(repositoryId)
411
+ .eq(0)
412
+ .click();
420
413
  // Should visualize the selected repo
421
414
  cy.get('.no-selected-repository').should('not.exist');
422
415
  cy.get('.active-repository')
423
416
  .should('be.visible')
424
417
  .and('contain', repositoryId);
425
- });
426
418
 
427
419
  HomeSteps.visitAndWaitLoader();
428
420
  cy.visit('/repository');
@@ -510,19 +502,19 @@ describe('Repositories', () => {
510
502
  ModalDialogSteps.verifyDialogBody('Changing the repository ID is a dangerous operation since it renames the repository folder and enforces repository shutdown.');
511
503
  });
512
504
 
513
- it('should NOT allow restart of LOCAL repository from EDIT PAGE, if node is in cluster', () => {
505
+ it('should allow restart of LOCAL repository from EDIT PAGE, if node is in cluster', () => {
514
506
  // Given I create a repository
515
507
  cy.createRepository({id: repositoryId});
516
508
  // When I set the node in a cluster
517
509
  GlobalOperationsStatusesStub.stubGlobalOperationsStatusesResponse(repositoryId);
518
510
  // Then go to the local repository's edit page
519
511
  RepositorySteps.visitEditPage(repositoryId);
520
- // I expect the repository restart checkbox button to be disabled
512
+ // I expect the repository restart checkbox button to be enabled
521
513
  RepositorySteps.getEditViewRestartButton().should('be.visible');
522
- RepositorySteps.getEditViewRestartButton().should('be.disabled');
514
+ RepositorySteps.getEditViewRestartButton().should('not.be.disabled');
523
515
  });
524
516
 
525
- it('should NOT allow restart of LOCAL repositories from REPOSITORIES PAGE, if node is in cluster', () => {
517
+ it('should allow restart of LOCAL repositories from REPOSITORIES PAGE, if node is in cluster', () => {
526
518
  // Given I create a repository
527
519
  cy.createRepository({id: repositoryId});
528
520
  // When I set the node in a cluster
@@ -530,9 +522,9 @@ describe('Repositories', () => {
530
522
  ClusterStubs.stubClusterNodeStatus();
531
523
  // Then go to the repositories page
532
524
  RepositorySteps.visit();
533
- // I expect the local repository's restart button to be disabled
525
+ // I expect the local repository's restart button to be enabled
534
526
  RepositorySteps.getRepositoryRestartButton(repositoryId).should('be.visible');
535
- RepositorySteps.getRepositoryRestartButton(repositoryId).should('be.disabled');
527
+ RepositorySteps.getRepositoryRestartButton(repositoryId).should('not.be.disabled');
536
528
  });
537
529
 
538
530
  it('should ALLOW restart of REMOTE repositories from REPOSITORIES PAGE, if node is in cluster', () => {
@@ -0,0 +1,181 @@
1
+ import {ModalDialogSteps} from "../../steps/modal-dialog-steps";
2
+ import HomeSteps from '../../steps/home-steps.js';
3
+ import {RepositoryErrorsWidgetSteps} from '../../steps/widgets/repository-errors-widget-steps.js';
4
+ import {RepositorySteps} from '../../steps/repository-steps.js';
5
+ import {RepositorySelectorSteps} from '../../steps/repository-selector-steps.js';
6
+ import {ErrorPageSteps} from '../../steps/error-page-steps.js';
7
+ import {MainMenuSteps} from '../../steps/main-menu-steps.js';
8
+
9
+ describe('URL with Repository ID parameter', () => {
10
+ let repositoryId;
11
+ let secondRepositoryId;
12
+
13
+ describe('When repository is changed', () => {
14
+ beforeEach(() => {
15
+ repositoryId = 'repository-in-url-' + Date.now();
16
+ cy.createRepository({id: repositoryId});
17
+ secondRepositoryId = 'second-repository-in-url-' + Date.now();
18
+ cy.createRepository({id: secondRepositoryId});
19
+ cy.presetRepository(repositoryId);
20
+ })
21
+
22
+ afterEach(() => {
23
+ cy.deleteRepository(repositoryId);
24
+ cy.deleteRepository(secondRepositoryId);
25
+ });
26
+
27
+ it('should update URL', () => {
28
+ RepositorySteps.visit();
29
+ RepositorySteps.getActiveRepositoryRow().should('contain', repositoryId);
30
+ RepositorySelectorSteps.getSelectedRepository().should('contain', repositoryId);
31
+ cy.url().should('include', 'repositoryId=' + repositoryId);
32
+
33
+ RepositorySelectorSteps.selectRepository(secondRepositoryId);
34
+
35
+ RepositorySteps.getActiveRepositoryRow().should('contain', secondRepositoryId);
36
+ RepositorySelectorSteps.getSelectedRepository().should('contain', secondRepositoryId);
37
+ cy.url().should('include', 'repositoryId=' + secondRepositoryId);
38
+
39
+ RepositorySteps.activateRepository(repositoryId);
40
+
41
+ RepositorySteps.getActiveRepositoryRow().should('contain', repositoryId);
42
+ RepositorySelectorSteps.getSelectedRepository().should('contain', repositoryId);
43
+ cy.url().should('include', 'repositoryId=' + repositoryId);
44
+ });
45
+ });
46
+
47
+ describe('When there is no active repository and no repository in URL', () => {
48
+ // 1. active repo no, repo in url no -> no action - just show repo selector
49
+ it('should show repository selector with no repository selected', () => {
50
+ HomeSteps.visit();
51
+ RepositoryErrorsWidgetSteps.getWidget().should('be.visible');
52
+ cy.url().should('not.include', 'repositoryId=');
53
+ HomeSteps.getSelectedRepository().should('contain', 'No accessible repositories');
54
+ // no modal dialog should be shown
55
+ ModalDialogSteps.getDialog().should('not.exist');
56
+ })
57
+ })
58
+
59
+ describe('When there is no active repository and repository in URL is present', () => {
60
+ beforeEach(() => {
61
+ repositoryId = 'repository-in-url-' + Date.now();
62
+ cy.createRepository({id: repositoryId});
63
+ })
64
+
65
+ afterEach(() => {
66
+ cy.deleteRepository(repositoryId);
67
+ });
68
+
69
+ // 2. active repo no, repo in url yes, url repo exists -> set active repo same as the url
70
+ it('should set active repository to the one in URL if it exists', () => {
71
+ HomeSteps.visitWithRepositoryInUrl(repositoryId);
72
+ RepositoryErrorsWidgetSteps.getWidget().should('not.exist');
73
+ cy.url().should('include', 'repositoryId=' + repositoryId);
74
+ HomeSteps.getSelectedRepository().should('contain', repositoryId);
75
+ });
76
+
77
+ // 3. active repo no, repo in url yes, url repo missing -> show warning, keep url
78
+ it('should show warning if repository in URL does not exist', () => {
79
+ HomeSteps.visitWithRepositoryInUrl('mising-repo');
80
+ RepositoryErrorsWidgetSteps.getWidget().should('be.visible');
81
+ HomeSteps.getSelectedRepository().should('contain', 'Choose repository');
82
+ ModalDialogSteps.getModalAlert().should('be.visible');
83
+ ModalDialogSteps.getDialogBody().should('contain', 'The repository "mising-repo" specified in the URL does not exist. Please select an existing repository.');
84
+ ModalDialogSteps.close();
85
+ cy.url().should('include', 'repositoryId=mising-repo');
86
+ });
87
+ });
88
+
89
+ describe('When there is an active repository and no repository in URL', () => {
90
+ beforeEach(() => {
91
+ repositoryId = 'repository-in-url-' + Date.now();
92
+ cy.createRepository({id: repositoryId});
93
+ cy.presetRepository(repositoryId);
94
+ })
95
+
96
+ afterEach(() => {
97
+ cy.deleteRepository(repositoryId);
98
+ cy.deleteRepository(secondRepositoryId);
99
+ });
100
+
101
+ // 4. active repo yes, repo in url no -> update url
102
+ it('should update URL to include active repository', () => {
103
+ HomeSteps.visit();
104
+ RepositoryErrorsWidgetSteps.getWidget().should('be.hidden');
105
+ cy.url().should('include', 'repositoryId=' + repositoryId);
106
+ HomeSteps.getSelectedRepository().should('contain', repositoryId);
107
+ });
108
+
109
+ // 5. active repo yes, repo in url yes, url repo exists -> show confirmation, update active repo on confirmation
110
+ it('should show confirmation and update active repository if repository in URL exists', () => {
111
+ secondRepositoryId = 'second-repository-in-url-' + Date.now();
112
+ cy.createRepository({id: secondRepositoryId});
113
+ HomeSteps.visitWithRepositoryInUrl(secondRepositoryId);
114
+ cy.url().should('include', 'repositoryId=' + secondRepositoryId);
115
+ HomeSteps.getSelectedRepository().should('contain', repositoryId);
116
+ HomeSteps.getView().should('be.visible');
117
+ HomeSteps.getActiveRepositoryWidget().should('be.visible');
118
+ RepositoryErrorsWidgetSteps.getWidget().should('be.hidden');
119
+ ModalDialogSteps.getDialog().should('be.visible');
120
+ ModalDialogSteps.getDialogBody().should('contain', `Active repository will be changed to "${secondRepositoryId}". Do you want to proceed?`);
121
+ ModalDialogSteps.confirm();
122
+ ModalDialogSteps.getDialog().should('not.exist');
123
+ HomeSteps.getSelectedRepository().should('contain', secondRepositoryId);
124
+ cy.url().should('include', 'repositoryId=' + secondRepositoryId);
125
+ });
126
+
127
+ // 5. active repo yes, repo in url yes, url repo exists -> show confirmation, keep active repo on reject
128
+ it('should show confirmation and keep active repository if repository in URL exists but user rejects', () => {
129
+ // active repo yes, repo in url yes, url repo exists -> show confirmation, update active repo
130
+ secondRepositoryId = 'second-repository-in-url-' + Date.now();
131
+ cy.createRepository({id: secondRepositoryId});
132
+ HomeSteps.visitWithRepositoryInUrl(secondRepositoryId);
133
+ cy.url().should('include', 'repositoryId=' + secondRepositoryId);
134
+ HomeSteps.getSelectedRepository().should('contain', repositoryId);
135
+ HomeSteps.getView().should('be.visible');
136
+ HomeSteps.getActiveRepositoryWidget().should('be.visible');
137
+ RepositoryErrorsWidgetSteps.getWidget().should('be.hidden');
138
+ ModalDialogSteps.getDialog().should('be.visible');
139
+ ModalDialogSteps.getDialogBody().should('contain', `Active repository will be changed to "${secondRepositoryId}". Do you want to proceed?`);
140
+ ModalDialogSteps.cancel();
141
+ ModalDialogSteps.getDialog().should('not.exist');
142
+ HomeSteps.getSelectedRepository().should('contain', repositoryId);
143
+ cy.url().should('include', 'repositoryId=' + repositoryId);
144
+ });
145
+
146
+ // 6. active repo yes, repo in url yes, url repo missing-> show warning, keep the active repo
147
+ it('should show warning if repository in URL does not exist and keep active repository', () => {
148
+ HomeSteps.visitWithRepositoryInUrl('mising-repo');
149
+ cy.url().should('include', 'repositoryId=mising-repo');
150
+ ModalDialogSteps.getModalAlert().should('be.visible');
151
+ ModalDialogSteps.clickOKButton();
152
+ ModalDialogSteps.getModalAlert().should('not.exist');
153
+ HomeSteps.getSelectedRepository().should('contain', repositoryId);
154
+ cy.url().should('include', 'repositoryId=' + repositoryId);
155
+ });
156
+ });
157
+
158
+ describe('When navigating between legacy and new workbench', () => {
159
+ beforeEach(() => {
160
+ repositoryId = 'repository-in-url-' + Date.now();
161
+ cy.createRepository({id: repositoryId});
162
+ cy.initializeRepository(repositoryId);
163
+ cy.presetRepository(repositoryId);
164
+ })
165
+
166
+ afterEach(() => {
167
+ cy.deleteRepository(repositoryId);
168
+ });
169
+
170
+ it('should preserve repositoryId parameter when navigating from 404 (new workbench) to legacy page', () => {
171
+ // Given I am on the 404 page which is in the new workbench
172
+ ErrorPageSteps.visit404();
173
+ ErrorPageSteps.get404Page().should('be.visible');
174
+ cy.url().should('not.include', 'repositoryId=');
175
+ // When I navigate to some legacy page
176
+ MainMenuSteps.clickOnSparqlMenu();
177
+ // Then repositoryId parameter should be preserved in the URL
178
+ cy.url().should('include', `repositoryId=${repositoryId}`);
179
+ });
180
+ });
181
+ });
@@ -7,10 +7,12 @@ import {YasqeSteps} from "../../steps/yasgui/yasqe-steps";
7
7
  import {YasrSteps} from "../../steps/yasgui/yasr-steps";
8
8
  import {YasguiSteps} from "../../steps/yasgui/yasgui-steps";
9
9
  import {JsonLdModalSteps} from "../../steps/json-ld-modal-steps";
10
+ import {GraphConfigStubs} from '../../stubs/graph-config-stubs.js';
11
+ import {VisualGraphSplitButtonSteps} from '../../steps/visual-graph-split-button-steps.js';
10
12
 
11
13
  const FILE_TO_IMPORT = 'resource-test-data.ttl';
12
- const SUBJECT_RESOURCE = 'http:%2F%2Fexample.com%2Fontology%23CustomerLoyalty';
13
- const SUBJECT_RESOURCE_SHORT_URI = 'http://example.com/ontology#CustomerLoyalty';
14
+ const SUBJECT_RESOURCE_ENCODED = 'http:%2F%2Fexample.com%2Fontology%23CustomerLoyalty';
15
+ const SUBJECT_RESOURCE = 'http://example.com/ontology#CustomerLoyalty';
14
16
  const PREDICATE_SOURCE = 'http:%2F%2Fwww.w3.org%2F2000%2F01%2Frdf-schema%23subClassOf';
15
17
  const CONTEXT_EXPLICIT = 'http://www.ontotext.com/explicit';
16
18
  const OBJECT_RESOURCE = 'http:%2F%2Fexample.com%2Fontology%23Metric';
@@ -33,13 +35,13 @@ describe('Resource view', () => {
33
35
 
34
36
  it('should open resource view with active role tab depend on url role parameter', () => {
35
37
  ResourceSteps.getAllRoles().forEach((role) => {
36
- ResourceSteps.visit(`uri=${SUBJECT_RESOURCE}&role=${role}`);
38
+ ResourceSteps.visit(`uri=${SUBJECT_RESOURCE_ENCODED}&role=${role}`);
37
39
  ResourceSteps.verifyActiveRoleTab(role);
38
40
  });
39
41
  });
40
42
 
41
43
  it('should open subject tab if role parameter is miss', () => {
42
- ResourceSteps.visit(`uri=${SUBJECT_RESOURCE}&role=subject`);
44
+ ResourceSteps.visit(`uri=${SUBJECT_RESOURCE_ENCODED}&role=subject`);
43
45
  ResourceSteps.verifyActiveRoleTab('subject');
44
46
  });
45
47
 
@@ -62,17 +64,35 @@ describe('Resource view', () => {
62
64
  YasrSteps.getResults().should('have.length', 5);
63
65
  });
64
66
 
65
- it('should navigate to visual graph view', () => {
67
+ it('should open graphs-visualizations view when click on main button', () => {
66
68
  // When I am on resource view and page loaded a resource.
67
- ResourceSteps.visit(`uri=${SUBJECT_RESOURCE}&role=subject`);
69
+ ResourceSteps.visit(`uri=${SUBJECT_RESOURCE_ENCODED}&role=subject`);
68
70
 
69
71
  // When I click on "Visual graph" button.
70
- ResourceSteps.clickOnVisualGraphButton();
72
+ VisualGraphSplitButtonSteps.clickOnVisualizeMainButton();
71
73
 
72
74
  // Then I expect to be redirected to explore graph view.
73
75
  VisualGraphSteps.verifyUrl();
74
76
  });
75
77
 
78
+ it('should open graphs-visualizations view when select a graph configuration', () => {
79
+ // When I am on resource view and page loaded a resource.
80
+ ResourceSteps.visit(`uri=${SUBJECT_RESOURCE_ENCODED}&role=subject`);
81
+ GraphConfigStubs.stubGetGraphConfigs();
82
+
83
+ // WHEN: I open the dropdown.
84
+ VisualGraphSplitButtonSteps.toggleGraphConfigDropdown();
85
+ // THEN: I expect to see all graph configurations.
86
+ VisualGraphSplitButtonSteps.getGraphConfigs().should('have.length', 3);
87
+
88
+ // WHEN: I select a graph configuration
89
+ VisualGraphSplitButtonSteps.selectGraphConfig();
90
+ // THEN: I expect to be navigated to graphs-visualizations view.
91
+ cy.url().should('include', 'graphs-visualizations');
92
+ cy.getQueryParam('uri').should('include', SUBJECT_RESOURCE);
93
+ cy.getQueryParam('config').should('eq', 'de99fd5de7f94ef98f1875dff55fc1c9');
94
+ });
95
+
76
96
  it('should displays results depends on explicit/implicit dropdown', () => {
77
97
  // When I am on resource view and page loaded a resource that has triplets in explicit and implicit context,
78
98
  ResourceSteps.visit(`uri=${IMPLICIT_EXPLICIT_RESOURCE}&role=all`);
@@ -175,11 +195,11 @@ describe('Resource view', () => {
175
195
  it('should list the triples of a resource used as subject', () => {
176
196
  // When I am on resource view,
177
197
  // and page loaded a resource that is used as subject,
178
- ResourceSteps.visit(`uri=${SUBJECT_RESOURCE}&role=subject`);
198
+ ResourceSteps.visit(`uri=${SUBJECT_RESOURCE_ENCODED}&role=subject`);
179
199
 
180
200
  // Then I expect to see only one result because the resource has only one triplet as subject.
181
201
  YasrSteps.getResults().should('have.length', 1);
182
- YasrSteps.getResultLink(0, 1).should('contain', SUBJECT_RESOURCE_SHORT_URI);
202
+ YasrSteps.getResultLink(0, 1).should('contain', SUBJECT_RESOURCE);
183
203
  YasrSteps.getResultLink(0, 2).should('contain', 'rdfs:subClassOf');
184
204
  YasrSteps.getResultLink(0, 3).should('contain', 'http://example.com/ontology#Metric');
185
205
  YasrSteps.getResultLink(0, 4).should('contain', CONTEXT_EXPLICIT);
@@ -196,7 +216,7 @@ describe('Resource view', () => {
196
216
  YasrSteps.getResults().should('have.length', 1);
197
217
  YasrSteps.getResultLink(0, 1).should('contain', 'http://example.com/resource/person/W6J1827/customerLoyalty');
198
218
  YasrSteps.getResultLink(0, 2).should('contain', 'rdf:type');
199
- YasrSteps.getResultLink(0, 3).should('contain', SUBJECT_RESOURCE_SHORT_URI);
219
+ YasrSteps.getResultLink(0, 3).should('contain', SUBJECT_RESOURCE);
200
220
  YasrSteps.getResultLink(0, 4).should('contain', CONTEXT_EXPLICIT);
201
221
 
202
222
  // When I click on "context" tab.
@@ -211,14 +231,14 @@ describe('Resource view', () => {
211
231
  // Then I expect to see all triples of subject without mater of its role.
212
232
  YasrSteps.getResults().should('have.length', 2);
213
233
 
214
- YasrSteps.getResultLink(0, 1).should('contain', SUBJECT_RESOURCE_SHORT_URI);
234
+ YasrSteps.getResultLink(0, 1).should('contain', SUBJECT_RESOURCE);
215
235
  YasrSteps.getResultLink(0, 2).should('contain', 'rdfs:subClassOf');
216
236
  YasrSteps.getResultLink(0, 3).should('contain', 'http://example.com/ontology#Metric');
217
237
  YasrSteps.getResultLink(0, 4).should('contain', CONTEXT_EXPLICIT);
218
238
 
219
239
  YasrSteps.getResultLink(1, 1).should('contain', 'http://example.com/resource/person/W6J1827/customerLoyalty');
220
240
  YasrSteps.getResultLink(1, 2).should('contain', 'rdf:type');
221
- YasrSteps.getResultLink(1, 3).should('contain', SUBJECT_RESOURCE_SHORT_URI);
241
+ YasrSteps.getResultLink(1, 3).should('contain', SUBJECT_RESOURCE);
222
242
  YasrSteps.getResultLink(1, 4).should('contain', CONTEXT_EXPLICIT);
223
243
  });
224
244
 
@@ -323,19 +343,15 @@ describe('Resource view', () => {
323
343
  });
324
344
 
325
345
  context('Triple resource', () => {
326
-
327
- it('should show triple resource', {
328
- retries: {
329
- runMode: 1,
330
- openMode: 0
331
- }
332
- }, () => {
346
+ it('should show triple resource', () => {
333
347
  // When I visit resource view with triple resource.
334
348
  ResourceSteps.visit(`triple=${TRIPLE_RESOURCE}&role=subject`);
335
349
 
336
350
  // Then I expect resource link to exist.
337
351
  ResourceSteps.getTripleResourceLink().should('contain.text', '<<<W6J1827> <hasAddress> <address>>>');
338
352
 
353
+ // And I expect to see data table
354
+ ResourceSteps.getDataTable().should('exist').and('be.visible');
339
355
  // When I click on the link.
340
356
  ResourceSteps.clickOnTripleResourceLink();
341
357
 
@@ -351,6 +367,8 @@ describe('Resource view', () => {
351
367
  // Then I expect target link to exist.
352
368
  ResourceSteps.getTargetLink().should('contain.text', '<<<http://example.com/resource/person/W6J1827> <http://example.com/ontology#hasAddress> <http://example.com/resource/person/W6J1827/address>>>');
353
369
 
370
+ // And I expect to see data table
371
+ ResourceSteps.getDataTable().should('exist').and('be.visible');
354
372
  // When I click on the link.
355
373
  ResourceSteps.clickOnTripleResourceLink();
356
374
 
@@ -366,7 +384,19 @@ describe('Resource view', () => {
366
384
  context('Download as', () => {
367
385
  it('should download as JSON-LD and then restore defaults', () => {
368
386
  // Given I am in the Resource view
369
- ResourceSteps.visit(`uri=${SUBJECT_RESOURCE}&role=subject`);
387
+ ResourceSteps.visit(`uri=${SUBJECT_RESOURCE_ENCODED}&role=subject`);
388
+ cy.window().then((win) => {
389
+ expect(win.jsonld).to.exist;
390
+ cy.stub(win.jsonld, 'compact').resolves({
391
+ "@context": {
392
+ "dc11": "http://purl.org/dc/elements/1.1/",
393
+ "ex": "http://example.org/vocab#",
394
+ "ex:authored": {"@type": "@id"},
395
+ "ex:contains": {"@type": "@id"},
396
+ "foaf": "http://xmlns.com/foaf/0.1/"
397
+ }
398
+ });
399
+ });
370
400
  ResourceSteps.verifyActiveRoleTab('subject');
371
401
 
372
402
  // When I download as JSON-LD
@@ -0,0 +1,84 @@
1
+ import HomeSteps from "../../../steps/home-steps";
2
+ import {MainMenuSteps} from "../../../steps/main-menu-steps";
3
+ import {AclManagementSteps} from "../../../steps/setup/acl-management-steps";
4
+ import {RepositorySteps} from '../../../steps/repository-steps.js';
5
+ import {RepositorySelectorSteps} from '../../../steps/repository-selector-steps.js';
6
+
7
+ function verifyStateWithSelectedRepository() {
8
+ AclManagementSteps.getPageHeading().should('be.visible');
9
+ AclManagementSteps.getAclTable().should('be.visible');
10
+ AclManagementSteps.getNoDataMessage().should('be.visible');
11
+ AclManagementSteps.getAddFirstRuleButton().should('be.visible');
12
+ AclManagementSteps.getAclTabs().should('be.visible').and('have.length', 4);
13
+ }
14
+
15
+ describe('ACL Management initial state with repositories', () => {
16
+ let repositoryId;
17
+ let fedexRepositoryId;
18
+
19
+ beforeEach(() => {
20
+ repositoryId = 'acl-management-' + Date.now();
21
+ fedexRepositoryId = 'fedex-repo-' + Date.now();
22
+ cy.createRepository({id: repositoryId});
23
+ cy.presetRepository(repositoryId);
24
+ });
25
+
26
+ afterEach(() => {
27
+ cy.deleteRepository(repositoryId);
28
+ cy.deleteRepository(fedexRepositoryId);
29
+ });
30
+
31
+ it('Should display the correct initial state when navigating via URL', () => {
32
+ // Given, I visit the ACL Management page via URL with a repository selected
33
+ AclManagementSteps.visit();
34
+ // Then,
35
+ verifyStateWithSelectedRepository();
36
+ });
37
+
38
+ it('Should display the correct initial state when navigating via the navigation menu', () => {
39
+ // Given, I visit the ACL Management page via the navigation menu with a repository selected
40
+ HomeSteps.visit();
41
+ MainMenuSteps.clickOnACLManagement();
42
+ // Then,
43
+ verifyStateWithSelectedRepository();
44
+ });
45
+
46
+ it('should prevent ACL management with FedEx repository', () => {
47
+ // Given I have created a Fedex repository
48
+ createFedexRepository(repositoryId, fedexRepositoryId);
49
+ // When I select the fedex repository
50
+ RepositorySelectorSteps.selectRepository(fedexRepositoryId);
51
+ RepositorySelectorSteps.getSelectedRepository().should('contain', fedexRepositoryId);
52
+ RepositorySteps.getActiveRepositoryRow().should('contain', fedexRepositoryId);
53
+ // And I navigate to ACL management page
54
+ MainMenuSteps.clickOnACLManagement();
55
+ // Then I should see the warning message about Fedex repository
56
+ AclManagementSteps.getFedexWarningMessage().should('be.visible');
57
+ AclManagementSteps.getAclManagementContent().should('not.exist');
58
+ // When I switch to graphdb repository
59
+ RepositorySelectorSteps.selectRepository(repositoryId);
60
+ // Then the warning message should be hidden
61
+ AclManagementSteps.getFedexWarningMessage().should('not.exist');
62
+ AclManagementSteps.getAclManagementContent().should('be.visible');
63
+ // When I select a fedex repository
64
+ RepositorySelectorSteps.selectRepository(fedexRepositoryId);
65
+ // Then the fedex warning should become visible
66
+ AclManagementSteps.getFedexWarningMessage().should('be.visible');
67
+ AclManagementSteps.getAclManagementContent().should('not.exist');
68
+ // Go to home page before end to prevent error when delete the repository happens
69
+ HomeSteps.visit();
70
+ });
71
+ })
72
+
73
+ function createFedexRepository(repositoryId, fedexRepositoryId) {
74
+ RepositorySteps.visit();
75
+ RepositorySteps.getCreateRepositoryButton().click();
76
+ RepositorySteps.createFedexRepositoryType();
77
+ cy.url().should('include', '/repository/create/fedx');
78
+ RepositorySteps.typeRepositoryId(fedexRepositoryId);
79
+ RepositorySteps.selectFedexMember(repositoryId);
80
+ RepositorySteps.saveRepository();
81
+ RepositorySteps.getRepositoriesPage().should('be.visible');
82
+ RepositorySteps.getRepositoryFromList(fedexRepositoryId)
83
+ .should('be.visible');
84
+ }
@@ -0,0 +1,21 @@
1
+ import {MainMenuSteps} from "../../../steps/main-menu-steps";
2
+ import HomeSteps from "../../../steps/home-steps";
3
+ import {ErrorSteps} from "../../../steps/error-steps";
4
+ import {AclManagementSteps} from "../../../steps/setup/acl-management-steps";
5
+
6
+ describe('ACL Management initial state without repositories', () => {
7
+ it('Should display the correct initial state when navigating via URL', () => {
8
+ // Given, I visit the ACL Management page via URL without repositories selected
9
+ AclManagementSteps.visit();
10
+ // Then,
11
+ ErrorSteps.verifyNoConnectedRepoMessage();
12
+ });
13
+
14
+ it('Should display the correct initial state when navigating via the navigation menu', () => {
15
+ // Given, I visit the ACL Management page via the navigation menu without repositories selected
16
+ HomeSteps.visit();
17
+ MainMenuSteps.clickOnACLManagement();
18
+ // Then,
19
+ ErrorSteps.verifyNoConnectedRepoMessage();
20
+ });
21
+ });
@@ -2,6 +2,7 @@ import {AclManagementSteps} from "../../../steps/setup/acl-management-steps";
2
2
  import {ACL_VIEW} from "../../../steps/setup/acl-management-steps";
3
3
  import {ApplicationSteps} from "../../../steps/application-steps";
4
4
 
5
+
5
6
  describe('ACL Management: create rule', () => {
6
7
 
7
8
  let repositoryId;
@@ -259,6 +260,9 @@ describe('ACL Management: create rule', () => {
259
260
  // Then I expect the prefix warning to appear
260
261
  AclManagementSteps.getPrefixWarning(0).should('be.visible');
261
262
  AclManagementSteps.getPrefixWarning(0).should('contain.text', 'Custom roles should be entered without the "CUSTOM_" prefix in Workbench');
263
+ // When I blur the field, the warning should not be visible
264
+ AclManagementSteps.blurRole(0);
265
+ AclManagementSteps.getPrefixWarning(0).should('not.exist');
262
266
  // When I save the rule
263
267
  AclManagementSteps.saveRule(0);
264
268
  // Then the text should be how the user typed it