graphdb-workbench-tests 3.4.0-TR4 → 3.4.0-TR6

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,87 @@
1
+ import HomeSteps from '../../steps/home-steps';
2
+ import {RepositoryErrorsWidgetSteps} from "../../steps/widgets/repository-errors-widget-steps";
3
+ import {LicenseWidgetSteps} from "../../steps/widgets/license-widget-steps";
4
+ import {RepositoriesStubs} from "../../stubs/repositories/repositories-stubs";
5
+ import {LicenseStubs} from "../../stubs/license-stubs";
6
+
7
+ describe('Home page: without repositories', () => {
8
+
9
+ beforeEach(() => {
10
+ cy.viewport(1280, 1000);
11
+ RepositoriesStubs.spyGetRepositories();
12
+ LicenseStubs.spyGetLicense();
13
+ HomeSteps.visitAndWaitLoader();
14
+ cy.wait('@getRepositories');
15
+ });
16
+
17
+ it('should render navigation menu', () => {
18
+ HomeSteps.getNavigationMenu().should('be.visible');
19
+ });
20
+
21
+ it('should render page header with tools', () => {
22
+ // RDF search box should not be visible when there is no selected repository
23
+ HomeSteps.getRDFSearchButton().should('not.be.visible');
24
+ // Repository selector menu should be visible and empty
25
+ HomeSteps.getRepositorySelector().should('be.visible');
26
+ HomeSteps.getSelectedRepository().should('contain', 'No accessible repositories');
27
+ // Language selector menu should be visible and default to English
28
+ HomeSteps.getLanguageSelector().should('be.visible');
29
+ HomeSteps.getSelectedLanguage().should('contain', 'en');
30
+ });
31
+
32
+ it('should render repository errors widget', () => {
33
+ HomeSteps.getRepositoryErrorsWidget().should('be.visible');
34
+ RepositoryErrorsWidgetSteps.getInfoMessage().should('contain', 'Some functionalities are not available because you are not connected to any repository.');
35
+ RepositoryErrorsWidgetSteps.getCreateRepositoryBtn().should('be.visible');
36
+ RepositoryErrorsWidgetSteps.getShowRemoteLocationsBtn().should('be.visible');
37
+ });
38
+
39
+ it('should render license widget', () => {
40
+ HomeSteps.getLicenseWidget().should('be.visible');
41
+ LicenseWidgetSteps.getLicenseWidgetHeader().should('contain', 'License');
42
+ });
43
+
44
+ it('should not render active repository widget', () => {
45
+ HomeSteps.getActiveRepositoryWidget().should('be.hidden');
46
+ });
47
+
48
+ it('should not render saved SPARQL queries widget', () => {
49
+ HomeSteps.getSavedSparqlQueriesWidget().should('be.hidden');
50
+ });
51
+
52
+ it('should render license widget', () => {
53
+ cy.wait('@get-license');
54
+ HomeSteps.getLicenseWidget().should('be.visible');
55
+ LicenseWidgetSteps.getLicenseWidgetHeader().should('contain', 'License');
56
+ });
57
+
58
+ it('should render page footer', () => {
59
+ HomeSteps.getPageFooter().should('be.visible');
60
+ });
61
+
62
+ it('should render the tutorial panel', () => {
63
+ // When I open the home page
64
+ // Then the tutorial panel should be visible by default
65
+ HomeSteps.getTutorialPanel().should('be.visible');
66
+ // And the tutorial panel should contain the following text:
67
+ HomeSteps.verifyTutorialText(0, 'Welcome to GraphDB');
68
+ HomeSteps.verifyTutorialText(1, 'Create a repository');
69
+ HomeSteps.verifyTutorialText(2, 'Load a sample dataset');
70
+ HomeSteps.verifyTutorialText(3, 'Run a SPARQL query');
71
+ HomeSteps.verifyTutorialText(4, 'REST API');
72
+ });
73
+
74
+ it('should be able to toggle the tutorial panel', () => {
75
+ // Given I open the home page
76
+ // And I see the tutorial panel
77
+ HomeSteps.getTutorialPanel().should('be.visible');
78
+ // When I decline the tutorial
79
+ HomeSteps.hideTutorial();
80
+ // Then the tutorial panel should be closed
81
+ HomeSteps.getTutorialPanel().should('be.not.exist');
82
+ // When I open the tutorial panel
83
+ HomeSteps.showTutorialPanel();
84
+ // Then the tutorial panel should be visible
85
+ HomeSteps.getTutorialPanel().should('be.visible');
86
+ });
87
+ });
@@ -0,0 +1,59 @@
1
+ import HomeSteps from '../../steps/home-steps';
2
+ import {RepositoryErrorsWidgetSteps} from "../../steps/widgets/repository-errors-widget-steps";
3
+ import {RepositoriesStubs} from "../../stubs/repositories/repositories-stubs";
4
+ import {LicenseStubs} from "../../stubs/license-stubs";
5
+ import {SavedQueriesStubs} from "../../stubs/saved-queries-stubs";
6
+
7
+ describe('Home page: without selected repository', () => {
8
+
9
+ let repositoryId;
10
+
11
+ beforeEach(() => {
12
+ repositoryId = 'home-page-' + Date.now();
13
+ cy.createRepository({id: repositoryId});
14
+ cy.viewport(1280, 1000);
15
+ RepositoriesStubs.spyGetRepositories();
16
+ RepositoriesStubs.spyGetActiveLocations();
17
+ LicenseStubs.spyGetLicense();
18
+ SavedQueriesStubs.spyGetSavedQueries();
19
+ HomeSteps.visitAndWaitLoader();
20
+ cy.wait('@getRepositories');
21
+ cy.wait('@getActiveLocations');
22
+ });
23
+
24
+ afterEach(() => {
25
+ cy.deleteRepository(repositoryId);
26
+ });
27
+
28
+ it('should render repository errors widget', () => {
29
+ HomeSteps.getRepositoryErrorsWidget().should('be.visible');
30
+ RepositoryErrorsWidgetSteps.getInfoMessage().should('contain', 'Some functionalities are not available because you are not connected to any repository.');
31
+ RepositoryErrorsWidgetSteps.getCreateRepositoryBtn().should('be.visible');
32
+ RepositoryErrorsWidgetSteps.getShowRemoteLocationsBtn().should('be.visible');
33
+ });
34
+
35
+ // This test is unreliable with the current implementation of the license widget.
36
+ it.skip('should not render active repository widget', () => {
37
+ HomeSteps.getActiveRepositoryWidget().should('be.hidden');
38
+ });
39
+
40
+ it('should not render saved SPARQL queries widget', () => {
41
+ cy.wait('@getSavedQueries');
42
+ HomeSteps.getSavedSparqlQueriesWidget().should('be.hidden');
43
+ });
44
+
45
+ it('should render repository errors widget', () => {
46
+ RepositoryErrorsWidgetSteps.getRepositoryList().should('contain', repositoryId);
47
+ });
48
+
49
+ it('should render page header with tools', () => {
50
+ // RDF search box should not be visible when there is no selected repository
51
+ HomeSteps.getRDFSearchButton().should('not.be.visible');
52
+ // Repository selector menu should be visible and empty
53
+ HomeSteps.getRepositorySelector().should('be.visible');
54
+ HomeSteps.getSelectedRepository().should('contain', 'Choose repository');
55
+ // Language selector menu should be visible and default to English
56
+ HomeSteps.getLanguageSelector().should('be.visible');
57
+ HomeSteps.getSelectedLanguage().should('contain', 'en');
58
+ });
59
+ });
@@ -23,7 +23,7 @@ describe('Home screen language validation', () => {
23
23
  cy.enableAutocomplete(repositoryId);
24
24
  cy.presetRepository(repositoryId);
25
25
 
26
- HomeSteps.declineTutorial();
26
+ HomeSteps.hideTutorial();
27
27
 
28
28
  // When I visit home page with selected repository
29
29
  HomeSteps.visitAndWaitLoader();
@@ -42,4 +42,4 @@ describe('Home screen language validation', () => {
42
42
  HomeSteps.getLicenseAsLabel().should('have.text', 'Licence');
43
43
  });
44
44
  });
