Skip to content

Commit 8c5bb1d

Browse files
[DURACOM-317] refactor, improve e2e, adapt route structure
1 parent 851c63e commit 8c5bb1d

18 files changed

Lines changed: 92 additions & 72 deletions

config/config.example.yml

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -626,7 +626,3 @@ geospatialMapViewer:
626626
accessibility:
627627
# The duration in days after which the accessibility settings cookie expires
628628
cookieExpirationDuration: 7
629-
630-
# Option to enable the menu entry to see audit logs on a site level.
631-
# Only site administrators will be able to use this functionality
632-
enableAuditLogsOverview: true

cypress/e2e/audit-overview-page.cy.ts

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,23 @@ describe('Audit Overview Page', () => {
77
cy.loginViaForm(Cypress.env('DSPACE_TEST_ADMIN_USER'), Cypress.env('DSPACE_TEST_ADMIN_PASSWORD'));
88
});
99

10-
it('should pass accessibility tests', () => {
10+
it('page structure should be correct and should pass accessibility tests', () => {
1111
// Page must first be visible
1212
cy.get('ds-audit-overview').should('be.visible');
13+
// Check for presence of main container and title
14+
cy.get('.container').should('exist');
15+
cy.get('[data-test="audit-title"]').should('be.visible');
16+
cy.get('body').then($body => {
17+
const hasTable = $body.find('[data-test="audit-table"]').length > 0;
18+
const hasEmpty = $body.find('[data-test="audit-empty"]').length > 0;
19+
// At least one present and not both
20+
expect(hasTable || hasEmpty).to.equal(true);
21+
expect(!(hasTable && hasEmpty)).to.equal(true);
22+
});
1323
// Analyze <ds-audit-overview> for accessibility issues
1424
testA11y('ds-audit-overview');
1525
});
26+
27+
28+
1629
});

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

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@ import { Route } from '@angular/router';
22

33
import { authenticatedGuard } from '../core/auth/authenticated.guard';
44
import { i18nBreadcrumbResolver } from '../core/breadcrumbs/i18n-breadcrumb.resolver';
5-
import { ObjectAuditOverviewComponent } from './object-audit-overview/object-audit-overview.component';
65
import { AuditOverviewComponent } from './overview/audit-overview.component';
76

