Tests/Get-TimeSheet.Tests.ps1

BeforeAll -ScriptBlock {
    $Loc =  Split-Path -Path $PSScriptRoot -Parent
    . $Loc/Get-TimeSheet.ps1
    
}

Describe -Name 'Get-TimeSheet' -Fixture {
    Context -Name 'Testing Parameters' -Fixture {
        BeforeAll -ScriptBlock {
            $Command = Get-Command -Name Get-TimeSheet
        }

        It -Name 'Has the expected parameter: <_>' -TestCases @(
            'FileDate'
            'Directory'
        ) -Test {
            $Command | Should -HaveParameter $_
        }
    }

    Context -Name 'Testing running' -Fixture {
        BeforeAll -Scriptblock {
            Mock -CommandName Get-ChildItem -MockWith {
                '20220728.txt'
            } -Verifiable

            Mock -CommandName Get-Content -MockWith {
                @'
08:37 28/07/2022 - Start - Daily Checks
09:14 28/07/2022 - End - Daily Checks
09:14 28/07/2022 - Start - Daily Standup
10:07 28/07/2022 - End - Daily Standup
10:14 28/07/2022 - Start - Coffee Break
11:03 28/07/2022 - End - Coffee Break
11:03 28/07/2022 - Start - Dedicated Code Review
11:18 28/07/2022 - End - Dedicated Code Review
11:22 28/07/2022 - Start - Daily Checks
11:53 28/07/2022 - End - Daily Checks
11:56 28/07/2022 - Start - Review Upgrade plan
12:24 28/07/2022 - End - Review Upgrade plan
12:35 28/07/2022 - Start - Prep for Upgrade
12:59 28/07/2022 - End - Prep for Upgrade
13:00 28/07/2022 - Start - Call with PM: Issue
13:45 28/07/2022 - End - Call with PM: Issue
14:24 28/07/2022 - Start - Update Meeting
15:00 28/07/2022 - End - Update Meeting
'@
 -split "\r?\n"
            }

            $ResultParams = @{
                FileDate = Get-Date -Date '2022-07-28'
            }
            $Result = Get-TimeSheet @ResultParams
        }

        It -Name 'Should return expected subject: <_.Filter>' -TestCases @(
            [PSCustomObject] @{Filter = 'Daily Checks'}
            [PSCustomObject] @{Filter = 'Daily Standup'}
            [PSCustomObject] @{Filter = 'Coffee Break'}
            [PSCustomObject] @{Filter = 'Dedicated Code Review'}
            [PSCustomObject] @{Filter = 'Review Upgrade plan'}
            [PSCustomObject] @{Filter = 'Prep for Upgrade'}
            [PSCustomObject] @{Filter = 'Call with PM: Issue'}
            [PSCustomObject] @{Filter = 'Update Meeting'}
        ) -Test {
            $Result.Subject | Should -Contain $_.Filter
        }

        It -Name 'Should return expected date: <_.Date> for subject: <_.Subject>' -TestCases @(
            [PSCustomObject] @{Date = Get-Date '2022-07-28 08:37'; Subject = 'Daily Checks'}
        ) -Test {
            $TC = $_
            $Result | Where-Object {
                $_.Subject -eq $TC.Subject -and
                $_.Date -eq $TC.Date
            } | Should -Not -BeNullOrEmpty
        }
    }
}