Skip to content

Commit 0608331

Browse files
Maffoochclaude
andcommitted
Fix test failures from RBAC refactoring
Update @patch targets in test files to point to new module locations: - queries.get_current_user → query_registrations.get_current_user - authorization_tags.user_has_permission → template_filters.user_has_permission Convert test_apply_finding_template tests from direct view calls to Django test client requests so middleware authorization runs. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
1 parent a70e34f commit 0608331

4 files changed

Lines changed: 64 additions & 58 deletions

File tree

unittests/authorization/test_authorization_tags.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ def setUp(self):
2828
self.permission_c = Permission()
2929
self.permission_c.codename = "c"
3030

31-
@patch("dojo.templatetags.authorization_tags.user_has_permission")
31+
@patch("dojo.authorization.template_filters.user_has_permission")
3232
def test_has_object_permission_no_permission(self, mock_has_permission):
3333
mock_has_permission.return_value = False
3434

@@ -37,7 +37,7 @@ def test_has_object_permission_no_permission(self, mock_has_permission):
3737
self.assertFalse(result)
3838
mock_has_permission.assert_called_with(None, self.product_type, Permissions.Product_Type_View)
3939

40-
@patch("dojo.templatetags.authorization_tags.user_has_permission")
40+
@patch("dojo.authorization.template_filters.user_has_permission")
4141
@patch("crum.get_current_user")
4242
def test_has_object_permission_has_permission(self, mock_current_user, mock_has_permission):
4343
mock_has_permission.return_value = True
@@ -54,7 +54,7 @@ def test_has_object_permission_wrong_permission(self):
5454
with self.assertRaises(KeyError):
5555
has_object_permission(self.product_type, "Test")
5656

57-
@patch("dojo.templatetags.authorization_tags.configuration_permission")
57+
@patch("dojo.authorization.template_filters.configuration_permission")
5858
@patch("crum.get_current_user")
5959
def test_has_configuration_permission(self, mock_current_user, mock_configuration_permission):
6060
mock_configuration_permission.return_value = True

unittests/test_apply_finding_template.py

Lines changed: 36 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -209,32 +209,35 @@ def test_apply_template_to_finding_with_data_saves_success(self):
209209

210210
def test_unauthorized_apply_template_to_finding_fails(self):
211211
"""Test that a non-superuser without permissions cannot apply template"""
212-
with self.assertRaises(PermissionDenied):
213-
self.make_request(user_is_staff=False, finding_id=self.finding.id, template_id=self.template.id,
214-
data={"title": "Finding for Testing Apply Template functionality",
215-
"cwe": "89",
216-
"severity": "High",
217-
"description": "Finding for Testing Apply Template Functionality",
218-
"mitigation": "template mitigation",
219-
"impact": "template impact"},
220-
)
212+
user = FindingTemplateTestUtil.create_user(is_staff=False)
213+
self.client.force_login(user)
214+
url = f"/finding/{self.finding.id}/{self.template.id}/apply_template_to_finding"
215+
response = self.client.post(url, data={
216+
"title": "Finding for Testing Apply Template functionality",
217+
"cwe": "89",
218+
"severity": "High",
219+
"description": "Finding for Testing Apply Template Functionality",
220+
"mitigation": "template mitigation",
221+
"impact": "template impact",
222+
})
223+
self.assertEqual(response.status_code, 403)
221224

222225
def test_reader_role_cannot_apply_template(self):
223226
"""Test that a Reader role user (read-only) cannot apply template"""
224227
reader_user = FindingTemplateTestUtil.create_user_with_role(
225228
self.finding.test.engagement.product, "Reader", is_staff=False,
226229
)
227-
request = FindingTemplateTestUtil.create_post_request(
228-
reader_user, self.apply_template_url,
229-
data={"title": "Finding for Testing Apply Template functionality",
230-
"cwe": "89",
231-
"severity": "High",
232-
"description": "Finding for Testing Apply Template Functionality",
233-
"mitigation": "template mitigation",
234-
"impact": "template impact"},
235-
)
236-
with impersonate(reader_user), self.assertRaises(PermissionDenied):
237-
views.apply_template_to_finding(request, fid=self.finding.id, tid=self.template.id)
230+
self.client.force_login(reader_user)
231+
url = f"/finding/{self.finding.id}/{self.template.id}/apply_template_to_finding"
232+
response = self.client.post(url, data={
233+
"title": "Finding for Testing Apply Template functionality",
234+
"cwe": "89",
235+
"severity": "High",
236+
"description": "Finding for Testing Apply Template Functionality",
237+
"mitigation": "template mitigation",
238+
"impact": "template impact",
239+
})
240+
self.assertEqual(response.status_code, 403)
238241

