Skip to content

Commit a76a167

Browse files
authored
Merge pull request #36 from antonberezan/report-params
Do not add null parameters when quering Profit&Loss
2 parents 794d9d6 + b352443 commit a76a167

File tree

4 files changed

+86
-77
lines changed

4 files changed

+86
-77
lines changed
Lines changed: 30 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,38 +1,59 @@
11
using System;
2+
using System.Threading.Tasks;
23
using NUnit.Framework;
34

45
namespace CoreTests.Integration.Reports
56
{
67
[TestFixture]
78
public class Find : ApiWrapperTest
89
{
10+
[Test]
11+
public async Task find_all()
12+
{
13+
var reports = await Api.Reports.FindAsync();
14+
Assert.IsNotNull(reports);
15+
}
916

1017
[Test]
11-
public void find_all()
18+
public async Task find_balance_sheet_report()
1219
{
13-
var reports = Api.Reports.FindAsync();
20+
var reports = await Api.Reports.BalanceSheetAsync(DateTime.Now);
1421
Assert.IsNotNull(reports);
1522
}
1623

1724
[Test]
18-
public void find_gst_report()
25+
public async Task find_profit_loss_report()
26+
{
27+
var reports = await Api.Reports.ProfitAndLossAsync(DateTime.Now);
28+
Assert.IsNotNull(reports);
29+
}
30+
31+
[Test]
32+
public async Task find_budget_summary_report()
33+
{
34+
var reports = await Api.Reports.BudgetSummaryAsync(DateTime.Now);
35+
Assert.IsNotNull(reports);
36+
}
37+
38+
[Test]
39+
public async Task find_bank_summary_report()
1940
{
20-
var reports = Api.Reports.FindAsync("BalanceSheet");
41+
var reports = await Api.Reports.BankSummaryAsync();
2142
Assert.IsNotNull(reports);
2243
}
2344

2445
[Test]
25-
public void find_PL_report()
46+
public async Task find_executive_summary_report()
2647
{
27-
var reports = Api.Reports.ProfitAndLossAsync(DateTime.Now.AddDays(-50));
48+
var reports = await Api.Reports.ExecutiveSummaryAsync(DateTime.Now);
2849
Assert.IsNotNull(reports);
2950
}
3051

3152
[Test]
32-
public void find_BudgetSummary_report()
53+
public async Task find_trial_balance_report()
3354
{
34-
var reports = Api.Reports.BudgetSummaryAsync(DateTime.Now.AddDays(-50));
55+
var reports = await Api.Reports.TrailBalanceAsync(DateTime.Now);
3556
Assert.IsNotNull(reports);
3657
}
3758
}
38-
}
59+
}

Xero.Api/Common/Extensions.cs

Lines changed: 20 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,30 +3,46 @@
33

44
namespace Xero.Api.Common
55
{
6-
public static class Extensions
6+
internal static class Extensions
77
{
8-
public static void Add(this NameValueCollection collection, string name, Guid? value)
8+
public static void AddIfNotNull(this NameValueCollection collection, string name, Guid? value)
99
{
1010
if (value.HasValue)
1111
{
1212
collection.Add(name, value.Value.ToString("D"));
1313
}
1414
}
1515

16-
public static void Add(this NameValueCollection collection, string name, int? value)
16+
public static void AddIfNotNull(this NameValueCollection collection, string name, int? value)
1717
{
1818
if (value.HasValue)
1919
{
2020
collection.Add(name, value.Value.ToString("D"));
2121
}
2222
}
2323

24-
public static void Add(this NameValueCollection collection, string name, bool? value)
24+
public static void AddIfNotNull(this NameValueCollection collection, string name, bool? value)
2525
{
2626
if (value.HasValue)
2727
{
2828
collection.Add(name, value.Value.ToString().ToLower());
2929
}
3030
}
31+
32+
public static void AddIfNotNull(this NameValueCollection collection, string name, DateTime? value)
33+
{
34+
if (value.HasValue)
35+
{
36+
collection.Add(name, value.Value.ToString("yyyy-MM-dd"));
37+
}
38+
}
39+
40+
public static void AddIfNotNull(this NameValueCollection collection, string name, string value)
41+
{
42+
if (value != null)
43+
{
44+
collection.Add(name, value.ToLower());
45+
}
46+
}
3147
}
3248
}

