11// @flow
22/* eslint-env jest */
3- import {
4- appOriginHandler ,
5- loginHandler ,
6- storageHandler ,
7- startPopupServer
8- } from '../popup'
3+ import { obtainSession , popupHandler } from '../popup'
94import { polyfillWindow , polyunfillWindow } from './spec-helpers'
105import { defaultStorage } from '../storage'
116
127beforeEach ( polyfillWindow )
138
149afterEach ( polyunfillWindow )
1510
16- describe ( 'storageHandler' , ( ) => {
11+ describe ( 'obtainSession' , ( ) => {
12+ it ( 'resolves to the captured session once it captures the "foundSession" method' , async ( ) => {
13+ expect . assertions ( 1 )
14+ const store = defaultStorage ( )
15+ const session = {
16+ idp : 'https://localhost' ,
17+ webId : 'https://localhost/profile#me'
18+ }
19+ const sessionPromise = obtainSession ( store , window , {
20+ popupUri : 'https://app.biz/select-idp' ,
21+ callbackUri : 'https://app.biz/callback' ,
22+ storage : store
23+ } )
24+ window . postMessage (
25+ {
26+ 'solid-auth-client' : {
27+ id : '12345' ,
28+ method : 'foundSession' ,
29+ args : [ session ]
30+ }
31+ } ,
32+ window . location . origin
33+ )
34+ const resolvedSession = await sessionPromise
35+ expect ( resolvedSession ) . toEqual ( session )
36+ } )
37+ } )
38+
39+ describe ( 'popupHandler' , ( ) => {
1740 let store
1841 let handler
42+ const mockCallback = jest . fn ( )
43+
44+ const options = {
45+ popupUri : 'https://localhost/select-idp' ,
46+ callbackUri : 'https://localhost/callback' ,
47+ storage : defaultStorage ( )
48+ }
1949
2050 beforeEach ( ( ) => {
2151 store = defaultStorage ( )
22- handler = storageHandler ( store )
52+ handler = popupHandler ( store , options , mockCallback )
53+ mockCallback . mockReset ( )
2354 } )
2455
2556 it ( 'implements getItem' , async ( ) => {
@@ -44,23 +75,8 @@ describe('storageHandler', () => {
4475 expect ( await store . getItem ( 'foo' ) ) . toEqual ( null )
4576 } )
4677
47- it ( 'ignores unknown methods' , async ( ) => {
48- expect . assertions ( 1 )
49- const resp = await handler ( 'unknown_method' , 'a' , 'b' , 'c' )
50- expect ( resp ) . toBeNull ( )
51- } )
52- } )
53-
54- describe ( 'loginHandler' , ( ) => {
55- const options = {
56- popupUri : 'https://localhost/select-idp' ,
57- callbackUri : 'https://localhost/callback' ,
58- storage : defaultStorage ( )
59- }
60-
6178 it ( 'returns the loginOptions' , async ( ) => {
6279 expect . assertions ( 1 )
63- const handler = loginHandler ( options , ( ) => { } )
6480 const _options = await handler ( 'getLoginOptions' )
6581 expect ( _options ) . toEqual ( {
6682 popupUri : options . popupUri ,
@@ -70,76 +86,25 @@ describe('loginHandler', () => {
7086
7187 it ( 'captures a found session' , async ( ) => {
7288 expect . assertions ( 3 )
73- const mockCallback = jest . fn ( )
74- const handler = loginHandler ( options , mockCallback )
7589 const session = {
7690 idp : 'https://example.com' ,
7791 webId : 'https://me.example.com/profile#me'
7892 }
7993 const _sessionResp = await handler ( 'foundSession' , session )
80- expect ( _sessionResp ) . toEqual ( null )
94+ expect ( _sessionResp ) . toBeUndefined ( )
8195 expect ( mockCallback . mock . calls . length ) . toBe ( 1 )
8296 expect ( mockCallback . mock . calls [ 0 ] [ 0 ] ) . toEqual ( session )
8397 } )
8498
85- it ( 'ignores unknown methods' , async ( ) => {
86- expect . assertions ( 1 )
87- const handler = loginHandler ( options , ( ) => { } )
88- const resp = await handler ( 'unknown_method' , 'a' , 'b' , 'c' )
89- expect ( resp ) . toBeNull ( )
90- } )
91- } )
92-
93- describe ( 'appOriginHandler' , ( ) => {
9499 it ( 'responds with the window origin' , async ( ) => {
95100 expect . assertions ( 1 )
96- const resp = await appOriginHandler ( 'getAppOrigin' )
101+ const resp = await handler ( 'getAppOrigin' )
97102 expect ( resp ) . toEqual ( 'https://app.biz' )
98103 } )
99104
100105 it ( 'ignores unknown methods' , async ( ) => {
101106 expect . assertions ( 1 )
102- const resp = await appOriginHandler ( 'unknown_method' )
103- expect ( resp ) . toBeNull ( )
104- } )
105- } )
106-
107- describe ( 'startPopupServer' , ( ) => {
108- it ( 'rejects if loginOptions does not include both popupUri and callbackUri' , async ( ) => {
109- expect . assertions ( 1 )
110- const store = defaultStorage ( )
111- await expect (
112- startPopupServer ( store , window , {
113- popupUri : '' ,
114- callbackUri : '' ,
115- storage : store
116- } )
117- ) . rejects . toBeInstanceOf ( Error )
118- } )
119-
120- it ( 'resolves to the captured session once it captures the "foundSession" method' , async ( ) => {
121- expect . assertions ( 1 )
122- const store = defaultStorage ( )
123- const session = {
124- idp : 'https://localhost' ,
125- webId : 'https://localhost/profile#me'
126- }
127- const sessionPromise = startPopupServer ( store , window , {
128- popupUri : 'https://app.biz/select-idp' ,
129- callbackUri : 'https://app.biz/callback' ,
130- storage : store
131- } )
132- window . postMessage (
133- {
134- 'solid-auth-client' : {
135- id : '12345' ,
136- method : 'foundSession' ,
137- args : [ session ]
138- }
139- } ,
140- window . location . origin
141- )
142- const resolvedSession = await sessionPromise
143- expect ( resolvedSession ) . toEqual ( session )
107+ const resp = await handler ( 'unknown_method' )
108+ expect ( resp ) . toBeUndefined ( )
144109 } )
145110} )
0 commit comments