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
42 changes: 21 additions & 21 deletions index.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,12 +3,12 @@ import { existsSync, mkdirSync, readFileSync, writeFileSync } from 'fs';

const cachePath = '.cache';

const getJsonFromFile = async (filename) => {
export const getJsonFromFile = async (filename) => {
const data = readFileSync(filename, 'utf8');
return JSON.parse(data);
};

const getComponents = async (filename) => {
export const getComponents = async (filename) => {
const parsedData = await getJsonFromFile(filename);
return parsedData.components;
};
Expand All @@ -17,9 +17,10 @@ export const getSpringBootVersion = async (components) => {
let springBoot = components.find(component => component.group === 'org.springframework.boot' && component.name === 'spring-boot');
if (springBoot === undefined) {
springBoot = components.find(component => component.name === 'spring-boot');
}
if (springBoot === undefined) {
throw new Error('no spring boot version found');
if (springBoot === undefined) {
console.log('No Spring Boot version found');
return '';
}
}
return springBoot.version;
};
Expand All @@ -32,23 +33,22 @@ const getDefaultSpringBootComponents = async (filename) => {
export const retrieveSimilarPackages = async (bomFile) => {
const components = await getComponents(bomFile);
const springBootVersion = await getSpringBootVersion(components);
console.log('springBootVersion', springBootVersion);
const defaultComponents = await getDefaultSpringBootComponents(springBootVersion);
if (springBootVersion) {
console.log('Detected Spring Boot Version', springBootVersion);
const defaultComponents = await getDefaultSpringBootComponents(springBootVersion);

const mismatchedPackages = [];
components.forEach(bomPackage => defaultComponents.forEach(bootPackage => {
if (bomPackage.group === bootPackage.group && bomPackage.name === bootPackage.name && bomPackage.version !== undefined && bomPackage.version !== bootPackage.version) {
const existingMatches = mismatchedPackages.find(mismatchedPackage => mismatchedPackage.group === bomPackage.group && mismatchedPackage.name === bomPackage.name && mismatchedPackage.bomVersion === bomPackage.version && mismatchedPackage.bootVersion === bootPackage.version);
if (!existingMatches) {
mismatchedPackages.push(new Package(bomPackage.group, bomPackage.name, bomPackage.version, bootPackage.version));
const mismatchedPackages = [];
components.forEach(bomPackage => defaultComponents.forEach(bootPackage => {
if (bomPackage.group === bootPackage.group && bomPackage.name === bootPackage.name && bomPackage.version !== undefined && bomPackage.version !== bootPackage.version) {
const existingMatches = mismatchedPackages.find(mismatchedPackage => mismatchedPackage.group === bomPackage.group && mismatchedPackage.name === bomPackage.name && mismatchedPackage.bomVersion === bomPackage.version && mismatchedPackage.bootVersion === bootPackage.version);
if (!existingMatches) {
mismatchedPackages.push(new Package(bomPackage.group, bomPackage.name, bomPackage.version, bootPackage.version));
}
}
}
}));
}));

console.log('mismatchedPackages', mismatchedPackages);
// console.log('components size', components.length);
// console.log('defaultComponents size', defaultComponents.length);
// console.log('matchingPackages size', mismatchedPackages.length);
console.log('Mismatched Packages', mismatchedPackages);
}
};

const getSpringDefaultVersions = async (sbVersion) => {
Expand All @@ -57,10 +57,10 @@ const getSpringDefaultVersions = async (sbVersion) => {
if (!existsSync(`${cachePath}/${sbVersion}.json`)) {
await downloadSpringDefaultVersions(sbVersion);
} else {
console.log('file already exists');
console.log('Spring Boot default versions file already exists in cache.');
}
} catch (err) {
console.error('error retrieving spring default versions', err);
console.error('Error retrieving spring default versions', err);
}
};

Expand Down
67 changes: 60 additions & 7 deletions test/test-index.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,60 @@
import { rejects, strictEqual } from 'node:assert';
import { getSpringBootVersion } from '../index.js';
import { strictEqual } from 'node:assert';
import { writeFileSync } from 'fs';
import { unlink } from 'node:fs';
import { getComponents, getJsonFromFile, getSpringBootVersion } from '../index.js';

describe('test file reading', () => {
const filename = 'testFile.json';

it('should read a properly formatted JSON file', async () => {
const testFile = {
components: [{
'name': 'spring-boot', 'version': '3.1.1',
}],
};
await writeFileSync(filename, JSON.stringify(testFile, null, 2));

const jsonData = await getJsonFromFile(filename);


strictEqual(jsonData.components[0].name, 'spring-boot');
strictEqual(jsonData.components[0].version, '3.1.1');
});

it('should retrieve components when they exist', async () => {
const testFile = {
components: [{
'name': 'new-name', 'version': '7.1.19',
}],
};
await writeFileSync(filename, JSON.stringify(testFile, null, 2));

const jsonData = await getComponents(filename);


strictEqual(jsonData[0].name, 'new-name');
strictEqual(jsonData[0].version, '7.1.19');
});

it('should gracefully exit when components do not exist', async () => {
const testFile = {
bananas: [{
'name': 'new-name', 'version': '7.1.19',
}],
};
await writeFileSync(filename, JSON.stringify(testFile, null, 2));

const jsonData = await getComponents(filename);

strictEqual(jsonData, undefined);
});

after(() => {
unlink(filename, (err) => {
if (err) throw err;
});
});
});

describe('test getSpringBootVersion', () => {
it('should get spring boot with group, name, and version', async () => {
Expand All @@ -18,11 +73,9 @@ describe('test getSpringBootVersion', () => {
strictEqual(springBootVersion, '3.1.1');
});

it('should throw an error when spring boot version is not found', async () => {
it('should return empty string when spring boot version is not found', async () => {
const components = [{}];
// const springBootVersion = await getSpringBootVersion(components);
await rejects(async () => {
await getSpringBootVersion(components);
}, Error('no spring boot version found'));
const springBootVersion = await getSpringBootVersion(components);
strictEqual(springBootVersion, '');
});
});