-
Notifications
You must be signed in to change notification settings - Fork 6
152 lines (128 loc) · 5.08 KB
/
Copy pathintegration_tests.yml
File metadata and controls
152 lines (128 loc) · 5.08 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
name: Integration Tests
on:
push:
branches: [main, develop]
pull_request:
branches: [main, develop]
workflow_dispatch: # Permet l'exécution manuelle
jobs:
# Tests unitaires (rapides, toujours exécutés)
unit-tests:
runs-on: ubuntu-latest
timeout-minutes: 10
steps:
- name: 📥 Checkout code
uses: actions/checkout@v4
- name: ☕ Setup Flutter
uses: subosito/flutter-action@v2
with:
flutter-version: '3.38.4'
channel: 'stable'
cache: true
- name: 📦 Install dependencies
run: flutter pub get
- name: 🔨 Generate code
run: flutter pub run build_runner build --delete-conflicting-outputs
- name: 🔍 Analyze code
run: flutter analyze --no-fatal-infos
- name: 🧪 Run unit tests
run: flutter test --exclude-tags=integration --coverage
- name: 📊 Upload coverage to Codecov
uses: codecov/codecov-action@v4
with:
files: ./coverage/lcov.info
flags: unittests
name: unit-tests-coverage
# Tests d'intégration (plus longs, avec serveur réel)
integration-tests:
runs-on: ubuntu-latest
timeout-minutes: 20
needs: unit-tests # Exécuter seulement si les tests unitaires passent
# Exécuter les tests d'intégration seulement sur main/develop ou manuellement
if: github.ref == 'refs/heads/main' || github.ref == 'refs/heads/develop' || github.event_name == 'workflow_dispatch'
steps:
- name: 📥 Checkout code
uses: actions/checkout@v4
- name: ☕ Setup Flutter
uses: subosito/flutter-action@v2
with:
flutter-version: '3.38.4'
channel: 'stable'
cache: true
- name: 📦 Install dependencies
run: flutter pub get
- name: 🔨 Generate code
run: flutter pub run build_runner build --delete-conflicting-outputs
- name: 🔧 Install system dependencies
run: |
sudo apt-get update
sudo apt-get install -y curl
curl --version
- name: 🔐 Check integration test secrets
id: secrets
env:
TEST_SERVER_URL: ${{ secrets.TEST_SERVER_URL }}
run: |
if [ -z "$TEST_SERVER_URL" ]; then
echo "available=false" >> $GITHUB_OUTPUT
echo "::warning::Secrets TEST_SERVER_URL/USERNAME/PASSWORD/MODULES non configurés — tests d'intégration ignorés. Configurez-les dans Settings → Secrets and variables → Actions pour activer cette étape."
else
echo "available=true" >> $GITHUB_OUTPUT
fi
- name: 📝 Générer .env.test depuis les secrets
if: steps.secrets.outputs.available == 'true'
env:
TEST_SERVER_URL: ${{ secrets.TEST_SERVER_URL }}
TEST_USERNAME: ${{ secrets.TEST_USERNAME }}
TEST_PASSWORD: ${{ secrets.TEST_PASSWORD }}
TEST_MODULES: ${{ secrets.TEST_MODULES }}
run: |
cat > .env.test <<EOF
TEST_SERVER_URL=$TEST_SERVER_URL
TEST_USERNAME=$TEST_USERNAME
TEST_PASSWORD=$TEST_PASSWORD
TEST_MODULES=$TEST_MODULES
EOF
- name: 🧪 Run integration tests (Real HTTP)
if: steps.secrets.outputs.available == 'true'
env:
TEST_SERVER_URL: ${{ secrets.TEST_SERVER_URL }}
TEST_USERNAME: ${{ secrets.TEST_USERNAME }}
TEST_PASSWORD: ${{ secrets.TEST_PASSWORD }}
TEST_MODULES: ${{ secrets.TEST_MODULES }}
run: |
echo "🌐 Exécution des tests d'intégration avec vraies requêtes HTTP..."
chmod +x run_integration_tests.sh
./run_integration_tests.sh
- name: 🧪 Run Flutter integration tests (Limited HTTP)
if: steps.secrets.outputs.available == 'true'
env:
TEST_SERVER_URL: ${{ secrets.TEST_SERVER_URL }}
TEST_USERNAME: ${{ secrets.TEST_USERNAME }}
TEST_PASSWORD: ${{ secrets.TEST_PASSWORD }}
TEST_MODULES: ${{ secrets.TEST_MODULES }}
run: |
echo "🧪 Exécution des tests Flutter (avec limitations HTTP)..."
flutter test test/integration/ --tags=integration --reporter=expanded || echo "⚠️ Tests Flutter échoués (limitations TestWidgetsFlutterBinding attendues)"
- name: 📊 Upload test results
if: always()
uses: actions/upload-artifact@v4
with:
name: integration-test-results
path: |
test/integration/
coverage/
# Notification de succès/échec
notify:
runs-on: ubuntu-latest
needs: [unit-tests, integration-tests]
if: always()
steps:
- name: ✅ Tests passed
if: ${{ needs.unit-tests.result == 'success' && (needs.integration-tests.result == 'success' || needs.integration-tests.result == 'skipped') }}
run: echo "✅ All tests passed successfully!"
- name: ❌ Tests failed
if: ${{ needs.unit-tests.result == 'failure' || needs.integration-tests.result == 'failure' }}
run: |
echo "❌ Some tests failed. Check the logs above."
exit 1