1
+ /// <reference path="../../../typings/globals/jest/index.d.ts" />
2
+ /// <reference path="../../../typings/common/global.d.ts" />
3
+
4
+ import { getLocalStorageKey , saveToLocalStorage , loadProgressFromLocalStorage } from './local-storage' ;
5
+
6
+ describe ( 'local storage function' , ( ) => {
7
+
8
+ const tutorial = {
9
+ name : 'example'
10
+ } ;
11
+
12
+ afterEach ( ( ) => {
13
+ global . window = null ;
14
+ } )
15
+
16
+ it ( 'getLocalStorage creates a key based on the tutorial name' , ( ) => {
17
+ const tutorial = {
18
+ name : 'example'
19
+ } ;
20
+ expect ( getLocalStorageKey ( tutorial ) ) . toBe ( 'coderoad:example' ) ;
21
+ } ) ;
22
+
23
+ it ( 'saveToLocalStorage saves tutorial progress' , ( ) => {
24
+ global . window . localStorage = {
25
+ setItem : jest . fn ( )
26
+ } ;
27
+ const progress = [ true , true , false ] ;
28
+ saveToLocalStorage ( tutorial , progress ) ;
29
+ expect ( global . window . localStorage . setItem ) . toBeCalledWith ( 'coderoad:example' , JSON . stringify ( progress ) ) ;
30
+ } ) ;
31
+
32
+ it ( 'saveToLocalStorage should throw an error if progress is invalid' , ( ) => {
33
+ global . window . localStorage = {
34
+ setItem : jest . fn ( )
35
+ } ;
36
+ const progress = 'invalid' ;
37
+ expect ( saveToLocalStorage ( tutorial , progress ) ) . toThrowError ( ) ;
38
+ } ) ;
39
+
40
+ it ( 'loadProgressFromLocalStorage should load saved progress' , ( ) => {
41
+ const progress = [ true , true , false ] ;
42
+ global . window . localStorage = {
43
+ getItem : key => JSON . stringify ( { "completed" : false , "pages" : progress } )
44
+ } ;
45
+ expect ( loadProgressFromLocalStorage ( tutorial ) ) . toEqual ( { "completed" : false , "pages" : progress } ) ;
46
+ } ) ;
47
+
48
+ it ( 'loadProgressFromLocalStorage should return null if no progress saved' , ( ) => {
49
+ const progress = null ;
50
+ global . window . localStorage = {
51
+ getItem : key => null
52
+ } ;
53
+ expect ( loadProgressFromLocalStorage ( tutorial ) ) . toEqual ( null ) ;
54
+ } ) ;
55
+
56
+ } ) ;
0 commit comments