45
- })
45
+ });
@@ -0,0 +1,160 @@
1
+ import HomeSteps from '../../steps/home-steps';
2
+ import {RdfResourceSearchSteps} from "../../steps/rdf-resource-search-steps";
3
+ import ImportSteps from "../../steps/import/import-steps";
4
+ import {BaseSteps} from "../../steps/base-steps";
5
+ import {BrowserStubs} from "../../stubs/browser-stubs";
6
+
7
+ const FILE_TO_IMPORT = 'wine.rdf';
8
+
9
+ describe('RDF resource search', () => {
10
+ let repositoryId;
11
+ beforeEach(() => {
12
+ cy.viewport(1280, 1000);
13
+ repositoryId = 'rdf-resource-search-' + Date.now();
14
+ cy.createRepository({id: repositoryId});
15
+ cy.initializeRepository(repositoryId);
16
+ cy.enableAutocomplete(repositoryId);
17
+ });
18
+
19
+ afterEach(() => {
20
+ cy.deleteRepository(repositoryId);
21
+ });
22
+
23
+ it('Search button should not be present when no repo is selected', () => {
24
+ HomeSteps.visitAndWaitLoader();
25
+ RdfResourceSearchSteps.getComponent().should('not.exist');
26
+ });
27
+
28
+ it('Search should only be triggered from the home page when a repository is selected', () => {
29
+ // When: I visit home page with selected repository
30
+ cy.presetRepository(repositoryId);
31
+ HomeSteps.visitAndWaitLoader();
32
+ // And: I click the button
33
+ RdfResourceSearchSteps.clickOnShowViewResourceMessageButton();
34
+ // Then: I should be able to type some text in the input on home page
35
+ HomeSteps.getRdfResourceSearchInput().type('hasPos');
36
+ // And: the autocomplete dropdown should become visible
37
+ HomeSteps.getAutocompleteResultsContainer().should('be.visible');
38
+ // When: I click the close button
39
+ HomeSteps.closeRdfResourceSearchBox();
40
+ // The input should be cleared
41
+ HomeSteps.getRdfResourceSearchInput().should('have.value', '');
42
+ });
43
+
44
+ it('should be visible when a repository is selected and the user is not on the Home page', () => {
45
+ // When: There is a repository selected and I visit a page other than home.
46
+ cy.presetRepository(repositoryId);
47
+ ImportSteps.visit();
48
+ // Then: Search rdf button should be visible
49
+ RdfResourceSearchSteps.getOpenButton().should('be.visible');
50
+
51
+ // When: I click the button
52
+ RdfResourceSearchSteps.openRdfSearchBox();
53
+ // Then: I should be able to type some text in the input
54
+ RdfResourceSearchSteps.getRDFResourceSearchInput().type('hasPos');
55
+ // And: the autocomplete dropdown should become visible
56
+ RdfResourceSearchSteps.getAutocompleteResults().should('be.visible');
57
+
58
+ // When: I close the RDF search box
59
+ RdfResourceSearchSteps.closeRDFSearchBox();
60
+ // And: open again the search box
61
+ RdfResourceSearchSteps.openRdfSearchBox();
62
+ // Then: The input should have value 'hasPos'
63
+ RdfResourceSearchSteps.getRDFResourceSearchInput().should('have.value', 'hasPos');
64
+ // And: the autocomplete dropdown should become visible
65
+ RdfResourceSearchSteps.getAutocompleteResults().should('be.visible');
66
+
67
+ // When: I press 'escape'
68
+ BaseSteps.typeEscapeKey();
69
+ // Then: Search box should not be visible
70
+ RdfResourceSearchSteps.getRDFResourceSearchInput().should('not.be.visible');
71
+ });
72
+
73
+ it('Search should be persisted on page reload', () => {
74
+ // Given: There is a repository selected and I visit a page other than home.
75
+ cy.presetRepository(repositoryId);
76
+ ImportSteps.visit();
77
+ ImportSteps.getView().should('be.visible');
78
+ BrowserStubs.stubWindowOpen();
79
+ // Then: Search rdf button should be visible
80
+ RdfResourceSearchSteps.getOpenButton().should('be.visible');
81
+ // When: I open the search resource component
82
+ RdfResourceSearchSteps.openRdfSearchBox();
83
+ //Then: I should be able to type some text in the input
84
+ RdfResourceSearchSteps.getRDFResourceSearchInput().type('hasPos')
85
+ .then(() => {
86
+ // When: I select option from suggestions
87
+ RdfResourceSearchSteps.clickOnAutocompleteSuggestionByPartialText('hasPos')
88
+ .then(() => {
89
+ // Then: Search result should be opened in new window
90
+ cy.get(BrowserStubs.WINDOW_OPEN_ALIAS()).should('have.been.calledWithMatch', `resource?uri=http%3A%2F%2Fwww.w3.org%2Fns%2Forg%23hasPost`, "_blank");
91
+ });
92
+ });
93
+
94
+ // When: I revisit the home page
95
+ ImportSteps.visit();
96
+ // And: I open again the search box
97
+ RdfResourceSearchSteps.openRdfSearchBox();
98
+ // Then: The input should have value 'hasPos' from previous search
99
+ RdfResourceSearchSteps.getRDFResourceSearchInput().should('have.value', 'hasPos');
100
+ // And: the autocomplete dropdown should become visible
101
+ RdfResourceSearchSteps.getAutocompleteResults().should('be.visible');
102
+
103
+ // When: I press 'escape'
104
+ BaseSteps.typeEscapeKey();
105
+ // Then: Search box should not be visible
106
+ RdfResourceSearchSteps.getRDFResourceSearchInput().should('not.be.visible');
107
+ });
108
+
109
+ it('Should test RDF resource search box', () => {
110
+ // Given: I have a repository with RDF data
111
+ cy.presetRepository(repositoryId);
112
+ cy.importServerFile(repositoryId, FILE_TO_IMPORT);
113
+ // And: I visit the home page
114
+ HomeSteps.visitAndWaitLoader();
115
+ HomeSteps.getView().should('be.visible');
116
+ HomeSteps.getRdfResourceSearchInput().should('be.visible');
117
+ RdfResourceSearchSteps.getShowViewResourceMessageButton().should('be.visible');
118
+
119
+ // When: I click on the RDF resource search button
120
+ RdfResourceSearchSteps.clickOnShowViewResourceMessageButton();
121
+ // Then: The input for RDF resource search should be visible (This is the legacy component used prior to the migration)
122
+ HomeSteps.getRdfResourceSearchInput().should('have.attr', 'placeholder', 'Search RDF resources...')
123
+ .and('be.focused');
124
+
125
+ //Navigate away from the Homepage, to be able to test the new resource search box
126
+ HomeSteps.visitAndWaitLoader();
127
+ BrowserStubs.stubWindowOpen();
128
+ HomeSteps.getView().should('be.visible');
129
+ HomeSteps.getRdfResourceSearchInput().should('be.visible');
130
+ RdfResourceSearchSteps.getShowViewResourceMessageButton().should('be.visible');
131
+
132
+ // Then: The input for RDF resource search should not be visible (This is the legacy component used prior to the migration)
133
+ HomeSteps.getRdfResourceSearchInput().should('be.visible');
134
+ // When: I click on the RDF resource search button
135
+ RdfResourceSearchSteps.clickOnShowViewResourceMessageButton();
136
+ // Then: The input for RDF resource search should be visible (This is the legacy component used prior to the migration)
137
+ HomeSteps.getRdfResourceSearchInput().should('have.attr', 'placeholder', 'Search RDF resources...')
138
+ .and('be.focused');
139
+
140
+ // When: I type some text in the input
141
+ HomeSteps.getRdfResourceSearchInput().type('Dry');
142
+ // Then: The autocomplete results should be visible
143
+ HomeSteps.getAutocompleteSuggestion().should('be.visible')
144
+ .and('have.length', 7);
145
+
146
+ // When: The table display button is active
147
+ HomeSteps.getTableDisplayButton().click();
148
+ // And: click on some suggestion
149
+ HomeSteps.getAutocompleteSuggestionByPartialText('http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine#').click();
150
+ // Then: The clicked suggestion should be opened in new window
151
+ cy.get(BrowserStubs.WINDOW_OPEN_ALIAS()).should('have.been.calledWithMatch', `resource?uri=http%3A%2F%2Fwww.w3.org%2FTR%2F2003%2FPR-owl-guide-20031209%2Fwine%23Dry`);
152
+
153
+ // When: The visual display button is active
154
+ HomeSteps.getVisualDisplayButton().click();
155
+ // And: click on some suggestion
156
+ HomeSteps.getAutocompleteSuggestionByPartialText('http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine#').click();
157
+ // Then: The clicked suggestion should be opened in new window
158
+ cy.get(BrowserStubs.WINDOW_OPEN_ALIAS()).should('have.been.calledWithMatch', `graphs-visualizations?uri=http%3A%2F%2Fwww.w3.org%2FTR%2F2003%2FPR-owl-guide-20031209%2Fwine%23Dry`);
159
+ });
160
+ });
@@ -0,0 +1,65 @@
1
+ import HomeSteps from '../../steps/home-steps';
2
+ import {BrowserStubs} from "../../stubs/browser-stubs";
3
+
4
+ describe('View resource autocomplete', () => {
5
+
6
+ const FOAT_SNIPPET = '@base <http://example.org/> .\n' +
7
+ '@prefix foaf: <http://xmlns.com/foaf/0.1/> .\n' +
8
+ '<#green-goblin>\n' +
9
+ 'a foaf:Person ; # in the context of the Marvel universe\n' +
10
+ 'foaf:name "Green Goblin" .\n';
11
+ const GOBLIN_URI = 'http://example.org/#green-goblin';
12
+
13
+ let repositoryId;
14
+
15
+ beforeEach(() => {
16
+ cy.viewport(1280, 1000);
17
+ repositoryId = 'view-resource-autocomplete-' + Date.now();
18
+ cy.createRepository({id: repositoryId});
19
+ BrowserStubs.stubWindowOpen();
20
+ });
21
+
22
+ afterEach(() => {
23
+ cy.deleteRepository(repositoryId);
24
+ });
25
+
26
+ it('Test homepage autocomplete when it is enabled', () => {
27
+ HomeSteps.selectRepo(repositoryId);
28
+
29
+ // Type an invalid resource
30
+ HomeSteps.getAutocompleteInput().type('hfsafa');
31
+ HomeSteps.noAutocompleteToast();
32
+
33
+ cy.importRDFTextSnippet(repositoryId, FOAT_SNIPPET);
34
+ cy.enableAutocomplete(repositoryId);
35
+
36
+ HomeSteps.visitAndWaitLoader();
37
+ BrowserStubs.stubWindowOpen();
38
+
39
+ // When: The table display button is active
40
+ HomeSteps.getAutocompleteDisplayTypeButton('table').click();
41
+ // And: select an autocomplete suggestion
42
+ HomeSteps.autocompleteText('Green', GOBLIN_URI)
43
+ HomeSteps.autocompleteText('Green', GOBLIN_URI)
44
+ HomeSteps.getAutocompleteResultElement(GOBLIN_URI).click()
45
+ // Then: The clicked suggestion should be opened in new window
46
+ cy.get(BrowserStubs.WINDOW_OPEN_ALIAS()).should('be.calledWith', 'resource?uri=http%3A%2F%2Fexample.org%2F%23green-goblin');
47
+
48
+ // When: The visual display button is active
49
+ HomeSteps.getAutocompleteDisplayTypeButton('visual').click();
50
+ // And: select an autocomplete suggestion
51
+ HomeSteps.getAutocompleteResultElement(GOBLIN_URI).click()
52
+ // Then: clicked suggestion should be opened in new window
53
+ cy.get(BrowserStubs.WINDOW_OPEN_ALIAS()).should('be.calledWith', 'graphs-visualizations?uri=http%3A%2F%2Fexample.org%2F%23green-goblin')
54
+ });
55
+
56
+ it('should not suggest resources in "View resources" when autocomplete is not enabled', () => {
57
+ cy.importRDFTextSnippet(repositoryId, FOAT_SNIPPET);
58
+
59
+ HomeSteps.visitAndWaitLoader();
60
+ HomeSteps.selectRepo(repositoryId);
61
+
62
+ HomeSteps.getAutocompleteInput().type('Green');
63
+ HomeSteps.noAutocompleteToast();
64
+ });
65
+ });
@@ -28,7 +28,7 @@ describe('Import server files', () => {
28
28
  // When I switch to the server files tab
29
29
  ImportUserDataSteps.openServerFilesTab();
30
30
  // Then Server files tab should be active
31
- cy.url().should('include', '/import#server');
31
+ cy.url().should('include', '/import').and('include', '#server');
32
32
  ImportServerFilesSteps.getActiveTab().should('have.text', 'Server files');
33
33
  ImportServerFilesSteps.getResourcesTable().should('be.visible');
34
34
  });
