Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Allow Paging of views in ExecuteView. Unit test. #115

Merged
merged 3 commits into from
Jan 5, 2015
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion Tests/Settings.cs
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,8 @@ public class Settings
public const long GroupId = 20402842;
public const long OrganizationId = 22560572;

public const string ViewName = "My unsolved tickets";
public const string ViewName = "My unsolved tickets";
public const int ViewId = 31559032;

public const long TicketFormId = 26227;

Expand Down
133 changes: 128 additions & 5 deletions Tests/TicketTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using ZendeskApi_v2;
using ZendeskApi_v2.Extensions;
using ZendeskApi_v2.Models.Constants;
using ZendeskApi_v2.Models.Shared;
using ZendeskApi_v2.Models.Tickets;
Expand Down Expand Up @@ -85,6 +86,31 @@ public void CanGetTickets()
Assert.True(ticketsByUser.Count > 0);
}

[Test]
public void CanGetTicketsPaged()
{
const int count = 50;
var tickets = api.Tickets.GetAllTickets(count);

Assert.AreEqual(count, tickets.Tickets.Count); // 50
Assert.AreNotEqual(tickets.Count, tickets.Tickets.Count); // 50 != total count of tickets (assumption)

const int page = 3;
var thirdPage = api.Tickets.GetAllTickets(count, page);

Assert.AreEqual(count, thirdPage.Tickets.Count);

var nextPage = thirdPage.NextPage.GetQueryStringDict()
.Where(x => x.Key == "page")
.Select(x => x.Value)
.FirstOrDefault();

Assert.NotNull(nextPage);

Assert.AreEqual(nextPage, (page + 1).ToString());
}


