@memberjunction/ng-dashboards 2.117.0 → 2.119.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.
Files changed (49) hide show
  1. package/dist/Testing/components/testing-analytics.component.d.ts +56 -0
  2. package/dist/Testing/components/testing-analytics.component.d.ts.map +1 -0
  3. package/dist/Testing/components/testing-analytics.component.js +746 -0
  4. package/dist/Testing/components/testing-analytics.component.js.map +1 -0
  5. package/dist/Testing/components/testing-execution.component.d.ts +59 -0
  6. package/dist/Testing/components/testing-execution.component.d.ts.map +1 -0
  7. package/dist/Testing/components/testing-execution.component.js +647 -0
  8. package/dist/Testing/components/testing-execution.component.js.map +1 -0
  9. package/dist/Testing/components/testing-feedback.component.d.ts +55 -0
  10. package/dist/Testing/components/testing-feedback.component.d.ts.map +1 -0
  11. package/dist/Testing/components/testing-feedback.component.js +788 -0
  12. package/dist/Testing/components/testing-feedback.component.js.map +1 -0
  13. package/dist/Testing/components/testing-overview.component.d.ts +30 -0
  14. package/dist/Testing/components/testing-overview.component.d.ts.map +1 -0
  15. package/dist/Testing/components/testing-overview.component.js +341 -0
  16. package/dist/Testing/components/testing-overview.component.js.map +1 -0
  17. package/dist/Testing/components/testing-version-comparison.component.d.ts +58 -0
  18. package/dist/Testing/components/testing-version-comparison.component.d.ts.map +1 -0
  19. package/dist/Testing/components/testing-version-comparison.component.js +801 -0
  20. package/dist/Testing/components/testing-version-comparison.component.js.map +1 -0
  21. package/dist/Testing/components/widgets/oracle-breakdown-table.component.d.ts +20 -0
  22. package/dist/Testing/components/widgets/oracle-breakdown-table.component.d.ts.map +1 -0
  23. package/dist/Testing/components/widgets/oracle-breakdown-table.component.js +278 -0
  24. package/dist/Testing/components/widgets/oracle-breakdown-table.component.js.map +1 -0
  25. package/dist/Testing/components/widgets/suite-tree.component.d.ts +28 -0
  26. package/dist/Testing/components/widgets/suite-tree.component.d.ts.map +1 -0
  27. package/dist/Testing/components/widgets/suite-tree.component.js +275 -0
  28. package/dist/Testing/components/widgets/suite-tree.component.js.map +1 -0
  29. package/dist/Testing/components/widgets/test-run-detail-panel.component.d.ts +34 -0
  30. package/dist/Testing/components/widgets/test-run-detail-panel.component.d.ts.map +1 -0
  31. package/dist/Testing/components/widgets/test-run-detail-panel.component.js +371 -0
  32. package/dist/Testing/components/widgets/test-run-detail-panel.component.js.map +1 -0
  33. package/dist/Testing/services/testing-instrumentation.service.d.ts +152 -0
  34. package/dist/Testing/services/testing-instrumentation.service.d.ts.map +1 -0
  35. package/dist/Testing/services/testing-instrumentation.service.js +579 -0
  36. package/dist/Testing/services/testing-instrumentation.service.js.map +1 -0
  37. package/dist/Testing/testing-dashboard.component.d.ts +52 -0
  38. package/dist/Testing/testing-dashboard.component.d.ts.map +1 -0
  39. package/dist/Testing/testing-dashboard.component.js +271 -0
  40. package/dist/Testing/testing-dashboard.component.js.map +1 -0
  41. package/dist/module.d.ts +30 -20
  42. package/dist/module.d.ts.map +1 -1
  43. package/dist/module.js +50 -9
  44. package/dist/module.js.map +1 -1
  45. package/dist/public-api.d.ts +1 -0
  46. package/dist/public-api.d.ts.map +1 -1
  47. package/dist/public-api.js +3 -0
  48. package/dist/public-api.js.map +1 -1
  49. package/package.json +13 -10