@@ -37,7 +37,7 @@ describe('Import server files', () => {
37
37
  // When I visit the import page through a direct link to the server files tab
38
38
  cy.visit('/import#server');
39
39
  // Then Server files tab should be active
40
- cy.url().should('include', '/import#server');
40
+ cy.url().should('include', '/import').and('include', '#server');
41
41
  ImportServerFilesSteps.getActiveTab().should('have.text', 'Server files');
42
42
  ImportServerFilesSteps.getResourcesTable().should('be.visible');
43
43
  });
@@ -127,7 +127,9 @@ describe('Import server files', () => {
127
127
  ImportResourceMessageDialog.getDialog().should('be.visible');
128
128
 
129
129
  // with full error message
130
- ImportResourceMessageDialog.getMessage().should('have.value', 'RDF Parse Error: The element type "ex:looooooooooooooooooooooooooooooooongTaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaame" must be terminated by the matching end-tag "</ex:looooooooooooooooooooooooooooooooongTaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaame>". [line 9, column 6]');
130
+ ImportResourceMessageDialog
131
+ .getMessage()
132
+ .should('contain.text', 'RDF Parse Error: The element type "ex:looooooooooooooooooooooooooooooooongTaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaame" must be terminated by the matching end-tag');
131
133
 
132
134
  // When I click on corner close button.
133
135
  ImportResourceMessageDialog.close();
@@ -1,7 +1,7 @@
1
1
  import {ImportSettingsDialogSteps} from "../../steps/import/import-settings-dialog-steps";
2
- import {MainMenuSteps} from "../../steps/main-menu-steps";
3
2
  import {ImportUserDataSteps} from "../../steps/import/import-user-data-steps";
4
3
  import {FileOverwriteDialogSteps} from "../../steps/import/file-overwrite-dialog-steps";
4
+ import {HeaderSteps} from '../../steps/header-steps.js';
5
5
 
6
6
  const bnodes = `_:node0 <http://purl.org/dc/elements/1.1/title> "A new book" ;
7
7
  \t<http://purl.org/dc/elements/1.1/creator> "A.N.Other" .`;
@@ -15,7 +15,6 @@ const jsonld = JSON.stringify({
15
15
  });
16
16
 
17
17
  describe('Import user data: File upload', () => {
18
-
19
18
  let repositoryId;
20
19
  const testFiles = [
21
20
  'bnodes.ttl',
@@ -39,7 +38,8 @@ describe('Import user data: File upload', () => {
39
38
  // Given there are no files uploaded yet
40
39
  ImportUserDataSteps.getResourcesTable().should('be.hidden');
41
40
  // When I start to upload a file
42
- ImportUserDataSteps.selectFile(ImportUserDataSteps.createFile(testFiles[0], bnodes));
41
+ const file1 = ImportUserDataSteps.createFile(testFiles[0], bnodes);
42
+ ImportUserDataSteps.selectFile(file1);
43
43
  // Then the import settings dialog should open automatically
44
44
  ImportSettingsDialogSteps.getDialog().should('be.visible');
45
45
  ImportSettingsDialogSteps.import();
@@ -63,7 +63,8 @@ describe('Import user data: File upload', () => {
63
63
  // Given there are no files uploaded yet
64
64
  ImportUserDataSteps.getResourcesTable().should('be.hidden');
65
65
  // And I have selected to upload a file
66
- ImportUserDataSteps.selectFile(ImportUserDataSteps.createFile(testFiles[0], bnodes));
66
+ const file = ImportUserDataSteps.createFile(testFiles[0], bnodes);
67
+ ImportUserDataSteps.selectFile(file);
67
68
  ImportSettingsDialogSteps.getDialog().should('be.visible');
68
69
  // When I cancel the file upload via the cancel button
69
70
  ImportSettingsDialogSteps.cancelUpload();
@@ -72,7 +73,7 @@ describe('Import user data: File upload', () => {
72
73
  // And there should be no files uploaded
73
74
  ImportUserDataSteps.getResourcesTable().should('be.hidden');
74
75
  // When I select to upload a file again
75
- ImportUserDataSteps.selectFile(ImportUserDataSteps.createFile(testFiles[0], bnodes));
76
+ ImportUserDataSteps.selectFile(file);
76
77
  // Then the import settings dialog should open
77
78
  ImportSettingsDialogSteps.getDialog().should('be.visible');
78
79
  // And I close the file upload dialog via the close button
@@ -87,7 +88,8 @@ describe('Import user data: File upload', () => {
87
88
  // Given there are no files uploaded yet
88
89
  ImportUserDataSteps.getResourcesTable().should('be.hidden');
89
90
  // When I start to upload a file
90
- ImportUserDataSteps.selectFile(ImportUserDataSteps.createFile(testFiles[0], bnodes));
91
+ const file = ImportUserDataSteps.createFile(testFiles[0], bnodes);
92
+ ImportUserDataSteps.selectFile(file);
91
93
  // Then the import settings dialog should open automatically
92
94
  ImportSettingsDialogSteps.getDialog().should('be.visible');
93
95
  // And the option for replace graph should be active
@@ -98,21 +100,24 @@ describe('Import user data: File upload', () => {
98
100
  // Given there are no files uploaded yet
99
101
  ImportUserDataSteps.getResourcesTable().should('be.hidden');
100
102
  // When I upload a file
101
- ImportUserDataSteps.selectFile(ImportUserDataSteps.createFile(testFiles[0], bnodes));
103
+ const file = ImportUserDataSteps.createFile(testFiles[0], bnodes);
104
+ ImportUserDataSteps.selectFile(file);
102
105
  // Then the import settings dialog should open automatically
103
106
  ImportSettingsDialogSteps.getDialog().should('be.visible');
104
107
  ImportSettingsDialogSteps.import();
105
108
  // Then I should see the uploaded file
106
109
  ImportUserDataSteps.checkImportedResource(0, 'bnodes.ttl');
107
110
  // When I upload another file
108
- ImportUserDataSteps.selectFile(ImportUserDataSteps.createFile(testFiles[1], jsonld));
111
+ const file2 = ImportUserDataSteps.createFile(testFiles[1], jsonld);
112
+ ImportUserDataSteps.selectFile(file2);
109
113
  ImportSettingsDialogSteps.getDialog().should('be.visible');
110
114
  ImportSettingsDialogSteps.import();
111
115
  // Then I should see the uploaded file - it becomes first in the list
112
116
  ImportUserDataSteps.checkImportedResource(0, 'jsonld.jsonld');
113
117
  ImportUserDataSteps.checkImportedResource(1, 'bnodes.ttl');
114
118
  // When I override the first file
115
- ImportUserDataSteps.selectFile(ImportUserDataSteps.createFile(testFiles[0], bnodes));
119
+ const file3 = ImportUserDataSteps.createFile(testFiles[0], bnodes);
120
+ ImportUserDataSteps.selectFile(file3);
116
121
  FileOverwriteDialogSteps.overwrite();
117
122
  ImportSettingsDialogSteps.getDialog().should('be.visible');
118
123
  ImportSettingsDialogSteps.import();
@@ -121,7 +126,7 @@ describe('Import user data: File upload', () => {
121
126
  ImportUserDataSteps.checkImportedResource(0, 'jsonld.jsonld');
122
127
  ImportUserDataSteps.checkImportedResource(1, 'bnodes.ttl');
123
128
  // When I override the second file
124
- ImportUserDataSteps.selectFile(ImportUserDataSteps.createFile(testFiles[1], jsonld));
129
+ ImportUserDataSteps.selectFile(file2);
125
130
  FileOverwriteDialogSteps.overwrite();
126
131
  ImportSettingsDialogSteps.getDialog().should('be.visible');
127
132
  ImportSettingsDialogSteps.import();
@@ -134,7 +139,8 @@ describe('Import user data: File upload', () => {
134
139
  // Given there are no files uploaded yet
135
140
  ImportUserDataSteps.getResourcesTable().should('be.hidden');
136
141
  // When I start to upload a file
137
- ImportUserDataSteps.selectFile(ImportUserDataSteps.createFile(testFiles[0], bnodes));
142
+ const file = ImportUserDataSteps.createFile(testFiles[0], bnodes);
143
+ ImportUserDataSteps.selectFile(file);
138
144
  // Then the import settings dialog should open automatically
139
145
  ImportSettingsDialogSteps.getDialog().should('be.visible');
140
146
  ImportSettingsDialogSteps.uploadOnly();
@@ -142,7 +148,7 @@ describe('Import user data: File upload', () => {
142
148
  ImportUserDataSteps.getResources().should('have.length', 1);
143
149
  ImportUserDataSteps.checkUserDataUploadedResource(0, 'bnodes.ttl');
144
150
  // And the file should really be there
145
- MainMenuSteps.openHomePage();
151
+ HeaderSteps.openHomePage();
146
152
  ImportUserDataSteps.visit();
147
153
  ImportUserDataSteps.getResources().should('have.length', 1);
148
154
  });
@@ -162,7 +168,7 @@ describe('Import user data: File upload', () => {
162
168
  ImportUserDataSteps.checkImportedResource(0, 'jsonld.jsonld');
163
169
  ImportUserDataSteps.checkImportedResource(1, 'bnodes.ttl');
164
170
  // And the files should really be there
165
- MainMenuSteps.openHomePage();
171
+ HeaderSteps.openHomePage();
166
172
  ImportUserDataSteps.visit();
167
173
  ImportUserDataSteps.getResources().should('have.length', 2);
168
174
  });
@@ -127,7 +127,6 @@ describe('Import user data: Text snippet', () => {
127
127
 
128
128
  // Go to Graphs overview
129
129
  cy.visit('/graphs');
130
- cy.get('.ot-splash').should('not.be.visible');
131
130
 
132
131
  const graphName = CONTEXT.slice(0, CONTEXT.lastIndexOf('.'));
133
132
 
@@ -216,7 +215,6 @@ describe('Import user data: Text snippet', () => {
216
215
 
217
216
  // Go to Graphs overview
218
217
  cy.visit('/graphs');
219
- cy.get('.ot-splash').should('not.be.visible');
220
218
 
221
219
  const graphName = CONTEXT.slice(0, CONTEXT.lastIndexOf('.'));
222
220
 
@@ -77,27 +77,4 @@ describe('Import user data: URL import', () => {
77
77
  ImportSettingsDialogSteps.import();
78
78
  ImportUserDataSteps.checkImportedResource(0, IMPORT_URL);
79
79
  });
80
-
81
- it('should import JSON-LD file via URL with correct request body', () => {
82
- ImportUserDataSteps.stubPostJSONLDFromURL(repositoryId);
83
- ImportUserDataSteps.openImportURLDialog(IMPORT_JSONLD_URL);
84
- ImportUserDataSteps.selectRDFFormat(JSONLD_FORMAT);
85
- ImportUserDataSteps.clickImportUrlButton();
86
- ImportSettingsDialogSteps.import();
87
- cy.wait('@postJsonldUrl').then((xhr) => {
88
- expect(xhr.request.body.name).to.eq('https://example.com/0007-context.jsonld');
89
- expect(xhr.request.body.data).to.eq('https://example.com/0007-context.jsonld');
90
- expect(xhr.request.body.type).to.eq('url');
91
- expect(xhr.request.body.hasContextLink).to.be.true;
92
- });
93
- });
94
-
95
- it('should show error on invalid JSON-LD URL', () => {
96
- ImportUserDataSteps.stubPostJSONLDFromURL();
97
- ImportUserDataSteps.openImportURLDialog(IMPORT_JSONLD_URL);
98
- ImportUserDataSteps.selectRDFFormat(JSONLD_FORMAT);
99
- ImportUserDataSteps.clickImportUrlButton();
100
- ImportSettingsDialogSteps.import();
101
- ImportUserDataSteps.checkImportedResource(0, IMPORT_JSONLD_URL, 'https://example.com/0007-context.jsonld');
102
- });
103
80
  });
@@ -25,14 +25,21 @@ describe('Import user data', () => {
25
25
  // Given I have visited the import page
26
26
  ImportUserDataSteps.visit();
27
27
  // When the page is loaded
28
- cy.url().should('include', '/import#user');
28
+ cy.url().should('include', '/import').and('include', '#user');
29
29
  // Then I should see the user help icons
30
30
  ImportUserDataSteps.showPageInfoPopover();
31
+ ImportUserDataSteps.getPageInfoPopoverTitle()
32
+ .should('be.visible')
33
+ .and('not.be.empty');
31
34
  ImportUserDataSteps.getPageInfoPopover()
32
35
  .should('be.visible')
33
36
  .find('a')
34
- .should('have.attr', 'href', 'https://graphdb.ontotext.com/documentation/master/loading-data-using-the-workbench.html')
35
- .and('contain.text', 'Learn more in the GraphDB documentation');
37
+ .should('contain.text', 'Learn more in the GraphDB documentation')
38
+ .invoke('attr', 'href')
39
+ .then((href) => {
40
+ expect(href).to.match(/https:\/\/graphdb\.ontotext\.com\/documentation\/[^/]+\/loading-data-using-the-workbench\.html/);
41
+ });
42
+
36
43
  ImportUserDataSteps.hidePageInfoPopover();
37
44
  // And user data import tab should be selected by default
38
45
  ImportUserDataSteps.getActiveTab().should('have.text', 'User data');
@@ -52,7 +59,7 @@ describe('Import user data', () => {
52
59
  ImportUserDataSteps.openServerFilesTabFromWarning();
53
60
  // Then I should see the server files tab
54
61
  ImportUserDataSteps.getActiveTab().should('have.text', 'Server files');
55
- cy.url().should('include', '/import#server');
62
+ cy.url().should('include', '/import').and('include', '#server');
56
63
  ImportUserDataSteps.getServerFilesTab().should('be.visible');
57
64
  // When I click on the API link in the warning
58
65
  ImportUserDataSteps.openUserDataTab();