@@ -29,7 +29,7 @@ import {
2929 useFlattenDevices as useProposalFlattenDevices ,
3030 useActions ,
3131} from "~/hooks/model/proposal/storage" ;
32- import { useIssues } from "~/hooks/model/issue" ;
32+ import * as issueHooks from "~/hooks/model/issue" ;
3333import { STORAGE } from "~/routes/paths" ;
3434import StorageSummary from "./StorageSummary" ;
3535
@@ -40,7 +40,8 @@ const mockUseDevicesFn: jest.Mock<ReturnType<typeof useDevices>> = jest.fn();
4040const mockUseProposalFlattenDevicesFn : jest . Mock < ReturnType < typeof useProposalFlattenDevices > > =
4141 jest . fn ( ) ;
4242const mockUseActionsFn : jest . Mock < ReturnType < typeof useActions > > = jest . fn ( ) ;
43- const mockUseIssuesFn : jest . Mock < ReturnType < typeof useIssues > > = jest . fn ( ) ;
43+ const mockStorageIssuesFn : jest . Mock < ReturnType < typeof issueHooks . useIssues > > = jest . fn ( ) ;
44+ const mockZFCPIssuesFn : jest . Mock < ReturnType < typeof issueHooks . useIssues > > = jest . fn ( ) ;
4445
4546// Mock all the hooks
4647jest . mock ( "~/hooks/model/storage/config-model" , ( ) => ( {
@@ -61,10 +62,11 @@ jest.mock("~/hooks/model/proposal/storage", () => ({
6162 useActions : ( ) => mockUseActionsFn ( ) ,
6263} ) ) ;
6364
64- jest . mock ( "~/hooks/model/issue" , ( ) => ( {
65- ...jest . requireActual ( "~/hooks/model/issue" ) ,
66- useIssues : ( ) => mockUseIssuesFn ( ) ,
67- } ) ) ;
65+ jest . spyOn ( issueHooks , "useIssues" ) . mockImplementation ( ( scope ) => {
66+ if ( scope === "storage" ) return mockStorageIssuesFn ( ) ;
67+ if ( scope === "zfcp" ) return mockZFCPIssuesFn ( ) ;
68+ return [ ] ;
69+ } ) ;
6870
6971// Mock device for tests
7072const mockDevice = {
@@ -99,7 +101,8 @@ describe("StorageSummary", () => {
99101 mockUseFlattenDevicesFn . mockReturnValue ( [ ] ) ;
100102 mockUseProposalFlattenDevicesFn . mockReturnValue ( [ ] ) ;
101103 mockUseActionsFn . mockReturnValue ( [ ] ) ;
102- mockUseIssuesFn . mockReturnValue ( [ ] ) ;
104+ mockStorageIssuesFn . mockReturnValue ( [ ] ) ;
105+ mockZFCPIssuesFn . mockReturnValue ( [ ] ) ;
103106 } ) ;
104107
105108 afterEach ( ( ) => {
@@ -170,26 +173,39 @@ describe("StorageSummary", () => {
170173 } ) ;
171174
172175 it ( "shows invalid settings warning when config issues exist" , ( ) => {
173- mockUseIssuesFn . mockReturnValue ( [
176+ mockStorageIssuesFn . mockReturnValue ( [
174177 {
175- description : "Fake Issue " ,
178+ description : "Fake issue " ,
176179 class : "generic" ,
177- details : "Fake Issue details" ,
180+ details : "Fake issue details" ,
178181 scope : "storage" ,
179182 } ,
180183 ] ) ;
181184 installerRender ( < StorageSummary /> ) ;
182185 screen . getByText ( "Invalid settings" ) ;
183186 } ) ;
184187
188+ it ( "shows invalid ZFCP settings warning when ZFCP issues exist" , ( ) => {
189+ mockZFCPIssuesFn . mockReturnValue ( [
190+ {
191+ description : "Fake issue" ,
192+ class : "generic" ,
193+ scope : "zfcp" ,
194+ } ,
195+ ] ) ;
196+ installerRender ( < StorageSummary /> ) ;
197+ screen . getByText ( / I n v a l i d / ) ;
198+ screen . getByText ( / z F C P / ) ;
199+ } ) ;
200+
185201 it ( "shows advanced configuration message when model is unavailable" , ( ) => {
186202 mockUseConfigModelFn . mockReturnValue ( null ) ;
187203 installerRender ( < StorageSummary /> ) ;
188204 screen . getByText ( "Using an advanced storage configuration" ) ;
189205 } ) ;
190206
191207 it ( "ignores proposal class issues when checking config validity" , ( ) => {
192- mockUseIssuesFn . mockReturnValue ( [
208+ mockStorageIssuesFn . mockReturnValue ( [
193209 {
194210 description : "Fake Issue" ,
195211 class : "proposal" ,
@@ -254,7 +270,7 @@ describe("StorageSummary", () => {
254270 } ) ;
255271
256272 it ( "hides description when config issues exist" , ( ) => {
257- mockUseIssuesFn . mockReturnValue ( [
273+ mockStorageIssuesFn . mockReturnValue ( [
258274 {
259275 description : "Fake Issue" ,
260276 class : "generic" ,
0 commit comments