Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -6,9 +6,20 @@

namespace Digitall.Dataverse.Testing.OrganizationRequests;

public class RetrieveAttributeFake : OrganizationRequestFake<RetrieveAttributeRequest, RetrieveAttributeResponse>
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);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,14 +2,15 @@
// 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;

namespace Digitall.Dataverse.Testing.Tests.OrganizationRequests;

public class RetrieveAttributeFakeTests
{
private FakeOrganizationService _sut = null!;
private FakeOrganizationService _sut = new();

[Before(Test)]
public async Task Setup()
Expand All @@ -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;
}
Expand All @@ -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<KeyNotFoundException>(() => _sut.Execute(new RetrieveAttributeRequest
{
EntityLogicalName = "contact",
LogicalName = "name"
});

Assert.Throws<KeyNotFoundException>(Action);
}));
await Task.CompletedTask;
}

Expand All @@ -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<InvalidOperationException>(() => _sut.Execute(new RetrieveAttributeRequest
{
EntityLogicalName = "account",
LogicalName = "missing"
});

Assert.Throws<InvalidOperationException>(Action);
}));
await Task.CompletedTask;
}

[Test]
public async Task Execute_NullRequest_ThrowsArgumentNull()
{
void Action() => _sut.Execute(null!);
OrganizationRequest? request = null;

Assert.Throws<ArgumentNullException>(Action);
Assert.Throws<ArgumentNullException>(() => _sut.Execute(request!));
await Task.CompletedTask;
}

[Test]
public async Task Execute_WrongRequestType_ThrowsInvalidCast()
{
Assert.Throws<InvalidCastException>(() => new RetrieveAttributeFake().Execute(new RetrieveEntityRequest(), _sut));
await Task.CompletedTask;
}

Expand Down