Skip to content

Commit e928e62

Browse files
committed
Dynamic access of JsonApiOptions properties in tests
1 parent 82d39b7 commit e928e62

File tree

1 file changed

+24
-51
lines changed

1 file changed

+24
-51
lines changed
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
using System.Reflection;
12
using JsonApiDotNetCore.Configuration;
23
using Microsoft.Extensions.DependencyInjection;
34

@@ -20,66 +21,38 @@ public void Dispose()
2021

2122
private sealed class JsonApiOptionsScope : IDisposable
2223
{
24+
private static readonly List<PropertyInfo> PropertyCache = typeof(JsonApiOptions).GetProperties().Where(IsAccessibleProperty).ToList();
25+
2326
private readonly JsonApiOptions _options;
2427
private readonly JsonApiOptions _backupValues;
2528

26-
public JsonApiOptionsScope(IJsonApiOptions options)
29+
public JsonApiOptionsScope(JsonApiOptions options)
2730
{
28-
_options = (JsonApiOptions)options;
31+
_options = options;
32+
_backupValues = new JsonApiOptions();
2933

30-
_backupValues = new JsonApiOptions
31-
{
32-
Namespace = options.Namespace,
33-
DefaultAttrCapabilities = options.DefaultAttrCapabilities,
34-
DefaultHasOneCapabilities = options.DefaultHasOneCapabilities,
35-
DefaultHasManyCapabilities = options.DefaultHasManyCapabilities,
36-
IncludeJsonApiVersion = options.IncludeJsonApiVersion,
37-
IncludeExceptionStackTraceInErrors = options.IncludeExceptionStackTraceInErrors,
38-
IncludeRequestBodyInErrors = options.IncludeRequestBodyInErrors,
39-
UseRelativeLinks = options.UseRelativeLinks,
40-
TopLevelLinks = options.TopLevelLinks,
41-
ResourceLinks = options.ResourceLinks,
42-
RelationshipLinks = options.RelationshipLinks,
43-
IncludeTotalResourceCount = options.IncludeTotalResourceCount,
44-
DefaultPageSize = options.DefaultPageSize,
45-
MaximumPageSize = options.MaximumPageSize,
46-
MaximumPageNumber = options.MaximumPageNumber,
47-
ValidateModelState = options.ValidateModelState,
48-
ClientIdGeneration = options.ClientIdGeneration,
49-
AllowUnknownQueryStringParameters = options.AllowUnknownQueryStringParameters,
50-
AllowUnknownFieldsInRequestBody = options.AllowUnknownFieldsInRequestBody,
51-
EnableLegacyFilterNotation = options.EnableLegacyFilterNotation,
52-
MaximumIncludeDepth = options.MaximumIncludeDepth,
53-
MaximumOperationsPerRequest = options.MaximumOperationsPerRequest,
54-
TransactionIsolationLevel = options.TransactionIsolationLevel
55-
};
34+
CopyPropertyValues(_options, _backupValues);
35+
}
36+
37+
private static bool IsAccessibleProperty(PropertyInfo property)
38+
{
39+
return property.GetMethod != null && property.SetMethod != null && property.GetCustomAttribute<ObsoleteAttribute>() == null;
5640
}
5741

5842
public void Dispose()
5943
{
60-
_options.Namespace = _backupValues.Namespace;
61-
_options.DefaultAttrCapabilities = _backupValues.DefaultAttrCapabilities;
62-
_options.DefaultHasOneCapabilities = _backupValues.DefaultHasOneCapabilities;
63-
_options.DefaultHasManyCapabilities = _backupValues.DefaultHasManyCapabilities;
64-
_options.IncludeJsonApiVersion = _backupValues.IncludeJsonApiVersion;
65-
_options.IncludeExceptionStackTraceInErrors = _backupValues.IncludeExceptionStackTraceInErrors;
66-
_options.IncludeRequestBodyInErrors = _backupValues.IncludeRequestBodyInErrors;
67-
_options.UseRelativeLinks = _backupValues.UseRelativeLinks;
68-
_options.TopLevelLinks = _backupValues.TopLevelLinks;
69-
_options.ResourceLinks = _backupValues.ResourceLinks;
70-
_options.RelationshipLinks = _backupValues.RelationshipLinks;
71-
_options.IncludeTotalResourceCount = _backupValues.IncludeTotalResourceCount;
72-
_options.DefaultPageSize = _backupValues.DefaultPageSize;
73-
_options.MaximumPageSize = _backupValues.MaximumPageSize;
74-
_options.MaximumPageNumber = _backupValues.MaximumPageNumber;
75-
_options.ValidateModelState = _backupValues.ValidateModelState;
76-
_options.ClientIdGeneration = _backupValues.ClientIdGeneration;
77-
_options.AllowUnknownQueryStringParameters = _backupValues.AllowUnknownQueryStringParameters;
78-
_options.AllowUnknownFieldsInRequestBody = _backupValues.AllowUnknownFieldsInRequestBody;
79-
_options.EnableLegacyFilterNotation = _backupValues.EnableLegacyFilterNotation;
80-
_options.MaximumIncludeDepth = _backupValues.MaximumIncludeDepth;
81-
_options.MaximumOperationsPerRequest = _backupValues.MaximumOperationsPerRequest;
82-
_options.TransactionIsolationLevel = _backupValues.TransactionIsolationLevel;
44+
CopyPropertyValues(_backupValues, _options);
45+
}
46+
47+
private static void CopyPropertyValues(JsonApiOptions source, JsonApiOptions destination)
48+
{
49+
foreach (PropertyInfo property in PropertyCache)
50+
{
51+
property.SetMethod!.Invoke(destination, new[]
52+
{
53+
property.GetMethod!.Invoke(source, null)
54+
});
55+
}
8356
}
8457
}
8558
}

0 commit comments

Comments
 (0)