66 * Side Public License, v 1.
77 */
88
9+ import { convertItemsMock } from './driver.test.mocks' ;
10+ // @ts -expect-error
11+ import fetchMock from 'fetch-mock/es5/client' ;
12+ import { take } from 'rxjs/operators' ;
913import { NewsfeedApiDriver } from './driver' ;
1014import { storageMock } from './storage.mock' ;
1115
@@ -20,6 +24,16 @@ describe('NewsfeedApiDriver', () => {
2024 beforeEach ( ( ) => {
2125 storage = storageMock . create ( ) ;
2226 driver = new NewsfeedApiDriver ( kibanaVersion , userLanguage , fetchInterval , storage ) ;
27+ convertItemsMock . mockReturnValue ( [ ] ) ;
28+ } ) ;
29+
30+ afterEach ( ( ) => {
31+ fetchMock . reset ( ) ;
32+ convertItemsMock . mockReset ( ) ;
33+ } ) ;
34+
35+ afterAll ( ( ) => {
36+ fetchMock . restore ( ) ;
2337 } ) ;
2438
2539 describe ( 'shouldFetch' , ( ) => {
@@ -39,4 +53,81 @@ describe('NewsfeedApiDriver', () => {
3953 expect ( driver . shouldFetch ( ) ) . toBe ( false ) ;
4054 } ) ;
4155 } ) ;
56+
57+ describe ( 'fetchNewsfeedItems' , ( ) => {
58+ it ( 'calls `window.fetch` with the correct parameters' , async ( ) => {
59+ fetchMock . get ( '*' , { items : [ ] } ) ;
60+ await driver
61+ . fetchNewsfeedItems ( {
62+ urlRoot : 'http://newsfeed.com' ,
63+ pathTemplate : '/{VERSION}/news' ,
64+ } )
65+ . pipe ( take ( 1 ) )
66+ . toPromise ( ) ;
67+
68+ expect ( fetchMock . lastUrl ( ) ) . toEqual ( 'http://newsfeed.com/8.0.0/news' ) ;
69+ expect ( fetchMock . lastOptions ( ) ) . toEqual ( {
70+ method : 'GET' ,
71+ } ) ;
72+ } ) ;
73+
74+ it ( 'calls `convertItems` with the correct parameters' , async ( ) => {
75+ fetchMock . get ( '*' , { items : [ 'foo' , 'bar' ] } ) ;
76+
77+ await driver
78+ . fetchNewsfeedItems ( {
79+ urlRoot : 'http://newsfeed.com' ,
80+ pathTemplate : '/{VERSION}/news' ,
81+ } )
82+ . pipe ( take ( 1 ) )
83+ . toPromise ( ) ;
84+
85+ expect ( convertItemsMock ) . toHaveBeenCalledTimes ( 1 ) ;
86+ expect ( convertItemsMock ) . toHaveBeenCalledWith ( [ 'foo' , 'bar' ] , userLanguage ) ;
87+ } ) ;
88+
89+ it ( 'calls `storage.setFetchedItems` with the correct parameters' , async ( ) => {
90+ fetchMock . get ( '*' , { items : [ ] } ) ;
91+ convertItemsMock . mockReturnValue ( [
92+ { id : '1' , hash : 'hash1' } ,
93+ { id : '2' , hash : 'hash2' } ,
94+ ] ) ;
95+
96+ await driver
97+ . fetchNewsfeedItems ( {
98+ urlRoot : 'http://newsfeed.com' ,
99+ pathTemplate : '/{VERSION}/news' ,
100+ } )
101+ . pipe ( take ( 1 ) )
102+ . toPromise ( ) ;
103+
104+ expect ( storage . setFetchedItems ) . toHaveBeenCalledTimes ( 1 ) ;
105+ expect ( storage . setFetchedItems ) . toHaveBeenCalledWith ( [ 'hash1' , 'hash2' ] ) ;
106+ } ) ;
107+
108+ it ( 'returns the expected values' , async ( ) => {
109+ fetchMock . get ( '*' , { items : [ ] } ) ;
110+ const feedItems = [
111+ { id : '1' , hash : 'hash1' } ,
112+ { id : '2' , hash : 'hash2' } ,
113+ ] ;
114+ convertItemsMock . mockReturnValue ( feedItems ) ;
115+ storage . setFetchedItems . mockReturnValue ( true ) ;
116+
117+ const result = await driver
118+ . fetchNewsfeedItems ( {
119+ urlRoot : 'http://newsfeed.com' ,
120+ pathTemplate : '/{VERSION}/news' ,
121+ } )
122+ . pipe ( take ( 1 ) )
123+ . toPromise ( ) ;
124+
125+ expect ( result ) . toEqual ( {
126+ error : null ,
127+ kibanaVersion,
128+ hasNew : true ,
129+ feedItems,
130+ } ) ;
131+ } ) ;
132+ } ) ;
42133} ) ;
0 commit comments