@@ -6,6 +6,12 @@ InModuleScope cosmos-db {
6
6
Use-CosmosDbInternalFlag - EnableCaching $false
7
7
8
8
. $PSScriptRoot \Utils.ps1
9
+
10
+ $ORIG_PS_EDITION = $PSVersionTable.PSEdition
11
+ }
12
+
13
+ AfterAll {
14
+ $PSVersionTable.PSEdition = $ORIG_PS_EDITION
9
15
}
10
16
11
17
Describe " Invoke-CosmosDbApiRequestWithContinuation" {
@@ -46,6 +52,45 @@ InModuleScope cosmos-db {
46
52
Assert-MockCalled Invoke-CosmosDbApiRequest - Times 1
47
53
}
48
54
55
+ It " Handles responses without continuation header for Powershell 7" {
56
+ $PSVersionTable.PSEdition = " Core"
57
+
58
+ $MOCK_VERB = " MOCK_VERB"
59
+ $MOCK_URL = " MOCK_URL"
60
+ $MOCK_BODY = @ {
61
+ Mock = " Mock"
62
+ }
63
+ $MOCK_HEADERS = @ {
64
+ Mock = " Mock" ;
65
+ }
66
+
67
+ $response = @ {
68
+ StatusCode = 200 ;
69
+ Content = " {}" ;
70
+ Headers = @ {};
71
+ }
72
+
73
+ Mock Invoke-CosmosDbApiRequest {
74
+ param ($verb , $url , $body , $headers )
75
+
76
+ $headers [" x-ms-continuation" ] | Should - BeNullOrEmpty | Out-Null
77
+
78
+ $verb | Should - Be $MOCK_VERB | Out-Null
79
+ $url | Should - Be $MOCK_URL | Out-Null
80
+ $body | Should - Be $MOCK_BODY | Out-Null
81
+ $headers | Should - Be $MOCK_HEADERS | Out-Null
82
+
83
+ $response
84
+ }
85
+
86
+ $result = Invoke-CosmosDbApiRequestWithContinuation - Verb $MOCK_VERB - Url $MOCK_URL - Body $MOCK_BODY - Headers $MOCK_HEADERS
87
+
88
+ $result | Should - BeExactly $response
89
+ @ ($result ).Count | Should - Be 1
90
+
91
+ Assert-MockCalled Invoke-CosmosDbApiRequest - Times 1
92
+ }
93
+
49
94
It " Handles continuation response headers" {
50
95
$continuationTokens = @ ($null , " 1" , " 2" , " 3" )
51
96
@@ -92,5 +137,56 @@ InModuleScope cosmos-db {
92
137
93
138
Assert-MockCalled Invoke-CosmosDbApiRequest - Times $continuationTokens.Count
94
139
}
140
+
141
+ It " Handles continuation response headers for Powershell 7" {
142
+ $continuationTokens = @ ($null , " 100" , " 200" , " 300" )
143
+
144
+ $PSVersionTable.PSEdition = " Core"
145
+
146
+ $MOCK_VERB = " MOCK_VERB"
147
+ $MOCK_URL = " MOCK_URL"
148
+ $MOCK_BODY = @ {
149
+ Mock = " Mock"
150
+ }
151
+ $MOCK_HEADERS = @ {
152
+ Mock = " Mock" ;
153
+ }
154
+
155
+ $global :idx = 0
156
+ $global :expectedResponses = @ ()
157
+
158
+ Mock Invoke-CosmosDbApiRequest {
159
+ param ($verb , $url , $body , $headers )
160
+
161
+ $verb | Should - Be $MOCK_VERB | Out-Null
162
+ $url | Should - Be $MOCK_URL | Out-Null
163
+ $body | Should - Be $MOCK_BODY | Out-Null
164
+
165
+ $headers [" x-ms-continuation" ] | Should - Be $continuationTokens [$global :idx ] | Out-Null
166
+ $global :idx = $global :idx + 1
167
+
168
+ $headers.Remove (" x-ms-continuation" )
169
+ AssertHashtablesEqual $MOCK_HEADERS $headers
170
+
171
+ $response = @ {
172
+ StatusCode = 200 ;
173
+ Content = " $global :idx " ;
174
+ Headers = @ {
175
+ # The empty here is to trick powershell into no automatically converting the single item array into just a value
176
+ " x-ms-continuation" = @ ($continuationTokens [$global :idx ], " " )
177
+ };
178
+ }
179
+
180
+ $global :expectedResponses += $response
181
+ $response
182
+ }
183
+
184
+ $result = Invoke-CosmosDbApiRequestWithContinuation - Verb $MOCK_VERB - Url $MOCK_URL - Body $MOCK_BODY - Headers $MOCK_HEADERS
185
+
186
+ $result | Should - BeExactly $global :expectedResponses
187
+ @ ($result ).Count | Should - Be $continuationTokens.Count
188
+
189
+ Assert-MockCalled Invoke-CosmosDbApiRequest - Times $continuationTokens.Count
190
+ }
95
191
}
96
192
}
0 commit comments