import { ComponentFixture, TestBed } from '@angular/core/testing';
import { RouterTestingModule } from '@angular/router/testing';
-import { TabsModule } from 'ngx-bootstrap/tabs/tabs.module';
+import { ToastModule } from 'ng2-toastr';
+import { BsModalService, TabsModule } from 'ngx-bootstrap';
import { configureTestBed } from '../../../../testing/unit-test-helper';
+import { PoolService } from '../../../shared/api/pool.service';
+import { DeletionModalComponent } from '../../../shared/components/deletion-modal/deletion-modal.component';
+import { TaskWrapperService } from '../../../shared/services/task-wrapper.service';
import { SharedModule } from '../../../shared/shared.module';
import { PoolListComponent } from './pool-list.component';
configureTestBed({
declarations: [PoolListComponent],
- imports: [SharedModule, TabsModule.forRoot(), HttpClientTestingModule, RouterTestingModule]
+ imports: [
+ SharedModule,
+ ToastModule.forRoot(),
+ RouterTestingModule,
+ TabsModule.forRoot(),
+ HttpClientTestingModule
+ ]
});
beforeEach(() => {
it('should create', () => {
expect(component).toBeTruthy();
});
+
+ describe('pool deletion', () => {
+ let poolService: PoolService;
+ let taskWrapper: TaskWrapperService;
+
+ const setSelectedPool = (poolName: string) => {
+ component.selection.selected = [{ pool_name: poolName }];
+ component.selection.update();
+ };
+
+ const callDeletion = () => {
+ component.deletePoolModal();
+ const deletion: DeletionModalComponent = component.modalRef.content;
+ deletion.submitActionObservable();
+ };
+
+ const testPoolDeletion = (poolName) => {
+ setSelectedPool(poolName);
+ callDeletion();
+ expect(poolService.delete).toHaveBeenCalledWith(poolName);
+ expect(taskWrapper.wrapTaskAroundCall).toHaveBeenCalledWith({
+ task: {
+ name: 'pool/delete',
+ metadata: {
+ pool_name: poolName
+ }
+ },
+ call: undefined // because of stub
+ });
+ };
+
+ beforeEach(() => {
+ spyOn(TestBed.get(BsModalService), 'show').and.callFake((deletionClass, config) => {
+ return {
+ content: Object.assign(new deletionClass(), config.initialState)
+ };
+ });
+ poolService = TestBed.get(PoolService);
+ spyOn(poolService, 'delete').and.stub();
+ taskWrapper = TestBed.get(TaskWrapperService);
+ spyOn(taskWrapper, 'wrapTaskAroundCall').and.callThrough();
+ });
+
+ it('should pool deletion with two different pools', () => {
+ testPoolDeletion('somePoolName');
+ testPoolDeletion('aDifferentPoolName');
+ });
+ });
});
import { Component } from '@angular/core';
+import { BsModalRef, BsModalService } from 'ngx-bootstrap';
+
import { PoolService } from '../../../shared/api/pool.service';
+import {
+ DeletionModalComponent
+} from '../../../shared/components/deletion-modal/deletion-modal.component';
import { CdTableColumn } from '../../../shared/models/cd-table-column';
import { CdTableFetchDataContext } from '../../../shared/models/cd-table-fetch-data-context';
import { CdTableSelection } from '../../../shared/models/cd-table-selection';
+import { ExecutingTask } from '../../../shared/models/executing-task';
+import { FinishedTask } from '../../../shared/models/finished-task';
+import { TaskWrapperService } from '../../../shared/services/task-wrapper.service';
import { Pool } from '../pool';
@Component({
pools: Pool[] = [];
columns: CdTableColumn[];
selection = new CdTableSelection();
+ modalRef: BsModalRef;
+ executingTasks: ExecutingTask[] = [];
- constructor(private poolService: PoolService) {
+ constructor(
+ private poolService: PoolService,
+ private taskWrapper: TaskWrapperService,
+ private modalService: BsModalService
+ ) {
this.columns = [
{
prop: 'pool_name',
}
);
}
+
+ deletePoolModal() {
+ const name = this.selection.first().pool_name;
+ this.modalRef = this.modalService.show(DeletionModalComponent, {
+ initialState: {
+ itemDescription: 'Pool',
+ submitActionObservable: () =>
+ this.taskWrapper.wrapTaskAroundCall({
+ task: new FinishedTask('pool/delete', { pool_name: name }),
+ call: this.poolService.delete(name)
+ })
+ }
+ });
+ }
}