ianalyzer-test-app
Version:
A versatile code analysis tool for JavaScript, HTML, CSS, Angular, React, Vue, and ES6. iAnalyzer ensures code quality through linting, integrates with Sonar for in-depth analysis, performs npm package security checks, assesses performance, and enhances a
246 lines (222 loc) • 12.3 kB
JavaScript
const iAnalyzer = require('../bin/ianalyzer-config');
const fs = require('fs');
const utils = require('../bin/utils');
jest.mock('fs');
jest.mock('npm');
jest.mock('path');
jest.mock('../bin/utils');
let rl = {
question: jest.fn()
.mockImplementationOnce((questionText, cb) => { cb('Y') })
.mockImplementationOnce((questionText, cb) => { cb('N') })
.mockImplementationOnce((questionText, cb) => { cb('INVALID') })
.mockImplementationOnce((questionText, cb) => { cb('fileName') })
.mockImplementationOnce((questionText, cb) => { cb('fileName2') })
};
describe('iAnalyzer Config Test', () => {
describe('iAnalyzer Config Install Test', () => {
test('should install if projectType is Y', () => {
utils.installPackages.mockResolvedValue(true);
utils.createFileBackup.mockResolvedValue(true);
utils.addConfigFile.mockResolvedValue(true);
utils.addScriptPackageJSON.mockResolvedValue(true);
utils.createNewDirectory.mockResolvedValue(true);
expect(iAnalyzer.configureLinter(rl, 'init')).toBeTruthy();
});
test('should install if projectType is N', () => {
utils.installPackages.mockResolvedValue(true);
utils.createFileBackup.mockResolvedValue(true);
utils.addConfigFile.mockResolvedValue(true);
utils.addScriptPackageJSON.mockResolvedValue(true);
utils.createNewDirectory.mockResolvedValue(true);
expect(iAnalyzer.configureLinter(rl, 'init')).toBeTruthy();
});
test('should not install for invalid option', () => {
jest.spyOn(process, 'kill').mockImplementation(() => { return Promise.resolve(true) });
expect(iAnalyzer.configureLinter(rl, 'init')).toBeTruthy();
});
});
describe('iAnalyzer Config Uninstall Test', () => {
test('should uninstall if no file exist', () => {
fs.existsSync.mockReturnValue(false);
utils.isPackageInstalled.mockResolvedValueOnce(true).mockResolvedValue(false);
utils.uninstallPackages.mockResolvedValue(true);
utils.removeScriptPackageJSON.mockResolvedValue(true);
expect(iAnalyzer.configureLinter(rl, 'remove')).toBeTruthy();
});
test('should uninstall if .eslintrc and .eslintrc-old file exist', () => {
fs.existsSync.mockReturnValue(true);
utils.isPackageInstalled.mockResolvedValueOnce(true).mockResolvedValue(false);
utils.uninstallPackages.mockResolvedValue(true);
utils.removeScriptPackageJSON.mockResolvedValue(true);
fs.unlink.mockImplementationOnce((filename, callback) => {
callback(null);
});
fs.copyFile.mockImplementationOnce((filename, newFileName, callback) => {
callback(null);
});
expect(iAnalyzer.configureLinter(rl, 'remove')).toBeTruthy();
});
test('should uninstall if .eslintrc file exist and .eslintrc-old file not exist', () => {
fs.existsSync.mockReturnValueOnce(true).mockReturnValue(false);
utils.isPackageInstalled.mockResolvedValueOnce(true).mockResolvedValue(false);
utils.uninstallPackages.mockResolvedValue(true);
utils.removeScriptPackageJSON.mockResolvedValue(true);
fs.unlink.mockImplementationOnce((filename, callback) => {
callback(null);
});
expect(iAnalyzer.configureLinter(rl, 'remove')).toBeTruthy();
});
test('should throw error if error while copy from .eslintrc-old', () => {
fs.existsSync.mockReturnValue(true);
utils.isPackageInstalled.mockResolvedValueOnce(true).mockResolvedValue(false);
utils.uninstallPackages.mockResolvedValue(true);
utils.removeScriptPackageJSON.mockResolvedValue(true);
fs.unlink.mockImplementationOnce((filename, callback) => {
callback(null);
});
fs.copyFile.mockImplementationOnce((filename, newFileName, callback) => {
callback(new Error());
});
expect(iAnalyzer.configureLinter(rl, 'remove')).toBeTruthy();
});
test('should throw error while deleting file .eslintrc', () => {
fs.existsSync.mockReturnValue(true);
utils.isPackageInstalled.mockResolvedValueOnce(true).mockResolvedValue(false);
utils.uninstallPackages.mockResolvedValue(true);
utils.removeScriptPackageJSON.mockResolvedValue(true);
fs.unlink.mockImplementationOnce((filename, callback) => {
callback(new Error());
});
expect(iAnalyzer.configureLinter(rl, 'remove')).toBeTruthy();
});
test('should uninstall if .eslintrc.js and .eslintrc-old file exist', () => {
fs.existsSync.mockReturnValueOnce(false).mockReturnValue(true);
utils.isPackageInstalled.mockResolvedValueOnce(false).mockResolvedValue(true);
utils.uninstallPackages.mockResolvedValue(true);
utils.removeScriptPackageJSON.mockResolvedValue(true);
fs.unlink.mockImplementationOnce((filename, callback) => {
callback(null);
});
fs.copyFile.mockImplementationOnce((filename, newFileName, callback) => {
callback(null);
});
expect(iAnalyzer.configureLinter(rl, 'remove')).toBeTruthy();
});
test('should uninstall if .eslintrc file exist and .eslintrc-old file not exist', () => {
fs.existsSync.mockReturnValueOnce(false).mockReturnValueOnce(true).mockReturnValue(false);
utils.isPackageInstalled.mockResolvedValueOnce(false).mockResolvedValue(true);
utils.uninstallPackages.mockResolvedValue(true);
utils.removeScriptPackageJSON.mockResolvedValue(true);
fs.unlink.mockImplementationOnce((filename, callback) => {
callback(null);
});
expect(iAnalyzer.configureLinter(rl, 'remove')).toBeTruthy();
});
test('should throw error if error while copy from .eslintrc-old', () => {
fs.existsSync.mockReturnValueOnce(false).mockReturnValue(true);
utils.isPackageInstalled.mockResolvedValueOnce(false).mockResolvedValue(true);
utils.uninstallPackages.mockResolvedValue(true);
utils.removeScriptPackageJSON.mockResolvedValue(true);
fs.unlink.mockImplementationOnce((filename, callback) => {
callback(null);
});
fs.copyFile.mockImplementationOnce((filename, newFileName, callback) => {
callback(new Error());
});
expect(iAnalyzer.configureLinter(rl, 'remove')).toBeTruthy();
});
test('should throw error while deleting file .eslintrc', () => {
fs.existsSync.mockReturnValueOnce(false).mockReturnValue(true);
utils.isPackageInstalled.mockResolvedValue(false);
utils.uninstallPackages.mockResolvedValue(true);
utils.removeScriptPackageJSON.mockResolvedValue(true);
fs.unlink.mockImplementationOnce((filename, callback) => {
callback(new Error());
});
expect(iAnalyzer.configureLinter(rl, 'remove')).toBeTruthy();
});
});
describe('iAnalyzer Run Category Script Test', () => {
test('should run category script for amber and .eslintrc file', () => {
utils.isPackageInstalled.mockResolvedValueOnce(true).mockResolvedValue(false);
fs.existsSync.mockReturnValue(true);
let rawData = '{}';
fs.readFileSync.mockReturnValue(rawData);
utils.extendValueIneslint.mockResolvedValue({});
fs.writeFileSync.mockReturnValue(true);
expect(iAnalyzer.runCategoryScript(rl, 'amber', 0, 1)).toBeTruthy();
});
test('should run category script for amber and .eslintrc.js file', () => {
utils.isPackageInstalled.mockResolvedValueOnce(true).mockResolvedValue(false);
fs.existsSync.mockReturnValueOnce(false).mockReturnValue(true);
let rawData = '{}';
fs.readFileSync.mockReturnValue(rawData);
utils.extendValueIneslint.mockResolvedValue({});
fs.writeFileSync.mockReturnValue(true);
expect(iAnalyzer.runCategoryScript(rl, 'amber', 0, 1)).toBeTruthy();
});
test('should run category script if .eslintrc file not found', () => {
utils.isPackageInstalled.mockResolvedValueOnce(true).mockResolvedValue(false);
fs.existsSync.mockReturnValue(false);
let rawData = '{}';
fs.readFileSync.mockReturnValue(rawData);
utils.extendValueIneslint.mockResolvedValue({});
fs.writeFileSync.mockReturnValue(true);
expect(iAnalyzer.runCategoryScript(rl, 'amber', 0, 1)).toBeTruthy();
});
test('should run category script if error while writing data in file', () => {
utils.isPackageInstalled.mockResolvedValueOnce(true).mockResolvedValue(false);
fs.existsSync.mockReturnValue(true);
let rawData = '{}';
fs.readFileSync.mockReturnValue(rawData);
utils.extendValueIneslint.mockResolvedValue({});
fs.writeFileSync.mockImplementation(() => {
throw new Error();
});
expect(iAnalyzer.runCategoryScript(rl, 'amber', 0, 1)).toBeTruthy();
});
test('should run category script for green', () => {
utils.isPackageInstalled.mockResolvedValueOnce(true).mockResolvedValue(false);
fs.existsSync.mockReturnValue(false);
let rawData = '{}';
fs.readFileSync.mockReturnValue(rawData);
utils.extendValueIneslint.mockResolvedValue({});
fs.writeFileSync.mockReturnValue(true);
expect(iAnalyzer.runCategoryScript(rl, 'green', 0, 1)).toBeTruthy();
});
test('should run category script for red', () => {
utils.isPackageInstalled.mockResolvedValueOnce(false).mockResolvedValue(true);
fs.existsSync.mockReturnValue(false);
let rawData = '{}';
fs.readFileSync.mockReturnValue(rawData);
utils.extendValueIneslint.mockResolvedValue({});
fs.writeFileSync.mockReturnValue(true);
expect(iAnalyzer.runCategoryScript(rl, 'red', 0, 1)).toBeTruthy();
});
test('should run category script for custom', () => {
utils.isPackageInstalled.mockResolvedValueOnce(true).mockResolvedValue(false);
fs.existsSync.mockReturnValue(false);
let rawData = '{}';
fs.readFileSync.mockReturnValue(rawData);
fs.writeFileSync.mockReturnValue(true);
expect(iAnalyzer.runCategoryScript(rl, 'custom', 0, 1)).toBeTruthy();
});
test('should run category script for custom if file not found', () => {
utils.isPackageInstalled.mockResolvedValueOnce(true).mockResolvedValue(false);
fs.existsSync.mockReturnValueOnce(false).mockReturnValueOnce(false)
.mockReturnValue(true);
let rawData = '{}';
fs.readFileSync.mockReturnValue(rawData);
expect(iAnalyzer.runCategoryScript(rl, 'custom', 0, 1)).toBeTruthy();
});
test('should not run category script if iAnalyzer not installed', () => {
utils.isPackageInstalled.mockResolvedValue(false);
expect(iAnalyzer.runCategoryScript(rl, 'red', 0, 1)).toBeTruthy();
});
test('should not run category script if both iAnalyzer type installed', () => {
utils.isPackageInstalled.mockResolvedValue(true);
expect(iAnalyzer.runCategoryScript(rl, 'red', 0, 1)).toBeTruthy();
});
});
});