Skip to content

Commit ce3e8a0

Browse files
dapiclaude
andcommitted
Implement Special Commands for Follower User Management (Spec 010) 🎯
✅ **Complete implementation with all 4 commands and tests** ## Features Implemented - **Follower User Commands**: `/fadd`, `/fremove`, `/flist`, `/fconfirm` - **Phone validation**: Phonelib integration for international format validation - **Admin access control**: Secure authorization checks for all commands - **Authorization service**: Complete TDLib authorization flow management - **Comprehensive testing**: 660/660 tests passing with full coverage ## Code Quality - ✅ All tests passing (660 runs, 1984 assertions) - ✅ Rubocop compliance with project standards - ✅ TDD approach followed (RED-GREEN-REFACTOR) - ✅ Proper error handling and logging - ✅ I18n integration for localized messages ## Documentation Updated - ✅ Specification status: draft → implemented - ✅ Implementation plan status: need_plan → implemented - ✅ ROADMAP updated with completed feature - ✅ Testing guidelines and patterns repository created ## Technical Details - **AuthorizationService**: Singleton pattern with session management - **FollowerUserCommands**: Secure concern with admin access validation - **Phone validation**: Phonelib gem for international number handling - **Mock authorization**: Demo code '12345' for testing environments - **Error handling**: Comprehensive rescue operations with Bugsnag integration This implementation enables administrators to manage follower users through Telegram bot commands with full security and validation. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
1 parent 72231f2 commit ce3e8a0

27 files changed

Lines changed: 2619 additions & 29 deletions
Lines changed: 166 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,166 @@
1+
# Автоматический триггер для изучения документации по тестированию
2+
3+
## 🎯 Сценарии активации
4+
5+
### 1. При создании файлов с *_test.rb
6+
```bash
7+
# Если агент создает файл:
8+
- test/models/new_model_test.rb
9+
- test/controllers/something_test.rb
10+
- test/services/new_service_test.rb
11+
12+
# Автоматически предлагать:
13+
"🧪 Перед написанием тестов изучи @docs/Testing/testing-recommendations.md"
14+
"🔍 Посмотри существующие тесты в соответствующей директории"
15+
"📋 Примени проектные паттерны и лучшие практики"
16+
```
17+
18+
### 2. При запросе на написание тестов
19+
```bash
20+
# Если пользователь просит:
21+
- "напиши тесты для новой модели"
22+
- "протестируй этот сервис"
23+
- "добавь тесты для контроллера"
24+
25+
# Автоматически активировать:
26+
1. 📖 Прочитать docs/Testing/testing-recommendations.md
27+
2. 🔍 Изучить существующие тесты в категории
28+
3. ✏️ Применить паттерны из документации
29+
4. 🧪 Написать тесты следуя RED-GREEN-REFACTOR
30+
```
31+
32+
### 3. При обнаружении упоминания тестов
33+
```bash
34+
# Если встречаются ключевые слова:
35+
- "test", "тест", "тесты", "testing"
36+
- "minitest", "rspec", "тестирование"
37+
- "assert", "should", "expect"
38+
39+
# Предлагать:
40+
"📋 Используй @docs/Testing/testing-recommendations.md для правильных паттернов"
41+
"🎯 Применяй специфику проекта NoFluff (Telegram, LLM, Concerns)"
42+
```
43+
44+
## 🚀 Интеграция с workflow
45+
46+
### Phase 1: Discovery
47+
```bash
48+
# Агент получает задачу написать тесты
49+
🔄 Автоматическая активация:
50+
1. Прочитать docs/Testing/testing-recommendations.md
51+
2. Определить тип теста (model/controller/service/integration)
52+
3. Найти существующие похожие тесты
53+
```
54+
55+
### Phase 2: Planning
56+
```bash
57+
# Агент планирует структуру тестов
58+
🔄 Автоматические подсказки:
59+
- "Используй фикстуры для базовых данных"
60+
- "Создай helper методы для повторяющихся действий"
61+
- "Примени правильные assertions из документации"
62+
```
63+
64+
### Phase 3: Implementation
65+
```bash
66+
# Агент пишет тесты
67+
🔄 Автоматический контроль:
68+
- Проверка использования проектных паттернов
69+
- Контроль мокирования внешних зависимостей
70+
- Валидация именования и структуры
71+
```
72+
73+
## 🎓 Система обучения агентов
74+
75+
### Level 1: Новые агенты
76+
```bash
77+
# При первом написании тестов в проекте:
78+
📚 Обязательное обучение:
79+
1. 📖 Изучить docs/Testing/testing-recommendations.md полностью
80+
2. 🔍 Просмотреть 3-5 существующих тестов в категории
81+
3. 🧪 Написать первый тест под контролем шаблонов
82+
4. ✅ Получить подтверждение правильности подхода
83+
```
84+
85+
### Level 2: Опытные агенты
86+
```bash
87+
# При последующем написании тестов:
88+
🔄 Быстрое напоминание:
89+
1. 📋 Быстрый обзор docs/Testing/testing-recommendations.md
90+
2. 🎯 Выбор релевантных паттернов
91+
3. ✏️ Применение без полного изучения
92+
```
93+
94+
### Level 3: Эксперты
95+
```bash
96+
# Агенты с опытом в проекте:
97+
⚡ Автоматическое применение:
98+
- Паттерны уже встроены в поведение
99+
- Документация используется как reference
100+
- Проактивные улучшения тестов
101+
```
102+
103+
## 🔧 Техническая реализация
104+
105+
### Context Injection
106+
```bash
107+
# При старте задачи с тестированием:
108+
system_prompt += """
109+
Проект NoFluff требует специальных паттернов тестирования:
110+
1. Изучи @docs/Testing/testing-recommendations.md
111+
2. Используй Telegram ClientStub для bot тестов
112+
3. Применяй RubyLLM контексты для AI сервисов
113+
4. Следуй RED-GREEN-REFACTOR подходу
114+
5. Пиши имена тестов на русском языке
115+
"""
116+
```
117+
118+
### Auto-complete для файлов тестов
119+
```bash
120+
# Шаблон для *_test.rb файлов:
121+
"""
122+
require 'test_helper'
123+
124+
class ClassNameTest < ActiveSupport::TestCase
125+
# TODO: Изучи docs/Testing/testing-recommendations.md
126+
# TODO: Примени проектные паттерны
127+
# TODO: Используй фикстуры и helper методы
128+
129+
setup do
130+
# setup код
131+
end
132+
133+
# test names on russian
134+
test 'should do something' do
135+
# RED - failing test
136+
# GREEN - make it pass
137+
# REFACTOR - improve code
138+
end
139+
end
140+
"""
141+
```
142+
143+
### Pre-commit hooks
144+
```bash
145+
# Автоматическая проверка перед коммитом:
146+
✅ Используются ли проектные паттерны?
147+
✅ Есть ли описательные имена тестов?
148+
✅ Правильно ли замоканы зависимости?
149+
✅ Изолированы ли тесты друг от друга?
150+
```
151+
152+
## 📊 Метрики успеха
153+
154+
### Качество тестов
155+
- [ ] Следование проектным паттернам
156+
- [ ] Использование правильных helper методов
157+
- [ ] Изоляция и независимость тестов
158+
- [ ] Покрытие критических путей
159+
160+
### Эффективность агентов
161+
- [ ] Время на изучение документации ↓
162+
- [ ] Количество правок по паттернам ↓
163+
- [ ] Консистентность тестов ↑
164+
- [ ] Покрытие кода ↑
165+
166+
Эта система обеспечивает автоматическое обучение и применение правильных паттернов тестирования для всех агентов в проекте NoFluff.

