Skip to content

Commit

Permalink
Fix for issue #26.
Browse files Browse the repository at this point in the history
  • Loading branch information
svenrog committed Dec 4, 2023
1 parent 3531945 commit 915fbd6
Show file tree
Hide file tree
Showing 4 changed files with 50 additions and 7 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ public class LinkDataBackingTypeResolverInterceptor : IBackingTypeResolver
{
private readonly IBackingTypeResolver _interceptedResolver;
private readonly IPropertyDefinitionTypeRepository _propertyDefinitionRepository;
private readonly IDictionary<Type, Type> _resolvedTypes;
private readonly Dictionary<Type, Type> _resolvedTypes;
private readonly Type _baseType;
private readonly Type _collectionBaseType;
private readonly Type _propertyBaseType;
Expand Down Expand Up @@ -64,7 +64,7 @@ public virtual Type Resolve(Type type)
if (!propertyType.IsAssignableFrom(definitionType))
continue;

_resolvedTypes.Add(type, definitionType);
_resolvedTypes.TryAdd(type, definitionType);

return definitionType;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,9 @@
using Geta.Optimizely.GenericLinks.Cms.Registration;
using Geta.Optimizely.GenericLinks.Tests.Services;
using Xunit;
using System.Threading.Tasks;
using EPiServer.Data.Dynamic;
using System.Linq;

namespace Geta.Optimizely.GenericLinks.Tests
{
Expand Down Expand Up @@ -38,5 +41,32 @@ public void LinkDataBackingTypeResolverInterceptor_can_Resolve()
resolvedType = subject.Resolve(typeof(TestLinkData));
Assert.Equal(singlePropertyType, resolvedType);
}

[Fact]
public async Task LinkDataBackingTypeResolverInterceptor_can_be_called_in_parallel()
{
var collectionPropertyType = typeof(PropertyTestCollection);
var definitions = new List<PropertyDefinitionType>
{
collectionPropertyType.ToDefinition(1001, PropertyDataType.LinkCollection)
};

var definitionRepository = new InMemoryPropertyDefinitionTypeRepository(definitions);
var backingResolver = new NullBackingTypeResolver();
var subject = new LinkDataBackingTypeResolverInterceptor(backingResolver, definitionRepository);
var tasks = new List<Task<Type>>();

for (var i = 0; i < 5; i++)
{
var task = Task.Factory.StartNew(() => subject.Resolve(typeof(LinkDataCollection<TestLinkData>)));
tasks.Add(task);
}

await Assert.AllAsync(tasks, async task =>
{
var type = await task;
Assert.Equal(collectionPropertyType, type);
});
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -7,17 +7,17 @@
</PropertyGroup>

<ItemGroup>
<PackageReference Include="coverlet.msbuild" Version="3.1.2">
<PackageReference Include="coverlet.msbuild" Version="6.0.0">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="16.9.4" />
<PackageReference Include="xunit" Version="2.4.1" />
<PackageReference Include="xunit.runner.visualstudio" Version="2.4.3">
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.8.0" />
<PackageReference Include="xunit" Version="2.6.2" />
<PackageReference Include="xunit.runner.visualstudio" Version="2.5.4">
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
<PrivateAssets>all</PrivateAssets>
</PackageReference>
<PackageReference Include="coverlet.collector" Version="3.1.2">
<PackageReference Include="coverlet.collector" Version="6.0.0">
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
<PrivateAssets>all</PrivateAssets>
</PackageReference>
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
using System;
using EPiServer.DataAbstraction;

namespace Geta.Optimizely.GenericLinks.Tests.Services
{
internal sealed class NullBackingTypeResolver : IBackingTypeResolver
{
public Type? Resolve(Type type)
{
return null;
}
}
}

0 comments on commit 915fbd6

Please sign in to comment.