Complete frontend coverage

This commit is contained in:
shamoon 2023-12-26 23:35:33 -08:00
parent f387d315cd
commit 788b395327
6 changed files with 72 additions and 192 deletions

View File

@ -20,8 +20,44 @@ import { TagsComponent } from '../../input/tags/tags.component'
import { TextComponent } from '../../input/text/text.component'
import { SwitchComponent } from '../../input/switch/switch.component'
import { EditDialogMode } from '../edit-dialog.component'
import { WorkflowEditDialogComponent } from './workflow-edit-dialog.component'
import {
DOCUMENT_SOURCE_OPTIONS,
WORKFLOW_TYPE_OPTIONS,
WorkflowEditDialogComponent,
} from './workflow-edit-dialog.component'
import { CustomFieldsService } from 'src/app/services/rest/custom-fields.service'
import { Workflow } from 'src/app/data/workflow'
import {
WorkflowTriggerType,
DocumentSource,
} from 'src/app/data/workflow-trigger'
import { CdkDragDrop } from '@angular/cdk/drag-drop'
import { WorkflowAction } from 'src/app/data/workflow-action'
const workflow: Workflow = {
name: 'Workflow 1',
id: 1,
order: 1,
enabled: true,
triggers: [
{
id: 1,
type: WorkflowTriggerType.Consumption,
sources: [DocumentSource.ConsumeFolder],
filter_filename: '*',
},
],
actions: [
{
id: 1,
assign_title: 'foo',
},
{
id: 4,
assign_owner: 2,
},
],
}
describe('ConsumptionTemplateEditDialogComponent', () => {
let component: WorkflowEditDialogComponent
@ -134,4 +170,38 @@ describe('ConsumptionTemplateEditDialogComponent', () => {
fixture.detectChanges()
expect(editTitleSpy).toHaveBeenCalled()
})
it('should return source options, type options, type name', () => {
// coverage
expect(component.sourceOptions).toEqual(DOCUMENT_SOURCE_OPTIONS)
expect(component.typeOptions).toEqual(WORKFLOW_TYPE_OPTIONS)
expect(
component.getTypeOptionName(WorkflowTriggerType.DocumentAdded)
).toEqual('Document Added')
expect(component.getTypeOptionName(null)).toEqual('')
})
it('should support add and remove triggers and actions', () => {
component.object = workflow
component.addTrigger()
expect(component.object.triggers.length).toEqual(2)
component.addAction()
expect(component.object.actions.length).toEqual(3)
component.removeTrigger(1)
expect(component.object.triggers.length).toEqual(1)
component.removeAction(1)
expect(component.object.actions.length).toEqual(2)
})
it('should update order and remove ids from actions on drag n drop', () => {
const action1 = workflow.actions[0]
const action2 = workflow.actions[1]
component.object = workflow
component.onActionDrop({ previousIndex: 0, currentIndex: 1 } as CdkDragDrop<
WorkflowAction[]
>)
expect(component.object.actions).toEqual([action2, action1])
expect(action1.id).toBeNull()
expect(action2.id).toBeNull()
})
})

View File

