mirror of
https://github.com/usebruno/bruno.git
synced 2026-07-08 06:28:33 +00:00
fix: use stable index in requests tab in report (#7867)
This commit is contained in:
@@ -0,0 +1,32 @@
|
|||||||
|
import { getFilteredRequestResults } from './template';
|
||||||
|
import vm from 'vm';
|
||||||
|
|
||||||
|
describe('getFilteredRequestResults', () => {
|
||||||
|
it('preserves original request indexes when filtering failed results', () => {
|
||||||
|
const results = [
|
||||||
|
{
|
||||||
|
path: '01-passing',
|
||||||
|
status: 'pass',
|
||||||
|
testResults: [{ description: 'status is 200', status: 'pass' }],
|
||||||
|
assertionResults: []
|
||||||
|
},
|
||||||
|
{
|
||||||
|
path: '02-failing',
|
||||||
|
status: 'pass',
|
||||||
|
testResults: [{ description: 'forced failure', status: 'fail' }],
|
||||||
|
assertionResults: []
|
||||||
|
}
|
||||||
|
];
|
||||||
|
const ctx = vm.createContext({ results });
|
||||||
|
vm.runInContext(`var fn = ${getFilteredRequestResults.toString()}`, ctx);
|
||||||
|
|
||||||
|
const result = vm.runInContext('fn(results, true)', ctx);
|
||||||
|
|
||||||
|
expect(result).toEqual([
|
||||||
|
{
|
||||||
|
value: results[1],
|
||||||
|
index: 1
|
||||||
|
}
|
||||||
|
]);
|
||||||
|
});
|
||||||
|
});
|
||||||
@@ -1,3 +1,20 @@
|
|||||||
|
import type { T_RunnerRequestExecutionResult } from '../../types';
|
||||||
|
|
||||||
|
export const getFilteredRequestResults = (results: T_RunnerRequestExecutionResult[] = [], onlyFailed = false) => {
|
||||||
|
const indexedResults = (Array.isArray(results) ? results : []).map((value, index) => ({ value, index }));
|
||||||
|
|
||||||
|
if (!onlyFailed) {
|
||||||
|
return indexedResults;
|
||||||
|
}
|
||||||
|
|
||||||
|
return indexedResults.filter(
|
||||||
|
({ value }) =>
|
||||||
|
value?.status === 'error'
|
||||||
|
|| !!value?.testResults?.find((t) => t.status !== 'pass')
|
||||||
|
|| !!value?.assertionResults?.find((t) => t.status !== 'pass')
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
export const htmlTemplateString = (resutsJsonString: string) => `<!DOCTYPE html>
|
export const htmlTemplateString = (resutsJsonString: string) => `<!DOCTYPE html>
|
||||||
<html lang="en">
|
<html lang="en">
|
||||||
<head>
|
<head>
|
||||||
@@ -294,7 +311,7 @@ export const htmlTemplateString = (resutsJsonString: string) => `<!DOCTYPE html>
|
|||||||
</n-switch>
|
</n-switch>
|
||||||
|
|
||||||
<n-collapse>
|
<n-collapse>
|
||||||
<x-result v-for="(result, index) in results" :result="result" :index="index" :key="index"></x-result>
|
<x-result v-for="result in results" :result="result.value" :index="result.index" :key="result.index"></x-result>
|
||||||
</n-collapse>
|
</n-collapse>
|
||||||
</n-flex>
|
</n-flex>
|
||||||
</n-card>
|
</n-card>
|
||||||
@@ -423,6 +440,8 @@ export const htmlTemplateString = (resutsJsonString: string) => `<!DOCTYPE html>
|
|||||||
<script>
|
<script>
|
||||||
const { createApp, ref, computed, onMounted } = Vue;
|
const { createApp, ref, computed, onMounted } = Vue;
|
||||||
|
|
||||||
|
const getFilteredRequestResults = ${getFilteredRequestResults.toString()};
|
||||||
|
|
||||||
function mergeTests(runnerResults) {
|
function mergeTests(runnerResults) {
|
||||||
if (!Array.isArray(runnerResults)) return runnerResults;
|
if (!Array.isArray(runnerResults)) return runnerResults;
|
||||||
|
|
||||||
@@ -645,15 +664,7 @@ export const htmlTemplateString = (resutsJsonString: string) => `<!DOCTYPE html>
|
|||||||
setup(props) {
|
setup(props) {
|
||||||
const onlyFailed = ref(false);
|
const onlyFailed = ref(false);
|
||||||
const filteredResults = computed(() => {
|
const filteredResults = computed(() => {
|
||||||
if (onlyFailed.value) {
|
return getFilteredRequestResults(props?.res?.results, onlyFailed.value);
|
||||||
return props?.res?.results?.filter(
|
|
||||||
(r) =>
|
|
||||||
r.status === 'error' ||
|
|
||||||
!!r?.testResults?.find((t) => t.status !== 'pass') ||
|
|
||||||
!!r?.assertionResults?.find((t) => t.status !== 'pass')
|
|
||||||
);
|
|
||||||
}
|
|
||||||
return props.res.results;
|
|
||||||
});
|
});
|
||||||
const iterationIndex = Number(props.res.iterationIndex) + 1;
|
const iterationIndex = Number(props.res.iterationIndex) + 1;
|
||||||
return {
|
return {
|
||||||
|
|||||||
Reference in New Issue
Block a user