@@ -3,7 +3,7 @@ import {CustomSessionStorage} from '../custom';
3
3
import { SessionStorageError } from '../../../../error' ;
4
4
5
5
describe ( 'custom session storage' , ( ) => {
6
- test ( 'can perform actions' , async ( ) => {
6
+ test ( 'can perform core actions' , async ( ) => {
7
7
const sessionId = 'test_session' ;
8
8
let session : Session | undefined = new Session (
9
9
sessionId ,
@@ -56,6 +56,89 @@ describe('custom session storage', () => {
56
56
expect ( deleteCalled ) . toBe ( true ) ;
57
57
} ) ;
58
58
59
+ test ( 'can perform optional actions' , async ( ) => {
60
+ const prefix = 'custom_sessions' ;
61
+ let sessions = [
62
+ new Session ( `${ prefix } _1` , 'shop1-sessions' , 'state' , true ) ,
63
+ new Session ( `${ prefix } _2` , 'shop2-sessions' , 'state' , true ) ,
64
+ new Session ( `${ prefix } _3` , 'shop1-sessions' , 'state' , true ) ,
65
+ new Session ( `${ prefix } _4` , 'shop3-sessions' , 'state' , true ) ,
66
+ ] ;
67
+
68
+ let deleteSessionsCalled = false ;
69
+ let findSessionsByShopCalled = false ;
70
+ const storage = new CustomSessionStorage (
71
+ ( ) => {
72
+ return Promise . resolve ( true ) ;
73
+ } ,
74
+ ( ) => {
75
+ return Promise . resolve ( sessions [ 0 ] ) ;
76
+ } ,
77
+ ( ) => {
78
+ return Promise . resolve ( true ) ;
79
+ } ,
80
+ ( ) => {
81
+ deleteSessionsCalled = true ;
82
+ sessions = [ sessions [ 1 ] , sessions [ 3 ] ] ;
83
+ return Promise . resolve ( true ) ;
84
+ } ,
85
+ ( ) => {
86
+ findSessionsByShopCalled = true ;
87
+ if ( deleteSessionsCalled ) {
88
+ return Promise . resolve ( [ ] ) ;
89
+ } else {
90
+ return Promise . resolve ( [ sessions [ 0 ] , sessions [ 2 ] ] ) ;
91
+ }
92
+ } ,
93
+ ) ;
94
+
95
+ await expect (
96
+ storage . findSessionsByShop ( 'shop1_sessinons' ) ,
97
+ ) . resolves . toEqual ( [ sessions [ 0 ] , sessions [ 2 ] ] ) ;
98
+ expect ( findSessionsByShopCalled ) . toBe ( true ) ;
99
+
100
+ await expect (
101
+ storage . deleteSessions ( [ `${ prefix } _1` , `${ prefix } _3` ] ) ,
102
+ ) . resolves . toBe ( true ) ;
103
+ expect ( deleteSessionsCalled ) . toBe ( true ) ;
104
+ expect ( sessions . length ) . toBe ( 2 ) ;
105
+ await expect (
106
+ storage . findSessionsByShop ( 'shop1_sessinons' ) ,
107
+ ) . resolves . toEqual ( [ ] ) ;
108
+ } ) ;
109
+
110
+ test ( 'missing optional actions generate warnings' , async ( ) => {
111
+ const warnSpy = jest . spyOn ( console , 'warn' ) . mockImplementation ( ) ;
112
+ const prefix = 'custom_sessions' ;
113
+ const session = new Session ( `${ prefix } _1` , 'shop1-sessions' , 'state' , true ) ;
114
+
115
+ const storage = new CustomSessionStorage (
116
+ ( ) => {
117
+ return Promise . resolve ( true ) ;
118
+ } ,
119
+ ( ) => {
120
+ return Promise . resolve ( session ) ;
121
+ } ,
122
+ ( ) => {
123
+ return Promise . resolve ( true ) ;
124
+ } ,
125
+ ) ;
126
+
127
+ await expect (
128
+ storage . findSessionsByShop ( 'shop1_sessinons' ) ,
129
+ ) . resolves . toEqual ( [ ] ) ;
130
+ expect ( warnSpy ) . toHaveBeenCalledWith (
131
+ expect . stringContaining ( 'findSessionsByShopCallback not defined.' ) ,
132
+ ) ;
133
+
134
+ await expect (
135
+ storage . deleteSessions ( [ `${ prefix } _1` , `${ prefix } _3` ] ) ,
136
+ ) . resolves . toBe ( false ) ;
137
+ expect ( warnSpy ) . toHaveBeenCalledWith (
138
+ expect . stringContaining ( 'deleteSessionsCallback not defined.' ) ,
139
+ ) ;
140
+ } ) ;
141
+
59
142
test ( 'failures and exceptions are raised' , ( ) => {
60
143
const sessionId = 'test_session' ;
61
144
const session = new Session ( sessionId , 'shop-url' , 'state' , true ) ;
0 commit comments