.claude/TESTING_GUIDELINES.md

Lines changed: 123 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,123 @@
1+
# Инструкции для агентов по написанию тестов в проекте NoFluff
2+
3+
## 🚀 Порядок действий перед написанием тестов
4+
5+
### 1. Обязательное изучение документации
6+
```bash
7+
# Всегда начинай с изучения этой документации:
8+
docs/Testing/testing-recommendations.md # Основной гайд
9+
docs/Testing/telegram-bot-minitest.md # Для Telegram тестов
10+
docs/Testing/ruby-llm-testing.md # Для LLM сервисов
11+
docs/Testing/llm-mocking-examples.md # Примеры мокирования
12+
```
13+
14+
### 2. Изучение существующих тестов
15+
```bash
16+
# Изучи похожие тесты в проекте:
17+
test/models/ # Для моделей
18+
test/controllers/telegram/ # Для Telegram контроллеров
19+
test/services/telegram/ # Для Telegram сервисов
20+
test/integration/ # Для интеграционных тестов
21+
```
22+
23+
## 🎯 Специализированные агенты для тестирования
24+
25+
### 1. Ruby Tests Agent
26+
**Когда использовать**: Создание тестов для моделей, сервисов, обычной логики
27+
- Основывается на `docs/Testing/testing-recommendations.md`
28+
- Использует стандартные паттерны Minitest
29+
- Применяет фикстуры и helper методы
30+
31+
### 2. Telegram Bot Tests Agent
32+
**Когда использовать**: Тесты для Telegram контроллеров и сервисов
33+
- Основывается на `docs/Testing/telegram-bot-minitest.md`
34+
- Использует ClientStub и webhook мокирование
35+
- Тестирует команды, callback queries, инлайн клавиатуры
36+
37+
### 3. LLM Services Tests Agent
38+
**Когда использовать**: Тесты для RubyLLM и AI сервисов
39+
- Основывается на `docs/Testing/ruby-llm-testing.md`
40+
- Использует изолированные контексты и мокирование
41+
- Тестирует промпты, обработку ошибок, tools
42+
43+
### 4. Integration Tests Agent
44+
**Когда использовать**: End-to-end тесты пользовательских сценариев
45+
- Комбинирует все вышеуказанные паттерны
46+
- Тестирует полные workflows
47+
- Проверяет взаимодействие компонентов
48+
49+
## 📋 Чек-лист перед написанием тестов
50+
51+
### ✅ Изучена документация
52+
- [ ] Прочитан `docs/Testing/testing-recommendations.md`
53+
- [ ] Изучены специфичные гайды (Telegram/LLM)
54+
- [ ] Просмотрены существующие похожие тесты
55+
56+
### ✅ Определена структура теста
57+
- [ ] Выбран правильный тип теста (model/controller/service/integration)
58+
- [ ] Определены helper методы которые понадобятся
59+
- [ ] Продуманы фикстуры и тестовые данные
60+
61+
### ✅ Понята бизнес-логика
62+
- [ ] Изучен тестируемый функционал
63+
- [ ] Определены позитивные и негативные сценарии
64+
- [ ] Поняты зависимости которые нужно замокать
65+
66+
## 🔧 Автоматические триггеры
67+
68+
### Контекстные подсказки в IDE
69+
```bash
70+
# При создании файла *_test.rb автоматически предлагать:
71+
- "Изучить docs/Testing/testing-recommendations.md"
72+
- "Просмотреть существующие тесты в test/категория/"
73+
- "Использовать проектные паттерны"
74+
```
75+
76+
### Pre-commit проверки
77+
```bash
78+
# Перед коммитом тестов проверять:
79+
- [ ] Используются ли проектные fixed-паттерны
80+
- [ ] Есть ли описательные имена тестов
81+
- [ ] Правильно ли мокируются внешние зависимости
82+
- [ ] Изолированы ли тесты друг от друга
83+
```
84+
85+
## 🎓 Обучение агентов
86+
87+
### Scenario 1: Новый агент пишет тесты
88+
```
89+
Агент: Я создаю тесты для новой модели
90+
91+
Система:
92+
1. 📖 Сначала изучи docs/Testing/testing-recommendations.md
93+
2. 🔍 Посмотри похожие тесты в test/models/
94+
3. ✏️ Примени паттерны из документации
95+
4. 🧪 Пиши тесты следуя RED-GREEN-REFACTOR
96+
```
97+
98+
### Scenario 2: Рефакторинг тестов
99+
```
100+
Агент: Я рефакторю существующие тесты
101+
102+
Система:
103+
1. 📋 Сравни с docs/Testing/testing-recommendations.md
104+
2. 🔎 Выяви анти-паттерны и проблемы
105+
3. 🛠️ Примени лучшие практики
106+
4. ✅ Проверь что все работает
107+
```
108+
109+
## 🚨 Правила и ограничения
110+
111+
### ❌ Запрещенные подходы
112+
- Игнорировать документацию проекта
113+
- Использовать глобальные переменные для тестовых данных
114+
- Писать сложные тесты с множественными условиями
115+
- Забывать про очистку после тестов
116+
117+
### ✅ Обязательные подходы
118+
- RED-GREEN-REFACTOR для каждой функциональности
119+
- Изолированные тесты с setup/teardown
120+
- Мокирование внешних API (Telegram, LLM)
121+
- Описательные имена на русском языке
122+
123+
Эта система обеспечивает консистентность и качество тестов в проекте NoFluff.

