130 lines
3.9 KiB
JavaScript
130 lines
3.9 KiB
JavaScript
const pathLib = require('path');
|
|
const { expect } = require('chai');
|
|
const { providence } = require('../../../../src/program/providence.js');
|
|
const { QueryService } = require('../../../../src/program/services/QueryService.js');
|
|
const { ReportService } = require('../../../../src/program/services/ReportService.js');
|
|
const { LogService } = require('../../../../src/program/services/LogService.js');
|
|
|
|
const {
|
|
mockWriteToJson,
|
|
restoreWriteToJson,
|
|
} = require('../../../../test-helpers/mock-report-service-helpers.js');
|
|
const {
|
|
suppressNonCriticalLogs,
|
|
restoreSuppressNonCriticalLogs,
|
|
} = require('../../../../test-helpers/mock-log-service-helpers.js');
|
|
|
|
describe('Analyzers file-system integration', () => {
|
|
before(() => {
|
|
suppressNonCriticalLogs();
|
|
});
|
|
|
|
after(() => {
|
|
restoreSuppressNonCriticalLogs();
|
|
});
|
|
|
|
const generateE2eMode = process.argv.includes('--generate-e2e-mode');
|
|
|
|
const queryResults = [];
|
|
const targetPath = pathLib.resolve(
|
|
__dirname,
|
|
'../../../../test-helpers/project-mocks/importing-target-project',
|
|
);
|
|
const referencePath = pathLib.resolve(
|
|
__dirname,
|
|
`../../../../test-helpers/project-mocks/importing-target-project/node_modules/exporting-ref-project`,
|
|
);
|
|
|
|
const originalGetResultFileNameAndPath = ReportService._getResultFileNameAndPath;
|
|
const originalOutputPath = ReportService.outputPath;
|
|
|
|
after(() => {
|
|
ReportService._getResultFileNameAndPath = originalGetResultFileNameAndPath;
|
|
ReportService.outputPath = originalOutputPath;
|
|
});
|
|
|
|
if (generateE2eMode) {
|
|
ReportService.outputPath = pathLib.resolve(
|
|
__dirname,
|
|
'../../../../test-helpers/project-mocks-analyzer-outputs',
|
|
);
|
|
// eslint-disable-next-line func-names
|
|
ReportService._getResultFileNameAndPath = function (name) {
|
|
return pathLib.join(this.outputPath, `${name}.json`);
|
|
};
|
|
} else {
|
|
ReportService.outputPath = __dirname; // prevents cache to fail the test
|
|
|
|
beforeEach(() => {
|
|
mockWriteToJson(queryResults);
|
|
});
|
|
|
|
afterEach(() => {
|
|
restoreWriteToJson(queryResults);
|
|
});
|
|
}
|
|
const analyzers = [
|
|
{
|
|
analyzerName: 'find-customelements',
|
|
providenceConfig: {
|
|
targetProjectPaths: [targetPath],
|
|
},
|
|
},
|
|
{
|
|
analyzerName: 'find-imports',
|
|
providenceConfig: {
|
|
targetProjectPaths: [targetPath],
|
|
},
|
|
},
|
|
{
|
|
analyzerName: 'find-exports',
|
|
providenceConfig: {
|
|
targetProjectPaths: [referencePath],
|
|
},
|
|
},
|
|
{
|
|
analyzerName: 'find-classes',
|
|
providenceConfig: {
|
|
targetProjectPaths: [targetPath],
|
|
},
|
|
},
|
|
{
|
|
analyzerName: 'match-imports',
|
|
providenceConfig: {
|
|
targetProjectPaths: [targetPath],
|
|
referenceProjectPaths: [referencePath],
|
|
},
|
|
},
|
|
{
|
|
analyzerName: 'match-subclasses',
|
|
providenceConfig: {
|
|
targetProjectPaths: [targetPath],
|
|
referenceProjectPaths: [referencePath],
|
|
},
|
|
},
|
|
{
|
|
analyzerName: 'match-paths',
|
|
providenceConfig: {
|
|
targetProjectPaths: [targetPath],
|
|
referenceProjectPaths: [referencePath],
|
|
},
|
|
},
|
|
];
|
|
|
|
for (const { analyzerName, providenceConfig } of analyzers) {
|
|
it(`"${analyzerName}" analyzer`, async () => {
|
|
const findExportsQueryConfig = QueryService.getQueryConfigFromAnalyzer(analyzerName);
|
|
await providence(findExportsQueryConfig, providenceConfig);
|
|
if (generateE2eMode) {
|
|
LogService.info(
|
|
'Successfully created mocks. Do not forget to rerun tests now without "--generate-e2e-mode"',
|
|
);
|
|
return;
|
|
}
|
|
// eslint-disable-next-line import/no-dynamic-require, global-require
|
|
const expectedOutput = require(`../../../../test-helpers/project-mocks-analyzer-outputs/${analyzerName}.json`);
|
|
const queryResult = JSON.parse(JSON.stringify(queryResults[0])).queryOutput;
|
|
expect(queryResult).to.eql(expectedOutput.queryOutput);
|
|
});
|
|
}
|
|
});
|