@ -196,7 +196,7 @@ export class WorkflowEditDialogComponent
}
getTypeOptionName(type: WorkflowTriggerType): string {
return this.typeOptions.find((t) => t.id === type).name ?? ''
return this.typeOptions.find((t) => t.id === type)?.name ?? ''
}
addTrigger() {

View File

@ -1,48 +0,0 @@
import { HttpTestingController } from '@angular/common/http/testing'
import { TestBed } from '@angular/core/testing'
import { Subscription } from 'rxjs'
import { environment } from 'src/environments/environment'
import { commonAbstractPaperlessServiceTests } from './abstract-paperless-service.spec'
import { WorkflowActionService } from './workflow-action.service'
import { WorkflowAction } from 'src/app/data/workflow-action'
let httpTestingController: HttpTestingController
let service: WorkflowActionService
const endpoint = 'workflow_actions'
const actions: WorkflowAction[] = [
{
id: 1,
assign_correspondent: 2,
},
{
id: 2,
assign_document_type: 1,
},
]
// run common tests
commonAbstractPaperlessServiceTests(endpoint, WorkflowActionService)
describe(`Additional service tests for WorkflowActionService`, () => {
it('should reload', () => {
service.reload()
const req = httpTestingController.expectOne(
`${environment.apiBaseUrl}${endpoint}/?page=1&page_size=100000`
)
req.flush({
results: actions,
})
expect(service.allActions).toEqual(actions)
})
beforeEach(() => {
// Dont need to setup again
httpTestingController = TestBed.inject(HttpTestingController)
service = TestBed.inject(WorkflowActionService)
})
afterEach(() => {
httpTestingController.verify()
})
})

View File

@ -1,43 +0,0 @@
import { HttpClient } from '@angular/common/http'
import { Injectable } from '@angular/core'
import { tap } from 'rxjs'
import { Workflow } from 'src/app/data/workflow'
import { AbstractPaperlessService } from './abstract-paperless-service'
import { WorkflowAction } from 'src/app/data/workflow-action'
@Injectable({
providedIn: 'root',
})
export class WorkflowActionService extends AbstractPaperlessService<WorkflowAction> {
loading: boolean
constructor(http: HttpClient) {
super(http, 'workflow_actions')
}
public reload() {
this.loading = true
this.listAll().subscribe((r) => {
this.actions = r.results
this.loading = false
})
}
private actions: WorkflowAction[] = []
public get allActions(): WorkflowAction[] {
return this.actions
}
create(o: WorkflowAction) {
return super.create(o).pipe(tap(() => this.reload()))
}
update(o: WorkflowAction) {
return super.update(o).pipe(tap(() => this.reload()))
}
delete(o: WorkflowAction) {
return super.delete(o).pipe(tap(() => this.reload()))
}
}

View File

@ -1,57 +0,0 @@
import { HttpTestingController } from '@angular/common/http/testing'
import { TestBed } from '@angular/core/testing'
import { environment } from 'src/environments/environment'
import { commonAbstractPaperlessServiceTests } from './abstract-paperless-service.spec'
import { WorkflowTriggerService } from './workflow-trigger.service'
import {
DocumentSource,
WorkflowTrigger,
WorkflowTriggerType,
} from 'src/app/data/workflow-trigger'
let httpTestingController: HttpTestingController
let service: WorkflowTriggerService
const endpoint = 'workflow_triggers'
const triggers: WorkflowTrigger[] = [
{
id: 1,
type: WorkflowTriggerType.Consumption,
filter_filename: '*test*',
filter_path: null,
sources: [DocumentSource.ApiUpload],
},
{
id: 2,
type: WorkflowTriggerType.DocumentAdded,
filter_filename: null,
filter_path: '/test/',
sources: [DocumentSource.ConsumeFolder, DocumentSource.ApiUpload],
},
]
// run common tests
commonAbstractPaperlessServiceTests(endpoint, WorkflowTriggerService)
describe(`Additional service tests for WorkflowTriggerService`, () => {
it('should reload', () => {
service.reload()
const req = httpTestingController.expectOne(
`${environment.apiBaseUrl}${endpoint}/?page=1&page_size=100000`
)
req.flush({
results: triggers,
})
expect(service.allWorkflows).toEqual(triggers)
})
beforeEach(() => {
// Dont need to setup again
httpTestingController = TestBed.inject(HttpTestingController)
service = TestBed.inject(WorkflowTriggerService)
})
afterEach(() => {
httpTestingController.verify()
})
})

View File

@ -1,42 +0,0 @@
import { HttpClient } from '@angular/common/http'
import { Injectable } from '@angular/core'
import { tap } from 'rxjs'
import { AbstractPaperlessService } from './abstract-paperless-service'
import { WorkflowTrigger } from 'src/app/data/workflow-trigger'
@Injectable({
providedIn: 'root',
})
export class WorkflowTriggerService extends AbstractPaperlessService<WorkflowTrigger> {
loading: boolean
constructor(http: HttpClient) {
super(http, 'workflow_triggers')
}
public reload() {
this.loading = true
this.listAll().subscribe((r) => {
this.triggers = r.results
this.loading = false
})
}
private triggers: WorkflowTrigger[] = []
public get allWorkflows(): WorkflowTrigger[] {
return this.triggers
}
create(o: WorkflowTrigger) {
return super.create(o).pipe(tap(() => this.reload()))
}
update(o: WorkflowTrigger) {
return super.update(o).pipe(tap(() => this.reload()))
}
delete(o: WorkflowTrigger) {
return super.delete(o).pipe(tap(() => this.reload()))
}
}