From 593c875d3fb3640c8e9bf88e48f9256925871f56 Mon Sep 17 00:00:00 2001 From: Juraj Bielik Date: Fri, 31 Aug 2018 17:02:05 +0200 Subject: [PATCH] KA-389 Replace TryGetContentTypeCodename method --- .../ContentTypeExtractorTests.cs | 59 ++++--------------- KenticoCloud.Delivery/DeliveryClient.cs | 2 +- .../Utilities/ContentTypeExtractor.cs | 35 +++++------ 3 files changed, 26 insertions(+), 70 deletions(-) diff --git a/KenticoCloud.Delivery.Tests/QueryParameters/ContentTypeExtractorTests.cs b/KenticoCloud.Delivery.Tests/QueryParameters/ContentTypeExtractorTests.cs index fa8713f9..f477694d 100644 --- a/KenticoCloud.Delivery.Tests/QueryParameters/ContentTypeExtractorTests.cs +++ b/KenticoCloud.Delivery.Tests/QueryParameters/ContentTypeExtractorTests.cs @@ -1,5 +1,7 @@ using KenticoCloud.Delivery.QueryParameters.Utilities; using System.Collections.Generic; +using System.Runtime.CompilerServices; +using FakeItEasy; using Xunit; namespace KenticoCloud.Delivery.Tests.QueryParameters @@ -8,11 +10,17 @@ public class ContentTypeExtractorTests { private const string CONTENT_TYPE_CODENAME = "SomeContentType"; - private ContentTypeExtractor _extractor; + private readonly ContentTypeExtractor _extractor; + private readonly ICodeFirstTypeProvider _contentTypeProvider; public ContentTypeExtractorTests() { - _extractor = new ContentTypeExtractor(); + _contentTypeProvider = A.Fake(); + + A.CallTo(() => _contentTypeProvider.GetCodename(typeof(TypeWithContentTypeCodename))).Returns(TypeWithContentTypeCodename.Codename); + A.CallTo(() => _contentTypeProvider.GetCodename(typeof(TypeWithoutContentTypeCodename))).Returns(null); + + _extractor = new ContentTypeExtractor(_contentTypeProvider); } private class TypeWithContentTypeCodename @@ -20,28 +28,11 @@ private class TypeWithContentTypeCodename public const string Codename = CONTENT_TYPE_CODENAME; } - [Fact] - public void TryGetContentTypeCodename_WhenGivenTypeWithCodename_ReturnsTrueAndCodename() - { - var success = _extractor.TryGetContentTypeCodename(typeof(TypeWithContentTypeCodename), out string resultCodename); - - Assert.True(success); - Assert.Equal("SomeContentType", resultCodename); - } - private class TypeWithoutContentTypeCodename { public const int Answer = 42; } - [Fact] - public void TryGetContentTypeCodename_WhenGivenTypeWithoutCodename_ReturnsFalse() - { - var success = _extractor.TryGetContentTypeCodename(typeof(TypeWithoutContentTypeCodename), out string resultCodename); - - Assert.False(success); - } - private class TypeWithContentTypeCodenameAsProperty { public string Codename @@ -53,41 +44,11 @@ public string Codename } } - [Fact] - public void TryGetContentTypeCodename_WhenGivenTypeWithCodenameAsProperty_ReturnsFalse() - { - - var success = _extractor.TryGetContentTypeCodename(typeof(TypeWithContentTypeCodenameAsProperty), out string resultCodename); - - Assert.False(success); - } - private class TypeWithContentTypeCodenameAsVariable { public string Codename = "42"; } - [Fact] - public void TryGetContentTypeCodename_WhenGivenTypeWithCodenameAsVariable_ReturnsFalse() - { - var success = _extractor.TryGetContentTypeCodename(typeof(TypeWithContentTypeCodenameAsVariable), out string resultCodename); - - Assert.False(success); - } - - private class TypeWithContentTypeCodenameAsPrivateField - { - private const string Codename = "MyPrivateCodename"; - } - - [Fact] - public void TryGetContentTypeCodename_WhenGivenTypeWithCodenameAsPrivateField_ReturnsFalse() - { - var success = _extractor.TryGetContentTypeCodename(typeof(TypeWithContentTypeCodenameAsPrivateField), out string resultCodename); - - Assert.False(success); - } - [Fact] public void ExtractParameters_WhenGivenTypeWithCodenameAndExistingParams_AddsCodenameToParams() { diff --git a/KenticoCloud.Delivery/DeliveryClient.cs b/KenticoCloud.Delivery/DeliveryClient.cs index 60916893..f0a5e279 100644 --- a/KenticoCloud.Delivery/DeliveryClient.cs +++ b/KenticoCloud.Delivery/DeliveryClient.cs @@ -129,7 +129,7 @@ public DeliveryClient(DeliveryOptions deliveryOptions) } _deliveryOptions.ProjectId = projectIdGuid.ToString("D"); - _extractor = new QueryParameters.Utilities.ContentTypeExtractor(); + _extractor = new QueryParameters.Utilities.ContentTypeExtractor(_codeFirstModelProvider.TypeProvider); } /// diff --git a/KenticoCloud.Delivery/QueryParameters/Utilities/ContentTypeExtractor.cs b/KenticoCloud.Delivery/QueryParameters/Utilities/ContentTypeExtractor.cs index a18512ab..a350f46e 100644 --- a/KenticoCloud.Delivery/QueryParameters/Utilities/ContentTypeExtractor.cs +++ b/KenticoCloud.Delivery/QueryParameters/Utilities/ContentTypeExtractor.cs @@ -7,13 +7,24 @@ namespace KenticoCloud.Delivery.QueryParameters.Utilities { internal class ContentTypeExtractor { + private readonly ICodeFirstTypeProvider _provider; + + public ContentTypeExtractor(ICodeFirstTypeProvider provider) + { + _provider = provider; + } + internal IEnumerable ExtractParameters(IEnumerable parameters = null) { - var enhancedParameters = parameters != null ? new List(parameters) : new List(); - - if (!IsAlreadyInParameters(parameters) && TryGetContentTypeCodename(typeof(T), out string contentTypeCodename)) + var enhancedParameters = parameters != null + ? new List(parameters) + : new List(); + + var codename = _provider.GetCodename(typeof(T)); + + if (!IsAlreadyInParameters(parameters) && codename != null) { - enhancedParameters.Add(new EqualsFilter("system.type", contentTypeCodename)); + enhancedParameters.Add(new EqualsFilter("system.type", codename)); } return enhancedParameters; } @@ -27,21 +38,5 @@ private bool IsAlreadyInParameters(IEnumerable parameters) .Equals("system.type", StringComparison.Ordinal)); return typeFilterExists ?? false; } - - internal bool TryGetContentTypeCodename(Type contentType, out string codename) - { - var fields = contentType.GetFields(BindingFlags.Static | BindingFlags.Public); - string codenameField = "Codename"; - - if (fields.Any(field => field.Name == codenameField)) - { - codename = (string)contentType.GetField(codenameField)?.GetValue(null); - return codename != null; - } - - codename = null; - - return false; - } } }