Skip to content

Commit 54c396c

Browse files
[DURACOM-317] fix accessibility issues, clean up, add e2e test for overview
1 parent 687edb1 commit 54c396c

9 files changed

Lines changed: 70 additions & 54 deletions

File tree

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
import { testA11y } from 'cypress/support/utils';
2+
3+
describe('Audit Overview Page', () => {
4+
beforeEach(() => {
5+
// Must login as an Admin to see the page
6+
cy.visit('/auditlogs');
7+
cy.loginViaForm(Cypress.env('DSPACE_TEST_ADMIN_USER'), Cypress.env('DSPACE_TEST_ADMIN_PASSWORD'));
8+
});
9+
10+
it('should pass accessibility tests', () => {
11+
// Page must first be visible
12+
cy.get('ds-audit-overview').should('be.visible');
13+
// Analyze <ds-audit-overview> for accessibility issues
14+
testA11y('ds-audit-overview');
15+
});
16+
});

src/app/audit-page/audit-page.resolver.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import { AuditDataService } from '../core/audit/audit-data.service';
1010
import { Audit } from '../core/audit/model/audit.model';
1111
import { RemoteData } from '../core/data/remote-data';
1212
import { getFirstSucceededRemoteData } from '../core/shared/operators';
13+
import { followLink } from '../shared/utils/follow-link-config.model';
1314

1415

1516
/**
@@ -24,7 +25,7 @@ export const auditPageResolver: ResolveFn<RemoteData<Audit>> = (
2425
state: RouterStateSnapshot,
2526
): Observable<RemoteData<Audit>> => {
2627
const auditService = inject(AuditDataService);
27-
return auditService.findById(route.params.id).pipe(
28+
return auditService.findById(route.params.id, true, true, followLink('eperson')).pipe(
2829
getFirstSucceededRemoteData(),
2930
);
3031
};

src/app/audit-page/detail/audit-detail.component.html

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,25 @@
11
<div class="container" *ngVar="(auditRD$ | async)?.payload as audit">
22
<div class="d-flex">
3-
<h2 class="flex-grow-1">{{'audit.detail.title' | translate }}</h2>
3+
<h1 class="flex-grow-1">{{'audit.detail.title' | translate }}</h1>
44
</div>
55

66
@if (audit) {
7-
<h4 class="mt-4">{{ 'audit.detail.id' | translate}}</h4>
7+
<h2 class="h4 mt-4">{{ 'audit.detail.id' | translate}}</h2>
88
<div>{{ audit.id }}</div>
99

10-
<h4 class="mt-4">{{ 'audit.detail.eventType' | translate}}</h4>
10+
<h2 class="h4 mt-4">{{ 'audit.detail.eventType' | translate}}</h2>
1111
<div>{{ audit.eventType }}</div>
1212

13-
<h4 class="mt-4">{{ 'audit.detail.subjectUUID' | translate}}</h4>
13+
<h2 class="h4 mt-4">{{ 'audit.detail.subjectUUID' | translate}}</h2>
1414
<div>{{ audit.subjectUUID }}</div>
1515

16-
<h4 class="mt-4">{{ 'audit.detail.subjectType' | translate}}</h4>
16+
<h2 class="h4 mt-4">{{ 'audit.detail.subjectType' | translate}}</h2>
1717
<div>{{ audit.subjectType }}</div>
1818

19-
<h4 class="mt-4">{{ 'audit.detail.eperson' | translate}}</h4>
20-
<div *ngVar="(getEpersonName(audit) | async) as ePersonName">{{ePersonName}}</div>
19+
<h2 class="h4 mt-4">{{ 'audit.detail.eperson' | translate}}</h2>
20+
<div>{{ audit.epersonName }}</div>
2121

22-
<h4 class="mt-4">{{ 'audit.detail.timeStamp' | translate}}</h4>
22+
<h2 class="h4 mt-4">{{ 'audit.detail.timeStamp' | translate}}</h2>
2323
<div>{{ audit.timeStamp | date:dateFormat}}</div>
2424
}
2525

src/app/audit-page/detail/audit-detail.component.ts

Lines changed: 19 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -13,13 +13,15 @@ import {
1313
RouterLink,
1414
} from '@angular/router';
1515
import { TranslateModule } from '@ngx-translate/core';
16-
import { Observable } from 'rxjs';
16+
import {
17+
Observable,
18+
switchMap,
19+
} from 'rxjs';
1720
import { map } from 'rxjs/operators';
1821

1922
import { AuditDataService } from '../../core/audit/audit-data.service';
2023
import { Audit } from '../../core/audit/model/audit.model';
2124
import { AuthService } from '../../core/auth/auth.service';
22-
import { DSONameService } from '../../core/breadcrumbs/dso-name.service';
2325
import { RemoteData } from '../../core/data/remote-data';
2426
import { redirectOn4xx } from '../../core/shared/authorized.operators';
2527
import { VarDirective } from '../../shared/utils/var.directive';
@@ -56,8 +58,7 @@ export class AuditDetailComponent implements OnInit {
5658
protected route: ActivatedRoute,
5759
protected router: Router,
5860
protected auditService: AuditDataService,
59-
protected nameService: DSONameService) {
60-
}
61+
) {}
6162

6263
/**
6364
* Initialize component properties
@@ -67,15 +68,20 @@ export class AuditDetailComponent implements OnInit {
6768
this.auditRD$ = this.route.data.pipe(
6869
map((data) => data.process as RemoteData<Audit>),
6970
redirectOn4xx(this.router, this.authService),
71+
switchMap((auditRD) => {
72+
const epersonName$ = this.auditService.getEpersonName(auditRD.payload);
73+
return epersonName$.pipe(
74+
map( epersonName => new RemoteData(
75+
auditRD.timeCompleted,
76+
auditRD.msToLive,
77+
auditRD.lastUpdated,
78+
auditRD.state,
79+
auditRD.errorMessage,
80+
Object.assign(new Audit(), { ...auditRD.payload, epersonName }),
81+
auditRD.statusCode,
82+
)),
83+
);
84+
}),
7085
);
7186
}
72-
73-
/**
74-
* Get the name of an EPerson by ID
75-
* @param audit Audit object
76-
*/
77-
getEpersonName(audit: Audit): Observable<string> {
78-
return this.auditService.getEpersonName(audit);
79-
}
80-
8187
}

