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
@@ -0,0 +1,126 @@
1
+ import {UserAndAccessSteps} from "../../../steps/setup/user-and-access-steps";
2
+ import {LoginSteps} from "../../../steps/login-steps";
3
+ import {GraphqlPlaygroundSteps} from "../../../steps/graphql/graphql-playground-steps";
4
+ import {RepositorySteps} from "../../../steps/repository-steps";
5
+
6
+ describe('GraphQL-only User – Playground Access & Mutation Restriction', () => {
7
+ let repositoryId;
8
+ const gqlUsername = `gqluser-${Date.now()}`;
9
+ const testPassword = 'P@ssw0rd123!';
10
+ const readQuery = `
11
+ query StarshipById {
12
+ starship(ID: "https://swapi.co/resource/starship/9") {
13
+ name
14
+ }
15
+ }
16
+ `;
17
+ const mutation = `
18
+ mutation CreateHuman {
19
+ create_Human(
20
+ objects: [
21
+ {
22
+ id: "file:/test/onto/vocabulary/Human1",
23
+ rdfs_label: "New human with specific iri id"
24
+ }
25
+ ]
26
+ ) {
27
+ human { id }
28
+ affected_objects { ids }
29
+ }
30
+ }
31
+ `;
32
+
33
+ beforeEach(() => {
34
+ repositoryId = `repo-${Date.now()}`;
35
+ cy.createRepository({ id: repositoryId });
36
+ cy.presetRepository(repositoryId);
37
+ cy.importServerFile(repositoryId, 'swapi-dataset.ttl');
38
+ cy.uploadGraphqlSchema(repositoryId, 'graphql/soml/swapi-schema.yaml', 'swapi');
39
+ });
40
+
41
+ afterEach(() => {
42
+ cy.loginAsAdmin();
43
+ cy.switchOffSecurity(true);
44
+ cy.deleteUser(gqlUsername);
45
+ cy.deleteRepository(repositoryId);
46
+ });
47
+
48
+ it('should see only the assigned repo, block SPARQL, allow GraphQL read and forbid writes, and hide create-repo everywhere', () => {
49
+ UserAndAccessSteps.visit();
50
+ UserAndAccessSteps.clickCreateNewUserButton();
51
+ UserAndAccessSteps.typeUsername(gqlUsername);
52
+ UserAndAccessSteps.typePassword(testPassword);
53
+ UserAndAccessSteps.typeConfirmPasswordField(testPassword);
54
+ UserAndAccessSteps.clickReadAccessRepo(repositoryId);
55
+ UserAndAccessSteps.clickGraphqlAccessRepo(repositoryId);
56
+ UserAndAccessSteps.confirmUserCreate();
57
+
58
+ UserAndAccessSteps.toggleSecurity();
59
+
60
+ // Log in as GraphQL-only user
61
+ LoginSteps.loginWithUser(gqlUsername, testPassword);
62
+
63
+ // The repository is set
64
+ RepositorySteps.verifyRepositoryIsSelected(repositoryId);
65
+
66
+ // Verify only the assigned repository appears in endpoints
67
+ GraphqlPlaygroundSteps.visit();
68
+ GraphqlPlaygroundSteps.getView().should('be.visible');
69
+ GraphqlPlaygroundSteps.getQueryEditor().should('be.visible');
70
+ GraphqlPlaygroundSteps.getSelectedEndpoint().should('have.text', 'swapi');
71
+ // And I can execute a query on the countries endpoint
72
+ GraphqlPlaygroundSteps.setInEditor(readQuery);
73
+ // And I execute the query
74
+ GraphqlPlaygroundSteps.executeQuery();
75
+ // Then I get expected result
76
+ GraphqlPlaygroundSteps.getResponse().should('contain', '"name": "Death Star"');
77
+
78
+ // Execute the create_Human mutation → expect errors
79
+ GraphqlPlaygroundSteps.setInEditor(mutation);
80
+ GraphqlPlaygroundSteps.executeQuery();
81
+ GraphqlPlaygroundSteps.getResponse().should('contain.text', 'errors');
82
+ LoginSteps.logout();
83
+ });
84
+
85
+ it('should allow GraphQL mutation and hide SPARQL/Import/Create-repo menus', () => {
86
+ UserAndAccessSteps.visit();
87
+ UserAndAccessSteps.clickCreateNewUserButton();
88
+ UserAndAccessSteps.typeUsername(gqlUsername);
89
+ UserAndAccessSteps.typePassword(testPassword);
90
+ UserAndAccessSteps.typeConfirmPasswordField(testPassword);
91
+ UserAndAccessSteps.clickReadAccessRepo(repositoryId);
92
+ UserAndAccessSteps.clickWriteAccessRepo(repositoryId);
93
+ UserAndAccessSteps.clickGraphqlAccessRepo(repositoryId);
94
+ UserAndAccessSteps.confirmUserCreate();
95
+
96
+ UserAndAccessSteps.toggleSecurity();
97
+
98
+ // Log in as the new user
99
+ LoginSteps.loginWithUser(gqlUsername, testPassword);
100
+
101
+ // The repository is set
102
+ RepositorySteps.verifyRepositoryIsSelected(repositoryId);
103
+
104
+ // Visit GraphQL Playground
105
+ GraphqlPlaygroundSteps.visit();
106
+ GraphqlPlaygroundSteps.getView().should('be.visible');
107
+ GraphqlPlaygroundSteps.getQueryEditor().should('be.visible');
108
+ GraphqlPlaygroundSteps.getSelectedEndpoint().should('have.text', 'swapi');
109
+
110
+ // Execute a read query to verify read access
111
+ GraphqlPlaygroundSteps.setInEditor(readQuery);
112
+ GraphqlPlaygroundSteps.executeQuery();
113
+ GraphqlPlaygroundSteps.getResponse()
114
+ .should('contain.text', '"name": "Death Star"');
115
+
116
+ // Execute the mutation and expect success
117
+ GraphqlPlaygroundSteps.setInEditor(mutation);
118
+ GraphqlPlaygroundSteps.executeQuery();
119
+ GraphqlPlaygroundSteps.getResponse()
120
+ .should('contain.text', 'data')
121
+ .and('contain.text', 'create_Human')
122
+ .and('contain.text', 'affected_objects');
123
+
124
+ LoginSteps.logout();
125
+ });
126
+ });
@@ -0,0 +1,70 @@
1
+ import {UserAndAccessSteps} from "../../../steps/setup/user-and-access-steps";
2
+ import {LoginSteps} from "../../../steps/login-steps";
3
+ import {YasqeSteps} from "../../../steps/yasgui/yasqe-steps";
4
+ import {YasrSteps} from "../../../steps/yasgui/yasr-steps";
5
+ import {MainMenuSteps} from "../../../steps/main-menu-steps";
6
+ import HomeSteps from "../../../steps/home-steps";
7
+ import {ActiveRepositoryWidgetSteps} from "../../../steps/widgets/active-repository-widget-steps";
8
+
9
+ describe('Repository Admin – Permissions and Access Control', () => {
10
+ const repoAdminUsername = `repoadmin-${Date.now()}`;
11
+ const password = 'Admin123!';
12
+ let repositoryId;
13
+
14
+ beforeEach(() => {
15
+ repositoryId = `repo-${Date.now()}`;
16
+ cy.createRepository({ id: repositoryId });
17
+ cy.presetRepository(repositoryId);
18
+ cy.initializeRepository(repositoryId);
19
+
20
+ UserAndAccessSteps.visit();
21
+ UserAndAccessSteps.clickCreateNewUserButton();
22
+ UserAndAccessSteps.typeUsername(repoAdminUsername);
23
+ UserAndAccessSteps.typePassword(password);
24
+ UserAndAccessSteps.typeConfirmPasswordField(password);
25
+ UserAndAccessSteps.selectRoleRadioButton('#roleRepoAdmin');
26
+
27
+ UserAndAccessSteps.getReadAccessForRepo('*').should('be.checked').and('be.disabled');
28
+ UserAndAccessSteps.getWriteAccessForRepo('*').should('be.checked').and('be.disabled');
29
+
30
+ UserAndAccessSteps.confirmUserCreate();
31
+ UserAndAccessSteps.toggleSecurity();
32
+ });
33
+
34
+ afterEach(() => {
35
+ cy.loginAsAdmin();
36
+ cy.switchOffSecurity(true);
37
+ cy.deleteUser(repoAdminUsername);
38
+ cy.deleteRepository(repositoryId);
39
+ });
40
+
41
+ it('Repository admin has correct access and restrictions', () => {
42
+ LoginSteps.visitLoginPage();
43
+ LoginSteps.loginWithUser(repoAdminUsername, password);
44
+
45
+ // SPARQL – read access
46
+ MainMenuSteps.clickOnSparqlMenu();
47
+
48
+ YasqeSteps.getEditor().should('be.visible');
49
+ YasqeSteps.executeQuery();
50
+
51
+ // SPARQL – write access
52
+ YasqeSteps.clearEditor();
53
+ const prefix = 'PREFIX ex: <http://example.org/>\n';
54
+ const query = 'INSERT DATA {\n' +
55
+ 'ex:greeting ex:text "Hello, world!" .\n' +
56
+ '}';
57
+ cy.pasteIntoCodeMirror('.CodeMirror', prefix + query);
58
+ YasqeSteps.executeQueryWithoutWaiteResult();
59
+ // Verify read access
60
+ YasrSteps.getResponseInfo()
61
+ .should('not.have.class', 'hidden')
62
+ .should('not.have.class', 'empty')
63
+ .should('be.visible')
64
+ .should('contain.text', 'Added 1 statements.');
65
+
66
+ // Create repo button on homepage should be visible
67
+ HomeSteps.visit();
68
+ ActiveRepositoryWidgetSteps.getImportLink().scrollIntoView().should('be.visible').and('not.be.disabled');
69
+ });
70
+ });
@@ -0,0 +1,99 @@
1
+ import {MainMenuSteps} from "../../../steps/main-menu-steps";
2
+ import {UserAndAccessSteps} from "../../../steps/setup/user-and-access-steps";
3
+ import {LoginSteps} from "../../../steps/login-steps";
4
+ import {ToasterSteps} from "../../../steps/toaster-steps";
5
+ import {HeaderSteps} from '../../../steps/header-steps.js';
6
+ import HomeSteps from '../../../steps/home-steps.js';
7
+
8
+ describe('Turn on Security', () => {
9
+
10
+ beforeEach(() => {
11
+ cy.loginAsAdmin();
12
+ cy.switchOnSecurity();
13
+ });
14
+
15
+ afterEach(() => {
16
+ cy.loginAsAdmin();
17
+ cy.switchOffSecurity(true);
18
+ })
19
+
20
+ it('should enable security and show login screen', () => {
21
+ // Navigate to Users & Access
22
+ UserAndAccessSteps.visit();
23
+ // Verify we are redirected to login page
24
+ cy.url().should('include', '/login');
25
+ HeaderSteps.getHeader().should('not.exist');
26
+ MainMenuSteps.getMainMenu().should('not.exist');
27
+ });
28
+
29
+ it('should reject wrong credentials and accept admin/root', () => {
30
+ // Attempt login with invalid credentials
31
+ LoginSteps.visitLoginPage();
32
+ LoginSteps.loginWithUser('wrongUser', 'wrongPass');
33
+ // Expect error message
34
+ ToasterSteps.verifyNewToasterError('Wrong credentials');
35
+
36
+ // Login with correct admin credentials
37
+ LoginSteps.visitLoginPage();
38
+ LoginSteps.loginWithUser('admin', 'root');
39
+ cy.url().should('include', '/');
40
+ });
41
+
42
+ it('should show toaster after logging out', () => {
43
+ UserAndAccessSteps.visit();
44
+ LoginSteps.loginWithUser('admin', 'root');
45
+ // Verify we are logged in
46
+ UserAndAccessSteps.getUsersCatalogContainer().should('be.visible');
47
+ // Log out
48
+ HeaderSteps.logout();
49
+ cy.url().should('include', '/login');
50
+ // Verify toaster message
51
+ ToasterSteps.verifySuccess('Signed out');
52
+ })
53
+
54
+ describe('Password Change', () => {
55
+ afterEach(() => {
56
+ // Reset password back to original value for test isolation
57
+ UserAndAccessSteps.visit();
58
+ UserAndAccessSteps.openEditUserPage('admin');
59
+ UserAndAccessSteps.typePassword('root');
60
+ UserAndAccessSteps.typeConfirmPasswordField('root');
61
+ UserAndAccessSteps.confirmUserEdit();
62
+ UserAndAccessSteps.getUsersCatalogContainer().should('be.visible');
63
+ })
64
+
65
+ it('should change admin password and enforce new credentials', () => {
66
+ // Navigate to Users & Access after login
67
+ UserAndAccessSteps.visit();
68
+ // Verify we are redirected to login page
69
+ cy.url().should('include', '/login');
70
+ // Login with admin credentials
71
+ LoginSteps.loginWithUser('admin', 'root');
72
+ // Verify we are logged in
73
+ UserAndAccessSteps.getUsersCatalogContainer().should('be.visible');
74
+
75
+ // Open edit page for admin user
76
+ UserAndAccessSteps.openEditUserPage('admin');
77
+
78
+ // Change password to a new value
79
+ let newPassword = 'MyNewP@ssw0rd!';
80
+ UserAndAccessSteps.typePassword(newPassword);
81
+ UserAndAccessSteps.typeConfirmPasswordField(newPassword);
82
+ UserAndAccessSteps.confirmUserEdit();
83
+
84
+ // Log out
85
+ LoginSteps.logout();
86
+ cy.url().should('include', '/login');
87
+
88
+ // Attempt login with old password
89
+ LoginSteps.loginWithUser('admin', 'root');
90
+ ToasterSteps.verifyNewToasterError('Wrong credentials');
91
+
92
+ // Attempt login with new password
93
+ LoginSteps.visitLoginPage();
94
+ LoginSteps.loginWithUser('admin', newPassword);
95
+ // Verify we are logged in and we are on the home page
96
+ HomeSteps.getView().should('be.visible');
97
+ });
98
+ });
99
+ });
@@ -0,0 +1,87 @@
1
+ import {RepositoriesStubs} from '../../../stubs/repositories/repositories-stubs';
2
+ import {UserAndAccessSteps} from '../../../steps/setup/user-and-access-steps';
3
+ import {LoginSteps} from '../../../steps/login-steps';
4
+ import {ModalDialogSteps} from '../../../steps/modal-dialog-steps';
5
+ import {MainMenuSteps} from '../../../steps/main-menu-steps';
6
+ import {RepositorySelectorSteps} from '../../../steps/repository-selector-steps';
7
+ import {ErrorSteps} from '../../../steps/error-steps';
8
+
9
+ describe('User and Access', () => {
10
+
11
+ let repositoryId1;
12
+ let repositoryId2;
13
+ const graphqlUser = 'graphqlUser';
14
+
15
+ beforeEach(() => {
16
+ cy.viewport(1280, 1000);
17
+ RepositoriesStubs.spyGetRepositories();
18
+ repositoryId1 = 'user-access-repo1-' + Date.now();
19
+ repositoryId2 = 'user-access-repo2-' + Date.now();
20
+ cy.createRepository({id: repositoryId1});
21
+ cy.createRepository({id: repositoryId2});
22
+ cy.presetRepository(repositoryId1);
23
+ UserAndAccessSteps.visit();
24
+ // Users table should be visible
25
+ UserAndAccessSteps.getUsersTable().should('be.visible');
26
+ });
27
+
28
+ afterEach(() => {
29
+ cy.loginAsAdmin().then(() => {
30
+ cy.deleteRepository(repositoryId1, true);
31
+ cy.deleteRepository(repositoryId2, true);
32
+ cy.deleteUser(graphqlUser, true);
33
+ cy.switchOffFreeAccess(true);
34
+ cy.switchOffSecurity(true);
35
+ });
36
+
37
+ });
38
+
39
+ it('should restrict page when free access in on', () => {
40
+ // Given: There at least two repositories.
41
+ // When: I enable the security
42
+ UserAndAccessSteps.toggleSecurity();
43
+ LoginSteps.loginWithUser('admin', 'root');
44
+ // And: turn on Free Access
45
+ UserAndAccessSteps.getFreeAccessSwitchInput().should('not.be.checked');
46
+ UserAndAccessSteps.toggleFreeAccess();
47
+ // And: set graphql rights for the second repository when free access is ON
48
+ UserAndAccessSteps.clickFreeWriteAccessRepo(repositoryId2);
49
+ UserAndAccessSteps.clickFreeGraphqlAccessRepo(repositoryId2);
50
+ ModalDialogSteps.clickOKButton();
51
+
52
+ // When: I logout
53
+ LoginSteps.logout();
54
+ // And: repository with graphql rights is selected
55
+ RepositorySelectorSteps.selectRepository(repositoryId2);
56
+ // And: I click on the Import menu.
57
+ MainMenuSteps.clickOnMenuImport();
58
+
59
+ // Then: I should see the error message, because import view is available only for write access, repositoryId2 has only graphql rights.
60
+ ErrorSteps.verifyError('Some functionalities are not available because you do not have the required repository permissions.')
61
+ });
62
+
63
+ it('should restrict the repositories depending on whether free access is enabled and whether the user is logged in', () => {
64
+ // Given: There at least two repositories.
65
+ // When: I enable the security
66
+ UserAndAccessSteps.toggleSecurity();
67
+ LoginSteps.loginWithUser('admin', 'root');
68
+ // And: turn on Free Access
69
+ UserAndAccessSteps.toggleFreeAccess();
70
+ // And: set rights for the second repository when free access is ON
71
+ UserAndAccessSteps.clickFreeWriteAccessRepo(repositoryId2);
72
+ ModalDialogSteps.clickOKButton();
73
+
74
+ // When: I logout
75
+ LoginSteps.logout();
76
+ // Then: I should see only repositoryId2, as it is the only one configured for free access
77
+ RepositorySelectorSteps.getRepositorySelectorButton(repositoryId1).should('not.exist');
78
+ RepositorySelectorSteps.getRepositorySelectorButton(repositoryId2).should('exist');
79
+
80
+ // When: I log in again with a user who has access to all repositories
81
+ LoginSteps.navigateToLoginPage();
82
+ LoginSteps.loginWithUser('admin', 'root');
83
+ // Then: I should see both repositories in the repository selector, because the user has access to all repositories
84
+ RepositorySelectorSteps.getRepositorySelectorButton(repositoryId1).should('exist');
85
+ RepositorySelectorSteps.getRepositorySelectorButton(repositoryId2).should('exist');
86
+ });
87
+ });
@@ -0,0 +1,38 @@
1
+ import {UserAndAccessSteps} from "../../../steps/setup/user-and-access-steps";
2
+ import {MainMenuSteps} from "../../../steps/main-menu-steps";
3
+
4
+ describe('Users and Access initial state', () => {
5
+ beforeEach(() => {
6
+ cy.intercept('GET', '**/rest/security/users').as('getUsers');
7
+ });
8
+
9
+ it('Should display the correct initial state when navigating via URL', () => {
10
+ // Given, I visit the Users and Access page via URL
11
+ UserAndAccessSteps.visit();
12
+ // Then,
13
+ validateInitialState();
14
+ });
15
+
16
+ it('Should display the correct initial state when navigating via the navigation menu', () => {
17
+ // Given, I visit the Users and Access page via the navigation menu
18
+ UserAndAccessSteps.visit();
19
+ MainMenuSteps.clickOnUsersAndAccess();
20
+ // Then,
21
+ validateInitialState();
22
+ });
23
+ })
24
+
25
+ function validateInitialState() {
26
+ cy.wait('@getUsers').then(({ response }) => {
27
+ const users = response.body;
28
+ expect(users).to.have.length(1);
29
+ expect(users[0].grantedAuthorities).to.have.length(1);
30
+ });
31
+
32
+ UserAndAccessSteps.getTableRow().should('have.length', 1);
33
+ UserAndAccessSteps.findUserInTable('admin')
34
+ .within(() => {
35
+ cy.get('.username').should('contain', 'admin');
36
+ });
37
+ UserAndAccessSteps.getToggleSecurityCheckbox().should('not.be.checked');
38
+ }
@@ -0,0 +1,39 @@
1
+ import globals from 'globals';
2
+ import pluginJs from '@eslint/js';
3
+ import pluginCypress from 'eslint-plugin-cypress/flat';
4
+
5
+ export default [
6
+ {
7
+ files: ['**/*.{js,mjs,cjs}'],
8
+ plugins: { js: pluginJs },
9
+ languageOptions: { globals: globals.browser },
10
+ rules: {
11
+ ...pluginJs.configs.recommended.rules,
12
+ },
13
+ },
14
+ {
15
+ files: ['**/*.{js,mjs,cjs}'],
16
+ plugins: { cypress: pluginCypress },
17
+ languageOptions: {
18
+ globals: {
19
+ ...globals.browser,
20
+ cy: 'readonly',
21
+ Cypress: 'readonly',
22
+ describe: 'readonly',
23
+ it: 'readonly',
24
+ beforeEach: 'readonly',
25
+ afterEach: 'readonly',
26
+ before: 'readonly',
27
+ after: 'readonly',
28
+ expect: 'readonly',
29
+
30
+ // Node.js globals for scripts
31
+ process: 'readonly',
32
+ }
33
+ },
34
+ rules: {
35
+ ...pluginJs.configs.recommended.rules,
36
+ ...pluginCypress.configs.recommended.rules,
37
+ },
38
+ },
39
+ ];
@@ -0,0 +1,59 @@
1
+ [
2
+ {
3
+ "id": "de99fd5de7f94ef98f1875dff55fc1c9",
4
+ "name": "Graph Config 1",
5
+ "startMode": "search",
6
+ "owner": "admin",
7
+ "startQueryIncludeInferred": true,
8
+ "startQuerySameAs": true,
9
+ "startGraphQuery": "# CONSTRUCT or DESCRIBE query. The results will be rendered visually as a graph of triples.\nCONSTRUCT WHERE {\n\t?s ?p ?o\n} LIMIT 10",
10
+ "startIRI": null,
11
+ "startIRILabel": null,
12
+ "expandQuery": null,
13
+ "resourceQuery": null,
14
+ "predicateLabelQuery": null,
15
+ "resourcePropertiesQuery": null,
16
+ "shared": false,
17
+ "description": null,
18
+ "hint": null,
19
+ "repositoryId": "A_test"
20
+ },
21
+ {
22
+ "id": "94cab6579df445c68c454b2156013811",
23
+ "name": "Graph Config 1",
24
+ "startMode": "search",
25
+ "owner": "admin",
26
+ "startQueryIncludeInferred": true,
27
+ "startQuerySameAs": true,
28
+ "startGraphQuery": "# CONSTRUCT or DESCRIBE query. The results will be rendered visually as a graph of triples.\nCONSTRUCT WHERE {\n\t?s ?p ?o\n} LIMIT 10",
29
+ "startIRI": null,
30
+ "startIRILabel": null,
31
+ "expandQuery": null,
32
+ "resourceQuery": null,
33
+ "predicateLabelQuery": null,
34
+ "resourcePropertiesQuery": null,
35
+ "shared": false,
36
+ "description": null,
37
+ "hint": null,
38
+ "repositoryId": null
39
+ },
40
+ {
41
+ "id": "94cab6579df445c68c454b2156013661",
42
+ "name": "Graph Config 1",
43
+ "startMode": "query",
44
+ "owner": "admin",
45
+ "startQueryIncludeInferred": true,
46
+ "startQuerySameAs": true,
47
+ "startGraphQuery": "# CONSTRUCT or DESCRIBE query. The results will be rendered visually as a graph of triples.\nCONSTRUCT WHERE {\n\t?s ?p ?o\n} LIMIT 10",
48
+ "startIRI": null,
49
+ "startIRILabel": null,
50
+ "expandQuery": null,
51
+ "resourceQuery": null,
52
+ "predicateLabelQuery": null,
53
+ "resourcePropertiesQuery": null,
54
+ "shared": false,
55
+ "description": null,
56
+ "hint": null,
57
+ "repositoryId": null
58
+ }
59
+ ]
@@ -0,0 +1,12 @@
1
+ [
2
+ {
3
+ "guideName": {
4
+ "en": "Autocomplete guide"
5
+ },
6
+ "steps": [
7
+ {
8
+ "guideBlockName": "enable-autocomplete"
9
+ }
10
+ ]
11
+ }
12
+ ]
@@ -0,0 +1,35 @@
1
+ [
2
+ {
3
+ "guideName": {
4
+ "en": "Ontology Navigator with FIBO guide"
5
+ },
6
+ "steps": [
7
+ {
8
+ "guideBlockName": "class-hierarchy-instances",
9
+ "options": {
10
+ "focusInstances": [{
11
+ "instance": "https://swapi.co/resource/aleena/47",
12
+ "message": "This is planet"
13
+ }],
14
+ "iri": "voc:Sentient",
15
+ "followCountLink": true,
16
+ "showExtraCommentSparql": "true"
17
+ }
18
+ },
19
+ {
20
+ "guideBlockName": "class-hierarchy",
21
+ "options": {
22
+ "introExtraContent": "This is some extra content here",
23
+ "zoomIris": [
24
+ {
25
+ "iri": "voc:Sentient",
26
+ "postExtraContent": {
27
+ "en": "Within <b>voc:Sentient</b> are subclasses like <b>voc:Human</b> (humanoids), <b>voc:Droid</b> (mechanical intelligences), <b>voc:Gungan</b> (the Gungan species), and <b>voc:Yodasspecies</b> (Yoda’s lineage), highlighting the diverse forms of sentient life."
28
+ }
29
+ }
30
+ ]
31
+ }
32
+ }
33
+ ]
34
+ }
35
+ ]
@@ -0,0 +1,33 @@
1
+ [
2
+ {
3
+ "guideName": {
4
+ "en": "Class relations guide"
5
+ },
6
+ "steps": [
7
+ {
8
+ "guideBlockName": "class-relationships",
9
+ "options": {
10
+ "introExtraContent": "Some extra info"
11
+ }
12
+ },
13
+ {
14
+ "guideBlockName": "class-relationships-digram-thickness-intro"
15
+ },
16
+ {
17
+ "guideBlockName": "class-relationships-digram-predicates-intro"
18
+ },
19
+ {
20
+ "guideBlockName": "class-relationships-named-graph-selection"
21
+ },
22
+ {
23
+ "guideBlockName": "class-relationships-class-list-intro"
24
+ },
25
+ {
26
+ "guideBlockName": "class-relationships-class-list-background-intro"
27
+ },
28
+ {
29
+ "guideBlockName": "class-relationships-class-list-selection"
30
+ }
31
+ ]
32
+ }
33
+ ]
@@ -0,0 +1,15 @@
1
+ [
2
+ {
3
+ "guideName": {
4
+ "en": "Confirm cancel dialog"
5
+ },
6
+ "guideDescription": {
7
+ "en": "Confirm cancel dialog guide"
8
+ },
9
+ "steps": [
10
+ {
11
+ "guideBlockName": "welcome"
12
+ }
13
+ ]
14
+ }
15
+ ]