@memberjunction/ng-core-entity-forms 2.117.0 → 2.118.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.
- package/dist/lib/custom/Tests/test-form.component.d.ts +53 -0
- package/dist/lib/custom/Tests/test-form.component.d.ts.map +1 -0
- package/dist/lib/custom/Tests/test-form.component.js +718 -0
- package/dist/lib/custom/Tests/test-form.component.js.map +1 -0
- package/dist/lib/custom/Tests/test-rubric-form.component.d.ts +16 -0
- package/dist/lib/custom/Tests/test-rubric-form.component.d.ts.map +1 -0
- package/dist/lib/custom/Tests/test-rubric-form.component.js +138 -0
- package/dist/lib/custom/Tests/test-rubric-form.component.js.map +1 -0
- package/dist/lib/custom/Tests/test-run-feedback-form.component.d.ts +17 -0
- package/dist/lib/custom/Tests/test-run-feedback-form.component.d.ts.map +1 -0
- package/dist/lib/custom/Tests/test-run-feedback-form.component.js +134 -0
- package/dist/lib/custom/Tests/test-run-feedback-form.component.js.map +1 -0
- package/dist/lib/custom/Tests/test-run-form.component.d.ts +58 -0
- package/dist/lib/custom/Tests/test-run-form.component.d.ts.map +1 -0
- package/dist/lib/custom/Tests/test-run-form.component.js +921 -0
- package/dist/lib/custom/Tests/test-run-form.component.js.map +1 -0
- package/dist/lib/custom/Tests/test-suite-form.component.d.ts +32 -0
- package/dist/lib/custom/Tests/test-suite-form.component.d.ts.map +1 -0
- package/dist/lib/custom/Tests/test-suite-form.component.js +355 -0
- package/dist/lib/custom/Tests/test-suite-form.component.js.map +1 -0
- package/dist/lib/custom/Tests/test-suite-run-form.component.d.ts +36 -0
- package/dist/lib/custom/Tests/test-suite-run-form.component.d.ts.map +1 -0
- package/dist/lib/custom/Tests/test-suite-run-form.component.js +571 -0
- package/dist/lib/custom/Tests/test-suite-run-form.component.js.map +1 -0
- package/dist/lib/custom/custom-forms.module.d.ts +29 -23
- package/dist/lib/custom/custom-forms.module.d.ts.map +1 -1
- package/dist/lib/custom/custom-forms.module.js +39 -3
- package/dist/lib/custom/custom-forms.module.js.map +1 -1
- package/dist/lib/generated/Entities/AIAgent/aiagent.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/AIAgent/aiagent.form.component.js +63 -45
- package/dist/lib/generated/Entities/AIAgent/aiagent.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/AIAgentConfiguration/aiagentconfiguration.form.component.d.ts +11 -0
- package/dist/lib/generated/Entities/AIAgentConfiguration/aiagentconfiguration.form.component.d.ts.map +1 -0
- package/dist/lib/generated/Entities/AIAgentConfiguration/aiagentconfiguration.form.component.js +79 -0
- package/dist/lib/generated/Entities/AIAgentConfiguration/aiagentconfiguration.form.component.js.map +1 -0
- package/dist/lib/generated/Entities/AIAgentExample/aiagentexample.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/AIAgentExample/aiagentexample.form.component.js +2 -12
- package/dist/lib/generated/Entities/AIAgentExample/aiagentexample.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/AIAgentNote/aiagentnote.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/AIAgentNote/aiagentnote.form.component.js +2 -12
- package/dist/lib/generated/Entities/AIAgentNote/aiagentnote.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/AIAgentRun/aiagentrun.form.component.js +32 -30
- package/dist/lib/generated/Entities/AIAgentRun/aiagentrun.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/AIAgentRunStep/aiagentrunstep.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/AIAgentRunStep/aiagentrunstep.form.component.js +6 -16
- package/dist/lib/generated/Entities/AIAgentRunStep/aiagentrunstep.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/AIConfiguration/aiconfiguration.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/AIConfiguration/aiconfiguration.form.component.js +37 -19
- package/dist/lib/generated/Entities/AIConfiguration/aiconfiguration.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/AIPromptRun/aipromptrun.form.component.js +17 -15
- package/dist/lib/generated/Entities/AIPromptRun/aipromptrun.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/AIResultCache/airesultcache.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/AIResultCache/airesultcache.form.component.js +3 -11
- package/dist/lib/generated/Entities/AIResultCache/airesultcache.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/ArtifactType/artifacttype.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/ArtifactType/artifacttype.form.component.js +9 -13
- package/dist/lib/generated/Entities/ArtifactType/artifacttype.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/CommunicationLog/communicationlog.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/CommunicationLog/communicationlog.form.component.js +3 -11
- package/dist/lib/generated/Entities/CommunicationLog/communicationlog.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/CompanyIntegrationRunAPILog/companyintegrationrunapilog.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/CompanyIntegrationRunAPILog/companyintegrationrunapilog.form.component.js +3 -11
- package/dist/lib/generated/Entities/CompanyIntegrationRunAPILog/companyintegrationrunapilog.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/ContentFileType/contentfiletype.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/ContentFileType/contentfiletype.form.component.js +14 -20
- package/dist/lib/generated/Entities/ContentFileType/contentfiletype.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/ContentItem/contentitem.form.component.js +13 -13
- package/dist/lib/generated/Entities/ContentItem/contentitem.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/ContentItemAttribute/contentitemattribute.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/ContentItemAttribute/contentitemattribute.form.component.js +9 -15
- package/dist/lib/generated/Entities/ContentItemAttribute/contentitemattribute.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/ContentItemTag/contentitemtag.form.component.js +10 -10
- package/dist/lib/generated/Entities/ContentItemTag/contentitemtag.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/ContentProcessRun/contentprocessrun.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/ContentProcessRun/contentprocessrun.form.component.js +8 -14
- package/dist/lib/generated/Entities/ContentProcessRun/contentprocessrun.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/ContentSource/contentsource.form.component.js +13 -13
- package/dist/lib/generated/Entities/ContentSource/contentsource.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/ContentSourceParam/contentsourceparam.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/ContentSourceParam/contentsourceparam.form.component.js +8 -14
- package/dist/lib/generated/Entities/ContentSourceParam/contentsourceparam.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/ContentSourceType/contentsourcetype.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/ContentSourceType/contentsourcetype.form.component.js +14 -20
- package/dist/lib/generated/Entities/ContentSourceType/contentsourcetype.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/ContentSourceTypeParam/contentsourcetypeparam.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/ContentSourceTypeParam/contentsourcetypeparam.form.component.js +4 -16
- package/dist/lib/generated/Entities/ContentSourceTypeParam/contentsourcetypeparam.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/ContentType/contenttype.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/ContentType/contenttype.form.component.js +17 -23
- package/dist/lib/generated/Entities/ContentType/contenttype.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/ContentTypeAttribute/contenttypeattribute.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/ContentTypeAttribute/contenttypeattribute.form.component.js +5 -17
- package/dist/lib/generated/Entities/ContentTypeAttribute/contenttypeattribute.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/Conversation/conversation.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/Conversation/conversation.form.component.js +40 -32
- package/dist/lib/generated/Entities/Conversation/conversation.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/ConversationDetail/conversationdetail.form.component.js +64 -56
- package/dist/lib/generated/Entities/ConversationDetail/conversationdetail.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/ConversationDetailArtifact/conversationdetailartifact.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/ConversationDetailArtifact/conversationdetailartifact.form.component.js +3 -11
- package/dist/lib/generated/Entities/ConversationDetailArtifact/conversationdetailartifact.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/ConversationDetailRating/conversationdetailrating.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/ConversationDetailRating/conversationdetailrating.form.component.js +3 -11
- package/dist/lib/generated/Entities/ConversationDetailRating/conversationdetailrating.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/DuplicateRunDetail/duplicaterundetail.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/DuplicateRunDetail/duplicaterundetail.form.component.js +8 -16
- package/dist/lib/generated/Entities/DuplicateRunDetail/duplicaterundetail.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/DuplicateRunDetailMatch/duplicaterundetailmatch.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/DuplicateRunDetailMatch/duplicaterundetailmatch.form.component.js +2 -12
- package/dist/lib/generated/Entities/DuplicateRunDetailMatch/duplicaterundetailmatch.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/EmployeeCompanyIntegration/employeecompanyintegration.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/EmployeeCompanyIntegration/employeecompanyintegration.form.component.js +3 -11
- package/dist/lib/generated/Entities/EmployeeCompanyIntegration/employeecompanyintegration.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/EmployeeRole/employeerole.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/EmployeeRole/employeerole.form.component.js +4 -12
- package/dist/lib/generated/Entities/EmployeeRole/employeerole.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/EmployeeSkill/employeeskill.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/EmployeeSkill/employeeskill.form.component.js +3 -11
- package/dist/lib/generated/Entities/EmployeeSkill/employeeskill.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/EntityActionFilter/entityactionfilter.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/EntityActionFilter/entityactionfilter.form.component.js +2 -12
- package/dist/lib/generated/Entities/EntityActionFilter/entityactionfilter.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/EntityActionInvocation/entityactioninvocation.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/EntityActionInvocation/entityactioninvocation.form.component.js +3 -11
- package/dist/lib/generated/Entities/EntityActionInvocation/entityactioninvocation.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/EntityActionParam/entityactionparam.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/EntityActionParam/entityactionparam.form.component.js +3 -11
- package/dist/lib/generated/Entities/EntityActionParam/entityactionparam.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/EntityCommunicationField/entitycommunicationfield.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/EntityCommunicationField/entitycommunicationfield.form.component.js +3 -11
- package/dist/lib/generated/Entities/EntityCommunicationField/entitycommunicationfield.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/EntityFieldValue/entityfieldvalue.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/EntityFieldValue/entityfieldvalue.form.component.js +10 -15
- package/dist/lib/generated/Entities/EntityFieldValue/entityfieldvalue.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/ErrorLog/errorlog.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/ErrorLog/errorlog.form.component.js +2 -12
- package/dist/lib/generated/Entities/ErrorLog/errorlog.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/Recommendation/recommendation.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/Recommendation/recommendation.form.component.js +8 -16
- package/dist/lib/generated/Entities/Recommendation/recommendation.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/RecommendationItem/recommendationitem.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/RecommendationItem/recommendationitem.form.component.js +3 -11
- package/dist/lib/generated/Entities/RecommendationItem/recommendationitem.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/RecordChange/recordchange.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/RecordChange/recordchange.form.component.js +3 -11
- package/dist/lib/generated/Entities/RecordChange/recordchange.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/RecordMergeDeletionLog/recordmergedeletionlog.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/RecordMergeDeletionLog/recordmergedeletionlog.form.component.js +3 -11
- package/dist/lib/generated/Entities/RecordMergeDeletionLog/recordmergedeletionlog.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/Report/report.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/Report/report.form.component.js +17 -25
- package/dist/lib/generated/Entities/Report/report.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/ResourceLink/resourcelink.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/ResourceLink/resourcelink.form.component.js +4 -16
- package/dist/lib/generated/Entities/ResourceLink/resourcelink.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/ResourcePermission/resourcepermission.form.component.js +17 -17
- package/dist/lib/generated/Entities/ResourcePermission/resourcepermission.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/ResourceType/resourcetype.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/ResourceType/resourcetype.form.component.js +32 -26
- package/dist/lib/generated/Entities/ResourceType/resourcetype.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/Task/task.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/Task/task.form.component.js +17 -25
- package/dist/lib/generated/Entities/Task/task.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/TemplateParam/templateparam.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/TemplateParam/templateparam.form.component.js +3 -11
- package/dist/lib/generated/Entities/TemplateParam/templateparam.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/Test/test.form.component.d.ts +11 -0
- package/dist/lib/generated/Entities/Test/test.form.component.d.ts.map +1 -0
- package/dist/lib/generated/Entities/Test/test.form.component.js +129 -0
- package/dist/lib/generated/Entities/Test/test.form.component.js.map +1 -0
- package/dist/lib/generated/Entities/TestRubric/testrubric.form.component.d.ts +11 -0
- package/dist/lib/generated/Entities/TestRubric/testrubric.form.component.d.ts.map +1 -0
- package/dist/lib/generated/Entities/TestRubric/testrubric.form.component.js +63 -0
- package/dist/lib/generated/Entities/TestRubric/testrubric.form.component.js.map +1 -0
- package/dist/lib/generated/Entities/TestRun/testrun.form.component.d.ts +11 -0
- package/dist/lib/generated/Entities/TestRun/testrun.form.component.d.ts.map +1 -0
- package/dist/lib/generated/Entities/TestRun/testrun.form.component.js +183 -0
- package/dist/lib/generated/Entities/TestRun/testrun.form.component.js.map +1 -0
- package/dist/lib/generated/Entities/TestRunFeedback/testrunfeedback.form.component.d.ts +11 -0
- package/dist/lib/generated/Entities/TestRunFeedback/testrunfeedback.form.component.d.ts.map +1 -0
- package/dist/lib/generated/Entities/TestRunFeedback/testrunfeedback.form.component.js +63 -0
- package/dist/lib/generated/Entities/TestRunFeedback/testrunfeedback.form.component.js.map +1 -0
- package/dist/lib/generated/Entities/TestSuite/testsuite.form.component.d.ts +11 -0
- package/dist/lib/generated/Entities/TestSuite/testsuite.form.component.d.ts.map +1 -0
- package/dist/lib/generated/Entities/TestSuite/testsuite.form.component.js +119 -0
- package/dist/lib/generated/Entities/TestSuite/testsuite.form.component.js.map +1 -0
- package/dist/lib/generated/Entities/TestSuiteRun/testsuiterun.form.component.d.ts +11 -0
- package/dist/lib/generated/Entities/TestSuiteRun/testsuiterun.form.component.d.ts.map +1 -0
- package/dist/lib/generated/Entities/TestSuiteRun/testsuiterun.form.component.js +109 -0
- package/dist/lib/generated/Entities/TestSuiteRun/testsuiterun.form.component.js.map +1 -0
- package/dist/lib/generated/Entities/TestSuiteTest/testsuitetest.form.component.d.ts +11 -0
- package/dist/lib/generated/Entities/TestSuiteTest/testsuitetest.form.component.d.ts.map +1 -0
- package/dist/lib/generated/Entities/TestSuiteTest/testsuitetest.form.component.js +61 -0
- package/dist/lib/generated/Entities/TestSuiteTest/testsuitetest.form.component.js.map +1 -0
- package/dist/lib/generated/Entities/TestType/testtype.form.component.d.ts +11 -0
- package/dist/lib/generated/Entities/TestType/testtype.form.component.d.ts.map +1 -0
- package/dist/lib/generated/Entities/TestType/testtype.form.component.js +93 -0
- package/dist/lib/generated/Entities/TestType/testtype.form.component.js.map +1 -0
- package/dist/lib/generated/Entities/User/user.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/User/user.form.component.js +162 -108
- package/dist/lib/generated/Entities/User/user.form.component.js.map +1 -1
- package/dist/lib/generated/generated-forms.module.d.ts +133 -119
- package/dist/lib/generated/generated-forms.module.d.ts.map +1 -1
- package/dist/lib/generated/generated-forms.module.js +163 -70
- package/dist/lib/generated/generated-forms.module.js.map +1 -1
- package/package.json +17 -17
|
@@ -0,0 +1,718 @@
|
|
|
1
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
2
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
3
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
4
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
5
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
|
+
};
|
|
7
|
+
import { Component, ChangeDetectionStrategy } from '@angular/core';
|
|
8
|
+
import { Subject } from 'rxjs';
|
|
9
|
+
import { CompositeKey, RunView } from '@memberjunction/core';
|
|
10
|
+
import { BaseFormComponent } from '@memberjunction/ng-base-forms';
|
|
11
|
+
import { RegisterClass } from '@memberjunction/global';
|
|
12
|
+
import { SharedService } from '@memberjunction/ng-shared';
|
|
13
|
+
import { TestFormComponent } from '../../generated/Entities/Test/test.form.component';
|
|
14
|
+
import * as i0 from "@angular/core";
|
|
15
|
+
import * as i1 from "@memberjunction/ng-shared";
|
|
16
|
+
import * as i2 from "@angular/router";
|
|
17
|
+
import * as i3 from "@angular/common";
|
|
18
|
+
import * as i4 from "@angular/forms";
|
|
19
|
+
import * as i5 from "@progress/kendo-angular-buttons";
|
|
20
|
+
function TestFormComponentExtended_div_20_Template(rf, ctx) { if (rf & 1) {
|
|
21
|
+
i0.ɵɵelementStart(0, "div", 29)(1, "p");
|
|
22
|
+
i0.ɵɵtext(2);
|
|
23
|
+
i0.ɵɵelementEnd()();
|
|
24
|
+
} if (rf & 2) {
|
|
25
|
+
const ctx_r0 = i0.ɵɵnextContext();
|
|
26
|
+
i0.ɵɵadvance(2);
|
|
27
|
+
i0.ɵɵtextInterpolate(ctx_r0.record.Description);
|
|
28
|
+
} }
|
|
29
|
+
function TestFormComponentExtended_div_21_Template(rf, ctx) { if (rf & 1) {
|
|
30
|
+
i0.ɵɵelementStart(0, "div", 30)(1, "div", 31)(2, "div", 32);
|
|
31
|
+
i0.ɵɵtext(3, "Total Runs");
|
|
32
|
+
i0.ɵɵelementEnd();
|
|
33
|
+
i0.ɵɵelementStart(4, "div", 33);
|
|
34
|
+
i0.ɵɵtext(5);
|
|
35
|
+
i0.ɵɵelementEnd()();
|
|
36
|
+
i0.ɵɵelementStart(6, "div", 31)(7, "div", 32);
|
|
37
|
+
i0.ɵɵtext(8, "Pass Rate");
|
|
38
|
+
i0.ɵɵelementEnd();
|
|
39
|
+
i0.ɵɵelementStart(9, "div", 33);
|
|
40
|
+
i0.ɵɵtext(10);
|
|
41
|
+
i0.ɵɵelementEnd()();
|
|
42
|
+
i0.ɵɵelementStart(11, "div", 31)(12, "div", 32);
|
|
43
|
+
i0.ɵɵtext(13, "Avg Cost");
|
|
44
|
+
i0.ɵɵelementEnd();
|
|
45
|
+
i0.ɵɵelementStart(14, "div", 33);
|
|
46
|
+
i0.ɵɵtext(15);
|
|
47
|
+
i0.ɵɵelementEnd()();
|
|
48
|
+
i0.ɵɵelementStart(16, "div", 31)(17, "div", 32);
|
|
49
|
+
i0.ɵɵtext(18, "Avg Duration");
|
|
50
|
+
i0.ɵɵelementEnd();
|
|
51
|
+
i0.ɵɵelementStart(19, "div", 33);
|
|
52
|
+
i0.ɵɵtext(20);
|
|
53
|
+
i0.ɵɵelementEnd()()();
|
|
54
|
+
} if (rf & 2) {
|
|
55
|
+
const ctx_r0 = i0.ɵɵnextContext();
|
|
56
|
+
i0.ɵɵadvance(5);
|
|
57
|
+
i0.ɵɵtextInterpolate(ctx_r0.testRuns.length);
|
|
58
|
+
i0.ɵɵadvance(5);
|
|
59
|
+
i0.ɵɵtextInterpolate1("", ctx_r0.getPassRate().toFixed(1), "%");
|
|
60
|
+
i0.ɵɵadvance(5);
|
|
61
|
+
i0.ɵɵtextInterpolate(ctx_r0.formatCost(ctx_r0.getAverageCost()));
|
|
62
|
+
i0.ɵɵadvance(5);
|
|
63
|
+
i0.ɵɵtextInterpolate(ctx_r0.formatDuration(ctx_r0.getAverageDuration()));
|
|
64
|
+
} }
|
|
65
|
+
function TestFormComponentExtended_span_36_Template(rf, ctx) { if (rf & 1) {
|
|
66
|
+
i0.ɵɵelementStart(0, "span", 34);
|
|
67
|
+
i0.ɵɵtext(1);
|
|
68
|
+
i0.ɵɵelementEnd();
|
|
69
|
+
} if (rf & 2) {
|
|
70
|
+
const ctx_r0 = i0.ɵɵnextContext();
|
|
71
|
+
i0.ɵɵadvance();
|
|
72
|
+
i0.ɵɵtextInterpolate(ctx_r0.testRuns.length);
|
|
73
|
+
} }
|
|
74
|
+
function TestFormComponentExtended_span_41_Template(rf, ctx) { if (rf & 1) {
|
|
75
|
+
i0.ɵɵelementStart(0, "span", 34);
|
|
76
|
+
i0.ɵɵtext(1);
|
|
77
|
+
i0.ɵɵelementEnd();
|
|
78
|
+
} if (rf & 2) {
|
|
79
|
+
const ctx_r0 = i0.ɵɵnextContext();
|
|
80
|
+
i0.ɵɵadvance();
|
|
81
|
+
i0.ɵɵtextInterpolate(ctx_r0.suiteTests.length);
|
|
82
|
+
} }
|
|
83
|
+
function TestFormComponentExtended_div_43_Template(rf, ctx) { if (rf & 1) {
|
|
84
|
+
const _r2 = i0.ɵɵgetCurrentView();
|
|
85
|
+
i0.ɵɵelementStart(0, "div", 35)(1, "div", 36)(2, "h3");
|
|
86
|
+
i0.ɵɵtext(3, "Test Information");
|
|
87
|
+
i0.ɵɵelementEnd();
|
|
88
|
+
i0.ɵɵelementStart(4, "div", 37)(5, "div", 38)(6, "div", 39);
|
|
89
|
+
i0.ɵɵtext(7, "Name");
|
|
90
|
+
i0.ɵɵelementEnd();
|
|
91
|
+
i0.ɵɵelementStart(8, "div", 40);
|
|
92
|
+
i0.ɵɵtext(9);
|
|
93
|
+
i0.ɵɵelementEnd()();
|
|
94
|
+
i0.ɵɵelementStart(10, "div", 38)(11, "div", 39);
|
|
95
|
+
i0.ɵɵtext(12, "Type");
|
|
96
|
+
i0.ɵɵelementEnd();
|
|
97
|
+
i0.ɵɵelementStart(13, "div", 40);
|
|
98
|
+
i0.ɵɵtext(14);
|
|
99
|
+
i0.ɵɵelementEnd()();
|
|
100
|
+
i0.ɵɵelementStart(15, "div", 38)(16, "div", 39);
|
|
101
|
+
i0.ɵɵtext(17, "Status");
|
|
102
|
+
i0.ɵɵelementEnd();
|
|
103
|
+
i0.ɵɵelementStart(18, "div", 40);
|
|
104
|
+
i0.ɵɵtext(19);
|
|
105
|
+
i0.ɵɵelementEnd()();
|
|
106
|
+
i0.ɵɵelementStart(20, "div", 38)(21, "div", 39);
|
|
107
|
+
i0.ɵɵtext(22, "Priority");
|
|
108
|
+
i0.ɵɵelementEnd();
|
|
109
|
+
i0.ɵɵelementStart(23, "div", 40);
|
|
110
|
+
i0.ɵɵtext(24);
|
|
111
|
+
i0.ɵɵelementEnd()();
|
|
112
|
+
i0.ɵɵelementStart(25, "div", 38)(26, "div", 39);
|
|
113
|
+
i0.ɵɵtext(27, "Estimated Duration");
|
|
114
|
+
i0.ɵɵelementEnd();
|
|
115
|
+
i0.ɵɵelementStart(28, "div", 40);
|
|
116
|
+
i0.ɵɵtext(29);
|
|
117
|
+
i0.ɵɵelementEnd()();
|
|
118
|
+
i0.ɵɵelementStart(30, "div", 38)(31, "div", 39);
|
|
119
|
+
i0.ɵɵtext(32, "Estimated Cost");
|
|
120
|
+
i0.ɵɵelementEnd();
|
|
121
|
+
i0.ɵɵelementStart(33, "div", 40);
|
|
122
|
+
i0.ɵɵtext(34);
|
|
123
|
+
i0.ɵɵelementEnd()();
|
|
124
|
+
i0.ɵɵelementStart(35, "div", 38)(36, "div", 39);
|
|
125
|
+
i0.ɵɵtext(37, "Repeat Count");
|
|
126
|
+
i0.ɵɵelementEnd();
|
|
127
|
+
i0.ɵɵelementStart(38, "div", 40);
|
|
128
|
+
i0.ɵɵtext(39);
|
|
129
|
+
i0.ɵɵelementEnd()();
|
|
130
|
+
i0.ɵɵelementStart(40, "div", 38)(41, "div", 39);
|
|
131
|
+
i0.ɵɵtext(42, "Created");
|
|
132
|
+
i0.ɵɵelementEnd();
|
|
133
|
+
i0.ɵɵelementStart(43, "div", 40);
|
|
134
|
+
i0.ɵɵtext(44);
|
|
135
|
+
i0.ɵɵpipe(45, "date");
|
|
136
|
+
i0.ɵɵelementEnd()()()();
|
|
137
|
+
i0.ɵɵelementStart(46, "div", 41)(47, "h3");
|
|
138
|
+
i0.ɵɵtext(48, "Test Definition");
|
|
139
|
+
i0.ɵɵelementEnd();
|
|
140
|
+
i0.ɵɵelementStart(49, "div", 42)(50, "button", 43);
|
|
141
|
+
i0.ɵɵlistener("click", function TestFormComponentExtended_div_43_Template_button_click_50_listener() { i0.ɵɵrestoreView(_r2); const ctx_r0 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r0.setJsonView("input")); });
|
|
142
|
+
i0.ɵɵtext(51, " Input Definition ");
|
|
143
|
+
i0.ɵɵelementEnd();
|
|
144
|
+
i0.ɵɵelementStart(52, "button", 43);
|
|
145
|
+
i0.ɵɵlistener("click", function TestFormComponentExtended_div_43_Template_button_click_52_listener() { i0.ɵɵrestoreView(_r2); const ctx_r0 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r0.setJsonView("expected")); });
|
|
146
|
+
i0.ɵɵtext(53, " Expected Outcomes ");
|
|
147
|
+
i0.ɵɵelementEnd();
|
|
148
|
+
i0.ɵɵelementStart(54, "button", 43);
|
|
149
|
+
i0.ɵɵlistener("click", function TestFormComponentExtended_div_43_Template_button_click_54_listener() { i0.ɵɵrestoreView(_r2); const ctx_r0 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r0.setJsonView("config")); });
|
|
150
|
+
i0.ɵɵtext(55, " Configuration ");
|
|
151
|
+
i0.ɵɵelementEnd();
|
|
152
|
+
i0.ɵɵelementStart(56, "button", 43);
|
|
153
|
+
i0.ɵɵlistener("click", function TestFormComponentExtended_div_43_Template_button_click_56_listener() { i0.ɵɵrestoreView(_r2); const ctx_r0 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r0.setJsonView("tags")); });
|
|
154
|
+
i0.ɵɵtext(57, " Tags ");
|
|
155
|
+
i0.ɵɵelementEnd()();
|
|
156
|
+
i0.ɵɵelementStart(58, "div", 44)(59, "pre");
|
|
157
|
+
i0.ɵɵtext(60);
|
|
158
|
+
i0.ɵɵpipe(61, "json");
|
|
159
|
+
i0.ɵɵelementEnd()()()();
|
|
160
|
+
} if (rf & 2) {
|
|
161
|
+
const ctx_r0 = i0.ɵɵnextContext();
|
|
162
|
+
i0.ɵɵadvance(9);
|
|
163
|
+
i0.ɵɵtextInterpolate(ctx_r0.record.Name);
|
|
164
|
+
i0.ɵɵadvance(5);
|
|
165
|
+
i0.ɵɵtextInterpolate(ctx_r0.record.Type);
|
|
166
|
+
i0.ɵɵadvance(5);
|
|
167
|
+
i0.ɵɵtextInterpolate(ctx_r0.record.Status);
|
|
168
|
+
i0.ɵɵadvance(5);
|
|
169
|
+
i0.ɵɵtextInterpolate(ctx_r0.record.Priority || "N/A");
|
|
170
|
+
i0.ɵɵadvance(5);
|
|
171
|
+
i0.ɵɵtextInterpolate(ctx_r0.record.EstimatedDurationSeconds ? ctx_r0.formatDuration(ctx_r0.record.EstimatedDurationSeconds) : "N/A");
|
|
172
|
+
i0.ɵɵadvance(5);
|
|
173
|
+
i0.ɵɵtextInterpolate(ctx_r0.record.EstimatedCostUSD ? ctx_r0.formatCost(ctx_r0.record.EstimatedCostUSD) : "N/A");
|
|
174
|
+
i0.ɵɵadvance(5);
|
|
175
|
+
i0.ɵɵtextInterpolate(ctx_r0.record.RepeatCount || 1);
|
|
176
|
+
i0.ɵɵadvance(5);
|
|
177
|
+
i0.ɵɵtextInterpolate(i0.ɵɵpipeBind2(45, 17, ctx_r0.record.__mj_CreatedAt, "medium"));
|
|
178
|
+
i0.ɵɵadvance(6);
|
|
179
|
+
i0.ɵɵclassProp("active", ctx_r0.activeJsonView === "input");
|
|
180
|
+
i0.ɵɵadvance(2);
|
|
181
|
+
i0.ɵɵclassProp("active", ctx_r0.activeJsonView === "expected");
|
|
182
|
+
i0.ɵɵadvance(2);
|
|
183
|
+
i0.ɵɵclassProp("active", ctx_r0.activeJsonView === "config");
|
|
184
|
+
i0.ɵɵadvance(2);
|
|
185
|
+
i0.ɵɵclassProp("active", ctx_r0.activeJsonView === "tags");
|
|
186
|
+
i0.ɵɵadvance(4);
|
|
187
|
+
i0.ɵɵtextInterpolate(i0.ɵɵpipeBind1(61, 20, ctx_r0.getJsonData()));
|
|
188
|
+
} }
|
|
189
|
+
function TestFormComponentExtended_div_44_Template(rf, ctx) { if (rf & 1) {
|
|
190
|
+
const _r3 = i0.ɵɵgetCurrentView();
|
|
191
|
+
i0.ɵɵelementStart(0, "div", 45)(1, "div", 46)(2, "h3");
|
|
192
|
+
i0.ɵɵtext(3, "Execution Settings");
|
|
193
|
+
i0.ɵɵelementEnd();
|
|
194
|
+
i0.ɵɵelementStart(4, "div", 47)(5, "div", 48)(6, "label");
|
|
195
|
+
i0.ɵɵtext(7, "Priority");
|
|
196
|
+
i0.ɵɵelementEnd();
|
|
197
|
+
i0.ɵɵelementStart(8, "input", 49);
|
|
198
|
+
i0.ɵɵtwoWayListener("ngModelChange", function TestFormComponentExtended_div_44_Template_input_ngModelChange_8_listener($event) { i0.ɵɵrestoreView(_r3); const ctx_r0 = i0.ɵɵnextContext(); i0.ɵɵtwoWayBindingSet(ctx_r0.record.Priority, $event) || (ctx_r0.record.Priority = $event); return i0.ɵɵresetView($event); });
|
|
199
|
+
i0.ɵɵelementEnd()();
|
|
200
|
+
i0.ɵɵelementStart(9, "div", 48)(10, "label");
|
|
201
|
+
i0.ɵɵtext(11, "Repeat Count");
|
|
202
|
+
i0.ɵɵelementEnd();
|
|
203
|
+
i0.ɵɵelementStart(12, "input", 49);
|
|
204
|
+
i0.ɵɵtwoWayListener("ngModelChange", function TestFormComponentExtended_div_44_Template_input_ngModelChange_12_listener($event) { i0.ɵɵrestoreView(_r3); const ctx_r0 = i0.ɵɵnextContext(); i0.ɵɵtwoWayBindingSet(ctx_r0.record.RepeatCount, $event) || (ctx_r0.record.RepeatCount = $event); return i0.ɵɵresetView($event); });
|
|
205
|
+
i0.ɵɵelementEnd()();
|
|
206
|
+
i0.ɵɵelementStart(13, "div", 48)(14, "label");
|
|
207
|
+
i0.ɵɵtext(15, "Estimated Duration (seconds)");
|
|
208
|
+
i0.ɵɵelementEnd();
|
|
209
|
+
i0.ɵɵelementStart(16, "input", 49);
|
|
210
|
+
i0.ɵɵtwoWayListener("ngModelChange", function TestFormComponentExtended_div_44_Template_input_ngModelChange_16_listener($event) { i0.ɵɵrestoreView(_r3); const ctx_r0 = i0.ɵɵnextContext(); i0.ɵɵtwoWayBindingSet(ctx_r0.record.EstimatedDurationSeconds, $event) || (ctx_r0.record.EstimatedDurationSeconds = $event); return i0.ɵɵresetView($event); });
|
|
211
|
+
i0.ɵɵelementEnd()();
|
|
212
|
+
i0.ɵɵelementStart(17, "div", 48)(18, "label");
|
|
213
|
+
i0.ɵɵtext(19, "Estimated Cost (USD)");
|
|
214
|
+
i0.ɵɵelementEnd();
|
|
215
|
+
i0.ɵɵelementStart(20, "input", 50);
|
|
216
|
+
i0.ɵɵtwoWayListener("ngModelChange", function TestFormComponentExtended_div_44_Template_input_ngModelChange_20_listener($event) { i0.ɵɵrestoreView(_r3); const ctx_r0 = i0.ɵɵnextContext(); i0.ɵɵtwoWayBindingSet(ctx_r0.record.EstimatedCostUSD, $event) || (ctx_r0.record.EstimatedCostUSD = $event); return i0.ɵɵresetView($event); });
|
|
217
|
+
i0.ɵɵelementEnd()()()();
|
|
218
|
+
i0.ɵɵelementStart(21, "div", 46)(22, "h3");
|
|
219
|
+
i0.ɵɵtext(23, "Input Definition (JSON)");
|
|
220
|
+
i0.ɵɵelementEnd();
|
|
221
|
+
i0.ɵɵelementStart(24, "textarea", 51);
|
|
222
|
+
i0.ɵɵtwoWayListener("ngModelChange", function TestFormComponentExtended_div_44_Template_textarea_ngModelChange_24_listener($event) { i0.ɵɵrestoreView(_r3); const ctx_r0 = i0.ɵɵnextContext(); i0.ɵɵtwoWayBindingSet(ctx_r0.record.InputDefinition, $event) || (ctx_r0.record.InputDefinition = $event); return i0.ɵɵresetView($event); });
|
|
223
|
+
i0.ɵɵelementEnd()();
|
|
224
|
+
i0.ɵɵelementStart(25, "div", 46)(26, "h3");
|
|
225
|
+
i0.ɵɵtext(27, "Expected Outcomes (JSON)");
|
|
226
|
+
i0.ɵɵelementEnd();
|
|
227
|
+
i0.ɵɵelementStart(28, "textarea", 51);
|
|
228
|
+
i0.ɵɵtwoWayListener("ngModelChange", function TestFormComponentExtended_div_44_Template_textarea_ngModelChange_28_listener($event) { i0.ɵɵrestoreView(_r3); const ctx_r0 = i0.ɵɵnextContext(); i0.ɵɵtwoWayBindingSet(ctx_r0.record.ExpectedOutcomes, $event) || (ctx_r0.record.ExpectedOutcomes = $event); return i0.ɵɵresetView($event); });
|
|
229
|
+
i0.ɵɵelementEnd()();
|
|
230
|
+
i0.ɵɵelementStart(29, "div", 46)(30, "h3");
|
|
231
|
+
i0.ɵɵtext(31, "Configuration (JSON)");
|
|
232
|
+
i0.ɵɵelementEnd();
|
|
233
|
+
i0.ɵɵelementStart(32, "textarea", 51);
|
|
234
|
+
i0.ɵɵtwoWayListener("ngModelChange", function TestFormComponentExtended_div_44_Template_textarea_ngModelChange_32_listener($event) { i0.ɵɵrestoreView(_r3); const ctx_r0 = i0.ɵɵnextContext(); i0.ɵɵtwoWayBindingSet(ctx_r0.record.Configuration, $event) || (ctx_r0.record.Configuration = $event); return i0.ɵɵresetView($event); });
|
|
235
|
+
i0.ɵɵelementEnd()();
|
|
236
|
+
i0.ɵɵelementStart(33, "div", 46)(34, "h3");
|
|
237
|
+
i0.ɵɵtext(35, "Tags (JSON Array)");
|
|
238
|
+
i0.ɵɵelementEnd();
|
|
239
|
+
i0.ɵɵelementStart(36, "textarea", 52);
|
|
240
|
+
i0.ɵɵtwoWayListener("ngModelChange", function TestFormComponentExtended_div_44_Template_textarea_ngModelChange_36_listener($event) { i0.ɵɵrestoreView(_r3); const ctx_r0 = i0.ɵɵnextContext(); i0.ɵɵtwoWayBindingSet(ctx_r0.record.Tags, $event) || (ctx_r0.record.Tags = $event); return i0.ɵɵresetView($event); });
|
|
241
|
+
i0.ɵɵelementEnd()()();
|
|
242
|
+
} if (rf & 2) {
|
|
243
|
+
const ctx_r0 = i0.ɵɵnextContext();
|
|
244
|
+
i0.ɵɵadvance(8);
|
|
245
|
+
i0.ɵɵtwoWayProperty("ngModel", ctx_r0.record.Priority);
|
|
246
|
+
i0.ɵɵadvance(4);
|
|
247
|
+
i0.ɵɵtwoWayProperty("ngModel", ctx_r0.record.RepeatCount);
|
|
248
|
+
i0.ɵɵadvance(4);
|
|
249
|
+
i0.ɵɵtwoWayProperty("ngModel", ctx_r0.record.EstimatedDurationSeconds);
|
|
250
|
+
i0.ɵɵadvance(4);
|
|
251
|
+
i0.ɵɵtwoWayProperty("ngModel", ctx_r0.record.EstimatedCostUSD);
|
|
252
|
+
i0.ɵɵadvance(4);
|
|
253
|
+
i0.ɵɵtwoWayProperty("ngModel", ctx_r0.record.InputDefinition);
|
|
254
|
+
i0.ɵɵadvance(4);
|
|
255
|
+
i0.ɵɵtwoWayProperty("ngModel", ctx_r0.record.ExpectedOutcomes);
|
|
256
|
+
i0.ɵɵadvance(4);
|
|
257
|
+
i0.ɵɵtwoWayProperty("ngModel", ctx_r0.record.Configuration);
|
|
258
|
+
i0.ɵɵadvance(4);
|
|
259
|
+
i0.ɵɵtwoWayProperty("ngModel", ctx_r0.record.Tags);
|
|
260
|
+
} }
|
|
261
|
+
function TestFormComponentExtended_div_45_div_1_div_1_span_13_Template(rf, ctx) { if (rf & 1) {
|
|
262
|
+
i0.ɵɵelementStart(0, "span");
|
|
263
|
+
i0.ɵɵtext(1);
|
|
264
|
+
i0.ɵɵelementEnd();
|
|
265
|
+
} if (rf & 2) {
|
|
266
|
+
const run_r5 = i0.ɵɵnextContext().$implicit;
|
|
267
|
+
const ctx_r0 = i0.ɵɵnextContext(3);
|
|
268
|
+
i0.ɵɵadvance();
|
|
269
|
+
i0.ɵɵtextInterpolate(ctx_r0.formatDuration(run_r5.DurationSeconds));
|
|
270
|
+
} }
|
|
271
|
+
function TestFormComponentExtended_div_45_div_1_div_1_span_14_Template(rf, ctx) { if (rf & 1) {
|
|
272
|
+
i0.ɵɵelementStart(0, "span");
|
|
273
|
+
i0.ɵɵtext(1);
|
|
274
|
+
i0.ɵɵelementEnd();
|
|
275
|
+
} if (rf & 2) {
|
|
276
|
+
const run_r5 = i0.ɵɵnextContext().$implicit;
|
|
277
|
+
const ctx_r0 = i0.ɵɵnextContext(3);
|
|
278
|
+
i0.ɵɵadvance();
|
|
279
|
+
i0.ɵɵtextInterpolate(ctx_r0.formatCost(run_r5.CostUSD));
|
|
280
|
+
} }
|
|
281
|
+
function TestFormComponentExtended_div_45_div_1_div_1_span_15_Template(rf, ctx) { if (rf & 1) {
|
|
282
|
+
i0.ɵɵelementStart(0, "span");
|
|
283
|
+
i0.ɵɵtext(1);
|
|
284
|
+
i0.ɵɵelementEnd();
|
|
285
|
+
} if (rf & 2) {
|
|
286
|
+
const run_r5 = i0.ɵɵnextContext().$implicit;
|
|
287
|
+
i0.ɵɵadvance();
|
|
288
|
+
i0.ɵɵtextInterpolate1("Score: ", run_r5.Score.toFixed(4), "");
|
|
289
|
+
} }
|
|
290
|
+
function TestFormComponentExtended_div_45_div_1_div_1_Template(rf, ctx) { if (rf & 1) {
|
|
291
|
+
const _r4 = i0.ɵɵgetCurrentView();
|
|
292
|
+
i0.ɵɵelementStart(0, "div", 58);
|
|
293
|
+
i0.ɵɵlistener("click", function TestFormComponentExtended_div_45_div_1_div_1_Template_div_click_0_listener() { const run_r5 = i0.ɵɵrestoreView(_r4).$implicit; const ctx_r0 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r0.openTestRun(run_r5.ID)); });
|
|
294
|
+
i0.ɵɵelementStart(1, "div", 59);
|
|
295
|
+
i0.ɵɵelement(2, "i", 60);
|
|
296
|
+
i0.ɵɵelementEnd();
|
|
297
|
+
i0.ɵɵelementStart(3, "div", 61)(4, "div", 62)(5, "span", 63);
|
|
298
|
+
i0.ɵɵtext(6);
|
|
299
|
+
i0.ɵɵelementEnd();
|
|
300
|
+
i0.ɵɵelementStart(7, "span", 64);
|
|
301
|
+
i0.ɵɵtext(8);
|
|
302
|
+
i0.ɵɵelementEnd()();
|
|
303
|
+
i0.ɵɵelementStart(9, "div", 65)(10, "span");
|
|
304
|
+
i0.ɵɵtext(11);
|
|
305
|
+
i0.ɵɵpipe(12, "date");
|
|
306
|
+
i0.ɵɵelementEnd();
|
|
307
|
+
i0.ɵɵtemplate(13, TestFormComponentExtended_div_45_div_1_div_1_span_13_Template, 2, 1, "span", 66)(14, TestFormComponentExtended_div_45_div_1_div_1_span_14_Template, 2, 1, "span", 66)(15, TestFormComponentExtended_div_45_div_1_div_1_span_15_Template, 2, 1, "span", 66);
|
|
308
|
+
i0.ɵɵelementEnd()();
|
|
309
|
+
i0.ɵɵelement(16, "i", 67);
|
|
310
|
+
i0.ɵɵelementEnd();
|
|
311
|
+
} if (rf & 2) {
|
|
312
|
+
const run_r5 = ctx.$implicit;
|
|
313
|
+
i0.ɵɵadvance();
|
|
314
|
+
i0.ɵɵstyleProp("background-color", run_r5.Status === "Passed" ? "#4caf50" : run_r5.Status === "Failed" ? "#f44336" : "#ff9800");
|
|
315
|
+
i0.ɵɵadvance();
|
|
316
|
+
i0.ɵɵclassProp("fa-check", run_r5.Status === "Passed")("fa-times", run_r5.Status === "Failed")("fa-exclamation", run_r5.Status === "Error");
|
|
317
|
+
i0.ɵɵadvance(4);
|
|
318
|
+
i0.ɵɵtextInterpolate1("Run #", run_r5.ID.substring(0, 8), "");
|
|
319
|
+
i0.ɵɵadvance();
|
|
320
|
+
i0.ɵɵstyleProp("color", run_r5.Status === "Passed" ? "#4caf50" : run_r5.Status === "Failed" ? "#f44336" : "#ff9800");
|
|
321
|
+
i0.ɵɵadvance();
|
|
322
|
+
i0.ɵɵtextInterpolate(run_r5.Status);
|
|
323
|
+
i0.ɵɵadvance(3);
|
|
324
|
+
i0.ɵɵtextInterpolate(i0.ɵɵpipeBind2(12, 16, run_r5.StartedAt, "short"));
|
|
325
|
+
i0.ɵɵadvance(2);
|
|
326
|
+
i0.ɵɵproperty("ngIf", run_r5.DurationSeconds);
|
|
327
|
+
i0.ɵɵadvance();
|
|
328
|
+
i0.ɵɵproperty("ngIf", run_r5.CostUSD);
|
|
329
|
+
i0.ɵɵadvance();
|
|
330
|
+
i0.ɵɵproperty("ngIf", run_r5.Score != null);
|
|
331
|
+
} }
|
|
332
|
+
function TestFormComponentExtended_div_45_div_1_Template(rf, ctx) { if (rf & 1) {
|
|
333
|
+
i0.ɵɵelementStart(0, "div", 56);
|
|
334
|
+
i0.ɵɵtemplate(1, TestFormComponentExtended_div_45_div_1_div_1_Template, 17, 19, "div", 57);
|
|
335
|
+
i0.ɵɵelementEnd();
|
|
336
|
+
} if (rf & 2) {
|
|
337
|
+
const ctx_r0 = i0.ɵɵnextContext(2);
|
|
338
|
+
i0.ɵɵadvance();
|
|
339
|
+
i0.ɵɵproperty("ngForOf", ctx_r0.testRuns);
|
|
340
|
+
} }
|
|
341
|
+
function TestFormComponentExtended_div_45_div_2_Template(rf, ctx) { if (rf & 1) {
|
|
342
|
+
i0.ɵɵelementStart(0, "div", 68);
|
|
343
|
+
i0.ɵɵelement(1, "i", 69);
|
|
344
|
+
i0.ɵɵelementStart(2, "p");
|
|
345
|
+
i0.ɵɵtext(3, "No test runs found for this test");
|
|
346
|
+
i0.ɵɵelementEnd()();
|
|
347
|
+
} }
|
|
348
|
+
function TestFormComponentExtended_div_45_Template(rf, ctx) { if (rf & 1) {
|
|
349
|
+
i0.ɵɵelementStart(0, "div", 53);
|
|
350
|
+
i0.ɵɵtemplate(1, TestFormComponentExtended_div_45_div_1_Template, 2, 1, "div", 54)(2, TestFormComponentExtended_div_45_div_2_Template, 4, 0, "div", 55);
|
|
351
|
+
i0.ɵɵelementEnd();
|
|
352
|
+
} if (rf & 2) {
|
|
353
|
+
const ctx_r0 = i0.ɵɵnextContext();
|
|
354
|
+
i0.ɵɵadvance();
|
|
355
|
+
i0.ɵɵproperty("ngIf", ctx_r0.testRuns.length > 0);
|
|
356
|
+
i0.ɵɵadvance();
|
|
357
|
+
i0.ɵɵproperty("ngIf", ctx_r0.testRunsLoaded && ctx_r0.testRuns.length === 0);
|
|
358
|
+
} }
|
|
359
|
+
function TestFormComponentExtended_div_46_div_1_div_1_Template(rf, ctx) { if (rf & 1) {
|
|
360
|
+
const _r6 = i0.ɵɵgetCurrentView();
|
|
361
|
+
i0.ɵɵelementStart(0, "div", 74);
|
|
362
|
+
i0.ɵɵlistener("click", function TestFormComponentExtended_div_46_div_1_div_1_Template_div_click_0_listener() { const suiteTest_r7 = i0.ɵɵrestoreView(_r6).$implicit; const ctx_r0 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r0.openTestSuite(suiteTest_r7.SuiteID)); });
|
|
363
|
+
i0.ɵɵelementStart(1, "div", 75);
|
|
364
|
+
i0.ɵɵelement(2, "i", 76);
|
|
365
|
+
i0.ɵɵelementEnd();
|
|
366
|
+
i0.ɵɵelementStart(3, "div", 77)(4, "div", 78);
|
|
367
|
+
i0.ɵɵtext(5);
|
|
368
|
+
i0.ɵɵelementEnd();
|
|
369
|
+
i0.ɵɵelementStart(6, "div", 79)(7, "span");
|
|
370
|
+
i0.ɵɵtext(8);
|
|
371
|
+
i0.ɵɵelementEnd()()();
|
|
372
|
+
i0.ɵɵelement(9, "i", 67);
|
|
373
|
+
i0.ɵɵelementEnd();
|
|
374
|
+
} if (rf & 2) {
|
|
375
|
+
const suiteTest_r7 = ctx.$implicit;
|
|
376
|
+
i0.ɵɵadvance(5);
|
|
377
|
+
i0.ɵɵtextInterpolate(suiteTest_r7.Suite);
|
|
378
|
+
i0.ɵɵadvance(3);
|
|
379
|
+
i0.ɵɵtextInterpolate1("Sequence: ", suiteTest_r7.Sequence, "");
|
|
380
|
+
} }
|
|
381
|
+
function TestFormComponentExtended_div_46_div_1_Template(rf, ctx) { if (rf & 1) {
|
|
382
|
+
i0.ɵɵelementStart(0, "div", 72);
|
|
383
|
+
i0.ɵɵtemplate(1, TestFormComponentExtended_div_46_div_1_div_1_Template, 10, 2, "div", 73);
|
|
384
|
+
i0.ɵɵelementEnd();
|
|
385
|
+
} if (rf & 2) {
|
|
386
|
+
const ctx_r0 = i0.ɵɵnextContext(2);
|
|
387
|
+
i0.ɵɵadvance();
|
|
388
|
+
i0.ɵɵproperty("ngForOf", ctx_r0.suiteTests);
|
|
389
|
+
} }
|
|
390
|
+
function TestFormComponentExtended_div_46_div_2_Template(rf, ctx) { if (rf & 1) {
|
|
391
|
+
i0.ɵɵelementStart(0, "div", 68);
|
|
392
|
+
i0.ɵɵelement(1, "i", 69);
|
|
393
|
+
i0.ɵɵelementStart(2, "p");
|
|
394
|
+
i0.ɵɵtext(3, "This test is not part of any test suite");
|
|
395
|
+
i0.ɵɵelementEnd()();
|
|
396
|
+
} }
|
|
397
|
+
function TestFormComponentExtended_div_46_Template(rf, ctx) { if (rf & 1) {
|
|
398
|
+
i0.ɵɵelementStart(0, "div", 70);
|
|
399
|
+
i0.ɵɵtemplate(1, TestFormComponentExtended_div_46_div_1_Template, 2, 1, "div", 71)(2, TestFormComponentExtended_div_46_div_2_Template, 4, 0, "div", 55);
|
|
400
|
+
i0.ɵɵelementEnd();
|
|
401
|
+
} if (rf & 2) {
|
|
402
|
+
const ctx_r0 = i0.ɵɵnextContext();
|
|
403
|
+
i0.ɵɵadvance();
|
|
404
|
+
i0.ɵɵproperty("ngIf", ctx_r0.suiteTests.length > 0);
|
|
405
|
+
i0.ɵɵadvance();
|
|
406
|
+
i0.ɵɵproperty("ngIf", ctx_r0.suiteTestsLoaded && ctx_r0.suiteTests.length === 0);
|
|
407
|
+
} }
|
|
408
|
+
let TestFormComponentExtended = class TestFormComponentExtended extends TestFormComponent {
|
|
409
|
+
constructor(elementRef, sharedService, router, route, cdr) {
|
|
410
|
+
super(elementRef, sharedService, router, route, cdr);
|
|
411
|
+
this.router = router;
|
|
412
|
+
this.cdr = cdr;
|
|
413
|
+
this.destroy$ = new Subject();
|
|
414
|
+
// UI state
|
|
415
|
+
this.activeTab = 'overview';
|
|
416
|
+
this.loading = false;
|
|
417
|
+
this.error = null;
|
|
418
|
+
this.testRunsLoaded = false;
|
|
419
|
+
this.suiteTestsLoaded = false;
|
|
420
|
+
// Related data
|
|
421
|
+
this.testRuns = [];
|
|
422
|
+
this.suiteTests = [];
|
|
423
|
+
// Parsed JSON fields
|
|
424
|
+
this.parsedData = {};
|
|
425
|
+
// Active JSON view
|
|
426
|
+
this.activeJsonView = 'input';
|
|
427
|
+
}
|
|
428
|
+
async ngOnInit() {
|
|
429
|
+
await super.ngOnInit();
|
|
430
|
+
if (this.record && this.record.ID) {
|
|
431
|
+
await this.loadRelatedData();
|
|
432
|
+
this.parseJsonFields();
|
|
433
|
+
}
|
|
434
|
+
}
|
|
435
|
+
ngOnDestroy() {
|
|
436
|
+
this.destroy$.next();
|
|
437
|
+
this.destroy$.complete();
|
|
438
|
+
}
|
|
439
|
+
async loadRelatedData() {
|
|
440
|
+
this.loading = true;
|
|
441
|
+
try {
|
|
442
|
+
this.cdr.markForCheck();
|
|
443
|
+
}
|
|
444
|
+
catch (error) {
|
|
445
|
+
console.error('Error loading related data:', error);
|
|
446
|
+
this.error = 'Failed to load related data';
|
|
447
|
+
}
|
|
448
|
+
finally {
|
|
449
|
+
this.loading = false;
|
|
450
|
+
this.cdr.markForCheck();
|
|
451
|
+
}
|
|
452
|
+
}
|
|
453
|
+
async loadTestRuns() {
|
|
454
|
+
if (this.testRunsLoaded)
|
|
455
|
+
return;
|
|
456
|
+
try {
|
|
457
|
+
const rv = new RunView();
|
|
458
|
+
const result = await rv.RunView({
|
|
459
|
+
EntityName: 'MJ: Test Runs',
|
|
460
|
+
ExtraFilter: `TestID='${this.record.ID}'`,
|
|
461
|
+
OrderBy: 'StartedAt DESC',
|
|
462
|
+
MaxRows: 100,
|
|
463
|
+
ResultType: 'entity_object'
|
|
464
|
+
});
|
|
465
|
+
if (result.Success) {
|
|
466
|
+
this.testRuns = result.Results || [];
|
|
467
|
+
}
|
|
468
|
+
this.testRunsLoaded = true;
|
|
469
|
+
this.cdr.markForCheck();
|
|
470
|
+
}
|
|
471
|
+
catch (error) {
|
|
472
|
+
console.error('Error loading test runs:', error);
|
|
473
|
+
}
|
|
474
|
+
}
|
|
475
|
+
async loadSuiteTests() {
|
|
476
|
+
if (this.suiteTestsLoaded)
|
|
477
|
+
return;
|
|
478
|
+
try {
|
|
479
|
+
const rv = new RunView();
|
|
480
|
+
const result = await rv.RunView({
|
|
481
|
+
EntityName: 'MJ: Test Suite Tests',
|
|
482
|
+
ExtraFilter: `TestID='${this.record.ID}'`,
|
|
483
|
+
OrderBy: 'Sequence',
|
|
484
|
+
ResultType: 'entity_object'
|
|
485
|
+
});
|
|
486
|
+
if (result.Success) {
|
|
487
|
+
this.suiteTests = result.Results || [];
|
|
488
|
+
}
|
|
489
|
+
this.suiteTestsLoaded = true;
|
|
490
|
+
this.cdr.markForCheck();
|
|
491
|
+
}
|
|
492
|
+
catch (error) {
|
|
493
|
+
console.error('Error loading suite tests:', error);
|
|
494
|
+
}
|
|
495
|
+
}
|
|
496
|
+
parseJsonFields() {
|
|
497
|
+
try {
|
|
498
|
+
if (this.record.InputDefinition) {
|
|
499
|
+
this.parsedData.inputDefinition = JSON.parse(this.record.InputDefinition);
|
|
500
|
+
}
|
|
501
|
+
if (this.record.ExpectedOutcomes) {
|
|
502
|
+
this.parsedData.expectedOutcomes = JSON.parse(this.record.ExpectedOutcomes);
|
|
503
|
+
}
|
|
504
|
+
if (this.record.Configuration) {
|
|
505
|
+
this.parsedData.configuration = JSON.parse(this.record.Configuration);
|
|
506
|
+
}
|
|
507
|
+
if (this.record.Tags) {
|
|
508
|
+
this.parsedData.tags = JSON.parse(this.record.Tags);
|
|
509
|
+
}
|
|
510
|
+
}
|
|
511
|
+
catch (error) {
|
|
512
|
+
console.error('Error parsing JSON fields:', error);
|
|
513
|
+
}
|
|
514
|
+
}
|
|
515
|
+
changeTab(tab) {
|
|
516
|
+
this.activeTab = tab;
|
|
517
|
+
// Lazy load tabs
|
|
518
|
+
if (tab === 'runs' && !this.testRunsLoaded) {
|
|
519
|
+
this.loadTestRuns();
|
|
520
|
+
}
|
|
521
|
+
if (tab === 'suites' && !this.suiteTestsLoaded) {
|
|
522
|
+
this.loadSuiteTests();
|
|
523
|
+
}
|
|
524
|
+
this.cdr.markForCheck();
|
|
525
|
+
}
|
|
526
|
+
setJsonView(view) {
|
|
527
|
+
this.activeJsonView = view;
|
|
528
|
+
this.cdr.markForCheck();
|
|
529
|
+
}
|
|
530
|
+
getStatusColor() {
|
|
531
|
+
switch (this.record.Status) {
|
|
532
|
+
case 'Active': return '#4caf50';
|
|
533
|
+
case 'Disabled': return '#9e9e9e';
|
|
534
|
+
case 'Pending': return '#ffc107';
|
|
535
|
+
default: return '#999';
|
|
536
|
+
}
|
|
537
|
+
}
|
|
538
|
+
getStatusIcon() {
|
|
539
|
+
switch (this.record.Status) {
|
|
540
|
+
case 'Active': return 'fa-circle-check';
|
|
541
|
+
case 'Disabled': return 'fa-circle-stop';
|
|
542
|
+
case 'Pending': return 'fa-circle-pause';
|
|
543
|
+
default: return 'fa-circle-question';
|
|
544
|
+
}
|
|
545
|
+
}
|
|
546
|
+
getPassRate() {
|
|
547
|
+
if (this.testRuns.length === 0)
|
|
548
|
+
return 0;
|
|
549
|
+
const passed = this.testRuns.filter(r => r.Status === 'Passed').length;
|
|
550
|
+
return (passed / this.testRuns.length) * 100;
|
|
551
|
+
}
|
|
552
|
+
getAverageCost() {
|
|
553
|
+
if (this.testRuns.length === 0)
|
|
554
|
+
return 0;
|
|
555
|
+
const totalCost = this.testRuns.reduce((sum, r) => sum + (r.CostUSD || 0), 0);
|
|
556
|
+
return totalCost / this.testRuns.length;
|
|
557
|
+
}
|
|
558
|
+
getAverageDuration() {
|
|
559
|
+
if (this.testRuns.length === 0)
|
|
560
|
+
return 0;
|
|
561
|
+
const totalDuration = this.testRuns.reduce((sum, r) => sum + (r.DurationSeconds || 0), 0);
|
|
562
|
+
return totalDuration / this.testRuns.length;
|
|
563
|
+
}
|
|
564
|
+
formatDuration(seconds) {
|
|
565
|
+
if (seconds < 60)
|
|
566
|
+
return `${seconds.toFixed(1)}s`;
|
|
567
|
+
if (seconds < 3600) {
|
|
568
|
+
const mins = Math.floor(seconds / 60);
|
|
569
|
+
const secs = Math.floor(seconds % 60);
|
|
570
|
+
return `${mins}m ${secs}s`;
|
|
571
|
+
}
|
|
572
|
+
const hours = Math.floor(seconds / 3600);
|
|
573
|
+
const mins = Math.floor((seconds % 3600) / 60);
|
|
574
|
+
return `${hours}h ${mins}m`;
|
|
575
|
+
}
|
|
576
|
+
formatCost(cost) {
|
|
577
|
+
return `$${cost.toFixed(6)}`;
|
|
578
|
+
}
|
|
579
|
+
openTestRun(runId) {
|
|
580
|
+
SharedService.Instance.OpenEntityRecord('MJ: Test Runs', CompositeKey.FromID(runId));
|
|
581
|
+
}
|
|
582
|
+
openTestSuite(suiteId) {
|
|
583
|
+
SharedService.Instance.OpenEntityRecord('MJ: Test Suites', CompositeKey.FromID(suiteId));
|
|
584
|
+
}
|
|
585
|
+
async runTest() {
|
|
586
|
+
// TODO: Implement test execution
|
|
587
|
+
console.log('Run test:', this.record.ID);
|
|
588
|
+
}
|
|
589
|
+
async refresh() {
|
|
590
|
+
await this.loadRelatedData();
|
|
591
|
+
if (this.testRunsLoaded) {
|
|
592
|
+
this.testRunsLoaded = false;
|
|
593
|
+
await this.loadTestRuns();
|
|
594
|
+
}
|
|
595
|
+
if (this.suiteTestsLoaded) {
|
|
596
|
+
this.suiteTestsLoaded = false;
|
|
597
|
+
await this.loadSuiteTests();
|
|
598
|
+
}
|
|
599
|
+
this.cdr.markForCheck();
|
|
600
|
+
}
|
|
601
|
+
getJsonData() {
|
|
602
|
+
switch (this.activeJsonView) {
|
|
603
|
+
case 'input': return this.parsedData.inputDefinition;
|
|
604
|
+
case 'expected': return this.parsedData.expectedOutcomes;
|
|
605
|
+
case 'config': return this.parsedData.configuration;
|
|
606
|
+
case 'tags': return this.parsedData.tags;
|
|
607
|
+
default: return null;
|
|
608
|
+
}
|
|
609
|
+
}
|
|
610
|
+
static { this.ɵfac = function TestFormComponentExtended_Factory(t) { return new (t || TestFormComponentExtended)(i0.ɵɵdirectiveInject(i0.ElementRef), i0.ɵɵdirectiveInject(i1.SharedService), i0.ɵɵdirectiveInject(i2.Router), i0.ɵɵdirectiveInject(i2.ActivatedRoute), i0.ɵɵdirectiveInject(i0.ChangeDetectorRef)); }; }
|
|
611
|
+
static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: TestFormComponentExtended, selectors: [["mj-test-form"]], features: [i0.ɵɵInheritDefinitionFeature], decls: 47, vars: 24, consts: [[1, "test-form"], [1, "test-header"], [1, "header-content"], [1, "header-left"], [1, "test-icon"], [1, "fas", "fa-flask"], [1, "test-info"], [1, "test-meta"], [1, "status-badge"], [1, "fas", 3, "ngClass"], [1, "test-type"], [1, "header-actions"], ["kendoButton", "", "icon", "play", 3, "click"], ["kendoButton", "", "icon", "sync", 3, "click"], ["class", "test-description", 4, "ngIf"], ["class", "metrics-bar", 4, "ngIf"], [1, "tabs-container"], [1, "tabs"], [1, "tab", 3, "click"], [1, "fas", "fa-th-large"], [1, "fas", "fa-sliders-h"], [1, "fas", "fa-list"], ["class", "tab-badge", 4, "ngIf"], [1, "fas", "fa-layer-group"], [1, "tab-content"], ["class", "overview-tab", 4, "ngIf"], ["class", "config-tab", 4, "ngIf"], ["class", "runs-tab", 4, "ngIf"], ["class", "suites-tab", 4, "ngIf"], [1, "test-description"], [1, "metrics-bar"], [1, "metric-card"], [1, "metric-label"], [1, "metric-value"], [1, "tab-badge"], [1, "overview-tab"], [1, "info-section"], [1, "info-grid"], [1, "info-item"], [1, "info-label"], [1, "info-value"], [1, "json-section"], [1, "json-tabs"], [1, "json-tab", 3, "click"], [1, "json-content"], [1, "config-tab"], [1, "config-section"], [1, "config-grid"], [1, "config-item"], ["type", "number", 1, "config-input", 3, "ngModelChange", "ngModel"], ["type", "number", "step", "0.000001", 1, "config-input", 3, "ngModelChange", "ngModel"], ["rows", "10", 1, "json-editor", 3, "ngModelChange", "ngModel"], ["rows", "5", 1, "json-editor", 3, "ngModelChange", "ngModel"], [1, "runs-tab"], ["class", "runs-list", 4, "ngIf"], ["class", "no-data", 4, "ngIf"], [1, "runs-list"], ["class", "run-item", 3, "click", 4, "ngFor", "ngForOf"], [1, "run-item", 3, "click"], [1, "run-icon"], [1, "fas"], [1, "run-content"], [1, "run-header"], [1, "run-id"], [1, "run-status"], [1, "run-meta"], [4, "ngIf"], [1, "fas", "fa-chevron-right"], [1, "no-data"], [1, "fas", "fa-inbox"], [1, "suites-tab"], ["class", "suites-list", 4, "ngIf"], [1, "suites-list"], ["class", "suite-item", 3, "click", 4, "ngFor", "ngForOf"], [1, "suite-item", 3, "click"], [1, "suite-icon"], [1, "fas", "fa-folder"], [1, "suite-content"], [1, "suite-name"], [1, "suite-meta"]], template: function TestFormComponentExtended_Template(rf, ctx) { if (rf & 1) {
|
|
612
|
+
i0.ɵɵelementStart(0, "div", 0)(1, "div", 1)(2, "div", 2)(3, "div", 3)(4, "div", 4);
|
|
613
|
+
i0.ɵɵelement(5, "i", 5);
|
|
614
|
+
i0.ɵɵelementEnd();
|
|
615
|
+
i0.ɵɵelementStart(6, "div", 6)(7, "h1");
|
|
616
|
+
i0.ɵɵtext(8);
|
|
617
|
+
i0.ɵɵelementEnd();
|
|
618
|
+
i0.ɵɵelementStart(9, "div", 7)(10, "span", 8);
|
|
619
|
+
i0.ɵɵelement(11, "i", 9);
|
|
620
|
+
i0.ɵɵtext(12);
|
|
621
|
+
i0.ɵɵelementEnd();
|
|
622
|
+
i0.ɵɵelementStart(13, "span", 10);
|
|
623
|
+
i0.ɵɵtext(14);
|
|
624
|
+
i0.ɵɵelementEnd()()()();
|
|
625
|
+
i0.ɵɵelementStart(15, "div", 11)(16, "button", 12);
|
|
626
|
+
i0.ɵɵlistener("click", function TestFormComponentExtended_Template_button_click_16_listener() { return ctx.runTest(); });
|
|
627
|
+
i0.ɵɵtext(17, " Run Test ");
|
|
628
|
+
i0.ɵɵelementEnd();
|
|
629
|
+
i0.ɵɵelementStart(18, "button", 13);
|
|
630
|
+
i0.ɵɵlistener("click", function TestFormComponentExtended_Template_button_click_18_listener() { return ctx.refresh(); });
|
|
631
|
+
i0.ɵɵtext(19, " Refresh ");
|
|
632
|
+
i0.ɵɵelementEnd()()();
|
|
633
|
+
i0.ɵɵtemplate(20, TestFormComponentExtended_div_20_Template, 3, 1, "div", 14)(21, TestFormComponentExtended_div_21_Template, 21, 4, "div", 15);
|
|
634
|
+
i0.ɵɵelementEnd();
|
|
635
|
+
i0.ɵɵelementStart(22, "div", 16)(23, "div", 17)(24, "button", 18);
|
|
636
|
+
i0.ɵɵlistener("click", function TestFormComponentExtended_Template_button_click_24_listener() { return ctx.changeTab("overview"); });
|
|
637
|
+
i0.ɵɵelement(25, "i", 19);
|
|
638
|
+
i0.ɵɵelementStart(26, "span");
|
|
639
|
+
i0.ɵɵtext(27, "Overview");
|
|
640
|
+
i0.ɵɵelementEnd()();
|
|
641
|
+
i0.ɵɵelementStart(28, "button", 18);
|
|
642
|
+
i0.ɵɵlistener("click", function TestFormComponentExtended_Template_button_click_28_listener() { return ctx.changeTab("config"); });
|
|
643
|
+
i0.ɵɵelement(29, "i", 20);
|
|
644
|
+
i0.ɵɵelementStart(30, "span");
|
|
645
|
+
i0.ɵɵtext(31, "Configuration");
|
|
646
|
+
i0.ɵɵelementEnd()();
|
|
647
|
+
i0.ɵɵelementStart(32, "button", 18);
|
|
648
|
+
i0.ɵɵlistener("click", function TestFormComponentExtended_Template_button_click_32_listener() { return ctx.changeTab("runs"); });
|
|
649
|
+
i0.ɵɵelement(33, "i", 21);
|
|
650
|
+
i0.ɵɵelementStart(34, "span");
|
|
651
|
+
i0.ɵɵtext(35, "Test Runs");
|
|
652
|
+
i0.ɵɵelementEnd();
|
|
653
|
+
i0.ɵɵtemplate(36, TestFormComponentExtended_span_36_Template, 2, 1, "span", 22);
|
|
654
|
+
i0.ɵɵelementEnd();
|
|
655
|
+
i0.ɵɵelementStart(37, "button", 18);
|
|
656
|
+
i0.ɵɵlistener("click", function TestFormComponentExtended_Template_button_click_37_listener() { return ctx.changeTab("suites"); });
|
|
657
|
+
i0.ɵɵelement(38, "i", 23);
|
|
658
|
+
i0.ɵɵelementStart(39, "span");
|
|
659
|
+
i0.ɵɵtext(40, "Test Suites");
|
|
660
|
+
i0.ɵɵelementEnd();
|
|
661
|
+
i0.ɵɵtemplate(41, TestFormComponentExtended_span_41_Template, 2, 1, "span", 22);
|
|
662
|
+
i0.ɵɵelementEnd()()();
|
|
663
|
+
i0.ɵɵelementStart(42, "div", 24);
|
|
664
|
+
i0.ɵɵtemplate(43, TestFormComponentExtended_div_43_Template, 62, 22, "div", 25)(44, TestFormComponentExtended_div_44_Template, 37, 8, "div", 26)(45, TestFormComponentExtended_div_45_Template, 3, 2, "div", 27)(46, TestFormComponentExtended_div_46_Template, 3, 2, "div", 28);
|
|
665
|
+
i0.ɵɵelementEnd()();
|
|
666
|
+
} if (rf & 2) {
|
|
667
|
+
i0.ɵɵadvance(4);
|
|
668
|
+
i0.ɵɵstyleProp("background-color", ctx.getStatusColor());
|
|
669
|
+
i0.ɵɵadvance(4);
|
|
670
|
+
i0.ɵɵtextInterpolate(ctx.record.Name);
|
|
671
|
+
i0.ɵɵadvance(2);
|
|
672
|
+
i0.ɵɵstyleProp("background-color", ctx.getStatusColor());
|
|
673
|
+
i0.ɵɵadvance();
|
|
674
|
+
i0.ɵɵproperty("ngClass", ctx.getStatusIcon());
|
|
675
|
+
i0.ɵɵadvance();
|
|
676
|
+
i0.ɵɵtextInterpolate1(" ", ctx.record.Status, " ");
|
|
677
|
+
i0.ɵɵadvance(2);
|
|
678
|
+
i0.ɵɵtextInterpolate(ctx.record.Type);
|
|
679
|
+
i0.ɵɵadvance(6);
|
|
680
|
+
i0.ɵɵproperty("ngIf", ctx.record.Description);
|
|
681
|
+
i0.ɵɵadvance();
|
|
682
|
+
i0.ɵɵproperty("ngIf", ctx.testRunsLoaded && ctx.testRuns.length > 0);
|
|
683
|
+
i0.ɵɵadvance(3);
|
|
684
|
+
i0.ɵɵclassProp("active", ctx.activeTab === "overview");
|
|
685
|
+
i0.ɵɵadvance(4);
|
|
686
|
+
i0.ɵɵclassProp("active", ctx.activeTab === "config");
|
|
687
|
+
i0.ɵɵadvance(4);
|
|
688
|
+
i0.ɵɵclassProp("active", ctx.activeTab === "runs");
|
|
689
|
+
i0.ɵɵadvance(4);
|
|
690
|
+
i0.ɵɵproperty("ngIf", ctx.testRunsLoaded);
|
|
691
|
+
i0.ɵɵadvance();
|
|
692
|
+
i0.ɵɵclassProp("active", ctx.activeTab === "suites");
|
|
693
|
+
i0.ɵɵadvance(4);
|
|
694
|
+
i0.ɵɵproperty("ngIf", ctx.suiteTestsLoaded);
|
|
695
|
+
i0.ɵɵadvance(2);
|
|
696
|
+
i0.ɵɵproperty("ngIf", ctx.activeTab === "overview");
|
|
697
|
+
i0.ɵɵadvance();
|
|
698
|
+
i0.ɵɵproperty("ngIf", ctx.activeTab === "config");
|
|
699
|
+
i0.ɵɵadvance();
|
|
700
|
+
i0.ɵɵproperty("ngIf", ctx.activeTab === "runs");
|
|
701
|
+
i0.ɵɵadvance();
|
|
702
|
+
i0.ɵɵproperty("ngIf", ctx.activeTab === "suites");
|
|
703
|
+
} }, dependencies: [i3.NgClass, i3.NgForOf, i3.NgIf, i4.DefaultValueAccessor, i4.NumberValueAccessor, i4.NgControlStatus, i4.NgModel, i5.ButtonComponent, i3.JsonPipe, i3.DatePipe], styles: [".test-form[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n height: 100%;\n background: #f8f9fa;\n}\n\n\n\n.test-header[_ngcontent-%COMP%] {\n background: white;\n border-bottom: 1px solid #e0e0e0;\n padding: 20px;\n}\n\n.header-content[_ngcontent-%COMP%] {\n display: flex;\n justify-content: space-between;\n align-items: flex-start;\n margin-bottom: 16px;\n}\n\n.header-left[_ngcontent-%COMP%] {\n display: flex;\n gap: 16px;\n}\n\n.test-icon[_ngcontent-%COMP%] {\n width: 56px;\n height: 56px;\n border-radius: 12px;\n display: flex;\n align-items: center;\n justify-content: center;\n color: white;\n font-size: 24px;\n}\n\n.test-info[_ngcontent-%COMP%] h1[_ngcontent-%COMP%] {\n margin: 0 0 8px 0;\n font-size: 24px;\n font-weight: 600;\n color: #333;\n}\n\n.test-meta[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 12px;\n}\n\n.status-badge[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 4px 12px;\n border-radius: 12px;\n color: white;\n font-size: 12px;\n font-weight: 600;\n}\n\n.test-type[_ngcontent-%COMP%] {\n font-size: 14px;\n color: #666;\n}\n\n.header-actions[_ngcontent-%COMP%] {\n display: flex;\n gap: 8px;\n}\n\n.test-description[_ngcontent-%COMP%] {\n padding: 16px;\n background: #f8f9fa;\n border-radius: 8px;\n margin-bottom: 16px;\n}\n\n.test-description[_ngcontent-%COMP%] p[_ngcontent-%COMP%] {\n margin: 0;\n color: #666;\n line-height: 1.5;\n}\n\n.metrics-bar[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: repeat(4, 1fr);\n gap: 16px;\n}\n\n.metric-card[_ngcontent-%COMP%] {\n background: #f5f7fa;\n border-radius: 8px;\n padding: 12px;\n text-align: center;\n}\n\n.metric-label[_ngcontent-%COMP%] {\n font-size: 11px;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n color: #999;\n margin-bottom: 4px;\n}\n\n.metric-value[_ngcontent-%COMP%] {\n font-size: 16px;\n font-weight: 600;\n color: #333;\n}\n\n\n\n.tabs-container[_ngcontent-%COMP%] {\n background: white;\n border-bottom: 1px solid #e0e0e0;\n}\n\n.tabs[_ngcontent-%COMP%] {\n display: flex;\n padding: 0 20px;\n overflow-x: auto;\n}\n\n.tab[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 16px 20px;\n border: none;\n background: transparent;\n border-bottom: 3px solid transparent;\n color: #666;\n font-size: 14px;\n font-weight: 500;\n cursor: pointer;\n transition: all 0.2s ease;\n}\n\n.tab[_ngcontent-%COMP%]:hover {\n color: #2196f3;\n background: rgba(33, 150, 243, 0.05);\n}\n\n.tab.active[_ngcontent-%COMP%] {\n color: #2196f3;\n border-bottom-color: #2196f3;\n}\n\n.tab[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 16px;\n}\n\n.tab-badge[_ngcontent-%COMP%] {\n background: #e0e0e0;\n color: #666;\n padding: 2px 8px;\n border-radius: 10px;\n font-size: 11px;\n font-weight: 600;\n}\n\n.tab.active[_ngcontent-%COMP%] .tab-badge[_ngcontent-%COMP%] {\n background: #e3f2fd;\n color: #2196f3;\n}\n\n\n\n.tab-content[_ngcontent-%COMP%] {\n flex: 1;\n overflow-y: auto;\n padding: 20px;\n}\n\n\n\n.overview-tab[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 20px;\n}\n\n.info-section[_ngcontent-%COMP%], \n.json-section[_ngcontent-%COMP%], \n.config-section[_ngcontent-%COMP%] {\n background: white;\n border-radius: 12px;\n padding: 20px;\n}\n\n.info-section[_ngcontent-%COMP%] h3[_ngcontent-%COMP%], \n.json-section[_ngcontent-%COMP%] h3[_ngcontent-%COMP%], \n.config-section[_ngcontent-%COMP%] h3[_ngcontent-%COMP%] {\n margin: 0 0 16px 0;\n font-size: 18px;\n font-weight: 600;\n color: #333;\n}\n\n.info-grid[_ngcontent-%COMP%], \n.config-grid[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: repeat(2, 1fr);\n gap: 16px;\n}\n\n.info-item[_ngcontent-%COMP%], \n.config-item[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 4px;\n}\n\n.info-label[_ngcontent-%COMP%], \n.config-item[_ngcontent-%COMP%] label[_ngcontent-%COMP%] {\n font-size: 12px;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n color: #999;\n}\n\n.info-value[_ngcontent-%COMP%] {\n font-size: 14px;\n color: #333;\n word-wrap: break-word;\n}\n\n.config-input[_ngcontent-%COMP%] {\n padding: 8px 12px;\n border: 1px solid #ddd;\n border-radius: 4px;\n font-size: 14px;\n}\n\n.config-input[_ngcontent-%COMP%]:focus {\n outline: none;\n border-color: #2196f3;\n box-shadow: 0 0 0 2px rgba(33, 150, 243, 0.1);\n}\n\n.json-tabs[_ngcontent-%COMP%] {\n display: flex;\n gap: 8px;\n margin-bottom: 16px;\n border-bottom: 2px solid #e0e0e0;\n}\n\n.json-tab[_ngcontent-%COMP%] {\n padding: 10px 20px;\n border: none;\n background: transparent;\n color: #666;\n font-size: 14px;\n font-weight: 500;\n cursor: pointer;\n border-bottom: 3px solid transparent;\n margin-bottom: -2px;\n transition: all 0.2s ease;\n}\n\n.json-tab[_ngcontent-%COMP%]:hover {\n color: #2196f3;\n}\n\n.json-tab.active[_ngcontent-%COMP%] {\n color: #2196f3;\n border-bottom-color: #2196f3;\n}\n\n.json-content[_ngcontent-%COMP%] {\n background: #1e1e1e;\n border-radius: 8px;\n padding: 16px;\n max-height: 400px;\n overflow-y: auto;\n}\n\n.json-content[_ngcontent-%COMP%] pre[_ngcontent-%COMP%] {\n margin: 0;\n font-family: 'Courier New', monospace;\n font-size: 13px;\n line-height: 1.5;\n color: #e0e0e0;\n white-space: pre-wrap;\n word-wrap: break-word;\n}\n\n.json-editor[_ngcontent-%COMP%] {\n width: 100%;\n padding: 12px;\n border: 1px solid #ddd;\n border-radius: 4px;\n font-family: 'Courier New', monospace;\n font-size: 13px;\n resize: vertical;\n}\n\n.json-editor[_ngcontent-%COMP%]:focus {\n outline: none;\n border-color: #2196f3;\n box-shadow: 0 0 0 2px rgba(33, 150, 243, 0.1);\n}\n\n\n\n.runs-list[_ngcontent-%COMP%], \n.suites-list[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 12px;\n}\n\n.run-item[_ngcontent-%COMP%], \n.suite-item[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 16px;\n background: white;\n border: 2px solid transparent;\n border-radius: 8px;\n cursor: pointer;\n transition: all 0.2s ease;\n}\n\n.run-item[_ngcontent-%COMP%]:hover, \n.suite-item[_ngcontent-%COMP%]:hover {\n background: #e3f2fd;\n border-color: #90caf9;\n}\n\n.run-icon[_ngcontent-%COMP%], \n.suite-icon[_ngcontent-%COMP%] {\n width: 40px;\n height: 40px;\n display: flex;\n align-items: center;\n justify-content: center;\n border-radius: 8px;\n color: white;\n font-size: 18px;\n flex-shrink: 0;\n}\n\n.suite-icon[_ngcontent-%COMP%] {\n background: #ff9800;\n}\n\n.run-content[_ngcontent-%COMP%], \n.suite-content[_ngcontent-%COMP%] {\n flex: 1;\n}\n\n.run-header[_ngcontent-%COMP%], \n.suite-name[_ngcontent-%COMP%] {\n font-size: 14px;\n font-weight: 600;\n color: #333;\n margin-bottom: 4px;\n}\n\n.run-id[_ngcontent-%COMP%] {\n margin-right: 12px;\n}\n\n.run-status[_ngcontent-%COMP%] {\n font-weight: 700;\n}\n\n.run-meta[_ngcontent-%COMP%], \n.suite-meta[_ngcontent-%COMP%] {\n display: flex;\n gap: 12px;\n font-size: 12px;\n color: #666;\n}\n\n.run-item[_ngcontent-%COMP%] > i[_ngcontent-%COMP%], \n.suite-item[_ngcontent-%COMP%] > i[_ngcontent-%COMP%] {\n color: #999;\n font-size: 14px;\n}\n\n\n\n.no-data[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n padding: 60px 20px;\n color: #999;\n text-align: center;\n background: white;\n border-radius: 12px;\n}\n\n.no-data[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 48px;\n margin-bottom: 16px;\n opacity: 0.3;\n}\n\n.no-data[_ngcontent-%COMP%] p[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 14px;\n}\n\n\n\n@media (max-width: 1200px) {\n .metrics-bar[_ngcontent-%COMP%] {\n grid-template-columns: repeat(2, 1fr);\n }\n\n .info-grid[_ngcontent-%COMP%], \n .config-grid[_ngcontent-%COMP%] {\n grid-template-columns: 1fr;\n }\n}\n\n@media (max-width: 768px) {\n .metrics-bar[_ngcontent-%COMP%] {\n grid-template-columns: 1fr;\n }\n\n .header-content[_ngcontent-%COMP%] {\n flex-direction: column;\n gap: 16px;\n }\n\n .tabs[_ngcontent-%COMP%] {\n overflow-x: auto;\n }\n}"], changeDetection: 0 }); }
|
|
704
|
+
};
|
|
705
|
+
TestFormComponentExtended = __decorate([
|
|
706
|
+
RegisterClass(BaseFormComponent, 'MJ: Tests')
|
|
707
|
+
], TestFormComponentExtended);
|
|
708
|
+
export { TestFormComponentExtended };
|
|
709
|
+
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(TestFormComponentExtended, [{
|
|
710
|
+
type: Component,
|
|
711
|
+
args: [{ selector: 'mj-test-form', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"test-form\">\n <!-- Header Section -->\n <div class=\"test-header\">\n <div class=\"header-content\">\n <div class=\"header-left\">\n <div class=\"test-icon\" [style.background-color]=\"getStatusColor()\">\n <i class=\"fas fa-flask\"></i>\n </div>\n <div class=\"test-info\">\n <h1>{{ record.Name }}</h1>\n <div class=\"test-meta\">\n <span class=\"status-badge\" [style.background-color]=\"getStatusColor()\">\n <i class=\"fas\" [ngClass]=\"getStatusIcon()\"></i>\n {{ record.Status }}\n </span>\n <span class=\"test-type\">{{ record.Type }}</span>\n </div>\n </div>\n </div>\n <div class=\"header-actions\">\n <button kendoButton (click)=\"runTest()\" icon=\"play\">\n Run Test\n </button>\n <button kendoButton (click)=\"refresh()\" icon=\"sync\">\n Refresh\n </button>\n </div>\n </div>\n\n <!-- Test Description -->\n <div class=\"test-description\" *ngIf=\"record.Description\">\n <p>{{ record.Description }}</p>\n </div>\n\n <!-- Metrics Bar -->\n <div class=\"metrics-bar\" *ngIf=\"testRunsLoaded && testRuns.length > 0\">\n <div class=\"metric-card\">\n <div class=\"metric-label\">Total Runs</div>\n <div class=\"metric-value\">{{ testRuns.length }}</div>\n </div>\n <div class=\"metric-card\">\n <div class=\"metric-label\">Pass Rate</div>\n <div class=\"metric-value\">{{ getPassRate().toFixed(1) }}%</div>\n </div>\n <div class=\"metric-card\">\n <div class=\"metric-label\">Avg Cost</div>\n <div class=\"metric-value\">{{ formatCost(getAverageCost()) }}</div>\n </div>\n <div class=\"metric-card\">\n <div class=\"metric-label\">Avg Duration</div>\n <div class=\"metric-value\">{{ formatDuration(getAverageDuration()) }}</div>\n </div>\n </div>\n </div>\n\n <!-- Tabs -->\n <div class=\"tabs-container\">\n <div class=\"tabs\">\n <button class=\"tab\" [class.active]=\"activeTab === 'overview'\" (click)=\"changeTab('overview')\">\n <i class=\"fas fa-th-large\"></i>\n <span>Overview</span>\n </button>\n <button class=\"tab\" [class.active]=\"activeTab === 'config'\" (click)=\"changeTab('config')\">\n <i class=\"fas fa-sliders-h\"></i>\n <span>Configuration</span>\n </button>\n <button class=\"tab\" [class.active]=\"activeTab === 'runs'\" (click)=\"changeTab('runs')\">\n <i class=\"fas fa-list\"></i>\n <span>Test Runs</span>\n <span class=\"tab-badge\" *ngIf=\"testRunsLoaded\">{{ testRuns.length }}</span>\n </button>\n <button class=\"tab\" [class.active]=\"activeTab === 'suites'\" (click)=\"changeTab('suites')\">\n <i class=\"fas fa-layer-group\"></i>\n <span>Test Suites</span>\n <span class=\"tab-badge\" *ngIf=\"suiteTestsLoaded\">{{ suiteTests.length }}</span>\n </button>\n </div>\n </div>\n\n <!-- Tab Content -->\n <div class=\"tab-content\">\n <!-- Overview Tab -->\n <div class=\"overview-tab\" *ngIf=\"activeTab === 'overview'\">\n <!-- Basic Information -->\n <div class=\"info-section\">\n <h3>Test Information</h3>\n <div class=\"info-grid\">\n <div class=\"info-item\">\n <div class=\"info-label\">Name</div>\n <div class=\"info-value\">{{ record.Name }}</div>\n </div>\n <div class=\"info-item\">\n <div class=\"info-label\">Type</div>\n <div class=\"info-value\">{{ record.Type }}</div>\n </div>\n <div class=\"info-item\">\n <div class=\"info-label\">Status</div>\n <div class=\"info-value\">{{ record.Status }}</div>\n </div>\n <div class=\"info-item\">\n <div class=\"info-label\">Priority</div>\n <div class=\"info-value\">{{ record.Priority || 'N/A' }}</div>\n </div>\n <div class=\"info-item\">\n <div class=\"info-label\">Estimated Duration</div>\n <div class=\"info-value\">{{ record.EstimatedDurationSeconds ? formatDuration(record.EstimatedDurationSeconds) : 'N/A' }}</div>\n </div>\n <div class=\"info-item\">\n <div class=\"info-label\">Estimated Cost</div>\n <div class=\"info-value\">{{ record.EstimatedCostUSD ? formatCost(record.EstimatedCostUSD) : 'N/A' }}</div>\n </div>\n <div class=\"info-item\">\n <div class=\"info-label\">Repeat Count</div>\n <div class=\"info-value\">{{ record.RepeatCount || 1 }}</div>\n </div>\n <div class=\"info-item\">\n <div class=\"info-label\">Created</div>\n <div class=\"info-value\">{{ record.__mj_CreatedAt | date:'medium' }}</div>\n </div>\n </div>\n </div>\n\n <!-- JSON Data Views -->\n <div class=\"json-section\">\n <h3>Test Definition</h3>\n <div class=\"json-tabs\">\n <button class=\"json-tab\" [class.active]=\"activeJsonView === 'input'\" (click)=\"setJsonView('input')\">\n Input Definition\n </button>\n <button class=\"json-tab\" [class.active]=\"activeJsonView === 'expected'\" (click)=\"setJsonView('expected')\">\n Expected Outcomes\n </button>\n <button class=\"json-tab\" [class.active]=\"activeJsonView === 'config'\" (click)=\"setJsonView('config')\">\n Configuration\n </button>\n <button class=\"json-tab\" [class.active]=\"activeJsonView === 'tags'\" (click)=\"setJsonView('tags')\">\n Tags\n </button>\n </div>\n <div class=\"json-content\">\n <pre>{{ getJsonData() | json }}</pre>\n </div>\n </div>\n </div>\n\n <!-- Configuration Tab -->\n <div class=\"config-tab\" *ngIf=\"activeTab === 'config'\">\n <div class=\"config-section\">\n <h3>Execution Settings</h3>\n <div class=\"config-grid\">\n <div class=\"config-item\">\n <label>Priority</label>\n <input type=\"number\" [(ngModel)]=\"record.Priority\" class=\"config-input\" />\n </div>\n <div class=\"config-item\">\n <label>Repeat Count</label>\n <input type=\"number\" [(ngModel)]=\"record.RepeatCount\" class=\"config-input\" />\n </div>\n <div class=\"config-item\">\n <label>Estimated Duration (seconds)</label>\n <input type=\"number\" [(ngModel)]=\"record.EstimatedDurationSeconds\" class=\"config-input\" />\n </div>\n <div class=\"config-item\">\n <label>Estimated Cost (USD)</label>\n <input type=\"number\" step=\"0.000001\" [(ngModel)]=\"record.EstimatedCostUSD\" class=\"config-input\" />\n </div>\n </div>\n </div>\n\n <div class=\"config-section\">\n <h3>Input Definition (JSON)</h3>\n <textarea class=\"json-editor\" [(ngModel)]=\"record.InputDefinition\" rows=\"10\"></textarea>\n </div>\n\n <div class=\"config-section\">\n <h3>Expected Outcomes (JSON)</h3>\n <textarea class=\"json-editor\" [(ngModel)]=\"record.ExpectedOutcomes\" rows=\"10\"></textarea>\n </div>\n\n <div class=\"config-section\">\n <h3>Configuration (JSON)</h3>\n <textarea class=\"json-editor\" [(ngModel)]=\"record.Configuration\" rows=\"10\"></textarea>\n </div>\n\n <div class=\"config-section\">\n <h3>Tags (JSON Array)</h3>\n <textarea class=\"json-editor\" [(ngModel)]=\"record.Tags\" rows=\"5\"></textarea>\n </div>\n </div>\n\n <!-- Test Runs Tab -->\n <div class=\"runs-tab\" *ngIf=\"activeTab === 'runs'\">\n <div class=\"runs-list\" *ngIf=\"testRuns.length > 0\">\n <div class=\"run-item\" *ngFor=\"let run of testRuns\" (click)=\"openTestRun(run.ID)\">\n <div class=\"run-icon\" [style.background-color]=\"run.Status === 'Passed' ? '#4caf50' : run.Status === 'Failed' ? '#f44336' : '#ff9800'\">\n <i class=\"fas\" [class.fa-check]=\"run.Status === 'Passed'\" [class.fa-times]=\"run.Status === 'Failed'\" [class.fa-exclamation]=\"run.Status === 'Error'\"></i>\n </div>\n <div class=\"run-content\">\n <div class=\"run-header\">\n <span class=\"run-id\">Run #{{ run.ID.substring(0, 8) }}</span>\n <span class=\"run-status\" [style.color]=\"run.Status === 'Passed' ? '#4caf50' : run.Status === 'Failed' ? '#f44336' : '#ff9800'\">{{ run.Status }}</span>\n </div>\n <div class=\"run-meta\">\n <span>{{ run.StartedAt | date:'short' }}</span>\n <span *ngIf=\"run.DurationSeconds\">{{ formatDuration(run.DurationSeconds) }}</span>\n <span *ngIf=\"run.CostUSD\">{{ formatCost(run.CostUSD) }}</span>\n <span *ngIf=\"run.Score != null\">Score: {{ run.Score.toFixed(4) }}</span>\n </div>\n </div>\n <i class=\"fas fa-chevron-right\"></i>\n </div>\n </div>\n\n <div class=\"no-data\" *ngIf=\"testRunsLoaded && testRuns.length === 0\">\n <i class=\"fas fa-inbox\"></i>\n <p>No test runs found for this test</p>\n </div>\n </div>\n\n <!-- Test Suites Tab -->\n <div class=\"suites-tab\" *ngIf=\"activeTab === 'suites'\">\n <div class=\"suites-list\" *ngIf=\"suiteTests.length > 0\">\n <div class=\"suite-item\" *ngFor=\"let suiteTest of suiteTests\" (click)=\"openTestSuite(suiteTest.SuiteID)\">\n <div class=\"suite-icon\">\n <i class=\"fas fa-folder\"></i>\n </div>\n <div class=\"suite-content\">\n <div class=\"suite-name\">{{ suiteTest.Suite }}</div>\n <div class=\"suite-meta\">\n <span>Sequence: {{ suiteTest.Sequence }}</span>\n </div>\n </div>\n <i class=\"fas fa-chevron-right\"></i>\n </div>\n </div>\n\n <div class=\"no-data\" *ngIf=\"suiteTestsLoaded && suiteTests.length === 0\">\n <i class=\"fas fa-inbox\"></i>\n <p>This test is not part of any test suite</p>\n </div>\n </div>\n </div>\n</div>\n", styles: [".test-form {\n display: flex;\n flex-direction: column;\n height: 100%;\n background: #f8f9fa;\n}\n\n/* Header */\n.test-header {\n background: white;\n border-bottom: 1px solid #e0e0e0;\n padding: 20px;\n}\n\n.header-content {\n display: flex;\n justify-content: space-between;\n align-items: flex-start;\n margin-bottom: 16px;\n}\n\n.header-left {\n display: flex;\n gap: 16px;\n}\n\n.test-icon {\n width: 56px;\n height: 56px;\n border-radius: 12px;\n display: flex;\n align-items: center;\n justify-content: center;\n color: white;\n font-size: 24px;\n}\n\n.test-info h1 {\n margin: 0 0 8px 0;\n font-size: 24px;\n font-weight: 600;\n color: #333;\n}\n\n.test-meta {\n display: flex;\n align-items: center;\n gap: 12px;\n}\n\n.status-badge {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 4px 12px;\n border-radius: 12px;\n color: white;\n font-size: 12px;\n font-weight: 600;\n}\n\n.test-type {\n font-size: 14px;\n color: #666;\n}\n\n.header-actions {\n display: flex;\n gap: 8px;\n}\n\n.test-description {\n padding: 16px;\n background: #f8f9fa;\n border-radius: 8px;\n margin-bottom: 16px;\n}\n\n.test-description p {\n margin: 0;\n color: #666;\n line-height: 1.5;\n}\n\n.metrics-bar {\n display: grid;\n grid-template-columns: repeat(4, 1fr);\n gap: 16px;\n}\n\n.metric-card {\n background: #f5f7fa;\n border-radius: 8px;\n padding: 12px;\n text-align: center;\n}\n\n.metric-label {\n font-size: 11px;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n color: #999;\n margin-bottom: 4px;\n}\n\n.metric-value {\n font-size: 16px;\n font-weight: 600;\n color: #333;\n}\n\n/* Tabs */\n.tabs-container {\n background: white;\n border-bottom: 1px solid #e0e0e0;\n}\n\n.tabs {\n display: flex;\n padding: 0 20px;\n overflow-x: auto;\n}\n\n.tab {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 16px 20px;\n border: none;\n background: transparent;\n border-bottom: 3px solid transparent;\n color: #666;\n font-size: 14px;\n font-weight: 500;\n cursor: pointer;\n transition: all 0.2s ease;\n}\n\n.tab:hover {\n color: #2196f3;\n background: rgba(33, 150, 243, 0.05);\n}\n\n.tab.active {\n color: #2196f3;\n border-bottom-color: #2196f3;\n}\n\n.tab i {\n font-size: 16px;\n}\n\n.tab-badge {\n background: #e0e0e0;\n color: #666;\n padding: 2px 8px;\n border-radius: 10px;\n font-size: 11px;\n font-weight: 600;\n}\n\n.tab.active .tab-badge {\n background: #e3f2fd;\n color: #2196f3;\n}\n\n/* Tab Content */\n.tab-content {\n flex: 1;\n overflow-y: auto;\n padding: 20px;\n}\n\n/* Overview Tab */\n.overview-tab {\n display: flex;\n flex-direction: column;\n gap: 20px;\n}\n\n.info-section,\n.json-section,\n.config-section {\n background: white;\n border-radius: 12px;\n padding: 20px;\n}\n\n.info-section h3,\n.json-section h3,\n.config-section h3 {\n margin: 0 0 16px 0;\n font-size: 18px;\n font-weight: 600;\n color: #333;\n}\n\n.info-grid,\n.config-grid {\n display: grid;\n grid-template-columns: repeat(2, 1fr);\n gap: 16px;\n}\n\n.info-item,\n.config-item {\n display: flex;\n flex-direction: column;\n gap: 4px;\n}\n\n.info-label,\n.config-item label {\n font-size: 12px;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n color: #999;\n}\n\n.info-value {\n font-size: 14px;\n color: #333;\n word-wrap: break-word;\n}\n\n.config-input {\n padding: 8px 12px;\n border: 1px solid #ddd;\n border-radius: 4px;\n font-size: 14px;\n}\n\n.config-input:focus {\n outline: none;\n border-color: #2196f3;\n box-shadow: 0 0 0 2px rgba(33, 150, 243, 0.1);\n}\n\n.json-tabs {\n display: flex;\n gap: 8px;\n margin-bottom: 16px;\n border-bottom: 2px solid #e0e0e0;\n}\n\n.json-tab {\n padding: 10px 20px;\n border: none;\n background: transparent;\n color: #666;\n font-size: 14px;\n font-weight: 500;\n cursor: pointer;\n border-bottom: 3px solid transparent;\n margin-bottom: -2px;\n transition: all 0.2s ease;\n}\n\n.json-tab:hover {\n color: #2196f3;\n}\n\n.json-tab.active {\n color: #2196f3;\n border-bottom-color: #2196f3;\n}\n\n.json-content {\n background: #1e1e1e;\n border-radius: 8px;\n padding: 16px;\n max-height: 400px;\n overflow-y: auto;\n}\n\n.json-content pre {\n margin: 0;\n font-family: 'Courier New', monospace;\n font-size: 13px;\n line-height: 1.5;\n color: #e0e0e0;\n white-space: pre-wrap;\n word-wrap: break-word;\n}\n\n.json-editor {\n width: 100%;\n padding: 12px;\n border: 1px solid #ddd;\n border-radius: 4px;\n font-family: 'Courier New', monospace;\n font-size: 13px;\n resize: vertical;\n}\n\n.json-editor:focus {\n outline: none;\n border-color: #2196f3;\n box-shadow: 0 0 0 2px rgba(33, 150, 243, 0.1);\n}\n\n/* Runs Tab */\n.runs-list,\n.suites-list {\n display: flex;\n flex-direction: column;\n gap: 12px;\n}\n\n.run-item,\n.suite-item {\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 16px;\n background: white;\n border: 2px solid transparent;\n border-radius: 8px;\n cursor: pointer;\n transition: all 0.2s ease;\n}\n\n.run-item:hover,\n.suite-item:hover {\n background: #e3f2fd;\n border-color: #90caf9;\n}\n\n.run-icon,\n.suite-icon {\n width: 40px;\n height: 40px;\n display: flex;\n align-items: center;\n justify-content: center;\n border-radius: 8px;\n color: white;\n font-size: 18px;\n flex-shrink: 0;\n}\n\n.suite-icon {\n background: #ff9800;\n}\n\n.run-content,\n.suite-content {\n flex: 1;\n}\n\n.run-header,\n.suite-name {\n font-size: 14px;\n font-weight: 600;\n color: #333;\n margin-bottom: 4px;\n}\n\n.run-id {\n margin-right: 12px;\n}\n\n.run-status {\n font-weight: 700;\n}\n\n.run-meta,\n.suite-meta {\n display: flex;\n gap: 12px;\n font-size: 12px;\n color: #666;\n}\n\n.run-item > i,\n.suite-item > i {\n color: #999;\n font-size: 14px;\n}\n\n/* No Data State */\n.no-data {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n padding: 60px 20px;\n color: #999;\n text-align: center;\n background: white;\n border-radius: 12px;\n}\n\n.no-data i {\n font-size: 48px;\n margin-bottom: 16px;\n opacity: 0.3;\n}\n\n.no-data p {\n margin: 0;\n font-size: 14px;\n}\n\n/* Responsive */\n@media (max-width: 1200px) {\n .metrics-bar {\n grid-template-columns: repeat(2, 1fr);\n }\n\n .info-grid,\n .config-grid {\n grid-template-columns: 1fr;\n }\n}\n\n@media (max-width: 768px) {\n .metrics-bar {\n grid-template-columns: 1fr;\n }\n\n .header-content {\n flex-direction: column;\n gap: 16px;\n }\n\n .tabs {\n overflow-x: auto;\n }\n}\n"] }]
|
|
712
|
+
}], () => [{ type: i0.ElementRef }, { type: i1.SharedService }, { type: i2.Router }, { type: i2.ActivatedRoute }, { type: i0.ChangeDetectorRef }], null); })();
|
|
713
|
+
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(TestFormComponentExtended, { className: "TestFormComponentExtended", filePath: "src/lib/custom/Tests/test-form.component.ts", lineNumber: 26 }); })();
|
|
714
|
+
export function LoadTestFormComponentExtended() {
|
|
715
|
+
// Prevents tree-shaking
|
|
716
|
+
}
|
|
717
|
+
LoadTestFormComponentExtended();
|
|
718
|
+
//# sourceMappingURL=test-form.component.js.map
|