Skip to content
Merged
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 @@ -9,9 +9,9 @@ namespace Digitall.Dataverse.Testing.OrganizationRequests;

public class AssignRequestFake : OrganizationRequestFake<AssignRequest, AssignResponse>
{
public override AssignResponse Execute(AssignRequest organizationRequest, FakeOrganizationService state)
public override AssignResponse Execute(AssignRequest organizationRequest, FakeOrganizationService fakeOrganizationService)
{
ArgumentNullException.ThrowIfNull(state);
ArgumentNullException.ThrowIfNull(fakeOrganizationService);
ArgumentNullException.ThrowIfNull(organizationRequest);


Expand Down Expand Up @@ -46,7 +46,7 @@ public override AssignResponse Execute(AssignRequest organizationRequest, FakeOr
}
};

state.Update(assignment);
fakeOrganizationService.Update(assignment);

return new AssignResponse();
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,14 +10,14 @@

public class AssociateFake : OrganizationRequestFake<AssociateRequest, AssociateResponse>
{
public override AssociateResponse Execute(AssociateRequest organizationRequest, FakeOrganizationService state)
public override AssociateResponse Execute(AssociateRequest organizationRequest, FakeOrganizationService fakeOrganizationService)
{
var entityName = organizationRequest.Target.LogicalName;
var entityId = organizationRequest.Target.Id;
var relationship = organizationRequest.Relationship;
var relatedEntities = organizationRequest.RelatedEntities;

var relationshipMetadata = state.GetRelationship(relationship.SchemaName);
var relationshipMetadata = fakeOrganizationService.GetRelationship(relationship.SchemaName);

if (relationshipMetadata == null)
{
Expand All @@ -37,14 +37,14 @@
var toEntityName = isFrom1To2 ? manyToManyRelationshipMetadata.Entity2LogicalName : manyToManyRelationshipMetadata.Entity1LogicalName;

//Check records exist
var targetExists = state.CreateQuery(fromEntityName).FirstOrDefault(e => e.Id == entityId) != null;
var targetExists = fakeOrganizationService.CreateQuery(fromEntityName).FirstOrDefault(e => e.Id == entityId) != null;

if (!targetExists)
{
ErrorFactory.ThrowFault(ErrorCodes.ObjectDoesNotExist, $"{fromEntityName} with Id {entityId} does not exist");
}

var relatedExists = state.CreateQuery(toEntityName).FirstOrDefault(e => e.Id == relatedEntityReference.Id) != null;
var relatedExists = fakeOrganizationService.CreateQuery(toEntityName).FirstOrDefault(e => e.Id == relatedEntityReference.Id) != null;

if (!relatedExists)
{
Expand All @@ -59,7 +59,7 @@
}
};

state.Create(association);
fakeOrganizationService.Create(association);
break;
}
case OneToManyRelationshipMetadata oneToManyRelationshipMetadata:
Expand All @@ -70,11 +70,11 @@
Id = relatedEntityReference.Id, [oneToManyRelationshipMetadata.ReferencingAttribute] = new EntityReference(entityName, entityId)
};

state.Update(entityToUpdate);
fakeOrganizationService.Update(entityToUpdate);
break;
}
default:
ErrorFactory.ThrowFault(ErrorCodes.InvalidArgument, $"Relationship metadata type '{relationshipMetadata!.GetType().Name}' is not supported for Associate");

Check warning on line 77 in src/Digitall.Dataverse.Testing/OrganizationRequests/AssociateFake.cs

View workflow job for this annotation

GitHub Actions / Qodana Community for .NET

Redundant nullable warning suppression expression

The nullable warning suppression expression is redundant
break;
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ namespace Digitall.Dataverse.Testing.OrganizationRequests;

