mirror of
https://github.com/paperless-ngx/paperless-ngx.git
synced 2026-02-09 23:49:29 -06:00
Bit more coverage
This commit is contained in:
@@ -387,6 +387,73 @@ describe('AppFrameComponent', () => {
|
||||
expect(component.canManageAttributes).toBe(true)
|
||||
})
|
||||
|
||||
it('should indicate attributes management availability for other permission types', () => {
|
||||
const canSpy = jest
|
||||
.spyOn(permissionsService, 'currentUserCan')
|
||||
.mockImplementation((action, type) => {
|
||||
return type === PermissionType.Correspondent
|
||||
})
|
||||
expect(component.canManageAttributes).toBe(true)
|
||||
|
||||
canSpy.mockImplementation((action, type) => {
|
||||
return type === PermissionType.DocumentType
|
||||
})
|
||||
expect(component.canManageAttributes).toBe(true)
|
||||
|
||||
canSpy.mockImplementation((action, type) => {
|
||||
return type === PermissionType.StoragePath
|
||||
})
|
||||
expect(component.canManageAttributes).toBe(true)
|
||||
|
||||
canSpy.mockImplementation((action, type) => {
|
||||
return type === PermissionType.CustomField
|
||||
})
|
||||
expect(component.canManageAttributes).toBe(true)
|
||||
})
|
||||
|
||||
it('should toggle attributes sections and stop event bubbling', () => {
|
||||
const preventDefault = jest.fn()
|
||||
const stopPropagation = jest.fn()
|
||||
const setSpy = jest.spyOn(settingsService, 'set')
|
||||
jest.spyOn(settingsService, 'storeSettings').mockReturnValue(of(true))
|
||||
|
||||
component.toggleAttributesSections({
|
||||
preventDefault,
|
||||
stopPropagation,
|
||||
} as any)
|
||||
|
||||
expect(preventDefault).toHaveBeenCalled()
|
||||
expect(stopPropagation).toHaveBeenCalled()
|
||||
expect(setSpy).toHaveBeenCalledWith(
|
||||
SETTINGS_KEYS.ATTRIBUTES_SECTIONS_COLLAPSED,
|
||||
['attributes']
|
||||
)
|
||||
})
|
||||
|
||||
it('should show error when saving slim sidebar setting fails', () => {
|
||||
const toastSpy = jest.spyOn(toastService, 'showError')
|
||||
jest.spyOn(console, 'warn').mockImplementation(() => {})
|
||||
jest
|
||||
.spyOn(settingsService, 'storeSettings')
|
||||
.mockReturnValue(throwError(() => new Error('boom')))
|
||||
|
||||
component.slimSidebarEnabled = true
|
||||
|
||||
expect(toastSpy).toHaveBeenCalled()
|
||||
})
|
||||
|
||||
it('should show error when saving attributes collapsed setting fails', () => {
|
||||
const toastSpy = jest.spyOn(toastService, 'showError')
|
||||
jest.spyOn(console, 'warn').mockImplementation(() => {})
|
||||
jest
|
||||
.spyOn(settingsService, 'storeSettings')
|
||||
.mockReturnValue(throwError(() => new Error('boom')))
|
||||
|
||||
component.attributesSectionsCollapsed = true
|
||||
|
||||
expect(toastSpy).toHaveBeenCalled()
|
||||
})
|
||||
|
||||
it('should persist attributes section collapse state', () => {
|
||||
const setSpy = jest.spyOn(settingsService, 'set')
|
||||
jest.spyOn(settingsService, 'storeSettings').mockReturnValue(of(true))
|
||||
|
||||
@@ -14,10 +14,7 @@ import {
|
||||
PermissionsService,
|
||||
PermissionType,
|
||||
} from 'src/app/services/permissions.service'
|
||||
import {
|
||||
DocumentAttributesComponent,
|
||||
DocumentAttributesSectionKind,
|
||||
} from './document-attributes.component'
|
||||
import { DocumentAttributesComponent } from './document-attributes.component'
|
||||
|
||||
@Component({
|
||||
selector: 'pngx-dummy-section',
|
||||
@@ -72,7 +69,7 @@ describe('DocumentAttributesComponent', () => {
|
||||
label: 'Tags',
|
||||
icon: 'tags',
|
||||
permissionType: PermissionType.Tag,
|
||||
kind: DocumentAttributesSectionKind.ManagementList,
|
||||
kind: 'attributeList',
|
||||
component: DummySectionComponent,
|
||||
},
|
||||
{
|
||||
@@ -81,7 +78,7 @@ describe('DocumentAttributesComponent', () => {
|
||||
label: 'Custom fields',
|
||||
icon: 'ui-radios',
|
||||
permissionType: PermissionType.CustomField,
|
||||
kind: DocumentAttributesSectionKind.CustomFields,
|
||||
kind: 'customFields',
|
||||
component: DummySectionComponent,
|
||||
},
|
||||
]
|
||||
@@ -120,6 +117,16 @@ describe('DocumentAttributesComponent', () => {
|
||||
expect(router.navigate).not.toHaveBeenCalled()
|
||||
})
|
||||
|
||||
it('should update active nav id when route section changes', () => {
|
||||
;(permissionsService.currentUserCan as jest.Mock).mockReturnValue(true)
|
||||
|
||||
fixture.detectChanges()
|
||||
component.activeNavID = 1
|
||||
paramMapSubject.next(convertToParamMap({ section: 'customfields' }))
|
||||
|
||||
expect(component.activeNavID).toBe(2)
|
||||
})
|
||||
|
||||
it('should redirect to dashboard when no sections are visible', () => {
|
||||
;(permissionsService.currentUserCan as jest.Mock).mockReturnValue(false)
|
||||
|
||||
@@ -143,4 +150,15 @@ describe('DocumentAttributesComponent', () => {
|
||||
|
||||
expect(router.navigate).toHaveBeenCalledWith(['attributes', 'customfields'])
|
||||
})
|
||||
|
||||
it('should ignore nav changes for unknown sections', () => {
|
||||
;(permissionsService.currentUserCan as jest.Mock).mockReturnValue(true)
|
||||
|
||||
fixture.detectChanges()
|
||||
paramMapSubject.next(convertToParamMap({ section: 'tags' }))
|
||||
|
||||
component.onNavChange({ nextId: 999 } as any)
|
||||
|
||||
expect(router.navigate).not.toHaveBeenCalled()
|
||||
})
|
||||
})
|
||||
|
||||
Reference in New Issue
Block a user