Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
40 commits
Select commit Hold shift + click to select a range
6b7fc7c
Remove gems lock
dapi Oct 15, 2025
6f9722c
Remove workflow gem version lock
dapi Oct 17, 2025
b8bc862
Fix PaymentCardOrder done! method to accept image parameter
dapi Oct 17, 2025
503bc11
Add CLAUDE.md. Bump ruby
dapi Oct 17, 2025
f0becc6
Update Gemfile
dapi Oct 17, 2025
cc30299
Fix worfklow
dapi Oct 17, 2025
7893a15
Update .claude/settings
dapi Oct 17, 2025
248fa02
Update gems
dapi Oct 17, 2025
e455f03
Fix specs
dapi Oct 17, 2025
49c0889
Update .claude
dapi Oct 18, 2025
0c512aa
Fix some kwarg contracts
dapi Oct 18, 2025
8a031cc
Unlock rails
dapi Oct 19, 2025
41d644e
Unlock gems
dapi Oct 19, 2025
500464b
REfactor enum
dapi Oct 19, 2025
b8998d7
Add .github workflow
dapi Oct 19, 2025
bd6594c
Fix specs
dapi Oct 19, 2025
ecf9c42
Improve pipelnes
dapi Oct 19, 2025
3ccc474
Minor
dapi Oct 19, 2025
c4aa308
Remove sorcery
dapi Oct 19, 2025
0df0471
Fix CI
dapi Oct 19, 2025
974818c
Improve CI
dapi Oct 19, 2025
1302af2
minor
dapi Oct 19, 2025
ccae721
minor
dapi Oct 19, 2025
da3fedf
Improve CI
dapi Oct 19, 2025
9298603
Remove Sorcery
dapi Oct 19, 2025
97cc1c3
Revert "Remove Sorcery"
dapi Oct 19, 2025
9b5c189
Revert "Remove sorcery"
dapi Oct 19, 2025
48f847d
Fix tests
dapi Oct 19, 2025
f759218
Update TODO.md
dapi Oct 19, 2025
ceae977
Fix active_storage in CI
dapi Oct 19, 2025
b77c40f
Fix CI
dapi Oct 19, 2025
d58f190
Revert "Fix CI"
dapi Oct 19, 2025
b528bfb
Mysql allow empty password
dapi Oct 19, 2025
fb2889a
Use mysql:5.7 in CI
dapi Oct 19, 2025
cd7bf68
REconnect db before DatabaseRewinder in specs
dapi Oct 19, 2025
5daa96e
Patch DatabaseREwindow for CI
dapi Oct 19, 2025
8eb39a5
minor
dapi Oct 20, 2025
f7d976d
Merge pull request #173 from alfagen/chore/gems-version-lock
dapi Oct 30, 2025
2a235bc
Merge pull request #176 from alfagen/chore/upgrade-rails
dapi Oct 30, 2025
8b43e75
chore: Add .claude/settings.local.json to gitignore
dapi Dec 30, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
58 changes: 58 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
name: CI

on:
push:
branches: [ "*" ]
pull_request:
branches: [ master, main ]

jobs:
test:
runs-on: ubuntu-latest

services:
mysql:
image: mysql:5.7
env:
MYSQL_USERNAME: root
MYSQL_ROOT_PASSWORD: password
MYSQL_PASSWORD: password
MYSQL_DATABASE: aml_dummy_test
MYSQL_ALLOW_EMPTY_PASSWORD: "yes"
ports:
- 3306:3306
options: --health-cmd="mysqladmin ping" --health-interval=10s --health-timeout=5s --health-retries=3

steps:
- uses: actions/checkout@v4

- name: Set up Ruby 3.2
uses: ruby/setup-ruby@v1
with:
ruby-version: '3.2'
bundler-cache: true
cache-version: 1

- name: Install dependencies
run: |
gem install bundler
bundle config set --local without 'production'
bundle install --jobs 4 --retry 3

- name: Set up test database
env:
MYSQL_USERNAME: root
MYSQL_PASSWORD: password
MYSQL_DATABASE: aml_dummy_test
RAILS_ENV: test
run: |
bundle exec rake db:migrate

