@@ -169,6 +169,131 @@ Describe 'Test-SqlDscIsDatabasePrincipal' -Tag 'Public' {
169169 $result | Should - BeFalse
170170 }
171171 }
172+
173+ Context ' When using the Refresh parameter' {
174+ BeforeAll {
175+ $script :refreshCalled = $false
176+
177+ $mockServerObjectWithRefresh = New-Object - TypeName ' Microsoft.SqlServer.Management.Smo.Server' |
178+ Add-Member - MemberType ' ScriptProperty' - Name ' Databases' - Value {
179+ return @ {
180+ ' AdventureWorks' = New-Object - TypeName Object |
181+ Add-Member - MemberType ' NoteProperty' - Name Name - Value ' AdventureWorks' - PassThru |
182+ Add-Member - MemberType ' ScriptProperty' - Name ' Users' - Value {
183+ return @ {
184+ ' Zebes\SamusAran' = New-Object - TypeName Object |
185+ Add-Member - MemberType ' NoteProperty' - Name ' Name' - Value ' Zebes\SamusAran' - PassThru - Force
186+ } | Add-Member - MemberType ' ScriptMethod' - Name ' Refresh' - Value {
187+ $script :refreshCalled = $true
188+ } - PassThru - Force
189+ } - PassThru |
190+ Add-Member - MemberType ' ScriptProperty' - Name ' ApplicationRoles' - Value {
191+ return @ {} | Add-Member - MemberType ' ScriptMethod' - Name ' Refresh' - Value {
192+ # Mock refresh for ApplicationRoles
193+ } - PassThru - Force
194+ } - PassThru |
195+ Add-Member - MemberType ' ScriptProperty' - Name ' Roles' - Value {
196+ return @ {} | Add-Member - MemberType ' ScriptMethod' - Name ' Refresh' - Value {
197+ # Mock refresh for Roles
198+ } - PassThru - Force
199+ } - PassThru - Force
200+ } | Add-Member - MemberType ' ScriptMethod' - Name ' Refresh' - Value {
201+ # Mock refresh for Databases collection
202+ $script :refreshCalled = $true
203+ } - PassThru - Force
204+ } - PassThru - Force
205+ }
206+
207+ It ' Should call Refresh on the database collections when Refresh parameter is specified' {
208+ $result = Test-SqlDscIsDatabasePrincipal - ServerObject $mockServerObjectWithRefresh - DatabaseName ' AdventureWorks' - Name ' Zebes\SamusAran' - Refresh
209+
210+ $result | Should - BeTrue
211+ $script :refreshCalled | Should - BeTrue
212+ }
213+
214+ It ' Should only refresh Users collection when other types are excluded' {
215+ $script :usersRefreshed = $false
216+ $script :rolesRefreshed = $false
217+ $script :appRolesRefreshed = $false
218+
219+ $mockServerObjectOptimized = New-Object - TypeName ' Microsoft.SqlServer.Management.Smo.Server' |
220+ Add-Member - MemberType ' ScriptProperty' - Name ' Databases' - Value {
221+ return @ {
222+ ' AdventureWorks' = New-Object - TypeName Object |
223+ Add-Member - MemberType ' NoteProperty' - Name Name - Value ' AdventureWorks' - PassThru |
224+ Add-Member - MemberType ' ScriptProperty' - Name ' Users' - Value {
225+ return @ {
226+ ' Zebes\SamusAran' = New-Object - TypeName Object |
227+ Add-Member - MemberType ' NoteProperty' - Name ' Name' - Value ' Zebes\SamusAran' - PassThru - Force
228+ } | Add-Member - MemberType ' ScriptMethod' - Name ' Refresh' - Value {
229+ $script :usersRefreshed = $true
230+ } - PassThru - Force
231+ } - PassThru |
232+ Add-Member - MemberType ' ScriptProperty' - Name ' ApplicationRoles' - Value {
233+ return @ {} | Add-Member - MemberType ' ScriptMethod' - Name ' Refresh' - Value {
234+ $script :appRolesRefreshed = $true
235+ } - PassThru - Force
236+ } - PassThru |
237+ Add-Member - MemberType ' ScriptProperty' - Name ' Roles' - Value {
238+ return @ {} | Add-Member - MemberType ' ScriptMethod' - Name ' Refresh' - Value {
239+ $script :rolesRefreshed = $true
240+ } - PassThru - Force
241+ } - PassThru - Force
242+ } | Add-Member - MemberType ' ScriptMethod' - Name ' Refresh' - Value {
243+ # Mock refresh for Databases collection
244+ } - PassThru - Force
245+ } - PassThru - Force
246+
247+ $result = Test-SqlDscIsDatabasePrincipal - ServerObject $mockServerObjectOptimized - DatabaseName ' AdventureWorks' - Name ' Zebes\SamusAran' - Refresh - ExcludeRoles - ExcludeApplicationRoles
248+
249+ $result | Should - BeTrue
250+ $script :usersRefreshed | Should - BeTrue
251+ $script :rolesRefreshed | Should - BeFalse
252+ $script :appRolesRefreshed | Should - BeFalse
253+ }
254+
255+ It ' Should only refresh Roles collection when Users and ApplicationRoles are excluded' {
256+ $script :usersRefreshed = $false
257+ $script :rolesRefreshed = $false
258+ $script :appRolesRefreshed = $false
259+
260+ $mockServerObjectOptimized = New-Object - TypeName ' Microsoft.SqlServer.Management.Smo.Server' |
261+ Add-Member - MemberType ' ScriptProperty' - Name ' Databases' - Value {
262+ return @ {
263+ ' AdventureWorks' = New-Object - TypeName Object |
264+ Add-Member - MemberType ' NoteProperty' - Name Name - Value ' AdventureWorks' - PassThru |
265+ Add-Member - MemberType ' ScriptProperty' - Name ' Users' - Value {
266+ return @ {} | Add-Member - MemberType ' ScriptMethod' - Name ' Refresh' - Value {
267+ $script :usersRefreshed = $true
268+ } - PassThru - Force
269+ } - PassThru |
270+ Add-Member - MemberType ' ScriptProperty' - Name ' ApplicationRoles' - Value {
271+ return @ {} | Add-Member - MemberType ' ScriptMethod' - Name ' Refresh' - Value {
272+ $script :appRolesRefreshed = $true
273+ } - PassThru - Force
274+ } - PassThru |
275+ Add-Member - MemberType ' ScriptProperty' - Name ' Roles' - Value {
276+ return @ {
277+ ' TestRole' = New-Object - TypeName Object |
278+ Add-Member - MemberType ' NoteProperty' - Name ' Name' - Value ' TestRole' - PassThru |
279+ Add-Member - MemberType ' NoteProperty' - Name ' IsFixedRole' - Value $false - PassThru - Force
280+ } | Add-Member - MemberType ' ScriptMethod' - Name ' Refresh' - Value {
281+ $script :rolesRefreshed = $true
282+ } - PassThru - Force
283+ } - PassThru - Force
284+ } | Add-Member - MemberType ' ScriptMethod' - Name ' Refresh' - Value {
285+ # Mock refresh for Databases collection
286+ } - PassThru - Force
287+ } - PassThru - Force
288+
289+ $result = Test-SqlDscIsDatabasePrincipal - ServerObject $mockServerObjectOptimized - DatabaseName ' AdventureWorks' - Name ' TestRole' - Refresh - ExcludeUsers - ExcludeApplicationRoles
290+
291+ $result | Should - BeTrue
292+ $script :usersRefreshed | Should - BeFalse
293+ $script :rolesRefreshed | Should - BeTrue
294+ $script :appRolesRefreshed | Should - BeFalse
295+ }
296+ }
172297 }
173298
174299 Context ' When the specified principal is a application role' {
0 commit comments