[dev-v5] [Playwrights Tests] Add fundamentals for Playwright testing … #2020
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# 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 |