@@ -7,9 +7,13 @@ import {
77} from "../redux/EditorSlice" ;
88import { showLoginPrompt , showSavePrompt } from "../utils/Notifications" ;
99
10+ let mockInitialComponents = [ ] ;
11+
1012jest . mock ( "react-redux" , ( ) => ( {
1113 ...jest . requireActual ( "react-redux" ) ,
1214 useDispatch : ( ) => jest . fn ( ) ,
15+ useSelector : ( selector ) =>
16+ selector ( { editor : { initialComponents : mockInitialComponents } } ) ,
1317} ) ) ;
1418
1519jest . mock ( "../redux/EditorSlice" , ( ) => ( {
@@ -56,21 +60,50 @@ const project = {
5660 ] ,
5761 user_id : user1 . profile . user ,
5862} ;
63+ const initialComponents = project . components . map ( ( component ) => ( {
64+ name : component . name ,
65+ extension : component . extension ,
66+ content : component . content ,
67+ } ) ) ;
68+ const editedProject = {
69+ ...project ,
70+ components : [
71+ {
72+ ...project . components [ 0 ] ,
73+ content : "# hello edited" ,
74+ } ,
75+ ] ,
76+ } ;
77+
78+ beforeEach ( ( ) => {
79+ mockInitialComponents = initialComponents ;
80+ } ) ;
5981
6082afterEach ( ( ) => {
83+ mockInitialComponents = [ ] ;
6184 localStorage . clear ( ) ;
6285} ) ;
6386
6487describe ( "When not logged in" , ( ) => {
6588 describe ( "When just loaded" , ( ) => {
6689 beforeEach ( ( ) => {
67- renderHook ( ( ) => useProjectPersistence ( { user : null , justLoaded : true } ) ) ;
90+ renderHook ( ( ) =>
91+ useProjectPersistence ( {
92+ user : null ,
93+ project,
94+ justLoaded : true ,
95+ } ) ,
96+ ) ;
6897 jest . runAllTimers ( ) ;
6998 } ) ;
7099
71100 test ( "Expires justLoaded" , ( ) => {
72101 expect ( expireJustLoaded ) . toHaveBeenCalled ( ) ;
73102 } ) ;
103+
104+ test ( "Project not saved in localStorage" , ( ) => {
105+ expect ( localStorage . getItem ( "hello-world-project" ) ) . toBeNull ( ) ;
106+ } ) ;
74107 } ) ;
75108
76109 describe ( "When not just loaded" , ( ) => {
@@ -142,6 +175,33 @@ describe("When logged in", () => {
142175 test ( "Expires justLoaded" , ( ) => {
143176 expect ( expireJustLoaded ) . toHaveBeenCalled ( ) ;
144177 } ) ;
178+
179+ test ( "Project not saved in localStorage" , ( ) => {
180+ expect ( localStorage . getItem ( "hello-world-project" ) ) . toBeNull ( ) ;
181+ } ) ;
182+ } ) ;
183+
184+ describe ( "When just loaded and project has changed" , ( ) => {
185+ beforeEach ( ( ) => {
186+ renderHook ( ( ) =>
187+ useProjectPersistence ( {
188+ user : user2 ,
189+ project : editedProject ,
190+ justLoaded : true ,
191+ } ) ,
192+ ) ;
193+ jest . runAllTimers ( ) ;
194+ } ) ;
195+
196+ test ( "Expires justLoaded" , ( ) => {
197+ expect ( expireJustLoaded ) . toHaveBeenCalled ( ) ;
198+ } ) ;
199+
200+ test ( "Project saved in localStorage" , ( ) => {
201+ expect ( localStorage . getItem ( "hello-world-project" ) ) . toEqual (
202+ JSON . stringify ( editedProject ) ,
203+ ) ;
204+ } ) ;
145205 } ) ;
146206
147207 describe ( "When not just loaded" , ( ) => {
0 commit comments