Feature: Workflows (#5121)

This commit is contained in:
shamoon
2024-01-03 00:19:19 -08:00
committed by GitHub
parent 46e6be319f
commit 3b6ce16f1c
54 changed files with 4980 additions and 2011 deletions

View File

@@ -1,64 +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 { ConsumptionTemplateService } from './consumption-template.service'
import {
DocumentSource,
ConsumptionTemplate,
} from 'src/app/data/consumption-template'
let httpTestingController: HttpTestingController
let service: ConsumptionTemplateService
const endpoint = 'consumption_templates'
const templates: ConsumptionTemplate[] = [
{
name: 'Template 1',
id: 1,
order: 1,
filter_filename: '*test*',
filter_path: null,
sources: [DocumentSource.ApiUpload],
assign_correspondent: 2,
},
{
name: 'Template 2',
id: 2,
order: 2,
filter_filename: null,
filter_path: '/test/',
sources: [DocumentSource.ConsumeFolder, DocumentSource.ApiUpload],
assign_document_type: 1,
},
]
// run common tests
commonAbstractPaperlessServiceTests(
'consumption_templates',
ConsumptionTemplateService
)
describe(`Additional service tests for ConsumptionTemplateService`, () => {
it('should reload', () => {
service.reload()
const req = httpTestingController.expectOne(
`${environment.apiBaseUrl}${endpoint}/?page=1&page_size=100000`
)
req.flush({
results: templates,
})
expect(service.allTemplates).toEqual(templates)
})
beforeEach(() => {
// Dont need to setup again
httpTestingController = TestBed.inject(HttpTestingController)
service = TestBed.inject(ConsumptionTemplateService)
})
afterEach(() => {
httpTestingController.verify()
})
})

View File

@@ -0,0 +1,85 @@
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 { WorkflowService } from './workflow.service'
import { Workflow } from 'src/app/data/workflow'
import {
DocumentSource,
WorkflowTriggerType,
} from 'src/app/data/workflow-trigger'
import { WorkflowActionType } from 'src/app/data/workflow-action'
let httpTestingController: HttpTestingController
let service: WorkflowService
const endpoint = 'workflows'
const workflows: Workflow[] = [
{
name: 'Workflow 1',
id: 1,
order: 1,
enabled: true,
triggers: [
{
id: 1,
type: WorkflowTriggerType.Consumption,
sources: [DocumentSource.ConsumeFolder],
filter_filename: '*',
},
],
actions: [
{
id: 1,
type: WorkflowActionType.Assignment,
assign_title: 'foo',
},
],
},
{
name: 'Workflow 2',
id: 2,
order: 2,
enabled: true,
triggers: [
{
id: 2,
type: WorkflowTriggerType.DocumentAdded,
filter_filename: 'foo',
},
],
actions: [
{
id: 2,
type: WorkflowActionType.Assignment,
assign_title: 'bar',
},
],
},
]
// run common tests
commonAbstractPaperlessServiceTests(endpoint, WorkflowService)
describe(`Additional service tests for WorkflowService`, () => {
it('should reload', () => {
service.reload()
const req = httpTestingController.expectOne(
`${environment.apiBaseUrl}${endpoint}/?page=1&page_size=100000`
)
req.flush({
results: workflows,
})
expect(service.allWorkflows).toEqual(workflows)
})
beforeEach(() => {
// Dont need to setup again
httpTestingController = TestBed.inject(HttpTestingController)
service = TestBed.inject(WorkflowService)
})
afterEach(() => {
httpTestingController.verify()
})
})

View File

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