Skip to content

[dev-v5] [Playwrights Tests] Add fundamentals for Playwright testing … #2020

[dev-v5] [Playwrights Tests] Add fundamentals for Playwright testing …

[dev-v5] [Playwrights Tests] Add fundamentals for Playwright testing … #2020

# This workflow will build a .NET project
# For more information see: https://docs.github.com/en/actions/automating-builds-and-tests/building-and-testing-net
name: Build and Test Core Lib
on:
# Allow manually running the workflow
workflow_dispatch:
push:
branches:
- dev-v5
paths-ignore:
- '**/*.gitignore'
- '**/*.gitattributes'
pull_request:
types: [opened, synchronize, reopened, closed]
branches:
- dev-v5
paths-ignore:
- '**/*.gitignore'
- '**/*.gitattributes'
env:
PROJECTS: "./src/Core/Microsoft.FluentUI.AspNetCore.Components.csproj"
TESTS: "./tests/Core/Components.Tests.csproj"
INTEGRATION_TEST: "./tests/Integration/Components.IntegrationTests.csproj"
MIN_COVERAGE: "98"
jobs:
Build:
name: Build and Test Core Lib
runs-on: ubuntu-latest
permissions:
checks: write
contents: read
pull-requests: write
steps:
- name: Checkout source
uses: actions/checkout@v4
- name: Setup .NET 9.0
uses: actions/setup-dotnet@v4
with:
dotnet-version: 9.0.x
dotnet-quality: ga
# Build
- name: Restore
run: dotnet restore
- name: Build
run: dotnet build ${{ env.PROJECTS }} --configuration Release -warnaserror
working-directory: ${{ github.workspace }}
# Unit Tests
- name: Tests
run: dotnet test ${{ env.TESTS }} --logger:trx --results-directory ./TestResults --verbosity normal --configuration Release /p:CollectCoverage=true /p:CoverletOutputFormat=cobertura /p:DebugType=Full
working-directory: ${{ github.workspace }}
- name: Publish Unit Tests
if: success() || failure()
continue-on-error: true
uses: dorny/test-reporter@v1
with:
name: Core Tests
path: '**/*.trx'
reporter: dotnet-trx
list-tests: failed
fail-on-error: false
- name: Extract Failed Tests
if: success() || failure()
shell: pwsh
run: |
$trxFilePath = Get-ChildItem -Path .\TestResults -Filter *.trx | Sort-Object LastWriteTime | Select-Object -Last 1
$testResults = Get-Content -Path $trxFilePath
# Initialize an empty array to store failed test names
$failedTests = "# Unit Tests"
$failedTestsCount = 0
# Search for failed test names in the TRX file
foreach ($line in $testResults) {
if ($line.Contains(" outcome=`"Failed`" "))
{
$matches = [regex]::Match($line, '(?<=testName=")([^"]+)')
if ($matches.Success) {
$failedTestsCount++
$testName = $matches.Groups[1].Value
$failedTests += "`n- ❌[FAILED] $testName"
}
}
}
if ($failedTestsCount -eq 0) {
$failedTests = "✅ All tests passed successfully"
}
$failedTests += "`n`n Details on [your Workflow / Core Tests](/microsoft/fluentui-blazor/actions/workflows/build-core-lib.yml) page."
Write-Host "$failedTests"
Set-Content -Path ./TestResults/ExtractedTests.md -Value $failedTests
working-directory: ${{ github.workspace }}
- name: Publish unit tests summary
if: success() || failure()
continue-on-error: true
uses: marocchino/sticky-pull-request-comment@v2
with:
header: Test Results
path: ./TestResults/ExtractedTests.md
# Test Coverage
- name: Report Generator
uses: danielpalme/ReportGenerator-GitHub-Action@5.2.4
with:
reports: '**/coverage.cobertura.xml;**/coverage.net9.0.cobertura.xml'
targetdir: 'CoverageReports'
title: 'Unit Tests Code Coverage'
classfilters: '-Microsoft.FluentUI.AspNetCore.Components.DesignTokens.*'
filefilters: '-*RegexGenerator.g.cs'
customSettings: 'minimumCoverageThresholds:lineCoverage=${{ env.MIN_COVERAGE }};riskHotspotsAnalysisThresholds:metricThresholdForCrapScore=30;riskHotspotsAnalysisThresholds:metricThresholdForCyclomaticComplexity=30'
reporttypes: 'HtmlInline;MarkdownSummaryGithub'
- name: Upload coverage report
uses: actions/upload-artifact@v4
with:
name: CoverageReports
path: CoverageReports
- name: Publish coverage summary
uses: marocchino/sticky-pull-request-comment@v2
continue-on-error: true
with:
path: CoverageReports/SummaryGithub.md
# Integration Tests
- name: Build Integration Tests
run: dotnet build ${{ env.INTEGRATION_TEST }} --verbosity normal --configuration Release
working-directory: ${{ github.workspace }}
- name: Install Playwright
if: success() || failure()
shell: pwsh
working-directory: ${{ github.workspace }}
run: |
./tests/Integration/bin/Release/net9.0/playwright.ps1 install
- name: Run Integration Tests
run: dotnet test ${{ env.INTEGRATION_TEST }} --logger:trx --results-directory ./TestResults --verbosity normal --configuration Release
working-directory: ${{ github.workspace }}
analyze:
name: Analyze
runs-on: ubuntu-latest
permissions:
actions: read
contents: read
security-events: write
if: github.event_name != 'pull_request' # Not analyzing PRs
strategy:
fail-fast: false
matrix:
language: [ 'csharp' ]
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Setup .NET 9.0
uses: actions/setup-dotnet@v4
with:
dotnet-version: 9.0.x
dotnet-quality: ga
- name: Initialize CodeQL
uses: github/codeql-action/init@v3
with:
languages: ${{ matrix.language }}
- if: matrix.language == 'csharp'
name: Manually build CSharp on .NET
run: |
dotnet build ${{ env.PROJECTS }}
- name: Perform CodeQL Analysis
uses: github/codeql-action/analyze@v3