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,106 @@
|
|
|
1
|
+
import {SparqlEditorSteps} from '../../../../steps/sparql-editor-steps';
|
|
2
|
+
import {YasqeSteps} from '../../../../steps/yasgui/yasqe-steps';
|
|
3
|
+
import {QueryStubs} from '../../../../stubs/yasgui/query-stubs';
|
|
4
|
+
import {GraphConfigStubs} from '../../../../stubs/graph-config-stubs.js';
|
|
5
|
+
import {BrowserStubs} from '../../../../stubs/browser-stubs.js';
|
|
6
|
+
import {VisualGraphSplitButtonSteps} from '../../../../steps/visual-graph-split-button-steps.js';
|
|
7
|
+
|
|
8
|
+
describe('"Visualize" split button', () => {
|
|
9
|
+
let repositoryId;
|
|
10
|
+
|
|
11
|
+
beforeEach(() => {
|
|
12
|
+
repositoryId = 'yasr-vizualize-split-button' + Date.now();
|
|
13
|
+
QueryStubs.stubQueryCountResponse();
|
|
14
|
+
cy.createRepository({id: repositoryId});
|
|
15
|
+
cy.presetRepository(repositoryId);
|
|
16
|
+
// Given I visit a page with 'ontotex-yasgu-web-component' in it.
|
|
17
|
+
SparqlEditorSteps.visitSparqlEditorPage();
|
|
18
|
+
});
|
|
19
|
+
|
|
20
|
+
afterEach(() => {
|
|
21
|
+
cy.deleteRepository(repositoryId);
|
|
22
|
+
});
|
|
23
|
+
|
|
24
|
+
it('should display "Visualize" split button when user execute a CONSTRUCT query', () => {
|
|
25
|
+
// WHEN: I visit a page with 'ontotext-yasgui-web-component' on it, and execute select query.
|
|
26
|
+
executeSelectQuery();
|
|
27
|
+
// THEN: I expect the 'Visualize' button to not be visible.
|
|
28
|
+
VisualGraphSplitButtonSteps.getVisualizeMainButton().should('not.be.visible');
|
|
29
|
+
|
|
30
|
+
// WHEN: I execute a CONSTRUCT query.
|
|
31
|
+
executeConstructQuery();
|
|
32
|
+
// THEN: I expect the 'Visualize' button to be visible.
|
|
33
|
+
VisualGraphSplitButtonSteps.getVisualizeMainButton().should('be.visible');
|
|
34
|
+
|
|
35
|
+
// WHEN: I execute SELECT query again.
|
|
36
|
+
executeSelectQuery();
|
|
37
|
+
// THEN: I expect the 'Visualize' button to not be visible.
|
|
38
|
+
VisualGraphSplitButtonSteps.getVisualizeMainButton().should('not.be.visible');
|
|
39
|
+
});
|
|
40
|
+
|
|
41
|
+
it('should inform user that there no created graph configurations', () => {
|
|
42
|
+
// GIVEN: There are no graph configurations.
|
|
43
|
+
GraphConfigStubs.stubGetEmptyGraphConfigs();
|
|
44
|
+
// AND: I visit a page with 'ontotext-yasgui-web-component' on it, and the 'Visualize' button is visible.
|
|
45
|
+
executeConstructQuery();
|
|
46
|
+
|
|
47
|
+
// WHEN: I open the dropdown.
|
|
48
|
+
VisualGraphSplitButtonSteps.toggleGraphConfigDropdown();
|
|
49
|
+
// THEN: I expect to see message that informs that there are no graph configurations.
|
|
50
|
+
VisualGraphSplitButtonSteps.getNoConfigurationsMessage().should('contain.text', 'No advanced graph configuration.');
|
|
51
|
+
|
|
52
|
+
// WHEN: I click on create link.
|
|
53
|
+
BrowserStubs.stubWindowOpen();
|
|
54
|
+
VisualGraphSplitButtonSteps.clickCreateGraphConfigLink();
|
|
55
|
+
// THEN: I expect to be navigated to graph configurations page.
|
|
56
|
+
cy.get(BrowserStubs.WINDOW_OPEN_ALIAS()).should('have.been.calledWithMatch', 'graphs-visualizations', '_blank', 'noopener,noreferrer');
|
|
57
|
+
});
|
|
58
|
+
|
|
59
|
+
it('should open graphs-visualizations view when click on main button', () => {
|
|
60
|
+
// GIVEN: I visit a page with 'ontotext-yasgui-web-component' on it, and the 'Visualize' button is visible.
|
|
61
|
+
executeConstructQuery();
|
|
62
|
+
|
|
63
|
+
// WHEN: I click on main button
|
|
64
|
+
VisualGraphSplitButtonSteps.clickOnVisualizeMainButton();
|
|
65
|
+
// THEN: I expect to be navigated to graphs-visualizations view.
|
|
66
|
+
cy.url().should('include', 'graphs-visualizations');
|
|
67
|
+
cy.getQueryParam('query').should('include', 'PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>PREFIX onto: <http://www.ontotext.com/>CONSTRUCT {?source rdf:type ?destination .} WHERE {?bag rdf:type ?source .?flight rdf:type ?destination}');
|
|
68
|
+
cy.getQueryParam('config').should('not.exist');
|
|
69
|
+
});
|
|
70
|
+
|
|
71
|
+
it('should open graphs-visualizations view when select a graph configuration', () => {
|
|
72
|
+
// GIVEN: I visit a page with 'ontotext-yasgui-web-component' on it, and the 'Visualize' button is visible.
|
|
73
|
+
executeConstructQuery();
|
|
74
|
+
GraphConfigStubs.stubGetGraphConfigs();
|
|
75
|
+
|
|
76
|
+
// WHEN: I open the dropdown.
|
|
77
|
+
VisualGraphSplitButtonSteps.toggleGraphConfigDropdown();
|
|
78
|
+
// THEN: I expect to see all graph configurations.
|
|
79
|
+
VisualGraphSplitButtonSteps.getGraphConfigs().should('have.length', 3);
|
|
80
|
+
|
|
81
|
+
// WHEN: I select a graph configuration
|
|
82
|
+
VisualGraphSplitButtonSteps.selectGraphConfig();
|
|
83
|
+
// THEN: I expect to be navigated to graphs-visualizations view.
|
|
84
|
+
cy.url().should('include', 'graphs-visualizations');
|
|
85
|
+
cy.getQueryParam('query').should('include', 'PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>PREFIX onto: <http://www.ontotext.com/>CONSTRUCT {?source rdf:type ?destination .} WHERE {?bag rdf:type ?source .?flight rdf:type ?destination}');
|
|
86
|
+
cy.getQueryParam('config').should('eq', 'de99fd5de7f94ef98f1875dff55fc1c9');
|
|
87
|
+
});
|
|
88
|
+
});
|
|
89
|
+
|
|
90
|
+
const executeSelectQuery = () => {
|
|
91
|
+
YasqeSteps.pasteQuery('select * where {?s ?p ?o.}');
|
|
92
|
+
YasqeSteps.executeQuery();
|
|
93
|
+
};
|
|
94
|
+
|
|
95
|
+
const executeConstructQuery = () => {
|
|
96
|
+
YasqeSteps.pasteQuery(
|
|
97
|
+
'PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>' +
|
|
98
|
+
'PREFIX onto: <http://www.ontotext.com/>' +
|
|
99
|
+
'CONSTRUCT {' +
|
|
100
|
+
'?source rdf:type ?destination .' +
|
|
101
|
+
'} WHERE {' +
|
|
102
|
+
'?bag rdf:type ?source .' +
|
|
103
|
+
'?flight rdf:type ?destination' +
|
|
104
|
+
'}');
|
|
105
|
+
YasqeSteps.executeQuery();
|
|
106
|
+
};
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import {SparqlEditorSteps} from '../../../steps/sparql-editor-steps.js';
|
|
2
|
+
import {YasrSteps} from '../../../steps/yasgui/yasr-steps.js';
|
|
3
|
+
import {YasqeSteps} from '../../../steps/yasgui/yasqe-steps.js';
|
|
4
|
+
|
|
5
|
+
describe('YASR', () => {
|
|
6
|
+
let repositoryId;
|
|
7
|
+
let secondRepositoryId;
|
|
8
|
+
|
|
9
|
+
beforeEach(() => {
|
|
10
|
+
repositoryId = 'yasr-' + Date.now();
|
|
11
|
+
cy.createRepository({id: repositoryId});
|
|
12
|
+
cy.presetRepository(repositoryId);
|
|
13
|
+
});
|
|
14
|
+
|
|
15
|
+
afterEach(() => {
|
|
16
|
+
cy.deleteRepository(repositoryId);
|
|
17
|
+
cy.deleteRepository(secondRepositoryId);
|
|
18
|
+
});
|
|
19
|
+
|
|
20
|
+
it('should load YASR in fullscreen with plugin config from URL', () => {
|
|
21
|
+
// WHEN: I visit SPARQL Query & Update page with url parameters: embedded and pluginName
|
|
22
|
+
SparqlEditorSteps.visitSparqlEditorPageAndWaitForResults(getUrl(repositoryId, 'pivotTable', true));
|
|
23
|
+
// THEN: YASR is in fullscreen mode because the workbench is embedded.
|
|
24
|
+
YasrSteps.getYasr().should('have.class', 'yasr-fullscreen');
|
|
25
|
+
// AND: I expect the raw response plugin to be visible
|
|
26
|
+
YasrSteps.getPivotTablePlugin().should('be.visible');
|
|
27
|
+
|
|
28
|
+
// WHEN: I press the ESC key.
|
|
29
|
+
YasrSteps.typeEscapeKey();
|
|
30
|
+
// THEN: I see YASR results in fullscreen mode because Escape is disabled in this mode.
|
|
31
|
+
YasrSteps.getYasr().should('have.class', 'yasr-fullscreen');
|
|
32
|
+
|
|
33
|
+
// WHEN: I visit SPARQL Query & Update page with without embedded url parameter.
|
|
34
|
+
SparqlEditorSteps.visitSparqlEditorPageAndWaitForResults(getUrl(repositoryId, 'googleChart'));
|
|
35
|
+
// THEN: I expect yasr to be in non-fullscreen mode
|
|
36
|
+
YasrSteps.getYasr().should('not.have.class', 'yasr-fullscreen');
|
|
37
|
+
// AND: I expect Google Chart plugin to be visible
|
|
38
|
+
YasrSteps.getGoogleChartPlugin().should('be.visible');
|
|
39
|
+
|
|
40
|
+
// WHEN: I visit SPARQL Query & Update page with without embedded and pluginName url parameters.
|
|
41
|
+
SparqlEditorSteps.visitSparqlEditorPageAndWaitForResults(getUrl(repositoryId));
|
|
42
|
+
// THEN: I expect yasr to be in non-fullscreen mode
|
|
43
|
+
YasrSteps.getYasr().should('not.have.class', 'yasr-fullscreen');
|
|
44
|
+
// AND: I expect Google Chart plugin to be visible, because it was the last used plugin.
|
|
45
|
+
YasrSteps.getGoogleChartPlugin().should('be.visible');
|
|
46
|
+
|
|
47
|
+
// WHEN: I visit SPARQL Query & Update page with without embedded and pluginName url parameters.
|
|
48
|
+
// AND: There are no persisted yasr data.
|
|
49
|
+
cy.clearLocalStorage('yagui__graphdb-workbench-sparql-editor');
|
|
50
|
+
SparqlEditorSteps.visitSparqlEditorPageAndWaitForResults(getUrl(repositoryId));
|
|
51
|
+
// THEN: I expect yasr to be in non-fullscreen mode
|
|
52
|
+
YasrSteps.getYasr().should('not.have.class', 'yasr-fullscreen');
|
|
53
|
+
// AND: I expect the default plugin to be visible
|
|
54
|
+
YasrSteps.getExtendedTablePlugin().should('be.visible');
|
|
55
|
+
});
|
|
56
|
+
|
|
57
|
+
it('should trigger YASR fullscreen mode', () => {
|
|
58
|
+
// GIVEN: I open a page that contains "ontotext-yasgui-web-component".
|
|
59
|
+
SparqlEditorSteps.visitSparqlEditorPage();
|
|
60
|
+
|
|
61
|
+
// WHEN: I execute a query.
|
|
62
|
+
YasqeSteps.executeQuery();
|
|
63
|
+
// THEN: I should see YASR results in non-fullscreen mode.
|
|
64
|
+
YasrSteps.getYasr().should('not.have.class', 'yasr-fullscreen');
|
|
65
|
+
|
|
66
|
+
// WHEN: I toggle to fullscreen mode.
|
|
67
|
+
YasrSteps.toggleFullscreen();
|
|
68
|
+
// THEN: I should see YASR results in fullscreen mode.
|
|
69
|
+
YasrSteps.getYasr().should('have.class', 'yasr-fullscreen');
|
|
70
|
+
|
|
71
|
+
// WHEN: I press the ESC key.
|
|
72
|
+
YasrSteps.typeEscapeKey();
|
|
73
|
+
// THEN: I should see YASR results in non-fullscreen mode, because escape is enabled when workbench is not embedded.
|
|
74
|
+
YasrSteps.getYasr().should('not.have.class', 'yasr-fullscreen');
|
|
75
|
+
});
|
|
76
|
+
});
|
|
77
|
+
|
|
78
|
+
const getUrl = (repositoryId, pluginName, embedded = false) => {
|
|
79
|
+
return `repositoryId=${repositoryId}${pluginName ? ('&pluginName=' + pluginName) : ''}${embedded ? '&embedded' : ''}&query=SELECT * { ?s ?p ?o }&execute=true`;
|
|
80
|
+
}
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import {TTYGViewSteps} from "../../steps/ttyg/ttyg-view-steps";
|
|
2
2
|
import {TTYGStubs} from "../../stubs/ttyg/ttyg-stubs";
|
|
3
3
|
import {RepositoriesStubs} from "../../stubs/repositories/repositories-stubs";
|
|
4
|
-
import {
|
|
4
|
+
import {TtygAgentSettingsModalSteps} from "../../steps/ttyg/ttyg-agent-settings-modal.steps";
|
|
5
5
|
|
|
6
6
|
describe('TTYG agent list', () => {
|
|
7
7
|
beforeEach(() => {
|
|
8
8
|
RepositoriesStubs.stubRepositories(0, '/repositories/get-ttyg-repositories.json');
|
|
9
|
-
|
|
9
|
+
RepositoriesStubs.stubBaseEndpoints('starwars');
|
|
10
10
|
cy.presetRepository('starwars');
|
|
11
11
|
});
|
|
12
12
|
|
|
@@ -73,4 +73,55 @@ describe('TTYG agent list', () => {
|
|
|
73
73
|
{name: 'Databricks-biomarkers', repositoryId: 'biomarkers', isRepositoryDeleted: false}
|
|
74
74
|
]);
|
|
75
75
|
});
|
|
76
|
+
|
|
77
|
+
it('should filter agent actions based on compatibility', () => {
|
|
78
|
+
TTYGStubs.stubAgentListWithIncompatibleGet();
|
|
79
|
+
// When: I visit the ttyg page with incompatible agents
|
|
80
|
+
TTYGViewSteps.visit();
|
|
81
|
+
// Then: Only the delete action should be available for incompatible agents
|
|
82
|
+
TTYGViewSteps.expandAgentsSidebar();
|
|
83
|
+
TTYGViewSteps.getAgentsPanel(0).should('be.visible');
|
|
84
|
+
TTYGViewSteps.getOpenAgentActionsButton(0).should('be.visible');
|
|
85
|
+
TTYGViewSteps.toggleAgentActionMenu(0);
|
|
86
|
+
TTYGViewSteps.getDeleteAgentButton(0).should('be.visible');
|
|
87
|
+
TTYGViewSteps.getCloneAgentButton(0).should('not.exist');
|
|
88
|
+
TTYGViewSteps.getEditAgentButton(0).should('not.exist');
|
|
89
|
+
TTYGViewSteps.toggleAgentActionMenu(0);
|
|
90
|
+
// And: All actions should be available for compatible agents
|
|
91
|
+
TTYGViewSteps.toggleAgentActionMenu(1);
|
|
92
|
+
TTYGViewSteps.getDeleteAgentButton(1).should('be.visible');
|
|
93
|
+
TTYGViewSteps.getCloneAgentButton(1).should('be.visible');
|
|
94
|
+
TTYGViewSteps.getEditAgentButton(1).should('be.visible');
|
|
95
|
+
});
|
|
96
|
+
|
|
97
|
+
it('should allow copy of External integration configuration from agent list', () => {
|
|
98
|
+
TTYGStubs.stubAgentListGet('/ttyg/agent/get-agent-list-autocomplete-query.json');
|
|
99
|
+
TTYGStubs.getExternalUrl();
|
|
100
|
+
// Given I have opened the ttyg page
|
|
101
|
+
TTYGViewSteps.visit();
|
|
102
|
+
cy.wait('@get-agent-list');
|
|
103
|
+
// When I select an agent from the sidebar
|
|
104
|
+
TTYGViewSteps.expandAgentsSidebar();
|
|
105
|
+
TTYGViewSteps.toggleAgentActionMenu(0);
|
|
106
|
+
TTYGViewSteps.getExternalIntegrationConfigButton(0).should('be.visible');
|
|
107
|
+
TTYGViewSteps.openExternalIntegrationConfigButton(0);
|
|
108
|
+
cy.wait('@external-url');
|
|
109
|
+
// The url dialog should open
|
|
110
|
+
TtygAgentSettingsModalSteps.getExternalIntegrationModal().should('be.visible');
|
|
111
|
+
// The dialog should have all the fields
|
|
112
|
+
TtygAgentSettingsModalSteps.getAgentUrlField().invoke('val')
|
|
113
|
+
.then((val) => {
|
|
114
|
+
expect(val).to.equal('asst_G8EtHyT8kAGeDmCa3Nh6y74v');
|
|
115
|
+
});
|
|
116
|
+
|
|
117
|
+
TtygAgentSettingsModalSteps.getMethodUrlField().invoke('val')
|
|
118
|
+
.then((val) => {
|
|
119
|
+
expect(val).to.equal('http://user-pc:7200/rest/llm/tool/ttyg/asst_G8EtHyT8kAGeDmCa3Nh6y74v');
|
|
120
|
+
});
|
|
121
|
+
|
|
122
|
+
TtygAgentSettingsModalSteps.getDifyUrlField().invoke('val')
|
|
123
|
+
.then((val) => {
|
|
124
|
+
expect(val).to.equal('http://user-pc:7200/rest/llm/ttyg/asst_G8EtHyT8kAGeDmCa3Nh6y74v/dify');
|
|
125
|
+
});
|
|
126
|
+
});
|
|
76
127
|
});
|
|
@@ -2,7 +2,6 @@ import {TTYGViewSteps} from "../../steps/ttyg/ttyg-view-steps";
|
|
|
2
2
|
import {TTYGStubs} from "../../stubs/ttyg/ttyg-stubs";
|
|
3
3
|
import {RepositoriesStubs} from "../../stubs/repositories/repositories-stubs";
|
|
4
4
|
import {ModalDialogSteps} from "../../steps/modal-dialog-steps";
|
|
5
|
-
import {RepositoriesStub} from "../../stubs/repositories-stub";
|
|
6
5
|
|
|
7
6
|
describe('TTYG agent select menu', () => {
|
|
8
7
|
|
|
@@ -10,7 +9,7 @@ describe('TTYG agent select menu', () => {
|
|
|
10
9
|
|
|
11
10
|
beforeEach(() => {
|
|
12
11
|
RepositoriesStubs.stubRepositories(0, '/repositories/get-ttyg-repositories.json');
|
|
13
|
-
|
|
12
|
+
RepositoriesStubs.stubBaseEndpoints(repositoryId);
|
|
14
13
|
cy.presetRepository(repositoryId);
|
|
15
14
|
TTYGStubs.stubChatsListGetNoResults();
|
|
16
15
|
});
|
|
@@ -29,6 +28,30 @@ describe('TTYG agent select menu', () => {
|
|
|
29
28
|
]);
|
|
30
29
|
});
|
|
31
30
|
|
|
31
|
+
it('should not allow selecting an incompatible agent from the menu', () => {
|
|
32
|
+
TTYGStubs.stubAgentListWithIncompatibleGet();
|
|
33
|
+
// Given: I have opened the ttyg page
|
|
34
|
+
TTYGViewSteps.visit();
|
|
35
|
+
// And: The agent dropdown menu is not visible
|
|
36
|
+
TTYGViewSteps.getAgentsDropdownMenu().should('not.be.visible');
|
|
37
|
+
// And: The first agent is selected
|
|
38
|
+
TTYGViewSteps.getAgentsMenuToggleButton().should('contain', 'agent-1');
|
|
39
|
+
|
|
40
|
+
// When: I open the agent selection menu
|
|
41
|
+
TTYGViewSteps.openAgentsMenu();
|
|
42
|
+
// Then: I should see that the first agent is marked as incompatible
|
|
43
|
+
TTYGViewSteps.getAgentFromMenu(0)
|
|
44
|
+
.trigger('mouseover')
|
|
45
|
+
.should('have.css', 'cursor', 'not-allowed');
|
|
46
|
+
|
|
47
|
+
// When: I attempt to select an incompatible agent from the menu
|
|
48
|
+
TTYGViewSteps.selectAgent(0);
|
|
49
|
+
// Then: The incompatible agent should not be selected
|
|
50
|
+
TTYGViewSteps.getAgentsMenuToggleButton().should('contain', 'agent-1');
|
|
51
|
+
// And: The dropdown menu should remain open
|
|
52
|
+
TTYGViewSteps.getAgentsDropdownMenu().should('be.visible');
|
|
53
|
+
});
|
|
54
|
+
|
|
32
55
|
it('Should be able to select agent from the menu', () => {
|
|
33
56
|
TTYGStubs.stubAgentListGet();
|
|
34
57
|
// Given I have opened the ttyg page
|
|
@@ -6,13 +6,12 @@ import {ApplicationSteps} from "../../steps/application-steps";
|
|
|
6
6
|
import HomeSteps from "../../steps/home-steps";
|
|
7
7
|
import {ChatPanelSteps} from "../../steps/ttyg/chat-panel-steps";
|
|
8
8
|
import {AlertDialogSteps} from "../../steps/alert-dialog-steps";
|
|
9
|
-
import {RepositoriesStub} from "../../stubs/repositories-stub";
|
|
10
9
|
|
|
11
10
|
describe('TTYG chat list', () => {
|
|
12
11
|
|
|
13
12
|
beforeEach(() => {
|
|
14
13
|
RepositoriesStubs.stubRepositories(0, '/repositories/get-ttyg-repositories.json');
|
|
15
|
-
|
|
14
|
+
RepositoriesStubs.stubBaseEndpoints('starwars');
|
|
16
15
|
cy.presetRepository('starwars');
|
|
17
16
|
});
|
|
18
17
|
|
|
@@ -62,12 +61,7 @@ describe('TTYG chat list', () => {
|
|
|
62
61
|
TTYGViewSteps.getChatByDayGroups().should('have.length', 0);
|
|
63
62
|
});
|
|
64
63
|
|
|
65
|
-
it('Should be able to edit an existing chat name by double click on the chat in the list', {
|
|
66
|
-
retries: {
|
|
67
|
-
runMode: 1,
|
|
68
|
-
openMode: 0
|
|
69
|
-
}
|
|
70
|
-
}, () => {
|
|
64
|
+
it('Should be able to edit an existing chat name by double click on the chat in the list', () => {
|
|
71
65
|
TTYGStubs.stubChatsListGet();
|
|
72
66
|
TTYGStubs.stubChatGet();
|
|
73
67
|
TTYGStubs.stubAgentListGet();
|
|
@@ -91,12 +85,7 @@ describe('TTYG chat list', () => {
|
|
|
91
85
|
TTYGViewSteps.getChatFromGroup(1, 0).should('contain', 'New chat name');
|
|
92
86
|
});
|
|
93
87
|
|
|
94
|
-
it('Should be able to edit an existing chat name through the action menu', {
|
|
95
|
-
retries: {
|
|
96
|
-
runMode: 1,
|
|
97
|
-
openMode: 0
|
|
98
|
-
}
|
|
99
|
-
}, () => {
|
|
88
|
+
it('Should be able to edit an existing chat name through the action menu', () => {
|
|
100
89
|
TTYGStubs.stubChatsListGet();
|
|
101
90
|
TTYGStubs.stubChatGet();
|
|
102
91
|
TTYGStubs.stubAgentListGet();
|
|
@@ -3,14 +3,15 @@ import {TTYGStubs} from "../../stubs/ttyg/ttyg-stubs";
|
|
|
3
3
|
import {TTYGViewSteps} from "../../steps/ttyg/ttyg-view-steps";
|
|
4
4
|
import {ChatPanelSteps} from "../../steps/ttyg/chat-panel-steps";
|
|
5
5
|
import {ApplicationSteps} from "../../steps/application-steps";
|
|
6
|
-
import {
|
|
6
|
+
import {TtygAgentSettingsModalSteps} from '../../steps/ttyg/ttyg-agent-settings-modal.steps.js';
|
|
7
|
+
import {SparqlStubs} from '../../stubs/sparql-stubs.js';
|
|
7
8
|
|
|
8
9
|
describe('Ttyg ChatPanel', () => {
|
|
9
10
|
|
|
10
11
|
beforeEach(() => {
|
|
11
12
|
// Create an actual repository to prevent stubbing all background requests that are not related to the ttyg view
|
|
12
13
|
RepositoriesStubs.stubRepositories(0, '/repositories/get-ttyg-repositories.json');
|
|
13
|
-
|
|
14
|
+
RepositoriesStubs.stubBaseEndpoints('starwars');
|
|
14
15
|
cy.presetRepository('starwars');
|
|
15
16
|
TTYGStubs.stubChatsListGet();
|
|
16
17
|
TTYGStubs.stubAgentListGet();
|
|
@@ -42,7 +43,7 @@ describe('Ttyg ChatPanel', () => {
|
|
|
42
43
|
// When the new question input is empty.
|
|
43
44
|
// The "Ask" button must be disabled.
|
|
44
45
|
ChatPanelSteps.getAskButtonElement().should('be.disabled');
|
|
45
|
-
ChatPanelSteps.getQuestionInputElement().should('
|
|
46
|
+
ChatPanelSteps.getQuestionInputElement().should('have.attr', 'disabled');
|
|
46
47
|
|
|
47
48
|
// Then I expect the "Ask" button be not active because agent is not selected
|
|
48
49
|
ChatPanelSteps.getAskButtonElement().should('not.be.enabled');
|
|
@@ -54,7 +55,8 @@ describe('Ttyg ChatPanel', () => {
|
|
|
54
55
|
// When I type a question
|
|
55
56
|
ChatPanelSteps.getQuestionInputElement()
|
|
56
57
|
.should('be.visible')
|
|
57
|
-
.and('not.
|
|
58
|
+
.and('not.have.attr', 'disabled');
|
|
59
|
+
ChatPanelSteps.getQuestionInputElement()
|
|
58
60
|
.type('Who is Han Solo?');
|
|
59
61
|
|
|
60
62
|
// Then I expect the "Ask" button be active.
|
|
@@ -68,13 +70,22 @@ describe('Ttyg ChatPanel', () => {
|
|
|
68
70
|
ChatPanelSteps.getChatDetailsElements().should('have.length', 3);
|
|
69
71
|
ChatPanelSteps.getChatDetailQuestionElement(2).contains('Who is Han Solo?');
|
|
70
72
|
// and input field be empty,
|
|
71
|
-
ChatPanelSteps.getQuestionInputElement().should('
|
|
73
|
+
ChatPanelSteps.getQuestionInputElement().should('not.have.attr', 'disabled');
|
|
72
74
|
ChatPanelSteps.getQuestionInputElement().should('have.value', '');
|
|
73
75
|
// and "Ask" button be disabled.
|
|
74
76
|
ChatPanelSteps.getAskButtonElement().should('be.disabled');
|
|
75
77
|
// and only the actions for the last message are visible.
|
|
76
78
|
ChatPanelSteps.getChatDetailActions(2, 0).should('not.be.visible');
|
|
77
79
|
ChatPanelSteps.getChatDetailActions(2, 1).should('be.visible');
|
|
80
|
+
// When: I hover over the token usage info button
|
|
81
|
+
TTYGViewSteps.hoverTokenUsageInfoButton(0);
|
|
82
|
+
// Then: I expect the token usage info popover to be displayed.
|
|
83
|
+
TTYGViewSteps.getTokenUsageInfoPopover()
|
|
84
|
+
.should("exist")
|
|
85
|
+
.and('contain', '10,246')
|
|
86
|
+
.and('contain', 'prompt tokens')
|
|
87
|
+
.and('contain', '82')
|
|
88
|
+
.and('contain', 'completion tokens');
|
|
78
89
|
|
|
79
90
|
// When I click on regenerate button on the last response => +2 messages
|
|
80
91
|
TTYGStubs.stubAnswerQuestion();
|
|
@@ -129,14 +140,22 @@ describe('Ttyg ChatPanel', () => {
|
|
|
129
140
|
|
|
130
141
|
// When I click on first explain response button
|
|
131
142
|
TTYGViewSteps.getExplainResponseButton(0).realHover();
|
|
132
|
-
// Then I expect to explain button to be visible.
|
|
143
|
+
// Then I expect to explain button to be visible and not disabled.
|
|
133
144
|
TTYGViewSteps.getExplainResponseButton(0).should('be.visible');
|
|
145
|
+
TTYGViewSteps.getExplainResponseButton(0).should('not.be.disabled');
|
|
134
146
|
|
|
135
147
|
// When I click on the button.
|
|
136
148
|
TTYGStubs.stubExplainResponse();
|
|
137
149
|
TTYGViewSteps.clickOnExplainResponse(0);
|
|
138
150
|
// Then I expect the hint message to not exist (it should only exist for the last 'Explain' response).
|
|
139
151
|
TTYGViewSteps.getHowDeliverAnswerButton().should('not.exist');
|
|
152
|
+
// When I click on the open in sparql editor button for the explain response
|
|
153
|
+
SparqlStubs.spyAddKnownPrefixes();
|
|
154
|
+
TtygAgentSettingsModalSteps.clickOpenQueryInSparqlEditor(0);
|
|
155
|
+
// Then I expect a request for appending prefixes to be sent with the correct query.
|
|
156
|
+
cy.wait('@addKnownPrefixes').its('request.body').then((body) => {
|
|
157
|
+
expect(body).to.contain('SELECT ?name ?height WHERE {\n ?character voc:height ?height;\n rdfs:label ?name.\n FILTER(?name = "Luke Skywalker" || ?name = "Leia Organa")\n}');
|
|
158
|
+
});
|
|
140
159
|
|
|
141
160
|
// Then when I click on explain response button on the second answer
|
|
142
161
|
TTYGStubs.stubExplainResponse('/ttyg/chats/explain-response-2.json');
|
|
@@ -164,6 +183,55 @@ describe('Ttyg ChatPanel', () => {
|
|
|
164
183
|
TTYGViewSteps.getExplainQueryQueryElement(1, 2).contains("PREFIX rdfs: <http://www.w3.org/2000/01/rdf-sch");
|
|
165
184
|
});
|
|
166
185
|
|
|
186
|
+
it('Should display info about used tokens for response', () => {
|
|
187
|
+
// Given: I visit the TTYG page, a chat with two questions and answers is loaded.
|
|
188
|
+
// Wait to chat be loaded
|
|
189
|
+
ChatPanelSteps.getChatDetailsElements().should('have.length', 2);
|
|
190
|
+
|
|
191
|
+
// When: I hover over the token usage info button
|
|
192
|
+
TTYGViewSteps.hoverTokenUsageInfoButton(0);
|
|
193
|
+
// Then: I expect the token usage info popover to be displayed.
|
|
194
|
+
TTYGViewSteps.getTokenUsageInfoPopover()
|
|
195
|
+
.should("exist")
|
|
196
|
+
.and('contain', '10,245')
|
|
197
|
+
.and('contain', 'prompt tokens')
|
|
198
|
+
.and('contain', '81')
|
|
199
|
+
.and('contain', 'completion tokens');
|
|
200
|
+
});
|
|
201
|
+
|
|
202
|
+
it('Should abort question', () => {
|
|
203
|
+
// When I type a question
|
|
204
|
+
ChatPanelSteps.getQuestionInputElement()
|
|
205
|
+
.should('be.visible')
|
|
206
|
+
.and('not.have.attr', 'disabled');
|
|
207
|
+
ChatPanelSteps.getQuestionInputElement()
|
|
208
|
+
.type('Who is Han Solo?');
|
|
209
|
+
|
|
210
|
+
// Then I expect the "Ask" button be active
|
|
211
|
+
ChatPanelSteps.getAskButtonElement().should('be.enabled');
|
|
212
|
+
|
|
213
|
+
// When I click on "Ask" button
|
|
214
|
+
TTYGStubs.stubAnswerQuestionWithDelay();
|
|
215
|
+
TTYGStubs.stubCancelQuestion();
|
|
216
|
+
ChatPanelSteps.askQuestion();
|
|
217
|
+
// Then the Cancel button should become visible and the Ask button should be hidden
|
|
218
|
+
ChatPanelSteps.getAskButtonElement().should('not.exist');
|
|
219
|
+
ChatPanelSteps.getCancelButton().should('be.visible');
|
|
220
|
+
// When I cancel the question
|
|
221
|
+
ChatPanelSteps.cancelQuestion();
|
|
222
|
+
// Then the Cancel button should be replaced with the Ask button
|
|
223
|
+
ChatPanelSteps.getCancelButton().should('not.exist');
|
|
224
|
+
ChatPanelSteps.getAskButtonElement().should('be.visible');
|
|
225
|
+
// Then the default Agent response should be visible
|
|
226
|
+
ChatPanelSteps.getAssistantAnswer(2).invoke('text').then((text) => {
|
|
227
|
+
expect(text.trim()).to.equal('Request cancelled by the user.');
|
|
228
|
+
});
|
|
229
|
+
ChatPanelSteps.getAssistantIcon(2).should('not.exist');
|
|
230
|
+
// And I expect the explain response button to be visible but disabled
|
|
231
|
+
TTYGViewSteps.getExplainResponseButton(2).should('be.visible');
|
|
232
|
+
TTYGViewSteps.getExplainResponseButton(2).should('be.disabled');
|
|
233
|
+
});
|
|
234
|
+
|
|
167
235
|
// Can't test this on CI
|
|
168
236
|
it.skip('Should copy an answer when click on copy button', () => {
|
|
169
237
|
// When I click on copy button
|
|
@@ -2,14 +2,13 @@ import {RepositoriesStubs} from "../../stubs/repositories/repositories-stubs";
|
|
|
2
2
|
import {TTYGViewSteps} from "../../steps/ttyg/ttyg-view-steps";
|
|
3
3
|
import {TTYGStubs} from "../../stubs/ttyg/ttyg-stubs";
|
|
4
4
|
import {TtygAgentSettingsModalSteps} from "../../steps/ttyg/ttyg-agent-settings-modal.steps";
|
|
5
|
-
import {RepositoriesStub} from "../../stubs/repositories-stub";
|
|
6
5
|
|
|
7
6
|
describe('TTYG clone an agent', () => {
|
|
8
7
|
const repositoryId = 'starwars';
|
|
9
8
|
|
|
10
9
|
beforeEach(() => {
|
|
11
10
|
RepositoriesStubs.stubRepositories(0, '/repositories/get-ttyg-repositories.json');
|
|
12
|
-
|
|
11
|
+
RepositoriesStubs.stubBaseEndpoints(repositoryId);
|
|
13
12
|
cy.presetRepository(repositoryId);
|
|
14
13
|
TTYGStubs.stubAgentDefaultsGet();
|
|
15
14
|
});
|
|
@@ -18,6 +17,7 @@ describe('TTYG clone an agent', () => {
|
|
|
18
17
|
TTYGStubs.stubAgentListGet();
|
|
19
18
|
TTYGStubs.stubChatsListGet();
|
|
20
19
|
TTYGStubs.stubChatGet();
|
|
20
|
+
RepositoriesStubs.stubRepositoryModel(repositoryId);
|
|
21
21
|
// Given I have opened the ttyg page
|
|
22
22
|
TTYGViewSteps.visit();
|
|
23
23
|
cy.wait('@get-all-repositories');
|
|
@@ -46,11 +46,13 @@ describe('TTYG clone an agent', () => {
|
|
|
46
46
|
TTYGStubs.stubAgentCreate();
|
|
47
47
|
TtygAgentSettingsModalSteps.saveAgent();
|
|
48
48
|
cy.wait('@create-agent').then((interception) => {
|
|
49
|
+
// eslint-disable-next-line no-undef
|
|
49
50
|
assert.deepEqual(interception.request.body, {
|
|
50
51
|
"id": "asst_gAPcrHQQ9ZIxD5eXWH2BNFfo",
|
|
51
52
|
"name": "agent-11",
|
|
52
53
|
"repositoryId": "starwars",
|
|
53
54
|
"model": "gpt-4o",
|
|
55
|
+
"contextSize": 128000,
|
|
54
56
|
"temperature": 0,
|
|
55
57
|
"topP": 0,
|
|
56
58
|
"seed": 0,
|
|
@@ -72,4 +74,24 @@ describe('TTYG clone an agent', () => {
|
|
|
72
74
|
});
|
|
73
75
|
});
|
|
74
76
|
});
|
|
77
|
+
|
|
78
|
+
it('should not be able to clone an agent if an extraction method is selected but the precondition has failed', () => {
|
|
79
|
+
TTYGStubs.stubAgentListGet();
|
|
80
|
+
TTYGStubs.stubChatsListGet();
|
|
81
|
+
TTYGStubs.stubChatGet();
|
|
82
|
+
RepositoriesStubs.stubFtsSearchDisabled(repositoryId);
|
|
83
|
+
|
|
84
|
+
// GIVEN: I have opened the TTYG page
|
|
85
|
+
TTYGViewSteps.visit();
|
|
86
|
+
cy.wait('@get-all-repositories');
|
|
87
|
+
cy.wait('@get-agent-list');
|
|
88
|
+
cy.wait('@get-chat');
|
|
89
|
+
|
|
90
|
+
// WHEN: I try to clone an agent that has the FTS extraction method enabled, but FTS is disabled in the repository
|
|
91
|
+
TTYGViewSteps.expandAgentsSidebar();
|
|
92
|
+
TTYGViewSteps.triggerCloneAgentActionMenu(0);
|
|
93
|
+
|
|
94
|
+
// THEN: The Save Agent button should be disabled
|
|
95
|
+
TtygAgentSettingsModalSteps.getSaveAgentButton().should('be.disabled');
|
|
96
|
+
});
|
|
75
97
|
});
|