Internal/ConvertTo-JiraCreateMetaField.Tests.ps1
$here = Split-Path -Parent $MyInvocation.MyCommand.Path $sut = (Split-Path -Leaf $MyInvocation.MyCommand.Path).Replace(".Tests.", ".") . "$here\$sut" InModuleScope PSJira { Describe "ConvertTo-JiraCreateMetaField" { function defProp($obj, $propName, $propValue) { It "Defines the '$propName' property" { $obj.$propName | Should Be $propValue } } $sampleJson = @' { "expand": "projects", "projects": [ { "expand": "issuetypes", "issuetypes": [ { "expand": "fields", "fields": { "summary": { "required": true, "schema": { "type": "string", "system": "summary" }, "name": "Summary", "hasDefaultValue": false, "operations": [ "set" ] }, "priority": { "required": false, "schema": { "type": "priority", "system": "priority" }, "name": "Priority", "hasDefaultValue": true, "operations": [ "set" ], "allowedValues": [ { "self": "http://jiraserver.example.com/rest/api/2/priority/1", "iconUrl": "http://jiraserver.example.com/images/icons/priorities/blocker.png", "name": "Block", "id": "1" }, { "self": "http://jiraserver.example.com/rest/api/2/priority/2", "iconUrl": "http://jiraserver.example.com/images/icons/priorities/critical.png", "name": "Critical", "id": "2" }, { "self": "http://jiraserver.example.com/rest/api/2/priority/3", "iconUrl": "http://jiraserver.example.com/images/icons/priorities/major.png", "name": "Major", "id": "3" }, { "self": "http://jiraserver.example.com/rest/api/2/priority/4", "iconUrl": "http://jiraserver.example.com/images/icons/priorities/minor.png", "name": "Minor", "id": "4" }, { "self": "http://jiraserver.example.com/rest/api/2/priority/5", "iconUrl": "http://jiraserver.example.com/images/icons/priorities/trivial.png", "name": "Trivial", "id": "5" } ] } } } ] } ] } '@ $sampleObject = ConvertFrom-Json2 -InputObject $sampleJson $r = ConvertTo-JiraCreateMetaField $sampleObject It "Creates PSObjects out of JSON input" { $r | Should Not BeNullOrEmpty $r.Count | Should Be 2 } It "Sets the type name to PSJira.CreateMetaField" { # Need to use the pipeline in this case, instead of directly using the # -InputObject parameter. This is a quirk of PowerShell, arrays, and # the pipeline. ($r | Get-Member).TypeName | Should Be 'PSJira.CreateMetaField' } Context "Data validation" { # Our sample JSON includes two fields: summary and priority. $summary = ConvertTo-JiraCreateMetaField $sampleObject | Where-Object -FilterScript {$_.Name -eq 'Summary'} $priority = ConvertTo-JiraCreateMetaField $sampleObject | Where-Object -FilterScript {$_.Name -eq 'Priority'} defProp $summary 'Id' 'summary' defProp $summary 'Name' 'Summary' defProp $summary 'HasDefaultValue' $false defProp $summary 'Required' $true defProp $summary 'Operations' @('set') It "Defines the 'Schema' property if available" { $summary.Schema | Should Not BeNullOrEmpty $priority.Schema | Should Not BeNullOrEmpty } It "Defines the 'AllowedValues' property if available" { $summary.AllowedValues | Should BeNullOrEmpty $priority.AllowedValues | Should Not BeNullOrEmpty } } } } |