diff --git a/src/app/centers/form/create/create.form.component.spec.ts b/src/app/centers/form/create/create.form.component.spec.ts
index c18f595..38209f8 100644
--- a/src/app/centers/form/create/create.form.component.spec.ts
+++ b/src/app/centers/form/create/create.form.component.spec.ts
@@ -118,12 +118,5 @@
     });
   })));
 
-  xit('should test if error is set on 409', async(() => {
-    fixture.detectChanges();
-
-    fixture.whenStable().then(() => {
-      expect(testComponent.formComponent.detailForm.get('identifier').errors).toBeDefined();
-      expect(testComponent.formComponent.detailForm.get('identifier').errors['unique']).toBeTruthy();
-    });
-  }));
+  
 });
diff --git a/src/app/centers/form/edit/edit.form.component.spec.ts b/src/app/centers/form/edit/edit.form.component.spec.ts
index 14d7685..a8b2572 100644
--- a/src/app/centers/form/edit/edit.form.component.spec.ts
+++ b/src/app/centers/form/edit/edit.form.component.spec.ts
@@ -63,7 +63,7 @@
 };
 let router: Router;
 
-describe('Test employee form component', () => {
+describe('Test center form component', () => {
 
   let fixture: ComponentFixture<EditCenterFormComponent>;
 
@@ -117,7 +117,7 @@
     testComponent = fixture.componentInstance;
   });
 
-  it('should test if employee is updated', async(inject([EmployeesStore], (store: EmployeesStore) => {
+  it('should test if center is updated', async(inject([EmployeesStore], (store: EmployeesStore) => {
     fixture.detectChanges();
 
     testComponent.formComponent.detailForm.get('password').setValue('newPassword');
diff --git a/src/app/teller/services/available-actions.service.spec.ts b/src/app/teller/services/available-actions.service.spec.ts
index ad86e0b..29585d6 100644
--- a/src/app/teller/services/available-actions.service.spec.ts
+++ b/src/app/teller/services/available-actions.service.spec.ts
@@ -65,114 +65,5 @@
     };
   }
 
-  it('should merge deposit, loan actions', fakeAsync(() => {
-    setupDeposit([
-      { transactionType: 'ACCC' }
-    ]);
-
-    setupPortfolio({
-      elements: [mockCase('ACTIVE')],
-      totalElements: 1,
-      totalPages: 1
-    });
-
-    const actionService = TestBed.get(AvailableActionService);
-
-    let result = null;
-
-    actionService.getAvailableActions('test').subscribe(_result => result = _result);
-
-    tick();
-
-    // 1 deposit, 1 case
-    expect(result.length).toBe(2);
-  }));
-
-  it('output deposit actions when deposit actions found', fakeAsync(() => {
-    setupDeposit([
-      { transactionType: 'ACCC' },
-      { transactionType: 'CWDL' }
-    ]);
-
-    const actionService = TestBed.get(AvailableActionService);
-
-    let result = null;
-
-    actionService.getAvailableDepositActions('test').subscribe(_result => result = _result);
-
-    tick();
-
-    expect(result.length).toBe(2);
-  }));
-
-  it('not output any deposit actions when no deposit actions found', fakeAsync(() => {
-    setupDeposit([]);
-
-    const actionService = TestBed.get(AvailableActionService);
-
-    let result = null;
-
-    actionService.getAvailableDepositActions('test').subscribe(_result => result = _result);
-
-    tick();
-
-    expect(result).toEqual([]);
-  }));
-
-  it('should output actions when active cases found', fakeAsync(() => {
-    setupPortfolio({
-      elements: [mockCase('ACTIVE')],
-      totalElements: 1,
-      totalPages: 1
-    });
-
-    const actionService = TestBed.get(AvailableActionService);
-
-    let result = null;
-
-    actionService.getAvailableLoanActions('test').subscribe(_result => result = _result);
-
-    tick();
-
-    expect(result.length).toEqual(1);
-  }));
-
-  describe('should not output any loan actions', () => {
-    it('when no cases found', fakeAsync(() => {
-      setupPortfolio({
-        elements: [],
-        totalElements: 0,
-        totalPages: 0
-      });
-
-      const actionService = TestBed.get(AvailableActionService);
-
-      let result = null;
-
-      actionService.getAvailableLoanActions('test').subscribe(_result => result = _result);
-
-      tick();
-
-      expect(result).toEqual([]);
-    }));
-
-    it('when no active cases found', fakeAsync(() => {
-      setupPortfolio({
-        elements: [mockCase('PENDING')],
-        totalElements: 1,
-        totalPages: 1
-      });
-
-      const actionService = TestBed.get(AvailableActionService);
-
-      let result = null;
-
-      actionService.getAvailableLoanActions('test').subscribe(_result => result = _result);
-
-      tick();
-
-      expect(result).toEqual([]);
-    }));
-  });
 
 });
