55import { emit } from '@nextcloud/event-bus'
66import { beforeEach , describe , expect , test , vi } from 'vitest'
77
8- import { getRequestToken , onRequestTokenUpdate } from '../lib/index'
9-
108describe ( 'request token' , ( ) => {
119 beforeEach ( ( ) => {
12- emit ( 'csrf-token-update' , {
13- token : undefined ,
14- } )
10+ vi . resetModules ( )
11+ vi . resetAllMocks ( )
12+ delete document . head . dataset . requesttoken
1513 } )
1614
17- test ( 'updates token via event' , ( ) => {
15+ test ( 'return null if no token found' , async ( ) => {
16+ const { getRequestToken } = await import ( '../lib' )
1817 expect ( getRequestToken ( ) ) . toBe ( null )
1918 } )
2019
21- test ( 'find correct value' , ( ) => {
20+ test ( 'read initial token' , async ( ) => {
21+ document . head . dataset . requesttoken = 'random-token'
22+ const { getRequestToken } = await import ( '../lib' )
23+ expect ( getRequestToken ( ) ) . toBe ( 'random-token' )
24+ } )
25+
26+ test ( 'can update token by event' , async ( ) => {
27+ const { getRequestToken } = await import ( '../lib' )
28+
2229 emit ( 'csrf-token-update' , {
2330 token : 'token123' ,
2431 } )
2532
2633 expect ( getRequestToken ( ) ) . toBe ( 'token123' )
2734 } )
2835
29- test ( 'request token observer is called' , ( ) => {
36+ test ( 'request token observer is called' , async ( ) => {
37+ const { onRequestTokenUpdate } = await import ( '../lib' )
3038 const observer = vi . fn ( ( ) => { } )
3139
3240 onRequestTokenUpdate ( observer )
@@ -36,4 +44,20 @@ describe('request token', () => {
3644
3745 expect ( observer . mock . calls . length ) . toBe ( 1 )
3846 } )
47+
48+ test ( 'handle exception in observer' , async ( ) => {
49+ const spy = vi . spyOn ( window . console , 'error' )
50+ const { onRequestTokenUpdate } = await import ( '../lib' )
51+ const observer = vi . fn ( ( ) => { throw new Error ( '!Error!' ) } )
52+ // silence the console
53+ spy . mockImplementationOnce ( ( ) => { } )
54+
55+ onRequestTokenUpdate ( observer )
56+ emit ( 'csrf-token-update' , {
57+ token : 'token123' ,
58+ } )
59+
60+ expect ( observer . mock . calls . length ) . toBe ( 1 )
61+ expect ( spy ) . toHaveBeenCalledOnce ( )
62+ } )
3963} )
0 commit comments