@@ -240,4 +240,70 @@ public void testIsGlobalContext() {
240240 assertTrue (QualifiedSubject .isGlobalContext ("default" , ":" + GLOBAL_CONTEXT_NAME + ":" ));
241241 assertTrue (QualifiedSubject .isGlobalContext ("default" , ":" + GLOBAL_CONTEXT_NAME ));
242242 }
243+
244+ @ Test
245+ public void testIsContext () {
246+ // Test null qualified subject - should return true (default context)
247+ assertTrue (QualifiedSubject .isContext ("default" , null ));
248+ assertTrue (QualifiedSubject .isContext ("tenant1" , null ));
249+
250+ // Test empty string qualified subject - should return true (default context)
251+ assertTrue (QualifiedSubject .isContext ("default" , "" ));
252+ assertTrue (QualifiedSubject .isContext ("tenant1" , "tenant1_" ));
253+
254+ // Test context with empty subject - should return true
255+ assertTrue (QualifiedSubject .isContext ("default" , ":.ctx1:" ));
256+ assertTrue (QualifiedSubject .isContext ("tenant1" , "tenant1_:.ctx1:" ));
257+ assertTrue (QualifiedSubject .isContext ("default" , ":.prod:" ));
258+ assertTrue (QualifiedSubject .isContext ("tenant1" , "tenant1_:.prod:" ));
259+
260+ // Test context with missing last colon but empty subject - should return true
261+ assertTrue (QualifiedSubject .isContext ("default" , ":.ctx1" ));
262+ assertTrue (QualifiedSubject .isContext ("tenant1" , "tenant1_:.ctx1" ));
263+
264+ // Test wildcard subject in non-default tenant - should return true
265+ assertTrue (QualifiedSubject .isContext ("tenant1" , "tenant1_*" ));
266+ assertTrue (QualifiedSubject .isContext ("tenant2" , "tenant2_*" ));
267+
268+ // Test wildcard subject in default tenant - should return false
269+ assertFalse (QualifiedSubject .isContext ("default" , "*" ));
270+ assertFalse (QualifiedSubject .isContext (DEFAULT_TENANT , "*" ));
271+
272+ // Test regular subjects - should return false
273+ assertFalse (QualifiedSubject .isContext ("default" , "subject1" ));
274+ assertFalse (QualifiedSubject .isContext ("tenant1" , "tenant1_subject1" ));
275+ assertFalse (QualifiedSubject .isContext ("default" , ":.ctx1:subject1" ));
276+ assertFalse (QualifiedSubject .isContext ("tenant1" , "tenant1_:.ctx1:subject1" ));
277+
278+ // Test context wildcard (special context) - should return true (empty subject)
279+ assertTrue (QualifiedSubject .isContext ("tenant1" , "tenant1_:*:" ));
280+
281+ // Test invalid context formats with subjects - should return false
282+ assertFalse (QualifiedSubject .isContext ("default" , ":ctx1:subject1" ));
283+ assertFalse (QualifiedSubject .isContext ("tenant1" , "tenant1_:ctx1:subject1" ));
284+ }
285+
286+ @ Test
287+ public void testIsContextEdgeCases () {
288+ // Test with null tenant
289+ assertTrue (QualifiedSubject .isContext (null , null ));
290+ assertTrue (QualifiedSubject .isContext (null , "" ));
291+ assertTrue (QualifiedSubject .isContext (null , ":.ctx:" ));
292+
293+ // Wildcard with null tenant (treated as default tenant)
294+ assertFalse (QualifiedSubject .isContext (null , "*" ));
295+
296+ // Test with empty context (default context)
297+ assertTrue (QualifiedSubject .isContext ("default" , ":.:" ));
298+ assertTrue (QualifiedSubject .isContext ("tenant1" , "tenant1_:.:" ));
299+
300+ // Test subjects that look like contexts but have content after
301+ assertFalse (QualifiedSubject .isContext ("default" , ":.ctx:foo" ));
302+ assertFalse (QualifiedSubject .isContext ("tenant1" , "tenant1_:.ctx:foo" ));
303+
304+ // Test with special subjects that are not wildcards
305+ assertFalse (QualifiedSubject .isContext ("tenant1" , "tenant1_**" ));
306+ assertFalse (QualifiedSubject .isContext ("tenant1" , "tenant1_*subject" ));
307+ assertFalse (QualifiedSubject .isContext ("default" , "**" ));
308+ }
243309}
0 commit comments