Example #1
0
        /// <summary>
        /// Call api/converter/convert endpoint to convert a number to its textual representation
        /// </summary>
        /// <param name="detail">A number detail view model</param>
        /// <returns>A processed number detail</returns>
        public NumberDetail ConvertNumebrDetail(NumberDetailViewModel detail)
        {
            NumberDetail        result   = null;
            HttpResponseMessage response = null;

            try
            {
                using (HttpClient client = new HttpClient())
                {
                    ConfigureHttpClient(client);

                    response = client.PostAsync("api/converter/convert", detail, new JsonMediaTypeFormatter()).Result;

                    response.EnsureSuccessStatusCode();

                    result = response.Content.ReadAsAsync <NumberDetail>().Result;
                }
            }
            catch (Exception)
            {
                throw new ApplicationException(response.ReasonPhrase);
            }

            return(result);
        }
        public void ProcessNumber_NegativeNumber_ReturnException()
        {
            var numberDetail = new NumberDetail
            {
                Name   = "Behnam Karimi",
                Number = -100.12m
            };

            var bc = new ConverterComponent();

            var exception = Assert.Throws <ArgumentException>(() => bc.ProccesNumber(numberDetail));

            Assert.AreEqual("The number should be positive.", exception.Message);
        }
Example #3
0
        public ActionResult Index(NumberDetailViewModel numberDetailViewModel)
        {
            try
            {
                ConverterProcess process = new ConverterProcess();

                // calls UI process to converts the number
                NumberDetail result = process.ConvertNumebrDetail(numberDetailViewModel);

                return(View("Result", result));
            }
            catch (Exception)
            {
                ModelState.AddModelError("Number", "Unable to process the request.");
                return(View("Index"));
            }
        }
Example #4
0
        /// <summary>
        /// Processes a number detail and converts the number to its textual representation
        /// </summary>
        /// <param name="numberDetail"></param>
        /// <returns></returns>
        public NumberDetail ProccesNumber(NumberDetail numberDetail)
        {
            if (numberDetail.Number < 0)
            {
                throw new ArgumentException("The number should be positive.");
            }

            ulong integer  = (ulong)Truncate(numberDetail.Number);           // extracts the integer part of the numebr
            ulong decimals = (ulong)((numberDetail.Number - integer) * 100); // extracts the decimals of the number and converts it to integer

            // generates a text for the response
            // format: [integer] dollar(s) and [decimals] cent(s)
            numberDetail.ConvertedNumber =
                ($"{integer.ToText()} dollar{(integer > 1 ? "s" : "")}" +
                 $"{(decimals > 0 ? $" and {decimals.ToText()} cent{(decimals > 1 ? "s" : "")}" : "")}");

            return(numberDetail);
        }
Example #5
0
        public HttpResponseMessage Convert(NumberDetailRequest request)
        {
            try
            {
                // maps the reqeust data contract to entity to be passed to business layer
                NumberDetail numberDetail = Mapper.Map <NumberDetailRequest, NumberDetail>(request);

                ConverterComponent converter = new ConverterComponent();

                NumberDetail result = converter.ProccesNumber(numberDetail);

                // creates a response with 200 status code and passes the result.
                return(Request.CreateResponse(HttpStatusCode.OK, result));
            }
            catch (Exception ex)
            {
                return(Request.CreateResponse(HttpStatusCode.InternalServerError, ex.Message));
            }
        }
        public void ProccesNumberTest(decimal number, string expected)
        {
            var numberDetail = new NumberDetail
            {
                Name   = "Behnam Karimi",
                Number = number
            };

            var bc     = new ConverterComponent();
            var result = bc.ProccesNumber(numberDetail);

            TestContext.Out.WriteLine(numberDetail.ToString());

            Assert.AreNotEqual(numberDetail.Id, Guid.Empty);
            Assert.AreEqual(numberDetail.DateCreated.Date, DateTime.UtcNow.Date);
            Assert.IsFalse(string.IsNullOrWhiteSpace(numberDetail.ConvertedNumber));
            Assert.IsFalse(string.IsNullOrWhiteSpace(numberDetail.Name));
            Assert.AreEqual(expected, numberDetail.ConvertedNumber);
        }