Tasks/DevX.Tasks.ps1

# Copyright (c) Microsoft Corporation.
# Licensed under the MIT License.

# Synopsis: Compose the module from source files
task ComposeModule InitializeDevXConfiguration, {
  <#
    .SYNOPSIS
  #>


  Build-ComposedModule -ProjectRootFolderPath $BuildRoot
}

# Synopsis: Load the DevX configuration file to use in other tasks
task InitializeDevXConfiguration {
  <#
    .SYNOPSIS
  #>


  $DevXConfigurationFile = Join-Path -Path $BuildRoot -ChildPath '.DevX.jsonc'

  if (Test-Path $DevXConfigurationFile) {
    $Script:DevX = Get-Content -Path $DevXConfigurationFile -Raw
    | ConvertFrom-Json -Depth 99
  }
}

# Synopsis: Define shared Pester configuration for test tasks
task ConfigurePester -Data $PSBoundParameters InitializeDevXConfiguration, {
  <#
    .SYNOPSIS
  #>


  $Script:PesterConfiguration = New-PesterConfiguration
  $Script:PesterConfiguration.Output.Verbosity = 'Detailed'
}

# Synopsis: Run unit tests for internal functionality
task Unit -If (-not $SkipUnitTests) ConfigurePester, {
  <#
    .SYNOPSIS
  #>


  $UnitTestPath = Join-Path -Path $BuildRoot -ChildPath Source

  if (Get-ChildItem -Path $UnitTestPath -Recurse -Include '*.Tests.ps1') {
    $Configuration = $Script:PesterConfiguration
    $Configuration.Run.Path = $UnitTestPath
    $Configuration.Filter.Tag = 'Unit'
    $Configuration.TestResult = @{
      Enabled       = $true
      OutputPath    = Join-Path -Path $BuildRoot -ChildPath "$($Script:DevX.ModuleName).Unit.Results.xml"
      TestSuiteName = $Script:DevX.ModuleName
    }
    Invoke-Pester -Configuration $Configuration
  }
}

# Synopsis: Run acceptance tests on composed module
task Acceptance -If (-not $SkipAcceptanceTests) ConfigurePester, {
  <#
    .SYNOPSIS
  #>


  $AcceptanceTestPath = Join-Path -Path $BuildRoot -ChildPath Spec

  if (
    (Test-Path -Path $AcceptanceTestPath) -and
    (Get-ChildItem -Path $AcceptanceTestPath -Recurse -Include '*.Tests.ps1')
  ) {
    $Configuration            = $Script:PesterConfiguration
    $Configuration.Run.Path   = $AcceptanceTestPath
    $Configuration.Filter.Tag = 'Acceptance'
    $Configuration.TestResult = @{
      Enabled       = $true
      OutputPath    = Join-Path -Path $BuildRoot -ChildPath "$($Script:DevX.ModuleName).Acceptance.Results.xml"
      TestSuiteName = $Script:DevX.ModuleName
    }
    Invoke-Pester -Configuration $Configuration
  }
}

# Synopsis: Run all tests; Acceptance disabled for now
task Test ConfigurePester, Unit, Acceptance