239242
def test_writer_role_can_apply_template(self):
240243
"""Test that a Writer role user (non-staff) can apply template"""
@@ -348,8 +351,11 @@ def make_request(self, user_is_staff, finding_id, template_id, data=None):
348351
return views.choose_finding_template_options(request, tid=template_id, fid=finding_id)
349352

350353
def test_unauthorized_choose_finding_template_options_fails(self):
351-
with self.assertRaises(PermissionDenied):
352-
self.make_request(user_is_staff=False, finding_id=self.finding.id, template_id=self.template.id)
354+
user = FindingTemplateTestUtil.create_user(is_staff=False)
355+
self.client.force_login(user)
356+
url = f"/finding/{self.template.id}/{self.finding.id}/choose_finding_template_options"
357+
response = self.client.get(url)
358+
self.assertEqual(response.status_code, 403)
353359

354360
def test_authorized_choose_finding_template_options_success(self):
355361
result = self.make_request(user_is_staff=True, finding_id=self.finding.id, template_id=self.template.id)
@@ -440,9 +446,10 @@ def test_mktemplate_requires_permission(self):
440446
user.is_superuser = False
441447
user.save()
442448

443-
# Should raise PermissionDenied
444-
with self.assertRaises(PermissionDenied):
445-
self.make_request(user, self.finding.id)
449+
self.client.force_login(user)
450+
url = f"/finding/{self.finding.id}/mktemplate"
451+
response = self.client.get(url)
452+
self.assertEqual(response.status_code, 403)
446453

447454

448455
@versioned_fixtures
@@ -589,9 +596,10 @@ def test_add_finding_from_template_requires_permission(self):
589596
unauthorized_user.is_superuser = False
590597
unauthorized_user.save()
591598

592-
# Should raise PermissionDenied
593-
with self.assertRaises(PermissionDenied):
594-
self.make_get_request(unauthorized_user, self.test.id, self.template.id)
599+
self.client.force_login(unauthorized_user)
600+
url = f"/test/{self.test.id}/add_findings/{self.template.id}"
601+
response = self.client.get(url)
602+
self.assertEqual(response.status_code, 403)
595603

596604
def test_add_finding_from_template_updates_template_last_used(self):
597605
"""Test that template.last_used is updated when creating finding"""

unittests/test_authorization_queries.py

Lines changed: 19 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -362,7 +362,7 @@ def test_queryset_parameter_filters_correctly(self):
362362

363363
def test_none_user_returns_empty(self):
364364
"""None user should return empty queryset"""
365-
with patch("dojo.finding.queries.get_current_user", return_value=None):
365+
with patch("dojo.authorization.query_registrations.get_current_user", return_value=None):
366366
findings = get_authorized_findings(Permissions.Finding_View)
367367
self.assertEqual(findings.count(), 0)
368368

@@ -371,23 +371,23 @@ class TestGetAuthorizedStubFindings(AuthorizationQueriesTestBase):
371371

372372
"""Tests for get_authorized_stub_findings() - uses get_current_user()"""
373373

374-
@patch("dojo.finding.queries.get_current_user")
374+
@patch("dojo.authorization.query_registrations.get_current_user")
375375
def test_superuser_gets_all_stub_findings(self, mock_get_current_user):
376376
"""Superuser should get all stub findings"""
377377
mock_get_current_user.return_value = self.superuser
378378
stub_findings = get_authorized_stub_findings(Permissions.Finding_View)
379379
self.assertIn(self.stub_finding_1, stub_findings)
380380
self.assertIn(self.stub_finding_2, stub_findings)
381381

382-
@patch("dojo.finding.queries.get_current_user")
382+
@patch("dojo.authorization.query_registrations.get_current_user")
383383
def test_user_no_permissions_gets_empty(self, mock_get_current_user):
384384
"""User with no permissions should not get test stub findings"""
385385
mock_get_current_user.return_value = self.user_no_perms
386386
stub_findings = get_authorized_stub_findings(Permissions.Finding_View)
387387
self.assertNotIn(self.stub_finding_1, stub_findings)
388388
self.assertNotIn(self.stub_finding_2, stub_findings)
389389

390-
@patch("dojo.finding.queries.get_current_user")
390+
@patch("dojo.authorization.query_registrations.get_current_user")
391391
def test_user_product_member_gets_product_stub_findings(self, mock_get_current_user):
392392
"""User with product membership should get only that product's stub findings"""
393393
mock_get_current_user.return_value = self.user_product_member
@@ -470,39 +470,39 @@ class TestGetAuthorizedProductTypes(AuthorizationQueriesTestBase):
470470

471471
"""Tests for get_authorized_product_types() - uses get_current_user()"""
472472

