mirror of
				https://github.com/actions/setup-dotnet.git
				synced 2025-10-31 23:43:44 +00:00 
			
		
		
		
	Update unit-tests
This commit is contained in:
		
							parent
							
								
									d1558ba62e
								
							
						
					
					
						commit
						595c6fb023
					
				
							
								
								
									
										2
									
								
								.github/workflows/e2e-tests.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								.github/workflows/e2e-tests.yml
									
									
									
									
										vendored
									
									
								
							| @ -24,7 +24,7 @@ jobs: | ||||
|       - name: Clear toolcache | ||||
|         shell: pwsh | ||||
|         run: __tests__/clear-toolcache.ps1 ${{ runner.os }} | ||||
|       - name: Setup dotnet 2.2.402 and 3.1.404 | ||||
|       - name: Setup dotnet 2.2.402, 3.1.404 and 3.0.x | ||||
|         uses: ./ | ||||
|         with: | ||||
|           dotnet-version: | | ||||
|  | ||||
| @ -93,7 +93,7 @@ describe('authutil tests', () => { | ||||
| 
 | ||||
|   it('No existing config, sets up a full NuGet.config with URL and user/PAT for GPR', async () => { | ||||
|     process.env['NUGET_AUTH_TOKEN'] = 'TEST_FAKE_AUTH_TOKEN'; | ||||
|     await auth.configAuthentication( | ||||
|     auth.configAuthentication( | ||||
|       'https://nuget.pkg.github.com/OwnerName/index.json', | ||||
|       '', | ||||
|       fakeSourcesDirForTesting | ||||
| @ -107,7 +107,7 @@ describe('authutil tests', () => { | ||||
|   it('No existing config, auth token environment variable not provided, throws', async () => { | ||||
|     let thrown = false; | ||||
|     try { | ||||
|       await auth.configAuthentication( | ||||
|       auth.configAuthentication( | ||||
|         'https://nuget.pkg.github.com/OwnerName/index.json', | ||||
|         '', | ||||
|         fakeSourcesDirForTesting | ||||
| @ -121,7 +121,7 @@ describe('authutil tests', () => { | ||||
|   it('No existing config, sets up a full NuGet.config with URL and other owner/PAT for GPR', async () => { | ||||
|     process.env['NUGET_AUTH_TOKEN'] = 'TEST_FAKE_AUTH_TOKEN'; | ||||
|     process.env['INPUT_OWNER'] = 'otherorg'; | ||||
|     await auth.configAuthentication( | ||||
|     auth.configAuthentication( | ||||
|       'https://nuget.pkg.github.com/otherorg/index.json', | ||||
|       '', | ||||
|       fakeSourcesDirForTesting | ||||
| @ -141,7 +141,7 @@ describe('authutil tests', () => { | ||||
|     fs.writeFileSync(inputNuGetConfigPath, invalidNuGetConfig); | ||||
|     let thrown = false; | ||||
|     try { | ||||
|       await auth.configAuthentication( | ||||
|       auth.configAuthentication( | ||||
|         'https://nuget.pkg.github.com/OwnerName/index.json', | ||||
|         '', | ||||
|         fakeSourcesDirForTesting | ||||
| @ -159,7 +159,7 @@ describe('authutil tests', () => { | ||||
|       'nuget.config' | ||||
|     ); | ||||
|     fs.writeFileSync(inputNuGetConfigPath, emptyNuGetConfig); | ||||
|     await auth.configAuthentication( | ||||
|     auth.configAuthentication( | ||||
|       'https://nuget.pkg.github.com/OwnerName/index.json', | ||||
|       '', | ||||
|       fakeSourcesDirForTesting | ||||
| @ -177,7 +177,7 @@ describe('authutil tests', () => { | ||||
|       'nuget.config' | ||||
|     ); | ||||
|     fs.writeFileSync(inputNuGetConfigPath, nugetorgNuGetConfig); | ||||
|     await auth.configAuthentication( | ||||
|     auth.configAuthentication( | ||||
|       'https://nuget.pkg.github.com/OwnerName/index.json', | ||||
|       '', | ||||
|       fakeSourcesDirForTesting | ||||
| @ -195,7 +195,7 @@ describe('authutil tests', () => { | ||||
|       'nuget.config' | ||||
|     ); | ||||
|     fs.writeFileSync(inputNuGetConfigPath, gprNuGetConfig); | ||||
|     await auth.configAuthentication( | ||||
|     auth.configAuthentication( | ||||
|       'https://nuget.pkg.github.com/OwnerName/index.json', | ||||
|       '', | ||||
|       fakeSourcesDirForTesting | ||||
| @ -213,7 +213,7 @@ describe('authutil tests', () => { | ||||
|       'nuget.config' | ||||
|     ); | ||||
|     fs.writeFileSync(inputNuGetConfigPath, gprnugetorgNuGetConfig); | ||||
|     await auth.configAuthentication( | ||||
|     auth.configAuthentication( | ||||
|       'https://nuget.pkg.github.com/OwnerName/index.json', | ||||
|       '', | ||||
|       fakeSourcesDirForTesting | ||||
| @ -231,7 +231,7 @@ describe('authutil tests', () => { | ||||
|       'nuget.config' | ||||
|     ); | ||||
|     fs.writeFileSync(inputNuGetConfigPath, twogprNuGetConfig); | ||||
|     await auth.configAuthentication( | ||||
|     auth.configAuthentication( | ||||
|       'https://nuget.pkg.github.com', | ||||
|       '', | ||||
|       fakeSourcesDirForTesting | ||||
| @ -251,7 +251,7 @@ describe('authutil tests', () => { | ||||
|     fs.writeFileSync(inputNuGetConfigPath, spaceNuGetConfig); | ||||
|     let thrown = false; | ||||
|     try { | ||||
|       await auth.configAuthentication( | ||||
|       auth.configAuthentication( | ||||
|         'https://nuget.pkg.github.com/OwnerName/index.json', | ||||
|         '', | ||||
|         fakeSourcesDirForTesting | ||||
| @ -274,7 +274,7 @@ describe('authutil tests', () => { | ||||
|     ); | ||||
|     fs.mkdirSync(inputNuGetConfigDirectory, {recursive: true}); | ||||
|     fs.writeFileSync(inputNuGetConfigPath, gprNuGetConfig); | ||||
|     await auth.configAuthentication( | ||||
|     auth.configAuthentication( | ||||
|       'https://nuget.pkg.github.com/OwnerName/index.json', | ||||
|       'subfolder/nuget.config', | ||||
|       fakeSourcesDirForTesting | ||||
| @ -292,7 +292,7 @@ describe('authutil tests', () => { | ||||
|       'nuget.config' | ||||
|     ); | ||||
|     fs.writeFileSync(inputNuGetConfigPath, azureartifactsNuGetConfig); | ||||
|     await auth.configAuthentication( | ||||
|     auth.configAuthentication( | ||||
|       'https://pkgs.dev.azure.com/amullans/_packaging/GitHubBuilds/nuget/v3/index.json', | ||||
|       '', | ||||
|       fakeSourcesDirForTesting | ||||
| @ -310,7 +310,7 @@ describe('authutil tests', () => { | ||||
|       'nuget.config' | ||||
|     ); | ||||
|     fs.writeFileSync(inputNuGetConfigPath, azureartifactsnugetorgNuGetConfig); | ||||
|     await auth.configAuthentication( | ||||
|     auth.configAuthentication( | ||||
|       'https://pkgs.dev.azure.com/amullans/_packaging/GitHubBuilds/nuget/v3/index.json', | ||||
|       '', | ||||
|       fakeSourcesDirForTesting | ||||
| @ -323,7 +323,7 @@ describe('authutil tests', () => { | ||||
| 
 | ||||
|   it('No existing config, sets up a full NuGet.config with URL and token for other source', async () => { | ||||
|     process.env['NUGET_AUTH_TOKEN'] = 'TEST_FAKE_AUTH_TOKEN'; | ||||
|     await auth.configAuthentication( | ||||
|     auth.configAuthentication( | ||||
|       'https://pkgs.dev.azure.com/amullans/_packaging/GitHubBuilds/nuget/v3/index.json', | ||||
|       '', | ||||
|       fakeSourcesDirForTesting | ||||
|  | ||||
| @ -32,12 +32,13 @@ describe('csc tests', () => { | ||||
|       } | ||||
|     ]; | ||||
| 
 | ||||
|     stringsToMatch.forEach((string, index) => { | ||||
|       const matchedResult = string.match(regex); | ||||
|       for (const name in expectedResults[index]) { | ||||
|         expect(matchedResult![regexResultsMap[name]]).toEqual( | ||||
|           expectedResults[index][name] | ||||
|         ); | ||||
|     stringsToMatch.map((string, index) => { | ||||
|       const matchedResultsArray = string.match(regex); | ||||
|       for (const propName in expectedResults[index]) { | ||||
|         const propertyIndex = regexResultsMap[propName]; | ||||
|         const expectedPropValue = expectedResults[index][propName]; | ||||
|         const matchedPropValue = matchedResultsArray![propertyIndex]; | ||||
|         expect(matchedPropValue).toEqual(expectedPropValue); | ||||
|       } | ||||
|     }); | ||||
|   }, 10000); | ||||
|  | ||||
| @ -8,134 +8,70 @@ import * as installer from '../src/installer'; | ||||
| import {IS_WINDOWS} from '../src/utils'; | ||||
| import {QualityOptions} from '../src/setup-dotnet'; | ||||
| 
 | ||||
| const env = process.env; | ||||
| describe('installer tests', () => { | ||||
|   const env = process.env; | ||||
| 
 | ||||
| beforeEach(() => { | ||||
|   jest.resetModules(); | ||||
|   process.env = {...env}; | ||||
| }); | ||||
|   beforeEach(() => { | ||||
|     jest.resetModules(); | ||||
|     process.env = {...env}; | ||||
|   }); | ||||
| 
 | ||||
| afterEach(() => { | ||||
|   process.env = env; | ||||
| }); | ||||
|   afterEach(() => { | ||||
|     process.env = env; | ||||
|   }); | ||||
| 
 | ||||
| describe('DotnetCoreInstaller tests', () => { | ||||
|   const getExecOutputSpy = jest.spyOn(exec, 'getExecOutput'); | ||||
|   const warningSpy = jest.spyOn(core, 'warning'); | ||||
|   const whichSpy = jest.spyOn(io, 'which'); | ||||
|   const maxSatisfyingSpy = jest.spyOn(semver, 'maxSatisfying'); | ||||
|   describe('DotnetCoreInstaller tests', () => { | ||||
|     const getExecOutputSpy = jest.spyOn(exec, 'getExecOutput'); | ||||
|     const warningSpy = jest.spyOn(core, 'warning'); | ||||
|     const whichSpy = jest.spyOn(io, 'which'); | ||||
|     const maxSatisfyingSpy = jest.spyOn(semver, 'maxSatisfying'); | ||||
| 
 | ||||
|   describe('installDotnet() tests', () => { | ||||
|     whichSpy.mockImplementation(() => Promise.resolve('PathToShell')); | ||||
|     describe('installDotnet() tests', () => { | ||||
|       whichSpy.mockImplementation(() => Promise.resolve('PathToShell')); | ||||
| 
 | ||||
|     it('should throw the error in case of non-zero exit code of the installation script. The error message should contain logs.', async () => { | ||||
|       const inputVersion = '3.1.100'; | ||||
|       const inputQuality = '' as QualityOptions; | ||||
|       const errorMessage = 'Fictious error message!'; | ||||
|       getExecOutputSpy.mockImplementation(() => { | ||||
|         return Promise.resolve({exitCode: 1, stdout: '', stderr: errorMessage}); | ||||
|       }); | ||||
|       const dotnetInstaller = new installer.DotnetCoreInstaller( | ||||
|         inputVersion, | ||||
|         inputQuality | ||||
|       ); | ||||
|       await expect(dotnetInstaller.installDotnet()).rejects.toThrow( | ||||
|         `Failed to install dotnet, exit code: 1. ${errorMessage}` | ||||
|       ); | ||||
|     }); | ||||
| 
 | ||||
|     it('should return version of .NET SDK after installation complete', async () => { | ||||
|       const inputVersion = '3.1.100'; | ||||
|       const inputQuality = '' as QualityOptions; | ||||
|       getExecOutputSpy.mockImplementation(() => { | ||||
|         return Promise.resolve({exitCode: 0, stdout: '', stderr: ''}); | ||||
|       }); | ||||
|       maxSatisfyingSpy.mockImplementation(() => inputVersion); | ||||
| 
 | ||||
|       const dotnetInstaller = new installer.DotnetCoreInstaller( | ||||
|         inputVersion, | ||||
|         inputQuality | ||||
|       ); | ||||
|       const installedVersion = await dotnetInstaller.installDotnet(); | ||||
| 
 | ||||
|       expect(installedVersion).toBe(inputVersion); | ||||
|     }); | ||||
| 
 | ||||
|     it(`should supply 'version' argument to the installation script if supplied version is in A.B.C syntax`, async () => { | ||||
|       const inputVersion = '6.0.300'; | ||||
|       const inputQuality = '' as QualityOptions; | ||||
| 
 | ||||
|       getExecOutputSpy.mockImplementation(() => { | ||||
|         return Promise.resolve({exitCode: 0, stdout: '', stderr: ''}); | ||||
|       }); | ||||
|       maxSatisfyingSpy.mockImplementation(() => inputVersion); | ||||
| 
 | ||||
|       const dotnetInstaller = new installer.DotnetCoreInstaller( | ||||
|         inputVersion, | ||||
|         inputQuality | ||||
|       ); | ||||
| 
 | ||||
|       await dotnetInstaller.installDotnet(); | ||||
| 
 | ||||
|       const scriptArguments = ( | ||||
|         getExecOutputSpy.mock.calls[0][1] as string[] | ||||
|       ).join(' '); | ||||
|       const expectedArgument = IS_WINDOWS | ||||
|         ? `-Version ${inputVersion}` | ||||
|         : `--version ${inputVersion}`; | ||||
| 
 | ||||
|       expect(scriptArguments).toContain(expectedArgument); | ||||
|     }); | ||||
| 
 | ||||
|     it(`should warn if the 'quality' input is set and the supplied version is in A.B.C syntax`, async () => { | ||||
|       const inputVersion = '6.0.300'; | ||||
|       const inputQuality = 'ga' as QualityOptions; | ||||
| 
 | ||||
|       getExecOutputSpy.mockImplementation(() => { | ||||
|         return Promise.resolve({exitCode: 0, stdout: '', stderr: ''}); | ||||
|       }); | ||||
|       maxSatisfyingSpy.mockImplementation(() => inputVersion); | ||||
| 
 | ||||
|       const dotnetInstaller = new installer.DotnetCoreInstaller( | ||||
|         inputVersion, | ||||
|         inputQuality | ||||
|       ); | ||||
| 
 | ||||
|       await dotnetInstaller.installDotnet(); | ||||
| 
 | ||||
|       expect(warningSpy).toHaveBeenCalledWith( | ||||
|         `'dotnet-quality' input can be used only with .NET SDK version in A.B, A.B.x, A and A.x formats where the major tag is higher than 5. You specified: ${inputVersion}. 'dotnet-quality' input is ignored.` | ||||
|       ); | ||||
|     }); | ||||
| 
 | ||||
|     it(`should warn if the 'quality' input is set and version isn't in A.B.C syntax but major tag is lower then 6`, async () => { | ||||
|       const inputVersion = '3.1'; | ||||
|       const inputQuality = 'ga' as QualityOptions; | ||||
| 
 | ||||
|       getExecOutputSpy.mockImplementation(() => { | ||||
|         return Promise.resolve({exitCode: 0, stdout: '', stderr: ''}); | ||||
|       }); | ||||
|       maxSatisfyingSpy.mockImplementation(() => inputVersion); | ||||
| 
 | ||||
|       const dotnetInstaller = new installer.DotnetCoreInstaller( | ||||
|         inputVersion, | ||||
|         inputQuality | ||||
|       ); | ||||
| 
 | ||||
|       await dotnetInstaller.installDotnet(); | ||||
| 
 | ||||
|       expect(warningSpy).toHaveBeenCalledWith( | ||||
|         `'dotnet-quality' input can be used only with .NET SDK version in A.B, A.B.x, A and A.x formats where the major tag is higher than 5. You specified: ${inputVersion}. 'dotnet-quality' input is ignored.` | ||||
|       ); | ||||
|     }); | ||||
| 
 | ||||
|     each(['6', '6.0', '6.0.x', '6.0.*', '6.0.X']).test( | ||||
|       `should supply 'quality' argument to the installation script if quality input is set and version is not in A.B.C syntax`, | ||||
|       async inputVersion => { | ||||
|         const inputQuality = 'ga' as QualityOptions; | ||||
|         const exitCode = 0; | ||||
|       it('should throw the error in case of non-zero exit code of the installation script. The error message should contain logs.', async () => { | ||||
|         const inputVersion = '3.1.100'; | ||||
|         const inputQuality = '' as QualityOptions; | ||||
|         const errorMessage = 'Fictious error message!'; | ||||
|         getExecOutputSpy.mockImplementation(() => { | ||||
|           return Promise.resolve({exitCode: exitCode, stdout: '', stderr: ''}); | ||||
|           return Promise.resolve({ | ||||
|             exitCode: 1, | ||||
|             stdout: '', | ||||
|             stderr: errorMessage | ||||
|           }); | ||||
|         }); | ||||
|         const dotnetInstaller = new installer.DotnetCoreInstaller( | ||||
|           inputVersion, | ||||
|           inputQuality | ||||
|         ); | ||||
|         await expect(dotnetInstaller.installDotnet()).rejects.toThrow( | ||||
|           `Failed to install dotnet, exit code: 1. ${errorMessage}` | ||||
|         ); | ||||
|       }); | ||||
| 
 | ||||
|       it('should return version of .NET SDK after installation complete', async () => { | ||||
|         const inputVersion = '3.1.100'; | ||||
|         const inputQuality = '' as QualityOptions; | ||||
|         getExecOutputSpy.mockImplementation(() => { | ||||
|           return Promise.resolve({exitCode: 0, stdout: '', stderr: ''}); | ||||
|         }); | ||||
|         maxSatisfyingSpy.mockImplementation(() => inputVersion); | ||||
| 
 | ||||
|         const dotnetInstaller = new installer.DotnetCoreInstaller( | ||||
|           inputVersion, | ||||
|           inputQuality | ||||
|         ); | ||||
|         const installedVersion = await dotnetInstaller.installDotnet(); | ||||
| 
 | ||||
|         expect(installedVersion).toBe(inputVersion); | ||||
|       }); | ||||
| 
 | ||||
|       it(`should supply 'version' argument to the installation script if supplied version is in A.B.C syntax`, async () => { | ||||
|         const inputVersion = '6.0.300'; | ||||
|         const inputQuality = '' as QualityOptions; | ||||
| 
 | ||||
|         getExecOutputSpy.mockImplementation(() => { | ||||
|           return Promise.resolve({exitCode: 0, stdout: '', stderr: ''}); | ||||
|         }); | ||||
|         maxSatisfyingSpy.mockImplementation(() => inputVersion); | ||||
| 
 | ||||
| @ -150,44 +86,15 @@ describe('DotnetCoreInstaller tests', () => { | ||||
|           getExecOutputSpy.mock.calls[0][1] as string[] | ||||
|         ).join(' '); | ||||
|         const expectedArgument = IS_WINDOWS | ||||
|           ? `-Quality ${inputQuality}` | ||||
|           : `--quality ${inputQuality}`; | ||||
|           ? `-Version ${inputVersion}` | ||||
|           : `--version ${inputVersion}`; | ||||
| 
 | ||||
|         expect(scriptArguments).toContain(expectedArgument); | ||||
|       } | ||||
|     ); | ||||
|       }); | ||||
| 
 | ||||
|     each(['6', '6.0', '6.0.x', '6.0.*', '6.0.X']).test( | ||||
|       `should supply 'channel' argument to the installation script if version isn't in A.B.C syntax`, | ||||
|       async inputVersion => { | ||||
|         const inputQuality = '' as QualityOptions; | ||||
|         const exitCode = 0; | ||||
|         getExecOutputSpy.mockImplementation(() => { | ||||
|           return Promise.resolve({exitCode: exitCode, stdout: '', stderr: ''}); | ||||
|         }); | ||||
|         maxSatisfyingSpy.mockImplementation(() => inputVersion); | ||||
| 
 | ||||
|         const dotnetInstaller = new installer.DotnetCoreInstaller( | ||||
|           inputVersion, | ||||
|           inputQuality | ||||
|         ); | ||||
| 
 | ||||
|         await dotnetInstaller.installDotnet(); | ||||
| 
 | ||||
|         const scriptArguments = ( | ||||
|           getExecOutputSpy.mock.calls[0][1] as string[] | ||||
|         ).join(' '); | ||||
|         const expectedArgument = IS_WINDOWS ? `-Channel 6.0` : `--channel 6.0`; | ||||
| 
 | ||||
|         expect(scriptArguments).toContain(expectedArgument); | ||||
|       } | ||||
|     ); | ||||
| 
 | ||||
|     if (IS_WINDOWS) { | ||||
|       it(`should supply '-ProxyAddress' argument to the installation script if env.variable 'https_proxy' is set`, async () => { | ||||
|         process.env['https_proxy'] = 'https://proxy.com'; | ||||
|         const inputVersion = '6.0.100'; | ||||
|         const inputQuality = '' as QualityOptions; | ||||
|       it(`should warn if the 'quality' input is set and the supplied version is in A.B.C syntax`, async () => { | ||||
|         const inputVersion = '6.0.300'; | ||||
|         const inputQuality = 'ga' as QualityOptions; | ||||
| 
 | ||||
|         getExecOutputSpy.mockImplementation(() => { | ||||
|           return Promise.resolve({exitCode: 0, stdout: '', stderr: ''}); | ||||
| @ -201,19 +108,14 @@ describe('DotnetCoreInstaller tests', () => { | ||||
| 
 | ||||
|         await dotnetInstaller.installDotnet(); | ||||
| 
 | ||||
|         const scriptArguments = ( | ||||
|           getExecOutputSpy.mock.calls[0][1] as string[] | ||||
|         ).join(' '); | ||||
| 
 | ||||
|         expect(scriptArguments).toContain( | ||||
|           `-ProxyAddress ${process.env['https_proxy']}` | ||||
|         expect(warningSpy).toHaveBeenCalledWith( | ||||
|           `'dotnet-quality' input can be used only with .NET SDK version in A.B, A.B.x, A and A.x formats where the major tag is higher than 5. You specified: ${inputVersion}. 'dotnet-quality' input is ignored.` | ||||
|         ); | ||||
|       }); | ||||
| 
 | ||||
|       it(`should supply '-ProxyBypassList' argument to the installation script if env.variable 'no_proxy' is set`, async () => { | ||||
|         process.env['no_proxy'] = 'first.url,second.url'; | ||||
|         const inputVersion = '6.0.100'; | ||||
|         const inputQuality = '' as QualityOptions; | ||||
|       it(`should warn if the 'quality' input is set and version isn't in A.B.C syntax but major tag is lower then 6`, async () => { | ||||
|         const inputVersion = '3.1'; | ||||
|         const inputQuality = 'ga' as QualityOptions; | ||||
| 
 | ||||
|         getExecOutputSpy.mockImplementation(() => { | ||||
|           return Promise.resolve({exitCode: 0, stdout: '', stderr: ''}); | ||||
| @ -227,142 +129,274 @@ describe('DotnetCoreInstaller tests', () => { | ||||
| 
 | ||||
|         await dotnetInstaller.installDotnet(); | ||||
| 
 | ||||
|         const scriptArguments = ( | ||||
|           getExecOutputSpy.mock.calls[0][1] as string[] | ||||
|         ).join(' '); | ||||
| 
 | ||||
|         expect(scriptArguments).toContain( | ||||
|           `-ProxyBypassList ${process.env['no_proxy']}` | ||||
|         expect(warningSpy).toHaveBeenCalledWith( | ||||
|           `'dotnet-quality' input can be used only with .NET SDK version in A.B, A.B.x, A and A.x formats where the major tag is higher than 5. You specified: ${inputVersion}. 'dotnet-quality' input is ignored.` | ||||
|         ); | ||||
|       }); | ||||
|     } | ||||
|   }); | ||||
|   describe('addToPath() tests', () => { | ||||
|     it(`should export DOTNET_ROOT env.var with value from DOTNET_INSTALL_DIR env.var`, async () => { | ||||
|       process.env['DOTNET_INSTALL_DIR'] = 'fictious/dotnet/install/dir'; | ||||
|       installer.DotnetCoreInstaller.addToPath(); | ||||
|       const dotnet_root = process.env['DOTNET_ROOT']; | ||||
|       expect(dotnet_root).toBe(process.env['DOTNET_INSTALL_DIR']); | ||||
| 
 | ||||
|       each(['6', '6.0', '6.0.x', '6.0.*', '6.0.X']).test( | ||||
|         `should supply 'quality' argument to the installation script if quality input is set and version (%s) is not in A.B.C syntax`, | ||||
|         async inputVersion => { | ||||
|           const inputQuality = 'ga' as QualityOptions; | ||||
|           const exitCode = 0; | ||||
|           getExecOutputSpy.mockImplementation(() => { | ||||
|             return Promise.resolve({ | ||||
|               exitCode: exitCode, | ||||
|               stdout: '', | ||||
|               stderr: '' | ||||
|             }); | ||||
|           }); | ||||
|           maxSatisfyingSpy.mockImplementation(() => inputVersion); | ||||
| 
 | ||||
|           const dotnetInstaller = new installer.DotnetCoreInstaller( | ||||
|             inputVersion, | ||||
|             inputQuality | ||||
|           ); | ||||
| 
 | ||||
|           await dotnetInstaller.installDotnet(); | ||||
| 
 | ||||
|           const scriptArguments = ( | ||||
|             getExecOutputSpy.mock.calls[0][1] as string[] | ||||
|           ).join(' '); | ||||
|           const expectedArgument = IS_WINDOWS | ||||
|             ? `-Quality ${inputQuality}` | ||||
|             : `--quality ${inputQuality}`; | ||||
| 
 | ||||
|           expect(scriptArguments).toContain(expectedArgument); | ||||
|         } | ||||
|       ); | ||||
| 
 | ||||
|       each(['6', '6.0', '6.0.x', '6.0.*', '6.0.X']).test( | ||||
|         `should supply 'channel' argument to the installation script if version (%s) isn't in A.B.C syntax`, | ||||
|         async inputVersion => { | ||||
|           const inputQuality = '' as QualityOptions; | ||||
|           const exitCode = 0; | ||||
|           getExecOutputSpy.mockImplementation(() => { | ||||
|             return Promise.resolve({ | ||||
|               exitCode: exitCode, | ||||
|               stdout: '', | ||||
|               stderr: '' | ||||
|             }); | ||||
|           }); | ||||
|           maxSatisfyingSpy.mockImplementation(() => inputVersion); | ||||
| 
 | ||||
|           const dotnetInstaller = new installer.DotnetCoreInstaller( | ||||
|             inputVersion, | ||||
|             inputQuality | ||||
|           ); | ||||
| 
 | ||||
|           await dotnetInstaller.installDotnet(); | ||||
| 
 | ||||
|           const scriptArguments = ( | ||||
|             getExecOutputSpy.mock.calls[0][1] as string[] | ||||
|           ).join(' '); | ||||
|           const expectedArgument = IS_WINDOWS | ||||
|             ? `-Channel 6.0` | ||||
|             : `--channel 6.0`; | ||||
| 
 | ||||
|           expect(scriptArguments).toContain(expectedArgument); | ||||
|         } | ||||
|       ); | ||||
| 
 | ||||
|       if (IS_WINDOWS) { | ||||
|         it(`should supply '-ProxyAddress' argument to the installation script if env.variable 'https_proxy' is set`, async () => { | ||||
|           process.env['https_proxy'] = 'https://proxy.com'; | ||||
|           const inputVersion = '6.0.100'; | ||||
|           const inputQuality = '' as QualityOptions; | ||||
| 
 | ||||
|           getExecOutputSpy.mockImplementation(() => { | ||||
|             return Promise.resolve({exitCode: 0, stdout: '', stderr: ''}); | ||||
|           }); | ||||
|           maxSatisfyingSpy.mockImplementation(() => inputVersion); | ||||
| 
 | ||||
|           const dotnetInstaller = new installer.DotnetCoreInstaller( | ||||
|             inputVersion, | ||||
|             inputQuality | ||||
|           ); | ||||
| 
 | ||||
|           await dotnetInstaller.installDotnet(); | ||||
| 
 | ||||
|           const scriptArguments = ( | ||||
|             getExecOutputSpy.mock.calls[0][1] as string[] | ||||
|           ).join(' '); | ||||
| 
 | ||||
|           expect(scriptArguments).toContain( | ||||
|             `-ProxyAddress ${process.env['https_proxy']}` | ||||
|           ); | ||||
|         }); | ||||
| 
 | ||||
|         it(`should supply '-ProxyBypassList' argument to the installation script if env.variable 'no_proxy' is set`, async () => { | ||||
|           process.env['no_proxy'] = 'first.url,second.url'; | ||||
|           const inputVersion = '6.0.100'; | ||||
|           const inputQuality = '' as QualityOptions; | ||||
| 
 | ||||
|           getExecOutputSpy.mockImplementation(() => { | ||||
|             return Promise.resolve({exitCode: 0, stdout: '', stderr: ''}); | ||||
|           }); | ||||
|           maxSatisfyingSpy.mockImplementation(() => inputVersion); | ||||
| 
 | ||||
|           const dotnetInstaller = new installer.DotnetCoreInstaller( | ||||
|             inputVersion, | ||||
|             inputQuality | ||||
|           ); | ||||
| 
 | ||||
|           await dotnetInstaller.installDotnet(); | ||||
| 
 | ||||
|           const scriptArguments = ( | ||||
|             getExecOutputSpy.mock.calls[0][1] as string[] | ||||
|           ).join(' '); | ||||
| 
 | ||||
|           expect(scriptArguments).toContain( | ||||
|             `-ProxyBypassList ${process.env['no_proxy']}` | ||||
|           ); | ||||
|         }); | ||||
|       } | ||||
|     }); | ||||
|     describe('addToPath() tests', () => { | ||||
|       it(`should export DOTNET_ROOT env.var with value from DOTNET_INSTALL_DIR env.var`, async () => { | ||||
|         process.env['DOTNET_INSTALL_DIR'] = 'fictious/dotnet/install/dir'; | ||||
|         installer.DotnetCoreInstaller.addToPath(); | ||||
|         const dotnet_root = process.env['DOTNET_ROOT']; | ||||
|         expect(dotnet_root).toBe(process.env['DOTNET_INSTALL_DIR']); | ||||
|       }); | ||||
| 
 | ||||
|     it(`should export value from the DOTNET_INSTALL_DIR env.var to the PATH`, async () => { | ||||
|       process.env['DOTNET_INSTALL_DIR'] = 'fictious/dotnet/install/dir'; | ||||
|       installer.DotnetCoreInstaller.addToPath(); | ||||
|       const path = process.env['PATH']; | ||||
|       expect(path).toContain(process.env['DOTNET_INSTALL_DIR']); | ||||
|       it(`should export value from the DOTNET_INSTALL_DIR env.var to the PATH`, async () => { | ||||
|         process.env['DOTNET_INSTALL_DIR'] = 'fictious/dotnet/install/dir'; | ||||
|         installer.DotnetCoreInstaller.addToPath(); | ||||
|         const path = process.env['PATH']; | ||||
|         expect(path).toContain(process.env['DOTNET_INSTALL_DIR']); | ||||
|       }); | ||||
|     }); | ||||
|   }); | ||||
| 
 | ||||
|   describe('DotnetVersionResolver tests', () => { | ||||
|     describe('createDotNetVersion() tests', () => { | ||||
|       each([ | ||||
|         '3.1', | ||||
|         '3.x', | ||||
|         '3.1.x', | ||||
|         '3.1.*', | ||||
|         '3.1.X', | ||||
|         '3.1.2', | ||||
|         '3.1.0-preview1' | ||||
|       ]).test( | ||||
|         'if valid version is supplied (%s), it should return version object with some value', | ||||
|         async version => { | ||||
|           const dotnetVersionResolver = new installer.DotnetVersionResolver( | ||||
|             version | ||||
|           ); | ||||
|           const versionObject = | ||||
|             await dotnetVersionResolver.createDotNetVersion(); | ||||
| 
 | ||||
|           expect(!!versionObject.value).toBe(true); | ||||
|         } | ||||
|       ); | ||||
| 
 | ||||
|       each([ | ||||
|         '.', | ||||
|         '..', | ||||
|         ' . ', | ||||
|         '. ', | ||||
|         ' .', | ||||
|         ' . . ', | ||||
|         ' .. ', | ||||
|         ' .  ', | ||||
|         '-1.-1', | ||||
|         '-1', | ||||
|         '-1.-1.-1', | ||||
|         '..3', | ||||
|         '1..3', | ||||
|         '1..', | ||||
|         '.2.3', | ||||
|         '.2.x', | ||||
|         '*.', | ||||
|         '1.2.', | ||||
|         '1.2.-abc', | ||||
|         'a.b', | ||||
|         'a.b.c', | ||||
|         'a.b.c-preview', | ||||
|         ' 0 . 1 . 2 ', | ||||
|         'invalid' | ||||
|       ]).test( | ||||
|         'if invalid version is supplied (%s), it should throw', | ||||
|         async version => { | ||||
|           const dotnetVersionResolver = new installer.DotnetVersionResolver( | ||||
|             version | ||||
|           ); | ||||
| 
 | ||||
|           await expect( | ||||
|             async () => await dotnetVersionResolver.createDotNetVersion() | ||||
|           ).rejects.toThrow(); | ||||
|         } | ||||
|       ); | ||||
| 
 | ||||
|       each(['3', '3.1', '3.1.x', '3.1.*', '3.1.X']).test( | ||||
|         "if version that can be resolved to 'channel' option is supplied (%s), it should set type to 'channel' in version object", | ||||
|         async version => { | ||||
|           const dotnetVersionResolver = new installer.DotnetVersionResolver( | ||||
|             version | ||||
|           ); | ||||
|           const versionObject = | ||||
|             await dotnetVersionResolver.createDotNetVersion(); | ||||
| 
 | ||||
|           expect(versionObject.type.toLowerCase().includes('channel')).toBe( | ||||
|             true | ||||
|           ); | ||||
|         } | ||||
|       ); | ||||
| 
 | ||||
|       each(['6.0', '6.0.x', '6.0.*', '6.0.X']).test( | ||||
|         "if version that can be resolved to 'channel' option is supplied and its major tag is >= 6 (%s), it should set type to 'channel' and qualityFlag to 'true' in version object", | ||||
|         async version => { | ||||
|           const dotnetVersionResolver = new installer.DotnetVersionResolver( | ||||
|             version | ||||
|           ); | ||||
|           const versionObject = | ||||
|             await dotnetVersionResolver.createDotNetVersion(); | ||||
| 
 | ||||
|           expect(versionObject.type.toLowerCase().includes('channel')).toBe( | ||||
|             true | ||||
|           ); | ||||
|           expect(versionObject.qualityFlag).toBe(true); | ||||
|         } | ||||
|       ); | ||||
| 
 | ||||
|       each(['3.1.2', '3.1.0-preview1']).test( | ||||
|         "if version that can be resolved to 'version' option is supplied (%s), it should set quality flag to 'false' and type to 'version' in version object", | ||||
|         async version => { | ||||
|           const dotnetVersionResolver = new installer.DotnetVersionResolver( | ||||
|             version | ||||
|           ); | ||||
|           const versionObject = | ||||
|             await dotnetVersionResolver.createDotNetVersion(); | ||||
| 
 | ||||
|           expect(versionObject.type.toLowerCase().includes('version')).toBe( | ||||
|             true | ||||
|           ); | ||||
|           expect(versionObject.qualityFlag).toBe(false); | ||||
|         } | ||||
|       ); | ||||
| 
 | ||||
|       each(['3.1.2', '3.1']).test( | ||||
|         'it should create proper line arguments for powershell/bash installation scripts', | ||||
|         async version => { | ||||
|           const dotnetVersionResolver = new installer.DotnetVersionResolver( | ||||
|             version | ||||
|           ); | ||||
|           const versionObject = | ||||
|             await dotnetVersionResolver.createDotNetVersion(); | ||||
|           const windowsRegEx = new RegExp(/^-(Version|Channel)/); | ||||
|           const nonWindowsRegEx = new RegExp(/^--(version|channel)/); | ||||
| 
 | ||||
|           if (IS_WINDOWS) { | ||||
|             expect(windowsRegEx.test(versionObject.type)).toBe(true); | ||||
|             expect(nonWindowsRegEx.test(versionObject.type)).toBe(false); | ||||
|           } else { | ||||
|             expect(nonWindowsRegEx.test(versionObject.type)).toBe(true); | ||||
|             expect(windowsRegEx.test(versionObject.type)).toBe(false); | ||||
|           } | ||||
|         } | ||||
|       ); | ||||
|     }); | ||||
|   }); | ||||
| }); | ||||
| 
 | ||||
| describe('DotnetVersionResolver tests', () => { | ||||
|   each([ | ||||
|     '3.1', | ||||
|     '3.x', | ||||
|     '3.1.x', | ||||
|     '3.1.*', | ||||
|     '3.1.X', | ||||
|     '3.1.2', | ||||
|     '3.1.0-preview1' | ||||
|   ]).test( | ||||
|     'if valid version is supplied, it should return version object with some value', | ||||
|     async version => { | ||||
|       const dotnetVersionResolver = new installer.DotnetVersionResolver( | ||||
|         version | ||||
|       ); | ||||
|       const versionObject = await dotnetVersionResolver.createDotNetVersion(); | ||||
| 
 | ||||
|       expect(!!versionObject.value).toBe(true); | ||||
|     } | ||||
|   ); | ||||
| 
 | ||||
|   each([ | ||||
|     '.', | ||||
|     '..', | ||||
|     ' . ', | ||||
|     '. ', | ||||
|     ' .', | ||||
|     ' . . ', | ||||
|     ' .. ', | ||||
|     ' .  ', | ||||
|     '-1.-1', | ||||
|     '-1', | ||||
|     '-1.-1.-1', | ||||
|     '..3', | ||||
|     '1..3', | ||||
|     '1..', | ||||
|     '.2.3', | ||||
|     '.2.x', | ||||
|     '*.', | ||||
|     '1.2.', | ||||
|     '1.2.-abc', | ||||
|     'a.b', | ||||
|     'a.b.c', | ||||
|     'a.b.c-preview', | ||||
|     ' 0 . 1 . 2 ', | ||||
|     'invalid' | ||||
|   ]).test('if invalid version is supplied, it should throw', async version => { | ||||
|     const dotnetVersionResolver = new installer.DotnetVersionResolver(version); | ||||
| 
 | ||||
|     await expect( | ||||
|       async () => await dotnetVersionResolver.createDotNetVersion() | ||||
|     ).rejects.toThrow(); | ||||
|   }); | ||||
| 
 | ||||
|   each(['3', '3.1', '3.1.x', '3.1.*', '3.1.X']).test( | ||||
|     "if version that can be resolved to 'channel' option is supplied, it should set type to 'channel' in version object", | ||||
|     async version => { | ||||
|       const dotnetVersionResolver = new installer.DotnetVersionResolver( | ||||
|         version | ||||
|       ); | ||||
|       const versionObject = await dotnetVersionResolver.createDotNetVersion(); | ||||
| 
 | ||||
|       expect(versionObject.type.toLowerCase().includes('channel')).toBe(true); | ||||
|     } | ||||
|   ); | ||||
| 
 | ||||
|   each(['6.0', '6.0.x', '6.0.*', '6.0.X']).test( | ||||
|     "if version that can be resolved to 'channel' option is supplied and its major tag is >= 6, it should set type to 'channel' and qualityFlag to 'true' in version object", | ||||
|     async version => { | ||||
|       const dotnetVersionResolver = new installer.DotnetVersionResolver( | ||||
|         version | ||||
|       ); | ||||
|       const versionObject = await dotnetVersionResolver.createDotNetVersion(); | ||||
| 
 | ||||
|       expect(versionObject.type.toLowerCase().includes('channel')).toBe(true); | ||||
|       expect(versionObject.qualityFlag).toBe(true); | ||||
|     } | ||||
|   ); | ||||
| 
 | ||||
|   each(['3.1.2', '3.1.0-preview1']).test( | ||||
|     "if version that can be resolved to 'version' option is supplied, it should set quality flag to 'false' and type to 'version' in version object", | ||||
|     async version => { | ||||
|       const dotnetVersionResolver = new installer.DotnetVersionResolver( | ||||
|         version | ||||
|       ); | ||||
|       const versionObject = await dotnetVersionResolver.createDotNetVersion(); | ||||
| 
 | ||||
|       expect(versionObject.type.toLowerCase().includes('version')).toBe(true); | ||||
|       expect(versionObject.qualityFlag).toBe(false); | ||||
|     } | ||||
|   ); | ||||
| 
 | ||||
|   each(['3.1.2', '3.1']).test( | ||||
|     'it should create proper line arguments for powershell/bash installation scripts', | ||||
|     async version => { | ||||
|       const dotnetVersionResolver = new installer.DotnetVersionResolver( | ||||
|         version | ||||
|       ); | ||||
|       const versionObject = await dotnetVersionResolver.createDotNetVersion(); | ||||
|       const windowsRegEx = new RegExp(/^-(Version|Channel)/); | ||||
|       const nonWindowsRegEx = new RegExp(/^--(version|channel)/); | ||||
| 
 | ||||
|       if (IS_WINDOWS) { | ||||
|         expect(windowsRegEx.test(versionObject.type)).toBe(true); | ||||
|         expect(nonWindowsRegEx.test(versionObject.type)).toBe(false); | ||||
|       } else { | ||||
|         expect(nonWindowsRegEx.test(versionObject.type)).toBe(true); | ||||
|         expect(windowsRegEx.test(versionObject.type)).toBe(false); | ||||
|       } | ||||
|     } | ||||
|   ); | ||||
| }); | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user