import { OnInit, OnChanges, SimpleChanges, EventEmitter, ChangeDetectorRef } from '@angular/core'; import { FormBuilder, FormGroup } from '@angular/forms'; import { DynamicSelectFieldConfig } from '../dynamic-select/dynamic-select-field.component'; import { DynamicTableColumn } from '../table/dynamic-table/dynamic-table.component'; import { EmptyStateConfig } from '../empty-state/empty-state-config.interface'; import * as i0 from "@angular/core"; export interface TestDevice { id: number; testPlanId: number; title: string; browser: string; platform: string; browserVersion: string; } export interface TestDeviceSettings { title: string; osVersion: string; browser: string; browserVersion: string; resolution: string; platform: string; deviceName: string | null; } export interface TestDeviceResult { testDevice: TestDevice; testDeviceSettings: TestDeviceSettings; } export interface TestCaseResultData { id: number; browser: string; testCaseId: number; testPlanResultId: number; result: 'SUCCESS' | 'FAILURE' | 'ABORTED' | 'NOT_EXECUTED' | 'QUEUED' | 'STOPPED'; status: 'STATUS_COMPLETED' | 'STATUS_IN_PROGRESS' | 'STATUS_QUEUED'; startTime: number; platform: string; endTime: number; duration: number; testDataSetName: string; environment: string; testDeviceResult: TestDeviceResult; } export interface RunData { id: number; label: string; result: 'SUCCESS' | 'FAILURE' | 'ABORTED' | 'NOT_EXECUTED' | 'QUEUED' | 'STOPPED'; startTime: number; duration: number; testDataSetName: string; device: string; browser: string; platform: string; environment?: string; } export interface ComparisonSummary { unchanged: number; statusChanged: number; added: number; removed: number; timing: number; } export interface StepComparison { stepId: string; stepTitle: string; testCaseId?: string; priorityName?: string | null; runAId?: number; runBId?: number; runAStatus?: 'SUCCESS' | 'FAILURE' | 'ABORTED' | 'NOT_EXECUTED' | 'QUEUED' | 'STOPPED'; runADuration?: number; runBStatus?: 'SUCCESS' | 'FAILURE' | 'ABORTED' | 'NOT_EXECUTED' | 'QUEUED' | 'STOPPED'; runBDuration?: number; change: string; /** 1-based row index in full comparison list (test plan table; set by compare-runs). */ _compareRowOrdinal?: number; } export interface ComparisonResponse { summary: ComparisonSummary; stepsComparison: StepComparison[]; } /** Derived counts for test-plan compare summary cards (from step rows). */ export interface TestPlanCompareCardSummary { totalCases: number; passed: number; failed: number; regressions: number; fixed: number; newSteps: number; removed: number; noChange: number; } export interface CompareRequest { runAId: number; runBId: number; } export interface SearchRequest { key: string; query: string; } export declare class CompareRunsComponent implements OnInit, OnChanges { private fb; private cdr; runs: TestCaseResultData[]; comparisonData?: ComparisonResponse; compareMode: 'testCase' | 'testPlan'; initialRunAId?: number | null; initialRunBId?: number | null; autoCompareOnInit: boolean; isLoadingRuns: boolean; hasMoreRuns: boolean; isComparingRuns: boolean; hasComparedRuns: boolean; pageSizeMenuDirection: 'auto' | 'up' | 'down'; /** When true, hides Run A/B dropdowns and the primary "Compare Runs" action (e.g. nested dialog from test plan View Compare). */ hideRunSelectorsAndCompareButton: boolean; /** While test plan compare export API is in flight; drives Export button loading state. */ isExportingTestPlanCompare: boolean; searchRuns: EventEmitter; loadMoreRuns: EventEmitter; compareRuns: EventEmitter; viewCompare: EventEmitter<{ runAId: number; runBId: number; row: StepComparison; sourceRunAId: number | null; sourceRunBId: number | null; }>; testCaseClick: EventEmitter; /** Test plan modal: export compare results (GET test_plan_results/compare/export). */ exportTestPlanCompare: EventEmitter<{ runAId: number; runBId: number; }>; form: FormGroup; runASelectConfig: DynamicSelectFieldConfig; runBSelectConfig: DynamicSelectFieldConfig; selectedRunA?: RunData; selectedRunB?: RunData; comparisonSummary?: ComparisonSummary; stepComparisons: StepComparison[]; /** Populated when test-plan comparison data is loaded; drives summary metric cards. */ testPlanCardSummary?: TestPlanCompareCardSummary; tableColumns: DynamicTableColumn[]; pageIndex: number; pageSize: number; emptyStateConfig: EmptyStateConfig; constructor(fb: FormBuilder, cdr: ChangeDetectorRef); ngOnInit(): void; ngOnChanges(changes: SimpleChanges): void; private initializeForm; private allOptionsCache; private lastRuns; private autoCompareTriggered; private setupSelectConfigs; private runLabelCache; private formatRunLabel; private updateSelectConfigsLoading; handleSearchRuns(query: string, key: string): void; handleLoadMoreRuns(query: string): void; onSearchChange(event: SearchRequest): void; onLoadMore(event: { key: string; query: string; }): void; private updateSelectedRuns; private convertToRunData; private setupTableColumns; private renderStatusOnly; private renderStatusWithDuration; private applyInitialSelectionsIfNeeded; private onViewCompare; private getNumericTestCaseId; private onTestCaseClick; onExportTestPlanCompare(): void; private renderChangeChip; private renderPriorityChip; private isFailureAction; private getActionLabel; private getRunColumnHeader; private renderStatusIcon; private getStatusLabel; private formatDuration; private getResultStatusColor; private handleComparisonData; /** * Builds summary card counts for test-plan compare: pass/fail from Run B vs total; * change buckets from `change` (REGRESSION, FIXED, NEW STEP, etc.). */ private computeTestPlanCardSummary; onPageChange(event: { pageIndex: number; pageSize: number; }): void; get isEmptyState(): boolean; onCompareClick(): void; get canCompare(): boolean; get runAStatusColor(): string; get runBStatusColor(): string; get runAStatusBorderColor(): string; get runBStatusBorderColor(): string; get runAStatusBgColor(): string; get runBStatusBgColor(): string; formatTime(timestamp: number): string; formatDurationString(milliseconds: number): string; get showComparison(): boolean; get runAStatusLabel(): string; get runBStatusLabel(): string; static ɵfac: i0.ɵɵFactoryDeclaration; static ɵcmp: i0.ɵɵComponentDeclaration; }