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,83 @@
1
+ import {GuideSteps} from "../../../steps/guides/guide-steps.js";
2
+ import {GuideDialogSteps} from "../../../steps/guides/guide-dialog-steps.js";
3
+ import {GuidesStubs} from "../../../stubs/guides/guides-stubs.js";
4
+
5
+ describe('Confirm cancel dialog', () => {
6
+ it('Should open confirm cancel dialog', () => {
7
+ GuidesStubs.stubWelcomGuide();
8
+ GuideSteps.visit();
9
+ GuideSteps.verifyGuidesListExists();
10
+ cy.wait('@getGuides');
11
+
12
+ // Given, I start a guide
13
+ GuideSteps.runFirstGuide();
14
+ GuideSteps.assertPageNotInteractive();
15
+ GuideDialogSteps.assertDialogWithTitleIsVisible(`Welcome to`);
16
+
17
+ // When, I try to cancel the guide
18
+ GuideDialogSteps.clickOnCancelButton();
19
+
20
+ // Then, I should see a confirm cancel dialog
21
+ GuideDialogSteps.getConfirmCancelDialog().should('be.visible');
22
+ GuideDialogSteps.getModalDialog().should('not.exist');
23
+
24
+ // When I press the cancel button
25
+ GuideDialogSteps.clickConfirmCancelDialogCancelButton();
26
+
27
+ // Then, I should see the guide dialog again as I didn't cancel it
28
+ GuideDialogSteps.getModalDialog().should('be.visible');
29
+ GuideDialogSteps.assertDialogWithTitleIsVisible(`Welcome to`);
30
+
31
+ // When I press the cancel dialog again
32
+ GuideDialogSteps.clickOnCancelButton();
33
+ GuideDialogSteps.getConfirmCancelDialog().should('be.visible');
34
+ GuideDialogSteps.getModalDialog().should('not.exist');
35
+
36
+ // And click on the close (X) icon button
37
+ GuideDialogSteps.clickOnConfirmCancelDialogCloseButton();
38
+
39
+ // Then, I should see the guide again as I didn't cancel it
40
+ GuideDialogSteps.getModalDialog().should('be.visible');
41
+ GuideDialogSteps.assertDialogWithTitleIsVisible(`Welcome to`);
42
+
43
+ // When I try to cancel it a third time
44
+ GuideDialogSteps.clickOnCancelButton();
45
+ GuideDialogSteps.getConfirmCancelDialog().should('be.visible');
46
+ GuideDialogSteps.getModalDialog().should('not.exist');
47
+
48
+ // And click on exit
49
+ GuideDialogSteps.clickConfirmCancelDialogExitButton();
50
+
51
+ // Then, I should see the guides list and no active guide as I canceled it
52
+ GuideDialogSteps.getModalDialog().should('not.exist');
53
+ GuideDialogSteps.getConfirmCancelDialog().should('not.exist');
54
+ });
55
+
56
+ it('Should disable autostart when don\'t show again is pressed', () => {
57
+ const guideName = 'star-wars';
58
+ // Given, I visit the home page with autostart guide parameter in URL
59
+ GuideSteps.autostartGuide(guideName);
60
+ // Then, I should see the guide
61
+ GuideSteps.assertPageNotInteractive();
62
+ GuideDialogSteps.assertDialogWithTitleIsVisible(`Welcome to`);
63
+
64
+ // When I try to cancel the dialog
65
+ GuideDialogSteps.clickOnCancelButton();
66
+
67
+ // Then, I should see a confirm cancel dialog with "Don't show again" button
68
+ GuideDialogSteps.getConfirmCancelDialog().should('be.visible');
69
+ GuideDialogSteps.getConfirmCancelDialogDontShowAgainButton().should('be.visible');
70
+
71
+ // When I click on the "don't show again" button
72
+ GuideDialogSteps.clickConfirmCancelDialogDontShowAgainButton();
73
+
74
+ // Then, the confirm cancel dialog should be closed and the guide should be canceled
75
+ GuideDialogSteps.getConfirmCancelDialog().should('not.exist');
76
+
77
+ // When I try to autostart it again
78
+ GuideSteps.autostartGuide(guideName);
79
+ // Then, I should not see the guide anymore. A disabled flag should be set to true in the storage,
80
+ // when the guide is completed via autostart, preventing the guide from autostarting again.
81
+ GuideDialogSteps.getModalDialog().should('not.exist');
82
+ });
83
+ });
@@ -0,0 +1,32 @@
1
+ import HomeSteps from "../../../steps/home-steps";
2
+ import {MainMenuSteps} from "../../../steps/main-menu-steps";
3
+ import {GuideSteps} from "../../../steps/guides/guide-steps";
4
+
5
+ describe('Interactive guides with selected repository', () => {
6
+ let repositoryId;
7
+
8
+ beforeEach(() => {
9
+ repositoryId = 'interactive-guides-init-' + Date.now();
10
+ cy.createRepository({id: repositoryId});
11
+ cy.presetRepository(repositoryId);
12
+ });
13
+
14
+ afterEach(() => {
15
+ cy.deleteRepository(repositoryId);
16
+ });
17
+
18
+ it('Should display the correct initial state when navigating via URL', () => {
19
+ // Given, I visit the Interactive guides page via URL with a repository selected
20
+ GuideSteps.visit();
21
+ // Then,
22
+ GuideSteps.verifyInitialState();
23
+ });
24
+
25
+ it('Should display the correct initial state when navigating via the navigation bar', () => {
26
+ // Given, I visit the Interactive guides page via the navigation menu with a repository selected
27
+ HomeSteps.visit();
28
+ MainMenuSteps.clickOnInteractiveGuides();
29
+ // Then,
30
+ GuideSteps.verifyInitialState();
31
+ });
32
+ })
@@ -0,0 +1,20 @@
1
+ import HomeSteps from "../../../steps/home-steps";
2
+ import {MainMenuSteps} from "../../../steps/main-menu-steps";
3
+ import {GuideSteps} from "../../../steps/guides/guide-steps";
4
+
5
+ describe('Interactive guides without selected repository', () => {
6
+ it('Should display the correct initial state when navigating via URL', () => {
7
+ // Given, I visit the Interactive guides page via URL without a repository selected
8
+ GuideSteps.visit();
9
+ // Then,
10
+ GuideSteps.verifyInitialState();
11
+ });
12
+
13
+ it('Should display the correct initial state when navigating via the navigation menu', () => {
14
+ // Given, I visit the Interactive guides page via the navigation menu without a repository selected
15
+ HomeSteps.visit();
16
+ MainMenuSteps.clickOnInteractiveGuides();
17
+ // Then,
18
+ GuideSteps.verifyInitialState();
19
+ });
20
+ })
@@ -0,0 +1,71 @@
1
+ import {GuideSteps} from "../../../steps/guides/guide-steps";
2
+ import {MoviesGuideSteps} from "../../../steps/guides/movies-guide-steps";
3
+
4
+ const MOVIES_FILE_FOR_IMPORT = 'movies.ttl';
5
+
6
+ describe('Describes "Movies" interactive guide', () => {
7
+
8
+ let repositoryId;
9
+
10
+ beforeEach(() => {
11
+ cy.intercept('/rest/guides', {fixture: '/guides/guides.json'}).as('getGuides');
12
+ repositoryId = 'movies';
13
+ cy.viewport(1880, 1000);
14
+ GuideSteps.visit();
15
+ cy.wait(['@getGuides']);
16
+ });
17
+
18
+ afterEach(() => {
19
+ cy.deleteUploadedFile(repositoryId, MOVIES_FILE_FOR_IMPORT);
20
+ cy.deleteRepository(repositoryId);
21
+ });
22
+
23
+ it('Tests movies interactive guide using "Next" button to the end', () => {
24
+ const stepAssertions = [
25
+ {assert: MoviesGuideSteps.assertExploreClassHierarchyStep1},
26
+ {assert: MoviesGuideSteps.assertExploreClassHierarchyStep2},
27
+ {assert: MoviesGuideSteps.assertExploreClassHierarchyStep3},
28
+ {assert: MoviesGuideSteps.assertExploreClassHierarchyStep4},
29
+ {assert: MoviesGuideSteps.assertExploreClassHierarchyStep5},
30
+ {assert: MoviesGuideSteps.assertExploreClassHierarchyStep6},
31
+ {assert: MoviesGuideSteps.assertExploreClassHierarchyStep7},
32
+ {assert: MoviesGuideSteps.assertClassHierarchyInstancesStep1},
33
+ {assert: MoviesGuideSteps.assertClassHierarchyInstancesStep2},
34
+ {assert: MoviesGuideSteps.assertClassHierarchyInstancesStep3},
35
+ {assert: MoviesGuideSteps.assertClassHierarchyInstancesStep4},
36
+ {assert: MoviesGuideSteps.assertClassHierarchyInstancesStep5},
37
+ // Forces the click because results are to many and dialog is not visible into the test.
38
+ {assert: MoviesGuideSteps.assertClassHierarchyInstancesStep6, forceButtonClick: true},
39
+ {assert: MoviesGuideSteps.assertClassHierarchyInstancesStep7, forceButtonClick: true},
40
+ {assert: MoviesGuideSteps.assertClassHierarchyInstancesStep8},
41
+ {assert: MoviesGuideSteps.assertExecuteSparqlQueryStep1},
42
+ {assert: MoviesGuideSteps.assertExecuteSparqlQueryStep2},
43
+ {assert: MoviesGuideSteps.assertExecuteSparqlQueryStep3},
44
+ {assert: MoviesGuideSteps.assertExecuteSparqlQueryStep4},
45
+ {assert: MoviesGuideSteps.assertExecuteSparqlQueryStep5},
46
+ {assert: MoviesGuideSteps.assertExecuteSparqlQueryStep6},
47
+ {assert: MoviesGuideSteps.assertExecuteSparqlQueryStep7},
48
+ {assert: MoviesGuideSteps.assertExecuteSparqlQueryStep8, forceButtonClick: true},
49
+ {assert: MoviesGuideSteps.assertExploreRDFStep1, forceButtonClick: true},
50
+ {assert: MoviesGuideSteps.assertExploreRDFStep2},
51
+ {assert: MoviesGuideSteps.assertExploreRDFStep3},
52
+ {assert: MoviesGuideSteps.assertExploreRDFStep4},
53
+ {assert: MoviesGuideSteps.assertExploreRDFStep5},
54
+ {assert: MoviesGuideSteps.assertExploreRDFStep6},
55
+ {assert: MoviesGuideSteps.assertExploreRDFStep7},
56
+ {assert: MoviesGuideSteps.assertExploreRDFStep8},
57
+ {assert: MoviesGuideSteps.assertExploreRDFStep9},
58
+ {assert: MoviesGuideSteps.assertExploreRDFStep10},
59
+ {assert: MoviesGuideSteps.assertSparqlQueryStep1},
60
+ {assert: MoviesGuideSteps.assertSparqlQueryStep2},
61
+ {assert: MoviesGuideSteps.assertSparqlQueryStep3},
62
+ {assert: MoviesGuideSteps.assertSparqlQueryStep4},
63
+ {assert: MoviesGuideSteps.assertSparqlQueryStep5},
64
+ {assert: MoviesGuideSteps.assertSparqlQueryStep6},
65
+ {assert: MoviesGuideSteps.assertSparqlQueryStep7}
66
+ ];
67
+
68
+ const guideName = '3 The Movies database guide';
69
+ GuideSteps.runGuideTest(guideName, repositoryId, MOVIES_FILE_FOR_IMPORT, stepAssertions);
70
+ });
71
+ });
@@ -1,7 +1,8 @@
1
- import {GuideSteps} from "../../steps/guides/guide-steps";
2
- import {StarWarsGuideSteps} from "../../steps/guides/star-wars-guide-steps";
1
+ import {GuideSteps} from "../../../steps/guides/guide-steps";
2
+ import {StarWarsGuideSteps} from "../../../steps/guides/star-wars-guide-steps";
3
3
 