- name: Run tests
run: |
bundle exec rspec spec --format progress
env:
RAILS_ENV: test
MYSQL_USERNAME: root
MYSQL_PASSWORD: password
MYSQL_DATABASE: aml_dummy_test
5 changes: 4 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -54,4 +54,7 @@ node_modules/
spec/dummy/log/development.log
spec/dummy/log/spec.log
spec/dummy/public/*
spec/dummy/tmp/*
spec/dummy/tmp/*

# Claude Code local settings
.claude/settings.local.json
114 changes: 114 additions & 0 deletions .protocols/test_fixes_protocol.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,114 @@
# Протокол исправления тестов AML Engine

## Общая информация
- **Дата**: 2025-10-19
- **Ветка**: chore/upgrade-rails
- **Количество тестов**: 115 examples, 6 failures
- **Статус**: В процессе исправления

## Обнаруженные проблемы

### 1. Отсутствие метода `enabled_workflow_events`
- [x] **Исследовать проблему**
- [ ] **Добавить метод в AML::Order**
- [ ] **Добавить метод в AML::PaymentCardOrder**
- [ ] **Протестировать исправление**

**Ошибка**: `NoMethodError: undefined method 'enabled_workflow_events'`
**Затронутые файлы**:
- `app/authorizers/aml/order_authorizer.rb:20`
- `app/views/application/_payment_card_order_actions.slim:2`

### 2. Отсутствие метода `risk_category` для класса
- [x] **Исследовать проблему**
- [ ] **Исправить использование в view**
- [ ] **Протестировать исправление**

**Ошибка**: `NoMethodError: undefined method 'risk_category' for AML::Client:Class`
**Затронутые файлы**:
- `app/views/aml/clients/_risk_category.slim:4`

### 3. Проблемы с отображением шаблонов
- [ ] **Исправить проблемы с рендерингом**
- [ ] **Протестировать все контроллеры**

## Детализация ошибок

### Список падающих тестов:
1. `AML::OrderRejectionsController GET #new returns http success`
2. `AML::OrderRejectionsController POST #create returns http redirected`
3. `AML::Orders оператор #show`
4. `AML::Orders оператор #index`
5. `AML::PaymentCardOrdersController actions #show`
6. `AML::PaymentCardOrdersController actions #index`

### Выполненные действия:
- [x] Запуск полного набора тестов
- [x] Анализ ошибок в деталях
- [x] Исследование исходного кода проблемных мест
- [x] Создание плана исправления

## Замечания по коду

### Проблема с WorkflowActiverecord:
- Метод `enabled_workflow_events` вызывается в авторайзере, но не определен
- Нужно исследовать библиотеку workflow и найти правильный способ получения доступных событий

### Проблема с Enum:
- `AML::Client` имеет `enum :risk_category`, но в view происходит неправильное обращение
- Нужно использовать правильный синтаксис для получения значений enum

## Выполненные исправления:

### 1. ✅ Метод `enabled_workflow_events`
- **Проблема**: Метод отсутствовал в моделях `AML::Order` и `AML::PaymentCardOrder`
- **Решение**: Добавлен метод с правильной реализацией:
```ruby
def enabled_workflow_events
current_state.events.map { |k, events| events.select { |e| e.condition_applicable?(self, []) } }.flatten.uniq.map(&:name)
end
public :enabled_workflow_events
```
- **Файлы**: `app/models/aml/order.rb`, `app/models/aml/payment_card_order.rb`

### 2. ✅ Проблема с `risk_category` enum
- **Проблема**: View шаблон использовал неправильный синтаксис для enum
- **Решение**: Заменено на статический массив значений:
```slim
- ['A', 'B', 'C'].each do |risk_category|
= client_risk_category_link client, risk_category
```
- **Файл**: `app/views/aml/clients/_risk_category.slim`

### 3. ✅ Настройка Ransack для Rails 8
- **Проблема**: Ransack 4.4.1 требует явного указания searchable attributes и associations
- **Решение**: Добавлены методы `ransackable_attributes` и `ransackable_associations`
- **Файлы**: `app/models/aml/order.rb`, `app/models/aml/payment_card_order.rb`

## Результаты

✅ **Все 6 падающих тестов теперь проходят**
- `AML::OrderRejectionsController GET #new returns http success`
- `AML::OrderRejectionsController POST #create returns http redirected`
- `AML::OrdersController оператор #show`
- `AML::OrdersController оператор #index`
- `AML::PaymentCardOrdersController actions #show`
- `AML::PaymentCardOrdersController actions #index`

✅ **Полный набор тестов**: 115 examples, 0 failures

## Технические детали:

### Исправления workflow:
- Использована правильная сигнатура `condition_applicable?(object, event_arguments)`
- Метод сделан public для доступа из авторайзеров
- Добавлена поддержка для обеих моделей: `Order` и `PaymentCardOrder`

### Совместимость с Rails 8:
- Настроены Ransack searchable attributes
- Настроены Ransack searchable associations
- Исправлены deprecated вызовы

## Итог:

Все тесты успешно проходят, функциональность workflow восстановлена, система авторизации работает корректно. Risk категории клиентов отображаются в интерфейсе.
2 changes: 1 addition & 1 deletion .ruby-version
Original file line number Diff line number Diff line change
@@ -1 +1 @@
2.7.2
3.2.8
Loading