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

Shane32 / PostGrid / 13884143274

16 Mar 2025 02:03PM UTC coverage: 25.333% (+6.3%) from 19.013%
13884143274

Pull #2

github

web-flow
Merge de0a5a6d0 into 088e5f792
Pull Request #2: Test all contact methods & fix delete

50 of 266 branches covered (18.8%)

Branch coverage included in aggregate %.

7 of 11 new or added lines in 7 files covered. (63.64%)

2 existing lines in 1 file now uncovered.

197 of 709 relevant lines covered (27.79%)

0.83 hits per line

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

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

5
namespace Shane32.PostGrid;
6

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

15
        if (request.SignatureImage == null && request.SignatureText == null)
×
16
            throw new ArgumentException("Either SignatureImage or SignatureText must be provided", nameof(request));
×
17

18
        // Handle the request based on whether we're using SignatureImage or SignatureText
19
        if (request.SignatureImage != null) {
×
20
            // Use multipart/form-data for SignatureImage
21
            var content = new MultipartFormDataContent {
×
22
                // Add all the form fields
×
23
                { new StringContent(request.BankName), "bankName" },
×
24
                { new StringContent(request.AccountNumber), "accountNumber" },
×
25
                { new StringContent(request.RoutingNumber), "routingNumber" },
×
26
                { new StringContent(request.BankCountryCode), "bankCountryCode" }
×
27
            };
×
28

29
            // Add the signature image
30
            var imageContent = new ByteArrayContent(request.SignatureImage);
×
31
            imageContent.Headers.ContentType = new MediaTypeHeaderValue(request.SignatureImageContentType ?? "image/png");
×
32
            content.Add(imageContent, "signatureImage");
×
33

34
            // Add optional fields
35
            if (request.BankPrimaryLine != null)
×
36
                content.Add(new StringContent(request.BankPrimaryLine), "bankPrimaryLine");
×
37

38
            if (request.BankSecondaryLine != null)
×
39
                content.Add(new StringContent(request.BankSecondaryLine), "bankSecondaryLine");
×
40

41
            if (request.Description != null)
×
42
                content.Add(new StringContent(request.Description), "description");
×
43

44
            // Handle metadata
45
            if (request.Metadata != null) {
×
46
                foreach (var item in request.Metadata) {
×
47
                    content.Add(new StringContent(item.Value), $"metadata[{item.Key}]");
×
48
                }
×
49
            }
×
50

51
            // Create a request factory function
52
            Func<HttpRequestMessage> requestFactory = () => {
×
53
                var newRequest = new HttpRequestMessage(HttpMethod.Post, $"{_options.BaseUrl}/bank_accounts");
×
54
                newRequest.Content = content;
×
55
                return newRequest;
×
56
            };
×
57

58
            // Use the generic SendRequestAsync method with JsonTypeInfo
59
            return await SendRequestAsync(requestFactory, PostGridJsonSerializerContext.Default.BankAccountResponse, cancellationToken);
×
60
        } else {
×
61
            // Use form-urlencoded for SignatureText
62
            var formData = new List<KeyValuePair<string, string>> {
×
63
                // Add all the form fields
×
64
                new KeyValuePair<string, string>("bankName", request.BankName),
×
65
                new KeyValuePair<string, string>("accountNumber", request.AccountNumber),
×
66
                new KeyValuePair<string, string>("routingNumber", request.RoutingNumber),
×
67
                new KeyValuePair<string, string>("bankCountryCode", request.BankCountryCode),
×
68
                new KeyValuePair<string, string>("signatureText", request.SignatureText!)
×
69
            };
×
70

71
            // Add optional fields
72
            if (request.BankPrimaryLine != null)
×
73
                formData.Add(new KeyValuePair<string, string>("bankPrimaryLine", request.BankPrimaryLine));
×
74

75
            if (request.BankSecondaryLine != null)
×
76
                formData.Add(new KeyValuePair<string, string>("bankSecondaryLine", request.BankSecondaryLine));
×
77

78
            if (request.Description != null)
×
79
                formData.Add(new KeyValuePair<string, string>("description", request.Description));
×
80

81
            // Handle metadata
82
            if (request.Metadata != null) {
×
83
                foreach (var item in request.Metadata) {
×
84
                    formData.Add(new KeyValuePair<string, string>($"metadata[{item.Key}]", item.Value));
×
85
                }
×
86
            }
×
87

88
            // Create a request factory function
89
            Func<HttpRequestMessage> requestFactory = () => {
×
90
                var newRequest = new HttpRequestMessage(HttpMethod.Post, $"{_options.BaseUrl}/bank_accounts");
×
91
                newRequest.Content = new FormUrlEncodedContent(formData);
×
92
                return newRequest;
×
93
            };
×
94

95
            // Use the generic SendRequestAsync method with JsonTypeInfo
96
            return await SendRequestAsync(requestFactory, PostGridJsonSerializerContext.Default.BankAccountResponse, cancellationToken);
×
97
        }
