From f52526ea98c05baf25a02f6a962cdf5dbecd613e Mon Sep 17 00:00:00 2001 From: lokses Date: Mon, 2 Nov 2026 20:24:41 +0200 Subject: [PATCH] =?UTF-8?q?fix(check=5Fconnectors):=20Mattermost=20OK-?= =?UTF-8?q?=D0=B2=D0=B5=D1=82=D0=BA=D0=B0=20=E2=80=94=20bot.caps()=20?= =?UTF-8?q?=D0=B2=D0=BC=D0=B5=D1=81=D1=82=D0=BE=20bot.role.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit MattermostBot не имеет поля .role (есть галки can_* и метод caps()). При успешном коннекте (users/me → 200) команда падала с AttributeError. Теперь показывает включённые возможности бота. Тест на OK-ветку добавлен. Co-Authored-By: Claude Opus 4.8 --- core/management/commands/check_connectors.py | 3 ++- core/tests_check_connectors.py | 23 ++++++++++++++++++++ 2 files changed, 25 insertions(+), 1 deletion(-) 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)