Skip to content

Commit fd59ca8

Browse files
authored
Merge pull request #4017 from 4Science/task/main/CST-18016
OpenAlex Integration
2 parents a18e03d + 02516f2 commit fd59ca8

File tree

68 files changed

+850
-286
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

68 files changed

+850
-286
lines changed
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
<ds-publication-claim [source]="'openaire'"></ds-publication-claim>
1+
<ds-suggestion-sources></ds-suggestion-sources>

src/app/admin/admin-notifications/admin-notifications-publication-claim-page/admin-notifications-publication-claim-page.component.spec.ts

Lines changed: 4 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,9 @@ import {
66
waitForAsync,
77
} from '@angular/core/testing';
88
import { TranslateModule } from '@ngx-translate/core';
9+
import { MockComponent } from 'ng-mocks';
910

10-
import { PublicationClaimComponent } from '../../../notifications/suggestion-targets/publication-claim/publication-claim.component';
11+
import { SuggestionSourcesComponent } from '../../../notifications/suggestions/sources/suggestion-sources.component';
1112
import { AdminNotificationsPublicationClaimPageComponent } from './admin-notifications-publication-claim-page.component';
1213

1314
describe('AdminNotificationsPublicationClaimPageComponent', () => {
@@ -20,17 +21,10 @@ describe('AdminNotificationsPublicationClaimPageComponent', () => {
2021
CommonModule,
2122
TranslateModule.forRoot(),
2223
AdminNotificationsPublicationClaimPageComponent,
23-
],
24-
providers: [
25-
AdminNotificationsPublicationClaimPageComponent,
24+
MockComponent(SuggestionSourcesComponent),
2625
],
2726
schemas: [NO_ERRORS_SCHEMA],
28-
}).overrideComponent(AdminNotificationsPublicationClaimPageComponent, {
29-
remove: {
30-
imports: [PublicationClaimComponent],
31-
},
32-
})
33-
.compileComponents();
27+
}).compileComponents();
3428
}));
3529

