Skip to content

Commit 96f9386

Browse files
authored
feat: Use separate pipeline tasks for tests (#411)
Co-authored-by: Pim Simons <pim.simons@codit.eu>
1 parent 4084418 commit 96f9386

5 files changed

Lines changed: 98 additions & 20 deletions

File tree

build/ci-build.yml

Lines changed: 41 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,39 @@ parameters:
1818
- name: 'Package.Version.ManualTrigger'
1919
type: string
2020
default: 'preview'
21+
- name: 'UnitTests'
22+
type: object
23+
default:
24+
- name: ActiveDirectory
25+
- name: ApiManagement
26+
- name: AppService
27+
- name: DataFactory
28+
- name: DevOps
29+
- name: IntegrationAccount
30+
- name: KeyVault
31+
- name: LogicApps
32+
- name: Management
33+
- name: Security
34+
- name: Sql
35+
- name: Storage.Blob
36+
- name: Storage.FileShare
37+
- name: Storage.Table
38+
- name: 'IntegrationTests'
39+
type: object
40+
default:
41+
- name: ActiveDirectory
42+
- name: AppService
43+
- name: ARM
44+
- name: DevOps
45+
- name: IntegrationAccount
46+
- name: KeyVault
47+
- name: LogicApps
48+
- name: Management
49+
- name: Security
50+
- name: Sql
51+
- name: Storage.Blob
52+
- name: Storage.FileShare
53+
- name: Storage.Table
2154

2255
resources:
2356
repositories:
@@ -63,8 +96,9 @@ stages:
6396
dependsOn: Build
6497
condition: succeeded()
6598
jobs:
66-
- job: RunUnitTests
67-
displayName: 'Run unit tests'
99+
- ${{ each UnitTest in parameters.UnitTests }}:
100+
- job: RunUnitTests_${{replace(UnitTest.name, '.', '_')}}
101+
displayName: 'Run unit tests - ${{UnitTest.name}}'
68102
pool:
69103
vmImage: '$(Vm.Linux.Image)'
70104
steps:
@@ -76,14 +110,16 @@ stages:
76110
- template: 'templates/run-pester-tests.yml'
77111
parameters:
78112
projectName: '$(Project).Tests.Unit'
113+
testName: '$(Project).${{UnitTest.name}}'
79114

80115
- stage: IntegrationTests
81116
displayName: Integration Tests
82117
dependsOn: Build
83118
condition: succeeded()
84119
jobs:
85-
- job: RunIntegrationTests
86-
displayName: 'Run integration tests'
120+
- ${{ each IntegrationTest in parameters.IntegrationTests }}:
121+
- job: RunIntegrationTests_${{replace(IntegrationTest.name, '.', '_')}}
122+
displayName: 'Run integration tests - ${{IntegrationTest.name}}'
87123
strategy:
88124
maxParallel: 1
89125
matrix:
@@ -102,6 +138,7 @@ stages:
102138
- template: 'templates/run-pester-tests.yml'
103139
parameters:
104140
projectName: '$(Project).Tests.Integration'
141+
testName: '$(Project).${{IntegrationTest.name}}'
105142

106143
- stage: ReleaseToMyget
107144
displayName: 'Release to MyGet'

build/psgallery-release.yml

Lines changed: 41 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,39 @@ parameters:
1010
displayName: 'Prerelease string (ex. -alpha, -alpha1, -BETA, -update20171020) or none'
1111
type: 'string'
1212
default: 'none'
13+
- name: 'UnitTests'
14+
type: object
15+
default:
16+
- name: ActiveDirectory
17+
- name: ApiManagement
18+
- name: AppService
19+
- name: DataFactory
20+
- name: DevOps
21+
- name: IntegrationAccount
22+
- name: KeyVault
23+
- name: LogicApps
24+
- name: Management
25+
- name: Security
26+
- name: Sql
27+
- name: Storage.Blob
28+
- name: Storage.FileShare
29+
- name: Storage.Table
30+
- name: 'IntegrationTests'
31+
type: object
32+
default:
33+
- name: ActiveDirectory
34+
- name: AppService
35+
- name: ARM
36+
- name: DevOps
37+
- name: IntegrationAccount
38+
- name: KeyVault
39+
- name: LogicApps
40+
- name: Management
41+
- name: Security
42+
- name: Sql
43+
- name: Storage.Blob
44+
- name: Storage.FileShare
45+
- name: Storage.Table
1346

1447
resources:
1548
repositories:
@@ -56,8 +89,9 @@ stages:
5689
dependsOn: Build
5790
condition: succeeded()
5891
jobs:
59-
- job: RunUnitTests
60-
displayName: 'Run unit tests'
92+
- ${{ each UnitTest in parameters.UnitTests }}:
93+
- job: RunUnitTests_${{replace(UnitTest.name, '.', '_')}}
94+
displayName: 'Run unit tests - ${{UnitTest.name}}'
6195
pool:
6296
vmImage: '$(Vm.Linux.Image)'
6397
steps:
@@ -69,14 +103,16 @@ stages:
69103
- template: 'templates/run-pester-tests.yml'
70104
parameters:
71105
projectName: '$(Project).Tests.Unit'
106+
testName: '$(Project).${{UnitTest.name}}'
72107

73108
- stage: IntegrationTests
74109
displayName: Integration Tests
75110
dependsOn: Build
76111
condition: succeeded()
77112
jobs:
78-
- job: RunIntegrationTests
79-
displayName: 'Run integration tests'
113+
- ${{ each IntegrationTest in parameters.IntegrationTests }}:
114+
- job: RunIntegrationTests_${{replace(IntegrationTest.name, '.', '_')}}
115+
displayName: 'Run integration tests - ${{IntegrationTest.name}}'
80116
strategy:
81117
maxParallel: 1
82118
matrix:
@@ -95,6 +131,7 @@ stages:
95131
- template: 'templates/run-pester-tests.yml'
96132
parameters:
97133
projectName: '$(Project).Tests.Integration'
134+
testName: '$(Project).${{IntegrationTest.name}}'
98135

99136
- stage: Release
100137
displayName: 'Release to PowerShell Gallery'

build/templates/run-pester-tests.yml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
parameters:
22
projectName: ''
3+
testName: ''
34

45
steps:
56
- pwsh: 'wget -O - https://aka.ms/install-powershell.sh | sudo bash'
@@ -48,7 +49,7 @@ steps:
4849
Get-ChildItem -Path ./src -Filter *.psm1 -Recurse -Exclude "*Arcus.Scripting.Security*", "*.All.psm1" |
4950
% { Write-Host "Import $($_.DirectoryName) module"
5051
Import-Module -Name $_.DirectoryName -ErrorAction Stop }
51-
Invoke-Pester -Script "./src/${{ parameters.projectName }}/" -OutputFile "./pester.test.results.xml" -OutputFormat 'NUnitXML' -EnableExit
52+
Invoke-Pester -Script "./src/${{ parameters.projectName }}/${{ parameters.testName }}.tests.ps1" -OutputFile "./pester.test.results.${{ parameters.testName }}.xml" -OutputFormat 'NUnitXML' -EnableExit
5253
displayName: 'Run Pester tests'
5354
failOnStderr: true
5455
env:

src/Arcus.Scripting.Tests.Unit/Arcus.Scripting.ActiveDirectory.ps1 renamed to src/Arcus.Scripting.Tests.Unit/Arcus.Scripting.ActiveDirectory.tests.ps1

Lines changed: 13 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -109,6 +109,8 @@ InModuleScope Arcus.Scripting.ActiveDirectory {
109109

110110
Mock Write-Host {}
111111

112+
Mock Write-Warning {}
113+
112114
Mock Get-AzADApplication {
113115
$Filter | Should -Be "AppId eq '$ClientId'"
114116
return [pscustomobject] @{
@@ -138,7 +140,7 @@ InModuleScope Arcus.Scripting.ActiveDirectory {
138140
Assert-MockCalled Get-AzADServicePrincipal -Times 1
139141
Assert-MockCalled Write-Host -Exactly 1 -ParameterFilter { $Object -eq "Found role '$RoleName' on Active Directory Application '$AppName'" }
140142
Assert-MockCalled Get-MgServicePrincipalAppRoleAssignedTo -Times 1
141-
Assert-MockCalled Write-Host -Exactly 1 -ParameterFilter { $Object -eq "No role assignments found" }
143+
Assert-MockCalled Write-Warning -Exactly 1 -ParameterFilter { $Message -eq "No role assignments found in Active Directory Application '$AppName'" }
142144
}
143145
It "Providing a ClientId that has roles and also assignments should succeed" {
144146
# Arrange
@@ -305,7 +307,7 @@ InModuleScope Arcus.Scripting.ActiveDirectory {
305307
$AppName = 'SomeApp'
306308
$AssignRoleToAppName = 'SomeAppToAssignRoleTo'
307309

308-
Mock Write-Host {}
310+
Mock Write-Warning {}
309311

310312
Mock Get-AzADApplication {
311313
if ($Filter -eq "AppId eq '$ClientId'") {
@@ -346,9 +348,9 @@ InModuleScope Arcus.Scripting.ActiveDirectory {
346348
Assert-VerifiableMock
347349
Assert-MockCalled Get-AzADApplication -Times 2
348350
Assert-MockCalled Get-AzADServicePrincipal -Times 2
349-
Assert-MockCalled Write-Host -Exactly 1 -ParameterFilter { $Object -eq "Active Directory Application '$AppName' already contains the role '$RoleName'" }
351+
Assert-MockCalled Write-Warning -Exactly 1 -ParameterFilter { $Message -eq "Active Directory Application '$AppName' already contains the role '$RoleName'" }
350352
Assert-MockCalled Get-MgServicePrincipalAppRoleAssignedTo -Times 1
351-
Assert-MockCalled Write-Host -Exactly 1 -ParameterFilter { $Object -eq "Active Directory Application '$AssignRoleToAppName' already contains a role assignment for the role '$RoleName'" }
353+
Assert-MockCalled Write-Warning -Exactly 1 -ParameterFilter { $Message -eq "Active Directory Application '$AssignRoleToAppName' already contains a role assignment for the role '$RoleName'" }
352354
}
353355
It "Providing a role that already exists and does not have a role assignment should succeed" {
354356
# Arrange
@@ -361,6 +363,8 @@ InModuleScope Arcus.Scripting.ActiveDirectory {
361363

362364
Mock Write-Host {}
363365

366+
Mock Write-Warning {}
367+
364368
Mock Get-AzADApplication {
365369
if ($Filter -eq "AppId eq '$ClientId'") {
366370
return [pscustomobject] @{
@@ -413,7 +417,7 @@ InModuleScope Arcus.Scripting.ActiveDirectory {
413417
Assert-VerifiableMock
414418
Assert-MockCalled Get-AzADApplication -Times 2
415419
Assert-MockCalled Get-AzADServicePrincipal -Times 2
416-
Assert-MockCalled Write-Host -Exactly 1 -ParameterFilter { $Object -eq "Active Directory Application '$AppName' already contains the role '$RoleName'" }
420+
Assert-MockCalled Write-Warning -Exactly 1 -ParameterFilter { $Message -eq "Active Directory Application '$AppName' already contains the role '$RoleName'" }
417421
Assert-MockCalled Get-MgServicePrincipalAppRoleAssignedTo -Times 1
418422
Assert-MockCalled Get-MgServicePrincipal -Times 1
419423
Assert-MockCalled New-MgServicePrincipalAppRoleAssignment -Times 1
@@ -485,7 +489,6 @@ InModuleScope Arcus.Scripting.ActiveDirectory {
485489
Assert-VerifiableMock
486490
Assert-MockCalled Get-AzADApplication -Times 2
487491
Assert-MockCalled Get-AzADServicePrincipal -Times 2
488-
Assert-MockCalled Write-Host -Exactly 1 -ParameterFilter { $Object -eq "Active Directory Application '$AppName' does not contain the role '$RoleName', adding the role" }
489492
Assert-MockCalled Update-AzADApplication -Times 1
490493
Assert-MockCalled Write-Host -Exactly 1 -ParameterFilter { $Object -eq "Added Role '$RoleName' to Active Directory Application '$AppName'" }
491494
Assert-MockCalled Get-MgServicePrincipalAppRoleAssignedTo -Times 1
@@ -605,7 +608,7 @@ InModuleScope Arcus.Scripting.ActiveDirectory {
605608
$RemoveRoleFromClientId = '9876'
606609
$AppName = 'SomeApp'
607610

608-
Mock Write-Host {}
611+
Mock Write-Warning {}
609612

610613
Mock Get-AzADApplication {
611614
if ($Filter -eq "AppId eq '$ClientId'") {
@@ -630,7 +633,7 @@ InModuleScope Arcus.Scripting.ActiveDirectory {
630633
Assert-VerifiableMock
631634
Assert-MockCalled Get-AzADApplication -Times 2
632635
Assert-MockCalled Get-AzADServicePrincipal -Times 2
633-
Assert-MockCalled Write-Host -Exactly 1 -ParameterFilter { $Object -eq "Active Directory Application '$AppName' does not contain the role '$RoleName', skipping removal" }
636+
Assert-MockCalled Write-Warning -Exactly 1 -ParameterFilter { $Message -eq "Active Directory Application '$AppName' does not contain the role '$RoleName', skipping removal" }
634637
}
635638
It "Providing a role that has no role assignment on the Active Directory Application it should be removed from should succeed" {
636639
# Arrange
@@ -641,7 +644,7 @@ InModuleScope Arcus.Scripting.ActiveDirectory {
641644
$AppName = 'SomeApp'
642645
$RemoveRoleFromAppName = 'SomeAppToRemoveRoleFrom'
643646

644-
Mock Write-Host {}
647+
Mock Write-Warning {}
645648

646649
Mock Get-AzADApplication {
647650
if ($Filter -eq "AppId eq '$ClientId'") {
@@ -680,7 +683,7 @@ InModuleScope Arcus.Scripting.ActiveDirectory {
680683
Assert-MockCalled Get-AzADApplication -Times 2
681684
Assert-MockCalled Get-AzADServicePrincipal -Times 2
682685
Assert-MockCalled Get-MgServicePrincipalAppRoleAssignedTo -Times 1
683-
Assert-MockCalled Write-Host -Exactly 1 -ParameterFilter { $Object -eq "Role '$RoleName' is not assigned to Active Directory Application '$RemoveRoleFromAppName', skipping role assignment removal" }
686+
Assert-MockCalled Write-Warning -Exactly 1 -ParameterFilter { $Message -eq "Role '$RoleName' is not assigned to Active Directory Application '$RemoveRoleFromAppName', skipping role assignment removal" }
684687
}
685688
It "Providing a role that has a role assignment on the Active Directory Application it should be removed from should succeed" {
686689
# Arrange

src/Arcus.Scripting.Tests.Unit/Arcus.Scripting.Tests.Unit.pssproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,7 @@
7676
</ProjectReference>
7777
</ItemGroup>
7878
<ItemGroup>
79-
<Compile Include="Arcus.Scripting.ActiveDirectory.ps1" />
79+
<Compile Include="Arcus.Scripting.ActiveDirectory.tests.ps1" />
8080
<Compile Include="Arcus.Scripting.LogicApps.tests.ps1" />
8181
<Compile Include="Arcus.Scripting.Management.tests.ps1" />
8282
<Compile Include="Arcus.Scripting.ApiManagement.tests.ps1" />

0 commit comments

Comments
 (0)