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`", `"dependencies`": [$Dependencies]}" $AppJson = ConvertFrom-Json $AppJsonContent return $AppJson } Mock Get-AppFromLastSuccessfulBuild {} Context 'App has no dependencies' { 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' { It 'Calls Get-AppFromLastSuccessfulBuild once' { Mock Get-AppJsonForProjectAndRepo {'{"name": "an app"}'} Get-ALDependenciesFromAppJson -AppJson (New-SampleAppJson -Path $TestDrive -DependenciesToInclude 'CleverDynamics') -ContainerName 'test' -SourcePath $TestDrive Assert-MockCalled Get-AppFromLastSuccessfulBuild -Times 1 } } Context 'App has a Microsoft dependency' { 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' { It 'Calls Get-AppFromLastSuccessfulBuild once' { Mock Get-AppJsonForProjectAndRepo {'{"name": "an app"}'} Get-ALDependenciesFromAppJson -AppJson (New-SampleAppJson -Path $TestDrive -DependenciesToInclude 'Both') -ContainerName 'test' -SourcePath $TestDrive Assert-MockCalled Get-AppFromLastSuccessfulBuild -Times 1 } } } } |