Skip to content

Commit

Permalink
feat: add test for combine tools script (#3136)
Browse files Browse the repository at this point in the history
Co-authored-by: Ansh Goyal <[email protected]>
  • Loading branch information
vishvamsinh28 and anshgoyalevil authored Dec 9, 2024
1 parent cd391cc commit 22fcbcf
Show file tree
Hide file tree
Showing 5 changed files with 504 additions and 27 deletions.
61 changes: 34 additions & 27 deletions scripts/tools/combine-tools.js
Original file line number Diff line number Diff line change
Expand Up @@ -106,37 +106,44 @@ const getFinalTool = async (toolObject) => {
// Combine the automated tools and manual tools list into single JSON object file, and
// lists down all the language and technology tags in one JSON file.
const combineTools = async (automatedTools, manualTools, toolsPath, tagsPath) => {
for (const key in automatedTools) {
let finalToolsList = [];
if (automatedTools[key].toolsList.length) {
for (const tool of automatedTools[key].toolsList) {
finalToolsList.push(await getFinalTool(tool))
try {
for (const key in automatedTools) {
let finalToolsList = [];
if (automatedTools[key].toolsList.length) {
for (const tool of automatedTools[key].toolsList) {
finalToolsList.push(await getFinalTool(tool))
}
}
}
if (manualTools[key] && manualTools[key].toolsList.length) {
for (const tool of manualTools[key].toolsList) {
let isAsyncAPIrepo;
const isValid = await validate(tool)
if (isValid) {
if (tool?.links?.repoUrl) {
const url = new URL(tool.links.repoUrl)
isAsyncAPIrepo = url.href.startsWith("https://github.com/asyncapi/")
} else isAsyncAPIrepo = false
let toolObject = await createToolObject(tool, "", "", isAsyncAPIrepo)
finalToolsList.push(await getFinalTool(toolObject))
} else {
console.error('Script is not failing, it is just dropping errors for further investigation');
console.error(`Invalid ${tool.title} .asyncapi-tool file.`);
console.error(`Located in manual-tools.json file`);
console.error('Validation errors:', JSON.stringify(validate.errors, null, 2));
if (manualTools[key]?.toolsList?.length) {
for (const tool of manualTools[key].toolsList) {
let isAsyncAPIrepo;
const isValid = await validate(tool)
if (isValid) {
if (tool?.links?.repoUrl) {
const url = new URL(tool.links.repoUrl)
isAsyncAPIrepo = url.href.startsWith("https://github.com/asyncapi/")
} else isAsyncAPIrepo = false
let toolObject = await createToolObject(tool, "", "", isAsyncAPIrepo)
finalToolsList.push(await getFinalTool(toolObject))
} else {
console.error({
message: 'Tool validation failed',
tool: tool.title,
source: 'manual-tools.json',
errors: validate.errors,
note: 'Script continues execution, error logged for investigation'
});
}
}
}
finalToolsList.sort((tool, anotherTool) => tool.title.localeCompare(anotherTool.title));
finalTools[key].toolsList = finalToolsList
}
finalToolsList.sort((tool, anotherTool) => tool.title.localeCompare(anotherTool.title));
finalTools[key].toolsList = finalToolsList
fs.writeFileSync(toolsPath, JSON.stringify(finalTools));
fs.writeFileSync(tagsPath, JSON.stringify({ languages: languageList, technologies: technologyList }),)
} catch (err) {
throw new Error(`Error combining tools: ${err}`);
}
fs.writeFileSync(toolsPath,JSON.stringify(finalTools));
fs.writeFileSync(tagsPath,JSON.stringify({ languages: languageList, technologies: technologyList }),)
}

module.exports = { combineTools }
module.exports = { combineTools }
212 changes: 212 additions & 0 deletions tests/fixtures/combineToolsData.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,212 @@
const expectedDataT1 = {
languages: [
{
name: 'JavaScript',
color: 'bg-[#57f281]',
borderColor: 'border-[#37f069]',
},
{
name: 'Python',
color: 'bg-[#3572A5]',
borderColor: 'border-[#3572A5]',
},
],
technologies: [
{
name: 'Node.js',
color: 'bg-[#61d0f2]',
borderColor: 'border-[#40ccf7]',
},
{
name: 'Flask',
color: 'bg-[#000000]',
borderColor: 'border-[#FFFFFF]',
},
],
};

const manualToolsWithMissingData = [
{
title: 'Tool C',
filters: {},
links: { repoUrl: 'https://github.com/asyncapi/tool-c' },
},
];

const manualToolsToSort = {
category1: {
description: 'Sample Category',
toolsList: [
{
title: 'Tool Z',
filters: { language: 'JavaScript' },
links: { repoUrl: 'https://github.com/asyncapi/tool-z' },
},
{
title: 'Tool A',
filters: { language: 'Python' },
links: { repoUrl: 'https://github.com/asyncapi/tool-a' },
},
],
},
};

const toolWithMultipleLanguages = {
title: 'Multi-Language Tool',
filters: {
language: ['JavaScript', 'Python', 'NewLanguage'],
technology: ['Node.js'],
},
links: { repoUrl: 'https://github.com/example/multi-language-tool' },
};

const automatedToolsT5 = {
category1: {
description: 'Category 1 Description',
toolsList: [toolWithMultipleLanguages],
},
};

const invalidToolT4 = { title: 'Invalid Tool' };

const automatedToolsT4 = {
category1: {
description: 'Category 1 Description',
toolsList: [],
},
};
const manualToolsT4 = {
category1: {
toolsList: [invalidToolT4],
},
};

const toolWithNewTagsT6 = {
title: 'New Tags Tool',
filters: {
language: 'NewLanguage',
technology: ['NewTechnology'],
},
links: { repoUrl: 'https://github.com/example/new-tags-tool' },
};

const automatedToolsT6 = {
category1: {
description: 'Category 1 Description',
toolsList: [toolWithNewTagsT6],
},
};

const toolWithNewLanguageT7 = {
title: 'New Language Tool',
filters: {
language: 'Go',
technology: ['Node.js'],
},
links: { repoUrl: 'https://github.com/example/new-language-tool' },
};

const automatedToolsT7 = {
category1: {
description: 'Category 1 Description',
toolsList: [toolWithNewLanguageT7],
},
};

const validToolT8 = {
title: 'Valid Tool',
filters: {
language: 'JavaScript',
technology: ['Node.js'],
},
links: { repoUrl: 'https://github.com/asyncapi/valid-tool' },
};

const automatedToolsT8 = {
category1: {
description: 'Category 1 Description',
toolsList: [],
},
};

const manualToolsT8 = {
category1: {
toolsList: [validToolT8],
},
};

const toolWithoutRepoUrlT9 = {
title: 'Tool Without Repo',
filters: {
language: 'Python',
technology: ['Flask'],
},
links: {},
};

const automatedToolsT9 = {
category1: {
description: 'Category 1 Description',
toolsList: [],
},
};

const manualToolsT9 = {
category1: {
toolsList: [toolWithoutRepoUrlT9],
},
};

const invalidAutomatedToolsT10 = {
invalidCategory: {
description: 'Invalid Category Description',
toolsList: [],
},
};

const manualToolsWithInvalidURLT11 = {
category1: {
toolsList: [
{
title: 'Tool with Invalid URL',
filters: { language: 'JavaScript' },
links: { repoUrl: 'invalid-url' },
},
],
},
};

const circularTool = {
title: 'Circular Tool',
filters: {
language: 'JavaScript',
technology: ['Node.js'],
},
links: { repoUrl: 'https://github.com/asyncapi/circular-tool' },
};

const automatedToolsT12 = {
category1: {
description: 'Category 1',
toolsList: [circularTool],
},
};

module.exports = {
expectedDataT1,
manualToolsWithMissingData,
manualToolsToSort,
automatedToolsT5,
automatedToolsT4,
manualToolsT4,
automatedToolsT6,
automatedToolsT7,
automatedToolsT8,
manualToolsT8,
automatedToolsT9,
manualToolsT9,
circularTool,
automatedToolsT12,
invalidAutomatedToolsT10,
manualToolsWithInvalidURLT11,
};
17 changes: 17 additions & 0 deletions tests/fixtures/tools/automated-tools.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
{
"category1": {
"description": "Sample Category",
"toolsList": [
{
"title": "Tool B",
"filters": {
"language": "Python",
"technology": ["Flask"]
},
"links": {
"repoUrl": "https://github.com/asyncapi/tool-b"
}
}
]
}
}
12 changes: 12 additions & 0 deletions tests/fixtures/tools/manual-tools.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
[
{
"title": "Tool A",
"filters": {
"language": "JavaScript",
"technology": ["Node.js"]
},
"links": {
"repoUrl": "https://github.com/asyncapi/tool-a"
}
}
]
Loading

0 comments on commit 22fcbcf

Please sign in to comment.