4
4
  const STAR_WARS_FILE_FOR_IMPORT = 'starwars.ttl';
5
+
5
6
  describe('Describes "Starwars" interactive guide', () => {
6
7
 
7
8
  let repositoryId;
@@ -0,0 +1,32 @@
1
+ import HomeSteps from "../../../steps/home-steps";
2
+ import {MainMenuSteps} from "../../../steps/main-menu-steps";
3
+ import {RestApiDocumentationSteps} from "../../../steps/rest-api-documentation-steps";
4
+
5
+ describe('REST API Documentation with selected repository', () => {
6
+ let repositoryId;
7
+
8
+ beforeEach(() => {
9
+ repositoryId = 'rest-api-documentation-init-' + Date.now();
10
+ cy.createRepository({id: repositoryId});
11
+ cy.presetRepository(repositoryId);
12
+ });
13
+
14
+ afterEach(() => {
15
+ cy.deleteRepository(repositoryId);
16
+ });
17
+
18
+ it('Should display the correct initial state when navigating via URL', () => {
19
+ // Given, I visit the REST API Documentation page via URL with a repository selected
20
+ RestApiDocumentationSteps.visit();
21
+ // Then,
22
+ RestApiDocumentationSteps.verifyInitialState();
23
+ });
24
+
25
+ it('Should display the correct initial state when navigating via the navigation bar', () => {
26
+ // Given, I visit the REST API Documentation page via the navigation menu with a repository selected
27
+ HomeSteps.visit();
28
+ MainMenuSteps.clickOnRestApiDocumentation();
29
+ // Then,
30
+ RestApiDocumentationSteps.verifyInitialState();
31
+ });
32
+ })
@@ -0,0 +1,20 @@
1
+ import HomeSteps from "../../../steps/home-steps";
2
+ import {MainMenuSteps} from "../../../steps/main-menu-steps";
3
+ import {RestApiDocumentationSteps} from "../../../steps/rest-api-documentation-steps";
4
+
5
+ describe('REST API Documentation without selected repository', () => {
6
+ it('Should display the correct initial state when navigating via URL', () => {
7
+ // Given, I visit the REST API Documentation page via URL without a repository selected
8
+ RestApiDocumentationSteps.visit();
9
+ // Then,
10
+ RestApiDocumentationSteps.verifyInitialState();
11
+ });
12
+
13
+ it('Should display the correct initial state when navigating via the navigation menu', () => {
14
+ // Given, I visit the REST API Documentation page via the navigation menu without a repository selected
15
+ HomeSteps.visit();
16
+ MainMenuSteps.clickOnRestApiDocumentation();
17
+ // Then,
18
+ RestApiDocumentationSteps.verifyInitialState();
19
+ });
20
+ })
@@ -0,0 +1,32 @@
1
+ import HomeSteps from "../../../steps/home-steps";
2
+ import {MainMenuSteps} from "../../../steps/main-menu-steps";
3
+ import {SystemInformationSteps} from "../../../steps/system-information-steps";
4
+
5
+ describe('System information with selected repository', () => {
6
+ let repositoryId;
7
+
8
+ beforeEach(() => {
9
+ repositoryId = 'system-information-init-' + Date.now();
10
+ cy.createRepository({id: repositoryId});
11
+ cy.presetRepository(repositoryId);
12
+ });
13
+
14
+ afterEach(() => {
15
+ cy.deleteRepository(repositoryId);
16
+ });
17
+
18
+ it('Should display the correct initial state when navigating via URL', () => {
19
+ // Given, I visit the System information page via URL with a repository selected
20
+ SystemInformationSteps.visit();
21
+ // Then,
22
+ SystemInformationSteps.verifyInitialState();
23
+ });
24
+
25
+ it('Should display the correct initial state when navigating via the navigation bar', () => {
26
+ // Given, I visit the System information page via the navigation menu with a repository selected
27
+ HomeSteps.visit();
28
+ MainMenuSteps.clickOnSystemInformation();
29
+ // Then,
30
+ SystemInformationSteps.verifyInitialState();
31
+ });
32
+ })
@@ -0,0 +1,20 @@
1
+ import HomeSteps from "../../../steps/home-steps";
2
+ import {MainMenuSteps} from "../../../steps/main-menu-steps";
3
+ import {SystemInformationSteps} from "../../../steps/system-information-steps";
4
+
5
+ describe('System information without selected repository', () => {
6
+ it('Should display the correct initial state when navigating via URL', () => {
7
+ // Given, I visit the System information page via URL without a repository selected
8
+ SystemInformationSteps.visit();
9
+ // Then,
10
+ SystemInformationSteps.verifyInitialState();
11
+ });
12
+
13
+ it('Should display the correct initial state when navigating via the navigation menu', () => {
14
+ // Given, I visit the System information page via the navigation menu without a repository selected
15
+ HomeSteps.visit();
16
+ MainMenuSteps.clickOnSystemInformation();
17
+ // Then,
18
+ SystemInformationSteps.verifyInitialState();
19
+ });
20
+ })
@@ -0,0 +1,182 @@
1
+ import HomeSteps from '../../../steps/home-steps';
2
+ import {SecurityStubs} from '../../../stubs/security-stubs';
3
+ import {SettingsSteps} from '../../../steps/setup/settings-steps';
4
+ import {LicenseStubs} from '../../../stubs/license-stubs';
5
+ import {CookiePolicyModalSteps} from '../../../steps/cookie-policy/cookie-policy-modal.steps';
6
+ import {MainMenuSteps} from '../../../steps/main-menu-steps.js';
7
+ import {CookieConsentBannerSteps} from '../../../steps/cookie-policy/cookie-consent-banner-steps.js';
8
+
9
+ Cypress.env('set_default_user_data', false);
10
+
11
+ describe('Cookie policy', () => {
12
+ beforeEach(() => {
13
+ cy.setCookieConsent(undefined);
14
+ cy.viewport(1280, 1000);
15
+ LicenseStubs.stubFreeLicense();
16
+ });
17
+
18
+ afterEach(() => {
19
+ cy.setCookieConsent(undefined);
20
+ });
21
+
22
+ it('should have default state when security is OFF', () => {
23
+ // Given GDB security is OFF
24
+ // When I open home page
25
+ HomeSteps.visitInProdMode();
26
+ // Then I expect to see cookie consent banner
27
+ CookieConsentBannerSteps.getCookieConsentBanner().should('be.visible');
28
+ // When I click on the cookie policy link in the banner
29
+ CookieConsentBannerSteps.clickCookiePolicyLink();
30
+ // Then I see the cookie policy
31
+ CookiePolicyModalSteps.getDialogComponent().and('be.visible');
32
+ CookiePolicyModalSteps.getBody().should('be.visible');
33
+ // And I expect to see that analytic and third party cookies are allowed
34
+ CookiePolicyModalSteps.validateCookiePolicyDialog(true, true);
35
+ // When I close the cookie policy modal
36
+ CookiePolicyModalSteps.closeDialog();
37
+ // Then I expect the cookie policy modal to be closed
38
+ CookiePolicyModalSteps.getDialogComponent().should('not.exist');
39
+ // When I open my settings page
40
+ SettingsSteps.visitInProdMode();
41
+ // Then I expect to see cookie policy button in My settings widget
42
+ SettingsSteps.getCookiePolicyButton().and('be.visible');
43
+ // When I click on the cookie policy button in My settings widget
44
+ SettingsSteps.clickCookiePolicyLink();
45
+ // Then I see the cookie policy
46
+ CookiePolicyModalSteps.getDialogComponent().and('be.visible');
47
+ CookiePolicyModalSteps.getBody().should('be.visible');
48
+ // And I expect to see that analytic and third party cookies are allowed
49
+ CookiePolicyModalSteps.validateCookiePolicyDialog(true, true);
50
+ // When I close the cookie policy modal
51
+ CookiePolicyModalSteps.closeDialog();
52
+ // Then I expect the cookie policy modal to be closed
53
+ CookiePolicyModalSteps.getDialogComponent().should('not.exist');
54
+ });
55
+
56
+ it('should give consent for default cookie policy when security is OFF', () => {
57
+ // Given GDB security is OFF
58
+ // When I open home page
59
+ HomeSteps.visitInProdMode();
60
+ // Then I expect to see cookie consent banner
61
+ CookieConsentBannerSteps.getCookieConsentBanner().should('be.visible');
62
+ // When I click OK in the cookie consent banner
63
+ SecurityStubs.spyOnUserUpdate('admin');
64
+ CookieConsentBannerSteps.giveCookieConsent();
65
+ // Then I expect to save cookie consent in user settings
66
+ validateUserUpdateWithCookieConsent();
67
+ // And I expect the banner to be hidden
68
+ CookieConsentBannerSteps.getCookieConsentBanner().should('not.exist');
69
+ // And I expect GA tracking script to be added to the head
70
+ validateGATracking();
71
+ // When I open another page
72
+ MainMenuSteps.clickOnMenuImport();
73
+ cy.url().should('include', '/import');
74
+ // Then I expect the banner to be hidden
75
+ CookieConsentBannerSteps.getCookieConsentBanner().should('not.exist');
76
+ // When I reload the page
77
+ cy.reload();
78
+ // Then I expect the banner to be hidden
79
+ CookieConsentBannerSteps.getCookieConsentBanner().should('not.exist');
80
+ });
81
+
82
+ it('should update cookie policy and give consent when security is OFF', () => {
83
+ // Given GDB security is OFF
84
+ // When I open home page
85
+ HomeSteps.visitInProdMode();
86
+ // Then I expect to see cookie consent banner
87
+ CookieConsentBannerSteps.getCookieConsentBanner().should('be.visible');
88
+ // When I click on the cookie policy link in the banner
89
+ CookieConsentBannerSteps.clickCookiePolicyLink();
90
+ // Then I see the cookie policy
91
+ CookiePolicyModalSteps.getDialogComponent().should('be.visible');
92
+ CookiePolicyModalSteps.validateCookiePolicyDialog(true, true);
93
+ // When I toggle off the analytics cookie checkbox
94
+ CookiePolicyModalSteps.toggleStatisticCookies();
95
+ // And I close the dialog
96
+ CookiePolicyModalSteps.closeDialog();
97
+ CookiePolicyModalSteps.getDialog().should('not.exist');
98
+ // When I reopen the cookie policy dialog using the button in the banner
99
+ CookieConsentBannerSteps.clickCookiePolicyLink();
100
+ // And I expect to see that analytic cookies are not allowed and third party cookies are allowed
101
+ CookiePolicyModalSteps.validateCookiePolicyDialog(false, true);
102
+ // When I close the cookie policy dialog
103
+ CookiePolicyModalSteps.closeDialog();
104
+ // And I open my settings page
105
+ MainMenuSteps.clickOnMySettings();
106
+ // Then I expect to see cookie policy button in My settings widget
107
+ SettingsSteps.getCookiePolicyButton().and('be.visible');
108
+ // When I click on the cookie policy button in My settings widget
109
+ SettingsSteps.clickCookiePolicyLink();
110
+ // Then I see the cookie policy
111
+ CookiePolicyModalSteps.getDialogComponent().should('be.visible');
112
+ // And I expect to see that analytic cookies are not allowed and third party cookies are allowed
113
+ CookiePolicyModalSteps.validateCookiePolicyDialog(false, true);
114
+ // When I toggle off the third party cookies checkbox
115
+ CookiePolicyModalSteps.toggleThirdPartyCookies();
116
+ // And I close the cookie policy dialog
117
+ CookiePolicyModalSteps.closeDialog();
118
+ // When I reopen the cookie policy dialog using the button in my settings widget
119
+ SettingsSteps.clickCookiePolicyLink();
120
+ // And I expect to see that analytic cookies are not allowed and third party cookies are not allowed
121
+ CookiePolicyModalSteps.validateCookiePolicyDialog(false, false);
122
+ CookiePolicyModalSteps.closeDialog();
123
+ // When I reload the page
124
+ cy.reload();
125
+ // And I reopen the cookie policy dialog using the button in my settings widget
126
+ SettingsSteps.clickCookiePolicyLink();
127
+ // And I expect to see that analytic cookies are not allowed and third party cookies are not allowed
128
+ CookiePolicyModalSteps.validateCookiePolicyDialog(false, false);
129
+ // When I close the cookie policy dialog
130
+ CookiePolicyModalSteps.closeDialog();
131
+ // And I click OK in the cookie consent banner
132
+ CookieConsentBannerSteps.giveCookieConsent();
133
+ // Then I expect the banner to be hidden
134
+ CookieConsentBannerSteps.getCookieConsentBanner().should('not.exist');
135
+ // When I reload the page
136
+ cy.reload();
137
+ // Then I expect the banner to be hidden
138
+ CookieConsentBannerSteps.getCookieConsentBanner().should('not.exist');
139
+ });
140
+ });
141
+
142
+ function validateUserUpdateWithCookieConsent() {
143
+ cy.wait('@updateUser').then((xhr) => {
144
+ expect(xhr.request.body.appSettings).to.include({
145
+ DEFAULT_INFERENCE: true,
146
+ DEFAULT_VIS_GRAPH_SCHEMA: true,
147
+ DEFAULT_SAMEAS: true,
148
+ IGNORE_SHARED_QUERIES: false,
149
+ EXECUTE_COUNT: true
150
+ });
151
+
152
+ // Assert COOKIE_CONSENT properties, excluding updatedAt
153
+ expect(xhr.request.body.appSettings.COOKIE_CONSENT).to.include({
154
+ policyAccepted: true
155
+ });
156
+
157
+ // Assert that updatedAt is present, is a number, and is a reasonable timestamp
158
+ const updatedAt = xhr.request.body.appSettings.COOKIE_CONSENT.updatedAt;
159
+ expect(updatedAt).to.exist;
160
+ expect(updatedAt).to.be.a('number');
161
+
162
+ // Check that updatedAt is within 1 hour of the current time
163
+ const oneHourInMilliseconds = 60 * 60 * 1000;
164
+ const now = Date.now();
165
+ expect(updatedAt).to.be.within(now - oneHourInMilliseconds, now + oneHourInMilliseconds);
166
+ });
167
+ }
168
+
169
+ function validateGATracking() {
170
+ // Check if the GA tracking script is set correctly in the head
171
+ cy.document()
172
+ .get('head script')
173
+ .should("have.attr", "src")
174
+ .should('include', 'https://www.googletagmanager.com/gtm.js?id=GTM-WBP6C6Z4');
175
+
176
+ // Check if the installation ID cookie is set correctly
177
+ cy.getCookie('_wb').then((cookie) => {
178
+ expect(cookie).to.exist;
179
+ // Check the cookie structure: WB1.<installationId>.<timestamp>
180
+ expect(cookie.value).to.match(/^WB1\.[a-zA-Z0-9\-]+\.\d+$/);
181
+ });
182
+ }
@@ -0,0 +1,41 @@
1
+ import HomeSteps from '../../steps/home-steps';
2
+ import {EnvironmentStubs} from "../../stubs/environment-stubs";
3
+ import {MainMenuSteps} from "../../steps/main-menu-steps";
4
+
5
+ describe('Documentation links resolver', () => {
6
+
7
+ beforeEach(() => {
8
+ cy.viewport(1280, 1000);
9
+ EnvironmentStubs.spyProductInfo();
10
+ });
11
+
12
+ it('Should link to master version when in dev mode', () => {
13
+ HomeSteps.visitInDevMode();
14
+ MainMenuSteps.clickOnMenuHelp();
15
+ // Assert that links point to the master version
16
+ MainMenuSteps.getSubMenuButtonByName('Documentation').should('have.attr', 'href').and('include', 'https://graphdb.ontotext.com/documentation/master/index.html');
17
+ MainMenuSteps.getSubMenuButtonByName('Tutorials').should('have.attr', 'href').and('include', 'https://graphdb.ontotext.com/documentation/master/tutorials.html');
18
+ MainMenuSteps.getSubMenuButtonByName('Support').should('have.attr', 'href').and('include', 'https://graphdb.ontotext.com/documentation/master/support.html');
19
+ });
20
+
21
+ it('Should link to master version when in prod mode and unofficial version', () => {
22
+ EnvironmentStubs.stubProductInfo('10.8-TR1-test');
23
+ HomeSteps.visitInProdMode();
24
+ MainMenuSteps.clickOnMenuHelp();
25
+ // Assert that links point to the master version
26
+ MainMenuSteps.getSubMenuButtonByName('Documentation').should('have.attr', 'href').and('include', 'https://graphdb.ontotext.com/documentation/master/index.html');
27
+ MainMenuSteps.getSubMenuButtonByName('Tutorials').should('have.attr', 'href').and('include', 'https://graphdb.ontotext.com/documentation/master/tutorials.html');
28
+ MainMenuSteps.getSubMenuButtonByName('Support').should('have.attr', 'href').and('include', 'https://graphdb.ontotext.com/documentation/master/support.html');
29
+ });
30
+
31
+ it('Should link to GDB version when in prod mode and official version', () => {
32
+ EnvironmentStubs.stubProductInfo('10.8');
33
+ HomeSteps.visitInProdMode();
34
+ MainMenuSteps.clickOnMenuHelp();
35
+ // Assert that links point to the specific GDB version
36
+ MainMenuSteps.getSubMenuButtonByName('Documentation').should('have.attr', 'href').and('include', 'https://graphdb.ontotext.com/documentation/10.8/index.html');
37
+ MainMenuSteps.getSubMenuButtonByName('Tutorials').should('have.attr', 'href').and('include', 'https://graphdb.ontotext.com/documentation/10.8/tutorials.html');
38
+ MainMenuSteps.getSubMenuButtonByName('Support').should('have.attr', 'href').and('include', 'https://graphdb.ontotext.com/documentation/10.8/support.html');
39
+ });
40
+ });
41
+
@@ -11,9 +11,9 @@ describe('Google analytics', () => {
11
11
  // Note: Google API calls are stubbed for all specs in support/index.js
12
12
  it('Should set GA tracking code in header and a cookie when free license and prodMode', () => {
13
13
  LicenseStubs.stubFreeLicense();
14
- HomeSteps.visit();
15
- EnvironmentStubs.stubWbProdMode();
14
+ HomeSteps.visitInProdMode();
16
15
 
16
+ // Check if the GA tracking script is set correctly in the head
17
17
  cy.document()
18
18
  .get('head script')
19
19
  .should("have.attr", "src")
@@ -28,8 +28,7 @@ describe('Google analytics', () => {
28
28
 
29
29
  it('Should set GA tracking code in header and cookie when evaluation enterprise license and prodMode', () => {
30
30
  LicenseStubs.stubEvaluationLicense();
31
- HomeSteps.visit();
32
- EnvironmentStubs.stubWbProdMode();
31
+ HomeSteps.visitInProdMode();
33
32
 
34
33
  cy.document()
35
34
  .get('head script')
@@ -45,8 +44,7 @@ describe('Google analytics', () => {
45
44
 
46
45
  it('Should NOT set GA tracking code in header and cookie when enterprise license in prodMode', () => {
47
46
  LicenseStubs.stubEnterpriseLicense();
48
- HomeSteps.visit();
49
- EnvironmentStubs.stubWbProdMode();
47
+ HomeSteps.visitInProdMode();
50
48
 
51
49
  cy.document()
52
50
  .get('head script')
@@ -0,0 +1,69 @@
1
+ import HomeSteps from '../../steps/home-steps';
2
+ import {LicenseWidgetSteps} from "../../steps/widgets/license-widget-steps";
3
+ import {ActiveRepositoryWidgetSteps} from "../../steps/widgets/active-repository-widget-steps";
4
+ import {RepositoriesStubs} from "../../stubs/repositories/repositories-stubs";
5
+ import {SavedSparqlQueriesWidgetSteps} from "../../steps/widgets/saved-sparql-queries-widget-steps";
6
+ import {SavedQueriesStubs} from "../../stubs/saved-queries-stubs";
7
+ import {LicenseStubs} from "../../stubs/license-stubs";
8
+
9
+ describe('Home page: with selected repository', () => {
10
+
11
+ let repositoryId;
12
+
13
+ beforeEach(() => {
14
+ cy.viewport(1280, 1000);
15
+ repositoryId = 'home-page-' + Date.now();
16
+ cy.createRepository({id: repositoryId});
17
+ cy.presetRepository(repositoryId);
18
+ RepositoriesStubs.spyGetRepositories();
19
+ SavedQueriesStubs.spyGetSavedQueries();
20
+ LicenseStubs.spyGetLicense();
21
+ HomeSteps.visitAndWaitLoader();
22
+ cy.wait('@getRepositories');
23
+ });
24
+
25
+ afterEach(() => {
26
+ cy.deleteRepository(repositoryId);
27
+ });
28
+
29
+ it('should render page header with tools', () => {
30
+ // RDF search box should not be visible when there is no selected repository
31
+ HomeSteps.getRDFSearchButton().should('not.be.visible');
32
+ // Repository selector menu should be visible and empty
33
+ HomeSteps.getRepositorySelector().should('be.visible');
34
+ HomeSteps.getSelectedRepository().should('contain', repositoryId);
35
+ // Language selector menu should be visible and default to English
36
+ HomeSteps.getLanguageSelector().should('be.visible');
37
+ HomeSteps.getSelectedLanguage().should('contain', 'en');
38
+ });
39
+
40
+ it('should render active repository widget', () => {
41
+ HomeSteps.getActiveRepositoryWidget().should('be.visible');
42
+ ActiveRepositoryWidgetSteps.getWidget().should('be.visible');
43
+ ActiveRepositoryWidgetSteps.getActiveRepository().should('contain', repositoryId);
44
+ ActiveRepositoryWidgetSteps.getWidgetName().should('contain', 'Active repository');
45
+ ActiveRepositoryWidgetSteps.getTotalStatements().should('contain', 70);
46
+ ActiveRepositoryWidgetSteps.getInferredStatements().should('contain', 70);
47
+ ActiveRepositoryWidgetSteps.getExplicitStatements().should('contain', 0);
48
+ });
49
+
50
+ it('should not render repository errors widget', () => {
51
+ HomeSteps.getRepositoryErrorsWidget().should('be.hidden');
52
+ });
53
+
54
+ it('should render saved SPARQL queries widget', () => {
55
+ cy.wait('@getSavedQueries');
56
+ HomeSteps.getSavedSparqlQueriesWidget().should('be.visible');
57
+ SavedSparqlQueriesWidgetSteps.getWidgetName().should('contain', 'Saved SPARQL queries');
58
+ });
59
+
60
+ it('should render license widget', () => {
61
+ cy.wait('@get-license');
62
+ HomeSteps.getLicenseWidget().should('be.visible');
63
+ LicenseWidgetSteps.getLicenseWidgetHeader().should('contain', 'License');
64
+ });
65
+
66
+ it('should render page footer', () => {
67
+ HomeSteps.getPageFooter().should('be.visible');
68
+ });
69
+ });