public void GenerateInsertStatementTest()
        {
            StatementParameters testParamaters = new StatementParameters();

            testParamaters.Add("testkey1", "test val 1");
            testParamaters.Add("testkey2", 33);
            testParamaters.Add("testkey3", "testval3");

            var result = testParamaters.GenerateInsertStatement("testTable");

            Assert.IsNotNull(result);

            Assert.AreEqual("INSERT INTO testTable (testkey1,testkey2,testkey3) VALUES(@testkey1,@testkey2,@testkey3)", result);
        }
Esempio n. 2
0
        /// <summary>
        /// Downloads either a 'application/pdf' or 'text/csv' statement
        /// </summary>
        /// <param name="statementParameters">The statement parameters.</param>
        /// <returns>Task&lt;Stream&gt;.</returns>
        /// <exception cref="StarlingBank.Exceptions.APIException">Failed to parse the response: " + ex.Message</exception>
        /// <exception cref="IBaseServices baseServices)">Failed to parse the response: " + ex.Message</exception>
        /// <return>Returns the Stream response from the API call</return>
        public async Task <Stream> DownloadStatementAsync(StatementParameters statementParameters)
        {
            //prepare query string for API call
            var queryBuilder = new StringBuilder();

            queryBuilder.Append("api/v2/accounts/{accountUid}/statement/download");
            //process optional template parameters
            APIHelper.AppendUrlWithTemplateParameters(queryBuilder, new Dictionary <string, object> {
                { "accountUid", statementParameters.AccountUid }
            });
            //process optional query parameters
            APIHelper.AppendUrlWithQueryParameters(queryBuilder, new Dictionary <string, object> {
                { "yearMonth", statementParameters.Year + "-" + statementParameters.Month }
            }, _arrayDeserializationFormat);
            //validate and preprocess url
            var queryUrl = APIHelper.GetUrl(statementParameters.StarlingClient, queryBuilder);
            //append request with appropriate headers and parameters
            Dictionary <string, string> headers = APIHelper.GetRequestHeaders(statementParameters.StarlingClient, true);
            var request = new HttpRequestMessage(HttpMethod.Get, queryUrl);

            foreach (KeyValuePair <string, string> header in headers)
            {
                request.Headers.Add(header.Key, header.Value);
            }
            request.Headers.Add("accept", statementParameters.StatementType == StatementType.CSV ? "text/csv" : "application/pdf");
            //prepare the API call request to fetch the response
            HttpClient          client   = _clientFactory.CreateClient("StarlingBank");
            HttpResponseMessage response = await client.SendAsync(request);

            //handle errors defined at the API level
            await _baseServices.ValidateResponse(request, response);

            try
            {
                return(await response.Content.ReadAsStreamAsync());
            }
            catch (Exception ex)
            {
                throw new APIException("Failed to parse the response: " + ex.Message, request, response);
            }
        }