diff --git a/core/management/commands/check_connectors.py b/core/management/commands/check_connectors.py index 9711525..fd419b3 100644 --- a/core/management/commands/check_connectors.py +++ b/core/management/commands/check_connectors.py @@ -66,7 +66,8 @@ class Command(BaseCommand): from apps.mattermost_connector.mattermost_service import MattermostService svc = MattermostService(role='provisioning') me = svc.driver.users.get_user('me') - return 'OK', f"бот @{me.get('username', '?')} (роль {svc.bot.role})" + caps = ', '.join(svc.bot.caps()) or '—' + return 'OK', f"бот @{me.get('username', '?')} (возможности: {caps})" except Exception as e: # noqa: BLE001 — диагностика: любая ошибка = FAIL return 'FAIL', f'{type(e).__name__}: {e}' diff --git a/core/tests_check_connectors.py b/core/tests_check_connectors.py index e01fb03..b182dee 100644 --- a/core/tests_check_connectors.py +++ b/core/tests_check_connectors.py @@ -38,3 +38,26 @@ class CheckConnectorsTests(TestCase): self.assertIn('nextcloud', text) self.assertNotIn('mattermost', text) self.assertNotIn('s3', text) + + def test_mattermost_ok_branch_formats(self): + """OK-ветка Mattermost обращается к реальным атрибутам бота (caps()), + а не к несуществующему .role — регрессия на AttributeError.""" + from core.models import ConnectorConfig + ConnectorConfig.objects.create( + connector_type='mattermost', is_enabled=True, host='mm.local', + ) + + fake_svc = mock.Mock() + fake_svc.driver.users.get_user.return_value = {'username': 'acore-bot', 'id': 'x1'} + fake_svc.bot.caps.return_value = ['Провижининг (сотрудники)'] + + out = StringIO() + with mock.patch( + 'apps.mattermost_connector.mattermost_service.MattermostService', + return_value=fake_svc, + ): + call_command('check_connectors', 'mattermost', stdout=out) + text = out.getvalue() + self.assertIn('OK', text) + self.assertIn('@acore-bot', text) + self.assertIn('Провижининг', text)