11import { ComponentFixture , TestBed } from '@angular/core/testing'
22
33import { RecordHeaderComponent } from './record-header.component'
4- import { HttpClientTestingModule } from '@angular/common/http/testing'
54import { WINDOW_PROVIDERS } from 'src/app/cdk/window'
65import { PlatformInfoService } from 'src/app/cdk/platform-info'
7- import { ErrorHandlerService } from 'src/app/core/error-handler/error-handler.service'
8- import { SnackbarService } from 'src/app/cdk/snackbar/snackbar.service'
9- import { MatSnackBar } from '@angular/material/snack-bar'
10- import { MatDialog } from '@angular/material/dialog'
11- import { Overlay } from '@angular/cdk/overlay'
126import { RouterTestingModule } from '@angular/router/testing'
137import { RecordService } from 'src/app/core/record/record.service'
14-
15- import { CUSTOM_ELEMENTS_SCHEMA } from '@angular/core'
168import { MatTooltipModule } from '@angular/material/tooltip'
9+ import { of } from 'rxjs'
10+ import { HeaderCompactService } from 'src/app/core/header-compact/header-compact.service'
11+ import { RecordHeaderStateService } from 'src/app/core/record-header-state/record-header-state.service'
12+ import { TogglzService } from 'src/app/core/togglz/togglz.service'
13+ import { UserService } from 'src/app/core'
14+ import { getUserRecord } from 'src/app/core/record/record.service.spec'
15+ import { getUserSession } from 'src/app/core/user/user.service.spec'
16+ import { NoopAnimationsModule } from '@angular/platform-browser/animations'
17+ import { RumJourneyEventService } from 'src/app/rum/service/customEvent.service'
18+ import { TogglzFlag } from 'src/app/types/config.endpoint'
19+ import { AffiliationType } from 'src/app/types/record-affiliation.endpoint'
1720
1821describe ( 'RecordHeaderComponent' , ( ) => {
1922 let component : RecordHeaderComponent
2023 let fixture : ComponentFixture < RecordHeaderComponent >
24+ let state : RecordHeaderStateService
25+ let recordService : jasmine . SpyObj < RecordService >
26+ let togglzService : { getStateOf : jasmine . Spy }
2127
2228 beforeEach ( async ( ) => {
29+ recordService = jasmine . createSpyObj < RecordService > ( 'RecordService' , [
30+ 'getRecord' ,
31+ ] )
32+ togglzService = {
33+ getStateOf : jasmine . createSpy ( 'getStateOf' ) . and . callFake ( ( flag : string ) =>
34+ of ( flag === TogglzFlag . FEATURED_AFFILIATIONS )
35+ ) ,
36+ }
37+
2338 await TestBed . configureTestingModule ( {
2439 imports : [
25- HttpClientTestingModule ,
2640 RouterTestingModule ,
41+ NoopAnimationsModule ,
2742 MatTooltipModule ,
2843 RecordHeaderComponent ,
2944 ] ,
3045 providers : [
3146 WINDOW_PROVIDERS ,
32- RecordService ,
33- PlatformInfoService ,
34- ErrorHandlerService ,
35- SnackbarService ,
36- MatSnackBar ,
37- MatDialog ,
38- Overlay ,
47+ RecordHeaderStateService ,
48+ { provide : RecordService , useValue : recordService } ,
49+ {
50+ provide : PlatformInfoService ,
51+ useValue : { get : ( ) => of ( { columns12 : true } ) } ,
52+ } ,
53+ {
54+ provide : HeaderCompactService ,
55+ useValue : { compactActive$ : of ( false ) } ,
56+ } ,
57+ {
58+ provide : TogglzService ,
59+ useValue : togglzService ,
60+ } ,
61+ {
62+ provide : UserService ,
63+ useValue : { getUserSession : ( ) => of ( getUserSession ( ) ) } ,
64+ } ,
65+ {
66+ provide : RumJourneyEventService ,
67+ useValue : {
68+ recordSimpleEvent : jasmine . createSpy ( 'recordSimpleEvent' ) ,
69+ } ,
70+ } ,
3971 ] ,
40- schemas : [ CUSTOM_ELEMENTS_SCHEMA ] ,
4172 } ) . compileComponents ( )
4273 } )
4374
4475 beforeEach ( ( ) => {
76+ state = TestBed . inject ( RecordHeaderStateService )
77+ state . reset ( )
4578 fixture = TestBed . createComponent ( RecordHeaderComponent )
4679 component = fixture . componentInstance
4780 fixture . detectChanges ( )
@@ -50,4 +83,61 @@ describe('RecordHeaderComponent', () => {
5083 it ( 'should create' , ( ) => {
5184 expect ( component ) . toBeTruthy ( )
5285 } )
86+
87+ it ( 'should render header data from shared record state' , ( ) => {
88+ const userRecord = getUserRecord ( )
89+ const orcid = userRecord . userInfo . REAL_USER_ORCID
90+
91+ state . setIsPublicRecord ( orcid )
92+ state . setLoadingRecordHeader ( false )
93+ state . setUserRecord ( userRecord )
94+ fixture . detectChanges ( )
95+
96+ const text = fixture . nativeElement . textContent
97+ expect ( component . bannerTitle ) . toBe ( 'Published Name' )
98+ expect ( text ) . toContain ( 'Published Name' )
99+ expect ( text ) . toContain ( `https:${ runtimeEnvironment . BASE_URL } ${ orcid } ` )
100+ } )
101+
102+ it ( 'should not ask RecordService to load record data for the header' , ( ) => {
103+ state . setIsPublicRecord ( getUserRecord ( ) . userInfo . REAL_USER_ORCID )
104+ state . setLoadingRecordHeader ( false )
105+ state . setUserRecord ( getUserRecord ( ) )
106+ fixture . detectChanges ( )
107+
108+ expect ( recordService . getRecord ) . not . toHaveBeenCalled ( )
109+ } )
110+
111+ it ( 'should keep featured employment caption non-blocking' , ( ) => {
112+ const userRecord = getUserRecord ( )
113+
114+ state . setIsPublicRecord ( userRecord . userInfo . REAL_USER_ORCID )
115+ state . setLoadingRecordHeader ( false )
116+ state . setUserRecord ( { ...userRecord , affiliations : undefined } )
117+ fixture . detectChanges ( )
118+
119+ expect ( component . loadingUserRecord ) . toBeFalse ( )
120+ expect ( component . bannerTitle ) . toBe ( 'Published Name' )
121+ expect ( component . bannerCaption ) . toBe ( '' )
122+ } )
123+
124+ it ( 'should render the featured employment caption from shared state' , ( ) => {
125+ const userRecord = getUserRecord ( )
126+ const featuredAffiliation =
127+ userRecord . affiliations [ 0 ] . affiliationGroup [ 0 ] . affiliations [ 0 ]
128+
129+ featuredAffiliation . featured = true
130+ featuredAffiliation . affiliationType = { value : AffiliationType . employment }
131+ featuredAffiliation . roleTitle = { value : 'Engineer' }
132+ featuredAffiliation . departmentName = { value : 'Platform' }
133+
134+ state . setIsPublicRecord ( userRecord . userInfo . REAL_USER_ORCID )
135+ state . setLoadingRecordHeader ( false )
136+ state . setUserRecord ( userRecord )
137+ fixture . detectChanges ( )
138+
139+ expect ( component . bannerCaption ) . toBe (
140+ 'ORCID: city, region, country - Engineer, Platform'
141+ )
142+ } )
53143} )
0 commit comments