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'
1718
1819describe ( 'RecordHeaderComponent' , ( ) => {
1920 let component : RecordHeaderComponent
2021 let fixture : ComponentFixture < RecordHeaderComponent >
22+ let state : RecordHeaderStateService
23+ let recordService : jasmine . SpyObj < RecordService >
2124
2225 beforeEach ( async ( ) => {
26+ recordService = jasmine . createSpyObj < RecordService > ( 'RecordService' , [
27+ 'getRecord' ,
28+ ] )
29+
2330 await TestBed . configureTestingModule ( {
2431 imports : [
25- HttpClientTestingModule ,
2632 RouterTestingModule ,
33+ NoopAnimationsModule ,
2734 MatTooltipModule ,
2835 RecordHeaderComponent ,
2936 ] ,
3037 providers : [
3138 WINDOW_PROVIDERS ,
32- RecordService ,
33- PlatformInfoService ,
34- ErrorHandlerService ,
35- SnackbarService ,
36- MatSnackBar ,
37- MatDialog ,
38- Overlay ,
39+ RecordHeaderStateService ,
40+ { provide : RecordService , useValue : recordService } ,
41+ {
42+ provide : PlatformInfoService ,
43+ useValue : { get : ( ) => of ( { columns12 : true } ) } ,
44+ } ,
45+ {
46+ provide : HeaderCompactService ,
47+ useValue : { compactActive$ : of ( false ) } ,
48+ } ,
49+ {
50+ provide : TogglzService ,
51+ useValue : { getStateOf : ( ) => of ( false ) } ,
52+ } ,
53+ {
54+ provide : UserService ,
55+ useValue : { getUserSession : ( ) => of ( getUserSession ( ) ) } ,
56+ } ,
57+ {
58+ provide : RumJourneyEventService ,
59+ useValue : {
60+ recordSimpleEvent : jasmine . createSpy ( 'recordSimpleEvent' ) ,
61+ } ,
62+ } ,
3963 ] ,
40- schemas : [ CUSTOM_ELEMENTS_SCHEMA ] ,
4164 } ) . compileComponents ( )
4265 } )
4366
4467 beforeEach ( ( ) => {
68+ state = TestBed . inject ( RecordHeaderStateService )
69+ state . reset ( )
4570 fixture = TestBed . createComponent ( RecordHeaderComponent )
4671 component = fixture . componentInstance
4772 fixture . detectChanges ( )
@@ -50,4 +75,41 @@ describe('RecordHeaderComponent', () => {
5075 it ( 'should create' , ( ) => {
5176 expect ( component ) . toBeTruthy ( )
5277 } )
78+
79+ it ( 'should render header data from shared record state' , ( ) => {
80+ const userRecord = getUserRecord ( )
81+ const orcid = userRecord . userInfo . REAL_USER_ORCID
82+
83+ state . setIsPublicRecord ( orcid )
84+ state . setLoadingRecordHeader ( false )
85+ state . setUserRecord ( userRecord )
86+ fixture . detectChanges ( )
87+
88+ const text = fixture . nativeElement . textContent
89+ expect ( component . bannerTitle ) . toBe ( 'Published Name' )
90+ expect ( text ) . toContain ( 'Published Name' )
91+ expect ( text ) . toContain ( `https:${ runtimeEnvironment . BASE_URL } ${ orcid } ` )
92+ } )
93+
94+ it ( 'should not ask RecordService to load record data for the header' , ( ) => {
95+ state . setIsPublicRecord ( getUserRecord ( ) . userInfo . REAL_USER_ORCID )
96+ state . setLoadingRecordHeader ( false )
97+ state . setUserRecord ( getUserRecord ( ) )
98+ fixture . detectChanges ( )
99+
100+ expect ( recordService . getRecord ) . not . toHaveBeenCalled ( )
101+ } )
102+
103+ it ( 'should keep featured employment caption non-blocking' , ( ) => {
104+ const userRecord = getUserRecord ( )
105+
106+ state . setIsPublicRecord ( userRecord . userInfo . REAL_USER_ORCID )
107+ state . setLoadingRecordHeader ( false )
108+ state . setUserRecord ( { ...userRecord , affiliations : undefined } )
109+ fixture . detectChanges ( )
110+
111+ expect ( component . loadingUserRecord ) . toBeFalse ( )
112+ expect ( component . bannerTitle ) . toBe ( 'Published Name' )
113+ expect ( component . bannerCaption ) . toBe ( '' )
114+ } )
53115} )
0 commit comments