Skip to content

Commit

Permalink
KA-389 Get rid of ContentTypeExtractor class
Browse files Browse the repository at this point in the history
  • Loading branch information
Juraj Bielik committed Sep 4, 2018
1 parent a0f96b0 commit 8bbb760
Show file tree
Hide file tree
Showing 5 changed files with 48 additions and 133 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -30,12 +30,7 @@ public Type GetType(string contentType)

public string GetCodename(Type contentType)
{
if (!TypesDictionary.TryGetValue(contentType, out var codename))
{
return null;
}

return codename;
return TypesDictionary.TryGetValue(contentType, out var codename) ? codename : null;
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -30,12 +30,7 @@ public Type GetType(string contentType)

public string GetCodename(Type contentType)
{
if (!TypesDictionary.TryGetValue(contentType, out var codename))
{
return null;
}

return codename;
return TypesDictionary.TryGetValue(contentType, out var codename) ? codename : null;
}
}
}
Original file line number Diff line number Diff line change
@@ -1,99 +1,47 @@
using KenticoCloud.Delivery.QueryParameters.Utilities;
using System;
using System.Collections.Generic;
using FakeItEasy;
using Xunit;

namespace KenticoCloud.Delivery.Tests.QueryParameters
{
public class ContentTypeExtractorTests
{
private const string CONTENT_TYPE_CODENAME = "SomeContentType";
private const string FAKE_PROJECT_ID = "00000000-0000-0000-0000-000000000000";

private ContentTypeExtractor _extractor;
private readonly DeliveryClient _client;
private readonly ICodeFirstTypeProvider _contentTypeProvider;

public ContentTypeExtractorTests()
{
_extractor = new ContentTypeExtractor();
_contentTypeProvider = A.Fake<ICodeFirstTypeProvider>();

A.CallTo(() => _contentTypeProvider.GetCodename(typeof(TypeWithContentTypeCodename))).Returns(TypeWithContentTypeCodename.Codename);
A.CallTo(() => _contentTypeProvider.GetCodename(typeof(TypeWithoutContentTypeCodename))).Returns(null);

_client = new DeliveryClient(FAKE_PROJECT_ID)
{
CodeFirstModelProvider = {TypeProvider = _contentTypeProvider}
};
}

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
{
get
{
return CONTENT_TYPE_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()
{
var existingParams = new List<IQueryParameter>() { new SkipParameter(15) };

var enhancedParams = new List<IQueryParameter>(_extractor.ExtractParameters<TypeWithContentTypeCodename>(existingParams));
var enhancedParams = new List<IQueryParameter>(_client.ExtractParameters<TypeWithContentTypeCodename>(existingParams));

Assert.Equal(2, enhancedParams.Count);
Assert.True(enhancedParams.Find(x => x.GetQueryStringParameter() == $"system.type={CONTENT_TYPE_CODENAME}") != null);
Expand All @@ -102,7 +50,7 @@ public void ExtractParameters_WhenGivenTypeWithCodenameAndExistingParams_AddsCod
[Fact]
public void ExtractParameters_WhenGivenTypeWithCodename_CreatesNewParams()
{
var enhancedParams = new List<IQueryParameter>(_extractor.ExtractParameters<TypeWithContentTypeCodename>());
var enhancedParams = new List<IQueryParameter>(_client.ExtractParameters<TypeWithContentTypeCodename>());

Assert.Single(enhancedParams);
Assert.True(enhancedParams.Find(x => x.GetQueryStringParameter() == $"system.type={CONTENT_TYPE_CODENAME}") != null);
Expand All @@ -111,7 +59,7 @@ public void ExtractParameters_WhenGivenTypeWithCodename_CreatesNewParams()
[Fact]
public void ExtractParameters_WhenGivenTypeWithoutCodenameNoParams_CreatesEmptyParams()
{
var enhancedParams = new List<IQueryParameter>(_extractor.ExtractParameters<TypeWithoutContentTypeCodename>());
var enhancedParams = new List<IQueryParameter>(_client.ExtractParameters<TypeWithoutContentTypeCodename>());

Assert.Empty(enhancedParams);
}
Expand All @@ -121,7 +69,7 @@ public void ExtractParameters_WhenGivenTypeWithoutCodenameAndParams_ReturnsParam
{
var existingParams = new List<IQueryParameter>() { new SkipParameter(15) };

var enhancedParams = new List<IQueryParameter>(_extractor.ExtractParameters<TypeWithoutContentTypeCodename>(existingParams));
var enhancedParams = new List<IQueryParameter>(_client.ExtractParameters<TypeWithoutContentTypeCodename>(existingParams));

Assert.Single(enhancedParams);
Assert.True(enhancedParams.Find(x => x.GetQueryStringParameter() == $"system.type=TypeWithoutContentTypeCodename") == null);
Expand All @@ -132,7 +80,7 @@ public void ExtractParameters_WhenGivenTypeWithCodenameAndExistingTypeParameter_
{
var existingParams = new List<IQueryParameter>() { new EqualsFilter("system.type", CONTENT_TYPE_CODENAME) };

var enhancedParams = new List<IQueryParameter>(_extractor.ExtractParameters<TypeWithContentTypeCodename>(existingParams));
var enhancedParams = new List<IQueryParameter>(_client.ExtractParameters<TypeWithContentTypeCodename>(existingParams));

Assert.Single(enhancedParams);
Assert.True(enhancedParams.Find(x => x.GetQueryStringParameter() == $"system.type={CONTENT_TYPE_CODENAME}") != null);
Expand Down
30 changes: 27 additions & 3 deletions KenticoCloud.Delivery/DeliveryClient.cs
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Threading.Tasks;
Expand All @@ -18,7 +19,6 @@ namespace KenticoCloud.Delivery
public sealed class DeliveryClient : IDeliveryClient
{
private readonly DeliveryOptions _deliveryOptions;
private readonly QueryParameters.Utilities.ContentTypeExtractor _extractor;

private HttpClient _httpClient;
private DeliveryEndpointUrlBuilder _urlBuilder;
Expand Down Expand Up @@ -129,7 +129,6 @@ public DeliveryClient(DeliveryOptions deliveryOptions)
}

_deliveryOptions.ProjectId = projectIdGuid.ToString("D");
_extractor = new QueryParameters.Utilities.ContentTypeExtractor();
}

/// <summary>
Expand Down Expand Up @@ -310,7 +309,7 @@ public async Task<DeliveryItemListingResponse<T>> GetItemsAsync<T>(params IQuery
/// <returns>The <see cref="DeliveryItemListingResponse{T}"/> instance that contains the content items. If no query parameters are specified, all content items are returned.</returns>
public async Task<DeliveryItemListingResponse<T>> GetItemsAsync<T>(IEnumerable<IQueryParameter> parameters)
{
var enhancedParameters = _extractor.ExtractParameters<T>(parameters);
var enhancedParameters = ExtractParameters<T>(parameters);
var endpointUrl = UrlBuilder.GetItemsUrl(enhancedParameters);
var response = await GetDeliverResponseAsync(endpointUrl);

Expand Down Expand Up @@ -590,5 +589,30 @@ private async Task<JObject> GetResponseContent(HttpResponseMessage httpResponseM

throw new DeliveryException(httpResponseMessage, faultContent);
}

internal IEnumerable<IQueryParameter> ExtractParameters<T>(IEnumerable<IQueryParameter> parameters = null)
{
var enhancedParameters = parameters != null
? new List<IQueryParameter>(parameters)
: new List<IQueryParameter>();

var codename = _codeFirstModelProvider.TypeProvider.GetCodename(typeof(T));

if (codename != null && !IsTypeInQueryParameters(parameters))
{
enhancedParameters.Add(new EqualsFilter("system.type", codename));
}
return enhancedParameters;
}

private static bool IsTypeInQueryParameters(IEnumerable<IQueryParameter> parameters)
{
var typeFilterExists = parameters?
.OfType<EqualsFilter>()
.Any(filter => filter
.ElementOrAttributePath
.Equals("system.type", StringComparison.Ordinal));
return typeFilterExists ?? false;
}
}
}

This file was deleted.

0 comments on commit 8bbb760

Please sign in to comment.