Tests/GenXdev.Data.SqlServer/Get-SQLServerTableData.Tests.ps1
Pester\Describe 'Get-SQLServerTableData' { Pester\BeforeAll { Microsoft.PowerShell.Utility\Write-Verbose 'Setting up test environment' $script:TestTableName = 'TestDataTable_' + (Microsoft.PowerShell.Utility\Get-Random) $script:TestServer = '.' # Check if SQL Server is available $script:SqlServerAvailable = $false try { GenXdev.Data\Invoke-SQLServerQuery -DatabaseName 'tempdb' -Server $script:TestServer -Queries "SELECT 1" $script:SqlServerAvailable = $true } catch { Microsoft.PowerShell.Utility\Write-Verbose "SQL Server not available - skipping tests" } if ($script:SqlServerAvailable) { # Create test table with data in tempdb $setupQueries = @( @" CREATE TABLE tempdb.dbo.${script:TestTableName} ( Id int IDENTITY(1,1) PRIMARY KEY, Name nvarchar(50), Category nvarchar(20), Value int ) "@, "INSERT INTO tempdb.dbo.${script:TestTableName} (Name, Category, Value) VALUES ('Item1', 'CategoryA', 100)", "INSERT INTO tempdb.dbo.${script:TestTableName} (Name, Category, Value) VALUES ('Item2', 'CategoryB', 200)", "INSERT INTO tempdb.dbo.${script:TestTableName} (Name, Category, Value) VALUES ('Item3', 'CategoryA', 300)", "INSERT INTO tempdb.dbo.${script:TestTableName} (Name, Category, Value) VALUES ('Item4', 'CategoryC', 400)", "INSERT INTO tempdb.dbo.${script:TestTableName} (Name, Category, Value) VALUES ('Item5', 'CategoryB', 500)" ) foreach ($query in $setupQueries) { GenXdev.Data\Invoke-SQLServerQuery -DatabaseName 'tempdb' -Server $script:TestServer -Queries $query } } } Pester\AfterAll { # Clean-up if ($script:SqlServerAvailable) { try { $dropQuery = "IF OBJECT_ID('tempdb.dbo.${script:TestTableName}') IS NOT NULL DROP TABLE tempdb.dbo.${script:TestTableName}" GenXdev.Data\Invoke-SQLServerQuery -DatabaseName 'tempdb' -Server $script:TestServer -Queries $dropQuery } catch { Microsoft.PowerShell.Utility\Write-Warning "Could not clean up test table: $_" } } } Pester\It 'Should retrieve table data using connection string' -Skip:(-not $script:SqlServerAvailable) { $connString = "Server=$script:TestServer;Database=tempdb;Integrated Security=true;TrustServerCertificate=true" $data = GenXdev.Data\Get-SQLServerTableData -ConnectionString $connString -TableName $script:TestTableName $data | Pester\Should -Not -BeNullOrEmpty $data.Count | Pester\Should -Be 5 } Pester\It 'Should retrieve table data using DatabaseName parameter' -Skip:(-not $script:SqlServerAvailable) { $data = GenXdev.Data\Get-SQLServerTableData -DatabaseName 'tempdb' -Server $script:TestServer -TableName $script:TestTableName $data | Pester\Should -Not -BeNullOrEmpty $data.Count | Pester\Should -Be 5 } Pester\It 'Should limit results when Count parameter is specified' -Skip:(-not $script:SqlServerAvailable) { $data = GenXdev.Data\Get-SQLServerTableData -DatabaseName 'tempdb' -Server $script:TestServer -TableName $script:TestTableName -Count 3 $data | Pester\Should -Not -BeNullOrEmpty $data.Count | Pester\Should -Be 3 } } |