public async Task<PCalcResultInfo> Calculate(EnvironmentInfo environment, ProductDescriptionInfo productDescription, ActionResultInfo actionResult)
 {
     var result = new PCalcResultInfo();
     result.ProductDescription = productDescription;
     DescriptionInfo desc = GetRandomDescription();
     result.QueryType = GetQueryType(desc);
     result.QueryDescription = desc.ToTransferDescription();
     return result;
 }
 public async Task<PCalcResultInfo> StartCalculation(EnvironmentInfo environment, WeightInfo weight)
 {
     var result = new PCalcResultInfo();
     result.ProductDescription = new ProductDescriptionInfo()
                                     {
                                         Postage = new PostageInfo() { CurrencySymbol = "$", PostageDecimals = 2, PostageValue = 200 },
                                         ProductCode = 1,
                                         ProductId = 34,
                                         RateVersion = 2007654,
                                         ScaleMode = EScaleMode.NO_SCALE,
                                         State = EProductDescriptionState.Incomplete,
                                         Weight = weight,
                                         WeightClass = 1
                                     };
     DescriptionInfo desc = GetRandomDescription();
     result.QueryType = GetQueryType(desc);
     result.QueryDescription = desc.ToTransferDescription();
     return result;
 }
 private bool PcalcResultIsValid(PCalcResultInfo info)
 {
     return null != info && 
         null != info.QueryDescription && 
         null != info.ProductDescription;
 }
 private void AddViewData(PCalcResultInfo result, EnvironmentInfo environment)
 {
     ViewData.Add(PRODUCT_DESCRIPTION, result?.ProductDescription);
     ViewData.Add(WEIGHT, result?.ProductDescription?.Weight);
     ViewData.Add(POSTAGE, result?.ProductDescription?.Postage);
     ViewData.Add(REQUEST_DESCRIPTION, result?.DedicatedDescription);
     ViewData.Add(ENVIRONMENT, environment);
 }
 private void AddOrUpdateTempData(PCalcResultInfo result, EnvironmentInfo environment)
 {
     if (TempData.ContainsKey(PCALC_RESULT))
     {
         TempData[PCALC_RESULT] = result;
     }
     else
     {
         TempData.Add(PCALC_RESULT, result);
     }
     if (TempData.ContainsKey(ENVIRONMENT))
     {
         TempData[ENVIRONMENT] = environment;
     }
     else
     {
         TempData.Add(ENVIRONMENT, environment);
     }
 }
 private void Pass(PCalcResultInfo info)
 {
     m_Watch.Stop();
     var context = TestContext.CurrentContext;
     if (context.Result.State == TestState.Inconclusive)
     {
         Assert.Pass($"{m_Watch.Elapsed.TotalMilliseconds} ms");
         //Assert.Pass($"Elapsed runtime {m_Watch.Elapsed.TotalMilliseconds} ms, Max expected runtime {m_ExpectedMaximum.TotalMilliseconds} ms. Product: { string.Join(", ",info.ProductDescription.ReadyModeSelection)}");
     }
 }
 private IHttpActionResult CreateProductCalculationResponse(PCalcResultInfo result)
 {
     if (null == result)
     {
         return BadRequest("Error in product calculation module");
     }
     return Ok(result);
 }
 private void HandleCurrencySymbol(PCalcResultInfo result, EnvironmentInfo environment)
 {
     if(null != result && null != result.ProductDescription && 
         null != result.ProductDescription.Postage && null != environment )
     {
         m_ScenarioRunner.Run(() =>
         {
             CultureInfo info = new CultureInfo(environment.Culture);
             result.ProductDescription.Postage.CurrencySymbol = info.NumberFormat.CurrencySymbol;
             result.ProductDescription.Postage.CurrencyDecimalSeparator = info.NumberFormat.CurrencyDecimalSeparator;
         });
     }
 }