feature/core-service-api-structure #3
@@ -1,118 +0,0 @@
|
|||||||
# Pre-commit Hook для тестирования
|
|
||||||
|
|
||||||
## 📋 Описание
|
|
||||||
|
|
||||||
Pre-commit хук автоматически запускает все тесты перед каждым коммитом, чтобы гарантировать качество кода.
|
|
||||||
|
|
||||||
## 🚀 Как это работает
|
|
||||||
|
|
||||||
При выполнении `git commit` хук:
|
|
||||||
|
|
||||||
1. **Автоматически запускает все тесты** в директории `examples/`
|
|
||||||
2. **Показывает статистику** прохождения тестов
|
|
||||||
3. **Разрешает коммит** только если все тесты прошли успешно
|
|
||||||
4. **Блокирует коммит** если тесты не прошли
|
|
||||||
|
|
||||||
## 📊 Что тестируется
|
|
||||||
|
|
||||||
### Auth тесты (5 тестов)
|
|
||||||
- JWT token generation/validation
|
|
||||||
- Password hashing/verification
|
|
||||||
- Error handling
|
|
||||||
|
|
||||||
### API тесты (5 тестов)
|
|
||||||
- HTTP handlers (Register, Login)
|
|
||||||
- Middleware аутентификации
|
|
||||||
- Валидация запросов
|
|
||||||
|
|
||||||
### Repository тесты (10 тестов)
|
|
||||||
- CRUD операции для всех сущностей
|
|
||||||
- SQL запросы с правильными параметрами
|
|
||||||
- JSONB field handling
|
|
||||||
|
|
||||||
## 🔧 Использование
|
|
||||||
|
|
||||||
### Обычный коммит
|
|
||||||
```bash
|
|
||||||
git add .
|
|
||||||
git commit -m "feat: новая функциональность"
|
|
||||||
```
|
|
||||||
|
|
||||||
Хук автоматически запустит тесты и покажет результат.
|
|
||||||
|
|
||||||
### Пропуск тестов (в экстренных случаях)
|
|
||||||
```bash
|
|
||||||
git commit --no-verify -m "hotfix: критическое исправление"
|
|
||||||
```
|
|
||||||
|
|
||||||
### Ручной запуск тестов
|
|
||||||
```bash
|
|
||||||
# Все тесты
|
|
||||||
go test ./examples/... -v
|
|
||||||
|
|
||||||
# Отдельные модули
|
|
||||||
go test ./examples/auth_test.go -v
|
|
||||||
go test ./examples/api_test.go -v
|
|
||||||
go test ./examples/repository_test.go -v
|
|
||||||
```
|
|
||||||
|
|
||||||
## 📁 Расположение хука
|
|
||||||
|
|
||||||
Хук находится в: `.git/hooks/pre-commit`
|
|
||||||
|
|
||||||
## ⚙️ Настройка
|
|
||||||
|
|
||||||
### Установка хука
|
|
||||||
```bash
|
|
||||||
# Хук уже установлен автоматически
|
|
||||||
# Для переустановки:
|
|
||||||
chmod +x .git/hooks/pre-commit
|
|
||||||
```
|
|
||||||
|
|
||||||
### Отключение хука
|
|
||||||
```bash
|
|
||||||
mv .git/hooks/pre-commit .git/hooks/pre-commit.disabled
|
|
||||||
```
|
|
||||||
|
|
||||||
### Включение хука
|
|
||||||
```bash
|
|
||||||
mv .git/hooks/pre-commit.disabled .git/hooks/pre-commit
|
|
||||||
chmod +x .git/hooks/pre-commit
|
|
||||||
```
|
|
||||||
|
|
||||||
## 🎯 Преимущества
|
|
||||||
|
|
||||||
1. **Автоматическое тестирование** - не нужно помнить о запуске тестов
|
|
||||||
2. **Качество кода** - коммиты с ошибками не попадают в репозиторий
|
|
||||||
3. **Статистика** - видно покрытие тестами
|
|
||||||
4. **Быстрая обратная связь** - ошибки обнаруживаются сразу
|
|
||||||
|
|
||||||
## 🚨 Что делать если тесты не прошли
|
|
||||||
|
|
||||||
1. **Исправить ошибки** в коде
|
|
||||||
2. **Запустить тесты вручную** для диагностики:
|
|
||||||
```bash
|
|
||||||
go test ./examples/... -v
|
|
||||||
```
|
|
||||||
3. **Повторить коммит** после исправления
|
|
||||||
|
|
||||||
## 📝 Пример вывода
|
|
||||||
|
|
||||||
```
|
|
||||||
🧪 Запуск тестов перед коммитом...
|
|
||||||
📋 Запуск всех тестов...
|
|
||||||
=== RUN TestAuthHandler_Register
|
|
||||||
--- PASS: TestAuthHandler_Register (0.00s)
|
|
||||||
...
|
|
||||||
PASS
|
|
||||||
ok erp-mvp/core-service/examples (cached)
|
|
||||||
✅ Все тесты прошли успешно!
|
|
||||||
|
|
||||||
📊 Статистика тестов:
|
|
||||||
Auth тесты: 8/5 ✅
|
|
||||||
API тесты: 6/5 ✅
|
|
||||||
Repository тесты: 11/10 ✅
|
|
||||||
|
|
||||||
🎉 Коммит разрешен!
|
|
||||||
[feature/core-service-api-structure 508b57b] feat: новая функциональность
|
|
||||||
```
|
|
||||||
@@ -1,5 +0,0 @@
|
|||||||
# Test comment
|
|
||||||
# Another test comment
|
|
||||||
# Final test comment
|
|
||||||
# Test from root
|
|
||||||
# Test hook
|
|
||||||
@@ -3,6 +3,7 @@ module erp-mvp/core-service
|
|||||||
go 1.21
|
go 1.21
|
||||||
|
|
||||||
require (
|
require (
|
||||||
|
github.com/DATA-DOG/go-sqlmock v1.5.2
|
||||||
github.com/gin-gonic/gin v1.10.1
|
github.com/gin-gonic/gin v1.10.1
|
||||||
github.com/go-playground/validator/v10 v10.20.0
|
github.com/go-playground/validator/v10 v10.20.0
|
||||||
github.com/golang-jwt/jwt/v5 v5.3.0
|
github.com/golang-jwt/jwt/v5 v5.3.0
|
||||||
@@ -10,11 +11,11 @@ require (
|
|||||||
github.com/joho/godotenv v1.4.0
|
github.com/joho/godotenv v1.4.0
|
||||||
github.com/lib/pq v1.10.9
|
github.com/lib/pq v1.10.9
|
||||||
github.com/sirupsen/logrus v1.9.3
|
github.com/sirupsen/logrus v1.9.3
|
||||||
|
github.com/stretchr/testify v1.11.1
|
||||||
golang.org/x/crypto v0.23.0
|
golang.org/x/crypto v0.23.0
|
||||||
)
|
)
|
||||||
|
|
||||||
require (
|
require (
|
||||||
github.com/DATA-DOG/go-sqlmock v1.5.2 // indirect
|
|
||||||
github.com/bytedance/sonic v1.11.6 // indirect
|
github.com/bytedance/sonic v1.11.6 // indirect
|
||||||
github.com/bytedance/sonic/loader v0.1.1 // indirect
|
github.com/bytedance/sonic/loader v0.1.1 // indirect
|
||||||
github.com/cloudwego/base64x v0.1.4 // indirect
|
github.com/cloudwego/base64x v0.1.4 // indirect
|
||||||
@@ -34,7 +35,6 @@ require (
|
|||||||
github.com/pelletier/go-toml/v2 v2.2.2 // indirect
|
github.com/pelletier/go-toml/v2 v2.2.2 // indirect
|
||||||
github.com/pmezard/go-difflib v1.0.0 // indirect
|
github.com/pmezard/go-difflib v1.0.0 // indirect
|
||||||
github.com/stretchr/objx v0.5.2 // indirect
|
github.com/stretchr/objx v0.5.2 // indirect
|
||||||
github.com/stretchr/testify v1.11.1 // indirect
|
|
||||||
github.com/twitchyliquid64/golang-asm v0.15.1 // indirect
|
github.com/twitchyliquid64/golang-asm v0.15.1 // indirect
|
||||||
github.com/ugorji/go/codec v1.2.12 // indirect
|
github.com/ugorji/go/codec v1.2.12 // indirect
|
||||||
golang.org/x/arch v0.8.0 // indirect
|
golang.org/x/arch v0.8.0 // indirect
|
||||||
|
|||||||
@@ -71,7 +71,6 @@ github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/
|
|||||||
github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU=
|
github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU=
|
||||||
github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4=
|
github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4=
|
||||||
github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo=
|
github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo=
|
||||||
github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg=
|
|
||||||
github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
|
github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
|
||||||
github.com/stretchr/testify v1.11.1 h1:7s2iGBzp5EwR7/aIZr8ao5+dra3wiQyKjjFuvgVKu7U=
|
github.com/stretchr/testify v1.11.1 h1:7s2iGBzp5EwR7/aIZr8ao5+dra3wiQyKjjFuvgVKu7U=
|
||||||
github.com/stretchr/testify v1.11.1/go.mod h1:wZwfW3scLgRK+23gO65QZefKpKQRnfz6sD981Nm4B6U=
|
github.com/stretchr/testify v1.11.1/go.mod h1:wZwfW3scLgRK+23gO65QZefKpKQRnfz6sD981Nm4B6U=
|
||||||
|
|||||||
Reference in New Issue
Block a user