@@ -66,6 +66,14 @@ Describe "Publish-MarkdownDriveImages" {
6666 Context " Single image upload" {
6767 BeforeEach {
6868 InModuleScope PSBlogger {
69+ # Mock permission creation
70+ Mock New-GoogleDriveFilePermission {
71+ return [PSCustomObject ]@ {
72+ role = " reader"
73+ type = " anyone"
74+ }
75+ }
76+
6977 # Mock successful image upload
7078 Mock Add-GoogleDriveFile {
7179 return [PSCustomObject ]@ {
@@ -127,7 +135,15 @@ Describe "Publish-MarkdownDriveImages" {
127135
128136 InModuleScope PSBlogger {
129137 # Mock failed upload
130- Mock Add-GoogleDriveFile { return $null }
138+ Mock Add-GoogleDriveFile { return $null } - Verifiable
139+
140+ # Override previous mocks for this specific test
141+ Mock New-GoogleDriveFilePermission {
142+ return [PSCustomObject ]@ {
143+ role = " reader"
144+ type = " anyone"
145+ }
146+ }
131147 }
132148
133149 # act
@@ -149,6 +165,14 @@ Describe "Publish-MarkdownDriveImages" {
149165 # Mock upload exception
150166 Mock Add-GoogleDriveFile {
151167 throw [System.Exception ]::new(" Upload failed" )
168+ } - Verifiable
169+
170+ # Override previous mocks for this specific test
171+ Mock New-GoogleDriveFilePermission {
172+ return [PSCustomObject ]@ {
173+ role = " reader"
174+ type = " anyone"
175+ }
152176 }
153177 }
154178
@@ -168,28 +192,36 @@ Describe "Publish-MarkdownDriveImages" {
168192 Context " Multiple image upload" {
169193 BeforeEach {
170194 InModuleScope PSBlogger {
171- # Mock successful uploads for different images
195+ # Mock permission creation first
196+ Mock New-GoogleDriveFilePermission {
197+ return [PSCustomObject ]@ {
198+ role = " reader"
199+ type = " anyone"
200+ }
201+ }
202+
203+ # Mock successful uploads for different images with specific parameter filters
172204 Mock Add-GoogleDriveFile - ParameterFilter { $FileName -eq " test-image1.png" } {
173205 return [PSCustomObject ]@ {
174206 id = " mock-file-id-1"
175207 name = " test-image1.png"
176208 PublicUrl = " https://drive.google.com/uc?id=mock-file-id-1"
177209 }
178- }
210+ } - Verifiable
179211
180212 Mock Add-GoogleDriveFile - ParameterFilter { $FileName -eq " test-image2.jpg" } {
181213 return [PSCustomObject ]@ {
182214 id = " mock-file-id-2"
183215 name = " test-image2.jpg"
184216 PublicUrl = " https://drive.google.com/uc?id=mock-file-id-2"
185217 }
186- }
218+ } - Verifiable
187219
188220 Mock Set-GoogleDriveFilePermission {
189221 return [PSCustomObject ]@ { id = " permission-id" }
190- }
222+ } - Verifiable
191223
192- Mock Update-MarkdownImages { return $true }
224+ Mock Update-MarkdownImages { return $true } - Verifiable
193225 }
194226 }
195227
@@ -237,18 +269,32 @@ Describe "Publish-MarkdownDriveImages" {
237269 Set-MarkdownFile $markdownFile $markdownContent
238270
239271 InModuleScope PSBlogger {
272+ # Override mocks for this specific scenario
273+ Mock New-GoogleDriveFilePermission {
274+ return [PSCustomObject ]@ {
275+ role = " reader"
276+ type = " anyone"
277+ }
278+ }
279+
240280 # First upload succeeds, second fails
241281 Mock Add-GoogleDriveFile - ParameterFilter { $FileName -eq " test-image1.png" } {
242282 return [PSCustomObject ]@ {
243283 id = " mock-file-id-1"
244284 name = " test-image1.png"
245285 PublicUrl = " https://drive.google.com/uc?id=mock-file-id-1"
246286 }
247- }
287+ } - Verifiable
248288
249289 Mock Add-GoogleDriveFile - ParameterFilter { $FileName -eq " test-image2.jpg" } {
250290 return $null
251- }
291+ } - Verifiable
292+
293+ Mock Set-GoogleDriveFilePermission {
294+ return [PSCustomObject ]@ { id = " permission-id" }
295+ } - Verifiable
296+
297+ Mock Update-MarkdownImages { return $true } - Verifiable
252298 }
253299
254300 # act
@@ -268,17 +314,24 @@ Describe "Publish-MarkdownDriveImages" {
268314 Context " Markdown file update behavior" {
269315 BeforeEach {
270316 InModuleScope PSBlogger {
317+ Mock New-GoogleDriveFilePermission {
318+ return [PSCustomObject ]@ {
319+ role = " reader"
320+ type = " anyone"
321+ }
322+ }
323+
271324 Mock Add-GoogleDriveFile {
272325 return [PSCustomObject ]@ {
273326 id = " mock-file-id-123"
274327 name = " test-image1.png"
275328 PublicUrl = " https://drive.google.com/uc?id=mock-file-id-123"
276329 }
277- }
330+ } - Verifiable
278331
279332 Mock Set-GoogleDriveFilePermission {
280333 return [PSCustomObject ]@ { id = " permission-id" }
281- }
334+ } - Verifiable
282335 }
283336 }
284337
@@ -304,8 +357,16 @@ Describe "Publish-MarkdownDriveImages" {
304357
305358 InModuleScope PSBlogger {
306359 # All uploads fail
307- Mock Add-GoogleDriveFile { return $null }
360+ Mock Add-GoogleDriveFile { return $null } - Verifiable
308361 Mock Update-MarkdownImages { return $true }
362+
363+ # Override permission mock for this test
364+ Mock New-GoogleDriveFilePermission {
365+ return [PSCustomObject ]@ {
366+ role = " reader"
367+ type = " anyone"
368+ }
369+ }
309370 }
310371
311372 # act
@@ -320,16 +381,24 @@ Describe "Publish-MarkdownDriveImages" {
320381 Context " Permission handling" {
321382 BeforeEach {
322383 InModuleScope PSBlogger {
323- Mock Add-GoogleDriveFile {
324- $FileName = $args [1 ]
384+ Mock New-GoogleDriveFilePermission {
325385 return [PSCustomObject ]@ {
326- id = " mock-file-id-$FileName "
327- name = " $FileName "
328- PublicUrl = " https://drive.google.com/uc?id=mock-file-id-$FileName "
386+ role = " reader"
387+ type = " anyone"
329388 }
330389 }
331390
332- Mock Update-MarkdownImages { return $true }
391+ Mock Add-GoogleDriveFile {
392+ # Extract the filename parameter properly
393+ $fileName = if ($FileName ) { $FileName } else { " unknown" }
394+ return [PSCustomObject ]@ {
395+ id = " mock-file-id-$fileName "
396+ name = " $fileName "
397+ PublicUrl = " https://drive.google.com/uc?id=mock-file-id-$fileName "
398+ }
399+ } - Verifiable
400+
401+ Mock Update-MarkdownImages { return $true } - Verifiable
333402 }
334403 }
335404
@@ -362,24 +431,56 @@ Describe "Publish-MarkdownDriveImages" {
362431 " "
363432 ) -join " `n "
364433 Set-MarkdownFile $markdownFile $markdownContent
434+
435+ # Create the second test image that doesn't exist yet
436+ Set-Content - Path " TestDrive:\test-image2.png" - Value " fake png content"
365437
366438 InModuleScope PSBlogger {
439+ # Override mocks for this specific test
440+ Mock New-GoogleDriveFilePermission {
441+ return [PSCustomObject ]@ {
442+ role = " reader"
443+ type = " anyone"
444+ }
445+ }
446+
447+ # Both uploads succeed
448+ Mock Add-GoogleDriveFile - ParameterFilter { $FileName -eq " test-image1.png" } {
449+ return [PSCustomObject ]@ {
450+ id = " mock-file-id-test-image1.png"
451+ name = " test-image1.png"
452+ PublicUrl = " https://drive.google.com/uc?id=mock-file-id-test-image1.png"
453+ }
454+ } - Verifiable
455+
456+ Mock Add-GoogleDriveFile - ParameterFilter { $FileName -eq " test-image2.png" } {
457+ return [PSCustomObject ]@ {
458+ id = " mock-file-id-test-image2.png"
459+ name = " test-image2.png"
460+ PublicUrl = " https://drive.google.com/uc?id=mock-file-id-test-image2.png"
461+ }
462+ } - Verifiable
463+
464+ # First permission setting succeeds, second fails
465+ Mock Set-GoogleDriveFilePermission - ParameterFilter { $FileId -eq " mock-file-id-test-image1.png" } {
466+ return [PSCustomObject ]@ { id = " permission-id-1" }
467+ } - Verifiable
367468
368- # Permission setting fails but shouldn't stop the process
369469 Mock Set-GoogleDriveFilePermission - ParameterFilter { $FileId -eq " mock-file-id-test-image2.png" } {
370470 throw [System.Exception ]::new(" Permission failed" )
371- }
471+ } - Verifiable
472+
473+ Mock Update-MarkdownImages { return $true } - Verifiable
372474 }
373475
374476 # act & assert - should not throw
375477 {
376478 $script :result = Publish-MarkdownDriveImages - File $markdownFile
377479 } | Should -Not - Throw
378480
379- # Although the image was uploaded, permissions setting failed,
380- # so the original markdown image reference should not have been updated
381- # and only one of the images should have been processed.
382- $script :result.Count | Should - Be 1
481+ # Both images should be processed (upload succeeded), even if permission fails
482+ # The function continues processing and adds images to result even on permission failure
483+ $script :result.Count | Should - Be 2
383484 }
384485 }
385486}
0 commit comments