Skip to content

Commit 8648fe5

Browse files
committed
chore: fixed test
1 parent 6f551c3 commit 8648fe5

File tree

8 files changed

+33
-33
lines changed

8 files changed

+33
-33
lines changed

src/JsonApiDotNetCore/Hooks/Execution/EntityHashSetDiff.cs renamed to src/JsonApiDotNetCore/Hooks/Execution/DiffableEntityHashSet.cs

+6-6
Original file line numberDiff line numberDiff line change
@@ -14,23 +14,23 @@ namespace JsonApiDotNetCore.Hooks
1414
/// Also contains information about updated relationships through
1515
/// implementation of IRelationshipsDictionary<typeparamref name="TResource"/>>
1616
/// </summary>
17-
public interface IEntityHashSetDiff<TResource> : IEntityHashSet<TResource> where TResource : class, IIdentifiable
17+
public interface IDiffableEntityHashSet<TResource> : IEntityHashSet<TResource> where TResource : class, IIdentifiable
1818
{
1919
/// <summary>
2020
/// Iterates over diffs, which is the affected entity from the request
2121
/// with their associated current value from the database.
2222
/// </summary>
23-
IEnumerator<EntityDiffPair<TResource>> GetDiffs();
23+
IEnumerable<EntityDiffPair<TResource>> GetDiffs();
2424

2525
}
2626

