commit 8a0a49dd5766094f60462fbfbe62e9921fbd2373 Author: shamoon <4887959+shamoon@users.noreply.github.com> Date: Tue Dec 19 23:02:47 2023 -0800 Fix formatting commit 66b2d90c507b8afd9507813ff555e46198ea33b9 Author: shamoon <4887959+shamoon@users.noreply.github.com> Date: Tue Dec 19 22:36:35 2023 -0800 Refactor frontend data models commit 5723bd8dd823ee855625e250df39393e26709d48 Author: Adam Bogdał <adam@bogdal.pl> Date: Wed Dec 20 01:17:43 2023 +0100 Fix: speed up admin panel for installs with a large number of documents (#5052) commit 9b08ce176199bf9011a6634bb88f616846150d2b Author: shamoon <4887959+shamoon@users.noreply.github.com> Date: Tue Dec 19 15:18:51 2023 -0800 Update PULL_REQUEST_TEMPLATE.md commit a6248bec2d793b7690feed95fcaf5eb34a75bfb6 Author: shamoon <4887959+shamoon@users.noreply.github.com> Date: Tue Dec 19 15:02:05 2023 -0800 Chore: Update Angular to v17 (#4980) commit b1f6f52486d5ba5c04af99b41315eb6428fd1fa8 Author: shamoon <4887959+shamoon@users.noreply.github.com> Date: Tue Dec 19 13:53:56 2023 -0800 Fix: Dont allow null custom_fields property via API (#5063) commit 638d9970fd468d8c02c91d19bd28f8b0796bdcb1 Author: shamoon <4887959+shamoon@users.noreply.github.com> Date: Tue Dec 19 13:43:50 2023 -0800 Enhancement: symmetric document links (#4907) commit 5e8de4c1da6eb4eb8f738b20962595c7536b30ec Author: shamoon <4887959+shamoon@users.noreply.github.com> Date: Tue Dec 19 12:45:04 2023 -0800 Enhancement: shared icon & shared by me filter (#4859) commit 088bad90306025d3f6b139cbd0ad264a1cbecfe5 Author: Trenton H <797416+stumpylog@users.noreply.github.com> Date: Tue Dec 19 12:04:03 2023 -0800 Bulk updates all the backend libraries (#5061)
135 lines
4.4 KiB
TypeScript
135 lines
4.4 KiB
TypeScript
import { ComponentFixture, TestBed } from '@angular/core/testing'
|
|
|
|
import { CustomFieldsDropdownComponent } from './custom-fields-dropdown.component'
|
|
import {
|
|
HttpClientTestingModule,
|
|
HttpTestingController,
|
|
} from '@angular/common/http/testing'
|
|
import { ToastService } from 'src/app/services/toast.service'
|
|
import { CustomFieldsService } from 'src/app/services/rest/custom-fields.service'
|
|
import { of } from 'rxjs'
|
|
import { CustomField, CustomFieldDataType } from 'src/app/data/custom-field'
|
|
import { SelectComponent } from '../input/select/select.component'
|
|
import { NgSelectModule } from '@ng-select/ng-select'
|
|
import { FormsModule, ReactiveFormsModule } from '@angular/forms'
|
|
import {
|
|
NgbDropdownModule,
|
|
NgbModal,
|
|
NgbModalModule,
|
|
NgbModalRef,
|
|
} from '@ng-bootstrap/ng-bootstrap'
|
|
import { CustomFieldEditDialogComponent } from '../edit-dialog/custom-field-edit-dialog/custom-field-edit-dialog.component'
|
|
import { By } from '@angular/platform-browser'
|
|
|
|
const fields: CustomField[] = [
|
|
{
|
|
id: 0,
|
|
name: 'Field 1',
|
|
data_type: CustomFieldDataType.Integer,
|
|
},
|
|
{
|
|
id: 1,
|
|
name: 'Field 2',
|
|
data_type: CustomFieldDataType.String,
|
|
},
|
|
]
|
|
|
|
describe('CustomFieldsDropdownComponent', () => {
|
|
let component: CustomFieldsDropdownComponent
|
|
let fixture: ComponentFixture<CustomFieldsDropdownComponent>
|
|
let customFieldService: CustomFieldsService
|
|
let toastService: ToastService
|
|
let modalService: NgbModal
|
|
let httpController: HttpTestingController
|
|
|
|
beforeEach(() => {
|
|
TestBed.configureTestingModule({
|
|
declarations: [CustomFieldsDropdownComponent, SelectComponent],
|
|
imports: [
|
|
HttpClientTestingModule,
|
|
NgSelectModule,
|
|
FormsModule,
|
|
ReactiveFormsModule,
|
|
NgbModalModule,
|
|
NgbDropdownModule,
|
|
],
|
|
})
|
|
customFieldService = TestBed.inject(CustomFieldsService)
|
|
httpController = TestBed.inject(HttpTestingController)
|
|
toastService = TestBed.inject(ToastService)
|
|
modalService = TestBed.inject(NgbModal)
|
|
jest.spyOn(customFieldService, 'listAll').mockReturnValue(
|
|
of({
|
|
all: fields.map((f) => f.id),
|
|
count: fields.length,
|
|
results: fields.concat([]),
|
|
})
|
|
)
|
|
fixture = TestBed.createComponent(CustomFieldsDropdownComponent)
|
|
component = fixture.componentInstance
|
|
fixture.detectChanges()
|
|
})
|
|
|
|
it('should support add field', () => {
|
|
let addedField
|
|
component.added.subscribe((f) => (addedField = f))
|
|
component.documentId = 11
|
|
component.field = fields[0].id
|
|
component.addField()
|
|
expect(addedField).not.toBeUndefined()
|
|
})
|
|
|
|
it('should clear field on open / close, updated unused fields', () => {
|
|
component.field = fields[1].id
|
|
component.onOpenClose()
|
|
expect(component.field).toBeUndefined()
|
|
|
|
expect(component.unusedFields).toEqual(fields)
|
|
const updateSpy = jest.spyOn(
|
|
CustomFieldsDropdownComponent.prototype as any,
|
|
'updateUnusedFields'
|
|
)
|
|
component.existingFields = [{ field: fields[1].id } as any]
|
|
component.onOpenClose()
|
|
expect(updateSpy).toHaveBeenCalled()
|
|
expect(component.unusedFields).toEqual([fields[0]])
|
|
})
|
|
|
|
it('should support creating field, show error if necessary', () => {
|
|
let modal: NgbModalRef
|
|
modalService.activeInstances.subscribe((m) => (modal = m[m.length - 1]))
|
|
const toastErrorSpy = jest.spyOn(toastService, 'showError')
|
|
const toastInfoSpy = jest.spyOn(toastService, 'showInfo')
|
|
const getFieldsSpy = jest.spyOn(
|
|
CustomFieldsDropdownComponent.prototype as any,
|
|
'getFields'
|
|
)
|
|
|
|
const createButton = fixture.debugElement.queryAll(By.css('button'))[1]
|
|
createButton.triggerEventHandler('click')
|
|
|
|
expect(modal).not.toBeUndefined()
|
|
const editDialog = modal.componentInstance as CustomFieldEditDialogComponent
|
|
|
|
// fail first
|
|
editDialog.failed.emit({ error: 'error creating field' })
|
|
expect(toastErrorSpy).toHaveBeenCalled()
|
|
expect(getFieldsSpy).not.toHaveBeenCalled()
|
|
|
|
// succeed
|
|
editDialog.succeeded.emit(fields[0])
|
|
expect(toastInfoSpy).toHaveBeenCalled()
|
|
expect(getFieldsSpy).toHaveBeenCalled()
|
|
})
|
|
|
|
it('should support creating field with name', () => {
|
|
let modal: NgbModalRef
|
|
modalService.activeInstances.subscribe((m) => (modal = m[m.length - 1]))
|
|
component.createField('Foo bar')
|
|
|
|
expect(modal).not.toBeUndefined()
|
|
const editDialog = modal.componentInstance as CustomFieldEditDialogComponent
|
|
expect(editDialog.object.name).toEqual('Foo bar')
|
|
})
|
|
})
|