diff --git a/Functions/DCIM/DCIM.ps1 b/Functions/DCIM/DCIM.ps1
index 3e3bb6d..8ec9ee6 100644
--- a/Functions/DCIM/DCIM.ps1
+++ b/Functions/DCIM/DCIM.ps1
@@ -124,4 +124,349 @@ function ValidateDCIMChoice {
)
ValidateChoice -MajorObject 'DCIM' -ChoiceName $PSCmdlet.ParameterSetName -ProvidedValue $ProvidedValue
-}
\ No newline at end of file
+}
+
+#region GET Commands
+function Get-NetboxDCIMDevice {
+ [CmdletBinding()]
+ #region Parameters
+ param
+ (
+ [uint16]$Limit,
+
+ [uint16]$Offset,
+
+ [uint16[]]$Id,
+
+ [string]$Query,
+
+ [string]$Name,
+
+ [uint16]$Manufacturer_Id,
+
+ [string]$Manufacturer,
+
+ [uint16]$Device_Type_Id,
+
+ [uint16]$Role_Id,
+
+ [string]$Role,
+
+ [uint16]$Tenant_Id,
+
+ [string]$Tenant,
+
+ [uint16]$Platform_Id,
+
+ [string]$Platform,
+
+ [string]$Asset_Tag,
+
+ [uint16]$Site_Id,
+
+ [string]$Site,
+
+ [uint16]$Rack_Group_Id,
+
+ [uint16]$Rack_Id,
+
+ [uint16]$Cluster_Id,
+
+ [uint16]$Model,
+
+ [object]$Status,
+
+ [bool]$Is_Full_Depth,
+
+ [bool]$Is_Console_Server,
+
+ [bool]$Is_PDU,
+
+ [bool]$Is_Network_Device,
+
+ [string]$MAC_Address,
+
+ [bool]$Has_Primary_IP,
+
+ [uint16]$Virtual_Chassis_Id,
+
+ [uint16]$Position,
+
+ [string]$Serial,
+
+ [switch]$Raw
+ )
+ #endregion Parameters
+
+ if ($null -ne $Status) {
+ $PSBoundParameters.Status = ValidateDCIMChoice -ProvidedValue $Status -DeviceStatus
+ }
+
+ $Segments = [System.Collections.ArrayList]::new(@('dcim', 'devices'))
+
+ $URIComponents = BuildURIComponents -URISegments $Segments.Clone() -ParametersDictionary $PSBoundParameters -SkipParameterByName 'Raw'
+
+ $URI = BuildNewURI -Segments $URIComponents.Segments -Parameters $URIComponents.Parameters
+
+ InvokeNetboxRequest -URI $URI -Raw:$Raw
+}
+
+function Get-NetboxDCIMDeviceType {
+ [CmdletBinding()]
+ #region Parameters
+ param
+ (
+ [uint16]$Offset,
+
+ [uint16]$Limit,
+
+ [uint16[]]$Id,
+
+ [string]$Query,
+
+ [string]$Slug,
+
+ [string]$Manufacturer,
+
+ [uint16]$Manufacturer_Id,
+
+ [string]$Model,
+
+ [string]$Part_Number,
+
+ [uint16]$U_Height,
+
+ [bool]$Is_Full_Depth,
+
+ [bool]$Is_Console_Server,
+
+ [bool]$Is_PDU,
+
+ [bool]$Is_Network_Device,
+
+ [uint16]$Subdevice_Role,
+
+ [switch]$Raw
+ )
+ #endregion Parameters
+
+ $Segments = [System.Collections.ArrayList]::new(@('dcim', 'device-types'))
+
+ $URIComponents = BuildURIComponents -URISegments $Segments.Clone() -ParametersDictionary $PSBoundParameters -SkipParameterByName 'Raw'
+
+ $URI = BuildNewURI -Segments $URIComponents.Segments -Parameters $URIComponents.Parameters
+
+ InvokeNetboxRequest -URI $URI -Raw:$Raw
+}
+
+function Get-NetboxDCIMDeviceRole {
+ [CmdletBinding()]
+ param
+ (
+ [uint16]$Limit,
+
+ [uint16]$Offset,
+
+ [Parameter(ParameterSetName = 'ById')]
+ [uint16[]]$Id,
+
+ [string]$Name,
+
+ [string]$Slug,
+
+ [string]$Color,
+
+ [bool]$VM_Role,
+
+ [switch]$Raw
+ )
+
+ switch ($PSCmdlet.ParameterSetName) {
+ 'ById' {
+ foreach ($DRId in $Id) {
+ $Segments = [System.Collections.ArrayList]::new(@('dcim', 'device-roles', $DRId))
+
+ $URIComponents = BuildURIComponents -URISegments $Segments -ParametersDictionary $PSBoundParameters -SkipParameterByName 'Id', 'Raw'
+
+ $URI = BuildNewURI -Segments $URIComponents.Segments -Parameters $URIComponents.Parameters
+
+ InvokeNetboxRequest -URI $URI -Raw:$Raw
+ }
+
+ break
+ }
+
+ default {
+ $Segments = [System.Collections.ArrayList]::new(@('dcim', 'device-roles'))
+
+ $URIComponents = BuildURIComponents -URISegments $Segments -ParametersDictionary $PSBoundParameters -SkipParameterByName 'Raw'
+
+ $URI = BuildNewURI -Segments $URIComponents.Segments -Parameters $URIComponents.Parameters
+
+ InvokeNetboxRequest -URI $URI -Raw:$Raw
+ }
+ }
+}
+#endregion GET Commands
+
+
+#region ADD/NEW commands
+function New-NetboxDCIMDevice {
+ [CmdletBinding()]
+ [OutputType([pscustomobject])]
+ #region Parameters
+ param
+ (
+ [Parameter(Mandatory = $true)]
+ [string]$Name,
+
+ [Parameter(Mandatory = $true)]
+ [object]$Device_Role,
+
+ [Parameter(Mandatory = $true)]
+ [object]$Device_Type,
+
+ [Parameter(Mandatory = $true)]
+ [uint16]$Site,
+
+ [object]$Status = 'Active',
+
+ [uint16]$Platform,
+
+ [uint16]$Tenant,
+
+ [uint16]$Cluster,
+
+ [uint16]$Rack,
+
+ [uint16]$Position,
+
+ [object]$Face,
+
+ [string]$Serial,
+
+ [string]$Asset_Tag,
+
+ [uint16]$Virtual_Chassis,
+
+ [uint16]$VC_Priority,
+
+ [uint16]$VC_Position,
+
+ [uint16]$Primary_IP4,
+
+ [uint16]$Primary_IP6,
+
+ [string]$Comments,
+
+ [hashtable]$Custom_Fields
+ )
+ #endregion Parameters
+
+ if ($null -ne $Device_Role) {
+ # Validate device role?
+ }
+
+ if ($null -ne $Device_Type) {
+ # Validate device type?
+ }
+
+ if ($null -ne $Status) {
+ $PSBoundParameters.Status = ValidateDCIMChoice -ProvidedValue $Status -DeviceStatus
+ }
+
+ if ($null -ne $Face) {
+ $PSBoundParameters.Face = ValidateDCIMChoice -ProvidedValue $Face -DeviceFace
+ }
+
+ $Segments = [System.Collections.ArrayList]::new(@('dcim', 'devices'))
+
+ $URIComponents = BuildURIComponents -URISegments $Segments.Clone() -ParametersDictionary $PSBoundParameters
+
+ $URI = BuildNewURI -Segments $URIComponents.Segments
+
+ InvokeNetboxRequest -URI $URI -Body $URIComponents.Parameters -Method POST
+}
+
+#endregion ADD/NEW commands
+
+
+#region SET Commands
+function Set-NetboxDCIMDevice {
+
+}
+
+#endregion SET Commands
+
+
+#region REMOVE commands
+function Remove-NetboxDCIMDevice {
+<#
+ .SYNOPSIS
+ Delete a device
+
+ .DESCRIPTION
+ Deletes a device from Netbox by ID
+
+ .PARAMETER Id
+ Database ID of the device
+
+ .PARAMETER Force
+ Force deletion without any prompts
+
+ .EXAMPLE
+ PS C:\> Remove-NetboxDCIMDevice -Id $value1
+
+ .NOTES
+ Additional information about the function.
+#>
+
+ [CmdletBinding(ConfirmImpact = 'High',
+ SupportsShouldProcess = $true)]
+ param
+ (
+ [Parameter(Mandatory = $true,
+ ValueFromPipelineByPropertyName = $true)]
+ [uint16[]]$Id,
+
+ [switch]$Force
+ )
+
+ begin {
+
+ }
+
+ process {
+ foreach ($DeviceID in $Id) {
+ $CurrentDevice = Get-NetboxDCIMDevice -Id $DeviceID -ErrorAction Stop
+
+ if ($Force -or $pscmdlet.ShouldProcess("Name: $($CurrentDevice.Name) | ID: $($CurrentDevice.Id)", "Remove")) {
+ $Segments = [System.Collections.ArrayList]::new(@('dcim', 'devices', $CurrentDevice.Id))
+
+ $URI = BuildNewURI -Segments $Segments
+
+ InvokeNetboxRequest -URI $URI -Method DELETE
+ }
+ }
+ }
+
+ end {
+
+ }
+}
+#endregion REMOVE commands
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/NetboxPS.psproj b/NetboxPS.psproj
index 2028c89..a036551 100644
--- a/NetboxPS.psproj
+++ b/NetboxPS.psproj
@@ -29,7 +29,7 @@
Tests\IPAMChoices.json
Tests\VirtualizationChoices.json
Functions\DCIM\DCIM.ps1
- Tests\DCIM.Tests.ps1
+ Tests\DCIM.Devices.Tests.ps1
R:\Netbox\NetboxPS\Test-Module.ps1
\ No newline at end of file
diff --git a/Tests/DCIM.Devices.Tests.ps1 b/Tests/DCIM.Devices.Tests.ps1
new file mode 100644
index 0000000..3d252a7
--- /dev/null
+++ b/Tests/DCIM.Devices.Tests.ps1
@@ -0,0 +1,457 @@
+<#
+ .NOTES
+ ===========================================================================
+ Created with: SAPIEN Technologies, Inc., PowerShell Studio 2018 v5.5.152
+ Created on: 5/22/2018 4:48 PM
+ Created by: Ben Claussen
+ Organization: NEOnet
+ Filename: DCIM.Tests.ps1
+ ===========================================================================
+ .DESCRIPTION
+ DCIM tests.
+#>
+
+Import-Module Pester
+Remove-Module NetboxPS -Force -ErrorAction SilentlyContinue
+
+$ModulePath = "$PSScriptRoot\..\dist\NetboxPS.psd1"
+
+if (Test-Path $ModulePath) {
+ Import-Module $ModulePath -ErrorAction Stop
+}
+
+Describe -Name "DCIM Tests" -Tag 'DCIM', 'Devices' -Fixture {
+ Mock -CommandName 'CheckNetboxIsConnected' -Verifiable -ModuleName 'NetboxPS' -MockWith {
+ return $true
+ }
+
+ Mock -CommandName 'Invoke-RestMethod' -Verifiable -ModuleName 'NetboxPS' -MockWith {
+ # Return a hashtable of the items we would normally pass to Invoke-RestMethod
+ return [ordered]@{
+ 'Method' = $Method
+ 'Uri' = $Uri
+ 'Headers' = $Headers
+ 'Timeout' = $Timeout
+ 'ContentType' = $ContentType
+ 'Body' = $Body
+ }
+ }
+
+ Mock -CommandName 'Get-NetboxCredential' -Verifiable -ModuleName 'NetboxPS' -MockWith {
+ return [PSCredential]::new('notapplicable', (ConvertTo-SecureString -String "faketoken" -AsPlainText -Force))
+ }
+
+ Mock -CommandName 'Get-NetboxHostname' -Verifiable -ModuleName 'NetboxPS' -MockWith {
+ return 'netbox.domain.com'
+ }
+
+ InModuleScope -ModuleName 'NetboxPS' -ScriptBlock {
+ $script:NetboxConfig.Choices.DCIM = (Get-Content "$PSScriptRoot\DCIMChoices.json" -ErrorAction Stop | ConvertFrom-Json)
+
+ Context -Name "Get-NetboxDCIMDevice" -Fixture {
+ It "Should request the default number of devices" {
+ $Result = Get-NetboxDCIMDevice
+
+ Assert-VerifiableMock
+
+ $Result.Method | Should -Be 'GET'
+ $Result.Uri | Should -Be 'https://netbox.domain.com/api/dcim/devices/'
+ $Result.Headers.Keys.Count | Should -BeExactly 1
+ }
+
+ It "Should request with a limit and offset" {
+ $Result = Get-NetboxDCIMDevice -Limit 10 -Offset 100
+
+ Assert-VerifiableMock
+
+ $Result.Method | Should -Be 'GET'
+ $Result.Uri | Should -Be 'https://netbox.domain.com/api/dcim/devices/?offset=100&limit=10'
+ $Result.Headers.Keys.Count | Should -BeExactly 1
+ }
+
+ It "Should request with a query" {
+ $Result = Get-NetboxDCIMDevice -Query 'testdevice'
+
+ Assert-VerifiableMock
+
+ $Result.Method | Should -Be 'GET'
+ $Result.Uri | Should -Be 'https://netbox.domain.com/api/dcim/devices/?q=testdevice'
+ $Result.Headers.Keys.Count | Should -BeExactly 1
+ }
+
+ It "Should request with an escaped query" {
+ $Result = Get-NetboxDCIMDevice -Query 'test device'
+
+ Assert-VerifiableMock
+
+ $Result.Method | Should -Be 'GET'
+ $Result.Uri | Should -Be 'https://netbox.domain.com/api/dcim/devices/?q=test+device'
+ $Result.Headers.Keys.Count | Should -BeExactly 1
+ }
+
+ It "Should request with a name" {
+ $Result = Get-NetboxDCIMDevice -Name 'testdevice'
+
+ Assert-VerifiableMock
+
+ $Result.Method | Should -Be 'GET'
+ $Result.Uri | Should -Be 'https://netbox.domain.com/api/dcim/devices/?name=testdevice'
+ $Result.Headers.Keys.Count | Should -BeExactly 1
+ }
+
+ It "Should request with a single ID" {
+ $Result = Get-NetboxDCIMDevice -Id 10
+
+ Assert-VerifiableMock
+
+ $Result.Method | Should -Be 'GET'
+ $Result.Uri | Should -Be 'https://netbox.domain.com/api/dcim/devices/10/'
+ $Result.Headers.Keys.Count | Should -BeExactly 1
+ }
+
+ It "Should request with multiple IDs" {
+ $Result = Get-NetboxDCIMDevice -Id 10, 12, 15
+
+ Assert-VerifiableMock
+
+ $Result.Method | Should -Be 'GET'
+ $Result.Uri | Should -Be 'https://netbox.domain.com/api/dcim/devices/?id__in=10,12,15'
+ $Result.Headers.Keys.Count | Should -BeExactly 1
+ }
+
+ It "Should request a status" {
+ $Result = Get-NetboxDCIMDevice -Status 'Active'
+
+ Assert-VerifiableMock
+
+ $Result.Method | Should -Be 'GET'
+ $Result.Uri | Should -Be 'https://netbox.domain.com/api/dcim/devices/?status=1'
+ $Result.Headers.Keys.Count | Should -BeExactly 1
+ }
+
+ It "Should throw for an invalid status" {
+ {
+ Get-NetboxDCIMDevice -Status 'Fake'
+ } | Should -Throw
+ }
+
+ It "Should request devices that are a PDU" {
+ $Result = Get-NetboxDCIMDevice -Is_PDU $True
+
+ Assert-VerifiableMock
+
+ $Result.Method | Should -Be 'GET'
+ $Result.Uri | Should -BeExactly 'https://netbox.domain.com/api/dcim/devices/?is_pdu=True'
+ $Result.Headers.Keys.Count | Should -BeExactly 1
+ }
+ }
+
+ Context -Name "Get-NetboxDCIMDeviceType" -Fixture {
+ It "Should request the default number of devices types" {
+ $Result = Get-NetboxDCIMDeviceType
+
+ Assert-VerifiableMock
+
+ $Result.Method | Should -Be 'GET'
+ $Result.Uri | Should -Be 'https://netbox.domain.com/api/dcim/device-types/'
+ $Result.Headers.Keys.Count | Should -BeExactly 1
+ }
+
+ It "Should request with a limit and offset" {
+ $Result = Get-NetboxDCIMDeviceType -Limit 10 -Offset 100
+
+ Assert-VerifiableMock
+
+ $Result.Method | Should -Be 'GET'
+ $Result.Uri | Should -Be 'https://netbox.domain.com/api/dcim/device-types/?offset=100&limit=10'
+ $Result.Headers.Keys.Count | Should -BeExactly 1
+ }
+
+ It "Should request with a query" {
+ $Result = Get-NetboxDCIMDeviceType -Query 'testdevice'
+
+ Assert-VerifiableMock
+
+ $Result.Method | Should -Be 'GET'
+ $Result.Uri | Should -Be 'https://netbox.domain.com/api/dcim/device-types/?q=testdevice'
+ $Result.Headers.Keys.Count | Should -BeExactly 1
+ }
+
+ It "Should request with an escaped query" {
+ $Result = Get-NetboxDCIMDeviceType -Query 'test device'
+
+ Assert-VerifiableMock
+
+ $Result.Method | Should -Be 'GET'
+ $Result.Uri | Should -Be 'https://netbox.domain.com/api/dcim/device-types/?q=test+device'
+ $Result.Headers.Keys.Count | Should -BeExactly 1
+ }
+
+ It "Should request with a slug" {
+ $Result = Get-NetboxDCIMDeviceType -Slug 'testdevice'
+
+ Assert-VerifiableMock
+
+ $Result.Method | Should -Be 'GET'
+ $Result.Uri | Should -Be 'https://netbox.domain.com/api/dcim/device-types/?slug=testdevice'
+ $Result.Headers.Keys.Count | Should -BeExactly 1
+ }
+
+ It "Should request with a single ID" {
+ $Result = Get-NetboxDCIMDeviceType -Id 10
+
+ Assert-VerifiableMock
+
+ $Result.Method | Should -Be 'GET'
+ $Result.Uri | Should -Be 'https://netbox.domain.com/api/dcim/device-types/10/'
+ $Result.Headers.Keys.Count | Should -BeExactly 1
+ }
+
+ It "Should request with multiple IDs" {
+ $Result = Get-NetboxDCIMDeviceType -Id 10, 12, 15
+
+ Assert-VerifiableMock
+
+ $Result.Method | Should -Be 'GET'
+ $Result.Uri | Should -Be 'https://netbox.domain.com/api/dcim/device-types/?id__in=10,12,15'
+ $Result.Headers.Keys.Count | Should -BeExactly 1
+ }
+
+ It "Should request a device type that is PDU" {
+ $Result = Get-NetboxDCIMDeviceType -Is_PDU $true
+
+ Assert-VerifiableMock
+
+ $Result.Method | Should -Be 'GET'
+ $Result.Uri | Should -Be 'https://netbox.domain.com/api/dcim/device-types/?is_pdu=True'
+ $Result.Headers.Keys.Count | Should -BeExactly 1
+ }
+ }
+
+ Context -Name "Get-NetboxDCIMDeviceRole" -Fixture {
+ It "Should request the default number of devices types" {
+ $Result = Get-NetboxDCIMDeviceRole
+
+ Assert-VerifiableMock
+ Assert-MockCalled -CommandName "Invoke-RestMethod" -Times 1 -Scope 'It' -Exactly
+
+ $Result.Method | Should -Be 'GET'
+ $Result.Uri | Should -Be 'https://netbox.domain.com/api/dcim/device-roles/'
+ $Result.Headers.Keys.Count | Should -BeExactly 1
+ }
+
+ It "Should request a device role by Id" {
+ $Result = Get-NetboxDCIMDeviceRole -Id 10
+
+ Assert-VerifiableMock
+ Assert-MockCalled -CommandName "Invoke-RestMethod" -Times 1 -Scope 'It' -Exactly
+
+ $Result.Method | Should -Be 'GET'
+ $Result.Uri | Should -Be 'https://netbox.domain.com/api/dcim/device-roles/10/'
+ $Result.Headers.Keys.Count | Should -BeExactly 1
+ }
+
+ It "Should request multiple roles by Id" {
+ $Result = Get-NetboxDCIMDeviceRole -Id 10, 12
+
+ Assert-VerifiableMock
+ Assert-MockCalled -CommandName "Invoke-RestMethod" -Times 2 -Scope 'It' -Exactly
+
+ $Result.Method | Should -Be 'GET', 'GET'
+ $Result.Uri | Should -Be 'https://netbox.domain.com/api/dcim/device-roles/10/', 'https://netbox.domain.com/api/dcim/device-roles/12/'
+ $Result.Headers.Keys.Count | Should -BeExactly 2
+ }
+
+ It "Should request single role by Id and color" {
+ $Result = Get-NetboxDCIMDeviceRole -Id 10 -Color '0fab12'
+
+ Assert-VerifiableMock
+ Assert-MockCalled -CommandName "Invoke-RestMethod" -Times 1 -Scope 'It' -Exactly
+
+ $Result.Method | Should -Be 'GET'
+ $Result.Uri | Should -Be 'https://netbox.domain.com/api/dcim/device-roles/10/?color=0fab12'
+ $Result.Headers.Keys.Count | Should -BeExactly 1
+ }
+
+ It "Should request multiple roles by Id and color" {
+ $Result = Get-NetboxDCIMDeviceRole -Id 10, 12 -Color '0fab12'
+
+ Assert-VerifiableMock
+ Assert-MockCalled -CommandName "Invoke-RestMethod" -Times 2 -Scope 'It' -Exactly
+
+ $Result.Method | Should -Be 'GET', 'GET'
+ $Result.Uri | Should -Be 'https://netbox.domain.com/api/dcim/device-roles/10/?color=0fab12', 'https://netbox.domain.com/api/dcim/device-roles/12/?color=0fab12'
+ $Result.Headers.Keys.Count | Should -BeExactly 2
+ }
+
+ It "Should request with a limit and offset" {
+ $Result = Get-NetboxDCIMDeviceRole -Limit 10 -Offset 100
+
+ Assert-VerifiableMock
+ Assert-MockCalled -CommandName "Invoke-RestMethod" -Times 1 -Scope 'It' -Exactly
+
+ $Result.Method | Should -Be 'GET'
+ $Result.Uri | Should -Be 'https://netbox.domain.com/api/dcim/device-roles/?offset=100&limit=10'
+ $Result.Headers.Keys.Count | Should -BeExactly 1
+ }
+
+ It "Should request with a slug" {
+ $Result = Get-NetboxDCIMDeviceRole -Slug 'testdevice'
+
+ Assert-VerifiableMock
+ Assert-MockCalled -CommandName "Invoke-RestMethod" -Times 1 -Scope 'It' -Exactly
+
+ $Result.Method | Should -Be 'GET'
+ $Result.Uri | Should -Be 'https://netbox.domain.com/api/dcim/device-roles/?slug=testdevice'
+ $Result.Headers.Keys.Count | Should -BeExactly 1
+ }
+
+ It "Should request with a name" {
+ $Result = Get-NetboxDCIMDeviceRole -Name 'TestRole'
+
+ Assert-VerifiableMock
+ Assert-MockCalled -CommandName "Invoke-RestMethod" -Times 1 -Scope 'It' -Exactly
+
+ $Result.Method | Should -Be 'GET'
+ $Result.Uri | Should -Be 'https://netbox.domain.com/api/dcim/device-roles/?name=TestRole'
+ $Result.Headers.Keys.Count | Should -BeExactly 1
+ }
+
+ It "Should request those that are VM role" {
+ $Result = Get-NetboxDCIMDeviceRole -VM_Role $true
+
+ Assert-VerifiableMock
+ Assert-MockCalled -CommandName "Invoke-RestMethod" -Times 1 -Scope 'It' -Exactly
+
+ $Result.Method | Should -Be 'GET'
+ $Result.Uri | Should -Be 'https://netbox.domain.com/api/dcim/device-roles/?vm_role=True'
+ $Result.Headers.Keys.Count | Should -BeExactly 1
+ }
+ }
+
+ Context -Name "New-NetboxDCIMDevice" -Fixture {
+ It "Should create a new device" {
+ $Result = New-NetboxDCIMDevice -Name "newdevice" -Device_Role 4 -Device_Type 10 -Site 1 -Face 0
+
+ Assert-MockCalled -CommandName 'Invoke-RestMethod' -Times 1 -Exactly -Scope 'It'
+
+ $Result.Method | Should -Be 'POST'
+ $Result.Uri | Should -Be 'https://netbox.domain.com/api/dcim/devices/'
+ $Result.Headers.Keys.Count | Should -BeExactly 1
+ $Result.Body | Should -Be '{"site":1,"face":0,"name":"newdevice","status":1,"device_type":10,"device_role":4}'
+ }
+
+ It "Should throw because of an invalid status" {
+ {
+ New-NetboxDCIMDevice -Name "newdevice" -Device_Role 4 -Device_Type 10 -Site 1 -Status 5555
+ } | Should -Throw
+ }
+ }
+
+
+ Mock -CommandName "Get-NetboxDCIMDevice" -ModuleName NetboxPS -MockWith {
+ return [pscustomobject]@{
+ 'Id' = $Id
+ 'Name' = $Name
+ }
+ }
+
+ Context -Name "Set-NetboxDCIMDevice" -Fixture {
+ It "Should set a device to a new name" {
+ $Result = Set-NetboxDCIMDevice -Id 1234 -Name 'newtestname' -Force
+
+ Assert-VerifiableMock
+ Assert-MockCalled -CommandName 'Get-NetboxDCIMDevice' -Times 1 -Exactly -Scope 'It'
+
+ $Result.Method | Should -Be 'PATCH'
+ $Result.URI | Should -Be 'https://netbox.domain.com/api/dcim/devices/1234/'
+ $Result.Headers.Keys.Count | Should -BeExactly 1
+ $Result.Body | Should -Be '{"name":"newtestname"}'
+ }
+ }
+
+ Context -Name "Remove-NetboxDCIMDevice" -Fixture {
+ It "Should remove a device" {
+ $Result = Remove-NetboxDCIMDevice -Id 10 -Force
+
+ Assert-VerifiableMock
+ Assert-MockCalled -CommandName 'Get-NetboxDCIMDevice' -Times 1 -Exactly -Scope 'It'
+
+ $Result.Method | Should -Be 'DELETE'
+ $Result.URI | Should -Be 'https://netbox.domain.com/api/dcim/devices/10/'
+ $Result.Headers.Keys.Count | Should -BeExactly 1
+ }
+
+ It "Should remove multiple devices" {
+ $Result = Remove-NetboxDCIMDevice -Id 10, 12 -Force
+
+ Assert-VerifiableMock
+ Assert-MockCalled -CommandName 'Get-NetboxDCIMDevice' -Times 2 -Exactly -Scope 'It'
+
+ $Result.Method | Should -Be 'DELETE', 'DELETE'
+ $Result.URI | Should -Be 'https://netbox.domain.com/api/dcim/devices/10/', 'https://netbox.domain.com/api/dcim/devices/12/'
+ $Result.Headers.Keys.Count | Should -BeExactly 2
+ }
+
+ It "Should remove a device from the pipeline" {
+ $Result = Get-NetboxDCIMDevice -Id 20 | Remove-NetboxDCIMDevice -Force
+
+ Assert-VerifiableMock
+ Assert-MockCalled -CommandName 'Get-NetboxDCIMDevice' -Times 2 -Exactly -Scope 'It'
+
+ $Result.Method | Should -Be 'DELETE'
+ $Result.URI | Should -Be 'https://netbox.domain.com/api/dcim/devices/20/'
+ $Result.Headers.Keys.Count | Should -BeExactly 1
+ }
+
+ It "Should remove mulitple devices from the pipeline" {
+ $Result = @(
+ [pscustomobject]@{
+ 'Id' = 30
+ },
+ [pscustomobject]@{
+ 'Id' = 40
+ }
+ ) | Remove-NetboxDCIMDevice -Force
+
+ Assert-VerifiableMock
+ Assert-MockCalled -CommandName 'Get-NetboxDCIMDevice' -Times 2 -Exactly -Scope 'It'
+
+ $Result.Method | Should -Be 'DELETE', 'DELETE'
+ $Result.URI | Should -Be 'https://netbox.domain.com/api/dcim/devices/30/', 'https://netbox.domain.com/api/dcim/devices/40/'
+ $Result.Headers.Keys.Count | Should -BeExactly 2
+ }
+ }
+ }
+}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Tests/DCIM.Tests.ps1 b/Tests/DCIM.Tests.ps1
deleted file mode 100644
index 759e80b..0000000
--- a/Tests/DCIM.Tests.ps1
+++ /dev/null
@@ -1,53 +0,0 @@
-<#
- .NOTES
- ===========================================================================
- Created with: SAPIEN Technologies, Inc., PowerShell Studio 2018 v5.5.152
- Created on: 5/22/2018 4:48 PM
- Created by: Ben Claussen
- Organization: NEOnet
- Filename: DCIM.Tests.ps1
- ===========================================================================
- .DESCRIPTION
- DCIM tests.
-#>
-
-Import-Module Pester
-Remove-Module NetboxPS -Force -ErrorAction SilentlyContinue
-
-$ModulePath = "$PSScriptRoot\..\dist\NetboxPS.psd1"
-
-if (Test-Path $ModulePath) {
- Import-Module $ModulePath -ErrorAction Stop
-}
-
-Describe -Name "DCIM Tests" -Tag 'DCIM' -Fixture {
- Mock -CommandName 'CheckNetboxIsConnected' -Verifiable -ModuleName 'NetboxPS' -MockWith {
- return $true
- }
-
- Mock -CommandName 'Invoke-RestMethod' -Verifiable -ModuleName 'NetboxPS' -MockWith {
- # Return a hashtable of the items we would normally pass to Invoke-RestMethod
- return [ordered]@{
- 'Method' = $Method
- 'Uri' = $Uri
- 'Headers' = $Headers
- 'Timeout' = $Timeout
- 'ContentType' = $ContentType
- 'Body' = $Body
- }
- }
-
- Mock -CommandName 'Get-NetboxCredential' -Verifiable -ModuleName 'NetboxPS' -MockWith {
- return [PSCredential]::new('notapplicable', (ConvertTo-SecureString -String "faketoken" -AsPlainText -Force))
- }
-
- Mock -CommandName 'Get-NetboxHostname' -Verifiable -ModuleName 'NetboxPS' -MockWith {
- return 'netbox.domain.com'
- }
-
- InModuleScope -ModuleName 'NetboxPS' -ScriptBlock {
- $script:NetboxConfig.Choices.DCIM = (Get-Content "$PSScriptRoot\DCIMChoices.json" -ErrorAction Stop | ConvertFrom-Json)
-
-
- }
-}
\ No newline at end of file