2727
/// <inheritdoc />
28-
public class EntityHashSetDiff<TResource> : EntityHashSet<TResource>, IEntityHashSetDiff<TResource> where TResource : class, IIdentifiable
28+
public class DiffableEntityHashSet<TResource> : EntityHashSet<TResource>, IDiffableEntityHashSet<TResource> where TResource : class, IIdentifiable
2929
{
3030
private readonly HashSet<TResource> _databaseValues;
3131
private readonly bool _databaseValuesLoaded;
3232

33-
public EntityHashSetDiff(HashSet<TResource> requestEntities,
33+
public DiffableEntityHashSet(HashSet<TResource> requestEntities,
3434
HashSet<TResource> databaseEntities,
3535
Dictionary<RelationshipAttribute, HashSet<TResource>> relationships)
3636
: base(requestEntities, relationships)
@@ -42,14 +42,14 @@ public EntityHashSetDiff(HashSet<TResource> requestEntities,
4242
/// <summary>
4343
/// Used internally by the ResourceHookExecutor to make live a bit easier with generics
4444
/// </summary>
45-
internal EntityHashSetDiff(IEnumerable requestEntities,
45+
internal DiffableEntityHashSet(IEnumerable requestEntities,
4646
IEnumerable databaseEntities,
4747
Dictionary<RelationshipAttribute, IEnumerable> relationships)
4848
: this((HashSet<TResource>)requestEntities, (HashSet<TResource>)databaseEntities, TypeHelper.ConvertRelationshipDictionary<TResource>(relationships)) { }
4949

5050

5151
/// <inheritdoc />
52-
public IEnumerator<EntityDiffPair<TResource>> GetDiffs()
52+
public IEnumerable<EntityDiffPair<TResource>> GetDiffs()
5353
{
5454
if (!_databaseValuesLoaded) ThrowNoDbValuesError();
5555

src/JsonApiDotNetCore/Hooks/IResourceHookContainer.cs

+4-4
Original file line numberDiff line numberDiff line change
@@ -54,12 +54,12 @@ public interface IBeforeHooks<TResource> where TResource : class, IIdentifiable
5454
/// layer just before updating entities of type <typeparamref name="TResource"/>.
5555
/// <para />
5656
/// For the <see cref="ResourcePipeline.Patch"/> pipeline, the
57-
/// <paramref name="entityDiff" /> will typically contain one entity.
57+
/// <paramref name="entities" /> will typically contain one entity.
5858
/// For <see cref="ResourcePipeline.BulkPatch"/>, this it may contain
5959
/// multiple entities.
6060
/// <para />
6161
/// The returned <see cref="IEnumerable{TEntity}"/> may be a subset
62-
/// of the <see cref="EntityHashSetDiff{TEntity}.RequestEntities"/> property in parameter <paramref name="entityDiff"/>,
62+
/// of the <see cref="DiffableEntityHashSet{TEntity}"/> property in parameter <paramref name="entities"/>,
6363
/// in which case the operation of the pipeline will not be executed
6464
/// for the omitted entities. The returned set may also contain custom
6565
/// changes of the properties on the entities.
@@ -75,9 +75,9 @@ public interface IBeforeHooks<TResource> where TResource : class, IIdentifiable
7575
/// hook is fired for these.
7676
/// </summary>
7777
/// <returns>The transformed entity set</returns>
78-
/// <param name="entityDiff">The entity diff.</param>
78+
/// <param name="entities">The affected entities.</param>
7979
/// <param name="pipeline">An enum indicating from where the hook was triggered.</param>
80-
IEnumerable<TResource> BeforeUpdate(IEntityHashSetDiff<TResource> entityDiff, ResourcePipeline pipeline);
80+
IEnumerable<TResource> BeforeUpdate(IDiffableEntityHashSet<TResource> entities, ResourcePipeline pipeline);
8181

8282
/// <summary>
8383
/// Implement this hook to run custom logic in the <see cref=" EntityResourceService{T}"/>

src/JsonApiDotNetCore/Hooks/ResourceHookExecutor.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ public virtual IEnumerable<TEntity> BeforeUpdate<TEntity>(IEnumerable<TEntity> e
4949
{
5050
var relationships = node.RelationshipsToNextLayer.Select(p => p.Attribute).ToArray();
5151
var dbValues = LoadDbValues(typeof(TEntity), (IEnumerable<TEntity>)node.UniqueEntities, ResourceHook.BeforeUpdate, relationships);
52-
var diff = new EntityHashSetDiff<TEntity>(node.UniqueEntities, dbValues, node.PrincipalsToNextLayer());
52+
var diff = new DiffableEntityHashSet<TEntity>(node.UniqueEntities, dbValues, node.PrincipalsToNextLayer());
5353
IEnumerable<TEntity> updated = container.BeforeUpdate(diff, pipeline);
5454
node.UpdateUnique(updated);
5555
node.Reassign(entities);

src/JsonApiDotNetCore/Models/ResourceDefinition.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -179,7 +179,7 @@ public virtual void AfterUpdateRelationship(IRelationshipsDictionary<T> entities
179179
/// <inheritdoc/>
180180
public virtual void BeforeRead(ResourcePipeline pipeline, bool isIncluded = false, string stringId = null) { }
181181
/// <inheritdoc/>
182-
public virtual IEnumerable<T> BeforeUpdate(IEntityHashSetDiff<T> entityDiff, ResourcePipeline pipeline) { return entityDiff.Entities; }
182+
public virtual IEnumerable<T> BeforeUpdate(IDiffableEntityHashSet<T> entities, ResourcePipeline pipeline) { return entities; }
183183
/// <inheritdoc/>
184184
public virtual IEnumerable<T> BeforeDelete(IEntityHashSet<T> entities, ResourcePipeline pipeline) { return entities; }
185185
/// <inheritdoc/>

test/UnitTests/ResourceHooks/AffectedEntitiesHelperTests.cs

+9-9
Original file line numberDiff line numberDiff line change
@@ -87,13 +87,13 @@ public void EntityDiff_GetByRelationships()
8787
{
8888
// arrange
8989
var dbEntities = new HashSet<Dummy>(AllEntities.Select(e => new Dummy { Id = e.Id }).ToList());
90-
EntityHashSetDiff<Dummy> diffs = new EntityHashSetDiff<Dummy>(AllEntities, dbEntities, Relationships);
90+
DiffableEntityHashSet<Dummy> diffs = new DiffableEntityHashSet<Dummy>(AllEntities, dbEntities, Relationships);
9191

9292
// act
93-
Dictionary<RelationshipAttribute, HashSet<Dummy>> toOnes = diffs.Entities.GetByRelationship<ToOne>();
94-
Dictionary<RelationshipAttribute, HashSet<Dummy>> toManies = diffs.Entities.GetByRelationship<ToMany>();
95-
Dictionary<RelationshipAttribute, HashSet<Dummy>> notTargeted = diffs.Entities.GetByRelationship<NotTargeted>();
96-
Dictionary<RelationshipAttribute, HashSet<Dummy>> allRelationships = diffs.Entities.AffectedRelationships;
93+
Dictionary<RelationshipAttribute, HashSet<Dummy>> toOnes = diffs.GetByRelationship<ToOne>();
94+
Dictionary<RelationshipAttribute, HashSet<Dummy>> toManies = diffs.GetByRelationship<ToMany>();
95+
Dictionary<RelationshipAttribute, HashSet<Dummy>> notTargeted = diffs.GetByRelationship<NotTargeted>();
96+
Dictionary<RelationshipAttribute, HashSet<Dummy>> allRelationships = diffs.AffectedRelationships;
9797

9898
// Assert
9999
AssertRelationshipDictionaryGetters(allRelationships, toOnes, toManies, notTargeted);
@@ -103,12 +103,12 @@ public void EntityDiff_GetByRelationships()
103103
Assert.DoesNotContain(e, allEntitiesWithAffectedRelationships);
104104
});
105105

106-
var requestEntitiesFromDiff = diffs.Entities;
106+
var requestEntitiesFromDiff = diffs;
107107
requestEntitiesFromDiff.ToList().ForEach(e =>
108108
{
109109
Assert.Contains(e, AllEntities);
110110
});
111-
var databaseEntitiesFromDiff = diffs.DatabaseValues;
111+
var databaseEntitiesFromDiff = diffs.GetDiffs().Select( d => d.DatabaseValue);
112112
databaseEntitiesFromDiff.ToList().ForEach(e =>
113113
{
114114
Assert.Contains(e, dbEntities);
@@ -120,10 +120,10 @@ public void EntityDiff_Loops_Over_Diffs()
120120
{
121121
// arrange
122122
var dbEntities = new HashSet<Dummy>(AllEntities.Select(e => new Dummy { Id = e.Id }));
123-
EntityHashSetDiff<Dummy> diffs = new EntityHashSetDiff<Dummy>(AllEntities, dbEntities, Relationships);
123+
DiffableEntityHashSet<Dummy> diffs = new DiffableEntityHashSet<Dummy>(AllEntities, dbEntities, Relationships);
124124

125125
// Assert & act
126-
foreach (EntityDiffPair<Dummy> diff in diffs)
126+
foreach (EntityDiffPair<Dummy> diff in diffs.GetDiffs())
127127
{
128128
Assert.Equal(diff.Entity.Id, diff.DatabaseValue.Id);
129129
Assert.NotEqual(diff.Entity, diff.DatabaseValue);

test/UnitTests/ResourceHooks/ResourceHookExecutor/Update/BeforeUpdateTests.cs

+2-2
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ public void BeforeUpdate()
2424
hookExecutor.BeforeUpdate(todoList, ResourcePipeline.Patch);
2525

2626
// assert
27-
todoResourceMock.Verify(rd => rd.BeforeUpdate(It.IsAny<IEntityHashSetDiff<TodoItem>>(), ResourcePipeline.Patch), Times.Once());
27+
todoResourceMock.Verify(rd => rd.BeforeUpdate(It.IsAny<IDiffableEntityHashSet<TodoItem>>(), ResourcePipeline.Patch), Times.Once());
2828
ownerResourceMock.Verify(rd => rd.BeforeUpdateRelationship(It.IsAny<HashSet<string>>(), It.IsAny<IRelationshipsDictionary<Person>>(), ResourcePipeline.Patch), Times.Once());
2929
VerifyNoOtherCalls(todoResourceMock, ownerResourceMock);
3030
}
@@ -62,7 +62,7 @@ public void BeforeUpdate_Without_Child_Hook_Implemented()
6262
hookExecutor.BeforeUpdate(todoList, ResourcePipeline.Patch);
6363

6464
// assert
65-
todoResourceMock.Verify(rd => rd.BeforeUpdate(It.IsAny<IEntityHashSetDiff<TodoItem>>(), ResourcePipeline.Patch), Times.Once());
65+
todoResourceMock.Verify(rd => rd.BeforeUpdate(It.IsAny<IDiffableEntityHashSet<TodoItem>>(), ResourcePipeline.Patch), Times.Once());
6666
VerifyNoOtherCalls(todoResourceMock, ownerResourceMock);
6767
}
6868

test/UnitTests/ResourceHooks/ResourceHookExecutor/Update/BeforeUpdate_WithDbValues_Tests.cs

+8-8
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ public void BeforeUpdate()
5959
hookExecutor.BeforeUpdate(todoList, ResourcePipeline.Patch);
6060

6161
// assert
62-
todoResourceMock.Verify(rd => rd.BeforeUpdate(It.Is<IEntityHashSetDiff<TodoItem>>((diff) => TodoCheckDiff(diff, description)), ResourcePipeline.Patch), Times.Once());
62+
todoResourceMock.Verify(rd => rd.BeforeUpdate(It.Is<IDiffableEntityHashSet<TodoItem>>((diff) => TodoCheckDiff(diff, description)), ResourcePipeline.Patch), Times.Once());
6363
ownerResourceMock.Verify(rd => rd.BeforeUpdateRelationship(
6464
It.Is<HashSet<string>>(ids => PersonIdCheck(ids, personId)),
6565
It.Is<IRelationshipsDictionary<Person>>(rh => PersonCheck(lastName, rh)),
@@ -93,7 +93,7 @@ public void BeforeUpdate_Deleting_Relationship()
9393
hookExecutor.BeforeUpdate(_todoList, ResourcePipeline.Patch);
9494

9595
// assert
96-
todoResourceMock.Verify(rd => rd.BeforeUpdate(It.Is<IEntityHashSetDiff<TodoItem>>((diff) => TodoCheckDiff(diff, description)), ResourcePipeline.Patch), Times.Once());
96+
todoResourceMock.Verify(rd => rd.BeforeUpdate(It.Is<IDiffableEntityHashSet<TodoItem>>((diff) => TodoCheckDiff(diff, description)), ResourcePipeline.Patch), Times.Once());
9797
ownerResourceMock.Verify(rd => rd.BeforeImplicitUpdateRelationship(
9898
It.Is<IRelationshipsDictionary<Person>>(rh => PersonCheck(lastName + lastName, rh)),
9999
ResourcePipeline.Patch),
@@ -140,7 +140,7 @@ public void BeforeUpdate_Without_Child_Hook_Implemented()
140140
hookExecutor.BeforeUpdate(todoList, ResourcePipeline.Patch);
141141

142142
// assert
143-
todoResourceMock.Verify(rd => rd.BeforeUpdate(It.Is<IEntityHashSetDiff<TodoItem>>((diff) => TodoCheckDiff(diff, description)), ResourcePipeline.Patch), Times.Once());
143+
todoResourceMock.Verify(rd => rd.BeforeUpdate(It.Is<IDiffableEntityHashSet<TodoItem>>((diff) => TodoCheckDiff(diff, description)), ResourcePipeline.Patch), Times.Once());
144144
todoResourceMock.Verify(rd => rd.BeforeImplicitUpdateRelationship(
145145
It.Is<IRelationshipsDictionary<TodoItem>>(rh => TodoCheck(rh, description + description)),
146146
ResourcePipeline.Patch),
@@ -161,7 +161,7 @@ public void BeforeUpdate_NoImplicit()
161161
hookExecutor.BeforeUpdate(todoList, ResourcePipeline.Patch);
162162

163163
// assert
164-
todoResourceMock.Verify(rd => rd.BeforeUpdate(It.Is<IEntityHashSetDiff<TodoItem>>((diff) => TodoCheckDiff(diff, description)), ResourcePipeline.Patch), Times.Once());
164+
todoResourceMock.Verify(rd => rd.BeforeUpdate(It.Is<IDiffableEntityHashSet<TodoItem>>((diff) => TodoCheckDiff(diff, description)), ResourcePipeline.Patch), Times.Once());
165165
ownerResourceMock.Verify(rd => rd.BeforeUpdateRelationship(
166166
It.Is<HashSet<string>>(ids => PersonIdCheck(ids, personId)),
167167
It.IsAny<IRelationshipsDictionary<Person>>(),
@@ -204,18 +204,18 @@ public void BeforeUpdate_NoImplicit_Without_Child_Hook_Implemented()
204204
hookExecutor.BeforeUpdate(todoList, ResourcePipeline.Patch);
205205

206206
// assert
207-
todoResourceMock.Verify(rd => rd.BeforeUpdate(It.Is<IEntityHashSetDiff<TodoItem>>((diff) => TodoCheckDiff(diff, description)), ResourcePipeline.Patch), Times.Once());
207+
todoResourceMock.Verify(rd => rd.BeforeUpdate(It.Is<IDiffableEntityHashSet<TodoItem>>((diff) => TodoCheckDiff(diff, description)), ResourcePipeline.Patch), Times.Once());
208208
VerifyNoOtherCalls(todoResourceMock, ownerResourceMock);
209209
}
210210

211-
private bool TodoCheckDiff(IEntityHashSetDiff<TodoItem> diff, string checksum)
211+
private bool TodoCheckDiff(IDiffableEntityHashSet<TodoItem> entities, string checksum)
212212
{
213-
var diffPair = diff.Single();
213+
var diffPair = entities.GetDiffs().Single();
214214
var dbCheck = diffPair.DatabaseValue.Description == checksum;
215215
var reqCheck = diffPair.Entity.Description == null;
216216
var diffPairCheck = (dbCheck && reqCheck);
217217

218-
var updatedRelationship = diff.Entities.GetByRelationship<Person>().Single();
218+
var updatedRelationship = entities.GetByRelationship<Person>().Single();
219219
var diffcheck = updatedRelationship.Key.PublicRelationshipName == "one-to-one-person";
220220

221221
return (dbCheck && reqCheck && diffcheck);

test/UnitTests/ResourceHooks/ResourceHooksTestsSetup.cs

+2-2
Original file line numberDiff line numberDiff line change
@@ -260,8 +260,8 @@ void MockHooks<TModel>(Mock<IResourceHookContainer<TModel>> resourceDefinition)
260260
.Setup(rd => rd.BeforeRead(It.IsAny<ResourcePipeline>(), It.IsAny<bool>(), It.IsAny<string>()))
261261
.Verifiable();
262262
resourceDefinition
263-
.Setup(rd => rd.BeforeUpdate(It.IsAny<IEntityHashSetDiff<TModel>>(), It.IsAny<ResourcePipeline>()))
264-
.Returns<EntityHashSetDiff<TModel>, ResourcePipeline>((entityDiff, context) => entityDiff.Entities)
263+
.Setup(rd => rd.BeforeUpdate(It.IsAny<IDiffableEntityHashSet<TModel>>(), It.IsAny<ResourcePipeline>()))
264+
.Returns<DiffableEntityHashSet<TModel>, ResourcePipeline>((entities, context) => entities)
265265
.Verifiable();
266266
resourceDefinition
267267
.Setup(rd => rd.BeforeDelete(It.IsAny<IEntityHashSet<TModel>>(), It.IsAny<ResourcePipeline>()))

0 commit comments

Comments
 (0)