473-
@patch("dojo.product_type.queries.get_current_user")
473+
@patch("dojo.authorization.query_registrations.get_current_user")
474474
def test_superuser_gets_all_product_types(self, mock_get_current_user):
475475
"""Superuser should get all product types"""
476476
mock_get_current_user.return_value = self.superuser
477477
product_types = get_authorized_product_types(Permissions.Product_Type_View)
478478
self.assertIn(self.product_type_1, product_types)
479479
self.assertIn(self.product_type_2, product_types)
480480

481-
@patch("dojo.product_type.queries.get_current_user")
481+
@patch("dojo.authorization.query_registrations.get_current_user")
482482
def test_user_no_permissions_gets_empty(self, mock_get_current_user):
483483
"""User with no permissions should not get test product types"""
484484
mock_get_current_user.return_value = self.user_no_perms
485485
product_types = get_authorized_product_types(Permissions.Product_Type_View)
486486
self.assertNotIn(self.product_type_1, product_types)
487487
self.assertNotIn(self.product_type_2, product_types)
488488

489-
@patch("dojo.product_type.queries.get_current_user")
489+
@patch("dojo.authorization.query_registrations.get_current_user")
490490
def test_user_global_reader_gets_all(self, mock_get_current_user):
491491
"""User with global reader role should get all product types"""
492492
mock_get_current_user.return_value = self.user_global_reader
493493
product_types = get_authorized_product_types(Permissions.Product_Type_View)
494494
self.assertIn(self.product_type_1, product_types)
495495
self.assertIn(self.product_type_2, product_types)
496496

497-
@patch("dojo.product_type.queries.get_current_user")
497+
@patch("dojo.authorization.query_registrations.get_current_user")
498498
def test_user_product_type_member_gets_own_types(self, mock_get_current_user):
499499
"""User with product type membership should get only that type"""
500500
mock_get_current_user.return_value = self.user_product_type_member
501501
product_types = get_authorized_product_types(Permissions.Product_Type_View)
502502
self.assertIn(self.product_type_1, product_types)
503503
self.assertNotIn(self.product_type_2, product_types)
504504

505-
@patch("dojo.product_type.queries.get_current_user")
505+
@patch("dojo.authorization.query_registrations.get_current_user")
506506
def test_user_group_product_type_member_gets_group_types(self, mock_get_current_user):
507507
"""User in group with product type access should get that type"""
508508
mock_get_current_user.return_value = self.user_group_product_type_member
@@ -515,39 +515,39 @@ class TestGetAuthorizedEngagements(AuthorizationQueriesTestBase):
515515

516516
"""Tests for get_authorized_engagements() - uses get_current_user()"""
517517

518-
@patch("dojo.engagement.queries.get_current_user")
518+
@patch("dojo.authorization.query_registrations.get_current_user")
519519
def test_superuser_gets_all_engagements(self, mock_get_current_user):
520520
"""Superuser should get all engagements"""
521521
mock_get_current_user.return_value = self.superuser
522522
engagements = get_authorized_engagements(Permissions.Engagement_View)
523523
self.assertIn(self.engagement_1, engagements)
524524
self.assertIn(self.engagement_2, engagements)
525525

526-
@patch("dojo.engagement.queries.get_current_user")
526+
@patch("dojo.authorization.query_registrations.get_current_user")
527527
def test_user_no_permissions_gets_empty(self, mock_get_current_user):
528528
"""User with no permissions should not get test engagements"""
529529
mock_get_current_user.return_value = self.user_no_perms
530530
engagements = get_authorized_engagements(Permissions.Engagement_View)
531531
self.assertNotIn(self.engagement_1, engagements)
532532
self.assertNotIn(self.engagement_2, engagements)
533533

534-
@patch("dojo.engagement.queries.get_current_user")
534+
@patch("dojo.authorization.query_registrations.get_current_user")
535535
def test_user_global_reader_gets_all(self, mock_get_current_user):
536536
"""User with global reader role should get all engagements"""
537537
mock_get_current_user.return_value = self.user_global_reader
538538
engagements = get_authorized_engagements(Permissions.Engagement_View)
539539
self.assertIn(self.engagement_1, engagements)
540540
self.assertIn(self.engagement_2, engagements)
541541

542-
@patch("dojo.engagement.queries.get_current_user")
542+
@patch("dojo.authorization.query_registrations.get_current_user")
543543
def test_user_product_member_gets_product_engagements(self, mock_get_current_user):
544544
"""User with product membership should get only that product's engagements"""
545545
mock_get_current_user.return_value = self.user_product_member
546546
engagements = get_authorized_engagements(Permissions.Engagement_View)
547547
self.assertIn(self.engagement_1, engagements)
548548
self.assertNotIn(self.engagement_2, engagements)
549549

