_TESTS/PSLocalBase.Review-83ed742.Tests.ps1
|
# Additional independent cases from the review of 83ed742. # No engine modifications; all databases are in memory. $ErrorActionPreference = 'Stop' Import-Module (Join-Path (Split-Path $PSScriptRoot -Parent) 'PSLocalBase.psd1') -Force $script:passed = 0 $script:failed = 0 function Check-Remaining([string]$Name, [scriptblock]$Body) { $db = New-LocalBase try { & $Body $db; $script:passed++; Write-Host "[PASS] $Name" } catch { $script:failed++; Write-Host "[FAIL] ${Name}: $($_.Exception.Message)" } finally { $db.close() } } Check-Remaining 'N01 - dropping the migrated path preserves a different legacy UNIQUE' { param($db) $p1 = 'a.a_a_a_a_a_a_a_a.a.a.a.a.a_a.a_a_a.a' $p2 = 'a_a.a.a.a_a.a_a.a.a.a_a_a.a.a.a_a.a_a' $clean = $p1.Replace('.', '_') $oldName = "idx_users__${clean}_43CEB4E2" [void]$db.collection('users').create() [void]$db.query("CREATE UNIQUE INDEX ""$oldName"" ON users(json_extract(doc,'`$.$p1'));") [void]$db.collection('users').createIndex($p2, @{ unique = $true }) [void]$db.collection('users').dropIndex($p2) $insert = 'INSERT INTO users(key,doc) VALUES(?,json_set(''{}'',?,?,?,?));' [void]$db.query($insert, @('u1', "`$.$p1", 'same', "`$.$p2", 'one')) $blocked = $false try { [void]$db.query($insert, @('u2', "`$.$p1", 'same', "`$.$p2", 'two')) } catch [System.InvalidOperationException] { $blocked = $true } $indexes = $db.query("SELECT name FROM sqlite_master WHERE type='index' AND name LIKE 'idx_%';") if (-not $blocked -or $indexes.Count -ne 1) { throw "Legacy UNIQUE lost: blocked=$blocked indexes=$($indexes.Count)" } } Check-Remaining 'N02 - nested union retains all branches or explicitly rejects nesting' { param($db) $db.collection('a').doc('a').set(@{ n = 1 }) $db.collection('b').doc('b').set(@{ n = 2 }) $db.collection('c').doc('c').set(@{ n = 3 }) try { $rows = @($db.collection('a').union($db.collection('b').union($db.collection('c'))).get()) } catch [System.InvalidOperationException] { if ($_.Exception.Message -match 'composite|union|nested') { return }; throw } if ($rows.Count -ne 3) { throw "Nested union returned $($rows.Count) instead of 3" } } Check-Remaining 'N03 - group create rejects before changing schema' { param($db) $db.collection('audit_a').doc('a').set(@{ n = 1 }) $blocked = $false try { [void]$db.collectionGroup('audit_*').create() } catch [System.InvalidOperationException] { $blocked = $_.Exception.Message -match 'group|composite|read.only' } if (-not $blocked -or $db.collectionExists('audit_*')) { throw "Rejected=$blocked literal wildcard table=$($db.collectionExists('audit_*'))" } } foreach ($kind in @('Double', 'Decimal')) { foreach ($operation in @('remove', 'union')) { Check-Remaining "N04 - same $kind $operation after JSON roundtrip" { param($db) $text = '1.0000000000000002' $value = if ($kind -eq 'Double') { [double]::Parse($text, [Globalization.CultureInfo]::InvariantCulture) } else { [decimal]::Parse($text, [Globalization.CultureInfo]::InvariantCulture) } $db.collection('items').doc('one').set(@{ values = @($value) }) $stored = @($db.collection('items').doc('one').get().values) $storedType = $stored[0].GetType().Name $mutation = if ($operation -eq 'remove') { [PSLocalBase]::ArrayRemove($value) } else { [PSLocalBase]::ArrayUnion($value) } $db.collection('items').doc('one').update(@{ values = $mutation }) $actual = @($db.collection('items').doc('one').get().values) $expectedCount = if ($operation -eq 'remove') { 0 } else { 1 } if ($actual.Count -ne $expectedCount) { throw "Stored type=$storedType; expected=$expectedCount actual=$($actual.Count)" } } } } Write-Host "Review 83ed742 additional cases: passed=$script:passed; failed=$script:failed" if ($script:failed -gt 0) { exit 1 } |