diff --git a/plugins/plugin-tools/src/config.spec.ts b/plugins/plugin-tools/src/config.spec.ts index 0adffa5..c570240 100644 --- a/plugins/plugin-tools/src/config.spec.ts +++ b/plugins/plugin-tools/src/config.spec.ts @@ -189,6 +189,17 @@ describe('config', () => { JunoPluginError ); }); + + it('throws if config is undefined in satelliteId', async () => { + vi.spyOn(configLoader, 'junoConfigExist').mockResolvedValue(true); + vi.spyOn(configLoader, 'readJunoConfig').mockResolvedValue( + undefined as unknown as JunoConfig + ); + + await expect(() => satelliteId({params: {}, mode: 'production'})).rejects.toThrow( + /No configuration exported/ + ); + }); }); }); diff --git a/plugins/plugin-tools/src/config.ts b/plugins/plugin-tools/src/config.ts index 2214146..0392741 100644 --- a/plugins/plugin-tools/src/config.ts +++ b/plugins/plugin-tools/src/config.ts @@ -34,6 +34,12 @@ export const satelliteId = async (args: ConfigArgs): Promise => { const junoConfigSatelliteId = async ({mode}: ConfigArgs): Promise => { await assertJunoConfig(); + const config = await readJunoConfig({mode}); + + if (config === undefined || !('satellite' in config)) { + throw new JunoPluginError(`No configuration exported for ${mode}.`); + } + const { satellite: {ids, satelliteId: deprecatedSatelliteId, id} } = await readJunoConfig({mode}); @@ -62,9 +68,15 @@ const containerSatelliteId = async ({mode}: ConfigArgs): Promise => { return DOCKER_SATELLITE_ID; } + const config = await readJunoConfig({mode}); + + if (config == undefined || !('satellite' in config)) { + return DOCKER_SATELLITE_ID; + } + const { satellite: {ids} - } = await readJunoConfig({mode}); + } = config; return ids?.[MODE_DEVELOPMENT] ?? DOCKER_SATELLITE_ID; }; diff --git a/plugins/plugin-tools/src/init.spec.ts b/plugins/plugin-tools/src/init.spec.ts index b211dc1..60816f6 100644 --- a/plugins/plugin-tools/src/init.spec.ts +++ b/plugins/plugin-tools/src/init.spec.ts @@ -206,12 +206,19 @@ describe('init', () => { }); it('throws if satelliteId is missing in config in production', async () => { - vi.spyOn(configLoader, 'readJunoConfig').mockResolvedValueOnce({ - satellite: {} - } as unknown as JunoConfig); + vi.spyOn(configLoader, 'readJunoConfig').mockImplementation( + // eslint-disable-next-line require-await + async () => ({satellite: {}}) as unknown as JunoConfig + ); await expect(initConfig(args)).rejects.toThrow( 'Your project needs a Satellite for production. Create one at https://console.juno.build and set its ID in your configuration file.' ); }); + + it('throws if readJunoConfig returns undefined', async () => { + vi.spyOn(configLoader, 'readJunoConfig').mockResolvedValue(undefined as unknown as JunoConfig); + + await expect(initConfig(args)).rejects.toThrow('No configuration exported for production.'); + }); });