Merge pull request #9552 from jwangyangls/add-ut

Add front ut in app
This commit is contained in:
jwangyangls 2019-10-25 15:45:13 +08:00 committed by GitHub
commit 8d35d36537
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
45 changed files with 1850 additions and 158 deletions

View File

@ -1,4 +1,4 @@
import { async, ComponentFixture, TestBed, fakeAsync } from '@angular/core/testing'; import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { PushImageButtonComponent } from './push-image.component'; import { PushImageButtonComponent } from './push-image.component';
import { CopyInputComponent } from './copy-input.component'; import { CopyInputComponent } from './copy-input.component';

View File

@ -105,7 +105,6 @@ export class ConfigurationComponent implements OnInit, OnDestroy {
ngOnDestroy(): void { ngOnDestroy(): void {
if (this.confirmSub) { if (this.confirmSub) {
console.log(this.confirmSub);
this.confirmSub.unsubscribe(); this.confirmSub.unsubscribe();
} }
} }

View File

@ -1,19 +1,68 @@
import { async, ComponentFixture, TestBed } from '@angular/core/testing'; import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { TranslateModule, TranslateService } from '@ngx-translate/core'; import { TranslateModule, TranslateService } from '@ngx-translate/core';
import { AuditLogComponent } from './audit-log.component'; import { AuditLogComponent } from './audit-log.component';
import { ClarityModule } from '@clr/angular';
import { FormsModule } from '@angular/forms';
import { AuditLogService } from './audit-log.service';
import { MessageHandlerService } from '../shared/message-handler/message-handler.service';
import { ActivatedRoute, Router } from '@angular/router';
import { of } from 'rxjs';
import { CUSTOM_ELEMENTS_SCHEMA } from '@angular/core';
import { BrowserAnimationsModule, NoopAnimationsModule } from '@angular/platform-browser/animations';
import { RouterTestingModule } from '@angular/router/testing';
import { HarborLibraryModule } from '@harbor/ui';
import { delay } from 'rxjs/operators';
xdescribe('AuditLogComponent', () => { describe('AuditLogComponent', () => {
let component: AuditLogComponent; let component: AuditLogComponent;
let fixture: ComponentFixture<AuditLogComponent>; let fixture: ComponentFixture<AuditLogComponent>;
const mockMessageHandlerService = {
handleError: () => {}
};
const mockAuditLogService = {
listAuditLogs: () => {
return of({
headers: new Map().set('x-total-count', 0),
body: []
}).pipe(delay(0));
},
};
const mockActivatedRoute = {
data: of({
auditLogResolver: ""
}).pipe(delay(0)),
snapshot: {
parent: {
params: {
id: 1
}
}
}
};
const mockRouter = null;
beforeEach(async(() => { beforeEach(async(() => {
TestBed.configureTestingModule({ TestBed.configureTestingModule({
schemas: [
CUSTOM_ELEMENTS_SCHEMA
],
imports: [ imports: [
TranslateModule BrowserAnimationsModule,
ClarityModule,
TranslateModule.forRoot(),
FormsModule,
RouterTestingModule,
NoopAnimationsModule,
HarborLibraryModule
], ],
declarations: [AuditLogComponent], declarations: [AuditLogComponent],
providers: [ providers: [
TranslateService TranslateService,
{ provide: ActivatedRoute, useValue: mockActivatedRoute },
{ provide: Router, useValue: mockRouter },
{ provide: AuditLogService, useValue: mockAuditLogService },
{ provide: MessageHandlerService, useValue: mockMessageHandlerService },
] ]
}).compileComponents(); }).compileComponents();
})); }));

View File

@ -1,19 +1,42 @@
import { async, ComponentFixture, TestBed } from '@angular/core/testing'; import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { TranslateModule, TranslateService } from '@ngx-translate/core'; import { TranslateModule, TranslateService } from '@ngx-translate/core';
import { CreateProjectComponent } from './create-project.component'; import { CreateProjectComponent } from './create-project.component';
import { InlineAlertComponent } from '../../shared/inline-alert/inline-alert.component';
import { CUSTOM_ELEMENTS_SCHEMA } from '@angular/core';
import { ClarityModule } from '@clr/angular';
import { FormsModule } from '@angular/forms';
import { ProjectService } from '@harbor/ui';
import { MessageHandlerService } from '../../shared/message-handler/message-handler.service';
xdescribe('CreateProjectComponent', () => { describe('CreateProjectComponent', () => {
let component: CreateProjectComponent; let component: CreateProjectComponent;
let fixture: ComponentFixture<CreateProjectComponent>; let fixture: ComponentFixture<CreateProjectComponent>;
const mockProjectService = {
checkProjectExists: function() {
},
createProject: function () {
}
};
const mockMessageHandlerService = {
showSuccess: function() {
}
};
beforeEach(async(() => { beforeEach(async(() => {
TestBed.configureTestingModule({ TestBed.configureTestingModule({
imports: [ imports: [
FormsModule,
ClarityModule,
TranslateModule.forRoot() TranslateModule.forRoot()
], ],
declarations: [CreateProjectComponent], declarations: [CreateProjectComponent, InlineAlertComponent],
schemas: [
CUSTOM_ELEMENTS_SCHEMA
],
providers: [ providers: [
TranslateService TranslateService,
{provide: ProjectService, useValue: mockProjectService},
{provide: MessageHandlerService, useValue: mockMessageHandlerService},
] ]
}).compileComponents(); }).compileComponents();
})); }));

View File

@ -2,7 +2,7 @@ import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { TranslateModule, TranslateService } from '@ngx-translate/core'; import { TranslateModule, TranslateService } from '@ngx-translate/core';
import { ChartDetailDependencyComponent } from './chart-detail-dependency.component'; import { ChartDetailDependencyComponent } from './chart-detail-dependency.component';
xdescribe('ChartDetailDependencyComponent', () => { describe('ChartDetailDependencyComponent', () => {
let component: ChartDetailDependencyComponent; let component: ChartDetailDependencyComponent;
let fixture: ComponentFixture<ChartDetailDependencyComponent>; let fixture: ComponentFixture<ChartDetailDependencyComponent>;

View File

@ -1,26 +1,61 @@
import { async, ComponentFixture, TestBed } from '@angular/core/testing'; import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { TranslateModule, TranslateService } from '@ngx-translate/core'; import { TranslateModule, TranslateService } from '@ngx-translate/core';
import { ChartDetailSummaryComponent } from './chart-detail-summary.component'; import { ChartDetailSummaryComponent } from './chart-detail-summary.component';
import { ClarityModule } from '@clr/angular';
xdescribe('ChartDetailSummaryComponent', () => { import { CUSTOM_ELEMENTS_SCHEMA } from '@angular/core';
import { FormsModule } from '@angular/forms';
import { MarkedOptions, MarkdownModule, MarkdownService } from 'ngx-markdown';
import { ErrorHandler, DefaultErrorHandler } from '@harbor/ui';
import { HelmChartService } from '../../helm-chart.service';
describe('ChartDetailSummaryComponent', () => {
let component: ChartDetailSummaryComponent; let component: ChartDetailSummaryComponent;
let fixture: ComponentFixture<ChartDetailSummaryComponent>; let fixture: ComponentFixture<ChartDetailSummaryComponent>;
const mockHelmChartService = {
downloadChart: function () {
}
};
beforeEach(async(() => { beforeEach(async(() => {
TestBed.configureTestingModule({ TestBed.configureTestingModule({
imports: [ imports: [
TranslateModule.forRoot() TranslateModule.forRoot(),
ClarityModule,
FormsModule,
MarkdownModule,
],
schemas: [
CUSTOM_ELEMENTS_SCHEMA
], ],
declarations: [ChartDetailSummaryComponent], declarations: [ChartDetailSummaryComponent],
providers: [ providers: [
TranslateService TranslateService,
MarkdownService,
{ provide: MarkedOptions, useValue: {} },
{ provide: ErrorHandler, useValue: DefaultErrorHandler },
{ provide: HelmChartService, useValue: mockHelmChartService },
] ]
}).compileComponents(); }).compileComponents();
})); }));
beforeEach(() => { beforeEach(() => {
fixture = TestBed.createComponent(ChartDetailSummaryComponent); fixture = TestBed.createComponent(ChartDetailSummaryComponent);
// markdownService = TestBed.get(MarkdownService);
component = fixture.componentInstance; component = fixture.componentInstance;
component.summary = {
name: "string",
home: "string",
sources: [],
version: "string",
description: "string",
keywords: [],
maintainers: [],
engine: "string",
icon: "string",
appVersion: "string",
urls: [],
created: new Date().toDateString(),
digest: "string",
};
fixture.detectChanges(); fixture.detectChanges();
}); });

View File

@ -1,19 +1,33 @@
import { async, ComponentFixture, TestBed } from '@angular/core/testing'; import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { TranslateModule, TranslateService } from '@ngx-translate/core'; import { TranslateModule, TranslateService } from '@ngx-translate/core';
import { ChartDetailValueComponent } from './chart-detail-value.component'; import { ChartDetailValueComponent } from './chart-detail-value.component';
import { CUSTOM_ELEMENTS_SCHEMA } from '@angular/core';
import { ClarityModule } from '@clr/angular';
import { FormsModule } from '@angular/forms';
import { MarkdownModule, MarkdownService, MarkedOptions } from 'ngx-markdown';
import { BrowserModule } from '@angular/platform-browser';
xdescribe('ChartDetailValueComponent', () => { describe('ChartDetailValueComponent', () => {
let component: ChartDetailValueComponent; let component: ChartDetailValueComponent;
let fixture: ComponentFixture<ChartDetailValueComponent>; let fixture: ComponentFixture<ChartDetailValueComponent>;
beforeEach(async(() => { beforeEach(async(() => {
TestBed.configureTestingModule({ TestBed.configureTestingModule({
imports: [ imports: [
TranslateModule.forRoot() TranslateModule.forRoot(),
MarkdownModule,
ClarityModule,
FormsModule,
BrowserModule
], ],
declarations: [ChartDetailValueComponent], declarations: [ChartDetailValueComponent],
schemas: [
CUSTOM_ELEMENTS_SCHEMA
],
providers: [ providers: [
TranslateService TranslateService,
MarkdownService,
{ provide: MarkedOptions, useValue: {} },
] ]
}).compileComponents(); }).compileComponents();
})); }));
@ -21,6 +35,7 @@ xdescribe('ChartDetailValueComponent', () => {
beforeEach(() => { beforeEach(() => {
fixture = TestBed.createComponent(ChartDetailValueComponent); fixture = TestBed.createComponent(ChartDetailValueComponent);
component = fixture.componentInstance; component = fixture.componentInstance;
component.yaml = "rfrf";
fixture.detectChanges(); fixture.detectChanges();
}); });

View File

@ -1,19 +1,122 @@
import { async, ComponentFixture, TestBed } from '@angular/core/testing'; import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { TranslateModule, TranslateService } from '@ngx-translate/core'; import { TranslateModule, TranslateService } from '@ngx-translate/core';
import { ChartDetailComponent } from './chart-detail.component'; import { ChartDetailComponent } from './chart-detail.component';
import { ClarityModule } from '@clr/angular';
import { FormsModule } from '@angular/forms';
import { CUSTOM_ELEMENTS_SCHEMA } from '@angular/core';
import { HelmChartService } from "../../helm-chart.service";
xdescribe('ChartDetailComponent', () => { import {
ErrorHandler, SystemInfoService
} from "@harbor/ui";
import { of } from 'rxjs';
describe('ChartDetailComponent', () => {
let component: ChartDetailComponent; let component: ChartDetailComponent;
let fixture: ComponentFixture<ChartDetailComponent>; let fixture: ComponentFixture<ChartDetailComponent>;
const mockErrorHandler = {
error: function () { }
};
const mockSystemInfoService = {
getSystemInfo: function () {
return of(
{
"with_notary": false,
"with_admiral": false,
"admiral_endpoint": "",
"auth_mode": "oidc_auth",
"registry_url": "nightly-oidc.harbor.io",
"external_url": "https://nightly-oidc.harbor.io",
"project_creation_restriction": "everyone",
"self_registration": false,
"has_ca_root": false,
"harbor_version": "dev",
"registry_storage_provider_name": "filesystem",
"read_only": false,
"with_chartmuseum": true,
"notification_enable": true
}
);
}
};
const mockHelmChartService = {
getChartDetail: function () {
return of(
{
"metadata": {
"name": "harbor",
"home": "https://github.com/vmware/harbor",
"sources": [
"https://github.com/vmware/harbor/tree/master/contrib/helm/harbor"
],
"version": "0.2.0",
"description": "Ane",
"keywords": [
"vmware",
"docker",
"registry",
"harbor"
],
"maintainers": [
{
"name": "Jessde Hu",
"email": "huh@qq.com"
},
{
"name": "paulczar",
"email": "username@qq.com"
}
],
"engine": "",
"icon": "ht",
"appVersion": "1.5.0",
"urls": [
""
],
"created": "201940492141Z",
"digest": ""
},
"dependencies": [
{
"name": "redis",
"version": "3.2.5",
"repository": ""
}
],
"values": {
"adminserver.image.pullPolicy": "IfNotPresent"
},
"files": {
"README.md": "",
"values.yaml": ""
},
"security": {
"signature": {
"signed": false,
"prov_file": ""
}
},
"labels": []
}
);
},
downloadChart: function () { }
};
beforeEach(async(() => { beforeEach(async(() => {
TestBed.configureTestingModule({ TestBed.configureTestingModule({
imports: [ imports: [
TranslateModule.forRoot() TranslateModule.forRoot(),
ClarityModule,
FormsModule
], ],
declarations: [ChartDetailComponent], declarations: [ChartDetailComponent],
schemas: [
CUSTOM_ELEMENTS_SCHEMA
],
providers: [ providers: [
TranslateService TranslateService,
{ provide: ErrorHandler, useValue: mockErrorHandler },
{ provide: SystemInfoService, useValue: mockSystemInfoService },
{ provide: HelmChartService, useValue: mockHelmChartService },
] ]
}).compileComponents(); }).compileComponents();
})); }));
@ -21,6 +124,33 @@ xdescribe('ChartDetailComponent', () => {
beforeEach(() => { beforeEach(() => {
fixture = TestBed.createComponent(ChartDetailComponent); fixture = TestBed.createComponent(ChartDetailComponent);
component = fixture.componentInstance; component = fixture.componentInstance;
component.chartName = 'chart';
component.chartVersion = 'chart-version';
component.project = {
"project_id": 1,
"owner_id": 1,
"name": "library",
"creation_time": new Date(),
"creation_time_str": "123",
"update_time": new Date(),
"deleted": 1,
"owner_name": "",
"togglable": true,
"current_user_role_id": 1,
"has_project_admin_role": true,
"is_member": true,
"role_name": 'master',
"repo_count": 0,
"chart_count": 1,
"metadata": {
"public": "true",
"enable_content_trust": "string",
"prevent_vul": "string",
"severity": 'string',
"auto_scan": true,
"retention_id": 1
}
};
fixture.detectChanges(); fixture.detectChanges();
}); });

View File

@ -1,16 +1,24 @@
import { async, ComponentFixture, TestBed } from '@angular/core/testing'; import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { TranslateModule, TranslateService } from '@ngx-translate/core'; import { TranslateModule, TranslateService } from '@ngx-translate/core';
import { LabelFilterComponent } from './label-filter.component'; import { LabelFilterComponent } from './label-filter.component';
import { ClarityModule } from '@clr/angular';
import { CUSTOM_ELEMENTS_SCHEMA } from '@angular/core';
import { FormsModule } from '@angular/forms';
xdescribe('LabelFilterComponent', () => { describe('LabelFilterComponent', () => {
let component: LabelFilterComponent; let component: LabelFilterComponent;
let fixture: ComponentFixture<LabelFilterComponent>; let fixture: ComponentFixture<LabelFilterComponent>;
beforeEach(async(() => { beforeEach(async(() => {
TestBed.configureTestingModule({ TestBed.configureTestingModule({
imports: [ schemas: [
TranslateModule.forRoot() CUSTOM_ELEMENTS_SCHEMA
], ],
imports: [
ClarityModule,
TranslateModule.forRoot(),
FormsModule
],
declarations: [LabelFilterComponent], declarations: [LabelFilterComponent],
providers: [ providers: [
TranslateService TranslateService

View File

@ -17,7 +17,7 @@ export class LabelFilterComponent implements ClrDatagridFilterInterface<any>, On
@Input() labels: Label[] = []; @Input() labels: Label[] = [];
@Input() resourceType: ResourceType; @Input() resourceType: ResourceType;
@ViewChild('filterInput', {static: false}) filterInputRef: ElementRef; @ViewChild('filterInput', {static: true}) filterInputRef: ElementRef;
selectedLabels: Map<number, boolean> = new Map<number, boolean>(); selectedLabels: Map<number, boolean> = new Map<number, boolean>();

View File

@ -1,19 +1,53 @@
import { async, ComponentFixture, TestBed } from '@angular/core/testing'; import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { TranslateModule, TranslateService } from '@ngx-translate/core'; import { TranslateModule, TranslateService } from '@ngx-translate/core';
import { LabelMarkerComponent } from './label-marker.component'; import { LabelMarkerComponent } from './label-marker.component';
import { CUSTOM_ELEMENTS_SCHEMA } from '@angular/core';
import { ClarityModule } from '@clr/angular';
import { FormsModule } from '@angular/forms';
import { Label, LabelService, ErrorHandler } from '@harbor/ui';
import { of } from 'rxjs';
xdescribe('LabelMarkerComponent', () => { describe('LabelMarkerComponent', () => {
const mockErrorHandler = null;
const mockLabelService = {
getChartVersionLabels: () => {
return of(
{
name: "111",
description: "string",
color: "string",
scope: "string",
project_id: 1,
}
);
},
markChartLabel: () => {
},
unmarkChartLabel: () => {
}
};
let component: LabelMarkerComponent; let component: LabelMarkerComponent;
let fixture: ComponentFixture<LabelMarkerComponent>; let fixture: ComponentFixture<LabelMarkerComponent>;
beforeEach(async(() => { beforeEach(async(() => {
TestBed.configureTestingModule({ TestBed.configureTestingModule({
schemas: [
CUSTOM_ELEMENTS_SCHEMA
],
imports: [ imports: [
TranslateModule.forRoot() ClarityModule,
TranslateModule.forRoot(),
FormsModule
], ],
declarations: [LabelMarkerComponent], declarations: [LabelMarkerComponent],
providers: [ providers: [
TranslateService TranslateService,
{ provide: LabelService, useValue: mockLabelService },
{ provide: ErrorHandler, useValue: mockErrorHandler },
] ]
}) })
.compileComponents(); .compileComponents();

View File

@ -30,7 +30,7 @@ export class LabelMarkerComponent implements OnInit {
labelChangeDebouncer: Subject<any> = new Subject(); labelChangeDebouncer: Subject<any> = new Subject();
@ViewChild('filterInput', {static: false}) filterInputRef: ElementRef; @ViewChild('filterInput', {static: true}) filterInputRef: ElementRef;
ngOnInit(): void { ngOnInit(): void {
this.sortedLabels = this.labels; this.sortedLabels = this.labels;

View File

@ -1,19 +1,106 @@
import { async, ComponentFixture, TestBed } from '@angular/core/testing'; import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { TranslateModule, TranslateService } from '@ngx-translate/core'; import { TranslateModule, TranslateService } from '@ngx-translate/core';
import { ChartVersionComponent } from './helm-chart-version.component'; import { ChartVersionComponent } from './helm-chart-version.component';
import { CUSTOM_ELEMENTS_SCHEMA } from '@angular/core';
import { ClarityModule } from '@clr/angular';
import { FormsModule } from '@angular/forms';
import { HelmChartService } from "../../helm-chart.service";
import { LabelFilterComponent } from "../../label-filter/label-filter.component";
xdescribe('ChartVersionComponent', () => { import {
ErrorHandler,
SystemInfoService,
LabelService,
OperationService,
UserPermissionService
} from "@harbor/ui";
import { of } from 'rxjs';
describe('ChartVersionComponent', () => {
let component: ChartVersionComponent; let component: ChartVersionComponent;
let fixture: ComponentFixture<ChartVersionComponent>; let fixture: ComponentFixture<ChartVersionComponent>;
const mockSystemInfoService = {
getSystemInfo: () => {
return of(
{
"with_notary": false,
"with_admiral": false,
"admiral_endpoint": "",
"auth_mode": "oidc_auth",
"registry_url": "nightly-oidc.harbor.io",
"external_url": "https://nightly-oidc.harbor.io",
"project_creation_restriction": "everyone",
"self_registration": false,
"has_ca_root": false,
"harbor_version": "dev",
"registry_storage_provider_name": "filesystem",
"read_only": false,
"with_chartmuseum": true,
"notification_enable": true
}
);
}
};
const mockLabelService = {
getLabels: () => {
return of([]);
},
getProjectLabels: () => {
return of([]);
},
};
const mockErrorHandler = null;
const mockOperationService = {
publishInfo: () => {
return of([]);
},
};
const mockUserPermissionService = {
getPermission() {
return of(true);
}
};
const mockHelmChartService = {
getChartVersions() {
return of(
[{
name: "string",
home: "string",
sources: [],
version: "string",
description: "string",
keywords: [],
maintainers: [],
engine: "string",
icon: "string",
appVersion: "string",
apiVersion: "string",
urls: [],
created: "string",
digest: "string",
labels: []
}]
);
}
};
beforeEach(async(() => { beforeEach(async(() => {
TestBed.configureTestingModule({ TestBed.configureTestingModule({
imports: [ schemas: [
TranslateModule.forRoot() CUSTOM_ELEMENTS_SCHEMA
], ],
declarations: [ChartVersionComponent], imports: [
ClarityModule,
TranslateModule.forRoot(),
FormsModule
],
declarations: [ChartVersionComponent, LabelFilterComponent],
providers: [ providers: [
TranslateService TranslateService,
{ provide: SystemInfoService, useValue: mockSystemInfoService },
{ provide: LabelService, useValue: mockLabelService },
{ provide: UserPermissionService, useValue: mockUserPermissionService },
{ provide: ErrorHandler, useValue: mockErrorHandler },
{ provide: HelmChartService, useValue: mockHelmChartService },
{ provide: OperationService, useValue: mockOperationService },
] ]
}) })
.compileComponents(); .compileComponents();

View File

@ -1,19 +1,94 @@
import { async, ComponentFixture, TestBed } from '@angular/core/testing'; import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { TranslateModule, TranslateService } from '@ngx-translate/core'; import { TranslateModule, TranslateService } from '@ngx-translate/core';
import { HelmChartComponent } from './helm-chart.component'; import { HelmChartComponent } from './helm-chart.component';
import { CUSTOM_ELEMENTS_SCHEMA } from '@angular/core';
import { ErrorHandler, SystemInfoService, UserPermissionService, OperationService } from '@harbor/ui';
import { ClarityModule } from '@clr/angular';
import { FormsModule } from '@angular/forms';
import { of } from 'rxjs';
import { HelmChartService } from "../helm-chart.service";
xdescribe('HelmChartComponent', () => { describe('HelmChartComponent', () => {
let component: HelmChartComponent; let component: HelmChartComponent;
let fixture: ComponentFixture<HelmChartComponent>; let fixture: ComponentFixture<HelmChartComponent>;
const mockErrorHandler = null;
const mockSystemInfoService = {
getSystemInfo: () => {
return of(
{
"with_notary": false,
"with_admiral": false,
"admiral_endpoint": "",
"auth_mode": "oidc_auth",
"registry_url": "nightly-oidc.harbor.io",
"external_url": "https://nightly-oidc.harbor.io",
"project_creation_restriction": "everyone",
"self_registration": false,
"has_ca_root": false,
"harbor_version": "dev",
"registry_storage_provider_name": "filesystem",
"read_only": false,
"with_chartmuseum": true,
"notification_enable": true
}
);
}
};
const mockHelmChartService = {
getChartVersions() {
return of(
[{
name: "string",
home: "string",
sources: [],
version: "string",
description: "string",
keywords: [],
maintainers: [],
engine: "string",
icon: "string",
appVersion: "string",
apiVersion: "string",
urls: [],
created: "string",
digest: "string",
labels: []
}]
);
},
getHelmCharts() {
return of([]);
},
};
const mockUserPermissionService = {
getPermission() {
return of(true);
}
};
const mockOperationService = {
publishInfo: () => {
return of([]);
},
};
beforeEach(async(() => { beforeEach(async(() => {
TestBed.configureTestingModule({ TestBed.configureTestingModule({
schemas: [
CUSTOM_ELEMENTS_SCHEMA
],
imports: [ imports: [
TranslateModule.forRoot() ClarityModule,
TranslateModule.forRoot(),
FormsModule
], ],
declarations: [HelmChartComponent], declarations: [HelmChartComponent],
providers: [ providers: [
TranslateService TranslateService,
{ provide: ErrorHandler, useValue: mockErrorHandler },
{ provide: SystemInfoService, useValue: mockSystemInfoService },
{ provide: HelmChartService, useValue: mockHelmChartService },
{ provide: UserPermissionService, useValue: mockUserPermissionService },
{ provide: OperationService, useValue: mockOperationService },
] ]
}) })
.compileComponents(); .compileComponents();

View File

@ -86,7 +86,6 @@ export class AddRuleComponent implements OnInit, OnDestroy {
set tagsInput(tagsInput) { set tagsInput(tagsInput) {
if (this.rule && this.rule.tag_selectors && this.rule.tag_selectors[0] && this.rule.tag_selectors[0].pattern) { if (this.rule && this.rule.tag_selectors && this.rule.tag_selectors[0] && this.rule.tag_selectors[0].pattern) {
if (tagsInput.indexOf(",") !== -1) { if (tagsInput.indexOf(",") !== -1) {
this.rule.tag_selectors[0].pattern = "{" + tagsInput + "}"; this.rule.tag_selectors[0].pattern = "{" + tagsInput + "}";
} else { } else {

View File

@ -1,19 +1,91 @@
import { async, ComponentFixture, TestBed } from '@angular/core/testing'; import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { TranslateModule, TranslateService } from '@ngx-translate/core'; import { TranslateModule, TranslateService } from '@ngx-translate/core';
import { ListProjectComponent } from './list-project.component'; import { ListProjectComponent } from './list-project.component';
import { CUSTOM_ELEMENTS_SCHEMA, ChangeDetectorRef } from '@angular/core';
xdescribe('ListProjectComponent', () => { import { ClarityModule } from '@clr/angular';
import { FormsModule } from '@angular/forms';
import { OperationService, ProjectService } from "@harbor/ui";
import { SessionService } from "../../shared/session.service";
import { AppConfigService } from "../../app-config.service";
import { RouterTestingModule } from '@angular/router/testing';
import { SearchTriggerService } from "../../base/global-search/search-trigger.service";
import { MessageHandlerService } from "../../shared/message-handler/message-handler.service";
import { StatisticHandler } from "../../shared/statictics/statistic-handler.service";
import { ConfirmationDialogService } from "../../shared/confirmation-dialog/confirmation-dialog.service";
import { of } from 'rxjs';
import { BrowserAnimationsModule, NoopAnimationsModule } from "@angular/platform-browser/animations";
describe('ListProjectComponent', () => {
let component: ListProjectComponent; let component: ListProjectComponent;
let fixture: ComponentFixture<ListProjectComponent>; let fixture: ComponentFixture<ListProjectComponent>;
const mockProjectService = {
listProjects: () => {
return of({
body: []
});
}
};
const mockSessionService = {
getCurrentUser: () => {
return false;
}
};
const mockAppConfigService = {
getConfig: () => {
return {
project_creation_restriction: "",
with_chartmuseum: ""
};
}
};
const mockSearchTriggerService = {
closeSearch: () => {
}
};
const mockStatisticHandler = {
handleError: () => {
}
};
const mockMessageHandlerService = {
refresh: () => {
},
showSuccess: () => {
},
};
const mockConfirmationDialogService = {
confirmationConfirm$: of({
state: "",
data: []
})
};
const mockOperationService = {
publishInfo$: () => {}
};
beforeEach(async(() => { beforeEach(async(() => {
TestBed.configureTestingModule({ TestBed.configureTestingModule({
schemas: [
CUSTOM_ELEMENTS_SCHEMA
],
imports: [ imports: [
TranslateModule.forRoot() BrowserAnimationsModule,
ClarityModule,
TranslateModule.forRoot(),
FormsModule,
RouterTestingModule,
NoopAnimationsModule
], ],
declarations: [ListProjectComponent], declarations: [ListProjectComponent],
providers: [ providers: [
TranslateService TranslateService,
ChangeDetectorRef,
{ provide: ProjectService, useValue: mockProjectService },
{ provide: SessionService, useValue: mockSessionService },
{ provide: AppConfigService, useValue: mockAppConfigService },
{ provide: SearchTriggerService, useValue: mockSearchTriggerService },
{ provide: MessageHandlerService, useValue: mockMessageHandlerService },
{ provide: StatisticHandler, useValue: mockStatisticHandler },
{ provide: ConfirmationDialogService, useValue: mockConfirmationDialogService },
{ provide: OperationService, useValue: mockOperationService },
] ]
}) })
.compileComponents(); .compileComponents();
@ -24,6 +96,15 @@ xdescribe('ListProjectComponent', () => {
component = fixture.componentInstance; component = fixture.componentInstance;
fixture.detectChanges(); fixture.detectChanges();
}); });
let originalTimeout;
beforeEach(function () {
originalTimeout = jasmine.DEFAULT_TIMEOUT_INTERVAL;
jasmine.DEFAULT_TIMEOUT_INTERVAL = 100000;
});
afterEach(function () {
jasmine.DEFAULT_TIMEOUT_INTERVAL = originalTimeout;
});
it('should create', () => { it('should create', () => {
expect(component).toBeTruthy(); expect(component).toBeTruthy();

View File

@ -38,7 +38,7 @@ import { SearchTriggerService } from "../../base/global-search/search-trigger.se
import { AppConfigService } from "../../app-config.service"; import { AppConfigService } from "../../app-config.service";
import { Project } from "../project"; import { Project } from "../project";
import { map, catchError } from "rxjs/operators"; import { map, catchError, finalize } from "rxjs/operators";
import { throwError as observableThrowError } from "rxjs"; import { throwError as observableThrowError } from "rxjs";
@Component({ @Component({
@ -87,9 +87,6 @@ export class ListProjectComponent implements OnDestroy {
this.delProjects(message.data); this.delProjects(message.data);
} }
}); });
let hnd = setInterval(() => ref.markForCheck(), 100);
setTimeout(() => clearInterval(hnd), 5000);
} }
get showRoleInfo(): boolean { get showRoleInfo(): boolean {
@ -149,7 +146,7 @@ export class ListProjectComponent implements OnDestroy {
selectedChange(): void { selectedChange(): void {
let hnd = setInterval(() => this.ref.markForCheck(), 100); let hnd = setInterval(() => this.ref.markForCheck(), 100);
setTimeout(() => clearInterval(hnd), 2000); setTimeout(() => clearInterval(hnd), 1000);
} }
clrLoad(state: State) { clrLoad(state: State) {
@ -168,6 +165,11 @@ export class ListProjectComponent implements OnDestroy {
passInFilteredType = this.filteredType - 1; passInFilteredType = this.filteredType - 1;
} }
this.proService.listProjects(this.searchKeyword, passInFilteredType, pageNumber, this.pageSize) this.proService.listProjects(this.searchKeyword, passInFilteredType, pageNumber, this.pageSize)
.pipe(finalize(() => {
// Force refresh view
let hnd = setInterval(() => this.ref.markForCheck(), 100);
setTimeout(() => clearInterval(hnd), 1000);
}))
.subscribe(response => { .subscribe(response => {
// Get total count // Get total count
if (response.headers) { if (response.headers) {
@ -187,10 +189,6 @@ export class ListProjectComponent implements OnDestroy {
this.loading = false; this.loading = false;
this.msgHandler.handleError(error); this.msgHandler.handleError(error);
}); });
// Force refresh view
let hnd = setInterval(() => this.ref.markForCheck(), 100);
setTimeout(() => clearInterval(hnd), 5000);
} }
newReplicationRule(p: Project) { newReplicationRule(p: Project) {

View File

@ -1,19 +1,71 @@
import { async, ComponentFixture, TestBed } from '@angular/core/testing'; import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { TranslateModule, TranslateService } from '@ngx-translate/core'; import { TranslateModule, TranslateService } from '@ngx-translate/core';
import { AddMemberComponent } from './add-member.component'; import { AddMemberComponent } from './add-member.component';
import { CUSTOM_ELEMENTS_SCHEMA } from '@angular/core';
import { BrowserAnimationsModule, NoopAnimationsModule } from '@angular/platform-browser/animations';
import { ClarityModule } from '@clr/angular';
import { FormsModule } from '@angular/forms';
import { RouterTestingModule } from '@angular/router/testing';
import { HttpClientTestingModule } from "@angular/common/http/testing";
import { MemberService } from '../member.service';
import { UserService } from '../../../user/user.service';
import { of } from 'rxjs';
import { MessageHandlerService } from '../../../shared/message-handler/message-handler.service';
import { ActivatedRoute } from '@angular/router';
xdescribe('AddMemberComponent', () => { describe('AddMemberComponent', () => {
let component: AddMemberComponent; let component: AddMemberComponent;
let fixture: ComponentFixture<AddMemberComponent>; let fixture: ComponentFixture<AddMemberComponent>;
const mockMemberService = {
getUsersNameList: () => {
return of([]);
}
};
const mockUserService = {
getUsersNameList: () => {
return of([
[], []
]);
}
};
const mockMessageHandlerService = {
showSuccess: () => { },
handleError: () => { },
isAppLevel: () => { },
};
beforeEach(async(() => { beforeEach(async(() => {
TestBed.configureTestingModule({ TestBed.configureTestingModule({
schemas: [
CUSTOM_ELEMENTS_SCHEMA
],
imports: [ imports: [
TranslateModule.forRoot() BrowserAnimationsModule,
ClarityModule,
TranslateModule.forRoot(),
FormsModule,
RouterTestingModule,
NoopAnimationsModule,
HttpClientTestingModule
], ],
declarations: [AddMemberComponent], declarations: [AddMemberComponent],
providers: [ providers: [
TranslateService TranslateService,
{ provide: MemberService, useValue: mockMemberService },
{ provide: UserService, useValue: mockUserService },
{ provide: MessageHandlerService, useValue: mockMessageHandlerService },
{
provide: ActivatedRoute, useValue: {
RouterparamMap: of({ get: (key) => 'value' }),
snapshot: {
parent: {
params: { id: 1 }
},
data: 1
}
}
}
] ]
}).compileComponents(); }).compileComponents();
})); }));

View File

@ -64,7 +64,7 @@ export class AddMemberComponent implements AfterViewChecked, OnInit, OnDestroy {
staticBackdrop: boolean = true; staticBackdrop: boolean = true;
closable: boolean = false; closable: boolean = false;
@ViewChild('memberForm', {static: false}) @ViewChild('memberForm', {static: true})
currentForm: NgForm; currentForm: NgForm;
hasChanged: boolean; hasChanged: boolean;

View File

@ -1,19 +1,123 @@
import { async, ComponentFixture, TestBed } from '@angular/core/testing'; import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { TranslateModule, TranslateService } from '@ngx-translate/core'; import { TranslateModule, TranslateService } from '@ngx-translate/core';
import { MemberComponent } from './member.component'; import { MemberComponent } from './member.component';
import { CUSTOM_ELEMENTS_SCHEMA } from '@angular/core';
import { BrowserAnimationsModule, NoopAnimationsModule } from '@angular/platform-browser/animations';
import { ClarityModule } from '@clr/angular';
import { FormsModule } from '@angular/forms';
import { RouterTestingModule } from '@angular/router/testing';
import { HttpClientTestingModule } from '@angular/common/http/testing';
xdescribe('MemberComponent', () => { import { ActivatedRoute, Router } from "@angular/router";
import { OperationService, UserPermissionService, ErrorHandler } from "@harbor/ui";
import { MessageHandlerService } from "../../shared/message-handler/message-handler.service";
import { ConfirmationDialogService } from "../../shared/confirmation-dialog/confirmation-dialog.service";
import { SessionService } from "../../shared/session.service";
import { AddGroupComponent } from './add-group/add-group.component';
import { AddHttpAuthGroupComponent } from './add-http-auth-group/add-http-auth-group.component';
import { MemberService } from "./member.service";
import { AddMemberComponent } from "./add-member/add-member.component";
import { AppConfigService } from "../../app-config.service";
import { of } from 'rxjs';
describe('MemberComponent', () => {
let component: MemberComponent; let component: MemberComponent;
let fixture: ComponentFixture<MemberComponent>; let fixture: ComponentFixture<MemberComponent>;
const mockMemberService = {
getUsersNameList: () => {
return of([]);
},
listMembers: () => {
return of([]);
},
changeMemberRole: () => {
return of(null);
},
deleteMember: () => {
return of(null);
},
};
const mockSessionService = {
getCurrentUser: () => {
return of({
user_id: 1
});
}
};
const mockAppConfigService = {
isLdapMode: () => {
return false;
},
isHttpAuthMode: () => {
return false;
},
isOidcMode: () => {
return true;
},
};
const mockOperationService = {
publishInfo: () => { }
};
const mockMessageHandlerService = {
handleError: () => { }
};
const mockConfirmationDialogService = {
openComfirmDialog: () => { },
confirmationConfirm$: of(
{
state: 1,
source: 2,
}
)
};
const mockUserPermissionService = {
getPermission() {
return of(true);
}
};
const mockErrorHandler = {
error() { }
};
beforeEach(async(() => { beforeEach(async(() => {
TestBed.configureTestingModule({ TestBed.configureTestingModule({
schemas: [
CUSTOM_ELEMENTS_SCHEMA
],
imports: [ imports: [
TranslateModule.forRoot() BrowserAnimationsModule,
ClarityModule,
TranslateModule.forRoot(),
FormsModule,
RouterTestingModule,
NoopAnimationsModule,
HttpClientTestingModule
], ],
declarations: [MemberComponent], declarations: [MemberComponent],
providers: [ providers: [
TranslateService TranslateService,
{ provide: MemberService, useValue: mockMemberService },
{ provide: MessageHandlerService, useValue: mockMessageHandlerService },
{ provide: ConfirmationDialogService, useValue: mockConfirmationDialogService },
{ provide: SessionService, useValue: mockSessionService },
{ provide: OperationService, useValue: mockOperationService },
{ provide: AppConfigService, useValue: mockAppConfigService },
{ provide: UserPermissionService, useValue: mockUserPermissionService },
{ provide: ErrorHandler, useValue: mockErrorHandler },
{
provide: ActivatedRoute, useValue: {
RouterparamMap: of({ get: (key) => 'value' }),
snapshot: {
parent: {
params: { id: 1 }
},
data: 1
}
}
}
] ]
}).compileComponents(); }).compileComponents();
})); }));

View File

@ -1,19 +1,85 @@
import { async, ComponentFixture, TestBed } from '@angular/core/testing'; import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { TranslateModule, TranslateService } from '@ngx-translate/core'; import { TranslateModule, TranslateService } from '@ngx-translate/core';
import { ProjectDetailComponent } from './project-detail.component'; import { ProjectDetailComponent } from './project-detail.component';
import { CUSTOM_ELEMENTS_SCHEMA } from '@angular/core';
import { BrowserAnimationsModule, NoopAnimationsModule } from '@angular/platform-browser/animations';
import { ClarityModule } from '@clr/angular';
import { FormsModule } from '@angular/forms';
import { RouterTestingModule } from '@angular/router/testing';
import { HttpClientTestingModule } from '@angular/common/http/testing';
import { of } from 'rxjs';
import { ActivatedRoute } from '@angular/router';
xdescribe('ProjectDetailComponent', () => { import { SessionService } from '../../shared/session.service';
import { AppConfigService } from "../../app-config.service";
import { UserPermissionService, USERSTATICPERMISSION, ErrorHandler, ProjectService } from "@harbor/ui";
describe('ProjectDetailComponent', () => {
let component: ProjectDetailComponent; let component: ProjectDetailComponent;
let fixture: ComponentFixture<ProjectDetailComponent>; let fixture: ComponentFixture<ProjectDetailComponent>;
const mockSessionService = {
getCurrentUser: () => {
return of({
user_id: 1
});
}
};
const mockAppConfigService = {
getConfig: () => {
return {
with_admiral: true,
with_chartmuseum: true,
};
},
};
const mockUserPermissionService = {
getPermission() {
return of(true);
}
};
const mockProjectService = null;
const mockErrorHandler = {
error() { }
};
const mockActivatedRoute = {
RouterparamMap: of({ get: (key) => 'value' }),
snapshot: {
params: { id: 1 },
data: 1
},
data: of({
projectResolver: {
ismember: true,
role_name: 'master',
}
})
};
beforeEach(async(() => { beforeEach(async(() => {
TestBed.configureTestingModule({ TestBed.configureTestingModule({
schemas: [
CUSTOM_ELEMENTS_SCHEMA
],
imports: [ imports: [
TranslateModule.forRoot() BrowserAnimationsModule,
ClarityModule,
TranslateModule.forRoot(),
FormsModule,
RouterTestingModule,
NoopAnimationsModule,
HttpClientTestingModule
], ],
declarations: [ProjectDetailComponent], declarations: [ProjectDetailComponent],
providers: [ providers: [
TranslateService TranslateService,
{ provide: SessionService, useValue: mockSessionService },
{ provide: AppConfigService, useValue: mockAppConfigService },
{ provide: UserPermissionService, useValue: mockUserPermissionService },
{ provide: ErrorHandler, useValue: mockErrorHandler },
{ provide: ProjectService, useValue: mockProjectService },
{
provide: ActivatedRoute, useValue: mockActivatedRoute
}
] ]
}).compileComponents(); }).compileComponents();
})); }));

View File

@ -1,19 +1,235 @@
import { async, ComponentFixture, TestBed } from '@angular/core/testing'; import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { TranslateModule, TranslateService } from '@ngx-translate/core'; import { TranslateModule, TranslateService } from '@ngx-translate/core';
import { ProjectComponent } from './project.component'; import { ProjectComponent } from './project.component';
import { CUSTOM_ELEMENTS_SCHEMA } from '@angular/core';
xdescribe('ProjectComponent', () => { import { BrowserAnimationsModule, NoopAnimationsModule } from '@angular/platform-browser/animations';
import { ClarityModule } from '@clr/angular';
import { FormsModule } from '@angular/forms';
import { RouterTestingModule } from '@angular/router/testing';
import { HttpClientTestingModule } from '@angular/common/http/testing';
import { ConfigurationService } from '../config/config.service';
import { SessionService } from "../shared/session.service";
import { of } from 'rxjs';
describe('ProjectComponent', () => {
let component: ProjectComponent; let component: ProjectComponent;
let fixture: ComponentFixture<ProjectComponent>; let fixture: ComponentFixture<ProjectComponent>;
const mockSessionService = {
getCurrentUser: () => {
return of({
user_id: 1
});
}
};
const mockConfigurationService = {
getConfiguration: () => {
return of({
"auth_mode": {
"value": "oidc_auth",
"editable": false
},
"count_per_project": {
"value": -1,
"editable": true
},
"email_from": {
"value": "admin \u003csamplin@mydomain.com\u003e",
"editable": true
},
"email_host": {
"value": "smtp.mydomain.com",
"editable": true
},
"email_identity": {
"value": "",
"editable": true
},
"email_insecure": {
"value": false,
"editable": true
},
"email_port": {
"value": 25,
"editable": true
},
"email_ssl": {
"value": false,
"editable": true
},
"email_username": {
"value": "sample_admin@mydomain.com",
"editable": true
},
"http_authproxy_endpoint": {
"value": "",
"editable": true
},
"http_authproxy_skip_search": {
"value": false,
"editable": true
},
"http_authproxy_tokenreview_endpoint": {
"value": "",
"editable": true
},
"http_authproxy_verify_cert": {
"value": true,
"editable": true
},
"ldap_base_dn": {
"value": "",
"editable": true
},
"ldap_filter": {
"value": "",
"editable": true
},
"ldap_group_admin_dn": {
"value": "",
"editable": true
},
"ldap_group_attribute_name": {
"value": "",
"editable": true
},
"ldap_group_base_dn": {
"value": "",
"editable": true
},
"ldap_group_membership_attribute": {
"value": "memberof",
"editable": true
},
"ldap_group_search_filter": {
"value": "",
"editable": true
},
"ldap_group_search_scope": {
"value": 2,
"editable": true
},
"ldap_scope": {
"value": 2,
"editable": true
},
"ldap_search_dn": {
"value": "",
"editable": true
},
"ldap_timeout": {
"value": 5,
"editable": true
},
"ldap_uid": {
"value": "cn",
"editable": true
},
"ldap_url": {
"value": "",
"editable": true
},
"ldap_verify_cert": {
"value": true,
"editable": true
},
"notification_enable": {
"value": true,
"editable": true
},
"oidc_client_id": {
"value": "harb-https",
"editable": true
},
"oidc_endpoint": {
"value": "https://10.158..96:5554/dex",
"editable": true
},
"oidc_groups_claim": {
"value": "",
"editable": true
},
"oidc_name": {
"value": "dex",
"editable": true
},
"oidc_scope": {
"value": "openid,profilline_access",
"editable": true
},
"oidc_verify_cert": {
"value": false,
"editable": true
},
"project_creation_restriction": {
"value": "everyone",
"editable": true
},
"quota_per_project_enable": {
"value": true,
"editable": true
},
"read_only": {
"value": false,
"editable": true
},
"robot_token_duration": {
"value": 43200,
"editable": true
},
"scan_all_policy": {
"value": null,
"editable": true
},
"self_registration": {
"value": false,
"editable": true
},
"storage_per_project": {
"value": -1,
"editable": true
},
"token_expiration": {
"value": 30,
"editable": true
},
"uaa_client_id": {
"value": "",
"editable": true
},
"uaa_client_secret": {
"value": "",
"editable": true
},
"uaa_endpoint": {
"value": "",
"editable": true
},
"uaa_verify_cert": {
"value": false,
"editable": true
}
});
}
};
beforeEach(async(() => { beforeEach(async(() => {
TestBed.configureTestingModule({ TestBed.configureTestingModule({
schemas: [
CUSTOM_ELEMENTS_SCHEMA
],
imports: [ imports: [
TranslateModule.forRoot() BrowserAnimationsModule,
ClarityModule,
TranslateModule.forRoot(),
FormsModule,
RouterTestingModule,
NoopAnimationsModule,
HttpClientTestingModule
], ],
declarations: [ProjectComponent], declarations: [ProjectComponent],
providers: [ providers: [
TranslateService TranslateService,
{ provide: SessionService, useValue: mockSessionService },
{ provide: ConfigurationService, useValue: mockConfigurationService },
] ]
}) })
.compileComponents(); .compileComponents();

View File

@ -1,19 +1,38 @@
import { async, ComponentFixture, TestBed } from '@angular/core/testing'; import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { TranslateModule, TranslateService } from '@ngx-translate/core'; import { TranslateModule, TranslateService } from '@ngx-translate/core';
import { AddRuleComponent } from './add-rule.component'; import { AddRuleComponent } from './add-rule.component';
import { CUSTOM_ELEMENTS_SCHEMA } from '@angular/core';
xdescribe('AddRuleComponent', () => { import { BrowserAnimationsModule, NoopAnimationsModule } from '@angular/platform-browser/animations';
import { ClarityModule } from '@clr/angular';
import { FormsModule } from '@angular/forms';
import { RouterTestingModule } from '@angular/router/testing';
import { of } from 'rxjs';
import { HttpClientTestingModule } from '@angular/common/http/testing';
import { TagRetentionService } from "../tag-retention.service";
import { InlineAlertComponent } from "../../../shared/inline-alert/inline-alert.component";
import { delay } from 'rxjs/operators';
describe('AddRuleComponent', () => {
let component: AddRuleComponent; let component: AddRuleComponent;
let fixture: ComponentFixture<AddRuleComponent>; let fixture: ComponentFixture<AddRuleComponent>;
const mockTagRetentionService = { };
beforeEach(async(() => { beforeEach(async(() => {
TestBed.configureTestingModule({ TestBed.configureTestingModule({
imports: [ schemas: [
TranslateModule.forRoot() CUSTOM_ELEMENTS_SCHEMA
], ],
declarations: [AddRuleComponent], imports: [
BrowserAnimationsModule,
ClarityModule,
TranslateModule.forRoot(),
FormsModule,
RouterTestingModule,
NoopAnimationsModule,
HttpClientTestingModule
],
declarations: [AddRuleComponent, InlineAlertComponent],
providers: [ providers: [
TranslateService TranslateService,
{ provide: TagRetentionService, useValue: mockTagRetentionService },
] ]
}) })
.compileComponents(); .compileComponents();

View File

@ -1,19 +1,82 @@
import { async, ComponentFixture, TestBed } from '@angular/core/testing'; import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { TranslateModule, TranslateService } from '@ngx-translate/core'; import { TranslateModule, TranslateService } from '@ngx-translate/core';
import { TagRetentionComponent } from './tag-retention.component'; import { TagRetentionComponent } from './tag-retention.component';
import { CUSTOM_ELEMENTS_SCHEMA } from '@angular/core';
import { BrowserAnimationsModule, NoopAnimationsModule } from '@angular/platform-browser/animations';
import { ClarityModule } from '@clr/angular';
import { FormsModule } from '@angular/forms';
import { RouterTestingModule } from '@angular/router/testing';
import { of } from 'rxjs';
import { HttpClientTestingModule } from '@angular/common/http/testing';
import { ActivatedRoute } from '@angular/router';
import { AddRuleComponent } from "./add-rule/add-rule.component";
import { TagRetentionService } from "./tag-retention.service";
import { RuleMetadate, Retention } from './retention';
import { ErrorHandler } from "@harbor/ui";
import { delay } from 'rxjs/operators';
xdescribe('TagRetentionComponent', () => { describe('TagRetentionComponent', () => {
let component: TagRetentionComponent; let component: TagRetentionComponent;
let fixture: ComponentFixture<TagRetentionComponent>; let fixture: ComponentFixture<TagRetentionComponent>;
const mockTagRetentionService = {
createRetention: () => of(null).pipe(delay(0)),
updateRetention: () => of(null).pipe(delay(0)),
runNowTrigger: () => of(null).pipe(delay(0)),
whatIfRunTrigger: () => of(null).pipe(delay(0)),
AbortRun: () => of(null).pipe(delay(0)),
seeLog: () => of(null).pipe(delay(0)),
getExecutionHistory: () => of({
body: []
}).pipe(delay(0)),
getRunNowList: () => of({
body: []
}).pipe(delay(0)),
getProjectInfo: () => of({
metadata: {
retention_id: 1
}
}).pipe(delay(0)),
getRetentionMetadata: () => of(new RuleMetadate()).pipe(delay(0)),
getRetention: () => of(new Retention()).pipe(delay(0)),
};
const mockActivatedRoute = {
snapshot: {
parent: {
params: { id: 1 },
data: {
projectResolver: {
metadata: {
retention_id: 1
}
}
}
}
}
};
const mockErrorHandler = {
error: () => {}
};
beforeEach(async(() => { beforeEach(async(() => {
TestBed.configureTestingModule({ TestBed.configureTestingModule({
imports: [ schemas: [
TranslateModule.forRoot() CUSTOM_ELEMENTS_SCHEMA
], ],
declarations: [TagRetentionComponent], imports: [
BrowserAnimationsModule,
ClarityModule,
TranslateModule.forRoot(),
FormsModule,
RouterTestingModule,
NoopAnimationsModule,
HttpClientTestingModule
],
declarations: [TagRetentionComponent, AddRuleComponent],
providers: [ providers: [
TranslateService TranslateService,
{ provide: TagRetentionService, useValue: mockTagRetentionService },
{ provide: ActivatedRoute, useValue: mockActivatedRoute },
{ provide: ErrorHandler, useValue: mockErrorHandler }
] ]
}) })
.compileComponents(); .compileComponents();
@ -22,6 +85,9 @@ xdescribe('TagRetentionComponent', () => {
beforeEach(() => { beforeEach(() => {
fixture = TestBed.createComponent(TagRetentionComponent); fixture = TestBed.createComponent(TagRetentionComponent);
component = fixture.componentInstance; component = fixture.componentInstance;
component.loadingHistories = false;
component.loadingRule = false;
component.loadingHistories = false;
fixture.detectChanges(); fixture.detectChanges();
}); });

View File

@ -1,19 +1,49 @@
import { async, ComponentFixture, TestBed } from '@angular/core/testing'; import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { TranslateModule, TranslateService } from '@ngx-translate/core'; import { TranslateModule, TranslateService } from '@ngx-translate/core';
import { AddWebhookFormComponent } from './add-webhook-form.component'; import { AddWebhookFormComponent } from './add-webhook-form.component';
import { CUSTOM_ELEMENTS_SCHEMA } from '@angular/core';
import { BrowserAnimationsModule, NoopAnimationsModule } from '@angular/platform-browser/animations';
import { RouterTestingModule } from '@angular/router/testing';
import { HttpClientTestingModule } from '@angular/common/http/testing';
import { ClarityModule } from '@clr/angular';
import { FormsModule } from '@angular/forms';
import { WebhookService } from "../webhook.service";
import { MessageHandlerService } from "../../../shared/message-handler/message-handler.service";
import { of } from 'rxjs';
xdescribe('AddWebhookFormComponent', () => { describe('AddWebhookFormComponent', () => {
let component: AddWebhookFormComponent; let component: AddWebhookFormComponent;
let fixture: ComponentFixture<AddWebhookFormComponent>; let fixture: ComponentFixture<AddWebhookFormComponent>;
const mockWebhookService = {
getCurrentUser: () => {
return of(null);
}
};
const mockMessageHandlerService = {
handleError: () => { }
};
beforeEach(async(() => { beforeEach(async(() => {
TestBed.configureTestingModule({ TestBed.configureTestingModule({
schemas: [
CUSTOM_ELEMENTS_SCHEMA
],
imports: [ imports: [
TranslateModule.forRoot() BrowserAnimationsModule,
ClarityModule,
TranslateModule.forRoot(),
FormsModule,
RouterTestingModule,
NoopAnimationsModule,
HttpClientTestingModule
], ],
declarations: [AddWebhookFormComponent], declarations: [AddWebhookFormComponent],
providers: [ providers: [
TranslateService TranslateService,
{ provide: WebhookService, useValue: mockWebhookService },
{ provide: MessageHandlerService, useValue: mockMessageHandlerService },
] ]
}) })
.compileComponents(); .compileComponents();

View File

@ -1,15 +1,29 @@
import { async, ComponentFixture, TestBed } from '@angular/core/testing'; import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { TranslateModule, TranslateService } from '@ngx-translate/core'; import { TranslateModule, TranslateService } from '@ngx-translate/core';
import { AddWebhookComponent } from './add-webhook.component'; import { AddWebhookComponent } from './add-webhook.component';
import { CUSTOM_ELEMENTS_SCHEMA } from '@angular/core';
xdescribe('AddWebhookComponent', () => { import { BrowserAnimationsModule, NoopAnimationsModule } from '@angular/platform-browser/animations';
import { ClarityModule } from '@clr/angular';
import { FormsModule } from '@angular/forms';
import { RouterTestingModule } from '@angular/router/testing';
import { HttpClientTestingModule } from '@angular/common/http/testing';
describe('AddWebhookComponent', () => {
let component: AddWebhookComponent; let component: AddWebhookComponent;
let fixture: ComponentFixture<AddWebhookComponent>; let fixture: ComponentFixture<AddWebhookComponent>;
beforeEach(async(() => { beforeEach(async(() => {
TestBed.configureTestingModule({ TestBed.configureTestingModule({
schemas: [
CUSTOM_ELEMENTS_SCHEMA
],
imports: [ imports: [
TranslateModule.forRoot() BrowserAnimationsModule,
ClarityModule,
TranslateModule.forRoot(),
FormsModule,
RouterTestingModule,
NoopAnimationsModule,
HttpClientTestingModule
], ],
declarations: [AddWebhookComponent], declarations: [AddWebhookComponent],
providers: [ providers: [

View File

@ -1,19 +1,72 @@
import { async, ComponentFixture, TestBed } from '@angular/core/testing'; import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { TranslateModule, TranslateService } from '@ngx-translate/core'; import { TranslateModule, TranslateService } from '@ngx-translate/core';
import { WebhookComponent } from './webhook.component'; import { WebhookComponent } from './webhook.component';
import { ActivatedRoute } from '@angular/router';
xdescribe('WebhookComponent', () => { import { WebhookService } from './webhook.service';
import { MessageHandlerService } from "../../shared/message-handler/message-handler.service";
import { of } from 'rxjs';
import { CUSTOM_ELEMENTS_SCHEMA } from '@angular/core';
import { BrowserAnimationsModule, NoopAnimationsModule } from '@angular/platform-browser/animations';
import { ClarityModule } from '@clr/angular';
import { FormsModule } from '@angular/forms';
import { RouterTestingModule } from '@angular/router/testing';
import { HttpClientTestingModule } from '@angular/common/http/testing';
describe('WebhookComponent', () => {
let component: WebhookComponent; let component: WebhookComponent;
let fixture: ComponentFixture<WebhookComponent>; let fixture: ComponentFixture<WebhookComponent>;
const mockMessageHandlerService = {
handleError: () => { }
};
const mockWebhookService = {
listLastTrigger: () => {
return of([]);
},
listWebhook: () => {
return of([
{
targets: [
{ address: "" }
],
enabled: true
}
]);
},
};
const mockActivatedRoute = {
RouterparamMap: of({ get: (key) => 'value' }),
snapshot: {
parent: {
params: { id: 1 },
data: {
projectResolver: {
ismember: true,
name: 'library',
}
}
}
}
};
beforeEach(async(() => { beforeEach(async(() => {
TestBed.configureTestingModule({ TestBed.configureTestingModule({
schemas: [
CUSTOM_ELEMENTS_SCHEMA
],
imports: [ imports: [
TranslateModule.forRoot() BrowserAnimationsModule,
ClarityModule,
TranslateModule.forRoot(),
FormsModule,
RouterTestingModule,
NoopAnimationsModule,
HttpClientTestingModule
], ],
declarations: [WebhookComponent], declarations: [WebhookComponent],
providers: [ providers: [
TranslateService TranslateService,
{ provide: WebhookService, useValue: mockWebhookService },
{ provide: MessageHandlerService, useValue: mockMessageHandlerService },
{ provide: ActivatedRoute, useValue: mockActivatedRoute },
] ]
}) })
.compileComponents(); .compileComponents();

View File

@ -1,15 +1,29 @@
import { async, ComponentFixture, TestBed } from '@angular/core/testing'; import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { TranslateModule, TranslateService } from '@ngx-translate/core'; import { TranslateModule, TranslateService } from '@ngx-translate/core';
import { DestinationPageComponent } from './destination-page.component'; import { DestinationPageComponent } from './destination-page.component';
import { CUSTOM_ELEMENTS_SCHEMA } from '@angular/core';
xdescribe('DestinationPageComponent', () => { import { BrowserAnimationsModule, NoopAnimationsModule } from '@angular/platform-browser/animations';
import { ClarityModule } from '@clr/angular';
import { FormsModule } from '@angular/forms';
import { RouterTestingModule } from '@angular/router/testing';
import { HttpClientTestingModule } from '@angular/common/http/testing';
describe('DestinationPageComponent', () => {
let component: DestinationPageComponent; let component: DestinationPageComponent;
let fixture: ComponentFixture<DestinationPageComponent>; let fixture: ComponentFixture<DestinationPageComponent>;
beforeEach(async(() => { beforeEach(async(() => {
TestBed.configureTestingModule({ TestBed.configureTestingModule({
schemas: [
CUSTOM_ELEMENTS_SCHEMA
],
imports: [ imports: [
TranslateModule.forRoot() BrowserAnimationsModule,
ClarityModule,
TranslateModule.forRoot(),
FormsModule,
RouterTestingModule,
NoopAnimationsModule,
HttpClientTestingModule
], ],
declarations: [DestinationPageComponent], declarations: [DestinationPageComponent],
providers: [ providers: [

View File

@ -1,15 +1,29 @@
import { async, ComponentFixture, TestBed } from '@angular/core/testing'; import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { TranslateModule, TranslateService } from '@ngx-translate/core'; import { TranslateModule, TranslateService } from '@ngx-translate/core';
import { ReplicationManagementComponent } from './replication-management.component'; import { ReplicationManagementComponent } from './replication-management.component';
import { CUSTOM_ELEMENTS_SCHEMA } from '@angular/core';
xdescribe('ReplicationManagementComponent', () => { import { BrowserAnimationsModule, NoopAnimationsModule } from '@angular/platform-browser/animations';
import { ClarityModule } from '@clr/angular';
import { FormsModule } from '@angular/forms';
import { RouterTestingModule } from '@angular/router/testing';
import { HttpClientTestingModule } from '@angular/common/http/testing';
describe('ReplicationManagementComponent', () => {
let component: ReplicationManagementComponent; let component: ReplicationManagementComponent;
let fixture: ComponentFixture<ReplicationManagementComponent>; let fixture: ComponentFixture<ReplicationManagementComponent>;
beforeEach(async(() => { beforeEach(async(() => {
TestBed.configureTestingModule({ TestBed.configureTestingModule({
schemas: [
CUSTOM_ELEMENTS_SCHEMA
],
imports: [ imports: [
TranslateModule.forRoot() BrowserAnimationsModule,
ClarityModule,
TranslateModule.forRoot(),
FormsModule,
RouterTestingModule,
NoopAnimationsModule,
HttpClientTestingModule
], ],
declarations: [ReplicationManagementComponent], declarations: [ReplicationManagementComponent],
providers: [ providers: [

View File

@ -1,19 +1,84 @@
import { async, ComponentFixture, TestBed } from '@angular/core/testing'; import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { TranslateModule, TranslateService } from '@ngx-translate/core'; import { TranslateModule, TranslateService } from '@ngx-translate/core';
import { ReplicationPageComponent } from './replication-page.component'; import { ReplicationPageComponent } from './replication-page.component';
import { ActivatedRoute, Router } from '@angular/router';
xdescribe('ReplicationPageComponent', () => { import { SessionService } from "../shared/session.service";
import { Project } from "../project/project";
import { ReplicationComponent, UserPermissionService, USERSTATICPERMISSION, ErrorHandler, ProjectService } from "@harbor/ui";
import { CUSTOM_ELEMENTS_SCHEMA } from '@angular/core';
import { BrowserAnimationsModule, NoopAnimationsModule } from '@angular/platform-browser/animations';
import { ClarityModule } from '@clr/angular';
import { FormsModule } from '@angular/forms';
import { RouterTestingModule } from '@angular/router/testing';
import { HttpClientTestingModule } from '@angular/common/http/testing';
import { of } from 'rxjs';
describe('ReplicationPageComponent', () => {
let component: ReplicationPageComponent; let component: ReplicationPageComponent;
let fixture: ComponentFixture<ReplicationPageComponent>; let fixture: ComponentFixture<ReplicationPageComponent>;
const mockSessionService = {
getCurrentUser: () => { }
};
const mockUserPermissionService = {
getPermission() {
return of(true);
}
};
const mockErrorHandler = {
error: () => { }
};
const mockProjectService = {
listProjects: () => {
return of({
body: []
});
}
};
const mockActivatedRoute = {
RouterparamMap: of({ get: (key) => 'value' }),
snapshot: {
parent: {
params: { id: 1 },
data: {
projectResolver: {
ismember: true,
name: 'library',
}
}
},
queryParams: {
is_create: ""
}
}
};
const mockRouter = {
navigate: () => { }
};
beforeEach(async(() => { beforeEach(async(() => {
TestBed.configureTestingModule({ TestBed.configureTestingModule({
schemas: [
CUSTOM_ELEMENTS_SCHEMA
],
imports: [ imports: [
TranslateModule.forRoot() BrowserAnimationsModule,
ClarityModule,
TranslateModule.forRoot(),
FormsModule,
RouterTestingModule,
NoopAnimationsModule,
HttpClientTestingModule
], ],
declarations: [ReplicationPageComponent], declarations: [ReplicationPageComponent],
providers: [ providers: [
TranslateService TranslateService,
{ provide: ErrorHandler, useValue: mockErrorHandler },
{ provide: SessionService, useValue: mockSessionService },
{ provide: UserPermissionService, useValue: mockUserPermissionService },
{ provide: ProjectService, useValue: mockProjectService },
{ provide: ErrorHandler, useValue: mockErrorHandler },
{ provide: ActivatedRoute, useValue: mockActivatedRoute },
{ provide: Router, useValue: mockRouter },
] ]
}) })
.compileComponents(); .compileComponents();

View File

@ -1,19 +1,57 @@
import { async, ComponentFixture, TestBed } from '@angular/core/testing'; import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { TranslateModule, TranslateService } from '@ngx-translate/core'; import { TranslateModule, TranslateService } from '@ngx-translate/core';
import { TotalReplicationPageComponent } from './total-replication-page.component'; import { TotalReplicationPageComponent } from './total-replication-page.component';
import {Router, ActivatedRoute} from "@angular/router";
import {ReplicationRule} from "@harbor/ui";
import { CUSTOM_ELEMENTS_SCHEMA } from '@angular/core';
import { BrowserAnimationsModule, NoopAnimationsModule } from '@angular/platform-browser/animations';
import { ClarityModule } from '@clr/angular';
import { FormsModule } from '@angular/forms';
import { RouterTestingModule } from '@angular/router/testing';
import { HttpClientTestingModule } from '@angular/common/http/testing';
import {SessionService} from "../../shared/session.service";
import {AppConfigService} from "../../app-config.service";
xdescribe('TotalReplicationPageComponent', () => { describe('TotalReplicationPageComponent', () => {
let component: TotalReplicationPageComponent; let component: TotalReplicationPageComponent;
let fixture: ComponentFixture<TotalReplicationPageComponent>; let fixture: ComponentFixture<TotalReplicationPageComponent>;
const mockSessionService = {
getCurrentUser: () => { }
};
const mockAppConfigService = {
getConfig: () => {
return {
project_creation_restriction: "",
with_chartmuseum: ""
};
}
};
const mockRouter = {
navigate: () => { }
};
const mockActivatedRoute = null;
beforeEach(async(() => { beforeEach(async(() => {
TestBed.configureTestingModule({ TestBed.configureTestingModule({
schemas: [
CUSTOM_ELEMENTS_SCHEMA
],
imports: [ imports: [
TranslateModule.forRoot() BrowserAnimationsModule,
ClarityModule,
TranslateModule.forRoot(),
FormsModule,
RouterTestingModule,
NoopAnimationsModule,
HttpClientTestingModule
], ],
declarations: [TotalReplicationPageComponent], declarations: [TotalReplicationPageComponent],
providers: [ providers: [
TranslateService TranslateService,
{ provide: SessionService, useValue: mockSessionService },
{ provide: AppConfigService, useValue: mockAppConfigService },
{ provide: Router, useValue: mockRouter },
{ provide: ActivatedRoute, useValue: mockActivatedRoute },
] ]
}) })
.compileComponents(); .compileComponents();

View File

@ -1,19 +1,55 @@
import { async, ComponentFixture, TestBed } from '@angular/core/testing'; import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { TranslateModule, TranslateService } from '@ngx-translate/core'; import { TranslateModule, TranslateService } from '@ngx-translate/core';
import { RepositoryPageComponent } from './repository-page.component'; import { RepositoryPageComponent } from './repository-page.component';
import { CUSTOM_ELEMENTS_SCHEMA } from '@angular/core';
xdescribe('RepositoryPageComponent', () => { import { BrowserAnimationsModule, NoopAnimationsModule } from '@angular/platform-browser/animations';
import { ClarityModule } from '@clr/angular';
import { FormsModule } from '@angular/forms';
import { RouterTestingModule } from '@angular/router/testing';
import { of } from 'rxjs';
import { HttpClientTestingModule } from '@angular/common/http/testing';
import { ActivatedRoute, Router } from '@angular/router';
import { SessionService } from '../shared/session.service';
describe('RepositoryPageComponent', () => {
let component: RepositoryPageComponent; let component: RepositoryPageComponent;
let fixture: ComponentFixture<RepositoryPageComponent>; let fixture: ComponentFixture<RepositoryPageComponent>;
const mockActivatedRoute = {
RouterparamMap: of({ get: (key) => 'value' }),
snapshot: {
parent: {
params: { id: 1 },
data: {
projectResolver: {
ismember: true,
name: 'library',
}
}
}
}
};
const mockSessionService = {
getCurrentUser: () => { }
};
beforeEach(async(() => { beforeEach(async(() => {
TestBed.configureTestingModule({ TestBed.configureTestingModule({
schemas: [
CUSTOM_ELEMENTS_SCHEMA
],
imports: [ imports: [
TranslateModule.forRoot() BrowserAnimationsModule,
ClarityModule,
TranslateModule.forRoot(),
FormsModule,
RouterTestingModule,
NoopAnimationsModule,
HttpClientTestingModule
], ],
declarations: [RepositoryPageComponent], declarations: [RepositoryPageComponent],
providers: [ providers: [
TranslateService TranslateService,
{ provide: ActivatedRoute, useValue: mockActivatedRoute },
{ provide: SessionService, useValue: mockSessionService },
] ]
}) })
.compileComponents(); .compileComponents();

View File

@ -1,19 +1,80 @@
import { async, ComponentFixture, TestBed } from '@angular/core/testing'; import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { TranslateModule, TranslateService } from '@ngx-translate/core'; import { TranslateModule, TranslateService } from '@ngx-translate/core';
import { TagDetailPageComponent } from './tag-detail-page.component'; import { TagDetailPageComponent } from './tag-detail-page.component';
import { CUSTOM_ELEMENTS_SCHEMA } from '@angular/core';
import { BrowserAnimationsModule, NoopAnimationsModule } from '@angular/platform-browser/animations';
import { ClarityModule } from '@clr/angular';
import { FormsModule } from '@angular/forms';
import { RouterTestingModule } from '@angular/router/testing';
import { of } from 'rxjs';
import { HttpClientTestingModule } from '@angular/common/http/testing';
xdescribe('TagDetailPageComponent', () => { import { ActivatedRoute, Router } from '@angular/router';
import {AppConfigService} from "../../app-config.service";
import { SessionService } from '../../shared/session.service';
describe('TagDetailPageComponent', () => {
let component: TagDetailPageComponent; let component: TagDetailPageComponent;
let fixture: ComponentFixture<TagDetailPageComponent>; let fixture: ComponentFixture<TagDetailPageComponent>;
const mockSessionService = {
getCurrentUser: () => { }
};
const mockAppConfigService = {
getConfig: () => {
return {
registry_storage_provider_name : ""
};
}
};
const mockRouter = {
navigate: () => { }
};
const mockActivatedRoute = {
RouterparamMap: of({ get: (key) => 'value' }),
snapshot: {
params: {
id: 1,
repo: "ere",
tag: "33"
},
parent: {
params: { id: 1 },
},
data: {
projectResolver: {
has_project_admin_role: true,
current_user_role_id: 3,
}
}
},
data: of({
projectResolver: {
ismember: true,
role_name: 'master',
}
})
};
beforeEach(async(() => { beforeEach(async(() => {
TestBed.configureTestingModule({ TestBed.configureTestingModule({
schemas: [
CUSTOM_ELEMENTS_SCHEMA
],
imports: [ imports: [
TranslateModule.forRoot() BrowserAnimationsModule,
ClarityModule,
TranslateModule.forRoot(),
FormsModule,
RouterTestingModule,
NoopAnimationsModule,
HttpClientTestingModule
], ],
declarations: [TagDetailPageComponent], declarations: [TagDetailPageComponent],
providers: [ providers: [
TranslateService TranslateService,
{ provide: SessionService, useValue: mockSessionService },
{ provide: AppConfigService, useValue: mockAppConfigService },
{ provide: Router, useValue: mockRouter },
{ provide: ActivatedRoute, useValue: mockActivatedRoute },
] ]
}) })
.compileComponents(); .compileComponents();

View File

@ -1,19 +1,81 @@
import { async, ComponentFixture, TestBed } from '@angular/core/testing'; import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { TranslateModule, TranslateService } from '@ngx-translate/core'; import { TranslateModule, TranslateService } from '@ngx-translate/core';
import { TagRepositoryComponent } from './tag-repository.component'; import { TagRepositoryComponent } from './tag-repository.component';
import { CUSTOM_ELEMENTS_SCHEMA } from '@angular/core';
import { BrowserAnimationsModule, NoopAnimationsModule } from '@angular/platform-browser/animations';
import { ClarityModule } from '@clr/angular';
import { FormsModule } from '@angular/forms';
import { RouterTestingModule } from '@angular/router/testing';
import { of } from 'rxjs';
import { HttpClientTestingModule } from '@angular/common/http/testing';
import { ActivatedRoute, Router } from '@angular/router';
xdescribe('TagRepositoryComponent', () => { import { AppConfigService } from '../../app-config.service';
import { SessionService } from '../../shared/session.service';
describe('TagRepositoryComponent', () => {
let component: TagRepositoryComponent; let component: TagRepositoryComponent;
let fixture: ComponentFixture<TagRepositoryComponent>; let fixture: ComponentFixture<TagRepositoryComponent>;
const mockSessionService = {
getCurrentUser: () => { }
};
const mockAppConfigService = {
getConfig: () => {
return {
project_creation_restriction: "",
with_chartmuseum: "",
with_notary: "",
with_clair: "",
with_admiral: "",
registry_url: "",
};
}
};
const mockRouter = {
navigate: () => { }
};
const mockActivatedRoute = {
RouterparamMap: of({ get: (key) => 'value' }),
snapshot: {
params: { id: 1 },
parent: {
params: { id: 1 },
},
data: {
projectResolver: {
has_project_admin_role: true,
current_user_role_id: 3,
}
}
},
data: of({
projectResolver: {
ismember: true,
role_name: 'master',
}
})
};
beforeEach(async(() => { beforeEach(async(() => {
TestBed.configureTestingModule({ TestBed.configureTestingModule({
schemas: [
CUSTOM_ELEMENTS_SCHEMA
],
imports: [ imports: [
TranslateModule.forRoot() BrowserAnimationsModule,
ClarityModule,
TranslateModule.forRoot(),
FormsModule,
RouterTestingModule,
NoopAnimationsModule,
HttpClientTestingModule
], ],
declarations: [TagRepositoryComponent], declarations: [TagRepositoryComponent],
providers: [ providers: [
TranslateService TranslateService,
{ provide: SessionService, useValue: mockSessionService },
{ provide: AppConfigService, useValue: mockAppConfigService },
{ provide: Router, useValue: mockRouter },
{ provide: ActivatedRoute, useValue: mockActivatedRoute },
] ]
}) })
.compileComponents(); .compileComponents();

View File

@ -1,19 +1,46 @@
import { async, ComponentFixture, TestBed } from '@angular/core/testing'; import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { TranslateModule, TranslateService } from '@ngx-translate/core'; import { TranslateModule, TranslateService } from '@ngx-translate/core';
import { TopRepoComponent } from './top-repo.component'; import { TopRepoComponent } from './top-repo.component';
import { CUSTOM_ELEMENTS_SCHEMA } from '@angular/core';
xdescribe('TopRepoComponent', () => { import { BrowserAnimationsModule, NoopAnimationsModule } from '@angular/platform-browser/animations';
import { ClarityModule } from '@clr/angular';
import { FormsModule } from '@angular/forms';
import { RouterTestingModule } from '@angular/router/testing';
import { of } from 'rxjs';
import { HttpClientTestingModule } from '@angular/common/http/testing';
import { MessageHandlerService } from '../../shared/message-handler/message-handler.service';
import { TopRepoService } from './top-repository.service';
describe('TopRepoComponent', () => {
let component: TopRepoComponent; let component: TopRepoComponent;
let fixture: ComponentFixture<TopRepoComponent>; let fixture: ComponentFixture<TopRepoComponent>;
const mockMessageHandlerService = {
showSuccess: () => { },
handleError: () => { },
isAppLevel: () => { },
};
const mockTopRepoService = {
getTopRepos: () => of([])
};
beforeEach(async(() => { beforeEach(async(() => {
TestBed.configureTestingModule({ TestBed.configureTestingModule({
schemas: [
CUSTOM_ELEMENTS_SCHEMA
],
imports: [ imports: [
TranslateModule.forRoot() BrowserAnimationsModule,
ClarityModule,
TranslateModule.forRoot(),
FormsModule,
RouterTestingModule,
NoopAnimationsModule,
HttpClientTestingModule
], ],
declarations: [TopRepoComponent], declarations: [TopRepoComponent],
providers: [ providers: [
TranslateService TranslateService,
{ provide: TopRepoService, useValue: mockTopRepoService },
{ provide: MessageHandlerService, useValue: mockMessageHandlerService },
] ]
}) })
.compileComponents(); .compileComponents();

View File

@ -1,19 +1,46 @@
import { async, ComponentFixture, TestBed } from '@angular/core/testing'; import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { TranslateModule, TranslateService } from '@ngx-translate/core'; import { TranslateModule, TranslateService } from '@ngx-translate/core';
import { ConfirmationDialogComponent } from './confirmation-dialog.component'; import { ConfirmationDialogComponent } from './confirmation-dialog.component';
import { CUSTOM_ELEMENTS_SCHEMA } from '@angular/core';
import { BrowserAnimationsModule, NoopAnimationsModule } from '@angular/platform-browser/animations';
import { ClarityModule } from '@clr/angular';
import { FormsModule } from '@angular/forms';
import { RouterTestingModule } from '@angular/router/testing';
import { of } from 'rxjs';
import { HttpClientTestingModule } from '@angular/common/http/testing';
import { ConfirmationDialogService } from './confirmation-dialog.service';
xdescribe('ConfirmationDialogComponent', () => { describe('ConfirmationDialogComponent', () => {
let component: ConfirmationDialogComponent; let component: ConfirmationDialogComponent;
let fixture: ComponentFixture<ConfirmationDialogComponent>; let fixture: ComponentFixture<ConfirmationDialogComponent>;
const mockConfirmationDialogService = {
confirmationAnnouced$: of({
title: "title",
message: "title",
param: "AAA"
}),
cancel: () => { },
confirm: () => { },
};
beforeEach(async(() => { beforeEach(async(() => {
TestBed.configureTestingModule({ TestBed.configureTestingModule({
schemas: [
CUSTOM_ELEMENTS_SCHEMA
],
imports: [ imports: [
TranslateModule.forRoot() BrowserAnimationsModule,
ClarityModule,
TranslateModule.forRoot(),
FormsModule,
RouterTestingModule,
NoopAnimationsModule,
HttpClientTestingModule
], ],
declarations: [ConfirmationDialogComponent], declarations: [ConfirmationDialogComponent],
providers: [ providers: [
TranslateService TranslateService,
{ provide: ConfirmationDialogService, useValue: mockConfirmationDialogService },
] ]
}).compileComponents(); }).compileComponents();
})); }));

View File

@ -1,15 +1,30 @@
import { async, ComponentFixture, TestBed } from '@angular/core/testing'; import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { TranslateModule, TranslateService } from '@ngx-translate/core'; import { TranslateModule, TranslateService } from '@ngx-translate/core';
import { GaugeComponent } from './gauge.component'; import { GaugeComponent } from './gauge.component';
import { CUSTOM_ELEMENTS_SCHEMA } from '@angular/core';
xdescribe('GaugeComponent', () => { import { BrowserAnimationsModule, NoopAnimationsModule } from '@angular/platform-browser/animations';
import { ClarityModule } from '@clr/angular';
import { FormsModule } from '@angular/forms';
import { RouterTestingModule } from '@angular/router/testing';
import { of } from 'rxjs';
import { HttpClientTestingModule } from '@angular/common/http/testing';
describe('GaugeComponent', () => {
let component: GaugeComponent; let component: GaugeComponent;
let fixture: ComponentFixture<GaugeComponent>; let fixture: ComponentFixture<GaugeComponent>;
beforeEach(async(() => { beforeEach(async(() => {
TestBed.configureTestingModule({ TestBed.configureTestingModule({
schemas: [
CUSTOM_ELEMENTS_SCHEMA
],
imports: [ imports: [
TranslateModule.forRoot() BrowserAnimationsModule,
ClarityModule,
TranslateModule.forRoot(),
FormsModule,
RouterTestingModule,
NoopAnimationsModule,
HttpClientTestingModule
], ],
declarations: [GaugeComponent], declarations: [GaugeComponent],
providers: [ providers: [

View File

@ -164,7 +164,9 @@ export class GaugeComponent implements AfterViewInit {
} }
ngAfterViewInit() { ngAfterViewInit() {
this.determineColors(); setTimeout(() => {
this.determineColors();
}, 0);
} }
@ViewChild('barOne', {static: true}) private barOne: ElementRef; @ViewChild('barOne', {static: true}) private barOne: ElementRef;

View File

@ -1,15 +1,30 @@
import { async, ComponentFixture, TestBed } from '@angular/core/testing'; import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { TranslateModule, TranslateService } from '@ngx-translate/core'; import { TranslateModule, TranslateService } from '@ngx-translate/core';
import { InlineAlertComponent } from './inline-alert.component'; import { InlineAlertComponent } from './inline-alert.component';
import { CUSTOM_ELEMENTS_SCHEMA } from '@angular/core';
xdescribe('InlineAlertComponent', () => { import { BrowserAnimationsModule, NoopAnimationsModule } from '@angular/platform-browser/animations';
import { ClarityModule } from '@clr/angular';
import { FormsModule } from '@angular/forms';
import { RouterTestingModule } from '@angular/router/testing';
import { of } from 'rxjs';
import { HttpClientTestingModule } from '@angular/common/http/testing';
describe('InlineAlertComponent', () => {
let component: InlineAlertComponent; let component: InlineAlertComponent;
let fixture: ComponentFixture<InlineAlertComponent>; let fixture: ComponentFixture<InlineAlertComponent>;
beforeEach(async(() => { beforeEach(async(() => {
TestBed.configureTestingModule({ TestBed.configureTestingModule({
schemas: [
CUSTOM_ELEMENTS_SCHEMA
],
imports: [ imports: [
TranslateModule.forRoot() BrowserAnimationsModule,
ClarityModule,
TranslateModule.forRoot(),
FormsModule,
RouterTestingModule,
NoopAnimationsModule,
HttpClientTestingModule
], ],
declarations: [InlineAlertComponent], declarations: [InlineAlertComponent],
providers: [ providers: [

View File

@ -1,19 +1,51 @@
import { async, ComponentFixture, TestBed } from '@angular/core/testing'; import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { TranslateModule, TranslateService } from '@ngx-translate/core'; import { TranslateModule, TranslateService } from '@ngx-translate/core';
import { ListChartVersionRoComponent } from './list-chart-version-ro.component'; import { ListChartVersionRoComponent } from './list-chart-version-ro.component';
import { CUSTOM_ELEMENTS_SCHEMA } from '@angular/core';
import { BrowserAnimationsModule, NoopAnimationsModule } from '@angular/platform-browser/animations';
import { ClarityModule } from '@clr/angular';
import { FormsModule } from '@angular/forms';
import { RouterTestingModule } from '@angular/router/testing';
import { of } from 'rxjs';
import { HttpClientTestingModule } from '@angular/common/http/testing';
import { SearchTriggerService } from '../../base/global-search/search-trigger.service';
import { ProjectService } from '@harbor/ui';
xdescribe('ListChartVersionRoComponent', () => { describe('ListChartVersionRoComponent', () => {
let component: ListChartVersionRoComponent; let component: ListChartVersionRoComponent;
let fixture: ComponentFixture<ListChartVersionRoComponent>; let fixture: ComponentFixture<ListChartVersionRoComponent>;
const mockSearchTriggerService = {
closeSearch: () => { }
};
const mockProjectService = {
listProjects: () => {
return of(
{
body: []
}
);
}
};
beforeEach(async(() => { beforeEach(async(() => {
TestBed.configureTestingModule({ TestBed.configureTestingModule({
schemas: [
CUSTOM_ELEMENTS_SCHEMA
],
imports: [ imports: [
TranslateModule.forRoot() BrowserAnimationsModule,
ClarityModule,
TranslateModule.forRoot(),
FormsModule,
RouterTestingModule,
NoopAnimationsModule,
HttpClientTestingModule
], ],
declarations: [ListChartVersionRoComponent], declarations: [ListChartVersionRoComponent],
providers: [ providers: [
TranslateService TranslateService,
{ provide: ProjectService, useValue: mockProjectService },
{ provide: SearchTriggerService, useValue: mockSearchTriggerService }
] ]
}) })
.compileComponents(); .compileComponents();

View File

@ -1,19 +1,40 @@
import { async, ComponentFixture, TestBed } from '@angular/core/testing'; import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { TranslateModule, TranslateService } from '@ngx-translate/core'; import { TranslateModule, TranslateService } from '@ngx-translate/core';
import { ListProjectROComponent } from './list-project-ro.component'; import { ListProjectROComponent } from './list-project-ro.component';
import { CUSTOM_ELEMENTS_SCHEMA } from '@angular/core';
import { BrowserAnimationsModule, NoopAnimationsModule } from '@angular/platform-browser/animations';
import { ClarityModule } from '@clr/angular';
import { FormsModule } from '@angular/forms';
import { RouterTestingModule } from '@angular/router/testing';
import { of } from 'rxjs';
import { HttpClientTestingModule } from '@angular/common/http/testing';
import { SearchTriggerService } from '../../base/global-search/search-trigger.service';
xdescribe('ListProjectROComponent', () => { describe('ListProjectROComponent', () => {
let component: ListProjectROComponent; let component: ListProjectROComponent;
let fixture: ComponentFixture<ListProjectROComponent>; let fixture: ComponentFixture<ListProjectROComponent>;
const mockSearchTriggerService = {
closeSearch: () => { }
};
beforeEach(async(() => { beforeEach(async(() => {
TestBed.configureTestingModule({ TestBed.configureTestingModule({
schemas: [
CUSTOM_ELEMENTS_SCHEMA
],
imports: [ imports: [
TranslateModule.forRoot() BrowserAnimationsModule,
ClarityModule,
TranslateModule.forRoot(),
FormsModule,
RouterTestingModule,
NoopAnimationsModule,
HttpClientTestingModule
], ],
declarations: [ListProjectROComponent], declarations: [ListProjectROComponent],
providers: [ providers: [
TranslateService TranslateService,
{ provide: SearchTriggerService, useValue: mockSearchTriggerService }
] ]
}) })
.compileComponents(); .compileComponents();

View File

@ -1,19 +1,40 @@
import { async, ComponentFixture, TestBed } from '@angular/core/testing'; import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { TranslateModule, TranslateService } from '@ngx-translate/core'; import { TranslateModule, TranslateService } from '@ngx-translate/core';
import { ListRepositoryROComponent } from './list-repository-ro.component'; import { ListRepositoryROComponent } from './list-repository-ro.component';
import { CUSTOM_ELEMENTS_SCHEMA } from '@angular/core';
import { BrowserAnimationsModule, NoopAnimationsModule } from '@angular/platform-browser/animations';
import { ClarityModule } from '@clr/angular';
import { FormsModule } from '@angular/forms';
import { RouterTestingModule } from '@angular/router/testing';
import { of } from 'rxjs';
import { HttpClientTestingModule } from '@angular/common/http/testing';
import { SearchTriggerService } from '../../base/global-search/search-trigger.service';
xdescribe('ListRepositoryRoComponent', () => { describe('ListRepositoryRoComponent', () => {
let component: ListRepositoryROComponent; let component: ListRepositoryROComponent;
let fixture: ComponentFixture<ListRepositoryROComponent>; let fixture: ComponentFixture<ListRepositoryROComponent>;
const mockSearchTriggerService = {
closeSearch: () => { }
};
beforeEach(async(() => { beforeEach(async(() => {
TestBed.configureTestingModule({ TestBed.configureTestingModule({
schemas: [
CUSTOM_ELEMENTS_SCHEMA
],
imports: [ imports: [
TranslateModule.forRoot() BrowserAnimationsModule,
ClarityModule,
TranslateModule.forRoot(),
FormsModule,
RouterTestingModule,
NoopAnimationsModule,
HttpClientTestingModule
], ],
declarations: [ListRepositoryROComponent], declarations: [ListRepositoryROComponent],
providers: [ providers: [
TranslateService TranslateService,
{ provide: SearchTriggerService, useValue: mockSearchTriggerService }
] ]
}).compileComponents(); }).compileComponents();
})); }));

View File

@ -1,18 +1,38 @@
import { async, ComponentFixture, TestBed } from '@angular/core/testing'; import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { TranslateModule, TranslateService } from '@ngx-translate/core'; import { TranslateModule, TranslateService } from '@ngx-translate/core';
import { NewUserFormComponent } from './new-user-form.component'; import { NewUserFormComponent } from './new-user-form.component';
import { CUSTOM_ELEMENTS_SCHEMA } from '@angular/core';
import { BrowserAnimationsModule, NoopAnimationsModule } from '@angular/platform-browser/animations';
import { ClarityModule } from '@clr/angular';
import { FormsModule } from '@angular/forms';
import { RouterTestingModule } from '@angular/router/testing';
import { of } from 'rxjs';
import { HttpClientTestingModule } from '@angular/common/http/testing';
import { SessionService } from '../../shared/session.service';
xdescribe('NewUserFormComponent', () => { describe('NewUserFormComponent', () => {
let component: NewUserFormComponent; let component: NewUserFormComponent;
let fixture: ComponentFixture<NewUserFormComponent>; let fixture: ComponentFixture<NewUserFormComponent>;
const mockSessionService = {
getCurrentUser: () => { }
};
beforeEach(async(() => { beforeEach(async(() => {
TestBed.configureTestingModule({ TestBed.configureTestingModule({
schemas: [
CUSTOM_ELEMENTS_SCHEMA
],
imports: [ imports: [
TranslateModule.forRoot() BrowserAnimationsModule,
ClarityModule,
TranslateModule.forRoot(),
FormsModule,
RouterTestingModule,
NoopAnimationsModule,
HttpClientTestingModule
], ],
declarations: [NewUserFormComponent], declarations: [NewUserFormComponent],
providers: [ providers: [
{ provide: SessionService, useValue: mockSessionService },
TranslateService TranslateService
] ]
}) })

View File

@ -1,15 +1,34 @@
import { async, ComponentFixture, TestBed } from '@angular/core/testing'; import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { TranslateModule, TranslateService } from '@ngx-translate/core'; import { TranslateModule, TranslateService } from '@ngx-translate/core';
import { PageNotFoundComponent } from './not-found.component'; import { PageNotFoundComponent } from './not-found.component';
import { CUSTOM_ELEMENTS_SCHEMA } from '@angular/core';
import { BrowserAnimationsModule, NoopAnimationsModule } from '@angular/platform-browser/animations';
import { ClarityModule } from '@clr/angular';
import { FormsModule } from '@angular/forms';
import { RouterTestingModule } from '@angular/router/testing';
import { of } from 'rxjs';
import { HttpClientTestingModule } from '@angular/common/http/testing';
import { Router } from '@angular/router';
xdescribe('PageNotFoundComponent', () => { describe('PageNotFoundComponent', () => {
let component: PageNotFoundComponent; let component: PageNotFoundComponent;
let fixture: ComponentFixture<PageNotFoundComponent>; let fixture: ComponentFixture<PageNotFoundComponent>;
const mockRouter = {
navigate: () => {}
};
beforeEach(async(() => { beforeEach(async(() => {
TestBed.configureTestingModule({ TestBed.configureTestingModule({
schemas: [
CUSTOM_ELEMENTS_SCHEMA
],
imports: [ imports: [
TranslateModule.forRoot() BrowserAnimationsModule,
ClarityModule,
TranslateModule.forRoot(),
FormsModule,
RouterTestingModule,
NoopAnimationsModule,
HttpClientTestingModule
], ],
declarations: [PageNotFoundComponent], declarations: [PageNotFoundComponent],
providers: [ providers: [

View File

@ -1,19 +1,69 @@
import { async, ComponentFixture, TestBed } from '@angular/core/testing'; import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { TranslateModule, TranslateService } from '@ngx-translate/core'; import { TranslateModule, TranslateService } from '@ngx-translate/core';
import { StatisticsPanelComponent } from './statistics-panel.component'; import { StatisticsPanelComponent } from './statistics-panel.component';
import { StatisticsComponent } from './statistics.component';
xdescribe('StatisticsPanelComponent', () => { import { CUSTOM_ELEMENTS_SCHEMA } from '@angular/core';
import { BrowserAnimationsModule, NoopAnimationsModule } from '@angular/platform-browser/animations';
import { ClarityModule } from '@clr/angular';
import { FormsModule } from '@angular/forms';
import { RouterTestingModule } from '@angular/router/testing';
import { of } from 'rxjs';
import { HttpClientTestingModule } from '@angular/common/http/testing';
import { StatisticsService } from "./statistics.service";
import { SessionService } from "../session.service";
import { MessageHandlerService } from "../message-handler/message-handler.service";
import { StatisticHandler } from "./statistic-handler.service";
import { AppConfigService } from "./../../app-config.service";
import { Statistics } from './statistics';
import { Volumes } from './volumes';
describe('StatisticsPanelComponent', () => {
let component: StatisticsPanelComponent; let component: StatisticsPanelComponent;
let fixture: ComponentFixture<StatisticsPanelComponent>; let fixture: ComponentFixture<StatisticsPanelComponent>;
const mockStatisticsService = {
getStatistics: () => of(new Statistics()),
getVolumes: () => of(new Volumes()),
};
const mockSessionService = {
getCurrentUser: () => { }
};
const mockAppConfigService = {
getConfig: () => {
return {
registry_storage_provider_name : ""
};
}
};
const mockMessageHandlerService = {
handleError: () => { }
};
const mockStatisticHandler = {
refreshChan$: of(null)
};
const mockRouter = {
navigate: () => { }
};
beforeEach(async(() => { beforeEach(async(() => {
TestBed.configureTestingModule({ TestBed.configureTestingModule({
imports: [ schemas: [
TranslateModule.forRoot() CUSTOM_ELEMENTS_SCHEMA
], ],
declarations: [StatisticsPanelComponent], imports: [
BrowserAnimationsModule,
ClarityModule,
TranslateModule.forRoot(),
FormsModule,
RouterTestingModule,
NoopAnimationsModule,
HttpClientTestingModule
],
declarations: [StatisticsPanelComponent, StatisticsComponent],
providers: [ providers: [
TranslateService TranslateService,
{ provide: SessionService, useValue: mockSessionService },
{ provide: AppConfigService, useValue: mockAppConfigService },
{ provide: StatisticsService, useValue: mockStatisticsService },
{ provide: StatisticHandler, useValue: mockStatisticHandler },
{ provide: MessageHandlerService, useValue: mockMessageHandlerService }
] ]
}).compileComponents(); }).compileComponents();
})); }));