[Test]
public void CanGetTicketById()
{
Expand All @@ -98,18 +124,91 @@ public void CanGetTicketById()
public void CanGetTicketsByOrganizationId()
{
var id = Settings.OrganizationId;
var tickets = api.Tickets.GetTicketsByOrganizationID(id, 2, 3);
var tickets = api.Tickets.GetTicketsByOrganizationID(id);
Assert.True(tickets.Count > 0);
}


[Test]
public void CanGetTicketsByOrganizationIdPaging()
public void CanGetTicketsByOrganizationIdPaged()
{
var id = Settings.OrganizationId;
var tickets = api.Tickets.GetTicketsByOrganizationID(id);
Assert.True(tickets.Count > 0);
var ticketsRes = api.Tickets.GetTicketsByOrganizationID(id, 2, 3);

Assert.AreEqual(3, ticketsRes.PageSize);
Assert.AreEqual(3, ticketsRes.Tickets.Count);
Assert.Greater(ticketsRes.Count, 0);

var nextPage = ticketsRes.NextPage.GetQueryStringDict()
.Where(x => x.Key == "page")
.Select(x => x.Value)
.FirstOrDefault();

Assert.NotNull(nextPage);

Assert.AreEqual("3", nextPage);
}


[Test]
public void CanGetTicketsByViewIdPaged()
{
var ticketsRes = api.Tickets.GetTicketsByViewID(Settings.ViewId, 10, 2);

Assert.AreEqual(10, ticketsRes.PageSize);
Assert.AreEqual(10, ticketsRes.Tickets.Count);
Assert.Greater(ticketsRes.Count, 0);

var nextPage = ticketsRes.NextPage.GetQueryStringDict()
.Where(x => x.Key == "page")
.Select(x => x.Value)
.FirstOrDefault();

Assert.NotNull(nextPage);

Assert.AreEqual("3", nextPage);
}

[Test]
public void CanGetRecentTicketsPaged()
{
var ticketsRes = api.Tickets.GetRecentTickets(5, 2);

Assert.AreEqual(5, ticketsRes.PageSize);
Assert.AreEqual(5, ticketsRes.Tickets.Count);
Assert.Greater(ticketsRes.Count, 0);

var nextPage = ticketsRes.NextPage.GetQueryStringDict()
.Where(x => x.Key == "page")
.Select(x => x.Value)
.FirstOrDefault();

Assert.NotNull(nextPage);

Assert.AreEqual("3", nextPage);
}

[Test]
public void CanTicketsByUserIdPaged()
{
var ticketsRes = api.Tickets.GetTicketsByUserID(Settings.UserId, 5, 2);

Assert.AreEqual(5, ticketsRes.PageSize);
Assert.AreEqual(5, ticketsRes.Tickets.Count);
Assert.Greater(ticketsRes.Count, 0);

var nextPage = ticketsRes.NextPage.GetQueryStringDict()
.Where(x => x.Key == "page")
.Select(x => x.Value)
.FirstOrDefault();

Assert.NotNull(nextPage);

Assert.AreEqual("3", nextPage);
}




[Test]
public void CanGetMultipleTickets()
{
Expand Down Expand Up @@ -251,6 +350,30 @@ public void CanGetTicketComments()
Assert.IsNotEmpty(comments.Comments[1].Body);
}

[Test]
public void CanGetTicketCommentsPaged()
{
const int perPage = 5;
const int page = 2;
var commentsRes = api.Tickets.GetTicketComments(2, perPage, page);

Assert.AreEqual(perPage, commentsRes.Comments.Count);
Assert.AreEqual(page, commentsRes.PageSize);
Assert.AreEqual(page, commentsRes.Page);

Assert.IsNotEmpty(commentsRes.Comments[1].Body);

var nextPageValue = commentsRes.NextPage.GetQueryStringDict()
.Where(x => x.Key == "page")
.Select(x => x.Value)
.FirstOrDefault();

Assert.NotNull(nextPageValue);

Assert.AreEqual((page + 1).ToString(), nextPageValue);
}


[Test]
public void CanCreateTicketWithRequester()
{
Expand Down
18 changes: 18 additions & 0 deletions Tests/ViewTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
using System.Text;
using NUnit.Framework;
using ZendeskApi_v2;
using ZendeskApi_v2.Extensions;
using ZendeskApi_v2.Models.Constants;
using ZendeskApi_v2.Models.Shared;
using ZendeskApi_v2.Models.Tickets;
Expand Down Expand Up @@ -62,6 +63,23 @@ public void CanExecuteViews()
Assert.Greater(res.Columns.Count, 0);
}

[Test]
public void CanExecutePagedView()
{
var res = api.Views.ExecuteView(Settings.ViewId, "", true, 25, 2);

Assert.AreEqual(25, res.Rows.Count);

var nextPage = res.NextPage.GetQueryStringDict()
.Where(x => x.Key == "page")
.Select(x => x.Value)
.FirstOrDefault();

Assert.NotNull(nextPage);

Assert.AreEqual("3", nextPage);
}

[Test]
public void CanPreviewViews()
{
Expand Down
124 changes: 123 additions & 1 deletion ZendeskApi_v2/Core.cs
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
 using System;
using System.IO;
using System.Collections.Generic;
using System.Globalization;
using System.IO;
using System.Linq;
using System.Net;
using System.Text;
Expand Down Expand Up @@ -134,8 +136,69 @@ public RequestResult RunRequest(string resource, string requestMethod, object bo

protected T GenericGet<T>(string resource)
{

return RunRequest<T>(resource, "GET");
}

protected T GenericPagedGet<T>(string resource, int? perPage = null, int? page = null)
{
var parameters = new Dictionary<string, string>();

var paramString = "";
if (perPage.HasValue)
{
parameters.Add("per_page", perPage.Value.ToString(CultureInfo.InvariantCulture));
}

if (page.HasValue)
{
parameters.Add("page", page.Value.ToString(CultureInfo.InvariantCulture));
}

if (parameters.Any())
{
paramString = "?" + string.Join("&", parameters.Select(x => x.Key + "=" + x.Value));
}


return GenericGet<T>(resource + paramString);
}

protected T GenericPagedSortedGet<T>(string resource, int? perPage = null, int? page = null, string sortCol = null, bool? sortAscending = null )
{
var parameters = new Dictionary<string, string>();

var paramString = "";
if (perPage.HasValue)
{
parameters.Add("per_page", perPage.Value.ToString(CultureInfo.InvariantCulture));
}

if (page.HasValue)
{
parameters.Add("page", page.Value.ToString(CultureInfo.InvariantCulture));
}

if (!string.IsNullOrEmpty(sortCol))
{
parameters.Add("sort_by", sortCol);
}

if (sortAscending.HasValue)
{
parameters.Add("sort_order", sortAscending.Value ? "" : "desc");
}

if (parameters.Any())
{
paramString = "?" + string.Join("&", parameters.Select(x => x.Key + "=" + x.Value));
}


return GenericGet<T>(resource + paramString);
}



protected bool GenericDelete(string resource)
{
Expand Down Expand Up @@ -264,6 +327,65 @@ protected async Task<T> GenericGetAsync<T>(string resource)
return await RunRequestAsync<T>(resource, "GET");
}

protected async Task<T> GenericPagedGetAsync<T>(string resource, int? perPage = null, int? page = null)
{
var parameters = new Dictionary<string, string>();

var paramString = "";
if (perPage.HasValue)
{
parameters.Add("per_page", perPage.Value.ToString(CultureInfo.InvariantCulture));
}

if (page.HasValue)
{
parameters.Add("page", page.Value.ToString(CultureInfo.InvariantCulture));
}

if (parameters.Any())
{
paramString = "?" + string.Join("&", parameters.Select(x => x.Key + "=" + x.Value));
}


return await GenericGetAsync<T>(resource + paramString);
}

protected async Task<T> GenericPagedSortedGetAsync<T>(string resource, int? perPage = null, int? page = null, string sortCol = null, bool? sortAscending = null)
{
var parameters = new Dictionary<string, string>();

var paramString = "";
if (perPage.HasValue)
{
parameters.Add("per_page", perPage.Value.ToString(CultureInfo.InvariantCulture));
}

if (page.HasValue)
{
parameters.Add("page", page.Value.ToString(CultureInfo.InvariantCulture));
}

if (!string.IsNullOrEmpty(sortCol))
{
parameters.Add("sort_by", sortCol);
}

if (sortAscending.HasValue)
{
parameters.Add("sort_order", sortAscending.Value ? "" : "desc");
}

if (parameters.Any())
{
paramString = "?" + string.Join("&", parameters.Select(x => x.Key + "=" + x.Value));
}


return await GenericGetAsync<T>(resource + paramString);
}


protected async Task<bool> GenericDeleteAsync(string resource)
{
var res = RunRequestAsync(resource, "DELETE");
Expand Down
12 changes: 11 additions & 1 deletion ZendeskApi_v2/Extensions/RequestExtensions.cs
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,16 @@ public static int GetEpoch(this DateTime date)
{
var t = date - new DateTime(1970, 1, 1);
return (int)t.TotalSeconds;
}
}

public static Dictionary<string, string> GetQueryStringDict(this string url)
{
var queryPart = !url.Contains("?") ? url : url.Split('?')[1];

return (from match in queryPart.Split('&')
where match.Contains('=')
select match.Split('='))
.ToDictionary(x => x.First(), x => x.Last());
}
}
}
Loading