Skip to content

Commit

Permalink
Update case-file-view-folder-selector.component.spec.ts
Browse files Browse the repository at this point in the history
  • Loading branch information
olusegz07 committed Nov 27, 2023
1 parent 47067a1 commit 38b1444
Show file tree
Hide file tree
Showing 2 changed files with 113 additions and 54 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
import { ComponentFixture, TestBed } from '@angular/core/testing';
import { MatLegacyDialogRef as MatDialogRef, MAT_LEGACY_DIALOG_DATA } from '@angular/material/legacy-dialog';
import { CaseFileViewFolderSelectorComponent } from './case-file-view-folder-selector.component';
import { categoriesAndDocumentsTestData } from '../../test-data/categories-and-documents-test-data';

describe('CaseFileViewFolderSelectorComponent', () => {
let component: CaseFileViewFolderSelectorComponent;
let fixture: ComponentFixture<CaseFileViewFolderSelectorComponent>;
let matDialogRef: jasmine.SpyObj<MatDialogRef<CaseFileViewFolderSelectorComponent>>;

beforeEach(() => {
matDialogRef = jasmine.createSpyObj<MatDialogRef<CaseFileViewFolderSelectorComponent>>('matDialogRef', ['close']);

TestBed.configureTestingModule({
declarations: [CaseFileViewFolderSelectorComponent],
providers: [
{
provide: MatDialogRef,
useValue: matDialogRef
},
{
provide: MAT_LEGACY_DIALOG_DATA,
useValue: { categories: categoriesAndDocumentsTestData.categories, document: categoriesAndDocumentsTestData.uncategorised_documents }
}
]
});
fixture = TestBed.createComponent(CaseFileViewFolderSelectorComponent);
component = fixture.componentInstance;
fixture.detectChanges();
});

it('should create the component', () => {
expect(component).toBeTruthy();
});
it('should close the dialog on cancel', () => {
component.cancel();
expect(component.dialogRef.close).toHaveBeenCalled();
});

it('should close the dialog with null on save if selected is empty', () => {
component.selected = '';
component.save();
expect(component.dialogRef.close).toHaveBeenCalledWith(null);
});

it('should select the checkbox and clear lower levels when radio is checked', () => {
const event = {
target: {
checked: true,
id: 'TestId',
name: 'level-2'
}
};

component.handleChange(event);

expect(component.selected).toBe('TestId');
});
});
Original file line number Diff line number Diff line change
Expand Up @@ -4,73 +4,73 @@ import { DocumentTreeNode } from '../../../../../domain/case-file-view';
import { CaseFileViewCategory } from '../../../../../domain/case-file-view/case-file-view-category.model';

@Component({
selector: 'xui-case-file-view-folder-selector',
templateUrl: './case-file-view-folder-selector.component.html',
styleUrls: ['./case-file-view-folder-selector.component.scss'],
encapsulation: ViewEncapsulation.None
selector: 'xui-case-file-view-folder-selector',
templateUrl: './case-file-view-folder-selector.component.html',
styleUrls: ['./case-file-view-folder-selector.component.scss'],
encapsulation: ViewEncapsulation.None
})
export class CaseFileViewFolderSelectorComponent implements AfterViewInit {
public currentCategories: CaseFileViewCategory[] = [];
public selected: string = '';

public currentCategories: CaseFileViewCategory[] = [];
public selected: string = '';

constructor(
constructor(
public dialogRef: MatDialogRef<CaseFileViewFolderSelectorComponent>,
@Inject(MAT_LEGACY_DIALOG_DATA) public data: { categories: CaseFileViewCategory[], document: DocumentTreeNode }
) {
this.currentCategories = [...this.data.categories];
}
) {
this.currentCategories = [...this.data.categories];
}

public ngAfterViewInit(): void {
const path = this.findPath();
path.forEach(p => (document.getElementById(p) as HTMLInputElement).checked = true);
}
public ngAfterViewInit(): void {
const path = this.findPath();
path.forEach((p) => (document.getElementById(p) as HTMLInputElement).checked = true);
}

public handleChange(evt) {
if (evt.target.checked) {
this.select(evt.target.id);
// get level of this checkbox so we can clear all lower levels
let level = parseInt(evt.target.name.split('-')[1], 10) + 1;
let nodes = document.getElementsByName(`level-${level}`);
while (nodes.length > 0) {
nodes.forEach((node: HTMLInputElement) => node.checked = false);
level += 1;
nodes = document.getElementsByName(`level-${level}`);
}
}
public handleChange(evt) {
if (evt.target.checked) {
this.select(evt.target.id);
// get level of this checkbox so we can clear all lower levels
let level = parseInt(evt.target.name.split('-')[1], 10) + 1;
let nodes = document.getElementsByName(`level-${level}`);
while (nodes.length > 0) {
nodes.forEach((node: HTMLInputElement) => node.checked = false);
level += 1;
nodes = document.getElementsByName(`level-${level}`);
}
}
}

public select(categoryId: string) {
this.selected = categoryId;
}
public select(categoryId: string) {
this.selected = categoryId;
}

public cancel() {
this.dialogRef.close();
}
public cancel() {
this.dialogRef.close();
}

public save() {
this.dialogRef.close(this.selected.length > 0 ? this.selected : null);
}
public save() {
this.dialogRef.close(this.selected.length > 0 ? this.selected : null);
}

private findPath(): string[] {
for (const c of this.data.categories) {
const r = this.containsDocument(c, this.data.document);
if (r) {
return r;
}
}
private findPath(): string[] {
for (const c of this.data.categories) {
const r = this.containsDocument(c, this.data.document);
if (r) {
return r;
}
}
return [];
}

private containsDocument(cat: CaseFileViewCategory, document: DocumentTreeNode): string[] | null {
if (cat.documents.findIndex(doc => doc.document_binary_url === document.document_binary_url) > -1) {
return [cat.category_id];
}
for (const c of cat.sub_categories) {
const r = this.containsDocument(c, document);
if (r) {
return [cat.category_id, ...r];
}
}
return null;
private containsDocument(cat: CaseFileViewCategory, document: DocumentTreeNode): string[] | null {
if (cat.documents.findIndex((doc) => doc.document_binary_url === document.document_binary_url) > -1) {
return [cat.category_id];
}
for (const c of cat.sub_categories) {
const r = this.containsDocument(c, document);
if (r) {
return [cat.category_id, ...r];
}
}
return null;
}
}

0 comments on commit 38b1444

Please sign in to comment.