protected override void AdditionalSetup() { _mockUserInteraction = new Mock <ICustomUserInteraction>(); Ioc.RegisterSingleton <ICustomUserInteraction>(_mockUserInteraction.Object); _mockMessenger = new Mock <IMvxMessenger>(); Ioc.RegisterSingleton <IMvxMessenger>(_mockMessenger.Object); _fixture = new Fixture().Customize(new AutoMoqCustomization()); _fixture.OmitProperty("EffectiveDateString"); _fixture.Customize <InstructionSafetyCheckViewModel>(vm => vm.Without(x => x.SafetyCheckItemViewModels)); _fixture.Customize <InstructionSafetyCheckViewModel>(vm => vm.Without(x => x.SafetyProfileVehicle)); _fixture.Customize <SafetyCheckFault>(vm => vm.With(x => x.Status, Core.Enums.SafetyCheckStatus.Passed)); _driver = _fixture.Create <Core.Models.Driver>(); _vehicle = _fixture.Create <Core.Models.Vehicle>(); _trailer = _fixture.Create <Core.Models.Trailer>(); _infoService = _fixture.Create <InfoService>(); _fixture.Inject <IInfoService>(_infoService); _infoService.SetCurrentDriver(_driver); _infoService.SetCurrentVehicle(_vehicle); _safetyCheckService = _fixture.Create <SafetyCheckService>(); _fixture.Inject <ISafetyCheckService>(_safetyCheckService); _mobileData = _fixture.SetUpInstruction(Core.Enums.InstructionType.Collect, false, true, false, false, false, false, true, null); _navData = new NavData <MobileData>() { Data = _mobileData }; _navData.OtherData["UpdatedTrailer"] = _trailer; _safetyCheckService.CurrentVehicleSafetyCheckData = _vehicleSafetyCheckData = _fixture.Create <SafetyCheckData>(); _navData.OtherData["UpdatedTrailerSafetyCheckData"] = _trailerSafetyCheckData = _fixture.Create <SafetyCheckData>(); var mockMobileDataRepo = _fixture.InjectNewMock <IMobileDataRepository>(); mockMobileDataRepo.Setup(mdr => mdr.GetByIDAsync(It.Is <Guid>(i => i == _mobileData.ID))).ReturnsAsync(_mobileData); _mockSafetyProfileRepository = _fixture.InjectNewMock <ISafetyProfileRepository>(); _mockConfigRepository = _fixture.InjectNewMock <IConfigRepository>(); _mockVehicleRepo = _fixture.InjectNewMock <IVehicleRepository>(); _mockVehicleRepo.Setup(vr => vr.GetByIDAsync(_vehicle.ID)).ReturnsAsync(_vehicle); var repositories = _fixture.Create <Repositories>(); _fixture.Inject <IRepositories>(repositories); _mockNavigationService = _fixture.InjectNewMock <INavigationService>(); Ioc.RegisterSingleton <INavigationService>(_mockNavigationService.Object); _safetyProfiles = CreateSafetyProfiles(); }
protected async Task <SafetyCheckData> GenerateSafetyCheckDataAsync(SafetyProfile safetyProfile, Guid driverID, Guid vehicleOrTrailerID, string vehicleOrTrailerRegistration, bool isTrailer) { var faults = safetyProfile.Children .OrderBy(scft => scft.Order) .Select(scft => new Models.SafetyCheckFault { SafetyCheckDataID = safetyProfile.ID, Title = scft.Title, FaultTypeID = scft.ID, IsDiscretionaryQuestion = scft.IsDiscretionaryQuestion, }) .ToList(); var driver = await _repositories.DriverRepository.GetByIDAsync(driverID); // Set up the safety check data to be set in the startup service. // This is the result of the safety check which will be sent to bluesphere // and persisted locally in case the safety check needs to be shown by the driver. var safetyCheckData = new SafetyCheckData { ProfileIntLink = safetyProfile.IntLink, DriverID = driverID, DriverTitle = driver.Title, VehicleID = vehicleOrTrailerID, VehicleRegistration = vehicleOrTrailerRegistration, Faults = faults, IsTrailer = isTrailer }; // Add the safety check item view models foreach (var fault in faults) { this.SafetyCheckItemViewModels.Add(new SafetyCheckItemViewModel(this, _navigationService) { ID = fault.ID, SafetyCheckFault = fault, IsVehicle = !isTrailer, Title = (isTrailer ? "TRL: " : "VEH: ") + fault.Title, IsDiscretionaryQuestion = fault.IsDiscretionaryQuestion, CheckStatus = fault.Status, }); } RaisePropertyChanged(() => this.SafetyCheckItemViewModels); return(safetyCheckData); }
public async Task CommitSafetyCheckDataAsync(bool trailerOnly = false) { // Add the safety checks to the gateway queue var safetyCheckData = this.GetCurrentSafetyCheckData(); var safetyCheckFailed = false; // Store the latest safety check so the driver can display it at a later point if required var latestSafetyCheck = new LatestSafetyCheck { DriverID = _infoService.CurrentDriverID.Value }; if (safetyCheckData.Any()) { var overallStatus = SafetyCheckData.GetOverallStatus(safetyCheckData.Select(scd => scd.GetOverallStatus())); safetyCheckFailed = overallStatus == Enums.SafetyCheckStatus.Failed; // Submit the safety checks to the gateway service var smp = _gpsService.GetSmpData(Enums.ReportReason.SafetyReport); // Don't include milliseconds in the EffectiveDate submitted to BlueSphere var effectiveDateTime = DateTime.Now; effectiveDateTime = effectiveDateTime.AddMilliseconds(-effectiveDateTime.Millisecond); if (this.CurrentVehicleSafetyCheckData != null && this.CurrentVehicleSafetyCheckData.Faults.Any()) { latestSafetyCheck.VehicleSafetyCheck = this.CurrentVehicleSafetyCheckData; if (!trailerOnly) { latestSafetyCheck.VehicleSafetyCheck.EffectiveDate = effectiveDateTime; } } if (this.CurrentTrailerSafetyCheckData != null && this.CurrentTrailerSafetyCheckData.Faults.Any()) { latestSafetyCheck.TrailerSafetyCheck = this.CurrentTrailerSafetyCheckData; latestSafetyCheck.TrailerSafetyCheck.EffectiveDate = effectiveDateTime; } await _repositories.LatestSafetyCheckRepository.SetForDriverAsync(latestSafetyCheck); // Submit the safety check data to BlueSphere var safetyCheckDataToSubmit = new List <SafetyCheckData>(safetyCheckData.Count()); foreach (var scd in safetyCheckData) { if (trailerOnly && !scd.IsTrailer) { continue; } var safetyCheck = Models.SafetyCheckData.ShallowCopy(scd); // Passed safety check items shouldn't be submitted to the gateway service, only Fails and Discretionary Passes. safetyCheck.Faults = scd.Faults.Where(scf => scf.Status != Enums.SafetyCheckStatus.Passed).ToList(); // Add the SMP, mileage and effective-date to the safety check safetyCheck.SMP = smp; safetyCheck.Mileage = _infoService.Mileage; safetyCheck.EffectiveDate = effectiveDateTime; safetyCheckDataToSubmit.Add(safetyCheck); } if (safetyCheckDataToSubmit.Any()) { var actions = safetyCheckDataToSubmit.Select(scd => new Models.GatewayServiceRequest.Action <Models.SafetyCheckData> { Command = "fwSetSafetyCheckData", Data = scd }); await _gatewayQueuedService.AddToQueueAsync(actions); } } else { await _repositories.LatestSafetyCheckRepository.SetForDriverAsync(latestSafetyCheck); } }