Email.Tests.ps1

####################################################################################################
# Declarations
####################################################################################################

# Set InformationPreference
$InformationPreference = "Continue"

####################################################################################################
# Functions
####################################################################################################

# Import other BitTitan.Runbooks modules
Import-BT_Module BitTitan.Runbooks.Common

####################################################################################################
# The tests
####################################################################################################

describe "Modules/BitTitan.Runbooks.Common/Email/Test-EmailAddressValidity" -Tags "module", "common", "unit" {

    it -TestCases @(
        @{ emailAddress = "ValidEmail@domain.com" },
        @{ emailAddress = "valid.email@domain.com" },
        @{ emailAddress = "valid-email@domain.com" }
    ) "returns true for the valid email address '<emailAddress>'" {
        param ($emailAddress)
        Test-EmailAddressValidity $emailAddress | Should Be $true
    }

    it -TestCases @(
        @{ emailAddress = "invalidEmail.com" },
        @{ emailAddress = "invalidEmail." },
        @{ emailAddress = "invalidEmail.c" }
    ) "returns false for the invalid email address '<emailAddress>'" {
        param ($emailAddress)
        Test-EmailAddressValidity $emailAddress | Should Be $false
    }
}

describe "Modules/BitTitan.Runbooks.Common/Email/Test-DomainValidity" -Tags "module", "common", "unit" {

    it -TestCases @(
        @{ domain = "valid.domain.com" },
        @{ domain = "valid.domain.com.eu" },
        @{ domain = "valid.domain.school.edu.us" }
    ) "returns true for the valid domain '<domain>'" {
        param ($domain)
        Test-DomainValidity $domain | Should Be $true
    }

    it -TestCases @(
        @{ domain = "invalid.domain." },
        @{ domain = "invalid.domain.c" }
    ) "returns false for the invalid domain '<domain>'" {
        param ($domain)
        Test-DomainValidity $domain | Should Be $false
    }

}

describe "Modules/BitTitan.Runbooks.Common/Email/Get-EmailAddressDomain" -Tags "module", "common", "unit" {

    it -TestCases @(
        @{
            emailAddress    = "ValidEmail@domain.com"
            domain          = "domain.com"
        },
        @{
            emailAddress    = "valid.email@domain.com"
            domain          = "domain.com"
        },
        @{
            emailAddress    = "valid-email@domain.com"
            domain          = "domain.com"
        }
    ) "extracts the domain '<domain>' from the valid email address '<emailAddress>'" {
        param ($emailAddress, $domain)
        Get-EmailAddressDomain $emailAddress | Should Be $domain
    }

    it -TestCases @(
        @{ emailAddress = "invalidEmail.com" },
        @{ emailAddress = "invalidEmail." },
        @{ emailAddress = "invalidEmail.c" }
    ) "returns an empty string from the invalid email address '<emailAddress>'" {
        param ($emailAddress)
        Get-EmailAddressDomain $emailAddress | Should Be ""
    }
}

describe "Modules/BitTitan.Runbooks.Common/Email/Get-EmailAddressUsername" -Tags "module", "common", "unit" {

    it -TestCases @(
        @{
            emailAddress    = "ValidEmail@domain.com"
            username        = "ValidEmail"
        },
        @{
            emailAddress    = "valid.email@domain.com"
            username        = "valid.email"
        },
        @{
            emailAddress    = "valid-email@domain.com"
            username        = "valid-email"
        }
    ) "extracts the username '<username>' from the valid email address '<emailAddress>'" {
        param ($emailAddress, $username)
        Get-EmailAddressUsername $emailAddress | Should Be $username
    }

    it -TestCases @(
        @{ emailAddress = "invalidEmail.com" },
        @{ emailAddress = "invalidEmail." },
        @{ emailAddress = "invalidEmail.c" }
    ) "returns an empty string from the invalid email address '<emailAddress>'" {
        param ($emailAddress)
        Get-EmailAddressUsername $emailAddress | Should Be ""
    }
}