Skip to content

Commit

Permalink
GH-502 GH-488: Add parameter TraktExtendedInfo in `TraktListsModule…
Browse files Browse the repository at this point in the history
….GetTrendingListsAsync()`
  • Loading branch information
henrikfroehling committed Jul 5, 2023
1 parent fb5ea5c commit 7d3f304
Show file tree
Hide file tree
Showing 6 changed files with 157 additions and 18 deletions.
8 changes: 7 additions & 1 deletion Source/Lib/Trakt.NET/Modules/TraktListsModule.cs
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,10 @@ public Task<TraktPagedResponse<ITraktList>> GetPopularListsAsync(TraktPagedParam
/// See <a href="https://trakt.docs.apiary.io/#reference/lists/trending/get-trending-lists">"Trakt API Doc - Lists: Trending"</a> for more information.
/// </para>
/// </summary>
/// <param name="extendedInfo">
/// The extended info, which determines how much data about the list items should be queried.
/// See also <seealso cref="TraktExtendedInfo" />.
/// </param>
/// <param name="pagedParameters">Specifies pagination parameters. <see cref="TraktPagedParameters" />.</param>
/// <param name="cancellationToken">
/// Propagates notification that the request should be canceled.<para/>
Expand All @@ -76,11 +80,13 @@ public Task<TraktPagedResponse<ITraktList>> GetPopularListsAsync(TraktPagedParam
/// </para>
/// </returns>
/// <exception cref="TraktException">Thrown, if the request fails.</exception>
public Task<TraktPagedResponse<ITraktList>> GetTrendingListsAsync(TraktPagedParameters pagedParameters = null,
public Task<TraktPagedResponse<ITraktList>> GetTrendingListsAsync(TraktExtendedInfo extendedInfo = null,
TraktPagedParameters pagedParameters = null,
CancellationToken cancellationToken = default)
{
var request = new ListsTrendingRequest
{
ExtendedInfo = extendedInfo,
Page = pagedParameters?.Page,
Limit = pagedParameters?.Limit
};
Expand Down
6 changes: 6 additions & 0 deletions Source/Lib/Trakt.NET/Requests/Lists/AListsRequest.cs
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,13 @@
using Base;
using Interfaces;
using Objects.Get.Lists;
using Parameters;
using System.Collections.Generic;

internal abstract class AListsRequest : AGetRequest<ITraktList>, ISupportsPagination
{
public TraktExtendedInfo ExtendedInfo { get; set; }

public uint? Page { get; set; }

public uint? Limit { get; set; }
Expand All @@ -15,6 +18,9 @@ public override IDictionary<string, object> GetUriPathParameters()
{
var uriParams = new Dictionary<string, object>();

if (ExtendedInfo != null && ExtendedInfo.HasAnySet)
uriParams.Add("extended", ExtendedInfo.ToString());

if (Page.HasValue)
uriParams.Add("page", Page.Value.ToString());

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,6 @@
{
internal sealed class ListsTrendingRequest : AListsRequest
{
public override string UriTemplate => "lists/trending{?page,limit}";
public override string UriTemplate => "lists/trending{?extended,page,limit}";
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -34,14 +34,32 @@ public async Task Test_TraktListsModule_GetTrendingLists()
response.PageCount.Should().HaveValue().And.Be(1);
}

[Fact]
public async Task Test_TraktListsModule_GetTrendingLists_With_ExtendedInfo()
{
TraktClient client = TestUtility.GetMockClient($"{GET_TRENDING_LISTS_URI}?extended={EXTENDED_INFO}",
LISTS_JSON, PAGE, 10, 1, ITEM_COUNT);

TraktPagedResponse<ITraktList> response = await client.Lists.GetTrendingListsAsync(EXTENDED_INFO);

response.Should().NotBeNull();
response.IsSuccess.Should().BeTrue();
response.HasValue.Should().BeTrue();
response.Value.Should().NotBeNull().And.HaveCount(ITEM_COUNT);
response.ItemCount.Should().HaveValue().And.Be(ITEM_COUNT);
response.Limit.Should().Be(10u);
response.Page.Should().Be(PAGE);
response.PageCount.Should().HaveValue().And.Be(1);
}

[Fact]
public async Task Test_TraktListsModule_GetTrendingLists_With_Page()
{
TraktClient client = TestUtility.GetMockClient($"{GET_TRENDING_LISTS_URI}?page={PAGE}",
LISTS_JSON, PAGE, 10, 1, ITEM_COUNT);

var pagedParameters = new TraktPagedParameters(PAGE);
TraktPagedResponse<ITraktList> response = await client.Lists.GetTrendingListsAsync(pagedParameters);
TraktPagedResponse<ITraktList> response = await client.Lists.GetTrendingListsAsync(null, pagedParameters);

response.Should().NotBeNull();
response.IsSuccess.Should().BeTrue();
Expand All @@ -60,7 +78,7 @@ public async Task Test_TraktListsModule_GetTrendingLists_With_Limit()
LISTS_JSON, 1, LIMIT, 1, ITEM_COUNT);

var pagedParameters = new TraktPagedParameters(null, LIMIT);
TraktPagedResponse<ITraktList> response = await client.Lists.GetTrendingListsAsync(pagedParameters);
TraktPagedResponse<ITraktList> response = await client.Lists.GetTrendingListsAsync(null, pagedParameters);

response.Should().NotBeNull();
response.IsSuccess.Should().BeTrue();
Expand All @@ -73,13 +91,71 @@ public async Task Test_TraktListsModule_GetTrendingLists_With_Limit()
}

[Fact]
public async Task Test_TraktListsModule_GetTrendingLists_Complete()
public async Task Test_TraktListsModule_GetTrendingLists_With_ExtendedInfo_Page()
{
TraktClient client = TestUtility.GetMockClient($"{GET_TRENDING_LISTS_URI}?extended={EXTENDED_INFO}&page={PAGE}",
LISTS_JSON, PAGE, 10, 1, ITEM_COUNT);

var pagedParameters = new TraktPagedParameters(PAGE);
TraktPagedResponse<ITraktList> response = await client.Lists.GetTrendingListsAsync(EXTENDED_INFO, pagedParameters);

response.Should().NotBeNull();
response.IsSuccess.Should().BeTrue();
response.HasValue.Should().BeTrue();
response.Value.Should().NotBeNull().And.HaveCount(ITEM_COUNT);
response.ItemCount.Should().HaveValue().And.Be(ITEM_COUNT);
response.Limit.Should().Be(10u);
response.Page.Should().Be(PAGE);
response.PageCount.Should().HaveValue().And.Be(1);
}

[Fact]
public async Task Test_TraktListsModule_GetTrendingLists_With_ExtendedInfo_Limit()
{
TraktClient client = TestUtility.GetMockClient($"{GET_TRENDING_LISTS_URI}?extended={EXTENDED_INFO}&limit={LIMIT}",
LISTS_JSON, 1, LIMIT, 1, ITEM_COUNT);

var pagedParameters = new TraktPagedParameters(null, LIMIT);
TraktPagedResponse<ITraktList> response = await client.Lists.GetTrendingListsAsync(EXTENDED_INFO, pagedParameters);

response.Should().NotBeNull();
response.IsSuccess.Should().BeTrue();
response.HasValue.Should().BeTrue();
response.Value.Should().NotBeNull().And.HaveCount(ITEM_COUNT);
response.ItemCount.Should().HaveValue().And.Be(ITEM_COUNT);
response.Limit.Should().Be(LIMIT);
response.Page.Should().Be(1);
response.PageCount.Should().HaveValue().And.Be(1);
}

[Fact]
public async Task Test_TraktListsModule_GetTrendingLists_With_Page_And_Limit()
{
TraktClient client = TestUtility.GetMockClient($"{GET_TRENDING_LISTS_URI}?page={PAGE}&limit={LIMIT}",
LISTS_JSON, PAGE, LIMIT, 1, ITEM_COUNT);

var pagedParameters = new TraktPagedParameters(PAGE, LIMIT);
TraktPagedResponse<ITraktList> response = await client.Lists.GetTrendingListsAsync(pagedParameters);
TraktPagedResponse<ITraktList> response = await client.Lists.GetTrendingListsAsync(null, pagedParameters);

response.Should().NotBeNull();
response.IsSuccess.Should().BeTrue();
response.HasValue.Should().BeTrue();
response.Value.Should().NotBeNull().And.HaveCount(ITEM_COUNT);
response.ItemCount.Should().HaveValue().And.Be(ITEM_COUNT);
response.Limit.Should().Be(LIMIT);
response.Page.Should().Be(PAGE);
response.PageCount.Should().HaveValue().And.Be(1);
}

[Fact]
public async Task Test_TraktListsModule_GetTrendingLists_Complete()
{
TraktClient client = TestUtility.GetMockClient(
$"{GET_TRENDING_LISTS_URI}?extended={EXTENDED_INFO}&page={PAGE}&limit={LIMIT}",
LISTS_JSON, PAGE, LIMIT, 1, ITEM_COUNT);

var pagedParameters = new TraktPagedParameters(PAGE, LIMIT);
TraktPagedResponse<ITraktList> response = await client.Lists.GetTrendingListsAsync(EXTENDED_INFO, pagedParameters);

response.Should().NotBeNull();
response.IsSuccess.Should().BeTrue();
Expand All @@ -98,7 +174,7 @@ public async Task Test_TraktListsModule_GetTrendingLists_Paging_HasPreviousPage_
LISTS_JSON, 2, LIMIT, 5, ITEM_COUNT);

var pagedParameters = new TraktPagedParameters(2, LIMIT);
TraktPagedResponse<ITraktList> response = await client.Lists.GetTrendingListsAsync(pagedParameters);
TraktPagedResponse<ITraktList> response = await client.Lists.GetTrendingListsAsync(null, pagedParameters);

response.Should().NotBeNull();
response.IsSuccess.Should().BeTrue();
Expand All @@ -119,7 +195,7 @@ public async Task Test_TraktListsModule_GetTrendingLists_Paging_Only_HasPrevious
LISTS_JSON, 2, LIMIT, 2, ITEM_COUNT);

var pagedParameters = new TraktPagedParameters(2, LIMIT);
TraktPagedResponse<ITraktList> response = await client.Lists.GetTrendingListsAsync(pagedParameters);
TraktPagedResponse<ITraktList> response = await client.Lists.GetTrendingListsAsync(null, pagedParameters);

response.Should().NotBeNull();
response.IsSuccess.Should().BeTrue();
Expand All @@ -140,7 +216,7 @@ public async Task Test_TraktListsModule_GetTrendingLists_Paging_Only_HasNextPage
LISTS_JSON, 1, LIMIT, 2, ITEM_COUNT);

var pagedParameters = new TraktPagedParameters(1, LIMIT);
TraktPagedResponse<ITraktList> response = await client.Lists.GetTrendingListsAsync(pagedParameters);
TraktPagedResponse<ITraktList> response = await client.Lists.GetTrendingListsAsync(null, pagedParameters);

response.Should().NotBeNull();
response.IsSuccess.Should().BeTrue();
Expand All @@ -161,7 +237,7 @@ public async Task Test_TraktListsModule_GetTrendingLists_Paging_Not_HasPreviousP
LISTS_JSON, 1, LIMIT, 1, ITEM_COUNT);

var pagedParameters = new TraktPagedParameters(1, LIMIT);
TraktPagedResponse<ITraktList> response = await client.Lists.GetTrendingListsAsync(pagedParameters);
TraktPagedResponse<ITraktList> response = await client.Lists.GetTrendingListsAsync(null, pagedParameters);

response.Should().NotBeNull();
response.IsSuccess.Should().BeTrue();
Expand All @@ -182,7 +258,7 @@ public async Task Test_TraktListsModule_GetTrendingLists_Paging_GetPreviousPage(
LISTS_JSON, 2, LIMIT, 2, ITEM_COUNT);

var pagedParameters = new TraktPagedParameters(2, LIMIT);
TraktPagedResponse<ITraktList> response = await client.Lists.GetTrendingListsAsync(pagedParameters);
TraktPagedResponse<ITraktList> response = await client.Lists.GetTrendingListsAsync(null, pagedParameters);

response.Should().NotBeNull();
response.IsSuccess.Should().BeTrue();
Expand Down Expand Up @@ -219,7 +295,7 @@ public async Task Test_TraktListsModule_GetTrendingLists_Paging_GetNextPage()
LISTS_JSON, 1, LIMIT, 2, ITEM_COUNT);

var pagedParameters = new TraktPagedParameters(1, LIMIT);
TraktPagedResponse<ITraktList> response = await client.Lists.GetTrendingListsAsync(pagedParameters);
TraktPagedResponse<ITraktList> response = await client.Lists.GetTrendingListsAsync(null, pagedParameters);

response.Should().NotBeNull();
response.IsSuccess.Should().BeTrue();
Expand Down
61 changes: 56 additions & 5 deletions Source/Tests/Trakt.NET.Requests.Tests/Lists/AListsRequest_Tests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
using System.Collections;
using System.Collections.Generic;
using Trakt.NET.Tests.Utility.Traits;
using TraktNet.Parameters;
using TraktNet.Requests.Base;
using TraktNet.Requests.Lists;
using Xunit;
Expand Down Expand Up @@ -36,23 +37,48 @@ public void Test_AListsRequest_Returns_Valid_UriPathParameters(IDictionary<strin

public class AListsRequest_TestData : IEnumerable<object[]>
{
private static readonly TraktExtendedInfo _extendedInfo = new TraktExtendedInfo { Full = true };
private const int _page = 5;
private const int _limit = 20;

private static readonly ListsRequestMock _request1 = new ListsRequestMock();

private static readonly ListsRequestMock _request2 = new ListsRequestMock
{
Page = _page
ExtendedInfo = _extendedInfo
};

private static readonly ListsRequestMock _request3 = new ListsRequestMock
{
Limit = _limit
Page = _page
};

private static readonly ListsRequestMock _request4 = new ListsRequestMock
{
Limit = _limit
};

private static readonly ListsRequestMock _request5 = new ListsRequestMock
{
ExtendedInfo = _extendedInfo,
Page = _page
};

private static readonly ListsRequestMock _request6 = new ListsRequestMock
{
ExtendedInfo = _extendedInfo,
Limit = _limit
};

private static readonly ListsRequestMock _request7 = new ListsRequestMock
{
Page = _page,
Limit = _limit
};

private static readonly ListsRequestMock _request8 = new ListsRequestMock
{
ExtendedInfo = _extendedInfo,
Page = _page,
Limit = _limit
};
Expand All @@ -64,25 +90,50 @@ public AListsRequest_TestData()
SetupPathParamters();
}

private void SetupPathParamters()
private static void SetupPathParamters()
{
var strExtendedInfo = _extendedInfo.ToString();
var strPage = _page.ToString();
var strLimit = _limit.ToString();

_data.Add(new object[] { _request1.GetUriPathParameters(), new Dictionary<string, object>() });

_data.Add(new object[] { _request2.GetUriPathParameters(), new Dictionary<string, object>
{
["page"] = strPage
["extended"] = strExtendedInfo
}});

_data.Add(new object[] { _request3.GetUriPathParameters(), new Dictionary<string, object>
{
["limit"] = strLimit
["page"] = strPage
}});

_data.Add(new object[] { _request4.GetUriPathParameters(), new Dictionary<string, object>
{
["limit"] = strLimit
}});

_data.Add(new object[] { _request5.GetUriPathParameters(), new Dictionary<string, object>
{
["extended"] = strExtendedInfo,
["page"] = strPage
}});

_data.Add(new object[] { _request6.GetUriPathParameters(), new Dictionary<string, object>
{
["extended"] = strExtendedInfo,
["limit"] = strLimit
}});

_data.Add(new object[] { _request7.GetUriPathParameters(), new Dictionary<string, object>
{
["page"] = strPage,
["limit"] = strLimit
}});

_data.Add(new object[] { _request8.GetUriPathParameters(), new Dictionary<string, object>
{
["extended"] = strExtendedInfo,
["page"] = strPage,
["limit"] = strLimit
}});
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ public class ListsTrendingRequest_Tests
public void Test_ListsTrendingRequest_Has_Valid_UriTemplate()
{
var request = new ListsTrendingRequest();
request.UriTemplate.Should().Be("lists/trending{?page,limit}");
request.UriTemplate.Should().Be("lists/trending{?extended,page,limit}");
}
}
}

0 comments on commit 7d3f304

Please sign in to comment.