3630
beforeEach(() => {

src/app/admin/admin-notifications/admin-notifications-publication-claim-page/admin-notifications-publication-claim-page.component.ts

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,12 @@
11
import { Component } from '@angular/core';
22

3-
import { PublicationClaimComponent } from '../../../notifications/suggestion-targets/publication-claim/publication-claim.component';
3+
import { SuggestionSourcesComponent } from '../../../notifications/suggestions/sources/suggestion-sources.component';
44

55
@Component({
66
selector: 'ds-admin-notifications-publication-claim-page',
77
templateUrl: './admin-notifications-publication-claim-page.component.html',
88
styleUrls: ['./admin-notifications-publication-claim-page.component.scss'],
9-
imports: [
10-
PublicationClaimComponent,
11-
],
9+
imports: [ SuggestionSourcesComponent ],
1210
standalone: true,
1311
})
1412
export class AdminNotificationsPublicationClaimPageComponent {

src/app/admin/admin-notifications/admin-notifications-routes.ts

Lines changed: 19 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,8 @@ 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 { qualityAssuranceBreadcrumbResolver } from '../../core/breadcrumbs/quality-assurance-breadcrumb.resolver';
5+
import { sourcesBreadcrumbResolver } from '../../core/breadcrumbs/sources-breadcrumb.resolver';
6+
import { PublicationClaimComponent } from '../../notifications/suggestions/targets/publication-claim/publication-claim.component';
67
import { AdminNotificationsPublicationClaimPageResolver } from '../../quality-assurance-notifications-pages/notifications-suggestion-targets-page/notifications-suggestion-targets-page-resolver.service';
78
import { QualityAssuranceEventsPageComponent } from '../../quality-assurance-notifications-pages/quality-assurance-events-page/quality-assurance-events-page.component';
89
import { qualityAssuranceEventsPageResolver } from '../../quality-assurance-notifications-pages/quality-assurance-events-page/quality-assurance-events-page.resolver';
@@ -33,13 +34,28 @@ export const ROUTES: Route[] = [
3334
showBreadcrumbsFluid: false,
3435
},
3536
},
37+
{
38+
canActivate: [ authenticatedGuard ],
39+
path: `${PUBLICATION_CLAIMS_PATH}/:sourceId`,
40+
pathMatch: 'full',
41+
component: PublicationClaimComponent,
42+
resolve: {
43+
breadcrumb: sourcesBreadcrumbResolver,
44+
openaireQualityAssuranceEventsParams: AdminNotificationsPublicationClaimPageResolver,
45+
},
46+
data: {
47+
title: 'admin.notifications.publicationclaim.page.title',
48+
breadcrumbKey: 'admin.notifications.publicationclaim',
49+
showBreadcrumbsFluid: false,
50+
},
51+
},
3652
{
3753
canActivate: [authenticatedGuard],
3854
path: `${QUALITY_ASSURANCE_EDIT_PATH}/:sourceId`,
3955
component: QualityAssuranceTopicsPageComponent,
4056
pathMatch: 'full',
4157
resolve: {
42-
breadcrumb: qualityAssuranceBreadcrumbResolver,
58+
breadcrumb: sourcesBreadcrumbResolver,
4359
openaireQualityAssuranceTopicsParams: QualityAssuranceTopicsPageResolver,
4460
},
4561
data: {
@@ -85,7 +101,7 @@ export const ROUTES: Route[] = [
85101
component: QualityAssuranceEventsPageComponent,
86102
pathMatch: 'full',
87103
resolve: {
88-
breadcrumb: qualityAssuranceBreadcrumbResolver,
104+
breadcrumb: sourcesBreadcrumbResolver,
89105
openaireQualityAssuranceEventsParams: qualityAssuranceEventsPageResolver,
90106
},
91107
data: {

src/app/app.config.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import {
1010
import {
1111
NoPreloading,
1212
provideRouter,
13+
withComponentInputBinding,
1314
withEnabledBlockingInitialNavigation,
1415
withInMemoryScrolling,
1516
withPreloading,
@@ -109,6 +110,7 @@ export const commonAppConfig: ApplicationConfig = {
109110
withInMemoryScrolling(APP_ROUTING_SCROLL_CONF),
110111
withEnabledBlockingInitialNavigation(),
111112
withPreloading(NoPreloading),
113+
withComponentInputBinding(),
112114
),
113115
{
114116
provide: APP_BASE_HREF,

src/app/core/breadcrumbs/quality-assurance-breadcrumb.service.spec.ts

Lines changed: 0 additions & 43 deletions
This file was deleted.

src/app/core/breadcrumbs/quality-assurance-breadcrumb.resolver.spec.ts renamed to src/app/core/breadcrumbs/sources-breadcrumb.resolver.spec.ts

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,17 @@
1-
import { qualityAssuranceBreadcrumbResolver } from './quality-assurance-breadcrumb.resolver';
1+
import { sourcesBreadcrumbResolver } from './sources-breadcrumb.resolver';
22

3-
describe('qualityAssuranceBreadcrumbResolver', () => {
3+
describe('sourcesBreadcrumbResolver', () => {
44
describe('resolve', () => {
55
let resolver: any;
6-
let qualityAssuranceBreadcrumbService: any;
6+
let sourcesBreadcrumbService: any;
77
let route: any;
8+
const i18nKey = 'breadcrumbKey';
89
const fullPath = '/test/quality-assurance/';
9-
const expectedKey = 'testSourceId:testTopicId';
10+
const expectedKey = 'breadcrumbKey:testSourceId:testTopicId';
1011

1112
beforeEach(() => {
1213
route = {
14+
data: { breadcrumbKey: i18nKey },
1315
paramMap: {
1416
get: function (param) {
1517
return this[param];
@@ -18,13 +20,13 @@ describe('qualityAssuranceBreadcrumbResolver', () => {
1820
topicId: 'testTopicId',
1921
},
2022
};
21-
qualityAssuranceBreadcrumbService = {};
22-
resolver = qualityAssuranceBreadcrumbResolver;
23+
sourcesBreadcrumbService = {};
24+
resolver = sourcesBreadcrumbResolver;
2325
});
2426

2527
it('should resolve the breadcrumb config', () => {
26-
const resolvedConfig = resolver(route as any, { url: fullPath + 'testSourceId' } as any, qualityAssuranceBreadcrumbService);
27-
const expectedConfig = { provider: qualityAssuranceBreadcrumbService, key: expectedKey, url: fullPath };
28+
const resolvedConfig = resolver(route as any, { url: fullPath + 'testSourceId' } as any, sourcesBreadcrumbService);
29+
const expectedConfig = { provider: sourcesBreadcrumbService, key: expectedKey, url: fullPath };
2830
expect(resolvedConfig).toEqual(expectedConfig);
2931
});
3032
});

src/app/core/breadcrumbs/quality-assurance-breadcrumb.resolver.ts renamed to src/app/core/breadcrumbs/sources-breadcrumb.resolver.ts

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,16 +6,17 @@ import {
66
} from '@angular/router';
77

88
import { BreadcrumbConfig } from '../../breadcrumbs/breadcrumb/breadcrumb-config.model';
9-
import { QualityAssuranceBreadcrumbService } from './quality-assurance-breadcrumb.service';
9+
import { SourcesBreadcrumbService } from './sources-breadcrumb.service';
1010

11-
export const qualityAssuranceBreadcrumbResolver: ResolveFn<BreadcrumbConfig<string>> = (
11+
export const sourcesBreadcrumbResolver: ResolveFn<BreadcrumbConfig<string>> = (
1212
route: ActivatedRouteSnapshot,
1313
state: RouterStateSnapshot,
14-
breadcrumbService: QualityAssuranceBreadcrumbService = inject(QualityAssuranceBreadcrumbService),
14+
breadcrumbService: SourcesBreadcrumbService = inject(SourcesBreadcrumbService),
1515
): BreadcrumbConfig<string> => {
16+
const breadcrumbKey = route.data.breadcrumbKey;
1617
const sourceId = route.paramMap.get('sourceId');
1718
const topicId = route.paramMap.get('topicId');
18-
let key = sourceId;
19+
let key = `${breadcrumbKey}:${sourceId}`;
1920

2021
if (topicId) {
2122
key += `:${topicId}`;
Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
import {
2+
TestBed,
3+
waitForAsync,
4+
} from '@angular/core/testing';
5+
import { getTestScheduler } from 'jasmine-marbles';
6+
7+
import { Breadcrumb } from '../../breadcrumbs/breadcrumb/breadcrumb.model';
8+
import { SourcesBreadcrumbService } from './sources-breadcrumb.service';
9+
10+
describe('SourcesBreadcrumbService', () => {
11+
let service: SourcesBreadcrumbService;
12+
let translateService: any = {
13+
instant: (str) => str,
14+
};
15+
16+
let exampleString;
17+
let exampleSource;
18+
let exampleTopic;
19+
let exampleArg;
20+
let exampleArgTopic;
21+
let exampleURL;
22+
let exampleQaKey;
23+
24+
function init() {
25+
exampleString = 'admin.quality-assurance';
26+
exampleSource = 'sourceId';
27+
exampleTopic = 'topic';
28+
exampleArg = `${exampleString}:${exampleSource}`;
29+
exampleArgTopic = `${exampleString}:${exampleSource}:${exampleTopic}`;
30+
exampleURL = '/test/quality-assurance/';
31+
exampleQaKey = 'admin.quality-assurance.breadcrumbs';
32+
}
33+
34+
beforeEach(waitForAsync(() => {
35+
init();
36+
TestBed.configureTestingModule({}).compileComponents();
37+
}));
38+
39+
beforeEach(() => {
40+
service = new SourcesBreadcrumbService(translateService);
41+
});
42+
43+
describe('getBreadcrumbs', () => {
44+
45+
it('should return a breadcrumb based on source only', () => {
46+
const breadcrumbs = service.getBreadcrumbs(exampleArg, exampleURL);
47+
getTestScheduler().expectObservable(breadcrumbs).toBe('(a|)', { a: [new Breadcrumb(exampleQaKey, exampleURL),
48+
new Breadcrumb(exampleSource, exampleURL + exampleSource)],
49+
});
50+
});
51+
52+
it('should return a breadcrumb based also on topic', () => {
53+
const breadcrumbs = service.getBreadcrumbs(exampleArgTopic, exampleURL);
54+
getTestScheduler().expectObservable(breadcrumbs).toBe('(a|)', { a: [new Breadcrumb(exampleQaKey, exampleURL),
55+
new Breadcrumb(exampleSource, exampleURL + exampleSource),
56+
new Breadcrumb(exampleTopic, undefined)],
57+
});
58+
});
59+
});
60+
});

src/app/core/breadcrumbs/quality-assurance-breadcrumb.service.ts renamed to src/app/core/breadcrumbs/sources-breadcrumb.service.ts

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -14,9 +14,9 @@ import { BreadcrumbsProviderService } from './breadcrumbsProviderService';
1414
@Injectable({
1515
providedIn: 'root',
1616
})
17-
export class QualityAssuranceBreadcrumbService implements BreadcrumbsProviderService<string> {
17+
export class SourcesBreadcrumbService implements BreadcrumbsProviderService<string> {
1818

19-
private QUALITY_ASSURANCE_BREADCRUMB_KEY = 'admin.quality-assurance.breadcrumbs';
19+
private BREADCRUMB_SUFFIX = '.breadcrumbs';
2020
constructor(
2121
private translationService: TranslateService,
2222
) {
@@ -31,15 +31,16 @@ export class QualityAssuranceBreadcrumbService implements BreadcrumbsProviderSer
3131
*/
3232
getBreadcrumbs(key: string, url: string): Observable<Breadcrumb[]> {
3333
const args = key.split(':');
34-
const sourceId = args[0];
35-
const topicId = args.length > 2 ? args[args.length - 1] : args[1];
34+
const breadcrumbKey = args[0] + this.BREADCRUMB_SUFFIX;
35+
const sourceId = args[1];
36+
const topicId = args.length > 3 ? args[args.length - 1] : args[2];
3637

3738
if (topicId) {
38-
return observableOf( [new Breadcrumb(this.translationService.instant(this.QUALITY_ASSURANCE_BREADCRUMB_KEY), url),
39+
return observableOf( [new Breadcrumb(this.translationService.instant(breadcrumbKey), url),
3940
new Breadcrumb(sourceId, `${url}${sourceId}`),
4041
new Breadcrumb(topicId, undefined)]);
4142
} else {
42-
return observableOf([new Breadcrumb(this.translationService.instant(this.QUALITY_ASSURANCE_BREADCRUMB_KEY), url),
43+
return observableOf([new Breadcrumb(this.translationService.instant(breadcrumbKey), url),
4344
new Breadcrumb(sourceId, `${url}${sourceId}`)]);
4445
}
4546

0 commit comments

Comments
 (0)