• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

Shane32 / PostGrid / 13879862222

16 Mar 2025 04:23AM UTC coverage: 18.172%. First build
13879862222

Pull #1

github

web-flow
Merge 5d9b1a049 into 945380ab5
Pull Request #1: Update tests

38 of 266 branches covered (14.29%)

Branch coverage included in aggregate %.

1 of 9 new or added lines in 3 files covered. (11.11%)

137 of 697 relevant lines covered (19.66%)

0.35 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

0.0
/src/Project/PostGridConnection.Checks.cs
1
using System.Net.Http.Headers;
2
using System.Web;
3
using Shane32.PostGrid.Checks;
4

5
namespace Shane32.PostGrid;
6

7
public partial class PostGridConnection
8
{
9
    /// <inheritdoc />
10
    public async Task<CheckResponse> ExecuteAsync(CreateRequest request, CancellationToken cancellationToken = default)
11
    {
×
12
        if (request == null)
×
13
            throw new ArgumentNullException(nameof(request));
×
14

15
        if (request.LetterPDF != null && request.LetterHTML != null)
×
16
            throw new ArgumentException("Only one of LetterPDF or LetterHTML can be provided", nameof(request));
×
17

18
        // Handle the request based on whether we're using LetterPDF or not
19
        if (request.LetterPDF != null) {
×
20
            // Use multipart/form-data for LetterPDF
21
            var content = new MultipartFormDataContent {
×
22
                // Required fields
×
23
                { new StringContent(request.To), "to" },
×
24
                { new StringContent(request.From), "from" },
×
25
                { new StringContent(request.BankAccount), "bankAccount" },
×
26
                { new StringContent(request.Amount.ToString()), "amount" },
×
27
                { new StringContent(request.Number.ToString()), "number" }
×
28
            };
×
29

30
            // Optional fields
31
            if (request.RedirectTo != null)
×
32
                content.Add(new StringContent(request.RedirectTo), "redirectTo");
×
33

34
            if (request.Memo != null)
×
35
                content.Add(new StringContent(request.Memo), "memo");
×
36

37
            if (request.Message != null)
×
38
                content.Add(new StringContent(request.Message), "message");
×
39

40
            if (request.Logo != null)
×
41
                content.Add(new StringContent(request.Logo), "logo");
×
42

43
            if (request.ExtraService != null)
×
44
                content.Add(new StringContent(request.ExtraService), "extraService");
×
45

46
            if (request.CurrencyCode != null)
×
47
                content.Add(new StringContent(request.CurrencyCode), "currencyCode");
×
48

49
            if (request.Express.HasValue)
×
50
                content.Add(new StringContent(request.Express.Value.ToString().ToLowerInvariant()), "express");
×
51

52
            if (request.SendDate.HasValue)
×
53
                content.Add(new StringContent(request.SendDate.Value.ToString("o")), "sendDate");
×
54

55
            if (request.MailingClass != null)
×
56
                content.Add(new StringContent(request.MailingClass), "mailingClass");
×
57

58
            if (request.Description != null)
×
59
                content.Add(new StringContent(request.Description), "description");
×
60

61
            if (request.Size != null)
×
62
                content.Add(new StringContent(request.Size), "size");
×
63

64
            // Add the PDF content
65
            var pdfContent = new ByteArrayContent(request.LetterPDF);
×
66
            pdfContent.Headers.ContentType = new MediaTypeHeaderValue(request.LetterPDFContentType ?? "application/pdf");
×
67
            content.Add(pdfContent, "letterPDF");
×
68

69
            // Handle merge variables
70
            if (request.MergeVariables != null) {
×
71
                foreach (var item in request.MergeVariables) {
×
72
                    content.Add(new StringContent(item.Value), $"mergeVariables[{item.Key}]");
×
73
                }
×
74
            }
×
75

76
            // Handle metadata
77
            if (request.Metadata != null) {
×
78
                foreach (var item in request.Metadata) {
×
79
                    content.Add(new StringContent(item.Value), $"metadata[{item.Key}]");
×
80
                }
×
81
            }
×
82

83
            // Create a request factory function
84
            Func<HttpRequestMessage> requestFactory = () => {
×
85
                var newRequest = new HttpRequestMessage(HttpMethod.Post, $"{_options.BaseUrl}/cheques");
×
86
                newRequest.Content = content;
×
NEW
87

×
88
                // Add idempotency key header
×
89
                newRequest.Headers.Add("Idempotency-Key", request.IdempotencyKey.ToString());
×
NEW
90

×
91
                return newRequest;
×
92
            };
×
93

94
            // Use the generic SendRequestAsync method with JsonTypeInfo
95
            return await SendRequestAsync(requestFactory, PostGridJsonSerializerContext.Default.CheckResponse, cancellationToken);
×
96
        } else {
×
97
            // Use form-urlencoded for regular requests or LetterHTML
98
            var formData = new List<KeyValuePair<string, string>> {
×
99
                // Required fields
×
100
                new KeyValuePair<string, string>("to", request.To),
×
101
                new KeyValuePair<string, string>("from", request.From),
×
102
                new KeyValuePair<string, string>("bankAccount", request.BankAccount),
×
103
                new KeyValuePair<string, string>("amount", request.Amount.ToString()),
×
104
                new KeyValuePair<string, string>("number", request.Number.ToString())
×
105
            };
×
106

107
            // Optional fields
108
            if (request.RedirectTo != null)
×
109
                formData.Add(new KeyValuePair<string, string>("redirectTo", request.RedirectTo));
×
110

111
            if (request.Memo != null)
×
112
                formData.Add(new KeyValuePair<string, string>("memo", request.Memo));
×
113

114
            if (request.Message != null)
×
115
                formData.Add(new KeyValuePair<string, string>("message", request.Message));
×
116

117
            if (request.Logo != null)
×
118
                formData.Add(new KeyValuePair<string, string>("logo", request.Logo));
×
119

120
            if (request.ExtraService != null)
×
121
                formData.Add(new KeyValuePair<string, string>("extraService", request.ExtraService));
×
122

123
            if (request.CurrencyCode != null)
×
124
                formData.Add(new KeyValuePair<string, string>("currencyCode", request.CurrencyCode));
×
125

126
            if (request.Express.HasValue)
×
127
                formData.Add(new KeyValuePair<string, string>("express", request.Express.Value.ToString().ToLowerInvariant()));
×
128

129
            if (request.SendDate.HasValue)
×
130
                formData.Add(new KeyValuePair<string, string>("sendDate", request.SendDate.Value.ToString("o")));
×
131

132
            if (request.MailingClass != null)
×
133
                formData.Add(new KeyValuePair<string, string>("mailingClass", request.MailingClass));
×
134

135
            if (request.Description != null)
×
136
                formData.Add(new KeyValuePair<string, string>("description", request.Description));
×
137

138
            if (request.Size != null)
×
139
                formData.Add(new KeyValuePair<string, string>("size", request.Size));
×
140

141
            // Add letterHTML if provided
142
            if (request.LetterHTML != null)
×
143
                formData.Add(new KeyValuePair<string, string>("letterHTML", request.LetterHTML));
×
144

145
            // Handle merge variables
146
            if (request.MergeVariables != null) {
×
147
                foreach (var item in request.MergeVariables) {
×
148
                    formData.Add(new KeyValuePair<string, string>($"mergeVariables[{item.Key}]", item.Value));
×
149
                }
×
150
            }
×
151

152
            // Handle metadata
153
            if (request.Metadata != null) {
×
154
                foreach (var item in request.Metadata) {
×
155
                    formData.Add(new KeyValuePair<string, string>($"metadata[{item.Key}]", item.Value));
×
156
                }
×
157
            }
×
158

159
            // Create a request factory function
160
            Func<HttpRequestMessage> requestFactory = () => {
×
161
                var newRequest = new HttpRequestMessage(HttpMethod.Post, $"{_options.BaseUrl}/cheques");
×
162
                newRequest.Content = new FormUrlEncodedContent(formData);
×
NEW
163

×
164
                // Add idempotency key header
×
165
                newRequest.Headers.Add("Idempotency-Key", request.IdempotencyKey.ToString());
×
NEW
166

×
167
                return newRequest;
×
168
            };
×
169

170
            // Use the generic SendRequestAsync method with JsonTypeInfo
171
            return await SendRequestAsync(requestFactory, PostGridJsonSerializerContext.Default.CheckResponse, cancellationToken);
×
172
        }
173
    }
×
174

175
    /// <inheritdoc />
176
    public async Task<CheckResponse> ExecuteAsync(GetRequest request, CancellationToken cancellationToken = default)
177
    {
×
178
        if (request == null)
×
179
            throw new ArgumentNullException(nameof(request));
×
180

181
        if (string.IsNullOrEmpty(request.Id))
×
182
            throw new ArgumentException("Cheque ID cannot be null or empty", nameof(request));
×
183

184
        // Create a request factory function
185
        Func<HttpRequestMessage> requestFactory =
×
186
            () => new HttpRequestMessage(HttpMethod.Get, $"{_options.BaseUrl}/cheques/{request.Id}");
×
187

188
        // Use the generic SendRequestAsync method with JsonTypeInfo
189
        return await SendRequestAsync(requestFactory, PostGridJsonSerializerContext.Default.CheckResponse, cancellationToken);
×
190
    }
×
191

192
    /// <inheritdoc />
193
    public async Task<CheckResponse> ExecuteAsync(DeleteRequest request, CancellationToken cancellationToken = default)
194
    {
×
195
        if (request == null)
×
196
            throw new ArgumentNullException(nameof(request));
×
197

198
        if (string.IsNullOrEmpty(request.Id))
×
199
            throw new ArgumentException("Cheque ID cannot be null or empty", nameof(request));
×
200

201
        // Create a request factory function
202
        Func<HttpRequestMessage> requestFactory =
×
203
            () => new HttpRequestMessage(HttpMethod.Delete, $"{_options.BaseUrl}/cheques/{request.Id}");
×
204

205
        // Use the generic SendRequestAsync method with JsonTypeInfo
206
        return await SendRequestAsync(requestFactory, PostGridJsonSerializerContext.Default.CheckResponse, cancellationToken);
×
207
    }
×
208

209
    /// <inheritdoc />
210
    public async Task<CheckResponse> ExecuteAsync(CancelRequest request, CancellationToken cancellationToken = default)
211
    {
×
212
        if (request == null)
×
213
            throw new ArgumentNullException(nameof(request));
×
214

215
        if (string.IsNullOrEmpty(request.Id))
×
216
            throw new ArgumentException("Cheque ID cannot be null or empty", nameof(request));
×
217

218
        // Convert the request object to form data
219
        var formData = new List<KeyValuePair<string, string>>();
×
220

221
        // Add the note if provided
222
        if (request.Note != null)
×
223
            formData.Add(new KeyValuePair<string, string>("note", request.Note));
×
224

225
        // Create a request factory function
226
        Func<HttpRequestMessage> requestFactory = () => {
×
227
            var newRequest = new HttpRequestMessage(HttpMethod.Post, $"{_options.BaseUrl}/cheques/{request.Id}/cancellation");
×
228
            newRequest.Content = new FormUrlEncodedContent(formData);
×
229
            return newRequest;
×
230
        };
×
231

232
        // Use the generic SendRequestAsync method with JsonTypeInfo
233
        return await SendRequestAsync(requestFactory, PostGridJsonSerializerContext.Default.CheckResponse, cancellationToken);
×
234
    }
×
235

236
    /// <inheritdoc />
237
    public async Task<ListResponse<CheckResponse>> ExecuteAsync(ListRequest request, CancellationToken cancellationToken = default)
238
    {
×
239
        if (request == null)
×
240
            throw new ArgumentNullException(nameof(request));
×
241

242
        // Build the query string
243
        var queryParams = new List<string>();
×
244

245
        if (request.Skip.HasValue)
×
246
            queryParams.Add($"skip={request.Skip.Value}");
×
247

248
        if (request.Limit.HasValue)
×
249
            queryParams.Add($"limit={request.Limit.Value}");
×
250

251
        var queryString = queryParams.Count > 0 ? $"?{string.Join("&", queryParams)}" : "";
×
252

253
        // Create a request factory function
254
        Func<HttpRequestMessage> requestFactory =
×
255
            () => new HttpRequestMessage(HttpMethod.Get, $"{_options.BaseUrl}/cheques{queryString}");
×
256

257
        // Use the generic SendRequestAsync method with JsonTypeInfo
258
        return await SendRequestAsync(requestFactory, PostGridJsonSerializerContext.Default.ListResponseCheckResponse, cancellationToken);
×
259
    }
×
260
}
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2025 Coveralls, Inc