@@ -0,0 +1 @@
1
+ {"version":3,"file":"testing-feedback.component.js","sourceRoot":"","sources":["../../../src/Testing/components/testing-feedback.component.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,30 @@
1
+ import { OnInit, OnDestroy, EventEmitter, ChangeDetectorRef } from '@angular/core';
2
+ import { Observable } from 'rxjs';
3
+ import { TestingInstrumentationService, TestingDashboardKPIs, TestRunSummary, SuiteHierarchyNode } from '../services/testing-instrumentation.service';
4
+ import { KPICardData } from '../../AI/components/widgets/kpi-card.component';
5
+ import * as i0 from "@angular/core";
6
+ export declare class TestingOverviewComponent implements OnInit, OnDestroy {
7
+ private instrumentationService;
8
+ private cdr;
9
+ initialState?: any;
10
+ stateChange: EventEmitter<any>;
11
+ private destroy$;
12
+ isLoading: boolean;
13
+ selectedSuiteId: string | null;
14
+ kpis$: Observable<TestingDashboardKPIs>;
15
+ kpiCards$: Observable<KPICardData[]>;
16
+ suiteHierarchy$: Observable<SuiteHierarchyNode[]>;
17
+ recentRuns$: Observable<TestRunSummary[]>;
18
+ constructor(instrumentationService: TestingInstrumentationService, cdr: ChangeDetectorRef);
19
+ ngOnInit(): Promise<void>;
20
+ ngOnDestroy(): void;
21
+ refreshData(): void;
22
+ onSuiteSelect(suiteId: string): void;
23
+ viewRunDetail(run: TestRunSummary): void;
24
+ formatDuration(milliseconds: number): string;
25
+ private emitStateChange;
26
+ private createKPICards;
27
+ static ɵfac: i0.ɵɵFactoryDeclaration<TestingOverviewComponent, never>;
28
+ static ɵcmp: i0.ɵɵComponentDeclaration<TestingOverviewComponent, "app-testing-overview", never, { "initialState": { "alias": "initialState"; "required": false; }; }, { "stateChange": "stateChange"; }, never, never, false, never>;
29
+ }
30
+ //# sourceMappingURL=testing-overview.component.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"testing-overview.component.d.ts","sourceRoot":"","sources":["../../../src/Testing/components/testing-overview.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,MAAM,EAAE,SAAS,EAAiB,YAAY,EAAE,iBAAiB,EAA2B,MAAM,eAAe,CAAC;AACtI,OAAO,EAAE,UAAU,EAAW,MAAM,MAAM,CAAC;AAI3C,OAAO,EAAE,6BAA6B,EAAE,oBAAoB,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,6CAA6C,CAAC;AACtJ,OAAO,EAAE,WAAW,EAAE,MAAM,gDAAgD,CAAC;;AAG7E,qBA+Ua,wBAAyB,YAAW,MAAM,EAAE,SAAS;IAe9D,OAAO,CAAC,sBAAsB;IAC9B,OAAO,CAAC,GAAG;IAfJ,YAAY,CAAC,EAAE,GAAG,CAAC;IAClB,WAAW,oBAA2B;IAEhD,OAAO,CAAC,QAAQ,CAAuB;IAEvC,SAAS,UAAS;IAClB,eAAe,EAAE,MAAM,GAAG,IAAI,CAAQ;IAEtC,KAAK,EAAE,UAAU,CAAC,oBAAoB,CAAC,CAAC;IACxC,SAAS,EAAE,UAAU,CAAC,WAAW,EAAE,CAAC,CAAC;IACrC,eAAe,EAAE,UAAU,CAAC,kBAAkB,EAAE,CAAC,CAAC;IAClD,WAAW,EAAE,UAAU,CAAC,cAAc,EAAE,CAAC,CAAC;gBAGhC,sBAAsB,EAAE,6BAA6B,EACrD,GAAG,EAAE,iBAAiB;IAmB1B,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAa/B,WAAW,IAAI,IAAI;IAKnB,WAAW,IAAI,IAAI;IAInB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IASpC,aAAa,CAAC,GAAG,EAAE,cAAc,GAAG,IAAI;IAIxC,cAAc,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM;IAQ5C,OAAO,CAAC,eAAe;IAMvB,OAAO,CAAC,cAAc;yCApFX,wBAAwB;2CAAxB,wBAAwB;CA+HpC"}
@@ -0,0 +1,341 @@
1
+ import { Component, Input, Output, EventEmitter, ChangeDetectionStrategy } from '@angular/core';
2
+ import { Subject } from 'rxjs';
3
+ import { takeUntil, map } from 'rxjs/operators';
4
+ import { CompositeKey } from '@memberjunction/core';
5
+ import { SharedService } from '@memberjunction/ng-shared';
6
+ import { TestEngineBase } from '@memberjunction/testing-engine-base';
7
+ import * as i0 from "@angular/core";
8
+ import * as i1 from "../services/testing-instrumentation.service";
9
+ import * as i2 from "@memberjunction/ng-testing";
10
+ import * as i3 from "../../AI/components/widgets/kpi-card.component";
11
+ import * as i4 from "./widgets/suite-tree.component";
12
+ import * as i5 from "@angular/common";
13
+ const _forTrack0 = ($index, $item) => $item.title;
14
+ const _forTrack1 = ($index, $item) => $item.id;
15
+ const _c0 = () => [];
16
+ function TestingOverviewComponent_For_11_Template(rf, ctx) { if (rf & 1) {
17
+ i0.ɵɵelement(0, "app-kpi-card", 7);
18
+ } if (rf & 2) {
19
+ const kpi_r1 = ctx.$implicit;
20
+ i0.ɵɵproperty("data", kpi_r1);
21
+ } }
22
+ function TestingOverviewComponent_For_24_Template(rf, ctx) { if (rf & 1) {
23
+ const _r2 = i0.ɵɵgetCurrentView();
24
+ i0.ɵɵelementStart(0, "div", 15)(1, "div", 20);
25
+ i0.ɵɵlistener("click", function TestingOverviewComponent_For_24_Template_div_click_1_listener() { const run_r3 = i0.ɵɵrestoreView(_r2).$implicit; const ctx_r3 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r3.viewRunDetail(run_r3)); });
26
+ i0.ɵɵelementStart(2, "div", 21);
27
+ i0.ɵɵtext(3);
28
+ i0.ɵɵelementEnd();
29
+ i0.ɵɵelementStart(4, "div", 22);
30
+ i0.ɵɵtext(5);
31
+ i0.ɵɵpipe(6, "date");
32
+ i0.ɵɵelementEnd()();
33
+ i0.ɵɵelementStart(7, "div", 23)(8, "div", 24);
34
+ i0.ɵɵelement(9, "app-test-status-badge", 25)(10, "app-score-indicator", 26);
35
+ i0.ɵɵelementEnd()()();
36
+ } if (rf & 2) {
37
+ const run_r3 = ctx.$implicit;
38
+ i0.ɵɵadvance(3);
39
+ i0.ɵɵtextInterpolate(run_r3.testName);
40
+ i0.ɵɵadvance(2);
41
+ i0.ɵɵtextInterpolate2(" ", i0.ɵɵpipeBind2(6, 8, run_r3.runDateTime, "short"), " \u2022 ", run_r3.testType, " ");
42
+ i0.ɵɵadvance(4);
43
+ i0.ɵɵproperty("status", run_r3.status)("showIcon", false);
44
+ i0.ɵɵadvance();
45
+ i0.ɵɵproperty("score", run_r3.score)("showBar", false)("showIcon", false);
46
+ } }
47
+ function TestingOverviewComponent_ForEmpty_25_Template(rf, ctx) { if (rf & 1) {
48
+ i0.ɵɵelementStart(0, "div", 16);
49
+ i0.ɵɵtext(1, "No recent test runs");
50
+ i0.ɵɵelementEnd();
51
+ } }
52
+ function TestingOverviewComponent_Conditional_33_Template(rf, ctx) { if (rf & 1) {
53
+ i0.ɵɵelementStart(0, "div", 27)(1, "div", 28);
54
+ i0.ɵɵtext(2, "Failed Tests");
55
+ i0.ɵɵelementEnd();
56
+ i0.ɵɵelementStart(3, "div", 29);
57
+ i0.ɵɵtext(4);
58
+ i0.ɵɵelementEnd()();
59
+ i0.ɵɵelementStart(5, "div", 27)(6, "div", 28);
60
+ i0.ɵɵtext(7, "Skipped Tests");
61
+ i0.ɵɵelementEnd();
62
+ i0.ɵɵelementStart(8, "div", 30);
63
+ i0.ɵɵtext(9);
64
+ i0.ɵɵelementEnd()();
65
+ i0.ɵɵelementStart(10, "div", 27)(11, "div", 28);
66
+ i0.ɵɵtext(12, "Avg Duration");
67
+ i0.ɵɵelementEnd();
68
+ i0.ɵɵelementStart(13, "div", 31);
69
+ i0.ɵɵtext(14);
70
+ i0.ɵɵelementEnd()();
71
+ } if (rf & 2) {
72
+ const kpis_r5 = ctx;
73
+ const ctx_r3 = i0.ɵɵnextContext();
74
+ i0.ɵɵadvance(4);
75
+ i0.ɵɵtextInterpolate(kpis_r5.failedTests);
76
+ i0.ɵɵadvance(5);
77
+ i0.ɵɵtextInterpolate(kpis_r5.skippedTests);
78
+ i0.ɵɵadvance(5);
79
+ i0.ɵɵtextInterpolate(ctx_r3.formatDuration(kpis_r5.averageDuration));
80
+ } }
81
+ export class TestingOverviewComponent {
82
+ instrumentationService;
83
+ cdr;
84
+ initialState;
85
+ stateChange = new EventEmitter();
86
+ destroy$ = new Subject();
87
+ isLoading = false;
88
+ selectedSuiteId = null;
89
+ kpis$;
90
+ kpiCards$;
91
+ suiteHierarchy$;
92
+ recentRuns$;
93
+ constructor(instrumentationService, cdr) {
94
+ this.instrumentationService = instrumentationService;
95
+ this.cdr = cdr;
96
+ this.kpis$ = this.instrumentationService.kpis$;
97
+ this.suiteHierarchy$ = this.instrumentationService.suiteHierarchy$;
98
+ this.recentRuns$ = this.instrumentationService.testRuns$;
99
+ this.kpiCards$ = this.kpis$.pipe(map(kpis => this.createKPICards(kpis)), takeUntil(this.destroy$));
100
+ this.instrumentationService.isLoading$.pipe(takeUntil(this.destroy$)).subscribe(loading => {
101
+ this.isLoading = loading;
102
+ this.cdr.markForCheck();
103
+ });
104
+ }
105
+ async ngOnInit() {
106
+ if (this.initialState) {
107
+ this.selectedSuiteId = this.initialState.selectedSuiteId || null;
108
+ }
109
+ // Initialize TestEngineBase with false for verbose logging
110
+ // This will load and cache all test metadata (Tests, Test Suites, Test Types, etc.)
111
+ const engine = TestEngineBase.Instance;
112
+ await engine.Config(false);
113
+ this.refreshData();
114
+ }
115
+ ngOnDestroy() {
116
+ this.destroy$.next();
117
+ this.destroy$.complete();
118
+ }
119
+ refreshData() {
120
+ this.instrumentationService.refresh();
121
+ }
122
+ onSuiteSelect(suiteId) {
123
+ this.selectedSuiteId = suiteId;
124
+ this.instrumentationService.setSuiteFilter(suiteId);
125
+ this.emitStateChange();
126
+ // Open the Test Suite entity record
127
+ SharedService.Instance.OpenEntityRecord('MJ: Test Suites', CompositeKey.FromID(suiteId));
128
+ }
129
+ viewRunDetail(run) {
130
+ SharedService.Instance.OpenEntityRecord('MJ: Test Runs', CompositeKey.FromID(run.id));
131
+ }
132
+ formatDuration(milliseconds) {
133
+ if (milliseconds < 1000)
134
+ return `${milliseconds}ms`;
135
+ const seconds = Math.floor(milliseconds / 1000);
136
+ const minutes = Math.floor(seconds / 60);
137
+ if (minutes > 0)
138
+ return `${minutes}m ${seconds % 60}s`;
139
+ return `${seconds}s`;
140
+ }
141
+ emitStateChange() {
142
+ this.stateChange.emit({
143
+ selectedSuiteId: this.selectedSuiteId
144
+ });
145
+ }
146
+ createKPICards(kpis) {
147
+ return [
148
+ {
149
+ title: 'Active Tests',
150
+ value: kpis.totalTestsActive,
151
+ icon: 'fa-flask',
152
+ color: 'primary',
153
+ subtitle: `${kpis.totalTestRuns} runs this period`
154
+ },
155
+ {
156
+ title: 'Pass Rate',
157
+ value: `${kpis.passRateThisMonth.toFixed(1)}%`,
158
+ icon: 'fa-check-circle',
159
+ color: kpis.passRateThisMonth >= 90 ? 'success' : kpis.passRateThisMonth >= 75 ? 'warning' : 'danger',
160
+ trend: kpis.passRateTrend !== 0 ? {
161
+ direction: kpis.passRateTrend > 0 ? 'up' : 'down',
162
+ percentage: Math.abs(kpis.passRateTrend),
163
+ period: 'vs previous period'
164
+ } : undefined
165
+ },
166
+ {
167
+ title: 'Total Cost',
168
+ value: `$${kpis.totalCostThisMonth.toFixed(2)}`,
169
+ icon: 'fa-dollar-sign',
170
+ color: 'warning',
171
+ subtitle: 'This period'
172
+ },
173
+ {
174
+ title: 'Avg Duration',
175
+ value: this.formatDuration(kpis.averageDuration),
176
+ icon: 'fa-clock',
177
+ color: 'info',
178
+ subtitle: 'Per test'
179
+ },
180
+ {
181
+ title: 'Pending Review',
182
+ value: kpis.testsPendingReview,
183
+ icon: 'fa-clipboard-check',
184
+ color: kpis.testsPendingReview > 10 ? 'warning' : 'success',
185
+ subtitle: 'Tests need feedback'
186
+ }
187
+ ];
188
+ }
189
+ static ɵfac = function TestingOverviewComponent_Factory(t) { return new (t || TestingOverviewComponent)(i0.ɵɵdirectiveInject(i1.TestingInstrumentationService), i0.ɵɵdirectiveInject(i0.ChangeDetectorRef)); };
190
+ static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: TestingOverviewComponent, selectors: [["app-testing-overview"]], inputs: { initialState: "initialState" }, outputs: { stateChange: "stateChange" }, decls: 35, vars: 17, consts: [[1, "testing-overview"], [1, "overview-header"], [1, "fa-solid", "fa-chart-line"], [1, "header-controls"], [1, "refresh-btn", 3, "click", "disabled"], [1, "fa-solid", "fa-refresh"], [1, "kpi-section"], [3, "data"], [1, "content-grid"], [1, "grid-item", "suite-panel"], [3, "suiteSelect", "suites", "selectedSuiteId"], [1, "grid-item", "recent-runs-panel"], [1, "panel-header"], [1, "fa-solid", "fa-history"], [1, "runs-list"], [1, "run-item"], [1, "no-data"], [1, "grid-item", "stats-panel"], [1, "fa-solid", "fa-chart-bar"], [1, "stats-content"], [1, "run-info", 3, "click"], [1, "run-name"], [1, "run-meta"], [1, "run-actions"], [1, "run-metrics"], [3, "status", "showIcon"], [3, "score", "showBar", "showIcon"], [1, "stat-item"], [1, "stat-label"], [1, "stat-value", "failed"], [1, "stat-value", "skipped"], [1, "stat-value"]], template: function TestingOverviewComponent_Template(rf, ctx) { if (rf & 1) {
191
+ i0.ɵɵelementStart(0, "div", 0)(1, "div", 1)(2, "h2");
192
+ i0.ɵɵelement(3, "i", 2);
193
+ i0.ɵɵtext(4, " Testing Overview ");
194
+ i0.ɵɵelementEnd();
195
+ i0.ɵɵelementStart(5, "div", 3)(6, "button", 4);
196
+ i0.ɵɵlistener("click", function TestingOverviewComponent_Template_button_click_6_listener() { return ctx.refreshData(); });
197
+ i0.ɵɵelement(7, "i", 5);
198
+ i0.ɵɵtext(8, " Refresh ");
199
+ i0.ɵɵelementEnd()()();
200
+ i0.ɵɵelementStart(9, "div", 6);
201
+ i0.ɵɵrepeaterCreate(10, TestingOverviewComponent_For_11_Template, 1, 1, "app-kpi-card", 7, _forTrack0);
202
+ i0.ɵɵpipe(12, "async");
203
+ i0.ɵɵelementEnd();
204
+ i0.ɵɵelementStart(13, "div", 8)(14, "div", 9)(15, "app-suite-tree", 10);
205
+ i0.ɵɵpipe(16, "async");
206
+ i0.ɵɵlistener("suiteSelect", function TestingOverviewComponent_Template_app_suite_tree_suiteSelect_15_listener($event) { return ctx.onSuiteSelect($event); });
207
+ i0.ɵɵelementEnd()();
208
+ i0.ɵɵelementStart(17, "div", 11)(18, "div", 12)(19, "h3");
209
+ i0.ɵɵelement(20, "i", 13);
210
+ i0.ɵɵtext(21, " Recent Test Runs ");
211
+ i0.ɵɵelementEnd()();
212
+ i0.ɵɵelementStart(22, "div", 14);
213
+ i0.ɵɵrepeaterCreate(23, TestingOverviewComponent_For_24_Template, 11, 11, "div", 15, _forTrack1, false, TestingOverviewComponent_ForEmpty_25_Template, 2, 0, "div", 16);
214
+ i0.ɵɵpipe(26, "async");
215
+ i0.ɵɵelementEnd()();
216
+ i0.ɵɵelementStart(27, "div", 17)(28, "div", 12)(29, "h3");
217
+ i0.ɵɵelement(30, "i", 18);
218
+ i0.ɵɵtext(31, " Quick Stats ");
219
+ i0.ɵɵelementEnd()();
220
+ i0.ɵɵelementStart(32, "div", 19);
221
+ i0.ɵɵtemplate(33, TestingOverviewComponent_Conditional_33_Template, 15, 3);
222
+ i0.ɵɵpipe(34, "async");
223
+ i0.ɵɵelementEnd()()()();
224
+ } if (rf & 2) {
225
+ let tmp_3_0;
226
+ let tmp_5_0;
227
+ let tmp_6_0;
228
+ i0.ɵɵadvance(6);
229
+ i0.ɵɵproperty("disabled", ctx.isLoading);
230
+ i0.ɵɵadvance();
231
+ i0.ɵɵclassProp("spinning", ctx.isLoading);
232
+ i0.ɵɵadvance(3);
233
+ i0.ɵɵrepeater(i0.ɵɵpipeBind1(12, 7, ctx.kpiCards$));
234
+ i0.ɵɵadvance(5);
235
+ i0.ɵɵproperty("suites", (tmp_3_0 = i0.ɵɵpipeBind1(16, 9, ctx.suiteHierarchy$)) !== null && tmp_3_0 !== undefined ? tmp_3_0 : i0.ɵɵpureFunction0(15, _c0))("selectedSuiteId", ctx.selectedSuiteId);
236
+ i0.ɵɵadvance(8);
237
+ i0.ɵɵrepeater((tmp_5_0 = i0.ɵɵpipeBind1(26, 11, ctx.recentRuns$)) !== null && tmp_5_0 !== undefined ? tmp_5_0 : i0.ɵɵpureFunction0(16, _c0));
238
+ i0.ɵɵadvance(10);
239
+ i0.ɵɵconditional((tmp_6_0 = i0.ɵɵpipeBind1(34, 13, ctx.kpis$)) ? 33 : -1, tmp_6_0);
240
+ } }, dependencies: [i2.TestStatusBadgeComponent, i2.ScoreIndicatorComponent, i3.KPICardComponent, i4.SuiteTreeComponent, i5.AsyncPipe, i5.DatePipe], styles: [".testing-overview[_ngcontent-%COMP%] {\n padding: 20px;\n height: 100%;\n overflow-y: auto;\n background: #f8f9fa;\n }\n\n .overview-header[_ngcontent-%COMP%] {\n display: flex;\n justify-content: space-between;\n align-items: center;\n margin-bottom: 24px;\n background: white;\n padding: 20px;\n border-radius: 8px;\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);\n }\n\n .overview-header[_ngcontent-%COMP%] h2[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 20px;\n font-weight: 600;\n color: #333;\n display: flex;\n align-items: center;\n gap: 12px;\n }\n\n .overview-header[_ngcontent-%COMP%] h2[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: #2196f3;\n }\n\n .refresh-btn[_ngcontent-%COMP%] {\n background: #2196f3;\n color: white;\n border: none;\n padding: 8px 16px;\n border-radius: 4px;\n cursor: pointer;\n display: flex;\n align-items: center;\n gap: 6px;\n font-size: 12px;\n font-weight: 500;\n transition: background 0.2s ease;\n }\n\n .refresh-btn[_ngcontent-%COMP%]:hover:not(:disabled) {\n background: #1976d2;\n }\n\n .refresh-btn[_ngcontent-%COMP%]:disabled {\n opacity: 0.6;\n cursor: not-allowed;\n }\n\n .refresh-btn[_ngcontent-%COMP%] i.spinning[_ngcontent-%COMP%] {\n animation: _ngcontent-%COMP%_spin 1s linear infinite;\n }\n\n @keyframes _ngcontent-%COMP%_spin {\n from { transform: rotate(0deg); }\n to { transform: rotate(360deg); }\n }\n\n .kpi-section[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));\n gap: 16px;\n margin-bottom: 24px;\n }\n\n .content-grid[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: 300px 1fr 250px;\n gap: 20px;\n min-height: 500px;\n }\n\n .grid-item[_ngcontent-%COMP%] {\n background: white;\n border-radius: 8px;\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);\n overflow: hidden;\n }\n\n .panel-header[_ngcontent-%COMP%] {\n padding: 16px;\n background: #f8f9fa;\n border-bottom: 1px solid #e0e0e0;\n }\n\n .panel-header[_ngcontent-%COMP%] h3[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 14px;\n font-weight: 600;\n color: #333;\n display: flex;\n align-items: center;\n gap: 8px;\n }\n\n .panel-header[_ngcontent-%COMP%] h3[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: #2196f3;\n }\n\n .runs-list[_ngcontent-%COMP%] {\n max-height: 600px;\n overflow-y: auto;\n }\n\n .run-item[_ngcontent-%COMP%] {\n padding: 16px;\n border-bottom: 1px solid #f0f0f0;\n display: flex;\n justify-content: space-between;\n align-items: center;\n transition: background 0.2s ease;\n }\n\n .run-item[_ngcontent-%COMP%]:hover {\n background: #f8f9fa;\n }\n\n .run-info[_ngcontent-%COMP%] {\n flex: 1;\n cursor: pointer;\n }\n\n .run-name[_ngcontent-%COMP%] {\n font-size: 13px;\n font-weight: 500;\n color: #333;\n margin-bottom: 4px;\n }\n\n .run-meta[_ngcontent-%COMP%] {\n font-size: 11px;\n color: #666;\n }\n\n .run-actions[_ngcontent-%COMP%] {\n display: flex;\n gap: 12px;\n align-items: center;\n }\n\n .run-metrics[_ngcontent-%COMP%] {\n display: flex;\n gap: 12px;\n align-items: center;\n }\n\n .rerun-btn[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 32px;\n height: 32px;\n border: 1px solid #2196f3;\n border-radius: 4px;\n background: white;\n color: #2196f3;\n cursor: pointer;\n transition: all 0.2s ease;\n padding: 0;\n }\n\n .rerun-btn[_ngcontent-%COMP%]:hover:not(:disabled) {\n background: #2196f3;\n color: white;\n }\n\n .rerun-btn[_ngcontent-%COMP%]:disabled {\n opacity: 0.6;\n cursor: not-allowed;\n }\n\n .rerun-btn[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 14px;\n }\n\n .stats-content[_ngcontent-%COMP%] {\n padding: 16px;\n display: flex;\n flex-direction: column;\n gap: 16px;\n }\n\n .stat-item[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 6px;\n }\n\n .stat-label[_ngcontent-%COMP%] {\n font-size: 11px;\n color: #666;\n font-weight: 600;\n text-transform: uppercase;\n }\n\n .stat-value[_ngcontent-%COMP%] {\n font-size: 20px;\n font-weight: 700;\n color: #333;\n }\n\n .stat-value.failed[_ngcontent-%COMP%] {\n color: #f44336;\n }\n\n .stat-value.skipped[_ngcontent-%COMP%] {\n color: #9e9e9e;\n }\n\n .no-data[_ngcontent-%COMP%] {\n padding: 40px 20px;\n text-align: center;\n color: #999;\n font-size: 13px;\n }\n\n @media (max-width: 1200px) {\n .content-grid[_ngcontent-%COMP%] {\n grid-template-columns: 1fr 1fr;\n }\n\n .stats-panel[_ngcontent-%COMP%] {\n grid-column: 1 / -1;\n }\n }\n\n @media (max-width: 768px) {\n .content-grid[_ngcontent-%COMP%] {\n grid-template-columns: 1fr;\n }\n }"], changeDetection: 0 });
241
+ }
242
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(TestingOverviewComponent, [{
243
+ type: Component,
244
+ args: [{ selector: 'app-testing-overview', changeDetection: ChangeDetectionStrategy.OnPush, template: `
245
+ <div class="testing-overview">
246
+ <div class="overview-header">
247
+ <h2>
248
+ <i class="fa-solid fa-chart-line"></i>
249
+ Testing Overview
250
+ </h2>
251
+ <div class="header-controls">
252
+ <button class="refresh-btn" (click)="refreshData()" [disabled]="isLoading">
253
+ <i class="fa-solid fa-refresh" [class.spinning]="isLoading"></i>
254
+ Refresh
255
+ </button>
256
+ </div>
257
+ </div>
258
+
259
+ <!-- KPI Cards -->
260
+ <div class="kpi-section">
261
+ @for (kpi of kpiCards$ | async; track kpi.title) {
262
+ <app-kpi-card [data]="kpi"></app-kpi-card>
263
+ }
264
+ </div>
265
+
266
+ <!-- Main Content Grid -->
267
+ <div class="content-grid">
268
+ <!-- Suite Hierarchy -->
269
+ <div class="grid-item suite-panel">
270
+ <app-suite-tree
271
+ [suites]="(suiteHierarchy$ | async) ?? []"
272
+ [selectedSuiteId]="selectedSuiteId"
273
+ (suiteSelect)="onSuiteSelect($event)"
274
+ ></app-suite-tree>
275
+ </div>
276
+
277
+ <!-- Recent Test Runs -->
278
+ <div class="grid-item recent-runs-panel">
279
+ <div class="panel-header">
280
+ <h3>
281
+ <i class="fa-solid fa-history"></i>
282
+ Recent Test Runs
283
+ </h3>
284
+ </div>
285
+ <div class="runs-list">
286
+ @for (run of (recentRuns$ | async) ?? []; track run.id) {
287
+ <div class="run-item">
288
+ <div class="run-info" (click)="viewRunDetail(run)">
289
+ <div class="run-name">{{ run.testName }}</div>
290
+ <div class="run-meta">
291
+ {{ run.runDateTime | date:'short' }} • {{ run.testType }}
292
+ </div>
293
+ </div>
294
+ <div class="run-actions">
295
+ <div class="run-metrics">
296
+ <app-test-status-badge [status]="run.status" [showIcon]="false"></app-test-status-badge>
297
+ <app-score-indicator [score]="run.score" [showBar]="false" [showIcon]="false"></app-score-indicator>
298
+ </div>
299
+ </div>
300
+ </div>
301
+ } @empty {
302
+ <div class="no-data">No recent test runs</div>
303
+ }
304
+ </div>
305
+ </div>
306
+
307
+ <!-- Quick Stats -->
308
+ <div class="grid-item stats-panel">
309
+ <div class="panel-header">
310
+ <h3>
311
+ <i class="fa-solid fa-chart-bar"></i>
312
+ Quick Stats
313
+ </h3>
314
+ </div>
315
+ <div class="stats-content">
316
+ @if (kpis$ | async; as kpis) {
317
+ <div class="stat-item">
318
+ <div class="stat-label">Failed Tests</div>
319
+ <div class="stat-value failed">{{ kpis.failedTests }}</div>
320
+ </div>
321
+ <div class="stat-item">
322
+ <div class="stat-label">Skipped Tests</div>
323
+ <div class="stat-value skipped">{{ kpis.skippedTests }}</div>
324
+ </div>
325
+ <div class="stat-item">
326
+ <div class="stat-label">Avg Duration</div>
327
+ <div class="stat-value">{{ formatDuration(kpis.averageDuration) }}</div>
328
+ </div>
329
+ }
330
+ </div>
331
+ </div>
332
+ </div>
333
+ </div>
334
+ `, styles: ["\n .testing-overview {\n padding: 20px;\n height: 100%;\n overflow-y: auto;\n background: #f8f9fa;\n }\n\n .overview-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n margin-bottom: 24px;\n background: white;\n padding: 20px;\n border-radius: 8px;\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);\n }\n\n .overview-header h2 {\n margin: 0;\n font-size: 20px;\n font-weight: 600;\n color: #333;\n display: flex;\n align-items: center;\n gap: 12px;\n }\n\n .overview-header h2 i {\n color: #2196f3;\n }\n\n .refresh-btn {\n background: #2196f3;\n color: white;\n border: none;\n padding: 8px 16px;\n border-radius: 4px;\n cursor: pointer;\n display: flex;\n align-items: center;\n gap: 6px;\n font-size: 12px;\n font-weight: 500;\n transition: background 0.2s ease;\n }\n\n .refresh-btn:hover:not(:disabled) {\n background: #1976d2;\n }\n\n .refresh-btn:disabled {\n opacity: 0.6;\n cursor: not-allowed;\n }\n\n .refresh-btn i.spinning {\n animation: spin 1s linear infinite;\n }\n\n @keyframes spin {\n from { transform: rotate(0deg); }\n to { transform: rotate(360deg); }\n }\n\n .kpi-section {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));\n gap: 16px;\n margin-bottom: 24px;\n }\n\n .content-grid {\n display: grid;\n grid-template-columns: 300px 1fr 250px;\n gap: 20px;\n min-height: 500px;\n }\n\n .grid-item {\n background: white;\n border-radius: 8px;\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);\n overflow: hidden;\n }\n\n .panel-header {\n padding: 16px;\n background: #f8f9fa;\n border-bottom: 1px solid #e0e0e0;\n }\n\n .panel-header h3 {\n margin: 0;\n font-size: 14px;\n font-weight: 600;\n color: #333;\n display: flex;\n align-items: center;\n gap: 8px;\n }\n\n .panel-header h3 i {\n color: #2196f3;\n }\n\n .runs-list {\n max-height: 600px;\n overflow-y: auto;\n }\n\n .run-item {\n padding: 16px;\n border-bottom: 1px solid #f0f0f0;\n display: flex;\n justify-content: space-between;\n align-items: center;\n transition: background 0.2s ease;\n }\n\n .run-item:hover {\n background: #f8f9fa;\n }\n\n .run-info {\n flex: 1;\n cursor: pointer;\n }\n\n .run-name {\n font-size: 13px;\n font-weight: 500;\n color: #333;\n margin-bottom: 4px;\n }\n\n .run-meta {\n font-size: 11px;\n color: #666;\n }\n\n .run-actions {\n display: flex;\n gap: 12px;\n align-items: center;\n }\n\n .run-metrics {\n display: flex;\n gap: 12px;\n align-items: center;\n }\n\n .rerun-btn {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 32px;\n height: 32px;\n border: 1px solid #2196f3;\n border-radius: 4px;\n background: white;\n color: #2196f3;\n cursor: pointer;\n transition: all 0.2s ease;\n padding: 0;\n }\n\n .rerun-btn:hover:not(:disabled) {\n background: #2196f3;\n color: white;\n }\n\n .rerun-btn:disabled {\n opacity: 0.6;\n cursor: not-allowed;\n }\n\n .rerun-btn i {\n font-size: 14px;\n }\n\n .stats-content {\n padding: 16px;\n display: flex;\n flex-direction: column;\n gap: 16px;\n }\n\n .stat-item {\n display: flex;\n flex-direction: column;\n gap: 6px;\n }\n\n .stat-label {\n font-size: 11px;\n color: #666;\n font-weight: 600;\n text-transform: uppercase;\n }\n\n .stat-value {\n font-size: 20px;\n font-weight: 700;\n color: #333;\n }\n\n .stat-value.failed {\n color: #f44336;\n }\n\n .stat-value.skipped {\n color: #9e9e9e;\n }\n\n .no-data {\n padding: 40px 20px;\n text-align: center;\n color: #999;\n font-size: 13px;\n }\n\n @media (max-width: 1200px) {\n .content-grid {\n grid-template-columns: 1fr 1fr;\n }\n\n .stats-panel {\n grid-column: 1 / -1;\n }\n }\n\n @media (max-width: 768px) {\n .content-grid {\n grid-template-columns: 1fr;\n }\n }\n "] }]
335
+ }], () => [{ type: i1.TestingInstrumentationService }, { type: i0.ChangeDetectorRef }], { initialState: [{
336
+ type: Input
337
+ }], stateChange: [{
338
+ type: Output
339
+ }] }); })();
340
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(TestingOverviewComponent, { className: "TestingOverviewComponent", filePath: "src/Testing/components/testing-overview.component.ts", lineNumber: 345 }); })();
341
+ //# sourceMappingURL=testing-overview.component.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"testing-overview.component.js","sourceRoot":"","sources":["../../../src/Testing/components/testing-overview.component.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,58 @@
1
+ import { OnInit, OnDestroy, EventEmitter, ChangeDetectorRef } from '@angular/core';
2
+ import { Observable } from 'rxjs';
3
+ import { TestingInstrumentationService, VersionMetrics } from '../services/testing-instrumentation.service';
4
+ import * as i0 from "@angular/core";
5
+ interface VersionComparison {
6
+ testName: string;
7
+ versionA: VersionTestData;
8
+ versionB: VersionTestData;
9
+ regression: boolean;
10
+ improvement: boolean;
11
+ scoreDelta: number;
12
+ costDelta: number;
13
+ durationDelta: number;
14
+ }
15
+ interface VersionTestData {
16
+ avgScore: number;
17
+ avgCost: number;
18
+ avgDuration: number;
19
+ passRate: number;
20
+ runCount: number;
21
+ }
22
+ export declare class TestingVersionComparisonComponent implements OnInit, OnDestroy {
23
+ private instrumentationService;
24
+ private cdr;
25
+ initialState?: any;
26
+ stateChange: EventEmitter<any>;
27
+ private destroy$;
28
+ versionA: string;
29
+ versionB: string;
30
+ filter: 'all' | 'regressions' | 'improvements' | 'unchanged';
31
+ versions$: Observable<VersionMetrics[]>;
32
+ comparisons$: Observable<VersionComparison[]>;
33
+ filteredComparisons$: Observable<VersionComparison[]>;
34
+ regressionCount$: Observable<number>;
35
+ improvementCount$: Observable<number>;
36
+ unchangedCount$: Observable<number>;
37
+ totalCostDelta$: Observable<number>;
38
+ versionAMetrics$: Observable<any>;
39
+ versionBMetrics$: Observable<any>;
40
+ constructor(instrumentationService: TestingInstrumentationService, cdr: ChangeDetectorRef);
41
+ ngOnInit(): void;
42
+ ngOnDestroy(): void;
43
+ private setupObservables;
44
+ private generateComparisons;
45
+ private getRunsForVersion;
46
+ private aggregateTestData;
47
+ private filterComparisons;
48
+ private calculateVersionMetrics;
49
+ onVersionChange(): void;
50
+ setFilter(filter: 'all' | 'regressions' | 'improvements' | 'unchanged'): void;
51
+ refresh(): void;
52
+ formatDuration(milliseconds: number): string;
53
+ private emitStateChange;
54
+ static ɵfac: i0.ɵɵFactoryDeclaration<TestingVersionComparisonComponent, never>;
55
+ static ɵcmp: i0.ɵɵComponentDeclaration<TestingVersionComparisonComponent, "app-testing-version-comparison", never, { "initialState": { "alias": "initialState"; "required": false; }; }, { "stateChange": "stateChange"; }, never, never, false, never>;
56
+ }
57
+ export {};
58
+ //# sourceMappingURL=testing-version-comparison.component.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"testing-version-comparison.component.d.ts","sourceRoot":"","sources":["../../../src/Testing/components/testing-version-comparison.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,MAAM,EAAE,SAAS,EAAiB,YAAY,EAAE,iBAAiB,EAA2B,MAAM,eAAe,CAAC;AACtI,OAAO,EAAE,UAAU,EAA8B,MAAM,MAAM,CAAC;AAE9D,OAAO,EAAE,6BAA6B,EAAE,cAAc,EAAE,MAAM,6CAA6C,CAAC;;AAE5G,UAAU,iBAAiB;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,eAAe,CAAC;IAC1B,QAAQ,EAAE,eAAe,CAAC;IAC1B,UAAU,EAAE,OAAO,CAAC;IACpB,WAAW,EAAE,OAAO,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,UAAU,eAAe;IACvB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,qBAgqBa,iCAAkC,YAAW,MAAM,EAAE,SAAS;IAqBvE,OAAO,CAAC,sBAAsB;IAC9B,OAAO,CAAC,GAAG;IArBJ,YAAY,CAAC,EAAE,GAAG,CAAC;IAClB,WAAW,oBAA2B;IAEhD,OAAO,CAAC,QAAQ,CAAuB;IAEvC,QAAQ,SAAM;IACd,QAAQ,SAAM;IACd,MAAM,EAAE,KAAK,GAAG,aAAa,GAAG,cAAc,GAAG,WAAW,CAAS;IAErE,SAAS,EAAG,UAAU,CAAC,cAAc,EAAE,CAAC,CAAC;IACzC,YAAY,EAAG,UAAU,CAAC,iBAAiB,EAAE,CAAC,CAAC;IAC/C,oBAAoB,EAAG,UAAU,CAAC,iBAAiB,EAAE,CAAC,CAAC;IACvD,gBAAgB,EAAG,UAAU,CAAC,MAAM,CAAC,CAAC;IACtC,iBAAiB,EAAG,UAAU,CAAC,MAAM,CAAC,CAAC;IACvC,eAAe,EAAG,UAAU,CAAC,MAAM,CAAC,CAAC;IACrC,eAAe,EAAG,UAAU,CAAC,MAAM,CAAC,CAAC;IACrC,gBAAgB,EAAG,UAAU,CAAC,GAAG,CAAC,CAAC;IACnC,gBAAgB,EAAG,UAAU,CAAC,GAAG,CAAC,CAAC;gBAGzB,sBAAsB,EAAE,6BAA6B,EACrD,GAAG,EAAE,iBAAiB;IAGhC,QAAQ,IAAI,IAAI;IAUhB,WAAW,IAAI,IAAI;IAKnB,OAAO,CAAC,gBAAgB;IAgDxB,OAAO,CAAC,mBAAmB;IAuC3B,OAAO,CAAC,iBAAiB;IAIzB,OAAO,CAAC,iBAAiB;IAsBzB,OAAO,CAAC,iBAAiB;IAQzB,OAAO,CAAC,uBAAuB;IAsB/B,eAAe,IAAI,IAAI;IAKvB,SAAS,CAAC,MAAM,EAAE,KAAK,GAAG,aAAa,GAAG,cAAc,GAAG,WAAW,GAAG,IAAI;IAM7E,OAAO,IAAI,IAAI;IAIf,cAAc,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM;IAQ5C,OAAO,CAAC,eAAe;yCA9MZ,iCAAiC;2CAAjC,iCAAiC;CAqN7C"}