src/app/audit-page/object-audit-overview/object-audit-overview.component.html

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,13 @@
11
<div class="container">
22
<div class="d-flex">
3-
<h2 class="flex-grow-1">{{'audit.object.overview.title' | translate}}</h2>
3+
<h1 class="flex-grow-1">{{'audit.object.overview.title' | translate}}</h1>
44
</div>
55

66
@if (object) {
7-
<h4 class="mt-4 mb-4">{{ object.name }} (<em>{{object.type}}</em>)</h4>
7+
<h2 class="h4 mt-4 mb-4">{{ object.name }} (<em>{{object.type}}</em>)</h2>
88
@if ((auditsRD$ | async)?.payload; as audits) {
99
@if (audits.totalElements === 0) {
10-
<div>
11-
No audits found.
12-
</div>
10+
<div>{{ 'audit.data.not-found' | translate }}</div>
1311
}
1412

1513
@if (audits.totalElements > 0) {
@@ -60,7 +58,7 @@ <h4 class="mt-4 mb-4">{{ object.name }} (<em>{{object.type}}</em>)</h4>
6058
<a class="btn btn-light mt-3" [routerLink]="['/items', object.id]"><i class="fas fa-arrow-left"></i>{{ 'audit.object.back' | translate }}</a>
6159
}
6260
@if ((auditsRD$ | async)?.statusCode === 404) {
63-
<h4 class="mt-4 mb-4">{{'audit.object.overview.disabled.message' | translate}}</h4>
61+
<h2 class="h4 mt-4 mb-4">{{'audit.object.overview.disabled.message' | translate}}</h2>
6462
}
6563
}
6664

src/app/audit-page/object-audit-overview/object-audit-overview.component.ts

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -186,8 +186,6 @@ export class ObjectAuditOverviewComponent implements OnInit {
186186
);
187187
}),
188188
);
189-
190-
this.auditsRD$.subscribe(console.log);
191189
}
192190

193191
isCurrentUserAdmin(): Observable<boolean> {

src/app/audit-page/overview/audit-overview.component.html

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,11 @@
11
<div class="container">
22
<div class="d-flex">
3-
<h2 class="flex-grow-1">{{'audit.overview.title' | translate}}</h2>
3+
<h1 class="flex-grow-1">{{'audit.overview.title' | translate}}</h1>
44
</div>
55

66
@if (isAdmin$ | async) {
77
@if ((auditsRD$ | async)?.payload?.totalElements === 0) {
8-
<div>
9-
No audits found.
10-
</div>
8+
<div>{{ 'audit.data.not-found' | translate }}</div>
119
}
1210
@if ((auditsRD$ | async)?.payload?.totalElements > 0) {
1311
<ds-pagination

src/app/shared/menu/providers/audit-overview.menu.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,6 @@ export class AuditOverviewMenuProvider extends AbstractMenuProvider {
3737
protected authorizationService: AuthorizationDataService,
3838
@Inject(APP_CONFIG) protected appConfig: AppConfig,
3939
) {
40-
console.log('AuditOverviewMenuProvider');
4140
super();
4241
}
4342

src/assets/i18n/en.json5

Lines changed: 19 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -892,9 +892,28 @@
892892

893893
"admin.batch-import.page.remove": "remove",
894894

895+
"audit.data.not-found": "No audits found.",
895896

896897
"audit.detail.breadcrumbs": "Audit Details",
897898

899+
"audit.detail.title": "Audit Detail",
900+
901+
"audit.detail.id": "Audit Id",
902+
903+
"audit.detail.subjectUUID": "Subject ID",
904+
905+
"audit.detail.subjectType": "Subject Type",
906+
907+
"audit.detail.eventType": "Audit Type",
908+
909+
"audit.detail.eperson": "EPerson",
910+
911+
"audit.detail.timeStamp": "Time",
912+
913+
"audit.detail.back": "All Audit Logs",
914+
915+
"audit.detail.back.subject": "Subject Audit Logs",
916+
898917
"audit.overview.title": "Audit Logs Overview",
899918

900919
"audit.overview.table.id": "Audit ID",
@@ -925,25 +944,6 @@
925944

926945
"audit.object.overview.disabled.message": "Audit feature is currently disabled",
927946

928-
"audit.detail.title": "Audit Detail",
929-
930-
"audit.detail.id": "Audit Id",
931-
932-
"audit.detail.subjectUUID": "Subject ID",
933-
934-
"audit.detail.subjectType": "Subject Type",
935-
936-
"audit.detail.eventType": "Audit Type",
937-
938-
"audit.detail.eperson": "EPerson",
939-
940-
"audit.detail.timeStamp": "Time",
941-
942-
"audit.detail.back": "All Audit Logs",
943-
944-
"audit.detail.back.subject": "Subject Audit Logs",
945-
946-
947947
"auth.errors.invalid-user": "Invalid email address or password.",
948948

949949
"auth.messages.expired": "Your session has expired. Please log in again.",

0 commit comments

Comments
 (0)