1- import { describe , expect , test , beforeEach , afterEach , spyOn } from 'bun:test'
2- import { renderHook } from '@testing-library/react'
3- import { QueryClient , QueryClientProvider } from '@tanstack/react-query'
4- import React from 'react'
5- import { useNetworkStatus } from '../use-network-status'
1+ import { describe , expect , test , spyOn } from 'bun:test'
2+ import { useNetworkStatus , type NetworkStatus } from '../use-network-status'
63import * as useAuthQueryModule from '../use-auth-query'
74
85/**
@@ -60,7 +57,7 @@ describe('useNetworkStatus', () => {
6057 mockUseAuthQuery . mockRestore ( )
6158 } )
6259
63- test ( 'detects validation network errors ' , ( ) => {
60+ test ( 'reports validation degradation without marking offline ' , ( ) => {
6461 const mockAuthQuery = {
6562 error : null ,
6663 isError : false ,
@@ -75,10 +72,12 @@ describe('useNetworkStatus', () => {
7572 validationNetworkError : 'Failed to connect to validation API' ,
7673 } )
7774
78- expect ( result . isOnline ) . toBe ( false )
75+ expect ( result . isOnline ) . toBe ( true )
7976 expect ( result . error ) . not . toBeNull ( )
8077 expect ( result . error ?. source ) . toBe ( 'validation' )
8178 expect ( result . error ?. message ) . toBe ( 'Failed to connect to validation API' )
79+ expect ( result . validation . isReachable ) . toBe ( false )
80+ expect ( result . auth . isReachable ) . toBe ( true )
8281
8382 // Restore original
8483 mockUseAuthQuery . mockRestore ( )
@@ -137,44 +136,31 @@ describe('useNetworkStatus', () => {
137136 } )
138137
139138 describe ( 'type definitions' , ( ) => {
140- test ( 'NetworkStatus type is correctly defined' , ( ) => {
141- type NetworkStatus =
142- | { isOnline : true ; error : null }
143- | { isOnline : false ; error : { source : 'auth' | 'validation' | 'unknown' ; message : string } }
144-
145- const onlineStatus : NetworkStatus = {
139+ test ( 'NetworkStatus shape includes auth and validation fields' , ( ) => {
140+ const status : NetworkStatus = {
146141 isOnline : true ,
147142 error : null ,
143+ auth : { isReachable : true , error : null } ,
144+ validation : { isReachable : false , error : 'Validation unavailable' } ,
148145 }
149146
150- const offlineStatus : NetworkStatus = {
151- isOnline : false ,
152- error : {
153- source : 'auth' ,
154- message : 'Network error' ,
155- } ,
156- }
157-
158- expect ( onlineStatus . isOnline ) . toBe ( true )
159- expect ( onlineStatus . error ) . toBeNull ( )
160- expect ( offlineStatus . isOnline ) . toBe ( false )
161- expect ( offlineStatus . error . source ) . toBe ( 'auth' )
147+ expect ( status . isOnline ) . toBe ( true )
148+ expect ( status . error ) . toBeNull ( )
149+ expect ( status . auth . isReachable ) . toBe ( true )
150+ expect ( status . validation . isReachable ) . toBe ( false )
151+ expect ( status . validation . error ) . toBe ( 'Validation unavailable' )
162152 } )
163153
164154 test ( 'error sources are exhaustive' , ( ) => {
165- const sources = [ 'auth' , 'validation' , 'unknown' ]
166-
167- sources . forEach ( source => {
168- const status = {
169- isOnline : false ,
170- error : {
171- source : source as 'auth' | 'validation' | 'unknown' ,
172- message : 'Test error' ,
173- } ,
174- }
175-
176- expect ( [ 'auth' , 'validation' , 'unknown' ] ) . toContain ( status . error . source )
155+ const sources : Array < NetworkStatus [ 'error' ] > = [
156+ { source : 'auth' , message : 'Auth down' } ,
157+ { source : 'validation' , message : 'Validation down' } ,
158+ { source : 'unknown' , message : 'Unknown' } ,
159+ ]
160+
161+ sources . forEach ( ( error ) => {
162+ expect ( [ 'auth' , 'validation' , 'unknown' ] ) . toContain ( error ?. source )
177163 } )
178164 } )
179165 } )
180- } )
166+ } )
0 commit comments