Skip to content

Commit 599404d

Browse files
feat: make local development the default (#15)
* feat: make local development the default * test: dev container * test: add some test for default value
1 parent 098e68b commit 599404d

File tree

3 files changed

+126
-58
lines changed

3 files changed

+126
-58
lines changed

plugins/plugin-tools/src/config.spec.ts

+33
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,39 @@ describe('config', () => {
7575
})
7676
).toBe(true);
7777
});
78+
79+
it('returns true if container is undefined and mode is development', () => {
80+
expect(useDockerContainer({params: {}, mode: 'development'})).toBe(true);
81+
});
82+
83+
it('returns false if container is undefined and mode is production', () => {
84+
expect(useDockerContainer({params: {}, mode: 'production'})).toBe(false);
85+
});
86+
87+
it('returns true if params is undefined and mode is development', () => {
88+
expect(useDockerContainer({params: undefined, mode: 'development'})).toBe(true);
89+
});
90+
91+
it('returns false if params is undefined and mode is production', () => {
92+
expect(useDockerContainer({params: undefined, mode: 'production'})).toBe(false);
93+
});
94+
95+
it('returns true if container is an empty object and mode is development', () => {
96+
expect(useDockerContainer({params: {container: {}}, mode: 'development'})).toBe(true);
97+
});
98+
99+
it('returns false if container has empty modes[]', () => {
100+
expect(
101+
useDockerContainer({
102+
params: {
103+
container: {
104+
modes: []
105+
}
106+
},
107+
mode: 'development'
108+
})
109+
).toBe(false);
110+
});
78111
});
79112