Xero.Api/Core/Endpoints/AttachmentsEndpoint.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ public async Task<Attachment> AddOrReplaceAsync(Attachment attachment, Attachmen
5151

5252
if (SupportsOnline(type) && includeOnline)
5353
{
54-
parameters.Add("IncludeOnline", true);
54+
parameters.AddIfNotNull("IncludeOnline", true);
5555
}
5656

5757
var result = await Client.PostAsync<Attachment, AttachmentsResponse>(url, attachment.Content, mimeType, parameters);

Xero.Api/Core/Endpoints/ReportsEndpoint.cs

Lines changed: 35 additions & 63 deletions
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@ public async Task<Report> TenNinetyNineAsync(DateTime? year)
6464
{
6565
var parameters = new NameValueCollection();
6666

67-
parameters.AddYear("reportYear", year);
67+
parameters.AddIfNotNull("reportYear", year?.Year);
6868

6969
var endpoint = AddParameters(parameters);
7070

@@ -94,13 +94,13 @@ public async Task<Report> BalanceSheetAsync(DateTime date, Guid? tracking1 = nul
9494
{
9595
var parameters = new NameValueCollection();
9696

97-
parameters.Add("date", date);
98-
parameters.Add("trackingOptionID1", tracking1);
99-
parameters.Add("trackingOptionID2", tracking2);
100-
parameters.Add("standardLayout", standardLayout);
101-
parameters.Add("paymentsOnly", paymentsOnly);
102-
parameters.Add("timeframe", timeframe);
103-
parameters.Add("periods", periods);
97+
parameters.AddIfNotNull("date", date);
98+
parameters.AddIfNotNull("trackingOptionID1", tracking1);
99+
parameters.AddIfNotNull("trackingOptionID2", tracking2);
100+
parameters.AddIfNotNull("standardLayout", standardLayout);
101+
parameters.AddIfNotNull("paymentsOnly", paymentsOnly);
102+
parameters.AddIfNotNull("timeframe", timeframe);
103+
parameters.AddIfNotNull("periods", periods);
104104

105105
var endpoint = AddParameters(parameters);
106106

@@ -111,9 +111,9 @@ public async Task<Report> BankStatementAsync(Guid account, DateTime? from = null
111111
{
112112
var parameters = new NameValueCollection();
113113

114-
parameters.Add("bankAccountID", account);
115-
parameters.Add("fromDate", from);
116-
parameters.Add("toDate", to);
114+
parameters.AddIfNotNull("bankAccountID", account);
115+
parameters.AddIfNotNull("fromDate", from);
116+
parameters.AddIfNotNull("toDate", to);
117117

118118
var endpoint = AddParameters(parameters);
119119

@@ -124,8 +124,8 @@ public async Task<Report> BankSummaryAsync(DateTime? from = null, DateTime? to =
124124
{
125125
var parameters = new NameValueCollection();
126126

127-
parameters.Add("fromDate", from);
128-
parameters.Add("toDate", to);
127+
parameters.AddIfNotNull("fromDate", from);
128+
parameters.AddIfNotNull("toDate", to);
129129

130130
var endpoint = AddParameters(parameters);
131131

@@ -136,9 +136,9 @@ public async Task<Report> BudgetSummaryAsync(DateTime? date = null, int? periods
136136
{
137137
var parameters = new NameValueCollection();
138138

139-
parameters.Add("date", date);
140-
parameters.Add("periods", periods);
141-
parameters.Add("timeframe", (int?)timeFrame);
139+
parameters.AddIfNotNull("date", date);
140+
parameters.AddIfNotNull("periods", periods);
141+
parameters.AddIfNotNull("timeframe", (int?)timeFrame);
142142

143143
var endpoint = AddParameters(parameters);
144144

@@ -149,7 +149,7 @@ public async Task<Report> ExecutiveSummaryAsync(DateTime? date = null)
149149
{
150150
var parameters = new NameValueCollection();
151151

152-
parameters.Add("date", date);
152+
parameters.AddIfNotNull("date", date);
153153

154154
var endpoint = AddParameters(parameters);
155155

@@ -162,17 +162,17 @@ public async Task<Report> ProfitAndLossAsync(DateTime? date, DateTime? from = nu
162162
{
163163
var parameters = new NameValueCollection();
164164

165-
parameters.Add("date", date);
166-
parameters.Add("fromDate", from);
167-
parameters.Add("toDate", to);
168-
parameters.Add("trackingCategoryID", trackingCategory);
169-
parameters.Add("trackingOptionID", trackingOption);
170-
parameters.Add("trackingCategoryID2", trackingCategory2);
171-
parameters.Add("trackingOptionID2", trackingOption2);
172-
parameters.Add("standardLayout", standardLayout);
173-
parameters.Add("paymentsOnly", paymentsOnly);
174-
parameters.Add("timeframe", timeframe);
175-
parameters.Add("periods", periods);
165+
parameters.AddIfNotNull("date", date);
166+
parameters.AddIfNotNull("fromDate", from);
167+
parameters.AddIfNotNull("toDate", to);
168+
parameters.AddIfNotNull("trackingCategoryID", trackingCategory);
169+
parameters.AddIfNotNull("trackingOptionID", trackingOption);
170+
parameters.AddIfNotNull("trackingCategoryID2", trackingCategory2);
171+
parameters.AddIfNotNull("trackingOptionID2", trackingOption2);
172+
parameters.AddIfNotNull("standardLayout", standardLayout);
173+
parameters.AddIfNotNull("paymentsOnly", paymentsOnly);
174+
parameters.AddIfNotNull("timeframe", timeframe);
175+
parameters.AddIfNotNull("periods", periods);
176176

177177
var endpoint = AddParameters(parameters);
178178

@@ -183,8 +183,8 @@ public async Task<Report> TrailBalanceAsync(DateTime? date = null, bool? payment
183183
{
184184
var parameters = new NameValueCollection();
185185

186-
parameters.Add("date", date);
187-
parameters.Add("paymentsOnly", paymentsOnly);
186+
parameters.AddIfNotNull("date", date);
187+
parameters.AddIfNotNull("paymentsOnly", paymentsOnly);
188188

189189
var endpoint = AddParameters(parameters);
190190

@@ -193,42 +193,14 @@ public async Task<Report> TrailBalanceAsync(DateTime? date = null, bool? payment
193193

194194
private NameValueCollection GetAgedParameters(Guid contact, DateTime? date, DateTime? from, DateTime? to)
195195
{
196-
var parameters = new NameValueCollection
197-
{
198-
{
199-
"contactID", contact.ToString("D")
200-
}
201-
};
196+
var parameters = new NameValueCollection();
202197

203-
parameters.Add("date", date);
204-
parameters.Add("fromDate", from);
205-
parameters.Add("toDate", to);
198+
parameters.AddIfNotNull("contactID", contact);
199+
parameters.AddIfNotNull("date", date);
200+
parameters.AddIfNotNull("fromDate", from);
201+
parameters.AddIfNotNull("toDate", to);
206202

207203
return parameters;
208204
}
209205
}
210-
211-
internal static class Extensions
212-
{
213-
public static string ToReportDate(this DateTime dt)
214-
{
215-
return dt.ToString("yyyy-MM-dd");
216-
}
217-
218-
public static void AddYear(this NameValueCollection collection, string name, DateTime? value)
219-
{
220-
if (value.HasValue)
221-
{
222-
collection.Add(name, value.Value.Year);
223-
}
224-
}
225-
226-
public static void Add(this NameValueCollection collection, string name, DateTime? value)
227-
{
228-
if (value.HasValue)
229-
{
230-
collection.Add(name, value.Value.ToReportDate());
231-
}
232-
}
233-
}
234206
}

0 commit comments

Comments
 (0)