Tests/PSDataKit.Tests.ps1
$ModuleManifestName = 'PSDataKit.psd1' $ModuleManifestPath = "$PSScriptRoot\..\$ModuleManifestName" Remove-Module "PSDataKit" -Force -ErrorAction Ignore Import-Module -Name $ModuleManifestPath -Force Write-Host "Remove and Import PSDataKit module" Describe 'Module Manifest Tests' { It 'Passes Test-ModuleManifest' { Test-ModuleManifest -Path $ModuleManifestPath | Should Not BeNullOrEmpty $? | Should Be $true } } InModuleScope PSDataKit { Describe 'PSDataKit merging capabilities (Merge-Hashtables)' { Context "secondary parameter" { It 'Merge with $null secondary parameter ' { $primary = @{ foo = "foo" bar = "bar" } $secondary = $null $result = Merge-Hashtables -primary $primary -secondary $secondary $result | Should -BeExactly $primary } It 'Merge with BeNullOrEmpty values inside secondary parameter ' { $primary = @{ nullValue = "nullValue" emptyValue = "emptyValue" emptyArray = "emptyArray" emptyHashtable = "emptyHashtable" } $secondary = @{ emptyValue = "" nullValue = $null emptyArray = @() emptyHashtable = @{ } } $result = Merge-Hashtables -primary $primary -secondary $secondary $result.nullValue | Should -Be $primary.nullValue $result.emptyValue | Should -Be $primary.emptyValue $result.emptyArray | Should -Be $primary.emptyArray $result.emptyHashtable | Should -Be $primary.emptyHashtable $result.Test | Should -Be $primary.Test } It 'Merge with BeNullOrEmpty values inside secondary parameter when primary is hashtable' { $primary = @{ foo = @{ bar = "bar" } } $secondary = @{ foo = $null } $result = Merge-Hashtables -primary $primary -secondary $secondary $result.foo | Should -Be $primary.foo } It "Merge and does not alter the input parameters" { $primary = @{ Key1 = @{ test = "IsThere" } Key2 = @{ test = "IsThere" } } $secondary = @{ Key1 = @{ test = "Will be lost" remain = "Will remain" } Key3 = "Will be added" } $primaryBefore = $primary.Clone() $secondaryBefore = $secondary.Clone() $expectedResults = @{ Key1 = @{ test = "IsThere" remain = "Will remain" } Key2 = @{ test = "IsThere" } Key3 = "Will be added" } $result = Merge-Hashtables -primary $primary -secondary $secondary ($result | ConvertTo-Json) | Should -Be ( $expectedResults | ConvertTo-Json) ($primary | ConvertTo-Json) | Should -Be ($primaryBefore | ConvertTo-Json) ($secondary | ConvertTo-Json) | Should -Be ($secondaryBefore | ConvertTo-Json ) } } } Describe 'Get-OrElse' { $mockedEmptyArray = @() $mockedSampleArray = @(1, 2, 3, 2, 1) $mockedEmptyHashTable = @{ } $mockedSampleHashTable = @{a = 1; b = "2" } $mockedEmptyObject = New-Object -TypeName psobject $mockedSampleObject = New-Object -TypeName psobject $mockedSampleObject | Add-Member -MemberType NoteProperty -Name "UserName" -Value "SampleName" Context 'with pipelined value' { It 'returns default if value is null' { Get-OrElse $Null "default" | Should Be "default" } It 'returns default if value is empty' { Get-OrElse "" "default" | Should Be "default" } It 'returns value if value is neither null or empty' { Get-OrElse "a" "default" | Should Be "a" Get-OrElse 1 "default" | Should Be 1 Get-OrElse " " "default" | Should Be " " } } Context 'with pipeline value' { It 'returns default if value is null' { $Null | Get-OrElse -Default "default" | Should Be "default" } It 'returns default if value is empty' { "" | Get-OrElse -Default "default" | Should Be "default" } It 'returns value if value is neither null or empty' { "a" | Get-OrElse -Default "default" | Should Be "a" 1 | Get-OrElse -Default "default" | Should Be 1 " " | Get-OrElse -Default "default" | Should Be " " } } Context 'with pipeline objects' { It 'should return default if array is empty' { $mockedEmptyArray | Get-OrElse -Default "default" | Should Be "default" } It 'should return default if hashtable is empty' { $mockedEmptyHashTable | Get-OrElse -Default "default" | Should Be "default" } It 'should return object if object not empty' { $mockedSampleObject | Get-OrElse -Default "default" | Should Be $mockedSampleObject } It 'should return object if new object PSObject initialized but without members' { $mockedEmptyObject | Get-OrElse -Default "default" | Should Be $mockedEmptyObject } } Context 'with parametrized value' { It 'should return provided hashmap' { Get-OrElse -Value $mockedSampleHashTable -Default "default" | Should Be $mockedSampleHashTable } It 'should return provided array' { Get-OrElse -Value $mockedSampleArray -Default "default" | Should Be $mockedSampleArray } } } Describe 'Get-MetadataObjectFromRelease' { $Env:AGENT_DISABLELOGPLUGIN_TESTFILEPUBLISHERPLUGIN = "AGENT_DISABLELOGPLUGIN_TESTFILEPUBLISHERPLUGIN" $Env:AGENT_DISABLELOGPLUGIN_TESTRESULTLOGPLUGIN = "AGENT_DISABLELOGPLUGIN_TESTRESULTLOGPLUGIN" $Env:AGENT_HOMEDIRECTORY = "AGENT_HOMEDIRECTORY" $Env:AGENT_ID = "AGENT_ID" $Env:AGENT_JOBNAME = "AGENT_JOBNAME" $Env:AGENT_JOBSTATUS = "AGENT_JOBSTATUS" $Env:AGENT_MACHINENAME = "AGENT_MACHINENAME" $Env:AGENT_NAME = "AGENT_NAME" $Env:AGENT_OS = "AGENT_OS" $Env:AGENT_OSARCHITECTURE = "AGENT_OSARCHITECTURE" $Env:AGENT_RELEASEDIRECTORY = "AGENT_RELEASEDIRECTORY" $Env:AGENT_RETAINDEFAULTENCODING = "AGENT_RETAINDEFAULTENCODING" $Env:AGENT_ROOTDIRECTORY = "AGENT_ROOTDIRECTORY" $Env:AGENT_SERVEROMDIRECTORY = "AGENT_SERVEROMDIRECTORY" $Env:AGENT_TEMPDIRECTORY = "AGENT_TEMPDIRECTORY" $Env:AGENT_TOOLSDIRECTORY = "AGENT_TOOLSDIRECTORY" $Env:AGENT_VERSION = "AGENT_VERSION" $Env:AGENT_WORKFOLDER = "AGENT_WORKFOLDER" $Env:BUILD_BUILDID = "BUILD_BUILDID" $Env:BUILD_BUILDNUMBER = "BUILD_BUILDNUMBER" $Env:BUILD_BUILDURI = "BUILD_BUILDURI" $Env:BUILD_DEFINITIONID = "BUILD_DEFINITIONID" $Env:BUILD_DEFINITIONNAME = "BUILD_DEFINITIONNAME" $Env:BUILD_PROJECTID = "BUILD_PROJECTID" $Env:BUILD_PROJECTNAME = "BUILD_PROJECTNAME" $Env:BUILD_REPOSITORY_PROVIDER = "BUILD_REPOSITORY_PROVIDER" $Env:BUILD_REQUESTEDFOR = "BUILD_REQUESTEDFOR" $Env:BUILD_REQUESTEDFORID = "BUILD_REQUESTEDFORID" $Env:BUILD_SOURCEBRANCH = "BUILD_SOURCEBRANCH" $Env:BUILD_SOURCEBRANCHNAME = "BUILD_SOURCEBRANCHNAME" $Env:BUILD_SOURCEVERSION = "BUILD_SOURCEVERSION" $Env:BUILD_TYPE = "BUILD_TYPE" $Env:RELEASE_ARTIFACTS_INFORMATIONMODEL_BUILDID = "RELEASE_ARTIFACTS_INFORMATIONMODEL_BUILDID" $Env:RELEASE_ARTIFACTS_INFORMATIONMODEL_BUILDNUMBER = "RELEASE_ARTIFACTS_INFORMATIONMODEL_BUILDNUMBER" $Env:RELEASE_ARTIFACTS_INFORMATIONMODEL_BUILDURI = "RELEASE_ARTIFACTS_INFORMATIONMODEL_BUILDURI" $Env:RELEASE_ARTIFACTS_INFORMATIONMODEL_DEFINITIONID = "RELEASE_ARTIFACTS_INFORMATIONMODEL_DEFINITIONID" $Env:RELEASE_ARTIFACTS_INFORMATIONMODEL_DEFINITIONNAME = "RELEASE_ARTIFACTS_INFORMATIONMODEL_DEFINITIONNAME" $Env:RELEASE_ARTIFACTS_INFORMATIONMODEL_PROJECTID = "RELEASE_ARTIFACTS_INFORMATIONMODEL_PROJECTID" $Env:RELEASE_ARTIFACTS_INFORMATIONMODEL_PROJECTNAME = "RELEASE_ARTIFACTS_INFORMATIONMODEL_PROJECTNAME" $Env:RELEASE_ARTIFACTS_INFORMATIONMODEL_REPOSITORY_ID = "RELEASE_ARTIFACTS_INFORMATIONMODEL_REPOSITORY_ID" $Env:RELEASE_ARTIFACTS_INFORMATIONMODEL_REPOSITORY_NAME = "RELEASE_ARTIFACTS_INFORMATIONMODEL_REPOSITORY_NAME" $Env:RELEASE_ARTIFACTS_INFORMATIONMODEL_REPOSITORY_PROVIDER = "RELEASE_ARTIFACTS_INFORMATIONMODEL_REPOSITORY_PROVIDER" $Env:RELEASE_ARTIFACTS_INFORMATIONMODEL_REQUESTEDFOR = "RELEASE_ARTIFACTS_INFORMATIONMODEL_REQUESTEDFOR" $Env:RELEASE_ARTIFACTS_INFORMATIONMODEL_REQUESTEDFORID = "RELEASE_ARTIFACTS_INFORMATIONMODEL_REQUESTEDFORID" $Env:RELEASE_ARTIFACTS_INFORMATIONMODEL_SOURCEBRANCH = "RELEASE_ARTIFACTS_INFORMATIONMODEL_SOURCEBRANCH" $Env:RELEASE_ARTIFACTS_INFORMATIONMODEL_SOURCEBRANCHNAME = "RELEASE_ARTIFACTS_INFORMATIONMODEL_SOURCEBRANCHNAME" $Env:RELEASE_ARTIFACTS_INFORMATIONMODEL_SOURCEVERSION = "RELEASE_ARTIFACTS_INFORMATIONMODEL_SOURCEVERSION" $Env:RELEASE_ARTIFACTS_INFORMATIONMODEL_TYPE = "RELEASE_ARTIFACTS_INFORMATIONMODEL_TYPE" $Env:RELEASE_ARTIFACTS_MT_PORTAL_BUILDID = "RELEASE_ARTIFACTS_MT_PORTAL_BUILDID" $Env:RELEASE_ARTIFACTS_MT_PORTAL_BUILDNUMBER = "RELEASE_ARTIFACTS_MT_PORTAL_BUILDNUMBER" $Env:RELEASE_ARTIFACTS_MT_PORTAL_BUILDURI = "RELEASE_ARTIFACTS_MT_PORTAL_BUILDURI" $Env:RELEASE_ARTIFACTS_MT_PORTAL_DEFINITIONID = "RELEASE_ARTIFACTS_MT_PORTAL_DEFINITIONID" $Env:RELEASE_ARTIFACTS_MT_PORTAL_DEFINITIONNAME = "RELEASE_ARTIFACTS_MT_PORTAL_DEFINITIONNAME" $Env:RELEASE_ARTIFACTS_MT_PORTAL_PROJECTID = "RELEASE_ARTIFACTS_MT_PORTAL_PROJECTID" $Env:RELEASE_ARTIFACTS_MT_PORTAL_PROJECTNAME = "RELEASE_ARTIFACTS_MT_PORTAL_PROJECTNAME" $Env:RELEASE_ARTIFACTS_MT_PORTAL_REPOSITORY_PROVIDER = "RELEASE_ARTIFACTS_MT_PORTAL_REPOSITORY_PROVIDER" $Env:RELEASE_ARTIFACTS_MT_PORTAL_REQUESTEDFOR = "RELEASE_ARTIFACTS_MT_PORTAL_REQUESTEDFOR" $Env:RELEASE_ARTIFACTS_MT_PORTAL_REQUESTEDFORID = "RELEASE_ARTIFACTS_MT_PORTAL_REQUESTEDFORID" $Env:RELEASE_ARTIFACTS_MT_PORTAL_SOURCEBRANCH = "RELEASE_ARTIFACTS_MT_PORTAL_SOURCEBRANCH" $Env:RELEASE_ARTIFACTS_MT_PORTAL_SOURCEBRANCHNAME = "RELEASE_ARTIFACTS_MT_PORTAL_SOURCEBRANCHNAME" $Env:RELEASE_ARTIFACTS_MT_PORTAL_SOURCEVERSION = "RELEASE_ARTIFACTS_MT_PORTAL_SOURCEVERSION" $Env:RELEASE_ARTIFACTS_MT_PORTAL_TYPE = "RELEASE_ARTIFACTS_MT_PORTAL_TYPE" $Env:RELEASE_ARTIFACTS_TYPEDEFREG_BUILDID = "RELEASE_ARTIFACTS_TYPEDEFREG_BUILDID" $Env:RELEASE_ARTIFACTS_TYPEDEFREG_BUILDNUMBER = "RELEASE_ARTIFACTS_TYPEDEFREG_BUILDNUMBER" $Env:RELEASE_ARTIFACTS_TYPEDEFREG_BUILDURI = "RELEASE_ARTIFACTS_TYPEDEFREG_BUILDURI" $Env:RELEASE_ARTIFACTS_TYPEDEFREG_DEFINITIONID = "RELEASE_ARTIFACTS_TYPEDEFREG_DEFINITIONID" $Env:RELEASE_ARTIFACTS_TYPEDEFREG_DEFINITIONNAME = "RELEASE_ARTIFACTS_TYPEDEFREG_DEFINITIONNAME" $Env:RELEASE_ARTIFACTS_TYPEDEFREG_PROJECTID = "RELEASE_ARTIFACTS_TYPEDEFREG_PROJECTID" $Env:RELEASE_ARTIFACTS_TYPEDEFREG_PROJECTNAME = "RELEASE_ARTIFACTS_TYPEDEFREG_PROJECTNAME" $Env:RELEASE_ARTIFACTS_TYPEDEFREG_REPOSITORY_ID = "RELEASE_ARTIFACTS_TYPEDEFREG_REPOSITORY_ID" $Env:RELEASE_ARTIFACTS_TYPEDEFREG_REPOSITORY_NAME = "RELEASE_ARTIFACTS_TYPEDEFREG_REPOSITORY_NAME" $Env:RELEASE_ARTIFACTS_TYPEDEFREG_REPOSITORY_PROVIDER = "RELEASE_ARTIFACTS_TYPEDEFREG_REPOSITORY_PROVIDER" $Env:RELEASE_ARTIFACTS_TYPEDEFREG_REQUESTEDFOR = "RELEASE_ARTIFACTS_TYPEDEFREG_REQUESTEDFOR" $Env:RELEASE_ARTIFACTS_TYPEDEFREG_REQUESTEDFORID = "RELEASE_ARTIFACTS_TYPEDEFREG_REQUESTEDFORID" $Env:RELEASE_ARTIFACTS_TYPEDEFREG_SOURCEBRANCH = "RELEASE_ARTIFACTS_TYPEDEFREG_SOURCEBRANCH" $Env:RELEASE_ARTIFACTS_TYPEDEFREG_SOURCEBRANCHNAME = "RELEASE_ARTIFACTS_TYPEDEFREG_SOURCEBRANCHNAME" $Env:RELEASE_ARTIFACTS_TYPEDEFREG_SOURCEVERSION = "RELEASE_ARTIFACTS_TYPEDEFREG_SOURCEVERSION" $Env:RELEASE_ARTIFACTS_TYPEDEFREG_TYPE = "RELEASE_ARTIFACTS_TYPEDEFREG_TYPE" $Env:RELEASE_ATTEMPTNUMBER = "RELEASE_ATTEMPTNUMBER" $Env:RELEASE_DEFINITIONENVIRONMENTID = "RELEASE_DEFINITIONENVIRONMENTID" $Env:RELEASE_DEFINITIONID = "RELEASE_DEFINITIONID" $Env:RELEASE_DEFINITIONNAME = "RELEASE_DEFINITIONNAME" $Env:RELEASE_DEPLOYMENT_REQUESTEDFOR = "RELEASE_DEPLOYMENT_REQUESTEDFOR" $Env:RELEASE_DEPLOYMENT_REQUESTEDFOREMAIL = "RELEASE_DEPLOYMENT_REQUESTEDFOREMAIL" $Env:RELEASE_DEPLOYMENT_REQUESTEDFORID = "RELEASE_DEPLOYMENT_REQUESTEDFORID" $Env:RELEASE_DEPLOYMENT_STARTTIME = "RELEASE_DEPLOYMENT_STARTTIME" $Env:RELEASE_DEPLOYMENTID = "RELEASE_DEPLOYMENTID" $Env:RELEASE_DEPLOYPHASEID = "RELEASE_DEPLOYPHASEID" $Env:RELEASE_ENVIRONMENTID = "RELEASE_ENVIRONMENTID" $Env:RELEASE_ENVIRONMENTNAME = "RELEASE_ENVIRONMENTNAME" $Env:RELEASE_ENVIRONMENTS_CREATERELEASEMETADATA_STATUS = "RELEASE_ENVIRONMENTS_CREATERELEASEMETADATA_STATUS" $Env:RELEASE_ENVIRONMENTURI = "RELEASE_ENVIRONMENTURI" $Env:RELEASE_PRIMARYARTIFACTSOURCEALIAS = "RELEASE_PRIMARYARTIFACTSOURCEALIAS" $Env:RELEASE_REASON = "RELEASE_REASON" $Env:RELEASE_RELEASEDESCRIPTION = "RELEASE_RELEASEDESCRIPTION" $Env:RELEASE_RELEASEID = "RELEASE_RELEASEID" $Env:RELEASE_RELEASENAME = "RELEASE_RELEASENAME" $Env:RELEASE_RELEASEURI = "RELEASE_RELEASEURI" $Env:RELEASE_RELEASEWEBURL = "RELEASE_RELEASEWEBURL" $Env:RELEASE_REQUESTEDFOR = "RELEASE_REQUESTEDFOR" $Env:RELEASE_REQUESTEDFOREMAIL = "RELEASE_REQUESTEDFOREMAIL" $Env:RELEASE_REQUESTEDFORID = "RELEASE_REQUESTEDFORID" $Env:RELEASE_SKIPARTIFACTSDOWNLOAD = "RELEASE_SKIPARTIFACTSDOWNLOAD" $Env:RELEASE_TRIGGERINGARTIFACT_ALIAS = "RELEASE_TRIGGERINGARTIFACT_ALIAS" $Env:SYSTEM_TEAMPROJECT = "TEAMPROJECT" $Env:SYSTEM_TEAMFOUNDATIONCOLLECTIONURI = "TEAMFOUNDATIONCOLLECTIONURI" Context 'Test generate artficat object' { New-Item -ItemType "directory" -Path "TestDrive:\Artifacts" New-Item -ItemType "directory" -Path "TestDrive:\Artifacts\InformationModel" New-Item -ItemType "directory" -Path "TestDrive:\Artifacts\TypeDefReg" New-Item -ItemType "directory" -Path "TestDrive:\Artifacts\MT_PORTAL" $metadataObject = Get-MetadataObjectFromRelease -ArtifactsDirectory "TestDrive:\Artifacts" $metadataObject.teamfoundationcollectionuri | Should Be $Env:SYSTEM_TEAMFOUNDATIONCOLLECTIONURI $metadataObject.resources.InformationModel.triggeredBy | Should Be $Env:RELEASE_ARTIFACTS_INFORMATIONMODEL_REQUESTEDFOR # Write-Host ($metadataObject | ConvertTo-Json) } } } |