diff --git a/api/src/unraid-api/graph/resolvers/servers/server.service.spec.ts b/api/src/unraid-api/graph/resolvers/servers/server.service.spec.ts index f2f5e0807e..b24bcd2455 100644 --- a/api/src/unraid-api/graph/resolvers/servers/server.service.spec.ts +++ b/api/src/unraid-api/graph/resolvers/servers/server.service.spec.ts @@ -85,6 +85,7 @@ describe('ServerService', () => { vi.mocked(getters.emhttp).mockReturnValue({ var: { name: 'Tower', + mdState: 'STARTED', fsState: 'Started', }, } as any); @@ -99,6 +100,24 @@ describe('ServerService', () => { }); }); + it('allows name change when mdState is STOPPED even if fsState is not Stopped (internal boot)', async () => { + vi.mocked(getters.emhttp).mockReturnValue({ + var: { + name: 'Tower', + mdState: 'STOPPED', + fsState: 'Started', + regGuid: 'GUID-123', + port: '80', + comment: '', + }, + networks: [{ ipaddr: ['192.168.1.10'] }], + } as unknown as ReturnType); + + await expect(service.updateServerIdentity('NewTower', 'desc')).resolves.toMatchObject({ + name: 'NewTower', + }); + }); + it('calls emcmd with expected params and returns optimistic server', async () => { const result = await service.updateServerIdentity('Tower', 'Primary host'); diff --git a/api/src/unraid-api/graph/resolvers/servers/server.service.ts b/api/src/unraid-api/graph/resolvers/servers/server.service.ts index 47ea014ed9..561d865dca 100644 --- a/api/src/unraid-api/graph/resolvers/servers/server.service.ts +++ b/api/src/unraid-api/graph/resolvers/servers/server.service.ts @@ -4,6 +4,7 @@ import { GraphQLError } from 'graphql'; import { emcmd } from '@app/core/utils/clients/emcmd.js'; import { getters } from '@app/store/index.js'; +import { ArrayState } from '@app/unraid-api/graph/resolvers/array/array.model.js'; import { ProfileModel, Server, @@ -100,8 +101,10 @@ export class ServerService { } if (name !== currentName) { + const mdState = currentEmhttp.var?.mdState; const fsState = currentEmhttp.var?.fsState; - if (fsState !== 'Stopped') { + const arrayStopped = mdState === ArrayState.STOPPED || fsState === 'Stopped'; + if (!arrayStopped) { throw new GraphQLError('The array must be stopped to change the server name.'); } }