paperless-ngx/src-ui/src/app/components/common/permissions-select/permissions-select.component.spec.ts

116 lines
4.2 KiB
TypeScript

import { ComponentFixture, TestBed } from '@angular/core/testing'
import { PermissionsSelectComponent } from './permissions-select.component'
import {
FormsModule,
NG_VALUE_ACCESSOR,
ReactiveFormsModule,
} from '@angular/forms'
import { NgbModule } from '@ng-bootstrap/ng-bootstrap'
import {
PermissionAction,
PermissionType,
} from 'src/app/services/permissions.service'
import { By } from '@angular/platform-browser'
import { NgxBootstrapIconsModule, allIcons } from 'ngx-bootstrap-icons'
import { SettingsService } from 'src/app/services/settings.service'
import { SETTINGS_KEYS } from 'src/app/data/ui-settings'
import { HttpClientTestingModule } from '@angular/common/http/testing'
const permissions = [
'add_document',
'view_document',
'change_document',
'delete_document',
'change_tag',
'view_documenttype',
]
const inheritedPermissions = ['change_tag', 'view_documenttype']
describe('PermissionsSelectComponent', () => {
let component: PermissionsSelectComponent
let fixture: ComponentFixture<PermissionsSelectComponent>
let permissionsChangeResult: Permissions
let settingsService: SettingsService
beforeEach(async () => {
TestBed.configureTestingModule({
declarations: [PermissionsSelectComponent],
providers: [],
imports: [
FormsModule,
ReactiveFormsModule,
NgbModule,
NgxBootstrapIconsModule.pick(allIcons),
HttpClientTestingModule,
],
}).compileComponents()
settingsService = TestBed.inject(SettingsService)
fixture = TestBed.createComponent(PermissionsSelectComponent)
fixture.debugElement.injector.get(NG_VALUE_ACCESSOR)
component = fixture.componentInstance
component.registerOnChange((r) => (permissionsChangeResult = r))
fixture.detectChanges()
})
it('should create controls for all PermissionType and PermissionAction', () => {
expect(Object.values(component.form.controls)).toHaveLength(
Object.keys(PermissionType).length
)
for (var type in component.form.controls) {
expect(
Object.values(component.form.controls[type].controls)
).toHaveLength(Object.keys(PermissionAction).length)
}
// coverage
component.registerOnTouched(() => {})
component.setDisabledState(true)
})
it('should allow toggle all on / off', () => {
component.ngOnInit()
expect(component.typesWithAllActions.values).toHaveLength(0)
component.toggleAll({ target: { checked: true } }, 'Tag')
expect(component.typesWithAllActions).toContain('Tag')
component.toggleAll({ target: { checked: false } }, 'Tag')
expect(component.typesWithAllActions.values).toHaveLength(0)
})
it('should update on permissions set', () => {
component.ngOnInit()
component.writeValue(permissions)
expect(permissionsChangeResult).toEqual(permissions)
expect(component.typesWithAllActions).toContain('Document')
})
it('should update checkboxes on permissions set', () => {
component.ngOnInit()
component.writeValue(permissions)
fixture.detectChanges()
const input1 = fixture.debugElement.query(By.css('input#Document_Add'))
expect(input1.nativeElement.checked).toBeTruthy()
const input2 = fixture.debugElement.query(By.css('input#Tag_Change'))
expect(input2.nativeElement.checked).toBeTruthy()
})
it('disable checkboxes when permissions are inherited', () => {
component.ngOnInit()
component.inheritedPermissions = inheritedPermissions
expect(component.isInherited('Document', 'Add')).toBeFalsy()
expect(component.isInherited('Document')).toBeFalsy()
expect(component.isInherited('Tag', 'Change')).toBeTruthy()
const input1 = fixture.debugElement.query(By.css('input#Document_Add'))
expect(input1.nativeElement.disabled).toBeFalsy()
const input2 = fixture.debugElement.query(By.css('input#Tag_Change'))
expect(input2.nativeElement.disabled).toBeTruthy()
})
it('should exclude auditlogentry permissions if disabled', () => {
settingsService.set(SETTINGS_KEYS.AUDITLOG_ENABLED, false)
fixture = TestBed.createComponent(PermissionsSelectComponent)
component = fixture.componentInstance
expect(component.allowedTypes).not.toContain('AuditLogEntry')
})
})