Skip to content

Commit 762210e

Browse files
committed
tests: DRCU update tests
1 parent 0f385f1 commit 762210e

File tree

3 files changed

+12
-14
lines changed

3 files changed

+12
-14
lines changed

src/JsonApiDotNetCore/Hooks/Execution/HookExecutorHelper.cs

Lines changed: 7 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -81,15 +81,15 @@ public IResourceHookContainer<TEntity> GetResourceHookContainer<TEntity>(Resourc
8181
return (IResourceHookContainer<TEntity>)GetResourceHookContainer(typeof(TEntity), hook);
8282
}
8383

84-
public IEnumerable LoadDbValues(DependentType entityType, IEnumerable entities, ResourceHook hook, params RelationshipProxy[] relationships)
84+
public IEnumerable LoadDbValues(PrincipalType repositoryEntityType, Type affectedHookEntityType, IEnumerable entities, ResourceHook hook, params RelationshipProxy[] relationships)
8585
{
86-
if (!ShouldLoadDbValues(entityType, hook)) return null;
86+
if (!ShouldLoadDbValues(affectedHookEntityType, hook)) return null;
8787

8888
var paths = relationships.Select(p => p.Attribute.RelationshipPath).ToArray();
89-
var idType = GetIdentifierType(entityType);
89+
var idType = GetIdentifierType(repositoryEntityType);
9090
var parameterizedGetWhere = GetType()
9191
.GetMethod(nameof(GetWhereAndInclude), BindingFlags.NonPublic | BindingFlags.Instance)
92-
.MakeGenericMethod(entityType, idType);
92+
.MakeGenericMethod(repositoryEntityType, idType);
9393
var casted = ((IEnumerable<object>)entities).Cast<IIdentifiable>();
9494
var ids = casted.Select(e => e.StringId).Cast(idType);
9595
var values = (IEnumerable)parameterizedGetWhere.Invoke(this, new object[] { ids, paths });
@@ -98,16 +98,15 @@ public IEnumerable LoadDbValues(DependentType entityType, IEnumerable entities,
9898

9999
public HashSet<TEntity> LoadDbValues<TEntity>(IEnumerable<TEntity> entities, ResourceHook hook, params RelationshipProxy[] relationships) where TEntity : class, IIdentifiable
100100
{
101-
var dbValues = LoadDbValues(typeof(TEntity), entities, hook, relationships)?.Cast<TEntity>();
101+
var entityType = typeof(TEntity);
102+
var dbValues = LoadDbValues(entityType, entityType, entities, hook, relationships)?.Cast<TEntity>();
102103
if (dbValues == null) return null;
103104
return new HashSet<TEntity>(dbValues);
104105
}
105106

106107

107108
bool ShouldLoadDbValues(DependentType entityType, ResourceHook hook)
108109
{
109-
if (hook == ResourceHook.BeforeImplicitUpdateRelationship) return true;
110-
111110
var discovery = GetHookDiscovery(entityType);
112111

113112
if (discovery.DatabaseDiffDisabledHooks.Contains(hook))
@@ -122,7 +121,6 @@ bool ShouldLoadDbValues(DependentType entityType, ResourceHook hook)
122121
{
123122
return _context.Options.LoadDatabaseValues;
124123
}
125-
126124
}
127125

128126
bool ShouldExecuteHook(DependentType entityType, ResourceHook hook)
@@ -180,7 +178,7 @@ public Dictionary<RelationshipProxy, IEnumerable> LoadImplicitlyAffected(
180178
foreach (var kvp in principalEntitiesByRelation)
181179
{
182180
if (IsHasManyThrough(kvp, out var principals, out var relationship)) continue;
183-
var includedPrincipals = LoadDbValues(relationship.PrincipalType, principals, ResourceHook.BeforeImplicitUpdateRelationship, relationship);
181+
var includedPrincipals = LoadDbValues(relationship.PrincipalType, relationship.DependentType, principals, ResourceHook.BeforeImplicitUpdateRelationship, relationship);
184182

185183
foreach (IIdentifiable ip in includedPrincipals)
186184
{

src/JsonApiDotNetCore/Hooks/Execution/IHookExecutorHelper.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ internal interface IHookExecutorHelper
4242
/// <summary>
4343
/// For a set of entities, loads current values from the database
4444
/// </summary>
45-
IEnumerable LoadDbValues(Type entityType, IEnumerable entities, ResourceHook hook, params RelationshipProxy[] relationships);
45+
IEnumerable LoadDbValues(Type repositoryEntityType, Type affectedHookEntityType, IEnumerable entities, ResourceHook hook, params RelationshipProxy[] relationships);
4646
/// <summary>
4747
/// For a set of entities, loads current values from the database
4848
/// </summary>

src/JsonApiDotNetCore/Hooks/ResourceHookExecutor.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -246,7 +246,7 @@ void FireNestedBeforeUpdateHooks(ResourcePipeline pipeline, EntityChildLayer lay
246246
{
247247
if (uniqueEntities.Cast<IIdentifiable>().Any())
248248
{
249-
var dbValues = _executorHelper.LoadDbValues(entityType, uniqueEntities, ResourceHook.BeforeUpdateRelationship, node.RelationshipsToNextLayer);
249+
var dbValues = _executorHelper.LoadDbValues(entityType, entityType, uniqueEntities, ResourceHook.BeforeUpdateRelationship, node.RelationshipsToNextLayer);
250250
var resourcesByRelationship = CreateRelationshipHelper(entityType, node.RelationshipsFromPreviousLayer.GetDependentEntities(), dbValues);
251251
var allowedIds = CallHook(nestedHookcontainer, ResourceHook.BeforeUpdateRelationship, new object[] { GetIds(uniqueEntities), resourcesByRelationship, pipeline }).Cast<string>();
252252
var updated = GetAllowedEntities(uniqueEntities, allowedIds);
@@ -276,13 +276,13 @@ void FireNestedBeforeUpdateHooks(ResourcePipeline pipeline, EntityChildLayer lay
276276
/// Given a source of entities, gets the implicitly affected entities
277277
/// from the database and calls the BeforeImplicitUpdateRelationship hook.
278278
/// </summary>
279-
void FireForAffectedImplicits(Type entityType, Dictionary<RelationshipProxy, IEnumerable> implicitsTarget, ResourcePipeline pipeline, IEnumerable existingImplicitEntities = null)
279+
void FireForAffectedImplicits(Type entityTypeToInclude, Dictionary<RelationshipProxy, IEnumerable> implicitsTarget, ResourcePipeline pipeline, IEnumerable existingImplicitEntities = null)
280280
{
281-
var container = _executorHelper.GetResourceHookContainer(entityType, ResourceHook.BeforeImplicitUpdateRelationship);
281+
var container = _executorHelper.GetResourceHookContainer(entityTypeToInclude, ResourceHook.BeforeImplicitUpdateRelationship);
282282
if (container == null) return;
283283
var implicitAffected = _executorHelper.LoadImplicitlyAffected(implicitsTarget, existingImplicitEntities);
284284
if (!implicitAffected.Any()) return;
285-
var resourcesByRelationship = CreateRelationshipHelper(entityType, implicitAffected);
285+
var resourcesByRelationship = CreateRelationshipHelper(entityTypeToInclude, implicitAffected);
286286
CallHook(container, ResourceHook.BeforeImplicitUpdateRelationship, new object[] { resourcesByRelationship, pipeline, });
287287
}
288288

0 commit comments

Comments
 (0)