550-
@patch("dojo.engagement.queries.get_current_user")
550+
@patch("dojo.authorization.query_registrations.get_current_user")
551551
def test_user_product_type_member_gets_product_type_engagements(self, mock_get_current_user):
552552
"""User with product type membership should get engagements in that type"""
553553
mock_get_current_user.return_value = self.user_product_type_member
@@ -560,23 +560,23 @@ class TestGetAuthorizedTests(AuthorizationQueriesTestBase):
560560

561561
"""Tests for get_authorized_tests() - uses get_current_user()"""
562562

563-
@patch("dojo.test.queries.get_current_user")
563+
@patch("dojo.authorization.query_registrations.get_current_user")
564564
def test_superuser_gets_all_tests(self, mock_get_current_user):
565565
"""Superuser should get all tests"""
566566
mock_get_current_user.return_value = self.superuser
567567
tests = get_authorized_tests(Permissions.Test_View)
568568
self.assertIn(self.test_1, tests)
569569
self.assertIn(self.test_2, tests)
570570

571-
@patch("dojo.test.queries.get_current_user")
571+
@patch("dojo.authorization.query_registrations.get_current_user")
572572
def test_user_no_permissions_gets_empty(self, mock_get_current_user):
573573
"""User with no permissions should not get test tests"""
574574
mock_get_current_user.return_value = self.user_no_perms
575575
tests = get_authorized_tests(Permissions.Test_View)
576576
self.assertNotIn(self.test_1, tests)
577577
self.assertNotIn(self.test_2, tests)
578578

579-
@patch("dojo.test.queries.get_current_user")
579+
@patch("dojo.authorization.query_registrations.get_current_user")
580580
def test_user_product_member_gets_product_tests(self, mock_get_current_user):
581581
"""User with product membership should get only that product's tests"""
582582
mock_get_current_user.return_value = self.user_product_member
@@ -711,15 +711,15 @@ class TestGetAuthorizedGroups(AuthorizationQueriesTestBase):
711711

712712
"""Tests for get_authorized_groups() - uses get_current_user()"""
713713

714-
@patch("dojo.group.queries.get_current_user")
714+
@patch("dojo.authorization.query_registrations.get_current_user")
715715
def test_superuser_gets_all_groups(self, mock_get_current_user):
716716
"""Superuser should get all groups"""
717717
mock_get_current_user.return_value = self.superuser
718718
groups = get_authorized_groups(Permissions.Group_View)
719719
self.assertIn(self.group_product, groups)
720720
self.assertIn(self.group_product_type, groups)
721721

722-
@patch("dojo.group.queries.get_current_user")
722+
@patch("dojo.authorization.query_registrations.get_current_user")
723723
def test_user_group_member_gets_own_groups(self, mock_get_current_user):
724724
"""User who is a group member should get that group"""
725725
mock_get_current_user.return_value = self.user_group_product_member

unittests/test_user_queries.py

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -73,31 +73,29 @@ def tearDown(self):
7373
self.product_type_user.delete()
7474
self.invisible_user.delete()
7575

76-
@patch("dojo.user.queries.get_current_user")
76+
@patch("dojo.authorization.query_registrations.get_current_user")
7777
def test_user_none(self, mock_current_user):
7878
mock_current_user.return_value = None
7979

8080
self.assertQuerySetEqual(Dojo_User.objects.none(), get_authorized_users(Permissions.Product_View))
8181

82-
@patch("dojo.user.queries.get_current_user")
82+
@patch("dojo.authorization.query_registrations.get_current_user")
8383
def test_user_admin(self, mock_current_user):
8484
mock_current_user.return_value = self.admin_user
8585

8686
users = Dojo_User.objects.all().order_by("first_name", "last_name", "username")
8787
self.assertQuerySetEqual(users, get_authorized_users(Permissions.Product_View))
8888

89-
@patch("dojo.user.queries.get_current_user")
89+
@patch("dojo.authorization.query_registrations.get_current_user")
9090
def test_user_global_permission(self, mock_current_user):
9191
mock_current_user.return_value = self.global_permission_user
9292

9393
users = Dojo_User.objects.all().order_by("first_name", "last_name", "username")
9494
self.assertQuerySetEqual(users, get_authorized_users(Permissions.Product_View))
9595

96-
@patch("dojo.user.queries.get_current_user")
97-
@patch("dojo.product.queries.get_current_user")
98-
def test_user_regular(self, mock_current_user_1, mock_current_user_2):
99-
mock_current_user_1.return_value = self.regular_user
100-
mock_current_user_2.return_value = self.regular_user
96+
@patch("dojo.authorization.query_registrations.get_current_user")
97+
def test_user_regular(self, mock_current_user):
98+
mock_current_user.return_value = self.regular_user
10199

102100
users = Dojo_User.objects.exclude(username="invisible_user").order_by("first_name", "last_name", "username")
103101
self.assertQuerySetEqual(users, get_authorized_users(Permissions.Product_View))

0 commit comments

Comments
 (0)