@@ -4,8 +4,10 @@ import { Provider } from "react-redux";
44import configureStore from "redux-mock-store" ;
55import { MemoryRouter } from "react-router-dom" ;
66import ProjectBar from "./ProjectBar" ;
7+ import useIsOnline from "../../hooks/useIsOnline" ;
78
89jest . mock ( "axios" ) ;
10+ jest . mock ( "../../hooks/useIsOnline" ) ;
911
1012jest . mock ( "react-router-dom" , ( ) => ( {
1113 ...jest . requireActual ( "react-router-dom" ) ,
@@ -27,6 +29,10 @@ const user = {
2729 } ,
2830} ;
2931
32+ beforeEach ( ( ) => {
33+ useIsOnline . mockReturnValue ( true ) ;
34+ } ) ;
35+
3036const renderProjectBar = ( state ) => {
3137 const middlewares = [ ] ;
3238 const mockStore = configureStore ( middlewares ) ;
@@ -184,6 +190,45 @@ describe("When no project loaded", () => {
184190 } ) ;
185191} ) ;
186192
193+ describe ( "offline badge" , ( ) => {
194+ beforeEach ( ( ) => {
195+ useIsOnline . mockReturnValue ( false ) ;
196+ } ) ;
197+
198+ test ( "shows offline badge for project owner when offline" , ( ) => {
199+ renderProjectBar ( {
200+ editor : { project, offlineEnabled : true , lastSavedTime : Date . now ( ) } ,
201+ auth : { user } ,
202+ } ) ;
203+ expect ( screen . queryByText ( "header.offline" ) ) . toBeInTheDocument ( ) ;
204+ } ) ;
205+
206+ test ( "shows offline badge for project owner on fresh load with no save history" , ( ) => {
207+ renderProjectBar ( {
208+ editor : { project, offlineEnabled : true } ,
209+ auth : { user } ,
210+ } ) ;
211+ expect ( screen . queryByText ( "header.offline" ) ) . toBeInTheDocument ( ) ;
212+ } ) ;
213+
214+ test ( "does not show a second offline badge for non-owners (SaveButton handles it)" , ( ) => {
215+ const nonOwner = { ...user , profile : { user : "someone-else" } } ;
216+ renderProjectBar ( {
217+ editor : { project, offlineEnabled : true , lastSavedTime : Date . now ( ) } ,
218+ auth : { user : nonOwner } ,
219+ } ) ;
220+ expect ( screen . queryAllByText ( "header.offline" ) ) . toHaveLength ( 1 ) ;
221+ } ) ;
222+
223+ test ( "does not show offline badge when offlineEnabled is false" , ( ) => {
224+ renderProjectBar ( {
225+ editor : { project, offlineEnabled : false } ,
226+ auth : { user } ,
227+ } ) ;
228+ expect ( screen . queryByText ( "header.offline" ) ) . not . toBeInTheDocument ( ) ;
229+ } ) ;
230+ } ) ;
231+
187232describe ( "When read only" , ( ) => {
188233 beforeEach ( ( ) => {
189234 renderProjectBar ( {
0 commit comments