DoCli/Tests/Unit/Objects/Valiators/ProxyTypeValidatorTests.ps1
using namespace DoFramework.Testing; using namespace DoFramework.Validators; using namespace System.Reflection; using module "..\..\..\..\Objects\Validators\ProxyTypeValidator.psm1"; Describe 'ProxyTypeValidatorTests' { BeforeAll { Class SampleClass {} Add-Type -Language CSharp -TypeDefinition "public sealed class SealedClass {}"; Add-Type -Language CSharp -TypeDefinition "public class NormalClass {}"; Add-Type -Language CSharp -TypeDefinition "public abstract class AbstractClass {}"; Add-Type -Language CSharp -TypeDefinition "public interface AnInterface {}"; } Context 'Tests' { it 'Valid if Powershell Class' { # Arrange [ProxyTypeValidator] $sut = [ProxyTypeValidator]::new(); # Act [ValidationResult] $result = $sut.Validate([SampleClass]); # Assert $result.IsValid | Should -Be $true; $result.Errors.Count | Should -Be 0; } it 'Valid if C# Class' { # Arrange [ProxyTypeValidator] $sut = [ProxyTypeValidator]::new(); # Act [ValidationResult] $result = $sut.Validate([NormalClass]); # Assert $result.IsValid | Should -Be $true; $result.Errors.Count | Should -Be 0; } it 'Valid if abstract C# Class' { # Arrange [ProxyTypeValidator] $sut = [ProxyTypeValidator]::new(); # Act [ValidationResult] $result = $sut.Validate([AbstractClass]); # Assert $result.IsValid | Should -Be $true; $result.Errors.Count | Should -Be 0; } it 'Valid if C# Interface' { # Arrange [ProxyTypeValidator] $sut = [ProxyTypeValidator]::new(); # Act [ValidationResult] $result = $sut.Validate([AnInterface]); # Assert $result.IsValid | Should -Be $true; $result.Errors.Count | Should -Be 0; } it 'Invalid if Sealed C# Class' { # Arrange [ProxyTypeValidator] $sut = [ProxyTypeValidator]::new(); # Act [ValidationResult] $result = $sut.Validate([SealedClass]); # Assert $result.IsValid | Should -Be $false; $result.Errors.Count | Should -Be 1; $result.Errors[0] | Should -Be "Cannot create a proxy for type $([SealedClass].FullName) - it must either be an interface or an unsealed type."; } } } |