public PrenotificationQuantityExceededRuleTests() { this.repo = A.Fake <INotificationMovementsSummaryRepository>(); int intendedQuantity = 100; int quantityReceived = 80; A.CallTo(() => repo.GetById(notificationId)) .Returns(NotificationMovementsSummary.Load(notificationId, string.Empty, Core.Shared.NotificationType.Disposal, 10, 5, 10, 5, intendedQuantity, quantityReceived, Core.Shared.ShipmentQuantityUnits.Kilograms, Core.FinancialGuarantee.FinancialGuaranteeStatus.Approved, Core.Notification.UKCompetentAuthority.England, Core.NotificationAssessment.NotificationStatus.Consented, new Domain.ShipmentQuantity(1, Core.Shared.ShipmentQuantityUnits.Kilograms))); }
public PrenotificationOnlyNewShipmentsRuleTests() { this.repo = A.Fake <INotificationMovementsSummaryRepository>(); var maxShipments = 10; var currentShipments = 3; var movementSummary = NotificationMovementsSummary.Load(notificationId, string.Empty, Core.Shared.NotificationType.Disposal, maxShipments, currentShipments, 5, 3, 100, 10, Core.Shared.ShipmentQuantityUnits.Kilograms, Core.FinancialGuarantee.FinancialGuaranteeStatus.Approved, Core.Notification.UKCompetentAuthority.England, Core.NotificationAssessment.NotificationStatus.Consented, new Domain.ShipmentQuantity(1, Core.Shared.ShipmentQuantityUnits.Kilograms)); A.CallTo(() => repo.GetById(notificationId)).Returns(movementSummary); rule = new PrenotificationInvalidShipmentNumberRule(repo); }
public async Task <NotificationMovementsSummary> GetById(Guid notificationId) { await notificationAuthorization.EnsureAccessAsync(notificationId); var summaryData = await context.NotificationApplications .GroupJoin( context.ShipmentInfos, notification => notification.Id, shipment => shipment.NotificationId, (notification, shipments) => new { Notification = notification, Shipment = shipments.FirstOrDefault() }) .Join(context.NotificationAssessments, x => x.Notification.Id, na => na.NotificationApplicationId, (x, na) => new { x.Notification, x.Shipment, NotificationAssessment = na }) .Select(x => new { NotificationId = x.Notification.Id, x.Notification.NotificationType, x.Notification.NotificationNumber, NumberOfShipments = x.Shipment == null ? 0 : x.Shipment.NumberOfShipments, Quantity = x.Shipment == null ? 0 : x.Shipment.Quantity, Units = x.Shipment == null ? ShipmentQuantityUnits.Tonnes : x.Shipment.Units, NotificationStatus = x.NotificationAssessment.Status, x.Notification.CompetentAuthority }) .SingleAsync(x => x.NotificationId == notificationId); var totalMovements = await context.Movements .Where(m => m.NotificationId == notificationId) .CountAsync(); var currentActiveLoads = await context.Movements .Where(m => m.NotificationId == notificationId && (m.Status == MovementStatus.Submitted || m.Status == MovementStatus.Received || m.Status == MovementStatus.New || m.Status == MovementStatus.Captured || m.Status == MovementStatus.PartiallyRejected) && m.Date <= SystemTime.UtcNow) .CountAsync(); var financialGuaranteeCollection = await context.FinancialGuarantees.SingleAsync(x => x.NotificationId == notificationId); var financialGuarantee = financialGuaranteeCollection.GetCurrentApprovedFinancialGuarantee() ?? financialGuaranteeCollection.GetLatestFinancialGuarantee(); var averageShipmentInfo = await quantity.AveragePerShipment(notificationId, summaryData.NumberOfShipments); return(NotificationMovementsSummary.Load(summaryData.NotificationId, summaryData.NotificationNumber, summaryData.NotificationType, summaryData.NumberOfShipments, totalMovements, financialGuarantee == null ? 0 : financialGuarantee.ActiveLoadsPermitted.GetValueOrDefault(), currentActiveLoads, summaryData.Quantity, (await quantity.Received(notificationId)).Quantity, summaryData.Units, financialGuarantee == null ? FinancialGuaranteeStatus.AwaitingApplication : financialGuarantee.Status, summaryData.CompetentAuthority, summaryData.NotificationStatus, averageShipmentInfo)); }