From bc011c4b47453771e5c674f34b69a4c12e5e8360 Mon Sep 17 00:00:00 2001 From: Krishna Acondy Date: Thu, 6 May 2021 07:22:29 +0100 Subject: [PATCH] chore(*): add tests for new functionality --- src/format/formatFile.spec.ts | 73 +++++++++++-- src/format/formatFolder.spec.ts | 181 ++++++++++++++++++++++++++++++-- 2 files changed, 239 insertions(+), 15 deletions(-) diff --git a/src/format/formatFile.spec.ts b/src/format/formatFile.spec.ts index 4581596..02cf58c 100644 --- a/src/format/formatFile.spec.ts +++ b/src/format/formatFile.spec.ts @@ -8,22 +8,76 @@ describe('formatFile', () => { const content = `%macro somemacro(); \n%put 'hello';\n%mend;` const expectedContent = `/**\n @file\n @brief \n

SAS Macros

\n**/\n%macro somemacro();\n%put 'hello';\n%mend somemacro;` await createFile(path.join(__dirname, 'format-file-test.sas'), content) + const expectedResult = { + updatedFilePaths: [path.join(__dirname, 'format-file-test.sas')], + fixedDiagnosticsCount: 3, + unfixedDiagnostics: [] + } - await formatFile(path.join(__dirname, 'format-file-test.sas')) - const result = await readFile(path.join(__dirname, 'format-file-test.sas')) + const result = await formatFile( + path.join(__dirname, 'format-file-test.sas') + ) + const formattedContent = await readFile( + path.join(__dirname, 'format-file-test.sas') + ) - expect(result).toEqual(expectedContent) + expect(result).toEqual(expectedResult) + expect(formattedContent).toEqual(expectedContent) await deleteFile(path.join(__dirname, 'format-file-test.sas')) }) it('should use the provided config if available', async () => { const content = `%macro somemacro(); \n%put 'hello';\n%mend;` - const expectedContent = `/**\r\n @file\r\n @brief \r\n

SAS Macros

\r\n**/\r\n%macro somemacro();\r\n%put 'hello';\r\n%mend somemacro;` + const expectedContent = `/**\r\n @file\r\n @brief \r\n

SAS Macros

\r\n**/\r\n%macro somemacro();\r\n%put 'hello';\r\n%mend;` + const expectedResult = { + updatedFilePaths: [path.join(__dirname, 'format-file-config.sas')], + fixedDiagnosticsCount: 2, + unfixedDiagnostics: [ + { + endColumnNumber: 7, + lineNumber: 8, + message: '%mend statement is missing macro name - somemacro', + severity: 1, + startColumnNumber: 1 + } + ] + } await createFile(path.join(__dirname, 'format-file-config.sas'), content) - await formatFile( + const result = await formatFile( path.join(__dirname, 'format-file-config.sas'), + new LintConfig({ + lineEndings: 'crlf', + hasMacroNameInMend: false, + hasDoxygenHeader: true, + noTrailingSpaces: true + }) + ) + const formattedContent = await readFile( + path.join(__dirname, 'format-file-config.sas') + ) + + expect(result).toEqual(expectedResult) + expect(formattedContent).toEqual(expectedContent) + + await deleteFile(path.join(__dirname, 'format-file-config.sas')) + }) + + it('should not update any files if there are no formatting violations', async () => { + const content = `/**\r\n @file\r\n @brief \r\n

SAS Macros

\r\n**/\r\n%macro somemacro();\r\n%put 'hello';\r\n%mend somemacro;` + const expectedResult = { + updatedFilePaths: [], + fixedDiagnosticsCount: 0, + unfixedDiagnostics: [] + } + await createFile( + path.join(__dirname, 'format-file-no-violations.sas'), + content + ) + + const result = await formatFile( + path.join(__dirname, 'format-file-no-violations.sas'), new LintConfig({ lineEndings: 'crlf', hasMacroNameInMend: true, @@ -31,12 +85,13 @@ describe('formatFile', () => { noTrailingSpaces: true }) ) - const result = await readFile( - path.join(__dirname, 'format-file-config.sas') + const formattedContent = await readFile( + path.join(__dirname, 'format-file-no-violations.sas') ) - expect(result).toEqual(expectedContent) + expect(result).toEqual(expectedResult) + expect(formattedContent).toEqual(content) - await deleteFile(path.join(__dirname, 'format-file-config.sas')) + await deleteFile(path.join(__dirname, 'format-file-no-violations.sas')) }) }) diff --git a/src/format/formatFolder.spec.ts b/src/format/formatFolder.spec.ts index 389813b..b9aa1ec 100644 --- a/src/format/formatFolder.spec.ts +++ b/src/format/formatFolder.spec.ts @@ -6,23 +6,39 @@ import { deleteFolder, readFile } from '@sasjs/utils/file' +import { Diagnostic, LintConfig } from '../types' describe('formatFolder', () => { it('should fix linting issues in a given folder', async () => { const content = `%macro somemacro(); \n%put 'hello';\n%mend;` const expectedContent = `/**\n @file\n @brief \n

SAS Macros

\n**/\n%macro somemacro();\n%put 'hello';\n%mend somemacro;` + const expectedResult = { + updatedFilePaths: [ + path.join(__dirname, 'format-folder-test', 'format-folder-test.sas') + ], + fixedDiagnosticsCount: 3, + unfixedDiagnostics: new Map([ + [ + path.join(__dirname, 'format-folder-test', 'format-folder-test.sas'), + [] + ] + ]) + } await createFolder(path.join(__dirname, 'format-folder-test')) await createFile( path.join(__dirname, 'format-folder-test', 'format-folder-test.sas'), content ) - await formatFolder(path.join(__dirname, 'format-folder-test')) - const result = await readFile( + const result = await formatFolder( + path.join(__dirname, 'format-folder-test') + ) + const formattedContent = await readFile( path.join(__dirname, 'format-folder-test', 'format-folder-test.sas') ) - expect(result).toEqual(expectedContent) + expect(formattedContent).toEqual(expectedContent) + expect(result).toEqual(expectedResult) await deleteFolder(path.join(__dirname, 'format-folder-test')) }) @@ -30,6 +46,29 @@ describe('formatFolder', () => { it('should fix linting issues in subfolders of a given folder', async () => { const content = `%macro somemacro(); \n%put 'hello';\n%mend;` const expectedContent = `/**\n @file\n @brief \n

SAS Macros

\n**/\n%macro somemacro();\n%put 'hello';\n%mend somemacro;` + const expectedResult = { + updatedFilePaths: [ + path.join( + __dirname, + 'format-folder-test', + 'subfolder', + 'format-folder-test.sas' + ) + ], + fixedDiagnosticsCount: 3, + unfixedDiagnostics: new Map([ + [ + path.join( + __dirname, + 'format-folder-test', + 'subfolder', + 'format-folder-test.sas' + ), + [] + ] + ]) + } + await createFolder(path.join(__dirname, 'format-folder-test')) await createFolder(path.join(__dirname, 'subfolder')) await createFile( @@ -42,8 +81,10 @@ describe('formatFolder', () => { content ) - await formatFolder(path.join(__dirname, 'format-folder-test')) - const result = await readFile( + const result = await formatFolder( + path.join(__dirname, 'format-folder-test') + ) + const formattedContent = await readFile( path.join( __dirname, 'format-folder-test', @@ -52,7 +93,135 @@ describe('formatFolder', () => { ) ) - expect(result).toEqual(expectedContent) + expect(result).toEqual(expectedResult) + expect(formattedContent).toEqual(expectedContent) + + await deleteFolder(path.join(__dirname, 'format-folder-test')) + }) + + it('should use a custom configuration when provided', async () => { + const content = `%macro somemacro(); \n%put 'hello';\n%mend;` + const expectedContent = `/**\n @file\n @brief \n

SAS Macros

\n**/\n%macro somemacro();\n%put 'hello';\n%mend somemacro;` + const expectedResult = { + updatedFilePaths: [ + path.join(__dirname, 'format-folder-test', 'format-folder-test.sas') + ], + fixedDiagnosticsCount: 3, + unfixedDiagnostics: new Map([ + [ + path.join(__dirname, 'format-folder-test', 'format-folder-test.sas'), + [] + ] + ]) + } + await createFolder(path.join(__dirname, 'format-folder-test')) + await createFile( + path.join(__dirname, 'format-folder-test', 'format-folder-test.sas'), + content + ) + + const result = await formatFolder( + path.join(__dirname, 'format-folder-test'), + new LintConfig({ + lineEndings: 'crlf', + hasMacroNameInMend: false, + hasDoxygenHeader: true, + noTrailingSpaces: true + }) + ) + const formattedContent = await readFile( + path.join(__dirname, 'format-folder-test', 'format-folder-test.sas') + ) + + expect(formattedContent).toEqual(expectedContent) + expect(result).toEqual(expectedResult) + + await deleteFolder(path.join(__dirname, 'format-folder-test')) + }) + + it('should fix linting issues in subfolders of a given folder', async () => { + const content = `%macro somemacro(); \n%put 'hello';\n%mend;` + const expectedContent = `/**\n @file\n @brief \n

SAS Macros

\n**/\n%macro somemacro();\n%put 'hello';\n%mend somemacro;` + const expectedResult = { + updatedFilePaths: [ + path.join( + __dirname, + 'format-folder-test', + 'subfolder', + 'format-folder-test.sas' + ) + ], + fixedDiagnosticsCount: 3, + unfixedDiagnostics: new Map([ + [ + path.join( + __dirname, + 'format-folder-test', + 'subfolder', + 'format-folder-test.sas' + ), + [] + ] + ]) + } + + await createFolder(path.join(__dirname, 'format-folder-test')) + await createFolder(path.join(__dirname, 'subfolder')) + await createFile( + path.join( + __dirname, + 'format-folder-test', + 'subfolder', + 'format-folder-test.sas' + ), + content + ) + + const result = await formatFolder( + path.join(__dirname, 'format-folder-test') + ) + const formattedContent = await readFile( + path.join( + __dirname, + 'format-folder-test', + 'subfolder', + 'format-folder-test.sas' + ) + ) + + expect(result).toEqual(expectedResult) + expect(formattedContent).toEqual(expectedContent) + + await deleteFolder(path.join(__dirname, 'format-folder-test')) + }) + + it('should not update any files when there are no violations', async () => { + const content = `/**\n @file\n @brief \n

SAS Macros

\n**/\n%macro somemacro();\n%put 'hello';\n%mend somemacro;` + const expectedResult = { + updatedFilePaths: [], + fixedDiagnosticsCount: 0, + unfixedDiagnostics: new Map([ + [ + path.join(__dirname, 'format-folder-test', 'format-folder-test.sas'), + [] + ] + ]) + } + await createFolder(path.join(__dirname, 'format-folder-test')) + await createFile( + path.join(__dirname, 'format-folder-test', 'format-folder-test.sas'), + content + ) + + const result = await formatFolder( + path.join(__dirname, 'format-folder-test') + ) + const formattedContent = await readFile( + path.join(__dirname, 'format-folder-test', 'format-folder-test.sas') + ) + + expect(formattedContent).toEqual(content) + expect(result).toEqual(expectedResult) await deleteFolder(path.join(__dirname, 'format-folder-test')) })