diff --git a/src/api/generated/Api.ts b/src/api/generated/Api.ts index 135eec0..75adac6 100644 --- a/src/api/generated/Api.ts +++ b/src/api/generated/Api.ts @@ -13604,6 +13604,19 @@ export class Api< * @min 0 */ errorCount: number; + /** Detailed test statistics for this run */ + testStatistics: { + /** + * Total number of individual test assertions that passed across all conversations + * @min 0 + */ + passedTests: number; + /** + * Total number of individual test assertions that failed across all conversations + * @min 0 + */ + failedTests: number; + } | null; /** Additional metadata */ metadata: Record; /** Version number for optimistic locking */ @@ -13697,6 +13710,19 @@ export class Api< * @min 0 */ errorCount: number; + /** Detailed test statistics for this run */ + testStatistics: { + /** + * Total number of individual test assertions that passed across all conversations + * @min 0 + */ + passedTests: number; + /** + * Total number of individual test assertions that failed across all conversations + * @min 0 + */ + failedTests: number; + } | null; /** Additional metadata */ metadata: Record; /** Version number for optimistic locking */ @@ -13775,6 +13801,19 @@ export class Api< * @min 0 */ errorCount: number; + /** Detailed test statistics for this run */ + testStatistics: { + /** + * Total number of individual test assertions that passed across all conversations + * @min 0 + */ + passedTests: number; + /** + * Total number of individual test assertions that failed across all conversations + * @min 0 + */ + failedTests: number; + } | null; /** Additional metadata */ metadata: Record; /** Version number for optimistic locking */ @@ -13853,6 +13892,19 @@ export class Api< * @min 0 */ errorCount: number; + /** Detailed test statistics for this run */ + testStatistics: { + /** + * Total number of individual test assertions that passed across all conversations + * @min 0 + */ + passedTests: number; + /** + * Total number of individual test assertions that failed across all conversations + * @min 0 + */ + failedTests: number; + } | null; /** Additional metadata */ metadata: Record; /** Version number for optimistic locking */ @@ -14013,6 +14065,19 @@ export class Api< dataExtractionResults: Record; /** Post-processed data transformation results */ dataTransformationResults: Record; + /** Detailed test statistics for this conversation */ + testStatistics: { + /** + * Number of individual test assertions that passed + * @min 0 + */ + passedTests: number; + /** + * Number of individual test assertions that failed + * @min 0 + */ + failedTests: number; + } | null; /** Additional metadata */ metadata: Record; /** Version number for optimistic locking */ @@ -14104,6 +14169,19 @@ export class Api< dataExtractionResults: Record; /** Post-processed data transformation results */ dataTransformationResults: Record; + /** Detailed test statistics for this conversation */ + testStatistics: { + /** + * Number of individual test assertions that passed + * @min 0 + */ + passedTests: number; + /** + * Number of individual test assertions that failed + * @min 0 + */ + failedTests: number; + } | null; /** Additional metadata */ metadata: Record; /** Version number for optimistic locking */ diff --git a/src/api/generated/data-contracts.ts b/src/api/generated/data-contracts.ts index b143137..3f01ade 100644 --- a/src/api/generated/data-contracts.ts +++ b/src/api/generated/data-contracts.ts @@ -9028,6 +9028,19 @@ export interface ScenarioRunResponse { * @min 0 */ errorCount: number; + /** Detailed test statistics for this run */ + testStatistics: { + /** + * Total number of individual test assertions that passed across all conversations + * @min 0 + */ + passedTests: number; + /** + * Total number of individual test assertions that failed across all conversations + * @min 0 + */ + failedTests: number; + } | null; /** Additional metadata */ metadata: Record; /** Version number for optimistic locking */ @@ -9066,6 +9079,19 @@ export interface ScenarioRunListResponse { * @min 0 */ errorCount: number; + /** Detailed test statistics for this run */ + testStatistics: { + /** + * Total number of individual test assertions that passed across all conversations + * @min 0 + */ + passedTests: number; + /** + * Total number of individual test assertions that failed across all conversations + * @min 0 + */ + failedTests: number; + } | null; /** Additional metadata */ metadata: Record; /** Version number for optimistic locking */ @@ -9134,6 +9160,19 @@ export interface ScenarioConversationResponse { dataExtractionResults: Record; /** Post-processed data transformation results */ dataTransformationResults: Record; + /** Detailed test statistics for this conversation */ + testStatistics: { + /** + * Number of individual test assertions that passed + * @min 0 + */ + passedTests: number; + /** + * Number of individual test assertions that failed + * @min 0 + */ + failedTests: number; + } | null; /** Additional metadata */ metadata: Record; /** Version number for optimistic locking */ @@ -9185,6 +9224,19 @@ export interface ScenarioConversationListResponse { dataExtractionResults: Record; /** Post-processed data transformation results */ dataTransformationResults: Record; + /** Detailed test statistics for this conversation */ + testStatistics: { + /** + * Number of individual test assertions that passed + * @min 0 + */ + passedTests: number; + /** + * Number of individual test assertions that failed + * @min 0 + */ + failedTests: number; + } | null; /** Additional metadata */ metadata: Record; /** Version number for optimistic locking */ diff --git a/src/api/openapi.json b/src/api/openapi.json index 9ef98d0..f1ff79b 100644 --- a/src/api/openapi.json +++ b/src/api/openapi.json @@ -20509,6 +20509,27 @@ "minimum": 0, "description": "Number of conversations that errored during execution (excluded from pass/fail evaluation)" }, + "testStatistics": { + "type": "object", + "nullable": true, + "properties": { + "passedTests": { + "type": "integer", + "minimum": 0, + "description": "Total number of individual test assertions that passed across all conversations" + }, + "failedTests": { + "type": "integer", + "minimum": 0, + "description": "Total number of individual test assertions that failed across all conversations" + } + }, + "required": [ + "passedTests", + "failedTests" + ], + "description": "Detailed test statistics for this run" + }, "metadata": { "type": "object", "nullable": true, @@ -20543,6 +20564,7 @@ "status", "statusDetails", "errorCount", + "testStatistics", "metadata", "version", "createdAt", @@ -20600,6 +20622,27 @@ "minimum": 0, "description": "Number of conversations that errored during execution (excluded from pass/fail evaluation)" }, + "testStatistics": { + "type": "object", + "nullable": true, + "properties": { + "passedTests": { + "type": "integer", + "minimum": 0, + "description": "Total number of individual test assertions that passed across all conversations" + }, + "failedTests": { + "type": "integer", + "minimum": 0, + "description": "Total number of individual test assertions that failed across all conversations" + } + }, + "required": [ + "passedTests", + "failedTests" + ], + "description": "Detailed test statistics for this run" + }, "metadata": { "type": "object", "nullable": true, @@ -20634,6 +20677,7 @@ "status", "statusDetails", "errorCount", + "testStatistics", "metadata", "version", "createdAt", @@ -20737,6 +20781,27 @@ }, "description": "Post-processed data transformation results" }, + "testStatistics": { + "type": "object", + "nullable": true, + "properties": { + "passedTests": { + "type": "integer", + "minimum": 0, + "description": "Number of individual test assertions that passed" + }, + "failedTests": { + "type": "integer", + "minimum": 0, + "description": "Number of individual test assertions that failed" + } + }, + "required": [ + "passedTests", + "failedTests" + ], + "description": "Detailed test statistics for this conversation" + }, "metadata": { "type": "object", "nullable": true, @@ -20773,6 +20838,7 @@ "testRunStatus", "dataExtractionResults", "dataTransformationResults", + "testStatistics", "metadata", "version", "createdAt", @@ -20853,6 +20919,27 @@ }, "description": "Post-processed data transformation results" }, + "testStatistics": { + "type": "object", + "nullable": true, + "properties": { + "passedTests": { + "type": "integer", + "minimum": 0, + "description": "Number of individual test assertions that passed" + }, + "failedTests": { + "type": "integer", + "minimum": 0, + "description": "Number of individual test assertions that failed" + } + }, + "required": [ + "passedTests", + "failedTests" + ], + "description": "Detailed test statistics for this conversation" + }, "metadata": { "type": "object", "nullable": true, @@ -20889,6 +20976,7 @@ "testRunStatus", "dataExtractionResults", "dataTransformationResults", + "testStatistics", "metadata", "version", "createdAt", @@ -55426,6 +55514,27 @@ "minimum": 0, "description": "Number of conversations that errored during execution (excluded from pass/fail evaluation)" }, + "testStatistics": { + "type": "object", + "nullable": true, + "properties": { + "passedTests": { + "type": "integer", + "minimum": 0, + "description": "Total number of individual test assertions that passed across all conversations" + }, + "failedTests": { + "type": "integer", + "minimum": 0, + "description": "Total number of individual test assertions that failed across all conversations" + } + }, + "required": [ + "passedTests", + "failedTests" + ], + "description": "Detailed test statistics for this run" + }, "metadata": { "type": "object", "nullable": true, @@ -55460,6 +55569,7 @@ "status", "statusDetails", "errorCount", + "testStatistics", "metadata", "version", "createdAt", @@ -55667,6 +55777,27 @@ "minimum": 0, "description": "Number of conversations that errored during execution (excluded from pass/fail evaluation)" }, + "testStatistics": { + "type": "object", + "nullable": true, + "properties": { + "passedTests": { + "type": "integer", + "minimum": 0, + "description": "Total number of individual test assertions that passed across all conversations" + }, + "failedTests": { + "type": "integer", + "minimum": 0, + "description": "Total number of individual test assertions that failed across all conversations" + } + }, + "required": [ + "passedTests", + "failedTests" + ], + "description": "Detailed test statistics for this run" + }, "metadata": { "type": "object", "nullable": true, @@ -55701,6 +55832,7 @@ "status", "statusDetails", "errorCount", + "testStatistics", "metadata", "version", "createdAt", @@ -55822,6 +55954,27 @@ "minimum": 0, "description": "Number of conversations that errored during execution (excluded from pass/fail evaluation)" }, + "testStatistics": { + "type": "object", + "nullable": true, + "properties": { + "passedTests": { + "type": "integer", + "minimum": 0, + "description": "Total number of individual test assertions that passed across all conversations" + }, + "failedTests": { + "type": "integer", + "minimum": 0, + "description": "Total number of individual test assertions that failed across all conversations" + } + }, + "required": [ + "passedTests", + "failedTests" + ], + "description": "Detailed test statistics for this run" + }, "metadata": { "type": "object", "nullable": true, @@ -55856,6 +56009,7 @@ "status", "statusDetails", "errorCount", + "testStatistics", "metadata", "version", "createdAt", @@ -55993,6 +56147,27 @@ "minimum": 0, "description": "Number of conversations that errored during execution (excluded from pass/fail evaluation)" }, + "testStatistics": { + "type": "object", + "nullable": true, + "properties": { + "passedTests": { + "type": "integer", + "minimum": 0, + "description": "Total number of individual test assertions that passed across all conversations" + }, + "failedTests": { + "type": "integer", + "minimum": 0, + "description": "Total number of individual test assertions that failed across all conversations" + } + }, + "required": [ + "passedTests", + "failedTests" + ], + "description": "Detailed test statistics for this run" + }, "metadata": { "type": "object", "nullable": true, @@ -56027,6 +56202,7 @@ "status", "statusDetails", "errorCount", + "testStatistics", "metadata", "version", "createdAt", @@ -56351,6 +56527,27 @@ }, "description": "Post-processed data transformation results" }, + "testStatistics": { + "type": "object", + "nullable": true, + "properties": { + "passedTests": { + "type": "integer", + "minimum": 0, + "description": "Number of individual test assertions that passed" + }, + "failedTests": { + "type": "integer", + "minimum": 0, + "description": "Number of individual test assertions that failed" + } + }, + "required": [ + "passedTests", + "failedTests" + ], + "description": "Detailed test statistics for this conversation" + }, "metadata": { "type": "object", "nullable": true, @@ -56387,6 +56584,7 @@ "testRunStatus", "dataExtractionResults", "dataTransformationResults", + "testStatistics", "metadata", "version", "createdAt", @@ -56531,6 +56729,27 @@ }, "description": "Post-processed data transformation results" }, + "testStatistics": { + "type": "object", + "nullable": true, + "properties": { + "passedTests": { + "type": "integer", + "minimum": 0, + "description": "Number of individual test assertions that passed" + }, + "failedTests": { + "type": "integer", + "minimum": 0, + "description": "Number of individual test assertions that failed" + } + }, + "required": [ + "passedTests", + "failedTests" + ], + "description": "Detailed test statistics for this conversation" + }, "metadata": { "type": "object", "nullable": true, @@ -56567,6 +56786,7 @@ "testRunStatus", "dataExtractionResults", "dataTransformationResults", + "testStatistics", "metadata", "version", "createdAt", diff --git a/src/views/testing/TestRunDetailView.vue b/src/views/testing/TestRunDetailView.vue index 4283f40..a3c1421 100644 --- a/src/views/testing/TestRunDetailView.vue +++ b/src/views/testing/TestRunDetailView.vue @@ -278,6 +278,17 @@ const passStats = computed(() => { return { total, passed, pct: Math.round((passed / total) * 100) } }) +const fullPassStats = computed(() => { + if (checkedFields.value.length === 0 || conversations.value.length === 0) return null + const completed = conversations.value.filter( + c => c.status !== 'queued' && c.status !== 'in_progress' && c.status !== 'error' + ) + const fullPass = completed.filter( + c => checkedFields.value.every(f => isPassing(c, f)) + ).length + return { total: completed.length, fullPass } +}) + // ── Status helpers ───────────────────────────────────────────── function runStatusBadgeClass(status: ScenarioRunStatus): string { @@ -495,6 +506,9 @@ function openConversation(conv: ScenarioConversationResponse) {
{{ passStats.passed }} / {{ passStats.total }} checks passed
{{ conversations.length }} conversations × {{ checkedFields.length }} checked fields
+
+ {{ fullPassStats.fullPass }}/{{ fullPassStats.total }} conversations with full pass +
@@ -512,6 +526,7 @@ function openConversation(conv: ScenarioConversationResponse) { class="table-header-cell text-center" :title="'Expected: ' + JSON.stringify(field.expectedValue)" >{{ field.label }} + Score Result @@ -546,6 +561,22 @@ function openConversation(conv: ScenarioConversationResponse) { + + + + +