public class BulkDeleteFake : OrganizationRequestFake<BulkDeleteRequest, BulkDeleteResponse>
{
public override BulkDeleteResponse Execute(BulkDeleteRequest organizationRequest, FakeOrganizationService state)
public override BulkDeleteResponse Execute(BulkDeleteRequest organizationRequest, FakeOrganizationService fakeOrganizationService)
{
if (string.IsNullOrEmpty(organizationRequest.JobName))
{
Expand Down Expand Up @@ -39,7 +39,7 @@ public override BulkDeleteResponse Execute(BulkDeleteRequest organizationRequest
Attributes =
{
["name"] = organizationRequest.JobName,
["ownerid"] = new EntityReference("systemuser", state.Options.UserId),
["ownerid"] = new EntityReference("systemuser", fakeOrganizationService.Options.UserId),
["operationtype"] = new OptionSetValue(13), // 13 = BulkDelete
}
};
Expand All @@ -54,21 +54,21 @@ public override BulkDeleteResponse Execute(BulkDeleteRequest organizationRequest
asyncOpertation["recurrencestarttime"] = organizationRequest.StartDateTime;
}

state.Create(asyncOpertation);
fakeOrganizationService.Create(asyncOpertation);

// delete all records from all queries
foreach (QueryExpression queryExpression in organizationRequest.QuerySet ?? [])
{
EntityCollection recordsToDelete = state.RetrieveMultiple(queryExpression);
EntityCollection recordsToDelete = fakeOrganizationService.RetrieveMultiple(queryExpression);
foreach (Entity record in recordsToDelete.Entities)
{
state.Delete(record.LogicalName, record.Id);
fakeOrganizationService.Delete(record.LogicalName, record.Id);
}
}

// set ayncoperation to completed
asyncOpertation["statecode"] = new OptionSetValue(3);
state.Update(asyncOpertation);
fakeOrganizationService.Update(asyncOpertation);

// return result
return new BulkDeleteResponse { ResponseName = "BulkDeleteResponse", ["JobId"] = jobId};
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,15 +8,15 @@ namespace Digitall.Dataverse.Testing.OrganizationRequests;

public class CreateFake : OrganizationRequestFake<CreateRequest, CreateResponse>
{
public override CreateResponse Execute(CreateRequest organizationRequest, FakeOrganizationService state)
public override CreateResponse Execute(CreateRequest organizationRequest, FakeOrganizationService fakeOrganizationService)
{
var target = organizationRequest.Target;
var guid = state.CreateCore(target);
var guid = fakeOrganizationService.CreateCore(target);

// Deep insert: create sub-entities from RelatedEntities
if (target.RelatedEntities.Count > 0)
{
DeepInsertProcessor.Process(target.LogicalName, guid, target.RelatedEntities, state);
DeepInsertProcessor.Process(target.LogicalName, guid, target.RelatedEntities, fakeOrganizationService);
}

return new CreateResponse
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,9 +7,9 @@ namespace Digitall.Dataverse.Testing.OrganizationRequests;

public class DeleteFake : OrganizationRequestFake<DeleteRequest, DeleteResponse>
{
public override DeleteResponse Execute(DeleteRequest organizationRequest, FakeOrganizationService state)
public override DeleteResponse Execute(DeleteRequest organizationRequest, FakeOrganizationService fakeOrganizationService)
{
state.DeleteCore(organizationRequest.Target.LogicalName, organizationRequest.Target.Id);
fakeOrganizationService.DeleteCore(organizationRequest.Target.LogicalName, organizationRequest.Target.Id);

return new DeleteResponse();
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,14 +10,14 @@

public class DisassociateFake : OrganizationRequestFake<DisassociateRequest, DisassociateResponse>
{
public override DisassociateResponse Execute(DisassociateRequest organizationRequest, FakeOrganizationService state)
public override DisassociateResponse Execute(DisassociateRequest organizationRequest, FakeOrganizationService fakeOrganizationService)
{
var entityName = organizationRequest.Target.LogicalName;
var entityId = organizationRequest.Target.Id;
var relationship = organizationRequest.Relationship;
var relatedEntities = organizationRequest.RelatedEntities;

var relationshipMetadata = state.GetRelationship(relationship.SchemaName);
var relationshipMetadata = fakeOrganizationService.GetRelationship(relationship.SchemaName);

if (relationshipMetadata == null)
{
Expand All @@ -37,16 +37,16 @@
query.Criteria.AddCondition(new ConditionExpression(fromAttribute, ConditionOperator.Equal, entityId));
query.Criteria.AddCondition(new ConditionExpression(toAttribute, ConditionOperator.Equal, relatedEntity.Id));

var results = state.RetrieveMultiple(query);
var results = fakeOrganizationService.RetrieveMultiple(query);

if (results.Entities.Count == 1)
{
state.Delete(manyToManyRelationshipMetadata.IntersectEntityName, results.Entities.First().Id);
fakeOrganizationService.Delete(manyToManyRelationshipMetadata.IntersectEntityName, results.Entities.First().Id);
}
}
else
{
ErrorFactory.ThrowFault(ErrorCodes.InvalidArgument, $"Disassociate only supports ManyToMany relationships; '{relationship.SchemaName}' is of type '{relationshipMetadata!.GetType().Name}'");

Check warning on line 49 in src/Digitall.Dataverse.Testing/OrganizationRequests/DisassociateFake.cs

View workflow job for this annotation

GitHub Actions / Qodana Community for .NET

Redundant nullable warning suppression expression

The nullable warning suppression expression is redundant
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,13 +8,13 @@ namespace Digitall.Dataverse.Testing.OrganizationRequests;

public class ExecuteTransactionFake : OrganizationRequestFake<ExecuteTransactionRequest, ExecuteTransactionResponse>
{
public override ExecuteTransactionResponse Execute(ExecuteTransactionRequest organizationRequest, FakeOrganizationService state)
public override ExecuteTransactionResponse Execute(ExecuteTransactionRequest organizationRequest, FakeOrganizationService fakeOrganizationService)
{
var response = new ExecuteTransactionResponse { ["Responses"] = new OrganizationResponseCollection() };

foreach (var r in organizationRequest.Requests)
{
var result = state.Execute(r);
var result = fakeOrganizationService.Execute(r);

if (organizationRequest.ReturnResponses.HasValue && organizationRequest.ReturnResponses.Value)
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ namespace Digitall.Dataverse.Testing.OrganizationRequests;

public class FetchXmlToQueryExpressionFake : OrganizationRequestFake<FetchXmlToQueryExpressionRequest, FetchXmlToQueryExpressionResponse>
{
public override FetchXmlToQueryExpressionResponse Execute(FetchXmlToQueryExpressionRequest organizationRequest, FakeOrganizationService state)
public override FetchXmlToQueryExpressionResponse Execute(FetchXmlToQueryExpressionRequest organizationRequest, FakeOrganizationService fakeOrganizationService)
{
ArgumentNullException.ThrowIfNull(organizationRequest);

Expand All @@ -28,7 +28,7 @@ public override FetchXmlToQueryExpressionResponse Execute(FetchXmlToQueryExpress
throw new ArgumentException("FetchXml is not valid XML.", nameof(organizationRequest), ex);
}

var processor = new QueryProcessor(state);
var processor = new QueryProcessor(fakeOrganizationService);
var query = processor.ConvertXmlDocumentToQueryExpression(xmlDocument);

return new FetchXmlToQueryExpressionResponse
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,5 +8,5 @@ namespace Digitall.Dataverse.Testing.OrganizationRequests;
public interface IOrganizationRequestFake
{
Type ForType { get; }
OrganizationResponse Execute(OrganizationRequest organizationRequest, FakeOrganizationService state);
OrganizationResponse Execute(OrganizationRequest organizationRequest, FakeOrganizationService fakeOrganizationService);
}
Original file line number Diff line number Diff line change
Expand Up @@ -9,10 +9,10 @@ public abstract class OrganizationRequestFake<TRequest, TResponse> : IOrganizati
{
public Type ForType => typeof(TRequest);

public OrganizationResponse Execute(OrganizationRequest organizationRequest, FakeOrganizationService state)
public OrganizationResponse Execute(OrganizationRequest organizationRequest, FakeOrganizationService fakeOrganizationService)
{
return organizationRequest is TRequest request ? Execute(request, state) : throw new InvalidCastException($"Cannot cast {organizationRequest.GetType()} to {typeof(TRequest)}");
return organizationRequest is TRequest request ? Execute(request, fakeOrganizationService) : throw new InvalidCastException($"Cannot cast {organizationRequest.GetType()} to {typeof(TRequest)}");
}

public abstract TResponse Execute(TRequest organizationRequest, FakeOrganizationService state);
public abstract TResponse Execute(TRequest organizationRequest, FakeOrganizationService fakeOrganizationService);
}
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ namespace Digitall.Dataverse.Testing.OrganizationRequests;

public class QueryExpressionToFetchXmlFake : OrganizationRequestFake<QueryExpressionToFetchXmlRequest, QueryExpressionToFetchXmlResponse>
{
public override QueryExpressionToFetchXmlResponse Execute(QueryExpressionToFetchXmlRequest organizationRequest, FakeOrganizationService state)
public override QueryExpressionToFetchXmlResponse Execute(QueryExpressionToFetchXmlRequest organizationRequest, FakeOrganizationService fakeOrganizationService)
{
ArgumentNullException.ThrowIfNull(organizationRequest);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,9 +7,9 @@ namespace Digitall.Dataverse.Testing.OrganizationRequests;

public class RetrieveAllEntitiesFake : OrganizationRequestFake<RetrieveAllEntitiesRequest, RetrieveAllEntitiesResponse>
{
public override RetrieveAllEntitiesResponse Execute(RetrieveAllEntitiesRequest organizationRequest, FakeOrganizationService state)
public override RetrieveAllEntitiesResponse Execute(RetrieveAllEntitiesRequest organizationRequest, FakeOrganizationService fakeOrganizationService)
{
var knownMetadata = state.State.EntityMetadata.Values.ToArray();
var knownMetadata = fakeOrganizationService.State.EntityMetadata.Values.ToArray();
return new RetrieveAllEntitiesResponse
{
Results =
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
// Copyright (c) DIGITALL Nature. All rights reserved
// DIGITALL Nature licenses this file to you under the Microsoft Public License.

using Microsoft.Xrm.Sdk;
using Microsoft.Xrm.Sdk.Messages;

namespace Digitall.Dataverse.Testing.OrganizationRequests;

public class RetrieveAttributeFake : OrganizationRequestFake<RetrieveAttributeRequest, RetrieveAttributeResponse>
{
public override RetrieveAttributeResponse Execute(RetrieveAttributeRequest organizationRequest, FakeOrganizationService fakeOrganizationService)
{
ArgumentNullException.ThrowIfNull(organizationRequest);

var entityMetadata = fakeOrganizationService.State.EntityMetadata[organizationRequest.EntityLogicalName];
var attributeMetadata = entityMetadata.Attributes.First(a => a.LogicalName == organizationRequest.LogicalName);

var results = new ParameterCollection { { nameof(RetrieveAttributeResponse.AttributeMetadata), attributeMetadata } };

var response = new RetrieveAttributeResponse { Results = results };
return response;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -14,15 +14,9 @@ public override RetrieveEntityResponse Execute(RetrieveEntityRequest organizatio

var entityMetadata = fakeOrganizationService.State.EntityMetadata[organizationRequest.LogicalName];

var results = new ParameterCollection {
{ nameof (RetrieveEntityResponse.EntityMetadata), entityMetadata }
};
var results = new ParameterCollection { { nameof(RetrieveEntityResponse.EntityMetadata), entityMetadata } };

var response = new RetrieveEntityResponse
{
Results = results
};
var response = new RetrieveEntityResponse { Results = results };
return response;
}
}

Original file line number Diff line number Diff line change
Expand Up @@ -11,24 +11,24 @@ namespace Digitall.Dataverse.Testing.OrganizationRequests;

public class RetrieveFake : OrganizationRequestFake<RetrieveRequest, RetrieveResponse>
{
public override RetrieveResponse Execute(RetrieveRequest organizationRequest, FakeOrganizationService state)
public override RetrieveResponse Execute(RetrieveRequest organizationRequest, FakeOrganizationService fakeOrganizationService)
{
ArgumentNullException.ThrowIfNull(state);
ArgumentNullException.ThrowIfNull(fakeOrganizationService);
ArgumentNullException.ThrowIfNull(organizationRequest);

Entity record;
if (organizationRequest.Target.Id == Guid.Empty && organizationRequest.Target.KeyAttributes.Count > 0)
{
record = state.RetrieveWithAlternateKey(organizationRequest.Target.LogicalName, organizationRequest.Target.KeyAttributes, organizationRequest.ColumnSet);
record = fakeOrganizationService.RetrieveWithAlternateKey(organizationRequest.Target.LogicalName, organizationRequest.Target.KeyAttributes, organizationRequest.ColumnSet);
}
else
{
record = state.RetrieveCore(organizationRequest.Target.LogicalName, organizationRequest.Target.Id, organizationRequest.ColumnSet);
record = fakeOrganizationService.RetrieveCore(organizationRequest.Target.LogicalName, organizationRequest.Target.Id, organizationRequest.ColumnSet);
}

if (organizationRequest.RelatedEntitiesQuery?.Count > 0)
{
PopulateRelatedEntities(organizationRequest, record, state);
PopulateRelatedEntities(organizationRequest, record, fakeOrganizationService);
}

return new RetrieveResponse
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,12 +14,12 @@ namespace Digitall.Dataverse.Testing.OrganizationRequests;

public class RetrieveMultipleFake : OrganizationRequestFake<RetrieveMultipleRequest, RetrieveMultipleResponse>
{
public override RetrieveMultipleResponse Execute(RetrieveMultipleRequest organizationRequest, FakeOrganizationService state)
public override RetrieveMultipleResponse Execute(RetrieveMultipleRequest organizationRequest, FakeOrganizationService fakeOrganizationService)
{
ArgumentNullException.ThrowIfNull(organizationRequest);

// Create a new QueryProcessor with the given state
var queryProcessor = new QueryProcessor(state);
var queryProcessor = new QueryProcessor(fakeOrganizationService);

// Initialize variables
QueryExpression queryExpression;
Expand Down Expand Up @@ -111,7 +111,7 @@ public override RetrieveMultipleResponse Execute(RetrieveMultipleRequest organiz
}

// Handle paging
var maxRetrieveCount = state.Options.MaxRetrieveCount;
var maxRetrieveCount = fakeOrganizationService.Options.MaxRetrieveCount;
var pageSize = maxRetrieveCount;
var pageInfo = queryExpression.PageInfo;
var pageNumber = 1;
Expand Down Expand Up @@ -143,10 +143,10 @@ public override RetrieveMultipleResponse Execute(RetrieveMultipleRequest organiz

var recordsToReturn = startPosition + numberToGet > internalResult.Count ? [] : internalResult.GetRange(startPosition, numberToGet);

recordsToReturn.ForEach(e => PatchDateFormat(e, state));
recordsToReturn.ForEach(e => PatchDateFormat(e, fakeOrganizationService));
recordsToReturn.ForEach(FillFormattedValues);

recordsToReturn = recordsToReturn.Select(state.ConvertToProxyType).ToList();
recordsToReturn = recordsToReturn.Select(fakeOrganizationService.ConvertToProxyType).ToList();

var response = new RetrieveMultipleResponse
{
Expand Down
Loading
Loading