feat: add button to export test results as json (#4419)

Co-authored-by: nivedin <nivedinp@gmail.com>
This commit is contained in:
Pranay Pandey 2024-10-28 21:23:21 +05:30 committed by GitHub
parent 20c4767dce
commit 936c97b53a
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 51 additions and 6 deletions

View File

@ -20,6 +20,7 @@
"dismiss": "Dismiss",
"dont_save": "Don't save",
"download_file": "Download file",
"download_test_report": "Download test report",
"drag_to_reorder": "Drag to reorder",
"duplicate": "Duplicate",
"edit": "Edit",

View File

@ -14,6 +14,13 @@
<label class="truncate font-semibold text-secondaryLight">
{{ t("test.report") }}
</label>
<div>
<HoppButtonSecondary
v-tippy="{ theme: 'tooltip' }"
:title="t('action.download_test_report')"
:icon="IconDownload"
@click="downloadTestResult"
/>
<HoppButtonSecondary
v-tippy="{ theme: 'tooltip' }"
:title="t('action.clear')"
@ -21,6 +28,7 @@
@click="clearContent()"
/>
</div>
</div>
<div class="divide-y-4 divide-dividerLight border-b border-dividerLight">
<div v-if="haveEnvVariables" class="flex flex-col">
<details class="flex flex-col divide-y divide-dividerLight" open>
@ -214,11 +222,13 @@ import {
selectedEnvironmentIndex$,
setSelectedEnvironmentIndex,
} from "~/newstore/environments"
import { exportTestResults } from "~/helpers/import-export/export/testResults"
import IconCheck from "~icons/lucide/check"
import IconExternalLink from "~icons/lucide/external-link"
import IconTrash2 from "~icons/lucide/trash-2"
import IconClose from "~icons/lucide/x"
import IconDownload from "~icons/lucide/download"
import { GlobalEnvironment } from "@hoppscotch/data"
import { useVModel } from "@vueuse/core"
@ -307,4 +317,9 @@ const addEnvToGlobal = () => {
isSecret: false,
})
}
const downloadTestResult = () => {
if (!testResults.value) return
exportTestResults(testResults.value)
}
</script>

View File

@ -0,0 +1,29 @@
import { HoppTestResult } from "~/helpers/types/HoppTestResult"
import { platform } from "~/platform"
import * as E from "fp-ts/Either"
export const exportTestResults = async (testResults: HoppTestResult) => {
const contentsJSON = JSON.stringify(testResults, null, 2)
const file = new Blob([contentsJSON], { type: "application/json" })
const url = URL.createObjectURL(file)
const fileName = url.split("/").pop()!.split("#")[0].split("?")[0]
const result = await platform.io.saveFileWithDialog({
data: contentsJSON,
contentType: "application/json",
suggestedFilename: `${fileName}.json`,
filters: [
{
name: "Hoppscotch Test Results JSON file",
extensions: ["json"],
},
],
})
if (result.type === "unknown" || result.type === "saved") {
return E.right("state.download_started")
}
return E.left("state.download_failed")
}