diff --git a/plugins/plugin-tools/src/config.ts b/plugins/plugin-tools/src/config.ts index aaa5bea..20d7ff5 100644 --- a/plugins/plugin-tools/src/config.ts +++ b/plugins/plugin-tools/src/config.ts @@ -1,9 +1,3 @@ -import type {JunoConfig, JunoConfigFnOrObject} from '@junobuild/config'; -import { - junoConfigExist as junoConfigExistTools, - readJunoConfig as readJunoConfigTools, - type ConfigFilename -} from '@junobuild/config-loader'; import { CMC_ID, CYCLES_INDEX_ID, @@ -20,6 +14,7 @@ import { SNS_WASM_ID } from './constants'; import {JunoPluginError} from './error'; +import {assertJunoConfig, junoConfigExist, readJunoConfig} from './fs'; import type {ConfigArgs, IcpIds, JunoParams} from './types'; export const useDockerContainer = ({params, mode}: ConfigArgs): boolean => @@ -158,27 +153,3 @@ export const container = ({ return undefined; }; - -const JUNO_CONFIG_FILE: {filename: ConfigFilename} = {filename: 'juno.config'}; - -const readJunoConfig = async ({mode}: ConfigArgs): Promise => { - const config = (userConfig: JunoConfigFnOrObject): JunoConfig => - typeof userConfig === 'function' ? userConfig({mode}) : userConfig; - - return await readJunoConfigTools({ - ...JUNO_CONFIG_FILE, - config - }); -}; - -export const assertJunoConfig = async () => { - const exist = await junoConfigExist(); - - if (!exist) { - throw new JunoPluginError( - `No Juno configuration found. Run "juno init" to configure your dapp.` - ); - } -}; - -const junoConfigExist = (): Promise => junoConfigExistTools(JUNO_CONFIG_FILE); diff --git a/plugins/plugin-tools/src/fs.ts b/plugins/plugin-tools/src/fs.ts new file mode 100644 index 0000000..d5560a0 --- /dev/null +++ b/plugins/plugin-tools/src/fs.ts @@ -0,0 +1,32 @@ +import type {JunoConfig, JunoConfigFnOrObject} from '@junobuild/config'; +import { + junoConfigExist as junoConfigExistTools, + readJunoConfig as readJunoConfigTools, + type ConfigFilename +} from '@junobuild/config-loader'; +import {JunoPluginError} from './error'; +import type {ConfigArgs} from './types'; + +const JUNO_CONFIG_FILE: {filename: ConfigFilename} = {filename: 'juno.config'}; + +export const readJunoConfig = async ({mode}: ConfigArgs): Promise => { + const config = (userConfig: JunoConfigFnOrObject): JunoConfig => + typeof userConfig === 'function' ? userConfig({mode}) : userConfig; + + return await readJunoConfigTools({ + ...JUNO_CONFIG_FILE, + config + }); +}; + +export const assertJunoConfig = async () => { + const exist = await junoConfigExist(); + + if (!exist) { + throw new JunoPluginError( + `No Juno configuration found. Run "juno init" to configure your dapp.` + ); + } +}; + +export const junoConfigExist = (): Promise => junoConfigExistTools(JUNO_CONFIG_FILE); diff --git a/plugins/plugin-tools/src/init.ts b/plugins/plugin-tools/src/init.ts index 15eab58..e3cdf1d 100644 --- a/plugins/plugin-tools/src/init.ts +++ b/plugins/plugin-tools/src/init.ts @@ -1,11 +1,11 @@ import { - assertJunoConfig, container as containerConfig, icpIds as icpIdsConfig, orbiterId as orbiterIdConfig, satelliteId as satelliteIdConfig, useDockerContainer } from './config'; +import {assertJunoConfig} from './fs'; import type {ConfigArgs, IcpIds} from './types'; export const initConfig = async ( diff --git a/plugins/plugin-tools/src/tests/config.spec.ts b/plugins/plugin-tools/src/tests/config.spec.ts index 2beb211..74b162f 100644 --- a/plugins/plugin-tools/src/tests/config.spec.ts +++ b/plugins/plugin-tools/src/tests/config.spec.ts @@ -1,14 +1,7 @@ import type {JunoConfig} from '@junobuild/config'; import * as configLoader from '@junobuild/config-loader'; -import { - assertJunoConfig, - container, - icpIds, - orbiterId, - satelliteId, - useDockerContainer -} from '../config'; +import {container, icpIds, orbiterId, satelliteId, useDockerContainer} from '../config'; import { CMC_ID, CYCLES_INDEX_ID, @@ -413,22 +406,4 @@ describe('config', () => { expect(url).toBeUndefined(); }); }); - - describe('assertJunoConfig', () => { - beforeEach(() => { - vi.clearAllMocks(); - }); - - it('throws if config does not exist', async () => { - vi.spyOn(configLoader, 'junoConfigExist').mockResolvedValue(false); - - await expect(assertJunoConfig()).rejects.toThrow(JunoPluginError); - }); - - it('resolves if config exists', async () => { - vi.spyOn(configLoader, 'junoConfigExist').mockResolvedValue(true); - - await expect(assertJunoConfig()).resolves.toBeUndefined(); - }); - }); }); diff --git a/plugins/plugin-tools/src/tests/fs.spec.ts b/plugins/plugin-tools/src/tests/fs.spec.ts new file mode 100644 index 0000000..51bc905 --- /dev/null +++ b/plugins/plugin-tools/src/tests/fs.spec.ts @@ -0,0 +1,71 @@ +import * as configLoader from '@junobuild/config-loader'; +import {JunoPluginError} from '../error'; +import {assertJunoConfig, junoConfigExist, readJunoConfig} from '../fs'; + +vi.mock('@junobuild/config-loader', async () => { + // eslint-disable-next-line @typescript-eslint/consistent-type-imports + const actual = await vi.importActual( + '@junobuild/config-loader' + ); + + return { + ...actual, + junoConfigExist: vi.fn(), + readJunoConfig: vi.fn() + }; +}); + +describe('fs', () => { + beforeEach(() => { + vi.resetAllMocks(); + vi.clearAllMocks(); + }); + + describe('readJunoConfig', () => { + it('throws if config does not exist', async () => { + vi.spyOn(configLoader, 'readJunoConfig').mockRejectedValueOnce(new Error()); + + await expect(assertJunoConfig()).rejects.toThrow(); + }); + + it('resolves if config exists', async () => { + const mockConfig = { + satellite: {ids: {development: 'dev-custom-id'}} + }; + + vi.spyOn(configLoader, 'readJunoConfig').mockResolvedValue(mockConfig); + + const result = await readJunoConfig({mode: 'development'}); + + expect(result).toEqual(mockConfig); + }); + }); + + describe('assertJunoConfig', () => { + it('throws if config does not exist', async () => { + vi.spyOn(configLoader, 'junoConfigExist').mockResolvedValue(false); + + await expect(assertJunoConfig()).rejects.toThrow(JunoPluginError); + }); + + it('resolves if config exists', async () => { + vi.spyOn(configLoader, 'junoConfigExist').mockResolvedValue(true); + + await expect(assertJunoConfig()).resolves.toBeUndefined(); + }); + }); + + describe('junoConfigExist', () => { + it('resolves false if config not exist', async () => { + vi.spyOn(configLoader, 'junoConfigExist').mockResolvedValue(false); + + await expect(junoConfigExist()).resolves.toBeFalsy(); + }); + + it('resolves true if config exists', async () => { + vi.spyOn(configLoader, 'junoConfigExist').mockResolvedValue(true); + + await expect(junoConfigExist()).resolves.toBeTruthy(); + }); + }); +});