Add user feature permissions and unified account management
This commit is contained in:
@@ -260,6 +260,20 @@ class RecapDeliveryTests(RecapFixture, unittest.IsolatedAsyncioTestCase):
|
||||
await self.run_claim()
|
||||
self.assertEqual(self.delivery(delivery_id)['state'], 'cancelled')
|
||||
|
||||
async def test_stats_permission_revoked_during_report_cancels_email(self):
|
||||
from backend.app.feature_access import update_permissions
|
||||
delivery_id = self.queue()
|
||||
db.set_user_role('viewer', 'user')
|
||||
async def report(*args):
|
||||
update_permissions({'stats': False}, 'viewer')
|
||||
return self.report
|
||||
def transport(recipient, rendered, message_id, before_data):
|
||||
before_data()
|
||||
self.fail('Report must not be sent after stats permission is revoked')
|
||||
with patch.object(recaps, 'get_monthly_report', side_effect=report), patch.object(mail, 'send_email', side_effect=transport):
|
||||
await self.run_claim()
|
||||
self.assertEqual(self.delivery(delivery_id)['state'], 'cancelled')
|
||||
|
||||
async def test_blocked_expired_and_deleted_accounts_are_not_sent(self):
|
||||
for kind in ['blocked', 'expired', 'deleted']:
|
||||
with self.subTest(kind=kind):
|
||||
@@ -331,7 +345,7 @@ class RecapApiTests(RecapFixture, unittest.TestCase):
|
||||
self.addCleanup(self.client.close)
|
||||
|
||||
def login(self, role='admin'):
|
||||
self.app.dependency_overrides[get_current_user] = lambda: {**self.user, 'role': role}
|
||||
self.app.dependency_overrides[get_current_user] = lambda: {**self.user, 'role': role, 'features': {'stats': True}}
|
||||
|
||||
def test_authentication_roles_and_recipient_override(self):
|
||||
self.assertEqual(self.client.get('/admin/email-recaps').status_code, 401)
|
||||
@@ -550,7 +564,7 @@ class OnDemandReportTests(RecapFixture, unittest.IsolatedAsyncioTestCase):
|
||||
async def test_regular_user_can_only_send_to_self(self):
|
||||
self.subscribe()
|
||||
app = FastAPI(); app.include_router(router.router)
|
||||
app.dependency_overrides[get_current_user] = lambda: {'username': 'viewer', 'role': 'user'}
|
||||
app.dependency_overrides[get_current_user] = lambda: {'username': 'viewer', 'role': 'user', 'features': {'stats': True}}
|
||||
client = TestClient(app)
|
||||
body = {'month': self.report['month'], 'request_id': '11111111-1111-4111-8111-111111111111'}
|
||||
for extra in [{'email': 'other@example.test'}, {'user_id': 42}, {'kind': 'scheduled'}]:
|
||||
|
||||
Reference in New Issue
Block a user