@@ -189,3 +189,109 @@ func TestSubFilterRemoveAction_CancelledRemoval(t *testing.T) {
189189 require .True (t , exists )
190190 require .Equal (t , []string {"sub-1" }, ids )
191191}
192+
193+ func TestSubFilterSetAction_MultiTenant_SavesFilterForSelectedTenant (
194+ t * testing.T ,
195+ ) {
196+ mockConsole := mockinput .NewMockConsole ()
197+ ucm := newTestUserConfigManager (t )
198+
199+ mockAccount := & mockaccount.MockAccountManager {
200+ Subscriptions : []account.Subscription {
201+ {Id : "sub-1" , Name : "Alpha" , TenantId : "t1" , UserAccessTenantId : "t1" },
202+ {Id : "sub-2" , Name : "Bravo" , TenantId : "t2" , UserAccessTenantId : "t2" },
203+ {Id : "sub-3" , Name : "Charlie" , TenantId : "t2" , UserAccessTenantId : "t2" },
204+ },
205+ }
206+
207+ action := & subFilterSetAction {
208+ accountManager : mockAccount ,
209+ userConfigManager : ucm ,
210+ console : mockConsole ,
211+ }
212+
213+ // Select second tenant (index 1)
214+ mockConsole .WhenSelect (func (opts input.ConsoleOptions ) bool {
215+ return strings .Contains (opts .Message , "tenant" )
216+ }).Respond (1 )
217+
218+ // Pick the first subscription from tenant t2
219+ mockConsole .WhenMultiSelect (func (opts input.ConsoleOptions ) bool {
220+ return strings .Contains (opts .Message , "subscription" )
221+ }).RespondFn (func (opts input.ConsoleOptions ) (any , error ) {
222+ if len (opts .Options ) > 0 {
223+ return []string {opts .Options [0 ]}, nil
224+ }
225+ return []string {}, nil
226+ })
227+
228+ result , err := action .Run (t .Context ())
229+ require .NoError (t , err )
230+ require .NotNil (t , result )
231+ require .Contains (t , result .Message .Header , "Saved subscription filter" )
232+
233+ // Verify filter was saved under t2
234+ cfg , err := ucm .Load ()
235+ require .NoError (t , err )
236+ ids , exists := prompt .LoadSubscriptionFilter (cfg , "t2" )
237+ require .True (t , exists )
238+ require .Len (t , ids , 1 )
239+
240+ // Verify no filter saved under t1
241+ _ , exists = prompt .LoadSubscriptionFilter (cfg , "t1" )
242+ require .False (t , exists )
243+ }
244+
245+ func TestSubFilterRemoveAction_MultiTenant_RemovesCorrectTenant (
246+ t * testing.T ,
247+ ) {
248+ mockConsole := mockinput .NewMockConsole ()
249+ ucm := newTestUserConfigManager (t )
250+
251+ // Pre-save filters for both tenants
252+ cfg , err := ucm .Load ()
253+ require .NoError (t , err )
254+ err = prompt .SaveSubscriptionFilter (cfg , "t1" , []string {"sub-1" })
255+ require .NoError (t , err )
256+ err = prompt .SaveSubscriptionFilter (cfg , "t2" , []string {"sub-2" })
257+ require .NoError (t , err )
258+ err = ucm .Save (cfg )
259+ require .NoError (t , err )
260+
261+ mockAccount := & mockaccount.MockAccountManager {
262+ Subscriptions : []account.Subscription {
263+ {Id : "sub-1" , Name : "Alpha" , TenantId : "t1" , UserAccessTenantId : "t1" },
264+ {Id : "sub-2" , Name : "Bravo" , TenantId : "t2" , UserAccessTenantId : "t2" },
265+ },
266+ }
267+
268+ action := & subFilterRemoveAction {
269+ accountManager : mockAccount ,
270+ userConfigManager : ucm ,
271+ console : mockConsole ,
272+ }
273+
274+ // Select second tenant (index 1)
275+ mockConsole .WhenSelect (func (opts input.ConsoleOptions ) bool {
276+ return strings .Contains (opts .Message , "tenant" )
277+ }).Respond (1 )
278+
279+ // Confirm removal
280+ mockConsole .WhenConfirm (func (opts input.ConsoleOptions ) bool {
281+ return strings .Contains (opts .Message , "Remove subscription filter" )
282+ }).Respond (true )
283+
284+ result , err := action .Run (t .Context ())
285+ require .NoError (t , err )
286+ require .NotNil (t , result )
287+ require .Contains (t , result .Message .Header , "Removed subscription filter" )
288+
289+ // Verify t2 filter removed, t1 still exists
290+ cfg , err = ucm .Load ()
291+ require .NoError (t , err )
292+ _ , exists := prompt .LoadSubscriptionFilter (cfg , "t2" )
293+ require .False (t , exists )
294+ ids , exists := prompt .LoadSubscriptionFilter (cfg , "t1" )
295+ require .True (t , exists )
296+ require .Equal (t , []string {"sub-1" }, ids )
297+ }
0 commit comments