1
- import { Origin , PersistentAuthenticator } from '../../src' ;
1
+ import { Origin , PersistentAuthenticator , senderOrigin } from '../../src' ;
2
+ import { Runtime } from 'webextension-polyfill' ;
2
3
import { dummyLogger } from 'ts-log' ;
3
4
4
5
const createStubStorage = ( ) => {
@@ -12,8 +13,8 @@ const createStubStorage = () => {
12
13
} ;
13
14
14
15
describe ( 'PersistentAuthenticator' , ( ) => {
15
- const origin1 : Origin = 'origin1' ;
16
- const origin2 : Origin = 'origin2' ;
16
+ const sender1 : Runtime . MessageSender = { url : 'https://sender1.com' } ;
17
+ const sender2 : Runtime . MessageSender = { url : 'https://sender2.com' } ;
17
18
let requestAccess : jest . Mock ;
18
19
let storage : ReturnType < typeof createStubStorage > ;
19
20
let authenticator : PersistentAuthenticator ;
@@ -28,87 +29,87 @@ describe('PersistentAuthenticator', () => {
28
29
describe ( 'requestAccess' , ( ) => {
29
30
it ( 'resolves to true if allowed and persists the decision' , async ( ) => {
30
31
requestAccess . mockResolvedValueOnce ( true ) ;
31
- expect ( await authenticator . requestAccess ( origin1 ) ) . toBe ( true ) ;
32
- expect ( await authenticator . requestAccess ( origin1 ) ) . toBe ( true ) ;
32
+ expect ( await authenticator . requestAccess ( sender1 ) ) . toBe ( true ) ;
33
+ expect ( await authenticator . requestAccess ( sender1 ) ) . toBe ( true ) ;
33
34
expect ( requestAccess ) . toBeCalledTimes ( 1 ) ;
34
- expect ( await storage . get ( ) ) . toContain ( origin1 ) ;
35
+ expect ( await storage . get ( ) ) . toContain ( senderOrigin ( sender1 ) ) ;
35
36
} ) ;
36
37
37
38
it ( 'resolves to false if denied an error and does not persist the decision' , async ( ) => {
38
39
requestAccess . mockResolvedValueOnce ( false ) . mockResolvedValueOnce ( true ) ;
39
- expect ( await authenticator . requestAccess ( origin1 ) ) . toBe ( false ) ;
40
- expect ( await storage . get ( ) ) . not . toContain ( origin1 ) ;
41
- expect ( await authenticator . requestAccess ( origin1 ) ) . toBe ( true ) ;
42
- expect ( await storage . get ( ) ) . toContain ( origin1 ) ;
40
+ expect ( await authenticator . requestAccess ( sender1 ) ) . toBe ( false ) ;
41
+ expect ( await storage . get ( ) ) . not . toContain ( senderOrigin ( sender1 ) ) ;
42
+ expect ( await authenticator . requestAccess ( sender1 ) ) . toBe ( true ) ;
43
+ expect ( await storage . get ( ) ) . toContain ( senderOrigin ( sender1 ) ) ;
43
44
expect ( requestAccess ) . toBeCalledTimes ( 2 ) ;
44
45
} ) ;
45
46
46
47
it ( 'resolves to false if any error is encountered and does not persist the decision' , async ( ) => {
47
48
requestAccess . mockResolvedValue ( true ) . mockRejectedValueOnce ( new Error ( 'any error' ) ) ;
48
- expect ( await authenticator . requestAccess ( origin1 ) ) . toBe ( false ) ;
49
- expect ( await storage . get ( ) ) . not . toContain ( origin1 ) ;
49
+ expect ( await authenticator . requestAccess ( sender1 ) ) . toBe ( false ) ;
50
+ expect ( await storage . get ( ) ) . not . toContain ( senderOrigin ( sender1 ) ) ;
50
51
51
52
storage . set . mockResolvedValue ( void 0 ) . mockRejectedValueOnce ( new Error ( 'any error' ) ) ;
52
- expect ( await authenticator . requestAccess ( origin1 ) ) . toBe ( false ) ;
53
- expect ( await storage . get ( ) ) . not . toContain ( origin1 ) ;
53
+ expect ( await authenticator . requestAccess ( sender1 ) ) . toBe ( false ) ;
54
+ expect ( await storage . get ( ) ) . not . toContain ( senderOrigin ( sender1 ) ) ;
54
55
} ) ;
55
56
56
57
it ( 'caches storage by origin' , async ( ) => {
57
58
requestAccess . mockResolvedValueOnce ( true ) . mockResolvedValueOnce ( false ) ;
58
- expect ( await authenticator . requestAccess ( origin1 ) ) . toBe ( true ) ;
59
- expect ( await authenticator . requestAccess ( origin2 ) ) . toBe ( false ) ;
59
+ expect ( await authenticator . requestAccess ( sender1 ) ) . toBe ( true ) ;
60
+ expect ( await authenticator . requestAccess ( sender2 ) ) . toBe ( false ) ;
60
61
expect ( requestAccess ) . toBeCalledTimes ( 2 ) ;
61
62
} ) ;
62
63
} ) ;
63
64
64
65
describe ( 'revokeAccess' , ( ) => {
65
66
beforeEach ( async ( ) => {
66
67
requestAccess . mockResolvedValueOnce ( true ) ;
67
- await authenticator . requestAccess ( origin1 ) ;
68
+ await authenticator . requestAccess ( sender1 ) ;
68
69
storage . set . mockReset ( ) ;
69
70
} ) ;
70
71
71
72
it ( 'unknown origin => returns false' , async ( ) => {
72
- expect ( await authenticator . revokeAccess ( origin2 ) ) . toBe ( false ) ;
73
+ expect ( await authenticator . revokeAccess ( sender2 ) ) . toBe ( false ) ;
73
74
} ) ;
74
75
75
76
describe ( 'allowed origin' , ( ) => {
76
77
it ( 'returns true and removes origin from cache' , async ( ) => {
77
- expect ( await authenticator . revokeAccess ( origin1 ) ) . toBe ( true ) ;
78
- expect ( await authenticator . revokeAccess ( origin1 ) ) . toBe ( false ) ;
78
+ expect ( await authenticator . revokeAccess ( sender1 ) ) . toBe ( true ) ;
79
+ expect ( await authenticator . revokeAccess ( sender1 ) ) . toBe ( false ) ;
79
80
expect ( storage . set ) . toBeCalledTimes ( 1 ) ;
80
81
} ) ;
81
82
82
83
it ( 'returns false if storage throws' , async ( ) => {
83
84
storage . set . mockRejectedValueOnce ( new Error ( 'any error' ) ) ;
84
- expect ( await authenticator . revokeAccess ( origin1 ) ) . toBe ( false ) ;
85
+ expect ( await authenticator . revokeAccess ( sender1 ) ) . toBe ( false ) ;
85
86
} ) ;
86
87
} ) ;
87
88
} ) ;
88
89
89
90
describe ( 'haveAccess' , ( ) => {
90
91
beforeEach ( async ( ) => {
91
92
requestAccess . mockResolvedValueOnce ( true ) ;
92
- await authenticator . requestAccess ( origin1 ) ;
93
+ await authenticator . requestAccess ( sender1 ) ;
93
94
} ) ;
94
95
95
96
it ( 'unknown origin => returns false' , async ( ) => {
96
- expect ( await authenticator . haveAccess ( origin2 ) ) . toBe ( false ) ;
97
+ expect ( await authenticator . haveAccess ( sender2 ) ) . toBe ( false ) ;
97
98
} ) ;
98
99
99
100
it ( 'allowed origin => returns true' , async ( ) => {
100
- expect ( await authenticator . haveAccess ( origin1 ) ) . toBe ( true ) ;
101
+ expect ( await authenticator . haveAccess ( sender1 ) ) . toBe ( true ) ;
101
102
} ) ;
102
103
} ) ;
103
104
104
105
describe ( 'clear' , ( ) => {
105
106
it ( 'removes all origins' , async ( ) => {
106
107
requestAccess . mockResolvedValue ( true ) ;
107
- await authenticator . requestAccess ( origin1 ) ;
108
- await authenticator . requestAccess ( origin2 ) ;
108
+ await authenticator . requestAccess ( sender1 ) ;
109
+ await authenticator . requestAccess ( sender2 ) ;
109
110
await authenticator . clear ( ) ;
110
- expect ( await authenticator . haveAccess ( origin1 ) ) . toBe ( false ) ;
111
- expect ( await authenticator . haveAccess ( origin2 ) ) . toBe ( false ) ;
111
+ expect ( await authenticator . haveAccess ( sender1 ) ) . toBe ( false ) ;
112
+ expect ( await authenticator . haveAccess ( sender2 ) ) . toBe ( false ) ;
112
113
} ) ;
113
114
} ) ;
114
115
} ) ;
0 commit comments