public async Task Search_Call() { //-------------- Arrange ------------- CommonArrangements(); var searchRequest = new Last24HoursRequest(); //-------------- Act ------------- var resp = await last24HoursApplicationService.SearchAsync(searchRequest); //-------------- Assert ------------- A.CallTo(() => last24HoursDataAccess.ListAsync(null, null, null)).WithAnyArguments().MustHaveHappened(); }
private Expression <Func <Last24HoursDTO, bool> > GetQueryFilter(Last24HoursRequest search) { Expression <Func <Last24HoursDTO, bool> > queryFilter = p => true; if (search.AmigoTenantTUserId != null) { queryFilter = queryFilter.And(p => p.AmigoTenantTUserId == search.AmigoTenantTUserId); } if (!string.IsNullOrEmpty(search.TractorNumber)) { queryFilter = queryFilter.And(p => p.TractorNumber.Contains(search.TractorNumber)); } if (!string.IsNullOrEmpty(search.ShipmentIdOrCostCenterCode)) { queryFilter = queryFilter.And(p => p.ChargeNo.Contains(search.ShipmentIdOrCostCenterCode)); } if (!string.IsNullOrEmpty(search.ChassisNumber)) { queryFilter = queryFilter.And(p => p.ChassisNumber.Contains(search.ChassisNumber)); } if (!string.IsNullOrEmpty(search.EquipmentNumber)) { queryFilter = queryFilter.And(p => p.EquipmentNumber.Contains(search.EquipmentNumber)); } //if (!string.IsNullOrEmpty(search.ActivityTypeCode)) //{ // queryFilter = queryFilter.And(p => p.ActivityTypeCode == search.ActivityTypeCode); //} if (search.ActivityTypeCodes != null && search.ActivityTypeCodes.Count() > 0) { queryFilter = queryFilter.And(p => search.ActivityTypeCodes.Contains(p.ActivityTypeCode)); } return(queryFilter); }
public async Task <ResponseDTO <List <Last24HoursDTO> > > SearchAsync(Last24HoursRequest search) { //--------------------------------------------------------------------------------------------- //---------------- Get driver's last 24 hours logs from AmigoTenant DB ------------------- //--------------------------------------------------------------------------------------------- var queryFilter = GetQueryFilter(search); IEnumerable <Last24HoursDTO> eventLogs; Expression <Func <Last24HoursDTO, object> > expressionReportedActivityDate = p => p.ReportedActivityDate; List <OrderExpression <Last24HoursDTO> > orderExpressions = new List <OrderExpression <Last24HoursDTO> >(); orderExpressions.Add(new OrderExpression <Last24HoursDTO>(OrderType.Desc, expressionReportedActivityDate)); var mostRecent = await _last24HoursDataAccess.FirstOrDefaultAsync(queryFilter, orderExpressions.ToArray()); if (mostRecent != null) { var before24Hours = mostRecent.ReportedActivityDate.Value.Subtract(new TimeSpan(24, 0, 0)); eventLogs = await _last24HoursDataAccess.ListAsync(queryFilter.And(w => w.ReportedActivityDate >= before24Hours)); //eventLogs = eventLogs.Select(s => s.); eventLogs.ToList().ForEach(x => x.Username = x.Username.ToUpper()); var myGroup = eventLogs.GroupBy( p => new { p.AmigoTenantTUserId, p.Username, p.Latitude, p.Longitude, p.ChargeNo, p.ChargeType, p.ActivityTypeName, p.ActivityTypeCode, p.TractorNumber, p.FirstName, p.LastName, p.ChassisNumber, p.EquipmentNumber } ); eventLogs = myGroup .Select(el => new Last24HoursDTO { AmigoTenantTUserId = el.Key.AmigoTenantTUserId, Username = el.Key.Username, Latitude = el.Key.Latitude, Longitude = el.Key.Longitude, ChargeNo = el.Key.ChargeNo, ChargeType = el.Key.ChargeType, ActivityTypeName = el.Key.ActivityTypeName, ActivityTypeCode = el.Key.ActivityTypeCode, TractorNumber = el.Key.TractorNumber, FirstName = el.Key.FirstName, LastName = el.Key.LastName, ChassisNumber = el.Key.ChassisNumber, EquipmentNumber = el.Key.EquipmentNumber, ReportedActivityTimeZone = el.Last().ReportedActivityTimeZone, ReportedActivityDate = el.Last().ReportedActivityDate, Product = el.Last().Product, Origin = el.Last().Origin, Destination = el.Last().Destination, ServiceName = el.Last().ServiceName, EquipmentTypeName = el.Last().EquipmentTypeName }).ToList().OrderByDescending(o => o.ReportedActivityDate); } else { List <Last24HoursDTO> res = new List <Last24HoursDTO>(); return(ResponseBuilder.Correct(res)); } //--------------------------------------------------------------------------------------------- //---------------- Get driver's firstName/lastName from Identity server ---------------------- //--------------------------------------------------------------------------------------------- string usernameParameter = "username="******"api/Users/GetUser?" + usernameParameter); if (rspUserDetails.IsSuccessStatusCode) { var userDetailsJson = await rspUserDetails.Content.ReadAsStringAsync().ConfigureAwait(false); var user = JsonConvert.DeserializeObject <ResponseDTO <UserResponse> >(userDetailsJson); //---------------------------------------------------------------------- //---------------------- merge with results list ------------------- //---------------------------------------------------------------------- int i = 0; foreach (var log in eventLogs) { i++; log.FirstName = user.Data.FirstName; log.LastName = user.Data.LastName; log.Index = i; } return(ResponseBuilder.Correct(eventLogs.ToList())); } else { throw new Exception("Amigo.Tenant.Application.Services.Tracking - Last24HoursService - SearchAsync - call to IdentityServerHttpClient api/Users/GetUsersDetails was not successful"); } }
public async Task <ResponseDTO <List <Last24HoursDTO> > > Search([FromUri] Last24HoursRequest search) { var resp = await _last24HoursService.SearchAsync(search); return(resp); }