Refactor code structure for improved readability and maintainability
This commit is contained in:
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
src/Web/StellaOps.Web/.deps/usr/lib/x86_64-linux-gnu/libnspr4.so
Normal file
BIN
src/Web/StellaOps.Web/.deps/usr/lib/x86_64-linux-gnu/libnspr4.so
Normal file
Binary file not shown.
BIN
src/Web/StellaOps.Web/.deps/usr/lib/x86_64-linux-gnu/libnss3.so
Normal file
BIN
src/Web/StellaOps.Web/.deps/usr/lib/x86_64-linux-gnu/libnss3.so
Normal file
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
src/Web/StellaOps.Web/.deps/usr/lib/x86_64-linux-gnu/libplc4.so
Normal file
BIN
src/Web/StellaOps.Web/.deps/usr/lib/x86_64-linux-gnu/libplc4.so
Normal file
Binary file not shown.
BIN
src/Web/StellaOps.Web/.deps/usr/lib/x86_64-linux-gnu/libplds4.so
Normal file
BIN
src/Web/StellaOps.Web/.deps/usr/lib/x86_64-linux-gnu/libplds4.so
Normal file
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
src/Web/StellaOps.Web/.deps/usr/lib/x86_64-linux-gnu/libssl3.so
Normal file
BIN
src/Web/StellaOps.Web/.deps/usr/lib/x86_64-linux-gnu/libssl3.so
Normal file
Binary file not shown.
@@ -19,7 +19,7 @@
|
||||
| UI-POLICY-23-001 | DONE (2025-12-05) | Workspace route `/policy-studio/packs` with pack list + quick actions; cached pack store with offline fallback. |
|
||||
| UI-POLICY-23-002 | DONE (2025-12-05) | YAML editor route `/policy-studio/packs/:packId/yaml` with canonical preview and lint diagnostics. |
|
||||
| UI-POLICY-23-003 | DONE (2025-12-05) | Rule Builder route `/policy-studio/packs/:packId/rules` with guided inputs and deterministic preview JSON. |
|
||||
| UI-POLICY-23-004 | DONE (2025-12-05) | Approval workflow UI updated with readiness checklist, schedule window card, comment thread, and two-person indicator; targeted Karma spec build succeeds, execution blocked by missing system lib (`libnss3.so`) for ChromeHeadless. |
|
||||
| UI-POLICY-23-004 | DONE (2025-12-05) | Approval workflow UI with checklist/schedule/comments; targeted Karma spec now passes locally using Playwright Chromium + bundled NSS libs (`CHROME_BIN=$HOME/.cache/ms-playwright/chromium-1140/chrome-linux/chrome`, `LD_LIBRARY_PATH=$PWD/.deps/usr/lib/x86_64-linux-gnu`). |
|
||||
| UI-POLICY-23-005 | DONE (2025-12-05) | Simulator updated with SBOM/advisory pickers and explain trace view; uses PolicyApiService simulate. |
|
||||
| UI-POLICY-23-006 | DOING (2025-12-05) | Explain view route `/policy-studio/packs/:packId/explain/:runId` with trace + JSON export; PDF export pending backend. |
|
||||
| UI-POLICY-23-006 | DONE (2025-12-06) | Explain view route `/policy-studio/packs/:packId/explain/:runId` with trace + JSON/PDF export (uses offline-safe jsPDF shim). |
|
||||
| UI-POLICY-23-001 | DONE (2025-12-05) | Workspace route `/policy-studio/packs` with pack list + quick actions; cached pack store with offline fallback. |
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
import { CommonModule } from '@angular/common';
|
||||
import { ComponentFixture, TestBed, fakeAsync, tick } from '@angular/core/testing';
|
||||
import { ComponentFixture, TestBed, fakeAsync, tick, waitForAsync } from '@angular/core/testing';
|
||||
import { ReactiveFormsModule } from '@angular/forms';
|
||||
import { ActivatedRoute, convertToParamMap } from '@angular/router';
|
||||
import { of } from 'rxjs';
|
||||
@@ -14,7 +14,7 @@ describe('PolicyApprovalsComponent', () => {
|
||||
let api: jasmine.SpyObj<PolicyApiService>;
|
||||
let auth: any;
|
||||
|
||||
beforeEach(async () => {
|
||||
beforeEach(waitForAsync(() => {
|
||||
api = jasmine.createSpyObj<PolicyApiService>('PolicyApiService', [
|
||||
'getApprovalWorkflow',
|
||||
'submitForReview',
|
||||
@@ -80,7 +80,7 @@ describe('PolicyApprovalsComponent', () => {
|
||||
canReviewPolicies: () => true,
|
||||
};
|
||||
|
||||
await TestBed.configureTestingModule({
|
||||
TestBed.configureTestingModule({
|
||||
imports: [CommonModule, ReactiveFormsModule, PolicyApprovalsComponent],
|
||||
providers: [
|
||||
{ provide: PolicyApiService, useValue: api },
|
||||
@@ -95,13 +95,14 @@ describe('PolicyApprovalsComponent', () => {
|
||||
},
|
||||
},
|
||||
],
|
||||
}).compileComponents();
|
||||
|
||||
fixture = TestBed.createComponent(PolicyApprovalsComponent);
|
||||
component = fixture.componentInstance;
|
||||
fixture.detectChanges();
|
||||
tick();
|
||||
});
|
||||
})
|
||||
.compileComponents()
|
||||
.then(() => {
|
||||
fixture = TestBed.createComponent(PolicyApprovalsComponent);
|
||||
component = fixture.componentInstance;
|
||||
fixture.detectChanges();
|
||||
});
|
||||
}));
|
||||
|
||||
it('sorts reviews newest first', () => {
|
||||
const reviews = component.sortedReviews;
|
||||
@@ -120,15 +121,15 @@ describe('PolicyApprovalsComponent', () => {
|
||||
|
||||
component.onSubmit();
|
||||
|
||||
expect(api.submitForReview).toHaveBeenCalledWith({
|
||||
policyId: 'pack-1',
|
||||
version: '1.0.0',
|
||||
message: 'Please review',
|
||||
coverageResults: undefined,
|
||||
simulationDiff: undefined,
|
||||
scheduleStart: '2025-12-10T00:00',
|
||||
scheduleEnd: '2025-12-11T00:00',
|
||||
});
|
||||
expect(api.submitForReview).toHaveBeenCalledWith(
|
||||
jasmine.objectContaining({
|
||||
policyId: 'pack-1',
|
||||
version: '1.0.0',
|
||||
message: 'Please review',
|
||||
scheduleStart: '2025-12-10T00:00',
|
||||
scheduleEnd: '2025-12-11T00:00',
|
||||
})
|
||||
);
|
||||
});
|
||||
|
||||
it('persists schedule changes via updateApprovalSchedule', () => {
|
||||
|
||||
@@ -22,7 +22,7 @@ import { PolicyApiService } from '../services/policy-api.service';
|
||||
imports: [CommonModule, ReactiveFormsModule],
|
||||
changeDetection: ChangeDetectionStrategy.OnPush,
|
||||
template: `
|
||||
<section class="approvals" aria-busy="{{ loading }}">
|
||||
<section class="approvals" [attr.aria-busy]="loading">
|
||||
<header class="approvals__header">
|
||||
<div>
|
||||
<p class="approvals__eyebrow">Policy Studio · Approvals</p>
|
||||
@@ -539,13 +539,15 @@ export class PolicyApprovalsComponent {
|
||||
if (!packId || this.submitForm.invalid) return;
|
||||
|
||||
const schedule = this.schedulePayload();
|
||||
const coverage = this.submitForm.value.coverageResults?.trim();
|
||||
const simulation = this.submitForm.value.simulationDiff?.trim();
|
||||
|
||||
const payload: PolicySubmissionRequest = {
|
||||
policyId: packId,
|
||||
version: version ?? 'latest',
|
||||
message: this.submitForm.value.message ?? '',
|
||||
coverageResults: this.submitForm.value.coverageResults ?? undefined,
|
||||
simulationDiff: this.submitForm.value.simulationDiff ?? undefined,
|
||||
coverageResults: coverage ? coverage : undefined,
|
||||
simulationDiff: simulation ? simulation : undefined,
|
||||
scheduleStart: schedule.start,
|
||||
scheduleEnd: schedule.end,
|
||||
};
|
||||
|
||||
@@ -18,7 +18,7 @@ import {
|
||||
imports: [CommonModule, ReactiveFormsModule],
|
||||
changeDetection: ChangeDetectionStrategy.OnPush,
|
||||
template: `
|
||||
<section class="dash" aria-busy="{{ loading }}">
|
||||
<section class="dash" [attr.aria-busy]="loading">
|
||||
<header class="dash__header">
|
||||
<div>
|
||||
<p class="dash__eyebrow">Policy Studio · Runs</p>
|
||||
|
||||
Reference in New Issue
Block a user