87
export const ROUTES: Route[] = [
@@ -16,14 +15,6 @@ export const ROUTES: Route[] = [
1615
data: { title: 'audit.overview.title', breadcrumbKey: 'audit.overview' },
1716
resolve: { breadcrumb: i18nBreadcrumbResolver },
1817
},
19-
{
20-
path: 'object/:objectId',
21-
component: ObjectAuditOverviewComponent,
22-
data: { title: 'audit.object.title', breadcrumbKey: 'audit.object' },
23-
resolve: {
24-
breadcrumb: i18nBreadcrumbResolver,
25-
},
26-
},
2718
],
2819
},
2920

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -51,13 +51,13 @@
5151
@if (isOverviewPage) {
5252
<td>
5353
@if (audit.objectUUID) {
54-
<a [routerLink]="['/auditlogs/object/', audit.objectUUID]">{{audit.objectUUID}}</a>
54+
<a [routerLink]="['/items/', audit.objectUUID, 'auditlogs']">{{audit.objectUUID}}</a>
5555
}
5656
</td>
5757
<td>{{ audit.objectType }}</td>
5858
<td>
5959
@if (audit.subjectUUID) {
60-
<a [routerLink]="['/auditlogs/object/', audit.subjectUUID]">{{audit.subjectUUID}}</a>
60+
<a [routerLink]="['/items/', audit.subjectUUID, 'auditlogs']">{{audit.subjectUUID}}</a>
6161
}
6262
</td>
6363
<td>{{ audit.subjectType }}</td>

src/app/audit-page/object-audit-overview/object-audit-overview.component.html renamed to src/app/audit-page/object-audit-overview/object-audit-logs.component.html

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,17 +5,22 @@ <h1 class="flex-grow-1">{{'audit.object.overview.title' | translate}}</h1>
55

66
@if (objectId$ | async) {
77
<div class="h4 my-4">
8-
<a [routerLink]="objectRoute">{{ objectName }}</a>
8+
<span>
9+
{{ 'audit.object.logs.label' | translate}}
10+
<a [routerLink]="objectRoute">{{objectName}}</a>
11+
</span>
912
</div>
1013
@if ((auditsRD$ | async)?.payload; as audits) {
1114
<ds-audit-table
1215
[audits]="audits"
1316
[pageConfig]="pageConfig"
1417
[object]="object"
1518
></ds-audit-table>
19+
} @else {
20+
<div class="h5">{{ 'audit.data.not-found' | translate }}</div>
1621
}
17-
<button class="btn btn-light mt-3" (click)="goBack()">
18-
<i class="fas fa-arrow-left"></i>{{ 'audit.object.back' | translate }}
22+
<button class="btn btn-outline-secondary mt-3" (click)="goBack()">
23+
<i class="fas fa-arrow-left me-1"></i>{{ 'audit.object.back' | translate }}
1924
</button>
2025
@if ((auditsRD$ | async)?.statusCode === 404) {
2126
<h2 class="h4 mt-4 mb-4">{{'audit.object.overview.disabled.message' | translate}}</h2>

src/app/audit-page/object-audit-overview/object-audit-overview.component.spec.ts renamed to src/app/audit-page/object-audit-overview/object-audit-logs.component.spec.ts

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -31,11 +31,11 @@ import { TranslateModule } from '@ngx-translate/core';
3131
import { of } from 'rxjs';
3232

3333
import { AuditTableComponent } from '../audit-table/audit-table.component';
34-
import { ObjectAuditOverviewComponent } from './object-audit-overview.component';
34+
import { ObjectAuditLogsComponent } from './object-audit-logs.component';
3535

36-
describe('ObjectAuditOverviewComponent', () => {
37-
let component: ObjectAuditOverviewComponent;
38-
let fixture: ComponentFixture<ObjectAuditOverviewComponent>;
36+
describe('ObjectAuditLogsComponent', () => {
37+
let component: ObjectAuditLogsComponent;
38+
let fixture: ComponentFixture<ObjectAuditLogsComponent>;
3939

4040
let auditService: AuditDataService;
4141
let audits: Audit[];
@@ -75,7 +75,7 @@ describe('ObjectAuditOverviewComponent', () => {
7575
TranslateModule.forRoot(),
7676
RouterTestingModule.withRoutes([]),
7777
AuditTableComponent,
78-
ObjectAuditOverviewComponent,
78+
ObjectAuditLogsComponent,
7979
RouterLink,
8080
],
8181
providers: [
@@ -91,7 +91,7 @@ describe('ObjectAuditOverviewComponent', () => {
9191
],
9292
schemas: [NO_ERRORS_SCHEMA],
9393
})
94-
.overrideComponent(ObjectAuditOverviewComponent, {
94+
.overrideComponent(ObjectAuditLogsComponent, {
9595
remove: {
9696
imports: [AuditTableComponent],
9797
},
@@ -100,7 +100,7 @@ describe('ObjectAuditOverviewComponent', () => {
100100
}));
101101

102102
beforeEach(() => {
103-
fixture = TestBed.createComponent(ObjectAuditOverviewComponent);
103+
fixture = TestBed.createComponent(ObjectAuditLogsComponent);
104104
component = fixture.componentInstance;
105105
spyOn(component, 'setAudits').and.callThrough();
106106
fixture.detectChanges();

src/app/audit-page/object-audit-overview/object-audit-overview.component.ts renamed to src/app/audit-page/object-audit-overview/object-audit-logs.component.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -50,8 +50,8 @@ import { AuditTableComponent } from '../audit-table/audit-table.component';
5050
* Component displaying a list of all audit about a object in a paginated table
5151
*/
5252
@Component({
53-
selector: 'ds-object-audit-overview',
54-
templateUrl: './object-audit-overview.component.html',
53+
selector: 'ds-object-audit-logs',
54+
templateUrl: './object-audit-logs.component.html',
5555
imports: [
5656
AsyncPipe,
5757
AuditTableComponent,
@@ -60,7 +60,7 @@ import { AuditTableComponent } from '../audit-table/audit-table.component';
6060
],
6161
standalone: true,
6262
})
63-
export class ObjectAuditOverviewComponent implements OnInit {
63+
export class ObjectAuditLogsComponent implements OnInit {
6464

6565
/**
6666
* The object extracted from the route.
@@ -118,7 +118,7 @@ export class ObjectAuditOverviewComponent implements OnInit {
118118

119119
ngOnInit(): void {
120120
this.objectId$ = this.route.paramMap.pipe(
121-
map((paramMap: ParamMap) => paramMap.get('objectId')),
121+
map((paramMap: ParamMap) => paramMap.get('id')),
122122
switchMap((id: string) => this.dSpaceObjectDataService.findById(id, true, true)),
123123
getFirstSucceededRemoteDataPayload(),
124124
tap((object) => {
Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,17 @@
11
<div class="container">
22
<div class="d-flex">
3-
<h1 class="flex-grow-1">{{'audit.overview.title' | translate}}</h1>
3+
<h1 data-test="audit-title" class="flex-grow-1">{{'audit.overview.title' | translate}}</h1>
44
</div>
55

66
@if ((auditsRD$ | async)?.payload; as audits) {
77
<ds-audit-table
8+
data-test="audit-table"
89
[audits]="audits"
910
[isOverviewPage]="true"
1011
[pageConfig]="pageConfig"
1112
></ds-audit-table>
1213
} @else {
13-
<div>{{ 'audit.data.not-found' | translate }}</div>
14+
<div data-test="audit-empty">{{ 'audit.data.not-found' | translate }}</div>
1415
}
1516

1617
</div>

src/app/item-page/item-page-routes.ts

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,11 @@
11
import { Route } from '@angular/router';
22
import { accessTokenResolver } from '@dspace/core/auth/access-token.resolver';
33
import { authenticatedGuard } from '@dspace/core/auth/authenticated.guard';
4+
import { i18nBreadcrumbResolver } from '@dspace/core/breadcrumbs/i18n-breadcrumb.resolver';
45
import { itemBreadcrumbResolver } from '@dspace/core/breadcrumbs/item-breadcrumb.resolver';
56

67
import { REQUEST_COPY_MODULE_PATH } from '../app-routing-paths';
8+
import { ObjectAuditLogsComponent } from '../audit-page/object-audit-overview/object-audit-logs.component';
79
import { MenuRoute } from '../shared/menu/menu-route.model';
810
import { viewTrackerResolver } from '../statistics/angulartics/dspace/view-tracker.resolver';
911
import { BitstreamRequestACopyPageComponent } from './bitstreams/request-a-copy/bitstream-request-a-copy-page.component';
@@ -12,6 +14,7 @@ import { ThemedFullItemPageComponent } from './full/themed-full-item-page.compon
1214
import { itemPageResolver } from './item-page.resolver';
1315
import {
1416
ITEM_ACCESS_BY_TOKEN_PATH,
17+
ITEM_AUDIT_LOGS_PATH,
1518
ITEM_EDIT_PATH,
1619
ORCID_PATH,
1720
UPLOAD_BITSTREAM_PATH,
@@ -53,6 +56,14 @@ export const ROUTES: Route[] = [
5356
tracking: viewTrackerResolver,
5457
},
5558
},
59+
{
60+
path: ITEM_AUDIT_LOGS_PATH,
61+
component: ObjectAuditLogsComponent,
62+
data: { title: 'audit.object.title', breadcrumbKey: 'audit.object' },
63+
resolve: {
64+
breadcrumb: i18nBreadcrumbResolver,
65+
},
66+
},
5667
{
5768
path: ITEM_EDIT_PATH,
5869
loadChildren: () => import('./edit-item-page/edit-item-page-routes')

src/app/item-page/item-page-routing-paths.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ export function getItemVersionRoute(versionId: string) {
2626
return new URLCombiner(getItemModuleRoute(), ITEM_VERSION_PATH, versionId).toString();
2727
}
2828

29+
export const ITEM_AUDIT_LOGS_PATH = 'auditlogs';
2930
export const ITEM_EDIT_PATH = 'edit';
3031
export const ITEM_EDIT_VERSIONHISTORY_PATH = 'versionhistory';
3132
export const ITEM_VERSION_PATH = 'version';

0 commit comments

Comments
 (0)