diff --git a/src/Digitall.Dataverse.Testing/OrganizationRequests/RetrieveAttributeFake.cs b/src/Digitall.Dataverse.Testing/OrganizationRequests/RetrieveAttributeFake.cs index 013eecc..ba1fc9c 100644 --- a/src/Digitall.Dataverse.Testing/OrganizationRequests/RetrieveAttributeFake.cs +++ b/src/Digitall.Dataverse.Testing/OrganizationRequests/RetrieveAttributeFake.cs @@ -6,9 +6,20 @@ namespace Digitall.Dataverse.Testing.OrganizationRequests; -public class RetrieveAttributeFake : OrganizationRequestFake +public class RetrieveAttributeFake : IOrganizationRequestFake { - public override RetrieveAttributeResponse Execute(RetrieveAttributeRequest organizationRequest, FakeOrganizationService fakeOrganizationService) + public Type ForType => typeof(RetrieveAttributeRequest); + + public OrganizationResponse Execute(OrganizationRequest organizationRequest, FakeOrganizationService fakeOrganizationService) + { + ArgumentNullException.ThrowIfNull(organizationRequest); + + return organizationRequest is RetrieveAttributeRequest retrieveAttributeRequest + ? Execute(retrieveAttributeRequest, fakeOrganizationService) + : throw new InvalidCastException($"Cannot cast {organizationRequest.GetType()} to {typeof(RetrieveAttributeRequest)}"); + } + + private static RetrieveAttributeResponse Execute(RetrieveAttributeRequest organizationRequest, FakeOrganizationService fakeOrganizationService) { ArgumentNullException.ThrowIfNull(organizationRequest); diff --git a/tests/Digitall.Dataverse.Testing.Tests/OrganizationRequests/RetrieveAttributeFakeTests.cs b/tests/Digitall.Dataverse.Testing.Tests/OrganizationRequests/RetrieveAttributeFakeTests.cs index 2a36290..b41f45f 100644 --- a/tests/Digitall.Dataverse.Testing.Tests/OrganizationRequests/RetrieveAttributeFakeTests.cs +++ b/tests/Digitall.Dataverse.Testing.Tests/OrganizationRequests/RetrieveAttributeFakeTests.cs @@ -2,6 +2,7 @@ // DIGITALL Nature licenses this file to you under the Microsoft Public License. using Digitall.Dataverse.Testing.OrganizationRequests; +using Microsoft.Xrm.Sdk; using Microsoft.Xrm.Sdk.Messages; using Microsoft.Xrm.Sdk.Metadata; @@ -9,7 +10,7 @@ namespace Digitall.Dataverse.Testing.Tests.OrganizationRequests; public class RetrieveAttributeFakeTests { - private FakeOrganizationService _sut = null!; + private FakeOrganizationService _sut = new(); [Before(Test)] public async Task Setup() @@ -24,8 +25,9 @@ private static EntityMetadata CreateMetadataWithAttribute(string entityLogicalNa var metadata = new EntityMetadata { LogicalName = entityLogicalName }; // Use reflection to set Attributes since it has no public setter - var attributesProperty = typeof(EntityMetadata).GetProperty(nameof(EntityMetadata.Attributes)); - attributesProperty!.SetValue(metadata, new[] { attribute }); + var attributesProperty = typeof(EntityMetadata).GetProperty(nameof(EntityMetadata.Attributes)) + ?? throw new InvalidOperationException($"Property {nameof(EntityMetadata.Attributes)} was not found."); + attributesProperty.SetValue(metadata, new[] { attribute }); return metadata; } @@ -52,13 +54,11 @@ public async Task Execute_NonRegisteredEntity_ThrowsException() var nameAttribute = new StringAttributeMetadata("name") { LogicalName = "name" }; _sut.AddMetadata(CreateMetadataWithAttribute("account", nameAttribute)); - void Action() => _sut.Execute(new RetrieveAttributeRequest + Assert.Throws(() => _sut.Execute(new RetrieveAttributeRequest { EntityLogicalName = "contact", LogicalName = "name" - }); - - Assert.Throws(Action); + })); await Task.CompletedTask; } @@ -68,22 +68,27 @@ public async Task Execute_NonRegisteredAttribute_ThrowsException() var nameAttribute = new StringAttributeMetadata("name") { LogicalName = "name" }; _sut.AddMetadata(CreateMetadataWithAttribute("account", nameAttribute)); - void Action() => _sut.Execute(new RetrieveAttributeRequest + Assert.Throws(() => _sut.Execute(new RetrieveAttributeRequest { EntityLogicalName = "account", LogicalName = "missing" - }); - - Assert.Throws(Action); + })); await Task.CompletedTask; } [Test] public async Task Execute_NullRequest_ThrowsArgumentNull() { - void Action() => _sut.Execute(null!); + OrganizationRequest? request = null; - Assert.Throws(Action); + Assert.Throws(() => _sut.Execute(request!)); + await Task.CompletedTask; + } + + [Test] + public async Task Execute_WrongRequestType_ThrowsInvalidCast() + { + Assert.Throws(() => new RetrieveAttributeFake().Execute(new RetrieveEntityRequest(), _sut)); await Task.CompletedTask; }