98
    }
×
99

100
    /// <inheritdoc />
101
    public async Task<BankAccountResponse> ExecuteAsync(GetRequest request, CancellationToken cancellationToken = default)
102
    {
×
103
        if (request == null)
×
104
            throw new ArgumentNullException(nameof(request));
×
105

106
        if (string.IsNullOrEmpty(request.Id))
×
107
            throw new ArgumentException("Bank account ID cannot be null or empty", nameof(request));
×
108

109
        // Create a request factory function
110
        Func<HttpRequestMessage> requestFactory =
×
111
            () => new HttpRequestMessage(HttpMethod.Get, $"{_options.BaseUrl}/bank_accounts/{request.Id}");
×
112

113
        // Use the generic SendRequestAsync method with JsonTypeInfo
114
        return await SendRequestAsync(requestFactory, PostGridJsonSerializerContext.Default.BankAccountResponse, cancellationToken);
×
115
    }
×
116

117
    /// <inheritdoc />
118
    public async Task ExecuteAsync(DeleteRequest request, CancellationToken cancellationToken = default)
119
    {
×
120
        if (request == null)
×
121
            throw new ArgumentNullException(nameof(request));
×
122

123
        if (string.IsNullOrEmpty(request.Id))
×
124
            throw new ArgumentException("Bank account ID cannot be null or empty", nameof(request));
×
125

126
        // Create a request factory function
127
        Func<HttpRequestMessage> requestFactory =
×
128
            () => new HttpRequestMessage(HttpMethod.Delete, $"{_options.BaseUrl}/bank_accounts/{request.Id}");
×
129

130
        // Use the generic SendRequestAsync method with JsonTypeInfo
NEW
131
        await SendRequestAsync(requestFactory, PostGridJsonSerializerContext.Default.DeleteResponse, cancellationToken);
×
132
    }
×
133

134
    /// <inheritdoc />
135
    public async Task<ListResponse<BankAccountResponse>> ExecuteAsync(ListRequest request, CancellationToken cancellationToken = default)
136
    {
×
137
        if (request == null)
×
138
            throw new ArgumentNullException(nameof(request));
×
139

140
        // Build the query string
141
        var queryParams = new List<string>();
×
142

143
        if (request.Skip.HasValue)
×
144
            queryParams.Add($"skip={request.Skip.Value}");
×
145

146
        if (request.Limit.HasValue)
×
147
            queryParams.Add($"limit={request.Limit.Value}");
×
148

149
        if (!string.IsNullOrEmpty(request.Search))
×
150
            queryParams.Add($"search={HttpUtility.UrlEncode(request.Search)}");
×
151

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

154
        // Create a request factory function
155
        Func<HttpRequestMessage> requestFactory =
×
156
            () => new HttpRequestMessage(HttpMethod.Get, $"{_options.BaseUrl}/bank_accounts{queryString}");
×
157

158
        // Use the generic SendRequestAsync method with JsonTypeInfo
159
        return await SendRequestAsync(requestFactory, PostGridJsonSerializerContext.Default.ListResponseBankAccountResponse, cancellationToken);
×
160
    }
×
161
}
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

© 2026 Coveralls, Inc