|
31 | 31 | OrganizationRadiusSettings = load_model("OrganizationRadiusSettings") |
32 | 32 | Organization = swapper.load_model("openwisp_users", "Organization") |
33 | 33 | OrganizationUser = swapper.load_model("openwisp_users", "OrganizationUser") |
| 34 | +PhoneToken = load_model("PhoneToken") |
34 | 35 |
|
35 | 36 | _RADCHECK_ENTRY = { |
36 | 37 | "username": "Monica", |
@@ -1511,6 +1512,236 @@ def test_admin_menu_groups(self): |
1511 | 1512 | html = '<div class="mg-dropdown-label">RADIUS </div>' |
1512 | 1513 | self.assertContains(response, html, html=True) |
1513 | 1514 |
|
| 1515 | + def test_radius_group_admin_get_group_name(self): |
| 1516 | + from ..admin import RadiusGroupAdmin |
| 1517 | + |
| 1518 | + admin_instance = RadiusGroupAdmin(RadiusGroup, None) |
| 1519 | + |
| 1520 | + group = self._create_radius_group(name="test-group") |
| 1521 | + display_name = admin_instance.get_group_name(group) |
| 1522 | + expected = group.name.replace(f"{group.organization.slug}-", "") |
| 1523 | + self.assertEqual(display_name, expected) |
| 1524 | + |
| 1525 | + def test_radius_group_admin_has_delete_permission_non_superuser(self): |
| 1526 | + from ..admin import RadiusGroupAdmin |
| 1527 | + |
| 1528 | + admin_instance = RadiusGroupAdmin(RadiusGroup, None) |
| 1529 | + |
| 1530 | + non_superuser = self._create_user(is_staff=True, is_superuser=False) |
| 1531 | + self._create_org_user( |
| 1532 | + organization=self.default_org, user=non_superuser, is_admin=True |
| 1533 | + ) |
| 1534 | + |
| 1535 | + from django.test import RequestFactory |
| 1536 | + |
| 1537 | + factory = RequestFactory() |
| 1538 | + request = factory.get("/") |
| 1539 | + request.user = non_superuser |
| 1540 | + |
| 1541 | + default_group = RadiusGroup.objects.get( |
| 1542 | + organization=self.default_org, default=True |
| 1543 | + ) |
| 1544 | + result = admin_instance.has_delete_permission(request, default_group) |
| 1545 | + self.assertFalse(result) |
| 1546 | + |
| 1547 | + def test_radius_group_admin_get_actions_removes_delete_selected(self): |
| 1548 | + from django.contrib import admin |
| 1549 | + |
| 1550 | + from ..admin import RadiusGroupAdmin |
| 1551 | + |
| 1552 | + admin_site = admin.AdminSite() |
| 1553 | + admin_instance = RadiusGroupAdmin(RadiusGroup, admin_site) |
| 1554 | + |
| 1555 | + from django.test import RequestFactory |
| 1556 | + |
| 1557 | + request = RequestFactory().get("/") |
| 1558 | + request.user = self._get_admin() |
| 1559 | + |
| 1560 | + actions = admin_instance.get_actions(request) |
| 1561 | + self.assertNotIn("delete_selected", actions) |
| 1562 | + self.assertIn("delete_selected_groups", actions) |
| 1563 | + |
| 1564 | + def test_radius_batch_admin_number_of_users(self): |
| 1565 | + from ..admin import RadiusBatchAdmin |
| 1566 | + |
| 1567 | + admin_instance = RadiusBatchAdmin(RadiusBatch, None) |
| 1568 | + |
| 1569 | + batch = self._create_radius_batch( |
| 1570 | + name="test-batch", strategy="prefix", prefix="test" |
| 1571 | + ) |
| 1572 | + user1 = self._create_user(username="user1", email="user1@test.com") |
| 1573 | + user2 = self._create_user(username="user2", email="user2@test.com") |
| 1574 | + batch.users.add(user1, user2) |
| 1575 | + |
| 1576 | + count = admin_instance.number_of_users(batch) |
| 1577 | + self.assertEqual(count, 2) |
| 1578 | + |
| 1579 | + def test_radius_batch_admin_get_fields_add_vs_change(self): |
| 1580 | + from ..admin import RadiusBatchAdmin |
| 1581 | + |
| 1582 | + admin_instance = RadiusBatchAdmin(RadiusBatch, None) |
| 1583 | + |
| 1584 | + from django.test import RequestFactory |
| 1585 | + |
| 1586 | + request = RequestFactory().get("/") |
| 1587 | + request.user = self._get_admin() |
| 1588 | + |
| 1589 | + add_fields = admin_instance.get_fields(request, obj=None) |
| 1590 | + self.assertNotIn("users", add_fields) |
| 1591 | + self.assertNotIn("status", add_fields) |
| 1592 | + |
| 1593 | + batch = self._create_radius_batch(name="test", strategy="prefix", prefix="test") |
| 1594 | + change_fields = admin_instance.get_fields(request, obj=batch) |
| 1595 | + self.assertIn("users", change_fields) |
| 1596 | + |
| 1597 | + def test_radius_batch_admin_get_readonly_fields_processing(self): |
| 1598 | + from ..admin import RadiusBatchAdmin |
| 1599 | + |
| 1600 | + admin_instance = RadiusBatchAdmin(RadiusBatch, None) |
| 1601 | + |
| 1602 | + from django.test import RequestFactory |
| 1603 | + |
| 1604 | + request = RequestFactory().get("/") |
| 1605 | + request.user = self._get_admin() |
| 1606 | + |
| 1607 | + batch = self._create_radius_batch(name="test", strategy="prefix", prefix="test") |
| 1608 | + batch.status = "processing" |
| 1609 | + batch.save() |
| 1610 | + |
| 1611 | + readonly_fields = admin_instance.get_readonly_fields(request, batch) |
| 1612 | + expected_readonly = ["strategy", "prefix", "csvfile", "name", "organization"] |
| 1613 | + for field in expected_readonly: |
| 1614 | + self.assertIn(field, readonly_fields) |
| 1615 | + |
| 1616 | + def test_radius_batch_admin_has_delete_permission_processing(self): |
| 1617 | + from ..admin import RadiusBatchAdmin |
| 1618 | + |
| 1619 | + admin_instance = RadiusBatchAdmin(RadiusBatch, None) |
| 1620 | + |
| 1621 | + from django.test import RequestFactory |
| 1622 | + |
| 1623 | + request = RequestFactory().get("/") |
| 1624 | + request.user = self._get_admin() |
| 1625 | + |
| 1626 | + batch = self._create_radius_batch(name="test", strategy="prefix", prefix="test") |
| 1627 | + batch.status = "processing" |
| 1628 | + batch.save() |
| 1629 | + |
| 1630 | + result = admin_instance.has_delete_permission(request, batch) |
| 1631 | + self.assertFalse(result) |
| 1632 | + |
| 1633 | + def test_radius_batch_admin_delete_model(self): |
| 1634 | + from ..admin import RadiusBatchAdmin |
| 1635 | + |
| 1636 | + admin_instance = RadiusBatchAdmin(RadiusBatch, None) |
| 1637 | + |
| 1638 | + from django.test import RequestFactory |
| 1639 | + |
| 1640 | + request = RequestFactory().get("/") |
| 1641 | + request.user = self._get_admin() |
| 1642 | + |
| 1643 | + batch = self._create_radius_batch(name="test", strategy="prefix", prefix="test") |
| 1644 | + user1 = self._create_user(username="del1", email="del1@test.com") |
| 1645 | + batch.users.add(user1) |
| 1646 | + |
| 1647 | + initial_user_count = User.objects.count() |
| 1648 | + admin_instance.delete_model(request, batch) |
| 1649 | + |
| 1650 | + self.assertFalse(RadiusBatch.objects.filter(pk=batch.pk).exists()) |
| 1651 | + self.assertEqual(User.objects.count(), initial_user_count - 1) |
| 1652 | + |
| 1653 | + def test_phone_token_inline_permissions(self): |
| 1654 | + from django.contrib import admin |
| 1655 | + |
| 1656 | + from ..admin import PhoneTokenInline |
| 1657 | + |
| 1658 | + admin_site = admin.AdminSite() |
| 1659 | + inline_instance = PhoneTokenInline(PhoneToken, admin_site) |
| 1660 | + |
| 1661 | + from django.test import RequestFactory |
| 1662 | + |
| 1663 | + request = RequestFactory().get("/") |
| 1664 | + request.user = self._get_admin() |
| 1665 | + |
| 1666 | + self.assertFalse(inline_instance.has_add_permission(request, obj=None)) |
| 1667 | + self.assertFalse(inline_instance.has_delete_permission(request)) |
| 1668 | + self.assertFalse(inline_instance.has_change_permission(request)) |
| 1669 | + |
| 1670 | + def test_registered_user_inline_has_delete_permission(self): |
| 1671 | + from django.contrib import admin |
| 1672 | + |
| 1673 | + from ..admin import RegisteredUserInline |
| 1674 | + |
| 1675 | + admin_site = admin.AdminSite() |
| 1676 | + inline_instance = RegisteredUserInline(RegisteredUser, admin_site) |
| 1677 | + |
| 1678 | + from django.test import RequestFactory |
| 1679 | + |
| 1680 | + request = RequestFactory().get("/") |
| 1681 | + request.user = self._get_admin() |
| 1682 | + |
| 1683 | + result = inline_instance.has_delete_permission(request) |
| 1684 | + self.assertFalse(result) |
| 1685 | + |
| 1686 | + def test_get_is_verified_exception_handling(self): |
| 1687 | + from ..admin import get_is_verified |
| 1688 | + |
| 1689 | + user = self._create_user(username="no-reg", email="noreg@test.com") |
| 1690 | + |
| 1691 | + class MockAdmin: |
| 1692 | + pass |
| 1693 | + |
| 1694 | + admin_instance = MockAdmin() |
| 1695 | + |
| 1696 | + result = get_is_verified(admin_instance, user) |
| 1697 | + self.assertIn("icon-unknown.svg", result) |
| 1698 | + self.assertIn('alt="unknown"', result) |
| 1699 | + |
| 1700 | + def test_organization_first_mixin_get_fields(self): |
| 1701 | + from django.contrib import admin |
| 1702 | + |
| 1703 | + from ..admin import RadiusAccountingAdmin |
| 1704 | + |
| 1705 | + admin_site = admin.AdminSite() |
| 1706 | + admin_instance = RadiusAccountingAdmin(RadiusAccounting, admin_site) |
| 1707 | + |
| 1708 | + from django.test import RequestFactory |
| 1709 | + |
| 1710 | + request = RequestFactory().get("/") |
| 1711 | + request.user = self._get_admin() |
| 1712 | + |
| 1713 | + fields = admin_instance.get_fields(request) |
| 1714 | + self.assertEqual(fields[0], "organization") |
| 1715 | + |
| 1716 | + @mock.patch("openwisp_radius.admin.RADIUS_API_BASEURL", "http://testapi.com") |
| 1717 | + def test_radius_batch_admin_change_view_with_baseurl(self): |
| 1718 | + batch = self._create_radius_batch( |
| 1719 | + name="test-batch", strategy="prefix", prefix="test-prefix" |
| 1720 | + ) |
| 1721 | + |
| 1722 | + url = reverse(f"admin:{self.app_label}_radiusbatch_change", args=[batch.pk]) |
| 1723 | + response = self.client.get(url) |
| 1724 | + self.assertEqual(response.status_code, 200) |
| 1725 | + self.assertContains(response, "http://testapi.com") |
| 1726 | + |
| 1727 | + def test_radius_batch_admin_response_add_continue(self): |
| 1728 | + add_url = reverse(f"admin:{self.app_label}_radiusbatch_add") |
| 1729 | + data = { |
| 1730 | + "strategy": "prefix", |
| 1731 | + "prefix": "test-continue", |
| 1732 | + "name": "test-batch-continue", |
| 1733 | + "organization": self.default_org.pk, |
| 1734 | + "number_of_users": 1, |
| 1735 | + "_continue": True, |
| 1736 | + } |
| 1737 | + |
| 1738 | + response = self.client.post(add_url, data) |
| 1739 | + batch = RadiusBatch.objects.get(name="test-batch-continue") |
| 1740 | + expected_url = reverse( |
| 1741 | + f"admin:{self.app_label}_radiusbatch_change", args=[batch.pk] |
| 1742 | + ) |
| 1743 | + self.assertRedirects(response, expected_url) |
| 1744 | + |
1514 | 1745 |
|
1515 | 1746 | class TestRadiusGroupAdmin(BaseTestCase): |
1516 | 1747 | def setUp(self): |
|
0 commit comments