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