ml-testing-toolkit 18.13.0
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/.dockerignore +10 -0
- package/.grype.yaml +16 -0
- package/.ncurc.yaml +9 -0
- package/.nvmrc +1 -0
- package/.versionrc.js +16 -0
- package/CHANGELOG.md +504 -0
- package/CODEOWNERS +30 -0
- package/Dockerfile +42 -0
- package/Dockerfile-newman +13 -0
- package/LICENSE.md +9 -0
- package/README.md +119 -0
- package/assets/diagrams/architectural/architectural-diagram.svg +3 -0
- package/assets/diagrams/flow/flow-diagram.svg +3 -0
- package/assets/images/Sample-Response-Failure.png +0 -0
- package/assets/images/Screenshot 2020-04-16 at 22.58.04.png +0 -0
- package/assets/images/TLS-Enabled-on-Environment.png +0 -0
- package/assets/images/adapter-mutual-tls-enabled.png +0 -0
- package/assets/images/add-additional-input-values.png +0 -0
- package/assets/images/add-condition-button.png +0 -0
- package/assets/images/add-new-assertion.png +0 -0
- package/assets/images/add-new-input-value.png +0 -0
- package/assets/images/add-new-input-variable.png +0 -0
- package/assets/images/additional-transfers.png +0 -0
- package/assets/images/api-provisioning-add-new-api-confirmation.png +0 -0
- package/assets/images/api-provisioning-file-input-window.png +0 -0
- package/assets/images/api-provisioning-list-apis-view.png +0 -0
- package/assets/images/api-provisioning-menu-item.png +0 -0
- package/assets/images/apply_and_restart.jpg +0 -0
- package/assets/images/assess-request-or-response.png +0 -0
- package/assets/images/assess-response-equation-save.png +0 -0
- package/assets/images/assess-response-equation.png +0 -0
- package/assets/images/assess-response-status.png +0 -0
- package/assets/images/building-new-rules-file.png +0 -0
- package/assets/images/callback-rules-screen.png +0 -0
- package/assets/images/configurable-parameter-assertion.png +0 -0
- package/assets/images/configurable-parameter-currency.png +0 -0
- package/assets/images/configurable-parameter.png +0 -0
- package/assets/images/connection-manager-ui-opening.png +0 -0
- package/assets/images/create-inbound-user-simulator.png +0 -0
- package/assets/images/creating-new-rule-file.png +0 -0
- package/assets/images/dfsp-client-cacert.png +0 -0
- package/assets/images/dfsp-client-submit.png +0 -0
- package/assets/images/dfsp-client.png +0 -0
- package/assets/images/dfsp-p2p-happy-path.png +0 -0
- package/assets/images/dfsp-server-cacert.png +0 -0
- package/assets/images/dfsp-server-cert.png +0 -0
- package/assets/images/download-report.png +0 -0
- package/assets/images/drive_have_not_been_shared.jpg +0 -0
- package/assets/images/event-response-options.png +0 -0
- package/assets/images/expand-monitoring-messages.png +0 -0
- package/assets/images/fixed-response-sample.png +0 -0
- package/assets/images/header-selection.png +0 -0
- package/assets/images/heap_error_windows.jpg +0 -0
- package/assets/images/hosted-mode-docker-compose-intro.png +0 -0
- package/assets/images/hub-client-cert.png +0 -0
- package/assets/images/import-template.png +0 -0
- package/assets/images/inbound-requests-environment.png +0 -0
- package/assets/images/inbound-requests-scripts.png +0 -0
- package/assets/images/jws-certificate-submit.png +0 -0
- package/assets/images/jws-certificate.png +0 -0
- package/assets/images/jws-certs-keys.png +0 -0
- package/assets/images/jws-hub-certs-keys.png +0 -0
- package/assets/images/local-enable-jws-publickey.png +0 -0
- package/assets/images/local-mutual-tls-enabled.png +0 -0
- package/assets/images/local_drives_to_be_available.jpg +0 -0
- package/assets/images/mcm-environment-opening.png +0 -0
- package/assets/images/menu-items.png +0 -0
- package/assets/images/mock-response-sample.png +0 -0
- package/assets/images/monitoring-initial-state.png +0 -0
- package/assets/images/monitoring-messages.png +0 -0
- package/assets/images/new-empty-assertion.png +0 -0
- package/assets/images/opened-imported-template.png +0 -0
- package/assets/images/opening-default-settings.png +0 -0
- package/assets/images/opening-sync-response-rules.png +0 -0
- package/assets/images/opening-view.png +0 -0
- package/assets/images/outbound-display-opening-hub.png +0 -0
- package/assets/images/outbound-display-opening.png +0 -0
- package/assets/images/override-with-environment-variable.png +0 -0
- package/assets/images/populate-with-sample-body.png +0 -0
- package/assets/images/resource-selection.png +0 -0
- package/assets/images/rule-builder-select-api.png +0 -0
- package/assets/images/sample-condition-add-configurable-params.png +0 -0
- package/assets/images/sample-condition.png +0 -0
- package/assets/images/sample-editor.png +0 -0
- package/assets/images/sample-request.png +0 -0
- package/assets/images/sample-test-assertion.png +0 -0
- package/assets/images/send-transfer.png +0 -0
- package/assets/images/sending-single-test-case-1.png +0 -0
- package/assets/images/sending-single-test-case-2.png +0 -0
- package/assets/images/sending-test-cases.png +0 -0
- package/assets/images/server-certificates-submitted.png +0 -0
- package/assets/images/simulator-response.png +0 -0
- package/assets/images/simulator-scheme-adapter-endpoint.png +0 -0
- package/assets/images/summarized-view-of-rule.png +0 -0
- package/assets/images/template-window.png +0 -0
- package/assets/images/test-case-editor-console-log.png +0 -0
- package/assets/images/test-case-editor-environment-state.png +0 -0
- package/assets/images/test-case-editor-scripts.png +0 -0
- package/assets/images/test-case-editor.png +0 -0
- package/assets/images/testcase-definition-download.png +0 -0
- package/assets/images/testcase-definition-edit-meta-info.png +0 -0
- package/assets/images/testing-toolkit-mojaloop-testing-toolkit-endpoint.png +0 -0
- package/assets/images/tls-hub-certs-keys.png +0 -0
- package/assets/images/tls-jws-enabled-on-environment.png +0 -0
- package/assets/images/updated-sample-body-data.png +0 -0
- package/assets/images/using-configurable-parameter.png +0 -0
- package/assets/images/validation-rules-screen.png +0 -0
- package/assets/images/view-response.png +0 -0
- package/audit-ci.jsonc +7 -0
- package/connection-manager/docker-compose.yml +55 -0
- package/database/docker-compose.yml +16 -0
- package/docker/hosted-mode/docker-compose.yaml +107 -0
- package/docker/hosted-mode/keycloak/keycloak-realm.json +2298 -0
- package/docker/hosted-mode/mongo-init.sh +1 -0
- package/docker/hosted-mode-tls/docker-compose.yaml +171 -0
- package/docker/hosted-mode-tls/keycloak/keycloak-realm.json +2298 -0
- package/docker/hosted-mode-tls/mongo-init.sh +1 -0
- package/docker-compose.yml +62 -0
- package/documents/Mojaloop-Testing-Toolkit.md +296 -0
- package/documents/RULES_ENGINE.md +403 -0
- package/documents/User-Guide-API-Provisioning.md +121 -0
- package/documents/User-Guide-CLI.md +218 -0
- package/documents/User-Guide-Connection-Manager.md +282 -0
- package/documents/User-Guide-Frequently-Asked-Questions.md +39 -0
- package/documents/User-Guide-Hosted-Mode-Docker-Compose.md +110 -0
- package/documents/User-Guide-Installation.md +163 -0
- package/documents/User-Guide-Mojaloop-Testing-Toolkit.md +642 -0
- package/documents/User-Guide-OAuth-Server-Deployment.md +283 -0
- package/documents/User-Guide-Onboarding-DFSP.md +197 -0
- package/documents/User-Guide-Onboarding-HUB.md +191 -0
- package/documents/User-Guide.md +53 -0
- package/examples/collections/dfsp/p2p_failed_tests.json +7161 -0
- package/examples/collections/dfsp/p2p_fx_happy_path.json +502 -0
- package/examples/collections/dfsp/p2p_happy_path.json +350 -0
- package/examples/collections/dfsp/p2p_happy_path_extended.json +6106 -0
- package/examples/collections/dfsp/p2p_happy_path_jws.json +511 -0
- package/examples/collections/dfsp/p2p_payee_assertions_websocket.json +441 -0
- package/examples/collections/dfsp/sample.json +5029 -0
- package/examples/collections/dfsp/transaction_request_service.json +240 -0
- package/examples/collections/fxp/FXP.json +264 -0
- package/examples/collections/fxp/SDK_backend.json +98 -0
- package/examples/collections/fxp/SDK_outbound.json +163 -0
- package/examples/collections/hub/hub_01_p2p_happy_path/hub_p2p_receive_quote.json +400 -0
- package/examples/collections/hub/hub_01_p2p_happy_path/hub_p2p_send_quote.json +395 -0
- package/examples/collections/hub/hub_02_block_transfer/hub_block_transfer.json +393 -0
- package/examples/collections/hub/hub_03_funds_in_out/hub_funds_in.json +224 -0
- package/examples/collections/hub/hub_03_funds_in_out/hub_funds_out.json +780 -0
- package/examples/collections/hub/hub_04_settlements/hub_settlements.json +3138 -0
- package/examples/collections/hub/hub_05_transfer_negative_scenarios/hub_transfer_negative_payee_abort.json +475 -0
- package/examples/collections/hub/hub_05_transfer_negative_scenarios/hub_transfer_negative_payee_invalid_fulfillment.json +370 -0
- package/examples/collections/hub/hub_05_transfer_negative_scenarios/hub_transfer_negative_transfer_timeout.json +262 -0
- package/examples/collections/hub/hub_06_transaction_requests_service/hub_trs_authorizations.json +117 -0
- package/examples/collections/hub/hub_06_transaction_requests_service/hub_trs_error_framework.json +591 -0
- package/examples/collections/hub/hub_06_transaction_requests_service/hub_trs_received_state.json +379 -0
- package/examples/collections/hub/hub_06_transaction_requests_service/hub_trs_reject_state.json +361 -0
- package/examples/collections/hub/hub_07_quoting_service.json +525 -0
- package/examples/collections/hub/hub_08_participant_inactive_stop_transfers.json +706 -0
- package/examples/collections/hub/hub_09_duplicate_handling_transfers.json +1377 -0
- package/examples/collections/hub/hub_10_on_us_transfers.json +245 -0
- package/examples/collections/hub/hub_11_accented_and_spl_chars.json +629 -0
- package/examples/collections/hub/hub_12_fspiop_version_1.1.json +646 -0
- package/examples/collections/hub/hub_13_bulk_transfers.json +1857 -0
- package/examples/collections/iso20022/self_referencing_iso20022.json +926 -0
- package/examples/collections/provisioning/testingtoolkitdfsp.json +904 -0
- package/examples/environments/dfsp_local_environment.json +46 -0
- package/examples/environments/hub_local_environment.json +57 -0
- package/jest.config.js +17 -0
- package/package.json +199 -0
- package/sbom-v18.12.4.csv +1553 -0
- package/secrets/keygen.sh +5 -0
- package/secrets/privatekey.pem +27 -0
- package/secrets/publickey.cer +21 -0
- package/secrets/tls/01.pem +132 -0
- package/secrets/tls/createSecrets.sh +20 -0
- package/secrets/tls/hub_client.csr +32 -0
- package/secrets/tls/hub_client_cacert.pem +35 -0
- package/secrets/tls/hub_client_cakey.pem +52 -0
- package/secrets/tls/hub_client_key.key +52 -0
- package/secrets/tls/hub_server.csr +31 -0
- package/secrets/tls/hub_server_cacert.pem +35 -0
- package/secrets/tls/hub_server_cakey.pem +52 -0
- package/secrets/tls/hub_server_cert.pem +132 -0
- package/secrets/tls/hub_server_key.key +52 -0
- package/secrets/tls/index.txt +1 -0
- package/secrets/tls/index.txt.attr +1 -0
- package/secrets/tls/openssl-client.cnf +36 -0
- package/secrets/tls/openssl-clientca.cnf +71 -0
- package/secrets/tls/openssl-server.cnf +39 -0
- package/secrets/tls/openssl-serverca.cnf +71 -0
- package/secrets/tls/serial.txt +1 -0
- package/spec_files/api_definitions/als_admin_1.1/api_spec.yaml +804 -0
- package/spec_files/api_definitions/central_admin_1.0/api_spec.yaml +1850 -0
- package/spec_files/api_definitions/central_admin_1.0/response_map.json +96 -0
- package/spec_files/api_definitions/central_admin_old_9.3/api_spec.yaml +2467 -0
- package/spec_files/api_definitions/central_admin_old_9.3/response_map.json +96 -0
- package/spec_files/api_definitions/fspiop_1.0/api_spec.yaml +4187 -0
- package/spec_files/api_definitions/fspiop_1.0/callback_map.json +568 -0
- package/spec_files/api_definitions/fspiop_1.0/mockRef.json +79 -0
- package/spec_files/api_definitions/fspiop_1.0/trigger_templates/transaction_request_followup.json +126 -0
- package/spec_files/api_definitions/fspiop_1.0/trigger_templates/transaction_request_followup_quotes_only.json +97 -0
- package/spec_files/api_definitions/fspiop_1.1/api_spec.yaml +3778 -0
- package/spec_files/api_definitions/fspiop_1.1/callback_map.json +568 -0
- package/spec_files/api_definitions/fspiop_1.1/mockRef.json +79 -0
- package/spec_files/api_definitions/fspiop_1.1/trigger_templates/transaction_request_followup.json +125 -0
- package/spec_files/api_definitions/fspiop_2.0/api_spec.yaml +4839 -0
- package/spec_files/api_definitions/fspiop_2.0/callback_map.json +716 -0
- package/spec_files/api_definitions/fspiop_2.0/mockRef.json +79 -0
- package/spec_files/api_definitions/fspiop_2.0/trigger_templates/transaction_request_followup.json +125 -0
- package/spec_files/api_definitions/fspiop_2.0_iso20022/api_spec.yaml +8331 -0
- package/spec_files/api_definitions/fspiop_2.0_iso20022/callback_map.json +508 -0
- package/spec_files/api_definitions/fspiop_2.0_iso20022/mockRef.json +66 -0
- package/spec_files/api_definitions/fx-api_2.0/api_spec.yaml +1768 -0
- package/spec_files/api_definitions/fx-api_2.0/callback_map.json +188 -0
- package/spec_files/api_definitions/fx-api_2.0/mockRef.json +83 -0
- package/spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/api_spec.yaml +2612 -0
- package/spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/mockRef.json +22 -0
- package/spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/response_map.json +35 -0
- package/spec_files/api_definitions/mojaloop_simulator_0.1/api_spec.yaml +225 -0
- package/spec_files/api_definitions/mojaloop_simulator_sim_1.4/api_spec.yaml +1087 -0
- package/spec_files/api_definitions/mojaloop_simulator_sim_1.4/mockRef.json +75 -0
- package/spec_files/api_definitions/mojaloop_simulator_sim_1.4/response_map.json +55 -0
- package/spec_files/api_definitions/payment_manager_1.4/api_spec.yaml +1389 -0
- package/spec_files/api_definitions/sdk-scheme-adapter-backend-v2_1_0-openapi3-snippets_2.1/api_spec.yaml +2834 -0
- package/spec_files/api_definitions/sdk-scheme-adapter-outbound-v2_1_0-openapi3-snippets_2.1/api_spec.yaml +3449 -0
- package/spec_files/api_definitions/settlements_1.0/api_spec.yaml +983 -0
- package/spec_files/api_definitions/settlements_1.0/mockRef.json +38 -0
- package/spec_files/api_definitions/settlements_1.0/response_map.json +34 -0
- package/spec_files/api_definitions/settlements_2.0/api_spec.yaml +1001 -0
- package/spec_files/api_definitions/settlements_2.0/mockRef.json +38 -0
- package/spec_files/api_definitions/settlements_2.0/response_map.json +34 -0
- package/spec_files/api_definitions/thirdparty_sdk_outbound_0.1/api_spec.yaml +2139 -0
- package/spec_files/reports/templates/newman/html_template.html +1202 -0
- package/spec_files/reports/templates/newman/pdf_template.html +790 -0
- package/spec_files/reports/templates/testcase_definition/table_view.html +1602 -0
- package/spec_files/rules_callback/config.json +3 -0
- package/spec_files/rules_callback/default.json +2698 -0
- package/spec_files/rules_callback/p2p-limit.json +129 -0
- package/spec_files/rules_forward/config.json +3 -0
- package/spec_files/rules_forward/default.json +482 -0
- package/spec_files/rules_response/config.json +3 -0
- package/spec_files/rules_response/default.json +295 -0
- package/spec_files/rules_validation/config.json +3 -0
- package/spec_files/rules_validation/default.json +1 -0
- package/spec_files/rules_validation/p2p-limit.json +55 -0
- package/spec_files/system_config.json +175 -0
- package/spec_files/user_config.json +109 -0
- package/src/index.js +67 -0
- package/src/lib/MyEventEmitter.js +54 -0
- package/src/lib/api-management.js +143 -0
- package/src/lib/api-routes/config.js +83 -0
- package/src/lib/api-routes/history.js +139 -0
- package/src/lib/api-routes/keycloak.js +54 -0
- package/src/lib/api-routes/longpolling.js +70 -0
- package/src/lib/api-routes/oauth2.js +149 -0
- package/src/lib/api-routes/objectstore.js +53 -0
- package/src/lib/api-routes/openapi.js +224 -0
- package/src/lib/api-routes/outbound.js +134 -0
- package/src/lib/api-routes/reports.js +72 -0
- package/src/lib/api-routes/rules.js +356 -0
- package/src/lib/api-routes/samples.js +92 -0
- package/src/lib/api-routes/server-logs.js +44 -0
- package/src/lib/api-routes/settings.js +71 -0
- package/src/lib/api-server.js +135 -0
- package/src/lib/arrayStore.js +101 -0
- package/src/lib/callbackHandler.js +201 -0
- package/src/lib/config.js +177 -0
- package/src/lib/configuration-providers/mb-connection-manager.js +625 -0
- package/src/lib/db/adapters/dbAdapter.js +184 -0
- package/src/lib/db/dfspMockUsers.js +64 -0
- package/src/lib/db/models/mongoDBWrapper.js +78 -0
- package/src/lib/eventListenerClient/inboundEventListener.js +176 -0
- package/src/lib/fileAdapter.js +57 -0
- package/src/lib/httpAgentStore.js +135 -0
- package/src/lib/importExport.js +186 -0
- package/src/lib/jws/JwsSigning.js +141 -0
- package/src/lib/loadSamples.js +128 -0
- package/src/lib/logger.js +20 -0
- package/src/lib/longpollingEmitter.js +56 -0
- package/src/lib/metrics.js +51 -0
- package/src/lib/mocking/custom-functions/generic.js +57 -0
- package/src/lib/mocking/middleware-functions/ilpModel.js +238 -0
- package/src/lib/mocking/middleware-functions/quotesAssociation.js +75 -0
- package/src/lib/mocking/middleware-functions/transactionRequestsService.js +78 -0
- package/src/lib/mocking/openApiDefinitionsModel.js +64 -0
- package/src/lib/mocking/openApiMockHandler.js +466 -0
- package/src/lib/mocking/openApiRulesEngine.js +492 -0
- package/src/lib/mocking/openApiVersionTools.js +136 -0
- package/src/lib/mocking/transformers/fspiopToISO20022.js +230 -0
- package/src/lib/mocking/transformers/index.js +41 -0
- package/src/lib/notificationEmitter.js +64 -0
- package/src/lib/oauth/KeycloakHelper.js +220 -0
- package/src/lib/oauth/LoginService.js +133 -0
- package/src/lib/oauth/OAuthHelper.js +181 -0
- package/src/lib/oauth/OAuthValidator.js +118 -0
- package/src/lib/oauth/Wso2Client.js +64 -0
- package/src/lib/objectStore/inMemoryImpl.js +50 -0
- package/src/lib/objectStore/objectStoreInterface.js +51 -0
- package/src/lib/objectStore.js +122 -0
- package/src/lib/report-generator/generator.js +126 -0
- package/src/lib/report-generator/helpers.js +154 -0
- package/src/lib/requestLogger.js +190 -0
- package/src/lib/resources/wso2carbon-publickey.cert +20 -0
- package/src/lib/rulesEngine.js +95 -0
- package/src/lib/rulesEngineModel.js +463 -0
- package/src/lib/scripting-engines/postman-sandbox.js +142 -0
- package/src/lib/scripting-engines/vm-javascript-sandbox.js +294 -0
- package/src/lib/server-logs/adapters/elastic-search.js +102 -0
- package/src/lib/server-logs/adapters/grafana.js +0 -0
- package/src/lib/server-logs/index.js +75 -0
- package/src/lib/socket-server.js +55 -0
- package/src/lib/storageAdapter.js +109 -0
- package/src/lib/test-outbound/TestCaseRunner.js +173 -0
- package/src/lib/test-outbound/getTracing.js +19 -0
- package/src/lib/test-outbound/outbound-initiator.js +1107 -0
- package/src/lib/uniqueIdGenerator.js +35 -0
- package/src/lib/utils.js +89 -0
- package/src/lib/utilsInternal.js +56 -0
- package/src/lib/webSocketClient/WebSocketClientManager.js +197 -0
- package/src/server.js +218 -0
|
@@ -0,0 +1,1202 @@
|
|
|
1
|
+
|
|
2
|
+
{{!-- {{#each items}}
|
|
3
|
+
<tr class="item">
|
|
4
|
+
<td>
|
|
5
|
+
{{name}}
|
|
6
|
+
</td>
|
|
7
|
+
<td>
|
|
8
|
+
$ {{price}}
|
|
9
|
+
</td>
|
|
10
|
+
</tr>
|
|
11
|
+
{{/each}}
|
|
12
|
+
<tr class="total ">
|
|
13
|
+
<td></td>
|
|
14
|
+
<td>
|
|
15
|
+
Total: ${{total items}}
|
|
16
|
+
</td>
|
|
17
|
+
</tr> --}}
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
<!DOCTYPE html>
|
|
23
|
+
<html lang="en">
|
|
24
|
+
<head>
|
|
25
|
+
<meta charset="UTF-8">
|
|
26
|
+
<title>Testing Toolkit Assertions Report</title>
|
|
27
|
+
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/css/bootstrap.min.css">
|
|
28
|
+
<link rel="stylesheet prefetch" href='https://use.fontawesome.com/releases/v5.0.10/css/all.css'>
|
|
29
|
+
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/9.13.1/styles/github-gist.min.css">
|
|
30
|
+
<link rel="stylesheet" href="https://cdn.datatables.net/v/bs4/dt-1.10.18/datatables.min.css"/>
|
|
31
|
+
|
|
32
|
+
<style>
|
|
33
|
+
.theme-dark {
|
|
34
|
+
--background-color: #222;
|
|
35
|
+
--bg-card-deck: #444444;
|
|
36
|
+
--text-color: #ccd2d8;
|
|
37
|
+
--tab-border: solid 1px #444;
|
|
38
|
+
--success: #3c9372;
|
|
39
|
+
--failure: #c24a3f;
|
|
40
|
+
--warning: #d28c23;
|
|
41
|
+
--info: #4083b6;
|
|
42
|
+
--badge-outline: #3c9372;
|
|
43
|
+
--badge-bg: #cdd3db;
|
|
44
|
+
--badge-text: #ccd2d9;
|
|
45
|
+
--failure-row: #c24a3f;
|
|
46
|
+
--warning-row: #d28c23;
|
|
47
|
+
--card-bg: #444;
|
|
48
|
+
--card-footer: #4f5758;
|
|
49
|
+
--form-input: #ececb5;
|
|
50
|
+
--hov-text: #d2dae5;
|
|
51
|
+
--h4-text: #ccd1d9;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
.theme-light {
|
|
55
|
+
--tab-border: solid 1px #fff;
|
|
56
|
+
--text-color: #000000;
|
|
57
|
+
--success: #42a745;
|
|
58
|
+
--failure: #dc3544;
|
|
59
|
+
--warning: #f4c10b;
|
|
60
|
+
--info: #49a1b8;
|
|
61
|
+
--badge-outline: #040411;
|
|
62
|
+
--badge-bg: #f8f9fa;
|
|
63
|
+
--badge-text: #fff;
|
|
64
|
+
--failure-row: #f5c6cb;
|
|
65
|
+
--warning-row: #ffeeba;
|
|
66
|
+
--card-bg: #f7f7f7;
|
|
67
|
+
--hov-text: #fff;
|
|
68
|
+
--h4-text: #ffffff;
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
body {
|
|
72
|
+
padding-top:30px;
|
|
73
|
+
background-color: var(--background-color);
|
|
74
|
+
color: var(--text-color);
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
#execution-data {
|
|
78
|
+
padding: 10px;
|
|
79
|
+
border: var(--tab-border);
|
|
80
|
+
border-top: none;
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
.nav-tabs {
|
|
84
|
+
padding-top: 10px;
|
|
85
|
+
height: 105px;
|
|
86
|
+
overflow-y: auto;
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
.card-header {
|
|
90
|
+
background-color: var(--card-bg)!important;
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
.card-body {
|
|
94
|
+
background-color: var(--card-bg)!important;
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
.card-footer {
|
|
98
|
+
padding: .75rem 1.25rem;
|
|
99
|
+
background-color: var(--card-footer);
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
.card-deck {
|
|
103
|
+
background-color: var(--bg-card-deck)!important;
|
|
104
|
+
}
|
|
105
|
+
.form-control {
|
|
106
|
+
background: var(--form-input);
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
.custom-tab {
|
|
110
|
+
padding: 10px 15px;
|
|
111
|
+
margin-right: 0px;
|
|
112
|
+
height: 46px;
|
|
113
|
+
width: 59px;
|
|
114
|
+
text-align: center;
|
|
115
|
+
border: var(--tab-border);
|
|
116
|
+
border-bottom: none;
|
|
117
|
+
cursor:pointer;
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
body.theme-dark .text-white {
|
|
121
|
+
color: #ccd2d9!important;
|
|
122
|
+
}
|
|
123
|
+
h4 {
|
|
124
|
+
color: var(--h4-text);
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
body.theme-dark h1 {
|
|
128
|
+
color: #ccd2da;
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
body.theme-dark .bg-light>td {
|
|
132
|
+
background: #4f5858!important;
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
body.theme-dark .hljs {
|
|
136
|
+
background: #0f0f0f82!important;
|
|
137
|
+
color: #8d8787!important;
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
.bg-info {
|
|
141
|
+
background-color: var(--info)!important;
|
|
142
|
+
}
|
|
143
|
+
.bg-success {
|
|
144
|
+
background-color: var(--success)!important;
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
.alert-success {
|
|
148
|
+
background-color: var(--success)!important;
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
.alert-warning {
|
|
152
|
+
background-color: var(--warning)!important;
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
.alert-info {
|
|
156
|
+
background-color: var(--info)!important;
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
.bg-warning {
|
|
160
|
+
background-color: var(--warning)!important;
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
.badge-warning {
|
|
164
|
+
color: var(--badge-text)!important;
|
|
165
|
+
background-color: var(--warning)!important;
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
.table-warning>td {
|
|
169
|
+
background-color: var(--warning-row);
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
.alert-danger {
|
|
173
|
+
background-color: var(--failure)!important;
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
body.theme-dark .alert-dark {
|
|
177
|
+
background-color: #636467!important;
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
body.theme-dark .text-dark {
|
|
181
|
+
color: #d1dae4!important;
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
.badge-light {
|
|
185
|
+
color: #212529;
|
|
186
|
+
background-color: var(--badge-bg);
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
.bg-danger {
|
|
190
|
+
background-color: var(--failure)!important;
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
.table-danger>td {
|
|
194
|
+
background-color: var(--failure-row);
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
body.theme-dark .table .thead-light th {
|
|
198
|
+
background-color: #4f5858!important;
|
|
199
|
+
border-color: #dee2e6!important;
|
|
200
|
+
color: #ccd2d8!important;
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
.itPassed {
|
|
204
|
+
background: var(--success);
|
|
205
|
+
color: white;
|
|
206
|
+
}
|
|
207
|
+
.itFailed {
|
|
208
|
+
background: var(--failure);
|
|
209
|
+
color: white;
|
|
210
|
+
}
|
|
211
|
+
|
|
212
|
+
.resultsInfoPass {
|
|
213
|
+
color: var(--success);
|
|
214
|
+
padding-top: 4px;
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
.resultsInfoFail {
|
|
218
|
+
color: var(--failure);
|
|
219
|
+
padding-top: 4px;
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
.badge-outline-success {
|
|
223
|
+
color: var(--success);
|
|
224
|
+
border: 1px solid var(--success);
|
|
225
|
+
background-color: transparent;
|
|
226
|
+
}
|
|
227
|
+
|
|
228
|
+
.badge-outline {
|
|
229
|
+
color: var(--badge-outline);
|
|
230
|
+
border: 1px solid var(--badge-outline);
|
|
231
|
+
background-color: transparent;
|
|
232
|
+
}
|
|
233
|
+
|
|
234
|
+
.btn-outline-success {
|
|
235
|
+
color: var(--success)!important;
|
|
236
|
+
border-color: var(--success)!important;
|
|
237
|
+
}
|
|
238
|
+
|
|
239
|
+
.backToTop:hover {
|
|
240
|
+
background-color: var(--success);
|
|
241
|
+
border-color: var(--success);
|
|
242
|
+
color: var(--hov-text)!important;
|
|
243
|
+
}
|
|
244
|
+
|
|
245
|
+
.btn-outline-success:hover {
|
|
246
|
+
background-color: var(--success);
|
|
247
|
+
border-color: var(--success);
|
|
248
|
+
color: var(--hov-text)!important;
|
|
249
|
+
}
|
|
250
|
+
|
|
251
|
+
.btn-outline-secondary {
|
|
252
|
+
background-color: var(--success)!important;
|
|
253
|
+
color: var(--hov-text)!important;
|
|
254
|
+
}
|
|
255
|
+
|
|
256
|
+
body, html {
|
|
257
|
+
height:100%;
|
|
258
|
+
}
|
|
259
|
+
|
|
260
|
+
.hidden {
|
|
261
|
+
display:none;
|
|
262
|
+
}
|
|
263
|
+
|
|
264
|
+
.card {
|
|
265
|
+
overflow:hidden;
|
|
266
|
+
}
|
|
267
|
+
|
|
268
|
+
.card-body .rotate {
|
|
269
|
+
z-index: 8;
|
|
270
|
+
float: right;
|
|
271
|
+
height: 100%;
|
|
272
|
+
}
|
|
273
|
+
|
|
274
|
+
.card-body .rotate i {
|
|
275
|
+
color: rgba(20, 20, 20, 0.15);
|
|
276
|
+
position: absolute;
|
|
277
|
+
left: 0;
|
|
278
|
+
left: auto;
|
|
279
|
+
right: -10px;
|
|
280
|
+
bottom: 0;
|
|
281
|
+
display: block;
|
|
282
|
+
-webkit-transform: rotate(-44deg);
|
|
283
|
+
-moz-transform: rotate(-44deg);
|
|
284
|
+
-o-transform: rotate(-44deg);
|
|
285
|
+
-ms-transform: rotate(-44deg);
|
|
286
|
+
transform: rotate(-44deg);
|
|
287
|
+
}
|
|
288
|
+
.dyn-height {
|
|
289
|
+
max-height:350px;
|
|
290
|
+
overflow-y:auto;
|
|
291
|
+
}
|
|
292
|
+
|
|
293
|
+
.nav-pills .nav-link.active {
|
|
294
|
+
background-color: transparent!important;
|
|
295
|
+
}
|
|
296
|
+
|
|
297
|
+
.backToTop {
|
|
298
|
+
display: none;
|
|
299
|
+
position: fixed;
|
|
300
|
+
bottom: 20px;
|
|
301
|
+
right: 30px;
|
|
302
|
+
z-index: 99;
|
|
303
|
+
font-size: 18px;
|
|
304
|
+
outline: none;
|
|
305
|
+
cursor: pointer;
|
|
306
|
+
padding: 15px;
|
|
307
|
+
border-radius: 4px;
|
|
308
|
+
}
|
|
309
|
+
|
|
310
|
+
.card-header .fa {
|
|
311
|
+
transition: .3s transform ease-in-out;
|
|
312
|
+
}
|
|
313
|
+
.card-header .collapsed .fa {
|
|
314
|
+
transform: rotate(90deg);
|
|
315
|
+
}
|
|
316
|
+
|
|
317
|
+
.single-line-tabs {
|
|
318
|
+
padding-top: 10px;
|
|
319
|
+
height: 60px;
|
|
320
|
+
}
|
|
321
|
+
|
|
322
|
+
::-webkit-scrollbar {
|
|
323
|
+
width: 5px;
|
|
324
|
+
}
|
|
325
|
+
|
|
326
|
+
::-webkit-scrollbar-track {
|
|
327
|
+
background: #f1f1f1;
|
|
328
|
+
}
|
|
329
|
+
|
|
330
|
+
::-webkit-scrollbar-thumb {
|
|
331
|
+
background: #888;
|
|
332
|
+
}
|
|
333
|
+
|
|
334
|
+
::-webkit-scrollbar-thumb:hover {
|
|
335
|
+
background: #555;
|
|
336
|
+
}
|
|
337
|
+
|
|
338
|
+
/* The switch - the box around the slider */
|
|
339
|
+
.switch {
|
|
340
|
+
position: relative;
|
|
341
|
+
display: inline-block;
|
|
342
|
+
width: 44px;
|
|
343
|
+
height: 20px;
|
|
344
|
+
}
|
|
345
|
+
|
|
346
|
+
/* Hide default HTML checkbox */
|
|
347
|
+
.switch input {
|
|
348
|
+
opacity: 0;
|
|
349
|
+
width: 0;
|
|
350
|
+
height: 0;
|
|
351
|
+
}
|
|
352
|
+
|
|
353
|
+
/* The slider */
|
|
354
|
+
.slider {
|
|
355
|
+
position: absolute;
|
|
356
|
+
cursor: pointer;
|
|
357
|
+
top: 0;
|
|
358
|
+
left: 0;
|
|
359
|
+
right: 0;
|
|
360
|
+
bottom: 0;
|
|
361
|
+
background-color: #ccc;
|
|
362
|
+
-webkit-transition: 0.4s;
|
|
363
|
+
transition: 0.4s;
|
|
364
|
+
}
|
|
365
|
+
|
|
366
|
+
.slider:before {
|
|
367
|
+
position: absolute;
|
|
368
|
+
content: "";
|
|
369
|
+
height: 20px;
|
|
370
|
+
width: 20px;
|
|
371
|
+
left: 0px;
|
|
372
|
+
bottom: 4px;
|
|
373
|
+
top: 0;
|
|
374
|
+
bottom: 0;
|
|
375
|
+
margin: auto 0;
|
|
376
|
+
-webkit-transition: 0.4s;
|
|
377
|
+
transition: 0.4s;
|
|
378
|
+
box-shadow: 0 0px 15px #2020203d;
|
|
379
|
+
background: white;
|
|
380
|
+
background-repeat: no-repeat;
|
|
381
|
+
background-position: center;
|
|
382
|
+
}
|
|
383
|
+
|
|
384
|
+
input:checked + .slider {
|
|
385
|
+
background-color: #4083b6;
|
|
386
|
+
}
|
|
387
|
+
|
|
388
|
+
input:focus + .slider {
|
|
389
|
+
box-shadow: 0 0 1px #4083b6;
|
|
390
|
+
}
|
|
391
|
+
|
|
392
|
+
input:checked + .slider:before {
|
|
393
|
+
-webkit-transform: translateX(24px);
|
|
394
|
+
-ms-transform: translateX(24px);
|
|
395
|
+
transform: translateX(24px);
|
|
396
|
+
background: white;
|
|
397
|
+
background-repeat: no-repeat;
|
|
398
|
+
background-position: center;
|
|
399
|
+
}
|
|
400
|
+
|
|
401
|
+
/* Rounded sliders */
|
|
402
|
+
.slider.round {
|
|
403
|
+
border-radius: 34px;
|
|
404
|
+
}
|
|
405
|
+
|
|
406
|
+
.slider.round:before {
|
|
407
|
+
border-radius: 50%;
|
|
408
|
+
}
|
|
409
|
+
|
|
410
|
+
</style>
|
|
411
|
+
</head>
|
|
412
|
+
<body class="">
|
|
413
|
+
<div class="container">
|
|
414
|
+
<div class="container">
|
|
415
|
+
<label for="slider">Light</label>
|
|
416
|
+
<label id="switch" class="switch">
|
|
417
|
+
<input type="checkbox" onchange="toggleTheme()" id="slider">
|
|
418
|
+
<span class="slider round"></span>
|
|
419
|
+
</label>
|
|
420
|
+
<label for="slider">Dark</label>
|
|
421
|
+
</div>
|
|
422
|
+
<div class="card">
|
|
423
|
+
<div class="card-header">
|
|
424
|
+
<ul class="nav nav-pills mb-3 nav-justified" id="pills-tab" role="tablist">
|
|
425
|
+
<li class="nav-item bg-info active" data-toggle="tooltip" title="Click to view the Summary">
|
|
426
|
+
<a class="nav-link text-white" id="pills-summary-tab" data-toggle="pill" href="#" data-target="#pills-summary" role="tab" aria-controls="pills-summary" aria-selected="true">Summary</a>
|
|
427
|
+
</li>
|
|
428
|
+
<li class="nav-item bg-success" data-toggle="tooltip" title="Click to view the Requests">
|
|
429
|
+
<a class="nav-link text-white" id="pills-requests-tab" data-toggle="pill" href="#" data-target="#pills-requests" role="tab" aria-controls="pills-requests" aria-selected="false">Details</a>
|
|
430
|
+
</li>
|
|
431
|
+
</ul>
|
|
432
|
+
<div class="tab-content" id="pills-tabContent">
|
|
433
|
+
<div class="tab-pane fade show active" id="pills-summary" role="tabcard" aria-labelledby="pills-summary-tab">
|
|
434
|
+
<div class="row">
|
|
435
|
+
<div class="col-md-9 col-lg-12 main">
|
|
436
|
+
<h1 class="display-4 text-center">Testing Toolkit Report</h1>
|
|
437
|
+
<h5 class="text-center">{{runtimeInformation.completedTime}}</h5>
|
|
438
|
+
<div class="row">
|
|
439
|
+
<div class="col-lg-4 col-md-6">
|
|
440
|
+
<div class="card text-white card-danger">
|
|
441
|
+
<div class="card-body bg-success">
|
|
442
|
+
<div class="rotate">
|
|
443
|
+
<i class="fa fa-list fa-4x"></i>
|
|
444
|
+
</div>
|
|
445
|
+
<h6 class="text-uppercase">Total Assertions</h6>
|
|
446
|
+
<h1 class="display-2">{{totalAssertions test_cases}}</h1>
|
|
447
|
+
</div>
|
|
448
|
+
</div>
|
|
449
|
+
</div>
|
|
450
|
+
<div class="col-lg-4 col-md-6">
|
|
451
|
+
<div class="card text-white card-warning">
|
|
452
|
+
<div class="card-body bg-success">
|
|
453
|
+
<div class="rotate">
|
|
454
|
+
<i class="fa fa-share fa-5x"></i>
|
|
455
|
+
</div>
|
|
456
|
+
<h6 class="text-uppercase">Total Passed Tests</h6>
|
|
457
|
+
<h1 class="display-2">{{totalPassedAssertions test_cases}}</h1>
|
|
458
|
+
</div>
|
|
459
|
+
</div>
|
|
460
|
+
</div>
|
|
461
|
+
<div class="col-lg-4 col-md-6">
|
|
462
|
+
<div class="card text-white card-info">
|
|
463
|
+
<div class="card-body bg-danger">
|
|
464
|
+
<div class="rotate">
|
|
465
|
+
<i class="fa fa-plus-circle fa-5x"></i>
|
|
466
|
+
</div>
|
|
467
|
+
<h6 class="text-uppercase">Total Failed Tests</h6>
|
|
468
|
+
<h1 class="display-2">{{totalFailedAssertions test_cases}}</h1>
|
|
469
|
+
</div>
|
|
470
|
+
</div>
|
|
471
|
+
</div>
|
|
472
|
+
</div>
|
|
473
|
+
<hr>
|
|
474
|
+
<div class="row">
|
|
475
|
+
<div class="col">
|
|
476
|
+
<div class="row">
|
|
477
|
+
<div class="col-sm-12 mb-3">
|
|
478
|
+
<div class="card border-info">
|
|
479
|
+
<div class="card-body">
|
|
480
|
+
<h5 class="card-title text-uppercase text-white text-center bg-info">Runtime Information</h5>
|
|
481
|
+
<span><i class="fas fa-file-code"></i></span><strong> Template Name:</strong> {{name}}<br>
|
|
482
|
+
{{#if runtimeInformation}}
|
|
483
|
+
<span><i class="fas fa-stopwatch"></i></span><strong> Total run duration:</strong> {{runtimeInformation.runDurationMs}} ms<br>
|
|
484
|
+
{{/if}}
|
|
485
|
+
{{#if extraRuntimeInformation}}
|
|
486
|
+
{{#each extraRuntimeInformation}}
|
|
487
|
+
<span><i class="fas fa-arrow-right"></i></span><strong> {{key}}:</strong> {{value}}<br>
|
|
488
|
+
{{/each}}
|
|
489
|
+
|
|
490
|
+
{{/if}}
|
|
491
|
+
</div>
|
|
492
|
+
</div>
|
|
493
|
+
</div>
|
|
494
|
+
</div>
|
|
495
|
+
<div class="row">
|
|
496
|
+
<div class="col-sm-12 mb-3">
|
|
497
|
+
<div class="table-responsive">
|
|
498
|
+
<table class="table table-striped table-bordered">
|
|
499
|
+
<thead class="thead-inverse">
|
|
500
|
+
<tr class="text-center">
|
|
501
|
+
<th class="text-uppercase">Summary Item</th>
|
|
502
|
+
<th class="text-uppercase">Total</th>
|
|
503
|
+
<th class="text-uppercase">Failed</th>
|
|
504
|
+
</tr>
|
|
505
|
+
</thead>
|
|
506
|
+
<tbody>
|
|
507
|
+
<tr>
|
|
508
|
+
<td>Test Cases</td>
|
|
509
|
+
<td class="text-center">{{totalTestCases test_cases}}</td>
|
|
510
|
+
<td class="text-center">{{failedTestCases test_cases}}</td>
|
|
511
|
+
</tr>
|
|
512
|
+
<tr>
|
|
513
|
+
<td>Requests</td>
|
|
514
|
+
<td class="text-center">{{totalRequests test_cases}}</td>
|
|
515
|
+
<td class="text-center">{{failedRequests test_cases}}</td>
|
|
516
|
+
</tr>
|
|
517
|
+
<tr class="">
|
|
518
|
+
<td>Assertions</td>
|
|
519
|
+
<td class="text-center">{{totalAssertions test_cases}}</td>
|
|
520
|
+
<td class="text-center">{{totalFailedAssertions test_cases}}</td>
|
|
521
|
+
</tr>
|
|
522
|
+
</tbody>
|
|
523
|
+
</table>
|
|
524
|
+
</div>
|
|
525
|
+
</div>
|
|
526
|
+
</div>
|
|
527
|
+
<hr>
|
|
528
|
+
</div>
|
|
529
|
+
</div>
|
|
530
|
+
</div>
|
|
531
|
+
</div>
|
|
532
|
+
</div>
|
|
533
|
+
<div class="tab-pane fade" id="pills-logs" role="tabcard" aria-labelledby="pills-logs-tab">
|
|
534
|
+
<button id="topOfLogsScreen" class="btn btn-outline-success btn-sm backToTop" onclick="topFunction()">Go To Top</button>
|
|
535
|
+
</div>
|
|
536
|
+
<div class="tab-pane fade" id="pills-requests" role="tabcard" aria-labelledby="pills-requests-tab">
|
|
537
|
+
|
|
538
|
+
<button id="topOfRequestsScreen" class="btn btn-outline-success btn-sm backToTop" onclick="topFunction()">Go To Top</button>
|
|
539
|
+
|
|
540
|
+
<div class="btn-group float-right" role="group" aria-label="Button Group">
|
|
541
|
+
<button id="openAll" class="btn btn-outline-success btn-sm float-right">Expand Folders</button>
|
|
542
|
+
<button id="openAllRequests" class="btn btn-outline-success btn-sm float-right">Expand Requests</button>
|
|
543
|
+
<button id="closeAll" class="btn btn-outline-success btn-sm float-right">Collapse Folders</button>
|
|
544
|
+
<button id="closeAllRequests" class="btn btn-outline-success btn-sm float-right">Collapse Requests</button>
|
|
545
|
+
<button id="showAll" class="btn btn-outline-success btn-sm float-right">Show All</button>
|
|
546
|
+
<button id="showOnlyFailed" class="btn btn-outline-success btn-sm float-right">Show Only Failed</button>
|
|
547
|
+
</div>
|
|
548
|
+
|
|
549
|
+
<div class="text-uppercase" id="execution-menu">
|
|
550
|
+
<nav class="table-responsive">
|
|
551
|
+
<ul class="nav single-line-tabs d-none" id="iterationList">
|
|
552
|
+
</ul>
|
|
553
|
+
</nav>
|
|
554
|
+
</div>
|
|
555
|
+
<h6 class="text-uppercase text-muted" id="iterationSelected" style="padding-top: 10px;"></h6>
|
|
556
|
+
{{#each test_cases}}
|
|
557
|
+
<div class="tab-content" id="execution-data">
|
|
558
|
+
|
|
559
|
+
<div class="alert alert-dark text-uppercase text-center iteration-0">
|
|
560
|
+
<a data-toggle="collapse" href="#" data-target="#folder-collapse-{{id}}" aria-expanded="false" aria-controls="collapse" id="folder-{{id}}" class="collapsed text-dark z-block">
|
|
561
|
+
{{#if (ifFailedTestCase this)}}
|
|
562
|
+
<i class="fas fa-info-circle float-left resultsInfoFail" ></i>
|
|
563
|
+
{{/if}}
|
|
564
|
+
{{name}} <i class="float-lg-right fa fa-chevron-down" style="padding-top: 4px;"></i>
|
|
565
|
+
</a>
|
|
566
|
+
</div>
|
|
567
|
+
<div id="folder-collapse-{{id}}" class="collapse" aria-labelledby="folder-{{id}}">
|
|
568
|
+
<div class="card border-info" style="width: 100%;">
|
|
569
|
+
<div class="card-body">
|
|
570
|
+
<span><i class="fas fa-stopwatch"></i></span><strong> Testcase Duration:</strong> <span class="badge-outline badge badge-success"> {{testResult.runDurationMs}} ms</span><br>
|
|
571
|
+
</div>
|
|
572
|
+
</div>
|
|
573
|
+
<br>
|
|
574
|
+
{{#each requests}}
|
|
575
|
+
<div id="folder-{{../id}}-{{request.id}}" class="card-deck iteration-0">
|
|
576
|
+
<div class="row iteration-0">
|
|
577
|
+
<div class="col-sm-12 mb-3 iteration-0">
|
|
578
|
+
<div class="card iteration-0">
|
|
579
|
+
{{#if (ifSkippedRequest status)}}
|
|
580
|
+
<div class="card-header bg-warning iteration-0">
|
|
581
|
+
{{else}}
|
|
582
|
+
{{#if (ifAllTestsPassedInRequest request)}}
|
|
583
|
+
<div class="card-header bg-success iteration-0">
|
|
584
|
+
{{else}}
|
|
585
|
+
<div class="card-header bg-danger iteration-0">
|
|
586
|
+
{{/if}}
|
|
587
|
+
{{/if}}
|
|
588
|
+
<a data-toggle="collapse" href="#" data-target="#collapse-{{../id}}-{{request.id}}" aria-expanded="false" aria-controls="collapse" id="requests-{{../id}}-{{request.id}}" class="collapsed text-white z-block">
|
|
589
|
+
{{request.description}} <i class="float-lg-right fa fa-chevron-down"></i>
|
|
590
|
+
</a>
|
|
591
|
+
</div>
|
|
592
|
+
<div id="collapse-{{../id}}-{{request.id}}" class="collapse" aria-labelledby="requests-{{../id}}-{{request.id}}">
|
|
593
|
+
<div class="card-body">
|
|
594
|
+
<div class="row">
|
|
595
|
+
<div class="col-sm-12 mb-3">
|
|
596
|
+
<div class="card-deck">
|
|
597
|
+
<div class="card border-info" style="width: 50rem;">
|
|
598
|
+
<div class="card-body">
|
|
599
|
+
<h5 class="card-title text-uppercase text-white text-center bg-info">Request Information</h5>
|
|
600
|
+
{{#if (ifSkippedRequest status)}}
|
|
601
|
+
<div class="progress" style="height: 40px;">
|
|
602
|
+
<div class="progress-bar bg-warning" style="width: 100%" role="progressbar">
|
|
603
|
+
<h5><strong>SKIPPED</strong></h5>
|
|
604
|
+
</div>
|
|
605
|
+
</div>
|
|
606
|
+
{{/if}}
|
|
607
|
+
<span><i class="fas fa-info-circle"></i></span><strong> Request Method:</strong> <span class="badge-outline-success badge badge-success"> {{request.method}}</span><br>
|
|
608
|
+
<span><i class="fas fa-info-circle"></i></span><strong> Request URL:</strong> {{request.path}} <br>
|
|
609
|
+
<span><i class="fas fa-info-circle"></i></span><strong> trace-id:</strong> <a href="{{traceUrl}}" target="grafana"><span id="copyText-trace-id-{{../id}}-{{request.id}}">{{traceId}}</span></a>
|
|
610
|
+
<button class="btn btn-outline-secondary btn-sm copyButton" type="button" data-clipboard-action="copy" data-clipboard-target="#copyText-trace-id-{{../id}}-{{request.id}}">Copy to Clipboard</button>
|
|
611
|
+
<br>
|
|
612
|
+
</div>
|
|
613
|
+
</div>
|
|
614
|
+
<div class="card border-info" style="width: 50rem;">
|
|
615
|
+
<div class="card-body">
|
|
616
|
+
<h5 class="card-title text-uppercase text-white text-center bg-info">Response Information</h5>
|
|
617
|
+
<span><i class="fas fa-info-circle"></i></span><strong> Response Code:</strong> <span class="float-right badge-outline badge badge-success"> {{response.status}} - {{response.statusText}} </span><br>
|
|
618
|
+
<span><i class="fas fa-stopwatch"></i></span><strong> Request Duration:</strong> <span class="float-right badge-outline badge badge-success"> {{testResult.runDurationMs}} ms</span><br>
|
|
619
|
+
<hr>
|
|
620
|
+
<h5 class="card-title text-uppercase text-white text-center bg-info">Test Pass Percentage</h5>
|
|
621
|
+
<div>
|
|
622
|
+
<div class="progress" style="height: 40px;">
|
|
623
|
+
{{#if (ifSkippedRequest status)}}
|
|
624
|
+
<div class="progress-bar bg-warning" style="width: 100%" role="progressbar">
|
|
625
|
+
{{else}}
|
|
626
|
+
{{#if (ifAllTestsPassedInRequest request)}}
|
|
627
|
+
<div class="progress-bar bg-success" style="width: 100%" role="progressbar">
|
|
628
|
+
{{else}}
|
|
629
|
+
<div class="progress-bar bg-danger" style="width: 100%" role="progressbar">
|
|
630
|
+
{{/if}}
|
|
631
|
+
{{/if}}
|
|
632
|
+
<h5><strong>{{testPassPercentage request.tests}} %</strong></h5>
|
|
633
|
+
</div>
|
|
634
|
+
</div>
|
|
635
|
+
</div>
|
|
636
|
+
</div>
|
|
637
|
+
</div>
|
|
638
|
+
</div>
|
|
639
|
+
</div>
|
|
640
|
+
</div>
|
|
641
|
+
{{#if request.headers}}
|
|
642
|
+
<div class="row">
|
|
643
|
+
<div class="col-sm-12 mb-3">
|
|
644
|
+
<div class="card-deck">
|
|
645
|
+
<div class="card border-info" style="width: 50rem;">
|
|
646
|
+
<div class="card-body">
|
|
647
|
+
<h5 class="card-title text-uppercase text-white text-center bg-info">Request Headers</h5>
|
|
648
|
+
<div class="table-responsive">
|
|
649
|
+
<table class="table table-bordered">
|
|
650
|
+
<thead class="thead-light text-center"><tr><th>Header Name</th><th>Header Value</th></tr></thead>
|
|
651
|
+
<tbody>
|
|
652
|
+
{{#each request.headers}}
|
|
653
|
+
<tr>
|
|
654
|
+
<td class="text-nowrap">{{@key}}</td>
|
|
655
|
+
<td>{{this}}</td>
|
|
656
|
+
</tr>
|
|
657
|
+
{{/each}}
|
|
658
|
+
</tbody>
|
|
659
|
+
</table>
|
|
660
|
+
</div>
|
|
661
|
+
</div>
|
|
662
|
+
</div>
|
|
663
|
+
</div>
|
|
664
|
+
</div>
|
|
665
|
+
</div>
|
|
666
|
+
{{/if}}
|
|
667
|
+
{{#if request.body}}
|
|
668
|
+
<div class="row">
|
|
669
|
+
<div class="col-sm-12 mb-3">
|
|
670
|
+
<div class="card-deck">
|
|
671
|
+
<div class="card border-info" style="width: 50rem;">
|
|
672
|
+
<div class="card-body">
|
|
673
|
+
<h5 class="card-title text-uppercase text-white text-center bg-info">Request Body</h5>
|
|
674
|
+
<div class="dyn-height">
|
|
675
|
+
<pre><code id="copyText-requestBody-{{../id}}-{{request.id}}" class="prettyPrint">{{jsonStringify request.body}}</code></pre>
|
|
676
|
+
</div>
|
|
677
|
+
<div class="card-footer">
|
|
678
|
+
<button class="btn btn-outline-secondary btn-sm copyButton" type="button" data-clipboard-action="copy" data-clipboard-target="#copyText-requestBody-{{../id}}-{{request.id}}">Copy to Clipboard</button>
|
|
679
|
+
</div>
|
|
680
|
+
</div>
|
|
681
|
+
</div>
|
|
682
|
+
</div>
|
|
683
|
+
</div>
|
|
684
|
+
</div>
|
|
685
|
+
{{/if}}
|
|
686
|
+
{{#if transformedRequest.headers}}
|
|
687
|
+
<div class="row">
|
|
688
|
+
<div class="col-sm-12 mb-3">
|
|
689
|
+
<div class="card-deck">
|
|
690
|
+
<div class="card border-info" style="width: 50rem;">
|
|
691
|
+
<div class="card-body">
|
|
692
|
+
<h5 class="card-title text-uppercase text-white text-center bg-info">Transformed Request Headers</h5>
|
|
693
|
+
<div class="table-responsive">
|
|
694
|
+
<table class="table table-bordered">
|
|
695
|
+
<thead class="thead-light text-center"><tr><th>Header Name</th><th>Header Value</th></tr></thead>
|
|
696
|
+
<tbody>
|
|
697
|
+
{{#each transformedRequest.headers}}
|
|
698
|
+
<tr>
|
|
699
|
+
<td class="text-nowrap">{{@key}}</td>
|
|
700
|
+
<td>{{this}}</td>
|
|
701
|
+
</tr>
|
|
702
|
+
{{/each}}
|
|
703
|
+
</tbody>
|
|
704
|
+
</table>
|
|
705
|
+
</div>
|
|
706
|
+
</div>
|
|
707
|
+
</div>
|
|
708
|
+
</div>
|
|
709
|
+
</div>
|
|
710
|
+
</div>
|
|
711
|
+
{{/if}}
|
|
712
|
+
{{#if transformedRequest.body}}
|
|
713
|
+
<div class="row">
|
|
714
|
+
<div class="col-sm-12 mb-3">
|
|
715
|
+
<div class="card-deck">
|
|
716
|
+
<div class="card border-info" style="width: 50rem;">
|
|
717
|
+
<div class="card-body">
|
|
718
|
+
<h5 class="card-title text-uppercase text-white text-center bg-info">Transformed Request Body</h5>
|
|
719
|
+
<div class="dyn-height">
|
|
720
|
+
<pre><code id="copyText-transformedRequestBody-{{../id}}-{{request.id}}" class="prettyPrint">{{jsonStringify transformedRequest.body}}</code></pre>
|
|
721
|
+
</div>
|
|
722
|
+
<div class="card-footer">
|
|
723
|
+
<button class="btn btn-outline-secondary btn-sm copyButton" type="button" data-clipboard-action="copy" data-clipboard-target="#copyText-transformedRequestBody-{{../id}}-{{request.id}}">Copy to Clipboard</button>
|
|
724
|
+
</div>
|
|
725
|
+
</div>
|
|
726
|
+
</div>
|
|
727
|
+
</div>
|
|
728
|
+
</div>
|
|
729
|
+
</div>
|
|
730
|
+
{{/if}}
|
|
731
|
+
{{#if additionalInfo.curlRequest}}
|
|
732
|
+
<div class="row">
|
|
733
|
+
<div class="col-sm-12 mb-3">
|
|
734
|
+
<div class="card-deck">
|
|
735
|
+
<div class="card border-info" style="width: 50rem;">
|
|
736
|
+
<div class="card-body">
|
|
737
|
+
<h5 class="card-title text-uppercase text-white text-center bg-info">CURL command</h5>
|
|
738
|
+
<div class="dyn-height">
|
|
739
|
+
<pre><code id="copyText-curlCommand-{{../id}}-{{request.id}}" class="prettyPrint">{{additionalInfo.curlRequest}}</code></pre>
|
|
740
|
+
</div>
|
|
741
|
+
<div class="card-footer">
|
|
742
|
+
<button class="btn btn-outline-secondary btn-sm copyButton" type="button" data-clipboard-action="copy" data-clipboard-target="#copyText-curlCommand-{{../id}}-{{request.id}}">Copy to Clipboard</button>
|
|
743
|
+
</div>
|
|
744
|
+
</div>
|
|
745
|
+
</div>
|
|
746
|
+
</div>
|
|
747
|
+
</div>
|
|
748
|
+
</div>
|
|
749
|
+
{{/if}}
|
|
750
|
+
{{#if response.headers}}
|
|
751
|
+
<div class="row">
|
|
752
|
+
<div class="col-sm-12 mb-3">
|
|
753
|
+
<div class="card-deck">
|
|
754
|
+
<div class="card border-info" style="width: 50rem;">
|
|
755
|
+
<div class="card-body">
|
|
756
|
+
<h5 class="card-title text-uppercase text-white text-center bg-info">Response Headers</h5>
|
|
757
|
+
<div class="dyn-height">
|
|
758
|
+
<pre><code id="copyText-responseHeaders-{{../id}}-{{request.id}}" class="prettyPrint">{{jsonStringify response.headers}}</code></pre>
|
|
759
|
+
</div>
|
|
760
|
+
<div class="card-footer">
|
|
761
|
+
<button class="btn btn-outline-secondary btn-sm copyButton" type="button" data-clipboard-action="copy" data-clipboard-target="#copyText-responseHeaders-{{../id}}-{{request.id}}">Copy to Clipboard</button>
|
|
762
|
+
</div>
|
|
763
|
+
</div>
|
|
764
|
+
</div>
|
|
765
|
+
</div>
|
|
766
|
+
</div>
|
|
767
|
+
</div>
|
|
768
|
+
{{/if}}
|
|
769
|
+
{{#if response.body}}
|
|
770
|
+
<div class="row">
|
|
771
|
+
<div class="col-sm-12 mb-3">
|
|
772
|
+
<div class="card-deck">
|
|
773
|
+
<div class="card border-info" style="width: 50rem;">
|
|
774
|
+
<div class="card-body">
|
|
775
|
+
<h5 class="card-title text-uppercase text-white text-center bg-info">Response Body</h5>
|
|
776
|
+
<div class="dyn-height">
|
|
777
|
+
<pre><code id="copyText-responseBody-{{../id}}-{{request.id}}" class="prettyPrint">{{jsonStringify response.body}}</code></pre>
|
|
778
|
+
</div>
|
|
779
|
+
<div class="card-footer">
|
|
780
|
+
<button class="btn btn-outline-secondary btn-sm copyButton" type="button" data-clipboard-action="copy" data-clipboard-target="#copyText-responseBody-{{../id}}-{{request.id}}">Copy to Clipboard</button>
|
|
781
|
+
</div>
|
|
782
|
+
</div>
|
|
783
|
+
</div>
|
|
784
|
+
</div>
|
|
785
|
+
</div>
|
|
786
|
+
</div>
|
|
787
|
+
{{/if}}
|
|
788
|
+
{{#if callback.headers}}
|
|
789
|
+
<div class="row">
|
|
790
|
+
<div class="col-sm-12 mb-3">
|
|
791
|
+
<div class="card-deck">
|
|
792
|
+
<div class="card border-info" style="width: 50rem;">
|
|
793
|
+
<div class="card-body">
|
|
794
|
+
<h5 class="card-title text-uppercase text-white text-center bg-info">Callback Headers</h5>
|
|
795
|
+
<div class="table-responsive">
|
|
796
|
+
<table class="table table-bordered">
|
|
797
|
+
<thead class="thead-light text-center"><tr><th>Header Name</th><th>Header Value</th></tr></thead>
|
|
798
|
+
<tbody>
|
|
799
|
+
{{#each callback.headers}}
|
|
800
|
+
<tr>
|
|
801
|
+
<td class="text-nowrap">{{@key}}</td>
|
|
802
|
+
<td>{{this}}</td>
|
|
803
|
+
</tr>
|
|
804
|
+
{{/each}}
|
|
805
|
+
</tbody>
|
|
806
|
+
</table>
|
|
807
|
+
</div>
|
|
808
|
+
</div>
|
|
809
|
+
</div>
|
|
810
|
+
</div>
|
|
811
|
+
</div>
|
|
812
|
+
</div>
|
|
813
|
+
{{/if}}
|
|
814
|
+
{{#if callback.body}}
|
|
815
|
+
<div class="row">
|
|
816
|
+
<div class="col-sm-12 mb-3">
|
|
817
|
+
<div class="card-deck">
|
|
818
|
+
<div class="card border-info" style="width: 50rem;">
|
|
819
|
+
<div class="card-body">
|
|
820
|
+
<h5 class="card-title text-uppercase text-white text-center bg-info">Callback Body</h5>
|
|
821
|
+
<div class="dyn-height">
|
|
822
|
+
<pre><code id="copyText-callbackBody-{{../id}}-{{request.id}}" class="prettyPrint">{{jsonStringify callback.body}}</code></pre>
|
|
823
|
+
</div>
|
|
824
|
+
<div class="card-footer">
|
|
825
|
+
<button class="btn btn-outline-secondary btn-sm copyButton" type="button" data-clipboard-action="copy" data-clipboard-target="#copyText-callbackBody-{{../id}}-{{request.id}}">Copy to Clipboard</button>
|
|
826
|
+
</div>
|
|
827
|
+
</div>
|
|
828
|
+
</div>
|
|
829
|
+
</div>
|
|
830
|
+
</div>
|
|
831
|
+
</div>
|
|
832
|
+
{{/if}}
|
|
833
|
+
|
|
834
|
+
<div class="row">
|
|
835
|
+
<div class="card border-info">
|
|
836
|
+
<div class="card-body">
|
|
837
|
+
<h5 class="card-title text-uppercase text-white text-center bg-info">Test Information</h5>
|
|
838
|
+
<div class="table-responsive text-nowrap">
|
|
839
|
+
<table id="myTable-0ec92bb5-8001-4566-bd7a-917f7a4df5a4" class="table table-hover">
|
|
840
|
+
<thead><tr class="text-center"><th>Name</th><th>Result</th></tr></thead>
|
|
841
|
+
<tbody>
|
|
842
|
+
{{#each request.tests.assertions}}
|
|
843
|
+
<tr>
|
|
844
|
+
<td>{{description}}</td>
|
|
845
|
+
{{#if (isAssertionSkipped resultStatus.status)}}
|
|
846
|
+
<td class="text-center bg-warning">
|
|
847
|
+
SKIPPED
|
|
848
|
+
</td>
|
|
849
|
+
{{else if (isAssertionPassed resultStatus.status)}}
|
|
850
|
+
<td class="text-center bg-success">
|
|
851
|
+
PASSED
|
|
852
|
+
</td>
|
|
853
|
+
{{else}}
|
|
854
|
+
<td class="text-center bg-danger">
|
|
855
|
+
FAILED
|
|
856
|
+
</td>
|
|
857
|
+
</tr><tr><td colspan="2" class="text-center bg-danger">({{resultStatus.message}})</td>
|
|
858
|
+
{{/if}}
|
|
859
|
+
</tr>
|
|
860
|
+
{{/each}}
|
|
861
|
+
</tbody>
|
|
862
|
+
<tfoot>
|
|
863
|
+
<tr class="bg-light">
|
|
864
|
+
<td><strong>Total</strong></td>
|
|
865
|
+
<td class="text-center"><strong>{{request.tests.passedAssertionsCount}} / {{request.tests.assertions.length}}</strong></td>
|
|
866
|
+
</tr>
|
|
867
|
+
</tfoot>
|
|
868
|
+
</table>
|
|
869
|
+
</div>
|
|
870
|
+
<div class="row d-none">
|
|
871
|
+
<div class="col-sm-12 mb-3">
|
|
872
|
+
<div class="card-deck">
|
|
873
|
+
<div class="card border-danger" style="width: 50rem;">
|
|
874
|
+
<div class="card-body">
|
|
875
|
+
<h5 class="card-title text-uppercase text-white text-center bg-danger">Test Failure</h5>
|
|
876
|
+
<div class="table-responsive">
|
|
877
|
+
<table class="table table-hover">
|
|
878
|
+
<thead><tr class="text-nowrap"><th>Test Name</th><th>Assertion Error</th></tr></thead>
|
|
879
|
+
<tbody>
|
|
880
|
+
</tbody>
|
|
881
|
+
</table>
|
|
882
|
+
</div>
|
|
883
|
+
</div>
|
|
884
|
+
</div>
|
|
885
|
+
</div>
|
|
886
|
+
</div>
|
|
887
|
+
</div>
|
|
888
|
+
</div>
|
|
889
|
+
</div>
|
|
890
|
+
</div>
|
|
891
|
+
</div>
|
|
892
|
+
</div>
|
|
893
|
+
</div>
|
|
894
|
+
</div>
|
|
895
|
+
</div>
|
|
896
|
+
</div>
|
|
897
|
+
{{/each}}
|
|
898
|
+
</div>
|
|
899
|
+
|
|
900
|
+
</div>
|
|
901
|
+
{{/each}}
|
|
902
|
+
</div>
|
|
903
|
+
</div>
|
|
904
|
+
</div>
|
|
905
|
+
</div>
|
|
906
|
+
</div>
|
|
907
|
+
</body>
|
|
908
|
+
</html>
|
|
909
|
+
|
|
910
|
+
|
|
911
|
+
<script src="https://code.jquery.com/jquery-3.4.1.min.js"></script>
|
|
912
|
+
<script src="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.2.1/js/bootstrap.bundle.min.js"></script>
|
|
913
|
+
<script src="https://cdn.datatables.net/v/bs4/dt-1.10.18/datatables.min.js"></script>
|
|
914
|
+
<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.0/clipboard.min.js"></script>
|
|
915
|
+
<script src="https://cdnjs.cloudflare.com/ajax/libs/remarkable/1.7.1/remarkable.min.js"></script>
|
|
916
|
+
<script src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/9.13.1/highlight.min.js"></script>
|
|
917
|
+
<script>hljs.initHighlightingOnLoad();</script>
|
|
918
|
+
|
|
919
|
+
<script>
|
|
920
|
+
$(document).ready(function() {
|
|
921
|
+
$('[data-toggle="tooltip"]').tooltip({
|
|
922
|
+
trigger : 'hover'
|
|
923
|
+
})
|
|
924
|
+
})
|
|
925
|
+
</script>
|
|
926
|
+
|
|
927
|
+
<script>
|
|
928
|
+
$('#openAll').on('click', function(e) {
|
|
929
|
+
{{#each test_cases}}
|
|
930
|
+
$('#folder-{{id}}').removeClass('collapsed')
|
|
931
|
+
$('#folder-collapse-{{id}}').addClass('show')
|
|
932
|
+
{{/each}}
|
|
933
|
+
})
|
|
934
|
+
</script>
|
|
935
|
+
|
|
936
|
+
<script>
|
|
937
|
+
$('#closeAll').on('click', function(e) {
|
|
938
|
+
{{#each test_cases}}
|
|
939
|
+
$('#folder-{{id}}').addClass('collapsed')
|
|
940
|
+
$('#folder-collapse-{{id}}').removeClass('show')
|
|
941
|
+
{{/each}}
|
|
942
|
+
})
|
|
943
|
+
</script>
|
|
944
|
+
|
|
945
|
+
<script>
|
|
946
|
+
$('#openAllRequests').on('click', function(e) {
|
|
947
|
+
{{#each test_cases}}
|
|
948
|
+
{{#each requests}}
|
|
949
|
+
$('#requests-{{../id}}-{{request.id}}').removeClass('collapsed')
|
|
950
|
+
$('#collapse-{{../id}}-{{request.id}}').removeClass('collapsed')
|
|
951
|
+
$('#requests-{{../id}}-{{request.id}}').addClass('show')
|
|
952
|
+
$('#collapse-{{../id}}-{{request.id}}').addClass('show')
|
|
953
|
+
{{/each}}
|
|
954
|
+
{{/each}}
|
|
955
|
+
})
|
|
956
|
+
</script>
|
|
957
|
+
|
|
958
|
+
<script>
|
|
959
|
+
$('#closeAllRequests').on('click', function(e) {
|
|
960
|
+
{{#each test_cases}}
|
|
961
|
+
{{#each requests}}
|
|
962
|
+
$('#requests-{{../id}}-{{request.id}}').removeClass('show')
|
|
963
|
+
$('#collapse-{{../id}}-{{request.id}}').removeClass('show')
|
|
964
|
+
$('#requests-{{../id}}-{{request.id}}').addClass('collapsed')
|
|
965
|
+
$('#collapse-{{../id}}-{{request.id}}').addClass('collapsed')
|
|
966
|
+
{{/each}}
|
|
967
|
+
{{/each}}
|
|
968
|
+
})
|
|
969
|
+
</script>
|
|
970
|
+
|
|
971
|
+
<script>
|
|
972
|
+
$('#showAll').on('click', function(e) {
|
|
973
|
+
{{#each test_cases}}
|
|
974
|
+
$('#folder-{{id}}').parent('.tab-content').removeClass('hidden')
|
|
975
|
+
$('#folder-collapse-{{id}}').parent('.tab-content').removeClass('hidden')
|
|
976
|
+
{{/each}}
|
|
977
|
+
})
|
|
978
|
+
</script>
|
|
979
|
+
|
|
980
|
+
<script>
|
|
981
|
+
$('#showOnlyFailed').on('click', function(e) {
|
|
982
|
+
{{#each test_cases}}
|
|
983
|
+
$('[aria-labelledby="folder-{{id}}"]').each(function() {
|
|
984
|
+
if ($(this).find('.resultsInfoFail').length === 0) {
|
|
985
|
+
$(this).closest('.tab-content').addClass('hidden');
|
|
986
|
+
}
|
|
987
|
+
});
|
|
988
|
+
{{/each}}
|
|
989
|
+
})
|
|
990
|
+
</script>
|
|
991
|
+
|
|
992
|
+
|
|
993
|
+
|
|
994
|
+
<script>
|
|
995
|
+
function isJSON(data)
|
|
996
|
+
{
|
|
997
|
+
var ret = true;
|
|
998
|
+
try {
|
|
999
|
+
JSON.parse(data);
|
|
1000
|
+
}catch(e) {
|
|
1001
|
+
ret = false;
|
|
1002
|
+
}
|
|
1003
|
+
return ret;
|
|
1004
|
+
}
|
|
1005
|
+
|
|
1006
|
+
function isXML(data)
|
|
1007
|
+
{
|
|
1008
|
+
return (data.length > 0 && data[0] === '<');
|
|
1009
|
+
}
|
|
1010
|
+
|
|
1011
|
+
// see https://gist.github.com/sente/1083506/d2834134cd070dbcc08bf42ee27dabb746a1c54d#gistcomment-2254622
|
|
1012
|
+
function formatXML(data) {
|
|
1013
|
+
const PADDING = ' '.repeat(2); // set desired indent size here
|
|
1014
|
+
const reg = /(>)(<)(\/*)/g;
|
|
1015
|
+
let pad = 0;
|
|
1016
|
+
xml = data.replace(reg, '$1\r\n$2$3');
|
|
1017
|
+
|
|
1018
|
+
return xml.split('\r\n').map((node, index) => {
|
|
1019
|
+
let indent = 0;
|
|
1020
|
+
if (node.match(/.+<\/\w[^>]*>$/)) {
|
|
1021
|
+
indent = 0;
|
|
1022
|
+
} else if (node.match(/^<\/\w/) && pad > 0) {
|
|
1023
|
+
pad -= 1;
|
|
1024
|
+
} else if (node.match(/^<\w[^>]*[^\/]>.*$/)) {
|
|
1025
|
+
indent = 1;
|
|
1026
|
+
} else {
|
|
1027
|
+
indent = 0;
|
|
1028
|
+
}
|
|
1029
|
+
|
|
1030
|
+
pad += indent;
|
|
1031
|
+
return PADDING.repeat(pad - indent) + node;
|
|
1032
|
+
}).join('\r\n');
|
|
1033
|
+
}
|
|
1034
|
+
|
|
1035
|
+
$(".prettyPrint").each(function () {
|
|
1036
|
+
var data = $(this).text();
|
|
1037
|
+
// Verify whether data is JSON
|
|
1038
|
+
if(isJSON(data))
|
|
1039
|
+
{
|
|
1040
|
+
obj = JSON.parse(data);
|
|
1041
|
+
data = JSON.stringify(obj, null, 2);
|
|
1042
|
+
}
|
|
1043
|
+
else if(isXML(data)) {
|
|
1044
|
+
data = formatXML(data);
|
|
1045
|
+
}
|
|
1046
|
+
$(this).text(data);
|
|
1047
|
+
});
|
|
1048
|
+
</script>
|
|
1049
|
+
|
|
1050
|
+
|
|
1051
|
+
<!-- Copy Response Body To Clipboard -->
|
|
1052
|
+
<script>
|
|
1053
|
+
var clipboard = new ClipboardJS('.copyButton');
|
|
1054
|
+
|
|
1055
|
+
clipboard.on('success', function(e) {
|
|
1056
|
+
e.clearSelection();
|
|
1057
|
+
$(".copyButton").addClass("bg-success text-white")
|
|
1058
|
+
e.trigger.textContent = '✔ Copied!';
|
|
1059
|
+
window.setTimeout(function() {
|
|
1060
|
+
$(".copyButton").removeClass("bg-success text-white")
|
|
1061
|
+
e.trigger.textContent = 'Copy to Clipboard';
|
|
1062
|
+
}, 2000);
|
|
1063
|
+
});
|
|
1064
|
+
clipboard.on('error', function(e) {
|
|
1065
|
+
e.clearSelection();
|
|
1066
|
+
$(".copyButton").addClass("bg-danger text-white")
|
|
1067
|
+
e.trigger.textContent = '✗ Not Copied';
|
|
1068
|
+
window.setTimeout(function() {
|
|
1069
|
+
$(".copyButton").removeClass("bg-danger text-white")
|
|
1070
|
+
e.trigger.textContent = 'Copy to Clipboard';
|
|
1071
|
+
}, 2000);
|
|
1072
|
+
});
|
|
1073
|
+
|
|
1074
|
+
</script>
|
|
1075
|
+
|
|
1076
|
+
<!-- Render the Description Markdown -->
|
|
1077
|
+
<script>
|
|
1078
|
+
const remarkable = new Remarkable();
|
|
1079
|
+
|
|
1080
|
+
const descriptions = document.querySelectorAll("#description");
|
|
1081
|
+
descriptions.forEach(description => {
|
|
1082
|
+
description.innerHTML = renderHtmlFromMarkdown(description.textContent);
|
|
1083
|
+
});
|
|
1084
|
+
function renderHtmlFromMarkdown(markdown) {
|
|
1085
|
+
return remarkable.render(trim(markdown));
|
|
1086
|
+
}
|
|
1087
|
+
function trim(string) {
|
|
1088
|
+
return string ? string.replace(/^ +| +$/gm, "") : string;
|
|
1089
|
+
}
|
|
1090
|
+
</script>
|
|
1091
|
+
|
|
1092
|
+
<script>
|
|
1093
|
+
window.onscroll = function() {scrollFunction()};
|
|
1094
|
+
|
|
1095
|
+
function updateDisplay(elementId, displayValue) {
|
|
1096
|
+
var element = document.getElementById(elementId);
|
|
1097
|
+
if (element && element.style) {
|
|
1098
|
+
element.style.display = displayValue;
|
|
1099
|
+
}
|
|
1100
|
+
}
|
|
1101
|
+
|
|
1102
|
+
function scrollFunction() {
|
|
1103
|
+
if (document.body.scrollTop > 20 || document.documentElement.scrollTop > 20) {
|
|
1104
|
+
updateDisplay("topOfRequestsScreen", "block");
|
|
1105
|
+
updateDisplay("topOfFailuresScreen", "block");
|
|
1106
|
+
updateDisplay("topOfSkippedScreen", "block");
|
|
1107
|
+
updateDisplay("topOfLogsScreen", "block");
|
|
1108
|
+
updateDisplay("openAll", "none");
|
|
1109
|
+
updateDisplay("closeAll", "none");
|
|
1110
|
+
updateDisplay("openAllRequests", "none");
|
|
1111
|
+
updateDisplay("closeAllRequests", "none");
|
|
1112
|
+
updateDisplay("showAll", "none");
|
|
1113
|
+
updateDisplay("showOnlyFailed", "none");
|
|
1114
|
+
} else {
|
|
1115
|
+
updateDisplay("topOfRequestsScreen", "none");
|
|
1116
|
+
updateDisplay("topOfFailuresScreen", "none");
|
|
1117
|
+
updateDisplay("topOfSkippedScreen", "none");
|
|
1118
|
+
updateDisplay("topOfLogsScreen", "none");
|
|
1119
|
+
updateDisplay("openAll", "block");
|
|
1120
|
+
updateDisplay("closeAll", "block");
|
|
1121
|
+
updateDisplay("openAllRequests", "block");
|
|
1122
|
+
updateDisplay("closeAllRequests", "block");
|
|
1123
|
+
updateDisplay("showAll", "block");
|
|
1124
|
+
updateDisplay("showOnlyFailed", "block");
|
|
1125
|
+
}
|
|
1126
|
+
}
|
|
1127
|
+
|
|
1128
|
+
function topFunction() {
|
|
1129
|
+
document.body.scrollTop = 0;
|
|
1130
|
+
document.documentElement.scrollTop = 0;
|
|
1131
|
+
}
|
|
1132
|
+
</script>
|
|
1133
|
+
|
|
1134
|
+
<script type="text/javascript">
|
|
1135
|
+
"use strict";
|
|
1136
|
+
|
|
1137
|
+
window.onload = function () {
|
|
1138
|
+
|
|
1139
|
+
let totalIterations = 1;
|
|
1140
|
+
|
|
1141
|
+
let menu = document.querySelector('#execution-menu .nav');
|
|
1142
|
+
|
|
1143
|
+
for(var i = 0; i < totalIterations; i++)
|
|
1144
|
+
{
|
|
1145
|
+
let li = document.createElement('li');
|
|
1146
|
+
li.appendChild(document.createTextNode((i + 1)));
|
|
1147
|
+
li.setAttribute('id', 'iteration-' + i);
|
|
1148
|
+
li.classList.add("custom-tab");
|
|
1149
|
+
li.classList.add("itPassed");
|
|
1150
|
+
|
|
1151
|
+
li.addEventListener('click', function() {
|
|
1152
|
+
let allItems = document.querySelectorAll('[class*=iteration-]');
|
|
1153
|
+
allItems.forEach(function(elem) {
|
|
1154
|
+
elem.style.display = 'none';
|
|
1155
|
+
})
|
|
1156
|
+
|
|
1157
|
+
let allMenus = document.querySelectorAll('[id*=iteration-]');
|
|
1158
|
+
allMenus.forEach(function(elem){
|
|
1159
|
+
elem.style.borderBottom = 'none';
|
|
1160
|
+
})
|
|
1161
|
+
|
|
1162
|
+
this.style.borderBottom = 'solid 3px #032a33';
|
|
1163
|
+
|
|
1164
|
+
let items = document.querySelectorAll("." + this.id);
|
|
1165
|
+
items.forEach(function(elem) {
|
|
1166
|
+
elem.style.display = elem.style.display == 'block' ? 'none' : 'block';
|
|
1167
|
+
})
|
|
1168
|
+
});
|
|
1169
|
+
menu.appendChild(li);
|
|
1170
|
+
}
|
|
1171
|
+
|
|
1172
|
+
//shows first tab data
|
|
1173
|
+
document.getElementById('iteration-0').click();
|
|
1174
|
+
// document.getElementById('iterationSelected').innerHTML = `Iteration ${document.getElementById('iteration-0').innerHTML} selected`
|
|
1175
|
+
|
|
1176
|
+
}
|
|
1177
|
+
</script>
|
|
1178
|
+
|
|
1179
|
+
<script>
|
|
1180
|
+
function setTheme(themeName) {
|
|
1181
|
+
localStorage.setItem('theme', themeName);
|
|
1182
|
+
document.body.className = themeName;
|
|
1183
|
+
}
|
|
1184
|
+
|
|
1185
|
+
function toggleTheme() {
|
|
1186
|
+
if (localStorage.getItem('theme') === 'theme-light') {
|
|
1187
|
+
setTheme('theme-dark');
|
|
1188
|
+
} else {
|
|
1189
|
+
setTheme('theme-light');
|
|
1190
|
+
}
|
|
1191
|
+
}
|
|
1192
|
+
|
|
1193
|
+
(function () {
|
|
1194
|
+
if (localStorage.getItem('theme') === 'theme-light') {
|
|
1195
|
+
setTheme('theme-light');
|
|
1196
|
+
document.getElementById('slider').checked = false;
|
|
1197
|
+
} else {
|
|
1198
|
+
setTheme('theme-dark');
|
|
1199
|
+
document.getElementById('slider').checked = true;
|
|
1200
|
+
}
|
|
1201
|
+
})();
|
|
1202
|
+
</script>
|