Tests/Get-ALDependenciesFromAppJson.Tests.ps1
Describe Get-ALDependenciesFromAppJson { InModuleScope Tecman.Tfs.Tools { function New-SampleAppJson { param( # path to create the new json file in [Parameter(Mandatory=$false)] [string] $Path, # the type of dependencies to create [Parameter(Mandatory=$false)] [ValidateSet('None','CleverDynamics','Microsoft','Both')] [string] $DependenciesToInclude ) switch ($DependenciesToInclude) { 'None' {} 'CleverDynamics' {$Dependencies = '{"id": "71e01521-10a7-4ce5-b172-59100577b37b", name: "CleverDynamics App", "publisher": "Clever Dynamics", "version": "1.0.0.0"}'} 'Microsoft' {$Dependencies = '{"id": "556630ef-27cc-404e-9380-8495676ad0bf", name: "Microsoft App", "publisher": "Microsoft", "version": "1.0.0.0"}'} 'Both' {$Dependencies = '{"id": "71e01521-10a7-4ce5-b172-59100577b37b", name: "CleverDynamics App", "publisher": "Clever Dynamics", "version": "1.0.0.0"},{"id": "556630ef-27cc-404e-9380-8495676ad0bf", name: "Microsoft App", "publisher": "Microsoft", "version": "1.0.0.0"}'} } $AppJsonContent = "{`"id`": `"c31c6a51-053e-40d2-a70e-c837b4c4af3a`", `"name`": `"test app`", `"publisher`": `"test publisher`", `"platform`": `"14.0.0.0`", `"dependencies`": [$Dependencies]}" $AppJson = ConvertFrom-Json $AppJsonContent Set-Content -Path (Join-Path $Path 'app.json') -Value $AppJsonContent return $AppJson } Mock Get-AppFromLastSuccessfulBuild {} Context 'App has no dependencies' { Mock Get-ProjectName {return 'Test App'} Mock Get-BranchNameForDependencies {return ''} It 'Doesn''t attempt to download anything' { Get-ALDependenciesFromAppJson -AppJson (New-SampleAppJson -Path $TestDrive -DependenciesToInclude 'None') -ContainerName 'test' -SourcePath $TestDrive Assert-MockCalled Get-AppFromLastSuccessfulBuild -Times 0 } } Context 'App has a Clever Dynamics dependency' { Mock Get-ProjectName {return 'Test App'} Mock Get-BranchNameForDependencies {return ''} It 'Calls Get-AppFromLastSuccessfulBuild once' { Mock Get-AppJsonForProjectAndRepo {'{"name": "an app"}'} {Get-ALDependenciesFromAppJson -AppJson (New-SampleAppJson -Path $TestDrive -DependenciesToInclude 'CleverDynamics') -ContainerName 'test' -SourcePath $TestDrive} | Should Throw "could not be downloaded" Assert-MockCalled Get-AppFromLastSuccessfulBuild -Times 1 } } Context 'App has a Microsoft dependency' { Mock Get-ProjectName {return 'Test App'} Mock Get-BranchNameForDependencies {return ''} It 'Doesn''t call Get-AppFromLastSuccessfulBuild' { Mock Get-AppJsonForProjectAndRepo { ConvertFrom-Json '{"id": "556630ef-27cc-404e-9380-8495676ad0bf", name: "Microsoft App", "publisher": "Microsoft", "version": "1.0.0.0"}' } Get-ALDependenciesFromAppJson -AppJson (New-SampleAppJson -Path $TestDrive -DependenciesToInclude 'Microsoft') -ContainerName 'test' -SourcePath $TestDrive Assert-MockCalled Get-AppFromLastSuccessfulBuild -Times 0 } } Context 'App has a dependency on both' { Mock Get-ProjectName {return 'Test App'} Mock Get-BranchNameForDependencies {return ''} It 'Calls Get-AppFromLastSuccessfulBuild once' { Mock Get-AppJsonForProjectAndRepo {'{"name": "an app"}'} {Get-ALDependenciesFromAppJson -AppJson (New-SampleAppJson -Path $TestDrive -DependenciesToInclude 'Both') -ContainerName 'test' -SourcePath $TestDrive} | Should Throw "could not be downloaded" Assert-MockCalled Get-AppFromLastSuccessfulBuild -Times 1 } } Context 'Dependency Branch is specified, ref exists in repo' { Mock Get-ProjectName {'test app'} Mock Get-AppFromLastSuccessfulBuild {} -ParameterFilter {$BranchName -eq 'ThisBranch'} Mock Get-AppFromLastSuccessfulBuild {Set-Content -Path (Join-Path $TestDrive 'CleverDynamics.app') -value 'app content'; return Get-ChildItem $TestDrive} -ParameterFilter {$ProjectName -eq 'CleverDynamics App'} Mock Get-BranchNameForDependencies {return 'ThisBranch'} Mock Get-RefsForRepository {return 'refs/heads/ThisBranch'} Mock Get-AppJsonForProjectAndRepo {return '{"name": "an app"}'} It 'should call Get-AppFromLastSuccessfulBuild with that branch filter' { New-Item (Join-Path $TestDrive '.alpackages') -ItemType Directory Get-ALDependenciesFromAppJson -AppJson (New-SampleAppJson -Path $TestDrive -DependenciesToInclude 'CleverDynamics') -ContainerName 'test' -SourcePath $TestDrive Assert-MockCalled Get-AppFromLastSuccessfulBuild -ParameterFilter {$BranchName -eq 'ThisBranch'} } } Context 'Dependency Branch is specified, ref does not exist in repo' { Mock Get-ProjectName {'test app'} Mock Get-AppFromLastSuccessfulBuild {} -ParameterFilter {$BranchName -eq 'ThisBranch'} Mock Get-AppFromLastSuccessfulBuild {Set-Content -Path (Join-Path $TestDrive 'CleverDynamics.app') -value 'app content'; return Get-ChildItem $TestDrive} -ParameterFilter {$ProjectName -eq 'CleverDynamics App'} Mock Get-BranchNameForDependencies {return 'ThisBranch'} Mock Get-RefsForRepository {return 'refs/heads/master'} Mock Get-AppJsonForProjectAndRepo {return '{"name": "an app"}'} It 'should call Get-AppFromLastSuccessfulBuild without branch filter' { New-Item (Join-Path $TestDrive '.alpackages') -ItemType Directory Get-ALDependenciesFromAppJson -AppJson (New-SampleAppJson -Path $TestDrive -DependenciesToInclude 'CleverDynamics') -ContainerName 'test' -SourcePath $TestDrive Assert-MockCalled Get-AppFromLastSuccessfulBuild -ParameterFilter {$BranchName -eq 'ThisBranch'} -Times 0 } } } } |