11import { Store } from '@ngxs/store' ;
22
3+ import { TranslateModule } from '@ngx-translate/core' ;
34import { MockProvider } from 'ng-mocks' ;
45
5- import { BehaviorSubject } from 'rxjs' ;
6+ import { BehaviorSubject , of } from 'rxjs' ;
67
8+ import { signal } from '@angular/core' ;
79import { ComponentFixture , TestBed } from '@angular/core/testing' ;
810
911import { PreprintSelectors } from '@osf/features/preprints/store/preprint' ;
1012import { IS_LARGE , IS_MEDIUM } from '@osf/shared/helpers' ;
1113import { MOCK_STORE } from '@shared/mocks' ;
14+ import { DataciteService } from '@shared/services/datacite/datacite.service' ;
1215
1316import { PreprintFileSectionComponent } from './preprint-file-section.component' ;
1417
15- describe . skip ( 'PreprintFileSectionComponent' , ( ) => {
18+ describe ( 'PreprintFileSectionComponent' , ( ) => {
1619 let component : PreprintFileSectionComponent ;
1720 let fixture : ComponentFixture < PreprintFileSectionComponent > ;
18-
21+ let dataciteService : jest . Mocked < DataciteService > ;
1922 const mockStore = MOCK_STORE ;
2023 let isMediumSubject : BehaviorSubject < boolean > ;
2124 let isLargeSubject : BehaviorSubject < boolean > ;
25+ // const
2226
2327 beforeEach ( async ( ) => {
2428 ( MOCK_STORE . selectSignal as jest . Mock ) . mockImplementation ( ( selector ) => {
2529 if (
2630 selector === PreprintSelectors . isPreprintFileLoading ||
27- selector === PreprintSelectors . getPreprintFileVersions ||
31+ // selector === PreprintSelectors.getPreprintFileVersions ||
2832 selector === PreprintSelectors . arePreprintFileVersionsLoading
2933 ) {
3034 return ( ) => [ ] ;
35+ } else if ( selector == PreprintSelectors . getPreprint ) {
36+ return ( ) => ( {
37+ id : 1 ,
38+ } ) ;
39+ } else if ( selector == PreprintSelectors . getPreprintFileVersions ) {
40+ return signal ( [ { date : '12312312' , downloadUrl : '21312' , id : '1' } ] ) ;
3141 }
3242 return ( ) => null ;
3343 } ) ;
@@ -36,9 +46,12 @@ describe.skip('PreprintFileSectionComponent', () => {
3646 isLargeSubject = new BehaviorSubject < boolean > ( true ) ;
3747
3848 await TestBed . configureTestingModule ( {
39- imports : [ PreprintFileSectionComponent ] ,
49+ imports : [ PreprintFileSectionComponent , TranslateModule . forRoot ( ) ] ,
4050 providers : [
4151 MockProvider ( Store , mockStore ) ,
52+ MockProvider ( DataciteService , {
53+ logIdentifiableDownload : jest . fn ( ) . mockReturnValue ( of ( void 0 ) ) ,
54+ } ) ,
4255 MockProvider ( IS_MEDIUM , isMediumSubject ) ,
4356 MockProvider ( IS_LARGE , isLargeSubject ) ,
4457 ] ,
@@ -47,9 +60,27 @@ describe.skip('PreprintFileSectionComponent', () => {
4760 fixture = TestBed . createComponent ( PreprintFileSectionComponent ) ;
4861 component = fixture . componentInstance ;
4962 fixture . detectChanges ( ) ;
63+ dataciteService = TestBed . inject ( DataciteService ) as jest . MockedObject < DataciteService > ;
64+ } ) ;
65+
66+ it ( 'should call dataciteService.logIdentifiableDownload when logDownload is called' , ( ) => {
67+ component . logDownload ( ) ;
68+ expect ( dataciteService . logIdentifiableDownload ) . toHaveBeenCalledWith ( component . preprint$ ) ;
5069 } ) ;
5170
52- it ( 'should create' , ( ) => {
53- expect ( component ) . toBeTruthy ( ) ;
71+ it ( 'should call logDownload when version menu item is clicked' , ( ) => {
72+ // Get the command from versionMenuItems
73+ fixture . detectChanges ( ) ;
74+ const menuItems = component . versionMenuItems ( ) ;
75+ expect ( menuItems . length ) . toBeGreaterThan ( 0 ) ;
76+
77+ const versionCommand = menuItems [ 0 ] . command ! ;
78+ jest . spyOn ( component , 'logDownload' ) ;
79+
80+ // simulate clicking the menu item
81+ versionCommand ( ) ;
82+
83+ expect ( component . logDownload ) . toHaveBeenCalled ( ) ;
84+ expect ( dataciteService . logIdentifiableDownload ) . toHaveBeenCalledWith ( expect . anything ( ) ) ;
5485 } ) ;
5586} ) ;
0 commit comments