Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
31 changes: 1 addition & 30 deletions plugins/plugin-tools/src/config.ts
Original file line number Diff line number Diff line change
@@ -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,
Expand All @@ -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 =>
Expand Down Expand Up @@ -158,27 +153,3 @@ export const container = ({

return undefined;
};

const JUNO_CONFIG_FILE: {filename: ConfigFilename} = {filename: 'juno.config'};

const readJunoConfig = async ({mode}: ConfigArgs): Promise<JunoConfig> => {
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<boolean> => junoConfigExistTools(JUNO_CONFIG_FILE);
32 changes: 32 additions & 0 deletions plugins/plugin-tools/src/fs.ts
Original file line number Diff line number Diff line change
@@ -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<JunoConfig> => {
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<boolean> => junoConfigExistTools(JUNO_CONFIG_FILE);
2 changes: 1 addition & 1 deletion plugins/plugin-tools/src/init.ts
Original file line number Diff line number Diff line change
@@ -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 (
Expand Down
27 changes: 1 addition & 26 deletions plugins/plugin-tools/src/tests/config.spec.ts
Original file line number Diff line number Diff line change
@@ -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,
Expand Down Expand Up @@ -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();
});
});
});
71 changes: 71 additions & 0 deletions plugins/plugin-tools/src/tests/fs.spec.ts
Original file line number Diff line number Diff line change
@@ -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<typeof import('@junobuild/config-loader')>(
'@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();
});
});
});