80113
describe('satelliteId', () => {

plugins/plugin-tools/src/config.ts

+1-2
Original file line numberDiff line numberDiff line change
@@ -15,9 +15,8 @@ import {JunoPluginError} from './error';
1515
import type {ConfigArgs, IcpIds, JunoParams} from './types';
1616

1717
export const useDockerContainer = ({params, mode}: ConfigArgs): boolean =>
18-
params?.container !== undefined &&
1918
params?.container !== false &&
20-
(params?.container === true
19+
(params?.container === undefined || params?.container === true
2120
? mode === 'development'
2221
: (params?.container?.modes ?? ['development']).includes(mode));
2322

plugins/plugin-tools/src/init.spec.ts

+92-56
Original file line numberDiff line numberDiff line change
@@ -17,78 +17,114 @@ vi.mock('@junobuild/config-loader', async () => {
1717
});
1818

1919
describe('init', () => {
20-
describe('initConfig (with config-loader mocks)', () => {
21-
const args: ConfigArgs = {
20+
const args: ConfigArgs = {
21+
params: {},
22+
mode: 'production'
23+
};
24+
25+
let spyJunoConfigExist: MockInstance;
26+
let spyReadJunoConfig: MockInstance;
27+
28+
beforeEach(() => {
29+
vi.clearAllMocks();
30+
31+
spyJunoConfigExist = vi.spyOn(configLoader, 'junoConfigExist').mockResolvedValue(true);
32+
spyReadJunoConfig = vi.spyOn(configLoader, 'readJunoConfig').mockResolvedValue({
33+
satellite: {ids: {production: 'mock-satellite-id'}},
34+
orbiter: {id: 'mock-orbiter-id'}
35+
});
36+
});
37+
38+
it('returns config for development', async () => {
39+
const result = await initConfig({
2240
params: {},
2341
mode: 'development'
24-
};
42+
});
2543

26-
let spyJunoConfigExist: MockInstance;
27-
let spyReadJunoConfig: MockInstance;
44+
expect(result).toEqual({
45+
orbiterId: undefined,
46+
satelliteId: 'jx5yt-yyaaa-aaaal-abzbq-cai',
47+
icpIds: {
48+
internetIdentityId: 'rdmx6-jaaaa-aaaaa-aaadq-cai',
49+
icpLedgerId: 'ryjl3-tyaaa-aaaaa-aaaba-cai',
50+
icpIndexId: 'qhbym-qaaaa-aaaaa-aaafq-cai'
51+
},
52+
container: 'http://127.0.0.1:5987'
53+
});
2854

29-
beforeEach(() => {
30-
vi.clearAllMocks();
55+
expect(spyJunoConfigExist).not.toHaveBeenCalled();
56+
expect(spyReadJunoConfig).not.toHaveBeenCalled();
57+
});
3158

32-
spyJunoConfigExist = vi.spyOn(configLoader, 'junoConfigExist').mockResolvedValue(true);
33-
spyReadJunoConfig = vi.spyOn(configLoader, 'readJunoConfig').mockResolvedValue({
34-
satellite: {ids: {development: 'mock-satellite-id'}},
35-
orbiter: {id: 'mock-orbiter-id'}
36-
});
59+
it('returns config without container for production', async () => {
60+
const result = await initConfig(args);
61+
62+
expect(result).toEqual({
63+
satelliteId: 'mock-satellite-id',
64+
orbiterId: 'mock-orbiter-id',
65+
icpIds: {
66+
internetIdentityId: 'rdmx6-jaaaa-aaaaa-aaadq-cai',
67+
icpLedgerId: 'ryjl3-tyaaa-aaaaa-aaaba-cai',
68+
icpIndexId: 'qhbym-qaaaa-aaaaa-aaafq-cai'
69+
},
70+
container: undefined
3771
});
3872

39-
it('returns config when not using Docker container', async () => {
40-
const result = await initConfig(args);
73+
expect(spyJunoConfigExist).toHaveBeenCalled();
74+
expect(spyReadJunoConfig).toHaveBeenCalled();
75+
});
4176

42-
expect(result).toEqual({
43-
satelliteId: 'mock-satellite-id',
44-
orbiterId: 'mock-orbiter-id',
45-
icpIds: {
46-
internetIdentityId: 'rdmx6-jaaaa-aaaaa-aaadq-cai',
47-
icpLedgerId: 'ryjl3-tyaaa-aaaaa-aaaba-cai',
48-
icpIndexId: 'qhbym-qaaaa-aaaaa-aaafq-cai'
49-
},
50-
container: undefined
51-
});
77+
it('skips assertJunoConfig when using Docker container', async () => {
78+
const dockerArgs: ConfigArgs = {
79+
params: {container: true},
80+
mode: 'development'
81+
};
5282

53-
expect(spyJunoConfigExist).toHaveBeenCalled();
54-
expect(spyReadJunoConfig).toHaveBeenCalled();
83+
const result = await initConfig(dockerArgs);
84+
85+
expect(result).toEqual({
86+
satelliteId: 'jx5yt-yyaaa-aaaal-abzbq-cai', // fallback to docker const
87+
orbiterId: undefined,
88+
icpIds: {
89+
internetIdentityId: 'rdmx6-jaaaa-aaaaa-aaadq-cai',
90+
icpLedgerId: 'ryjl3-tyaaa-aaaaa-aaaba-cai',
91+
icpIndexId: 'qhbym-qaaaa-aaaaa-aaafq-cai'
92+
},
93+
container: 'http://127.0.0.1:5987'
5594
});
5695

57-
it('skips assertJunoConfig when using Docker container', async () => {
58-
const dockerArgs: ConfigArgs = {
59-
params: {container: true},
60-
mode: 'development'
61-
};
62-
63-
const result = await initConfig(dockerArgs);
96+
expect(spyJunoConfigExist).not.toHaveBeenCalled();
97+
expect(spyReadJunoConfig).not.toHaveBeenCalled();
98+
});
6499

65-
expect(result).toEqual({
66-
satelliteId: 'jx5yt-yyaaa-aaaal-abzbq-cai', // fallback to docker const
67-
orbiterId: undefined,
68-
icpIds: {
69-
internetIdentityId: 'rdmx6-jaaaa-aaaaa-aaadq-cai',
70-
icpLedgerId: 'ryjl3-tyaaa-aaaaa-aaaba-cai',
71-
icpIndexId: 'qhbym-qaaaa-aaaaa-aaafq-cai'
72-
},
73-
container: 'http://127.0.0.1:5987'
74-
});
100+
it('throws if config does not exist and mode is production', async () => {
101+
vi.spyOn(configLoader, 'junoConfigExist').mockResolvedValue(false);
75102

76-
expect(spyJunoConfigExist).not.toHaveBeenCalled();
77-
expect(spyReadJunoConfig).not.toHaveBeenCalled();
78-
});
103+
await expect(initConfig(args)).rejects.toThrow(/No Juno configuration found/);
104+
});
79105

80-
it('throws if config does not exist', async () => {
81-
vi.spyOn(configLoader, 'junoConfigExist').mockResolvedValue(false);
106+
it('throws if satelliteId is missing in config if container is set to false', async () => {
107+
vi.spyOn(configLoader, 'readJunoConfig').mockResolvedValueOnce({
108+
satellite: {}
109+
} as unknown as JunoConfig);
82110

83-
await expect(initConfig(args)).rejects.toThrow(/No Juno configuration found/);
84-
});
111+
await expect(
112+
initConfig({
113+
params: {
114+
container: false
115+
},
116+
mode: 'development'
117+
})
118+
).rejects.toThrow(/A satellite ID for development must be set/);
119+
});
85120

86-
it('throws if satelliteId is missing in config', async () => {
87-
vi.spyOn(configLoader, 'readJunoConfig').mockResolvedValueOnce({
88-
satellite: {}
89-
} as unknown as JunoConfig);
121+
it('throws if satelliteId is missing in config', async () => {
122+
vi.spyOn(configLoader, 'readJunoConfig').mockResolvedValueOnce({
123+
satellite: {}
124+
} as unknown as JunoConfig);
90125

91-
await expect(initConfig(args)).rejects.toThrow(/A satellite ID for development must be set/);
92-
});
126+
await expect(initConfig(args)).rejects.toThrow(
127+
/Your configuration is invalid. A satellite ID for production must be set in your configuration file./
128+
);
93129
});
94130
});

0 commit comments

Comments
 (0)