UNPKG

3.49 kBJavaScriptView Raw
1const ini = require('ini');
2const chalk = require('chalk');
3
4const helpers = require('.././helpers');
5
6const { NPMRC, NRMRC, REGISTRY } = require('.././constants');
7
8// ========== mock `fs` within helpers.js ==========
9
10let mockedFiles = Object.create(null);
11
12function writeFileSync(path, content) {
13 mockedFiles[path] = content;
14};
15
16jest.mock("fs", () => {
17 const originalModule = jest.requireActual('fs');
18
19 function readFileSync(path) {
20 return mockedFiles[path];
21 };
22
23 /* for jest scope, so same to above */
24 function writeFileSync(path, content) {
25 mockedFiles[path] = content;
26 };
27
28 function existsSync(path) {
29 return path in mockedFiles;
30 };
31
32 return {
33 ...originalModule,
34 existsSync: jest.fn(existsSync),
35 readFileSync: jest.fn(readFileSync),
36 writeFileSync: jest.fn(writeFileSync),
37 };
38});
39
40// ========== test cases ==========
41
42beforeEach(() => {
43 mockedFiles = Object.create(null);
44 mockedFiles[NPMRC] = '';
45 mockedFiles[NRMRC] = '';
46});
47
48it('geneDashLine', () => {
49 const result1 = helpers.geneDashLine('taobao', 10);
50 const result2 = helpers.geneDashLine('taobao', 1);
51 expect(result1).toBe(` ${chalk.dim('-----')} `);
52 expect(result2).toBe(` ${chalk.dim('-')} `);
53});
54
55it('getCurrentRegistry', async () => {
56 const registry = ' https://registry.npmjs.org/';
57 writeFileSync(NPMRC, ini.stringify({ [REGISTRY]: registry }));
58 const currentRegistry = await helpers.getCurrentRegistry();
59 expect(currentRegistry).toBe(registry);
60});
61
62it('getRegistries', async () => {
63 const name = 'fake name';
64 const registry = 'https://registry.example.com/';
65 writeFileSync(NRMRC, ini.stringify({ [name]: { registry } }));
66 const registries = await helpers.getRegistries();
67 expect(Object.keys(registries).includes(name)).toBe(true);
68});
69
70it('readFile', async () => {
71 const content = 'hello nrm';
72 writeFileSync(NRMRC, ini.stringify({ content: content }));
73 const result1 = await helpers.readFile(NRMRC);
74 const result2 = await helpers.readFile('file not exist');
75 expect(result1.content).toBe(content);
76 expect(result2).toEqual(Object.create(null));
77});
78
79it('writeFile', async () => {
80 const content = { nrm: 'nrm is great' };
81 await helpers.writeFile(NRMRC, { content });
82 const result = await helpers.readFile(NRMRC);
83 expect(result.content).toEqual(content);
84});
85
86test('isLowerCaseEqual', () => {
87 const result1 = helpers.isLowerCaseEqual('taobao', 'TAOBAO');
88 const result2 = helpers.isLowerCaseEqual('jd', 'tb');
89 const result3 = helpers.isLowerCaseEqual('taobao', '');
90 const result4 = helpers.isLowerCaseEqual('', '');
91 expect(result1).toBe(true);
92 expect(result2).toBe(false);
93 expect(result3).toBe(false);
94 expect(result4).toBe(true);
95});
96
97it('isRegistryNotFound', async () => {
98 const unknown = 'unknown';
99 const name = 'custom name';
100 const registry = 'https://registry.example.com/';
101 writeFileSync(NRMRC, ini.stringify({ [name]: registry }));
102 const result1 = await helpers.isRegistryNotFound(unknown, false);
103 const result2 = await helpers.isRegistryNotFound(name, false);
104 expect(result1).toBe(true);
105 expect(result2).toBe(false);
106});
107
108it('isInternalRegistry', async () => {
109 const name = 'custom name';
110 const registry = 'https://registry.example.com/';
111 writeFileSync(NRMRC, ini.stringify({ [name]: registry }));
112 const result1 = await helpers.isInternalRegistry(name);
113 const result2 = await helpers.isInternalRegistry('npm');
114 expect(result1).toBe(false);
115 expect(result2).toBe(true);
116});