Fix doc cleanup signals, testing
This commit is contained in:
@@ -1,22 +1,157 @@
|
||||
import { ComponentFixture, TestBed } from '@angular/core/testing'
|
||||
|
||||
import { TrashComponent } from './trash.component'
|
||||
import { HttpClientTestingModule } from '@angular/common/http/testing'
|
||||
import { PageHeaderComponent } from '../../common/page-header/page-header.component'
|
||||
import {
|
||||
NgbModal,
|
||||
NgbPaginationModule,
|
||||
NgbPopoverModule,
|
||||
} from '@ng-bootstrap/ng-bootstrap'
|
||||
import { NgxBootstrapIconsModule, allIcons } from 'ngx-bootstrap-icons'
|
||||
import { FormsModule, ReactiveFormsModule } from '@angular/forms'
|
||||
import { TrashService } from 'src/app/services/trash.service'
|
||||
import { of } from 'rxjs'
|
||||
import { ConfirmDialogComponent } from '../../common/confirm-dialog/confirm-dialog.component'
|
||||
import { By } from '@angular/platform-browser'
|
||||
|
||||
const documentsInTrash = [
|
||||
{
|
||||
id: 1,
|
||||
name: 'test1',
|
||||
created: new Date('2023-03-01T10:26:03.093116Z'),
|
||||
deleted_at: new Date('2023-03-01T10:26:03.093116Z'),
|
||||
},
|
||||
{
|
||||
id: 2,
|
||||
name: 'test2',
|
||||
created: new Date('2023-03-01T10:26:03.093116Z'),
|
||||
deleted_at: new Date('2023-03-01T10:26:03.093116Z'),
|
||||
},
|
||||
]
|
||||
|
||||
describe('TrashComponent', () => {
|
||||
let component: TrashComponent
|
||||
let fixture: ComponentFixture<TrashComponent>
|
||||
let trashService: TrashService
|
||||
let modalService: NgbModal
|
||||
|
||||
beforeEach(async () => {
|
||||
await TestBed.configureTestingModule({
|
||||
declarations: [TrashComponent],
|
||||
declarations: [
|
||||
TrashComponent,
|
||||
PageHeaderComponent,
|
||||
ConfirmDialogComponent,
|
||||
],
|
||||
imports: [
|
||||
HttpClientTestingModule,
|
||||
FormsModule,
|
||||
ReactiveFormsModule,
|
||||
NgbPopoverModule,
|
||||
NgbPaginationModule,
|
||||
NgxBootstrapIconsModule.pick(allIcons),
|
||||
],
|
||||
}).compileComponents()
|
||||
|
||||
fixture = TestBed.createComponent(TrashComponent)
|
||||
trashService = TestBed.inject(TrashService)
|
||||
modalService = TestBed.inject(NgbModal)
|
||||
component = fixture.componentInstance
|
||||
fixture.detectChanges()
|
||||
})
|
||||
|
||||
it('should create', () => {
|
||||
expect(component).toBeTruthy()
|
||||
it('should call correct service method on reload', () => {
|
||||
const trashSpy = jest.spyOn(trashService, 'getTrash')
|
||||
trashSpy.mockReturnValue(of(documentsInTrash))
|
||||
component.reload()
|
||||
expect(trashSpy).toHaveBeenCalled()
|
||||
expect(component.documentsInTrash).toEqual(documentsInTrash)
|
||||
})
|
||||
|
||||
it('should support delete document', () => {
|
||||
const trashSpy = jest.spyOn(trashService, 'emptyTrash')
|
||||
let modal
|
||||
modalService.activeInstances.subscribe((instances) => {
|
||||
modal = instances[0]
|
||||
})
|
||||
trashSpy.mockReturnValue(of('OK'))
|
||||
component.delete(documentsInTrash[0])
|
||||
expect(modal).toBeDefined()
|
||||
modal.componentInstance.confirmClicked.next()
|
||||
expect(trashSpy).toHaveBeenCalled()
|
||||
})
|
||||
|
||||
it('should support empty trash', () => {
|
||||
const trashSpy = jest.spyOn(trashService, 'emptyTrash')
|
||||
let modal
|
||||
modalService.activeInstances.subscribe((instances) => {
|
||||
modal = instances[instances.length - 1]
|
||||
})
|
||||
trashSpy.mockReturnValue(of('OK'))
|
||||
component.emptyTrash()
|
||||
expect(modal).toBeDefined()
|
||||
modal.componentInstance.confirmClicked.next()
|
||||
expect(trashSpy).toHaveBeenCalled()
|
||||
modal.close()
|
||||
component.emptyTrash(new Set([1, 2]))
|
||||
modal.componentInstance.confirmClicked.next()
|
||||
expect(trashSpy).toHaveBeenCalledWith([1, 2])
|
||||
})
|
||||
|
||||
it('should support restore document', () => {
|
||||
const restoreSpy = jest.spyOn(trashService, 'restoreDocuments')
|
||||
const reloadSpy = jest.spyOn(component, 'reload')
|
||||
restoreSpy.mockReturnValue(of('OK'))
|
||||
component.restore(documentsInTrash[0])
|
||||
expect(restoreSpy).toHaveBeenCalledWith([documentsInTrash[0].id])
|
||||
expect(reloadSpy).toHaveBeenCalled()
|
||||
})
|
||||
|
||||
it('should support restore all documents', () => {
|
||||
const restoreSpy = jest.spyOn(trashService, 'restoreDocuments')
|
||||
const reloadSpy = jest.spyOn(component, 'reload')
|
||||
restoreSpy.mockReturnValue(of('OK'))
|
||||
component.restoreAll()
|
||||
expect(restoreSpy).toHaveBeenCalled()
|
||||
expect(reloadSpy).toHaveBeenCalled()
|
||||
component.restoreAll(new Set([1, 2]))
|
||||
expect(restoreSpy).toHaveBeenCalledWith([1, 2])
|
||||
})
|
||||
|
||||
it('should support toggle all items in view', () => {
|
||||
component.documentsInTrash = documentsInTrash
|
||||
expect(component.selectedDocuments.size).toEqual(0)
|
||||
const toggleAllSpy = jest.spyOn(component, 'toggleAll')
|
||||
const checkButton = fixture.debugElement.queryAll(
|
||||
By.css('input.form-check-input')
|
||||
)[0]
|
||||
checkButton.nativeElement.dispatchEvent(new Event('click'))
|
||||
checkButton.nativeElement.checked = true
|
||||
checkButton.nativeElement.dispatchEvent(new Event('click'))
|
||||
expect(toggleAllSpy).toHaveBeenCalled()
|
||||
expect(component.selectedDocuments.size).toEqual(documentsInTrash.length)
|
||||
})
|
||||
|
||||
it('should support toggle item', () => {
|
||||
component.selectedDocuments = new Set([1])
|
||||
component.toggleSelected(documentsInTrash[0])
|
||||
expect(component.selectedDocuments.size).toEqual(0)
|
||||
component.toggleSelected(documentsInTrash[0])
|
||||
expect(component.selectedDocuments.size).toEqual(1)
|
||||
})
|
||||
|
||||
it('should support clear selection', () => {
|
||||
component.selectedDocuments = new Set([1])
|
||||
component.clearSelection()
|
||||
expect(component.selectedDocuments.size).toEqual(0)
|
||||
})
|
||||
|
||||
it('should correctly display days remaining', () => {
|
||||
expect(component.getDaysRemaining(documentsInTrash[0])).toBeLessThan(0)
|
||||
const tenDaysAgo = new Date()
|
||||
tenDaysAgo.setDate(tenDaysAgo.getDate() - 10)
|
||||
expect(
|
||||
component.getDaysRemaining({ deleted_at: tenDaysAgo })
|
||||
).toBeGreaterThan(0) // 10 days ago but depends on month
|
||||
})
|
||||
})
|
||||
|
||||
@@ -79,7 +79,7 @@ export class TrashComponent implements OnDestroy {
|
||||
.pipe(takeUntil(this.unsubscribeNotifier))
|
||||
.subscribe(() => {
|
||||
this.trashService
|
||||
.emptyTrash(documents ? Array.from(documents) : [])
|
||||
.emptyTrash(documents ? Array.from(documents) : null)
|
||||
.subscribe(() => {
|
||||
this.toastService.showInfo($localize`Document(s) deleted`)
|
||||
this.allToggled = false
|
||||
@@ -95,9 +95,9 @@ export class TrashComponent implements OnDestroy {
|
||||
})
|
||||
}
|
||||
|
||||
restoreAll(objects: Set<number> = null) {
|
||||
restoreAll(documents: Set<number> = null) {
|
||||
this.trashService
|
||||
.restoreDocuments(objects ? Array.from(this.selectedDocuments) : [])
|
||||
.restoreDocuments(documents ? Array.from(documents) : null)
|
||||
.subscribe(() => {
|
||||
this.toastService.showInfo($localize`Document(s) restored`)
|
||||
this.allToggled = false
|
||||
|
||||
@@ -1,16 +1,50 @@
|
||||
import { TestBed } from '@angular/core/testing'
|
||||
|
||||
import { TrashService } from './trash.service'
|
||||
import {
|
||||
HttpClientTestingModule,
|
||||
HttpTestingController,
|
||||
} from '@angular/common/http/testing'
|
||||
import { environment } from 'src/environments/environment'
|
||||
|
||||
describe('TrashServiceService', () => {
|
||||
let service: TrashService
|
||||
let httpTestingController: HttpTestingController
|
||||
|
||||
beforeEach(() => {
|
||||
TestBed.configureTestingModule({})
|
||||
TestBed.configureTestingModule({
|
||||
imports: [HttpClientTestingModule],
|
||||
})
|
||||
service = TestBed.inject(TrashService)
|
||||
httpTestingController = TestBed.inject(HttpTestingController)
|
||||
})
|
||||
|
||||
it('should be created', () => {
|
||||
expect(service).toBeTruthy()
|
||||
it('should call correct endpoint for getTrash', () => {
|
||||
service.getTrash().subscribe()
|
||||
const req = httpTestingController.expectOne(
|
||||
`${environment.apiBaseUrl}trash/`
|
||||
)
|
||||
expect(req.request.method).toEqual('GET')
|
||||
})
|
||||
|
||||
it('should call correct endpoint for emptyTrash', () => {
|
||||
service.emptyTrash().subscribe()
|
||||
const req = httpTestingController.expectOne(
|
||||
`${environment.apiBaseUrl}trash/`
|
||||
)
|
||||
expect(req.request.method).toEqual('POST')
|
||||
expect(req.request.body).toEqual({ action: 'empty', documents: [] })
|
||||
})
|
||||
|
||||
it('should call correct endpoint for restoreDocuments', () => {
|
||||
service.restoreDocuments([1, 2, 3]).subscribe()
|
||||
const req = httpTestingController.expectOne(
|
||||
`${environment.apiBaseUrl}trash/`
|
||||
)
|
||||
expect(req.request.method).toEqual('POST')
|
||||
expect(req.request.body).toEqual({
|
||||
action: 'restore',
|
||||
documents: [1, 2, 3],
|
||||
})
|
||||
})
|
||||
})
|
||||
|
||||
Reference in New Issue
Block a user