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.
- package/.editorconfig +17 -0
- package/.nycrc +10 -0
- package/cypress-flaky.config.js +20 -6
- package/cypress-legacy.config.js +47 -0
- package/cypress-security.config.js +36 -0
- package/cypress.config.js +45 -6
- package/{integration-flaky → e2e-flaky}/explore/visual.graph.spec.js +4 -1
- package/{integration-flaky → e2e-flaky}/import/import-server-files-operations.spec.js +2 -2
- package/{integration-flaky → e2e-flaky}/import/import-user-data-batch-operations.spec.js +3 -3
- package/e2e-flaky/import/import-user-data-url.spec.js +63 -0
- package/{integration-flaky → e2e-flaky}/setup/sparql-template-create.js +10 -18
- package/{integration-flaky → e2e-flaky}/sparql-editor/actions/execute-update-query.spec.js +2 -12
- package/{integration-flaky → e2e-flaky}/sparql-editor/actions/share-query.spec.js +1 -7
- package/{integration-flaky → e2e-flaky}/sparql-editor/yasr/table-plugin.spec.js +3 -7
- package/{integration → e2e-legacy}/cluster/cluster-states.spec.js +3 -3
- package/e2e-legacy/explore/class-hierarchy/class-hierarchy-with-selected-repository-without-class-hierarchy.spec.js +42 -0
- package/e2e-legacy/explore/class-hierarchy/class-hierarchy-with-selected-repository.spec.js +43 -0
- package/e2e-legacy/explore/class-hierarchy/class-hierarchy-without-selected-repository.spec.js +30 -0
- package/{integration/explore → e2e-legacy/explore/class-hierarchy}/class.hierarchy.spec.js +1 -1
- package/e2e-legacy/explore/class-relationships/class-relationships-repository-with-data.spec.js +42 -0
- package/e2e-legacy/explore/class-relationships/class-relationships-with-selected-repository.spec.js +39 -0
- package/e2e-legacy/explore/class-relationships/class-relationships-without-selected-repository.spec.js +21 -0
- package/{integration/explore/class.relationships.spec.js → e2e-legacy/explore/class-relationships/class-relationships.spec.js} +20 -50
- package/{integration/explore → e2e-legacy/explore/graphs-overview}/graphs.overview.spec.js +4 -4
- package/e2e-legacy/explore/graphs-overview/initial-state/graphs-overview-with-selected-repository.spec.js +44 -0
- package/e2e-legacy/explore/graphs-overview/initial-state/graphs-overview-without-selected-repository.spec.js +32 -0
- package/e2e-legacy/explore/similarity-index/similarity-index-with-repository.spec.js +38 -0
- package/e2e-legacy/explore/similarity-index/similarity-index-without-repository.spec.js +21 -0
- package/{integration → e2e-legacy}/explore/visual-graph/graphs-config.spec.js +5 -10
- package/e2e-legacy/explore/visual-graph/node-info-panel.spec.js +58 -0
- package/e2e-legacy/explore/visual-graph/visual-graph-links-limit.spec.js +142 -0
- package/{integration → e2e-legacy}/explore/visual-graph/visual-graph-node-labels.spec.js +14 -2
- package/e2e-legacy/explore/visual-graph/visual-graph-with-selected-repository.js +38 -0
- package/e2e-legacy/explore/visual-graph/visual-graph-without-selected-repository.js +21 -0
- package/{integration → e2e-legacy}/explore/visual-graph/visual.graph.spec.js +75 -96
- package/{integration → e2e-legacy}/graphql/create-graphql-endpoint.spec.js +0 -2
- package/{integration → e2e-legacy}/graphql/edit-graphql-enpoint.spec.js +1 -1
- package/{integration → e2e-legacy}/graphql/filter-graphql-endpoints-on-management-view.spec.js +1 -1
- package/{integration → e2e-legacy}/graphql/graphql-endpoint-management-view.spec.js +4 -4
- package/e2e-legacy/graphql/graphql-endpoint-management-with-endpoints.spec.js +43 -0
- package/e2e-legacy/graphql/graphql-endpoint-management-with-selected-repository.spec.js +39 -0
- package/e2e-legacy/graphql/graphql-endpoint-management-without-selected-repository.spec.js +21 -0
- package/e2e-legacy/graphql/graphql-playground-with-endpoints.spec.js +40 -0
- package/e2e-legacy/graphql/graphql-playground-with-selected-repository.spec.js +38 -0
- package/e2e-legacy/graphql/graphql-playground-without-selected-repository.spec.js +22 -0
- package/{integration → e2e-legacy}/graphql/graphql-playground.spec.js +1 -1
- package/e2e-legacy/graphql/graphql-theme.spec.js +73 -0
- package/{integration → e2e-legacy}/graphql/import-graphql-endpoint-definitions.spec.js +0 -6
- package/e2e-legacy/guides/autocomplete/enable-autocomplete-guide.spec.js +49 -0
- package/e2e-legacy/guides/class-hierarcy/class-hierarchy-guide.spec.js +89 -0
- package/e2e-legacy/guides/class-relations/class-relations-guide.spec.js +76 -0
- package/e2e-legacy/guides/connectors/connectors-guide.spec.js +163 -0
- package/e2e-legacy/guides/create-similarity-index/create-similarity-index-guide.spec.js +74 -0
- package/e2e-legacy/guides/download-guide-resource/download-guide-resource-guide.js +55 -0
- package/e2e-legacy/guides/execute-sparql-query/execute-sparql-query-guide.spec.js +92 -0
- package/e2e-legacy/guides/import-rdf-file/confirm-duplicate-rdf-file.spec.js +63 -0
- package/e2e-legacy/guides/import-rdf-file/import-rdf-file.spec.js +105 -0
- package/e2e-legacy/guides/main-menu/main-menu-guide.spec.js +302 -0
- package/e2e-legacy/guides/navigation/navigation-guide.spec.js +64 -0
- package/e2e-legacy/guides/rdf-rank/rdf-rank-guide.spec.js +42 -0
- package/e2e-legacy/guides/repositories/create-repository-guide.spec.js +69 -0
- package/e2e-legacy/guides/table-graph-explore/table-graph-explore-guide.spec.js +168 -0
- package/e2e-legacy/guides/ttyg/configure-agent/configure-agent-guide.spec.js +158 -0
- package/e2e-legacy/guides/ttyg/conversation/ttyg-conversation-guide.spec.js +92 -0
- package/e2e-legacy/guides/ttyg/edit-agent/edit-ttyg-agent-guide.spec.js +88 -0
- package/e2e-legacy/guides/visual-graph/visual-graph-guide.spec.js +372 -0
- package/e2e-legacy/guides/welcome/welcome-guide.spec.js +36 -0
- package/e2e-legacy/help/guides/guides-autostart.spec.js +126 -0
- package/e2e-legacy/help/guides/guides-confirm-cancel-dialog.js +83 -0
- package/e2e-legacy/help/guides/guides-with-repository.spec.js +32 -0
- package/e2e-legacy/help/guides/guides-without-repository.spec.js +20 -0
- package/e2e-legacy/help/guides/movies-interactive-guide.spec.js +71 -0
- package/{integration/guides/star-wars-interactive-guide.js → e2e-legacy/help/guides/star-wars-interactive-guide.spec.js} +3 -2
- package/e2e-legacy/help/rest-api-documentatio/rest-api-documentation-with-repository.spec.js +32 -0
- package/e2e-legacy/help/rest-api-documentatio/rest-api-documentation-without-repository.spec.js +20 -0
- package/e2e-legacy/help/system-information/system-information-with-repository.spec.js +32 -0
- package/e2e-legacy/help/system-information/system-information-without-repository.spec.js +20 -0
- package/e2e-legacy/home/cookie-policy/cookie-policy.spec.js +182 -0
- package/e2e-legacy/home/documentation-link.spec.js +41 -0
- package/{integration → e2e-legacy}/home/google-analytics.spec.js +4 -6
- package/e2e-legacy/home/home-page-with-selected-repository.spec.js +69 -0
- package/e2e-legacy/home/home-page-without-repositories.spec.js +87 -0
- package/e2e-legacy/home/home-page-without-selected-repository.spec.js +59 -0
- package/{integration → e2e-legacy}/home/language-change.spec.js +2 -2
- package/e2e-legacy/home/rdf-resource-search.spec.js +160 -0
- package/e2e-legacy/home/view-resource-autocomplete.spec.js +65 -0
- package/{integration → e2e-legacy}/import/import-server-files.spec.js +5 -3
- package/{integration → e2e-legacy}/import/import-user-data-file-upload.spec.js +19 -13
- package/{integration → e2e-legacy}/import/import-user-data-text-snippet.spec.js +0 -2
- package/{integration → e2e-legacy}/import/import-user-data-url.spec.js +0 -23
- package/{integration → e2e-legacy}/import/import-user-data.spec.js +11 -4
- package/e2e-legacy/import/initial-state/import-page-with-selected-repositor.js +51 -0
- package/e2e-legacy/import/initial-state/import-page-with-selected-repository-without-imported-files.js +45 -0
- package/e2e-legacy/import/initial-state/import-page-without-selected-repository.spec.js +28 -0
- package/e2e-legacy/license/license-with-repository.spec.js +113 -0
- package/e2e-legacy/license/license-without-repository.spec.js +103 -0
- package/{integration → e2e-legacy}/license/license.spec.js +4 -4
- package/e2e-legacy/monitor/backup-and-restore/backup-and-restore-with-repository.spec.js +36 -0
- package/e2e-legacy/monitor/backup-and-restore/backup-and-restore-without-repository.spec.js +25 -0
- package/{integration/monitor/monitor.backup-and-restore.spec.js → e2e-legacy/monitor/backup-and-restore/backup-and-restore.spec.js} +2 -2
- package/{integration → e2e-legacy}/monitor/global-operation-statuses-component.spec.js +12 -5
- package/e2e-legacy/monitor/query-and-updates/queries-and-updates-with-repository.spec.js +39 -0
- package/e2e-legacy/monitor/query-and-updates/queries-and-updates-without-repository.spec.js +21 -0
- package/{integration/monitor → e2e-legacy/monitor/system}/monitor.resources.spec.js +3 -2
- package/e2e-legacy/monitor/system/system-monitoring-with-repository.spec.js +32 -0
- package/e2e-legacy/monitor/system/system-monitoring-without-repository.spec.js +20 -0
- package/e2e-legacy/not-found/not-found.spec.js +23 -0
- package/{integration → e2e-legacy}/repository/ontop-repository.spec.js +1 -1
- package/{integration → e2e-legacy}/repository/repositories.spec.js +37 -45
- package/e2e-legacy/repository/url-with-repository-id-parameter.spec.js +181 -0
- package/{integration → e2e-legacy}/resource/resource.spec.js +50 -20
- package/e2e-legacy/setup/aclmanagement/acl-management-with-selected repository.spec.js +84 -0
- package/e2e-legacy/setup/aclmanagement/acl-management-without-repositories.spec.js +21 -0
- package/{integration → e2e-legacy}/setup/aclmanagement/create-rule.spec.js +4 -0
- package/e2e-legacy/setup/autocomplete/autocomplete-with-repository.spec.js +40 -0
- package/e2e-legacy/setup/autocomplete/autocomplete-without-repository.spec.js +27 -0
- package/{integration/setup → e2e-legacy/setup/autocomplete}/autocomplete.spec.js +6 -7
- package/e2e-legacy/setup/cluster/cluster-initial-state-with-cluster.spec.js +34 -0
- package/e2e-legacy/setup/cluster/cluster-initial-state-without-cluster.spec.js +25 -0
- package/e2e-legacy/setup/connectors/connectors-initial-state-with-selected-repository.spec.js +41 -0
- package/e2e-legacy/setup/connectors/connectors-initial-state-without-repositories.spec.js +21 -0
- package/{integration → e2e-legacy}/setup/connectors-lucene.spec.js +26 -10
- package/{integration → e2e-legacy}/setup/jdbc/jdbc-create.spec.js +4 -4
- package/e2e-legacy/setup/jdbc/jdbc-with-repository.spec.js +39 -0
- package/e2e-legacy/setup/jdbc/jdbc-without-repository.spec.js +27 -0
- package/e2e-legacy/setup/namespaces/namespaces-with-repository.spec.js +44 -0
- package/e2e-legacy/setup/namespaces/namespaces-without-repository.spec.js +27 -0
- package/{integration/setup → e2e-legacy/setup/namespaces}/namespaces.spec.js +6 -5
- package/e2e-legacy/setup/plugins/plugins-with-repository.spec.js +38 -0
- package/e2e-legacy/setup/plugins/plugins-without-repository.spec.js +28 -0
- package/{integration/setup → e2e-legacy/setup/plugins}/plugins.spec.js +3 -3
- package/e2e-legacy/setup/rdf-rank/rdf-rank-with-repository.spec.js +40 -0
- package/e2e-legacy/setup/rdf-rank/rdf-rank-without-repository.spec.js +30 -0
- package/{integration/setup → e2e-legacy/setup/rdf-rank}/rdf-rank.spec.js +3 -5
- package/e2e-legacy/setup/repositories/repositories-view-with-repositories.spec.js +40 -0
- package/e2e-legacy/setup/repositories/repositories-view-without-repositories.spec.js +28 -0
- package/e2e-legacy/setup/settings/my-settings-initial-state.spec.js +86 -0
- package/e2e-legacy/setup/settings/my-settings.spec.js +207 -0
- package/{integration/setup/sparql-template-create.js → e2e-legacy/setup/sparql-template/sparql-template-create.spec.js} +16 -8
- package/e2e-legacy/setup/sparql-template/sparql-template-with-repository.spec.js +39 -0
- package/e2e-legacy/setup/sparql-template/sparql-template-without-repository.spec.js +29 -0
- package/{integration/setup → e2e-legacy/setup/sparql-template}/sparql-templates.spec.js +4 -4
- package/{integration/setup → e2e-legacy/setup/users-and-access}/user-and-access.spec.js +184 -87
- package/e2e-legacy/setup/users-and-access/users-and-access-initial-state.spec.js +25 -0
- package/{integration → e2e-legacy}/sparql-editor/actions/expand-results-over-sameas.spec.js +12 -12
- package/{integration → e2e-legacy}/sparql-editor/actions/include-inferred-statements.spec.js +6 -6
- package/{integration → e2e-legacy}/sparql-editor/actions/inferred-sameas.spec.js +10 -8
- package/{integration → e2e-legacy}/sparql-editor/actions/show-saved-queries.spec.js +1 -6
- package/{integration → e2e-legacy}/sparql-editor/saved-query/abort-query.spec.js +1 -1
- package/{integration → e2e-legacy}/sparql-editor/saved-query/edit-query.spec.js +3 -3
- package/{integration → e2e-legacy}/sparql-editor/saved-query/readonly-query.spec.js +15 -24
- package/{integration → e2e-legacy}/sparql-editor/saved-query/share-query.spec.js +32 -1
- package/e2e-legacy/sparql-editor/sparql-page-with-selected-repository.spec.js +33 -0
- package/e2e-legacy/sparql-editor/sparql-page-without-selected-repository.spec.js +26 -0
- package/{integration → e2e-legacy}/sparql-editor/yasgui-tabs.spec.js +2 -12
- package/e2e-legacy/sparql-editor/yasqe-themes.spec.js +54 -0
- package/{integration → e2e-legacy}/sparql-editor/yasr/pagination.spec.js +5 -18
- package/{integration → e2e-legacy}/sparql-editor/yasr/table-plugin.spec.js +1 -6
- package/e2e-legacy/sparql-editor/yasr/toolbar/visual-graph-button.spec.js +106 -0
- package/e2e-legacy/sparql-editor/yasr/yasr.spec.js +80 -0
- package/{integration → e2e-legacy}/ttyg/agent-list.spec.js +53 -2
- package/{integration → e2e-legacy}/ttyg/agent-select-menu.spec.js +25 -2
- package/{integration → e2e-legacy}/ttyg/chat-list.spec.js +3 -14
- package/{integration → e2e-legacy}/ttyg/chat-panel.spec.js +74 -6
- package/{integration → e2e-legacy}/ttyg/clone-agent.spec.js +24 -2
- package/{integration → e2e-legacy}/ttyg/create-agent.spec.js +37 -66
- package/{integration → e2e-legacy}/ttyg/create-chat.spec.js +6 -4
- package/{integration → e2e-legacy}/ttyg/delete-agent.spec.js +1 -2
- package/e2e-legacy/ttyg/edit-agent.spec.js +178 -0
- package/e2e-legacy/ttyg/ttyg-initial-state-with-configured-api-key.spec.js +46 -0
- package/e2e-legacy/ttyg/ttyg-initial-state-with-selected-repository.spec.js +45 -0
- package/e2e-legacy/ttyg/ttyg-initial-state-without-repositories.spec.js +21 -0
- package/{integration-flaky → e2e-legacy}/ttyg/ttyg-permission.spec.js +23 -17
- package/{integration → e2e-legacy}/ttyg/ttyg-view.spec.js +2 -2
- package/e2e-security/repository/url-with-repository-id-parameter.spec.js +57 -0
- package/e2e-security/setup/home/cookie-policy.spec.js +290 -0
- package/e2e-security/setup/users-and-access/create-user-permissions.spec.js +193 -0
- package/e2e-security/setup/users-and-access/graphql-user.spec.js +126 -0
- package/e2e-security/setup/users-and-access/repo-admin-role.spec.js +70 -0
- package/e2e-security/setup/users-and-access/turn-on-security-and-password-change.spec.js +99 -0
- package/e2e-security/setup/users-and-access/user-and-access.spec.js +87 -0
- package/e2e-security/setup/users-and-access/users-and-access-initial-state.spec.js +38 -0
- package/eslint.config.js +39 -0
- package/fixtures/graph/graph-configurations.json +59 -0
- package/fixtures/guides/autocomplete/enable-autocomplete-guide.json +12 -0
- package/fixtures/guides/class-hierarchy/class-hierarchy-guide.json +35 -0
- package/fixtures/guides/class-relations/class-relations-guide.json +33 -0
- package/fixtures/guides/confirm-cancel-dialog/confirm-cancel-dialog-guide.json +15 -0
- package/fixtures/guides/connectors/connectors-guide.json +66 -0
- package/fixtures/guides/connectors/lucene-connector-guide.json +120 -0
- package/fixtures/guides/create-repository/create-repository-guide.json +25 -0
- package/fixtures/guides/create-similarity-index/create-similarity-index-guide.json +36 -0
- package/fixtures/guides/download-guide-resource/download-guide-resource-guide.json +25 -0
- package/fixtures/guides/download-resource.ttl +629 -0
- package/fixtures/guides/execute-sparql-query/execute-sparql-query-guide.json +54 -0
- package/fixtures/guides/import-rdf-file/confirm-duplicate-rdf-file-guide.json +30 -0
- package/fixtures/guides/import-rdf-file/import-rdf-file-guide.json +21 -0
- package/fixtures/guides/main-menu/main-menu-guide.json +98 -0
- package/fixtures/guides/navigation/navigation-guide.json +60 -0
- package/fixtures/guides/rdf-rank/rdf-rank-guide.json +18 -0
- package/fixtures/guides/table-graph-explore/table-graph-explore-guide.json +51 -0
- package/fixtures/guides/table-graph-explore/table-graph-explore-without-substeps-guide.json +25 -0
- package/fixtures/guides/ttyg/configure-agent/configure-ttyg-agent-guide.json +74 -0
- package/fixtures/guides/ttyg/conversation/ttyg-conversation-guide.json +26 -0
- package/fixtures/guides/ttyg/edit-ttyg-agent/edit-ttyg-agent-guide.json +22 -0
- package/fixtures/guides/visual-graph/visual-graph-config-guide.json +39 -0
- package/fixtures/guides/visual-graph/visual-graph-guide.json +85 -0
- package/fixtures/guides/welcome/welcome-guide.json +18 -0
- package/fixtures/repositories/free-access.json +13 -0
- package/fixtures/similarity/get-ttyg-similarity-instances.json +10 -0
- package/fixtures/ttyg/agent/get-agent-defaults-assistant-api.json +44 -0
- package/fixtures/ttyg/agent/get-agent-defaults.json +9 -2
- package/fixtures/ttyg/agent/get-agent-list-with-incompatible-agents.json +79 -0
- package/fixtures/ttyg/agent/get-similarity-indexes-for-another-repo.json +8 -0
- package/fixtures/ttyg/agent/get-similarity-indexes.json +22 -0
- package/fixtures/ttyg/chats/ask-question-cancel.json +12 -0
- package/fixtures/ttyg/chats/ask-question.json +12 -2
- package/fixtures/ttyg/chats/cancel-question-response.json +1 -0
- package/fixtures/ttyg/chats/create/create-chat-response.json +10 -14
- package/fixtures/ttyg/chats/create/question-response-after-chat-creation.json +29 -0
- package/fixtures/ttyg/chats/explain-response-1.json +2 -48
- package/fixtures/ttyg/chats/explain-response-3.json +12 -0
- package/fixtures/ttyg/chats/get-chat.json +6 -1
- package/npm-shrinkwrap.json +11004 -3815
- package/package.json +58 -42
- package/plugins/index.js +10 -5
- package/steps/application-steps.js +8 -6
- package/steps/base-steps.js +29 -0
- package/steps/class-views-steps.js +35 -7
- package/steps/cluster/cluster-page-steps.js +12 -2
- package/steps/cookie-policy/cookie-consent-banner-steps.js +21 -0
- package/steps/cookie-policy/cookie-policy-modal.steps.js +56 -0
- package/steps/error-page-steps.js +9 -0
- package/steps/error-steps.js +15 -3
- package/steps/explore/class-relationships-steps.js +64 -0
- package/steps/explore/graphs-overview-steps.js +21 -1
- package/steps/explore/similarity-index-create-steps.js +5 -3
- package/steps/explore/similarity-indexes-steps.js +16 -2
- package/steps/graphql/graphql-endpoint-management-steps.js +2 -2
- package/steps/graphql/playground-editor-steps.js +46 -0
- package/steps/guides/guide-dialog-steps.js +81 -2
- package/steps/guides/guide-steps.js +54 -2
- package/steps/guides/movies-guide-steps.js +2 -1
- package/steps/header-steps.js +22 -0
- package/steps/home-steps.js +184 -77
- package/steps/import/import-resource-message-dialog.js +1 -1
- package/steps/import/import-steps.js +12 -16
- package/steps/import/import-user-data-steps.js +5 -1
- package/steps/language-selector-steps.js +2 -2
- package/steps/license-steps.js +91 -9
- package/steps/login-steps.js +31 -6
- package/steps/main-menu-steps.js +244 -19
- package/steps/modal-dialog-steps.js +32 -1
- package/steps/monitoring/backup-and-restore-steps.js +9 -3
- package/steps/monitoring/queries-and-updates-steps.js +20 -0
- package/steps/monitoring/system-monitoring-steps.js +40 -0
- package/steps/not-found/not-found-steps.js +23 -0
- package/steps/operations-statuses-component-steps.js +5 -10
- package/steps/rdf-resource-search-steps.js +55 -0
- package/steps/repository-selector-steps.js +3 -3
- package/steps/repository-steps.js +88 -18
- package/steps/resource/resource-steps.js +6 -10
- package/steps/rest-api-documentation-steps.js +15 -0
- package/steps/setup/acl-management-steps.js +18 -2
- package/steps/setup/autocomplete-steps.js +23 -8
- package/steps/setup/connectors-steps.js +32 -0
- package/steps/setup/jdbc-steps.js +18 -4
- package/steps/setup/namespace-steps.js +10 -7
- package/steps/setup/plugins-steps.js +12 -5
- package/steps/setup/rdf-rank-steps.js +23 -9
- package/steps/setup/settings-steps.js +101 -2
- package/steps/setup/sparql-templates-steps.js +19 -1
- package/steps/setup/user-and-access-steps.js +50 -16
- package/steps/shared-modal-dialog-steps.js +45 -0
- package/steps/sparql-editor-steps.js +21 -2
- package/steps/sparql-steps.js +13 -1
- package/steps/system-information-steps.js +70 -0
- package/steps/toaster-steps.js +18 -6
- package/steps/ttyg/chat-panel-steps.js +40 -2
- package/steps/ttyg/ttyg-agent-settings-modal.steps.js +136 -31
- package/steps/ttyg/ttyg-view-steps.js +80 -10
- package/steps/visual-graph-split-button-steps.js +45 -0
- package/steps/visual-graph-steps.js +106 -10
- package/steps/widgets/active-repository-widget-steps.js +29 -0
- package/steps/widgets/license-widget-steps.js +9 -0
- package/steps/widgets/repository-errors-widget-steps.js +21 -0
- package/steps/widgets/saved-sparql-queries-widget-steps.js +9 -0
- package/steps/yasgui/yasgui-loader.js +3 -3
- package/steps/yasgui/yasgui-steps.js +1 -1
- package/steps/yasgui/yasqe-steps.js +35 -4
- package/steps/yasgui/yasr-steps.js +35 -5
- package/stubs/autocomplete/autocomplete-stubs.js +7 -0
- package/stubs/browser-stubs.js +21 -0
- package/stubs/environment-stubs.js +9 -1
- package/stubs/graph-config-stubs.js +17 -0
- package/stubs/guides/guides-stubs.js +103 -0
- package/stubs/license-stubs.js +51 -0
- package/stubs/repositories/repositories-stubs.js +180 -75
- package/stubs/saved-queries-stubs.js +5 -0
- package/stubs/security-stubs.js +12 -0
- package/stubs/similarity-index-stubs.js +4 -0
- package/stubs/sparql-stubs.js +10 -0
- package/stubs/ttyg/ttyg-stubs.js +64 -15
- package/stubs/yasgui/query-stubs.js +5 -1
- package/support/commands.js +22 -1
- package/support/connector-commands.js +13 -0
- package/support/e2e-security.js +9 -0
- package/support/{index.js → e2e.js} +9 -3
- package/support/repository-commands.js +29 -4
- package/support/settings-commands.js +33 -1
- package/support/url-commands.js +13 -0
- package/support/user-commands.js +9 -4
- package/utils/html-util.js +24 -4
- package/Dockerfile +0 -11
- package/fixtures/locale-en.json +0 -3342
- package/integration/explore/similarity-index/similarity-index-create.spec.js +0 -333
- package/integration/explore/similarity-index/similarity-index.spec.js +0 -88
- package/integration/explore/similarity-index/similarity.spec.js +0 -628
- package/integration/guides/movies-interactive-guide.spec.js +0 -73
- package/integration/home/cookie-policy.spec.js +0 -90
- package/integration/home/documentation-link.spec.js +0 -60
- package/integration/home/language-selector.spec.js +0 -19
- package/integration/home/rdf-resource-search.spec.js +0 -177
- package/integration/home/view-resource-autocomplete.spec.js +0 -52
- package/integration/home/workbench.home.spec.js +0 -30
- package/integration/monitor/monitor.queries.spec.js +0 -31
- package/integration/setup/my-settings.spec.js +0 -289
- package/integration/sparql-editor/yasr/toolbar/visual-graph-button.spec.js +0 -57
- package/integration/ttyg/edit-agent.spec.js +0 -99
- package/integration-flaky/setup/users-and-access/security-and-free-access.spec.js +0 -54
- package/stubs/repositories-stub.js +0 -73
- package/{integration-flaky → e2e-flaky}/import/import.server.files.spec.js +0 -0
- package/{integration-flaky → e2e-flaky}/sparql-editor/lucene-connector.spec.js +0 -0
- package/{integration-flaky → e2e-flaky}/sparql-editor/plugins/error-plugin.spec.js +0 -0
- package/{integration → e2e-legacy}/cluster/cluster-configuration/cluster-configuration-multi-region.spec.js +0 -0
- package/{integration → e2e-legacy}/cluster/cluster-configuration/cluster-configuration-nodes.spec.js +0 -0
- package/{integration → e2e-legacy}/cluster/cluster-configuration/cluster-configuration-properties.spec.js +0 -0
- package/{integration → e2e-legacy}/cluster/cluster-configuration/cluster-configuration.spec.js +0 -0
- package/{integration → e2e-legacy}/cluster/cluster-legend.spec.js +0 -0
- package/{integration → e2e-legacy}/cluster/edit-cluster-nodes-modal.spec.js +0 -0
- package/{integration → e2e-legacy}/graphql/activate-deactivate-graphql-endpoint.spec.js +0 -0
- package/{integration → e2e-legacy}/graphql/delete-graphql-endpoint.spec.js +0 -0
- package/{integration → e2e-legacy}/graphql/export-graphql-endpoint-definition.spec.js +0 -0
- package/{integration → e2e-legacy}/graphql/set-default-graphql-endpoint.spec.js +0 -0
- package/{integration/help → e2e-legacy/help/system-information}/system-information.spec.js +0 -0
- package/{integration → e2e-legacy}/home/create-repository.spec.js +0 -0
- package/{integration → e2e-legacy}/import/import-server-files-batch-operations.spec.js +0 -0
- package/{integration → e2e-legacy}/import/import-user-data-settings-dialog.spec.js +0 -0
- package/{integration → e2e-legacy}/import/import-view.spec.js +0 -0
- package/{integration → e2e-legacy}/repository/attach-remote-location.spec.js +1 -1
- /package/{integration → e2e-legacy}/repository/repository-commands.spec.js +0 -0
- /package/{integration → e2e-legacy}/setup/aclmanagement/delete-rule.spec.js +0 -0
- /package/{integration → e2e-legacy}/setup/aclmanagement/edit-rule.spec.js +0 -0
- /package/{integration → e2e-legacy}/setup/aclmanagement/render-rules.spec.js +0 -0
- /package/{integration → e2e-legacy}/setup/aclmanagement/reorder-rules.spec.js +0 -0
- /package/{integration → e2e-legacy}/setup/aclmanagement/revert-rules.spec.js +0 -0
- /package/{integration → e2e-legacy}/setup/aclmanagement/scopes.spec.js +0 -0
- /package/{integration → e2e-legacy}/setup/aclmanagement/update-rules.spec.js +0 -0
- /package/{integration → e2e-legacy}/setup/jdbc/jdbc.spec.js +0 -0
- /package/{integration → e2e-legacy}/sparql-editor/actions/execute-query.spec.js +0 -0
- /package/{integration → e2e-legacy}/sparql-editor/actions/save-query.spec.js +0 -0
- /package/{integration → e2e-legacy}/sparql-editor/internationalization.spec.js +0 -0
- /package/{integration → e2e-legacy}/sparql-editor/saved-query/delete-query.spec.js +0 -0
- /package/{integration → e2e-legacy}/sparql-editor/sparql-editor.spec.js +0 -0
- /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 "
|
|
2
|
-
import {StarWarsGuideSteps} from "
|
|
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
|
+
})
|
package/e2e-legacy/help/rest-api-documentatio/rest-api-documentation-without-repository.spec.js
ADDED
|
@@ -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.
|
|
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.
|
|
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.
|
|
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
|
+
});
|