[ACS-10196] other a11y all libraries error message not provided for name and library id fields (#4883)

* [ACS-10196] prevent instant error validation on create library dialog opening

* [ACS-10196] add unit tests

* [ACS-10196] review fix
This commit is contained in:
Grzegorz Jaśkowski
2025-11-07 09:07:50 +01:00
committed by GitHub
parent 71eee988aa
commit 59dcc646da
2 changed files with 57 additions and 0 deletions
@@ -52,6 +52,7 @@ import { Node, NodeEntry, SiteBodyCreate, SiteEntry, UserInfo, VersionPaging } f
import {
DocumentListService,
FileModel,
LibraryDialogComponent,
NewVersionUploaderDataAction,
NewVersionUploaderDialogData,
NewVersionUploaderService,
@@ -62,6 +63,7 @@ import {
import { FolderInformationComponent } from '../dialogs/folder-details/folder-information.component';
import { provideEffects } from '@ngrx/effects';
import { ActivatedRoute, Router } from '@angular/router';
import { EventEmitter } from '@angular/core';
describe('ContentManagementService', () => {
let dialog: MatDialog;
@@ -1867,6 +1869,60 @@ describe('ContentManagementService', () => {
});
});
describe('createLibrary', () => {
let dialogRefMock: jasmine.SpyObj<MatDialogRef<LibraryDialogComponent, SiteEntry | null>>;
beforeEach(() => {
dialogRefMock = jasmine.createSpyObj<MatDialogRef<LibraryDialogComponent, SiteEntry | null>>('MatDialogRef', ['afterClosed'], {
componentInstance: { error: new EventEmitter<string>() } as LibraryDialogComponent
});
});
it('should open LibraryDialogComponent with autoFocus set to false', () => {
dialogRefMock.afterClosed.and.returnValue(of(null));
spyOn(dialog, 'open').and.returnValue(dialogRefMock);
contentManagementService.createLibrary();
expect(dialog.open).toHaveBeenCalledWith(LibraryDialogComponent, jasmine.objectContaining({ autoFocus: false }));
});
it('should show library creation error notifications', () => {
dialogRefMock.afterClosed.and.returnValue(of(null));
spyOn(dialog, 'open').and.returnValue(dialogRefMock);
contentManagementService.createLibrary();
dialogRefMock.componentInstance.error.emit('Library creation error');
expect(showErrorSpy).toHaveBeenCalled();
});
it('should emit guid, call libraryCreated hook and focus when site is created', (done) => {
const mockSiteEntry = new SiteEntry({ entry: { guid: 'guid', id: 'id', visibility: 'PUBLIC', title: 'title' } });
const button = document.createElement('button');
dialogRefMock.afterClosed.and.returnValue(of(mockSiteEntry));
spyOn(dialog, 'open').and.returnValue(dialogRefMock);
spyOn(appHookService.libraryCreated, 'next');
spyOn(document, 'querySelector').and.returnValue(button);
spyOn(button, 'focus');
contentManagementService.createLibrary().subscribe((guid) => {
expect(guid).toBe('guid');
expect(appHookService.libraryCreated.next).toHaveBeenCalledWith(mockSiteEntry);
expect(button.focus).toHaveBeenCalled();
done();
});
});
it('should emit null when node is missing guid', (done) => {
dialogRefMock.afterClosed.and.returnValue(of(null));
spyOn(dialog, 'open').and.returnValue(dialogRefMock);
contentManagementService.createLibrary().subscribe((guid) => {
expect(guid).toBeNull();
done();
});
});
});
describe('folderInformationDialog', () => {
it('should open folder information dialog', () => {
spyOn(dialog, 'open');
@@ -281,6 +281,7 @@ export class ContentManagementService {
createLibrary(): Observable<string> {
const dialogInstance = this.dialogRef.open(LibraryDialogComponent, {
autoFocus: false,
width: '400px'
});