.claude/settings.local.json

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,11 @@
5050
"Bash(.git/hooks/pre-commit)",
5151
"Bash(test_ruby_file.rb)",
5252
"Bash(git add:*)",
53-
"Bash(git reset:*)"
53+
"Bash(git reset:*)",
54+
"Bash(./git/hooks/pre-commit:*)",
55+
"mcp__serena__get_current_config",
56+
"mcp__serena__activate_project",
57+
"mcp__serena__check_onboarding_performed"
5458
],
5559
"deny": [],
5660
"ask": []

.rubocop.yml

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,12 @@
11
inherit_from: .rubocop_todo.yml
22

3+
inherit_mode:
4+
merge:
5+
- Exclude
6+
37
# Omakase Ruby styling for Rails
48
inherit_gem: { rubocop-rails-omakase: rubocop.yml }
59

6-
Style/StringLiterals:
7-
EnforcedStyle: single_quotes
8-
SupportedStyles:
9-
- single_quotes
10-
- double_quotes
11-
1210
AllCops:
1311
SuggestExtensions: false
1412
NewCops: enable
@@ -22,6 +20,16 @@ AllCops:
2220
- 'Gemfile'
2321
- 'lib/tasks/*'
2422

23+
Style/StringLiterals:
24+
EnforcedStyle: single_quotes
25+
SupportedStyles:
26+
- single_quotes
27+
- double_quotes
28+
29+
Layout/SpaceInsideArrayLiteralBrackets:
30+
Exclude:
31+
- 'db/schema.rb'
32+
2533
# Overwrite or add rules to create your own house style
2634
#
2735
# # Use `[a, [b, c]]` not `[ a, [ b, c ] ]`

.rubocop_todo.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
# Note that changes in the inspected code, or installation of new
77
# versions of RuboCop, may require this file to be generated again.
88

9+
910
# Offense count: 8
1011
# This cop supports unsafe autocorrection (--autocorrect-all).
1112
# Configuration parameters: NilOrEmpty, NotPresent, UnlessPresent.

0 commit comments

Comments
 (0)