@@ -224,33 +224,59 @@ jobs:
224224 destination_dir : .
225225 force_orphan : true
226226
227- - name : Count new tests
228- id : count_tests
227+ - name : Analyze test changes
228+ id : analyze_tests
229229 run : |
230230 git fetch origin main:main
231- new_tests=0
231+ added_tests=()
232+ deleted_tests=()
233+ skipped_tests=()
234+
235+ # Function to extract test names from a file
236+ extract_test_names() {
237+ local file=$1
238+ local ref=$2
239+ if git show "$ref:$file" > /dev/null 2>&1; then
240+ git show "$ref:$file" | grep -E "test\([\'\"].*[\'\"]" | sed -E "s/.*test\(['\"]([^'\"]+)['\"].*/\1/"
241+ fi
242+ }
232243
233244 # Get list of changed test files
234245 for file in $(git diff --name-only main...HEAD | grep -E '^tests/suites/.*\.(spec|test)\.(ts|tsx|js|jsx)$'); do
235- # Count tests in current version
236- if git show HEAD:"$file" > /dev/null 2>&1; then
237- current_tests=$(git show HEAD:"$file" | grep -E "test\([\'\"]" | wc -l)
238- else
239- current_tests=0
240- fi
241-
242- # Count tests in main version
243- if git show main:"$file" > /dev/null 2>&1; then
244- base_tests=$(git show main:"$file" | grep -E "test\([\'\"]" | wc -l)
245- else
246- base_tests=0
247- fi
248-
249- # Add difference to total
250- ((new_tests += current_tests - base_tests))
246+ # Get test names from both versions
247+ current_tests=$(extract_test_names "$file" HEAD)
248+ base_tests=$(extract_test_names "$file" main)
249+
250+ # Compare tests
251+ while IFS= read -r test; do
252+ if [[ -n "$test" ]]; then
253+ if ! echo "$base_tests" | grep -Fxq "$test"; then
254+ added_tests+=("$test")
255+ fi
256+ fi
257+ done <<< "$current_tests"
258+
259+ while IFS= read -r test; do
260+ if [[ -n "$test" ]]; then
261+ if ! echo "$current_tests" | grep -Fxq "$test"; then
262+ deleted_tests+=("$test")
263+ fi
264+ fi
265+ done <<< "$base_tests"
251266 done
252267
253- echo "new_tests=$new_tests" >> $GITHUB_OUTPUT
268+ # Get skipped tests from test results
269+ if [ -f "playwright-artifacts/test-results.json" ]; then
270+ skipped_tests=($(jq -r '.suites[].specs[] | select(.ok == false and .skipped == true) | .title' playwright-artifacts/test-results.json))
271+ fi
272+
273+ # Create JSON output
274+ echo "added_tests=$(IFS=,; echo "${added_tests[*]}")" >> $GITHUB_OUTPUT
275+ echo "deleted_tests=$(IFS=,; echo "${deleted_tests[*]}")" >> $GITHUB_OUTPUT
276+ echo "skipped_tests=$(IFS=,; echo "${skipped_tests[*]}")" >> $GITHUB_OUTPUT
277+ echo "added_count=${#added_tests[@]}" >> $GITHUB_OUTPUT
278+ echo "deleted_count=${#deleted_tests[@]}" >> $GITHUB_OUTPUT
279+ echo "skipped_count=${#skipped_tests[@]}" >> $GITHUB_OUTPUT
254280
255281 - name : Update PR description
256282 uses : actions/github-script@v6
@@ -296,17 +322,33 @@ jobs:
296322 parseFloat(percent) > 0 ? '🔺' :
297323 parseFloat(percent) < 0 ? '🔽' : '✅';
298324
299- const newTests = parseInt('${{ steps.count_tests.outputs.new_tests }}');
300- const testsStatus = newTests > 0 ? '✨' : '➖';
325+ const addedTests = '${{ steps.analyze_tests.outputs.added_tests }}'.split(',').filter(Boolean);
326+ const deletedTests = '${{ steps.analyze_tests.outputs.deleted_tests }}'.split(',').filter(Boolean);
327+ const skippedTests = '${{ steps.analyze_tests.outputs.skipped_tests }}'.split(',').filter(Boolean);
328+
329+ const addedCount = parseInt('${{ steps.analyze_tests.outputs.added_count }}');
330+ const deletedCount = parseInt('${{ steps.analyze_tests.outputs.deleted_count }}');
331+ const skippedCount = parseInt('${{ steps.analyze_tests.outputs.skipped_count }}');
332+
333+ const changesText = [
334+ addedCount > 0 ? `✨${addedCount}` : '',
335+ deletedCount > 0 ? `🗑️${deletedCount}` : '',
336+ skippedCount > 0 ? `⏭️${skippedCount}` : ''
337+ ].filter(Boolean).join(' ') || '➖';
301338
302339 const ciSection = `## CI Results
303340
304341 ### Test Status: <span style="color: ${statusColor};">${status}</span>
305342 📊 [Full Report](${reportUrl})
306343
307- | Total | Passed | Failed | Flaky | Skipped | New Tests |
308- |:-----:|:------:|:------:|:-----:|:-------:|:---------:|
309- | ${testResults.total} | ${testResults.passed} | ${testResults.failed} | ${testResults.flaky} | ${testResults.skipped} | ${testsStatus} ${newTests} |
344+ | Total | Passed | Failed | Flaky | Changes |
345+ |:-----:|:------:|:------:|:-----:|:-------:|
346+ | ${testResults.total} | ${testResults.passed} | ${testResults.failed} | ${testResults.flaky} | ${changesText} |
347+
348+ ### Test Changes Details
349+ ${addedCount > 0 ? `\n✨ **Added Tests (${addedCount}):**\n${addedTests.map(t => `- ${t}`).join('\n')}` : ''}
350+ ${deletedCount > 0 ? `\n🗑️ **Deleted Tests (${deletedCount}):**\n${deletedTests.map(t => `- ${t}`).join('\n')}` : ''}
351+ ${skippedCount > 0 ? `\n⏭️ **Skipped Tests (${skippedCount}):**\n${skippedTests.map(t => `- ${t}`).join('\n')}` : ''}
310352
311353 ### Bundle Size: ${bundleStatus}
312354 Current: ${formatSize(currentSize)} | Main: ${formatSize(mainSize)}
@@ -325,7 +367,7 @@ jobs:
325367 - Bundle size is measured for the entire 'dist' directory.
326368 - 📊 indicates links to detailed reports.
327369 - 🔺 indicates increase, 🔽 decrease, and ✅ no change in bundle size.
328- - ${testsStatus} indicates ${newTests} new test cases added in this PR.
370+ - Test changes: ✨ added, 🗑️ deleted, ⏭️ skipped
329371 </details>`;
330372
331373 const { data: pullRequest } = await github.rest.pulls.get({
0 commit comments