public static LotQualityStatus PreserveQualityStatus(LotQualityStatus currentStatus, LotQualityStatus determinedStatus) { switch (determinedStatus) { case LotQualityStatus.Pending: switch (currentStatus) { case LotQualityStatus.Released: case LotQualityStatus.Contaminated: return(LotQualityStatus.Pending); } break; case LotQualityStatus.Released: switch (currentStatus) { case LotQualityStatus.Pending: case LotQualityStatus.Contaminated: return(LotQualityStatus.Released); } break; case LotQualityStatus.Contaminated: switch (currentStatus) { case LotQualityStatus.Pending: case LotQualityStatus.Released: return(LotQualityStatus.Contaminated); } break; } return(currentStatus); }
public static IEnumerable <LotQualityStatus> GetValidLotQualityStatuses(LotQualityStatus currentLotQualityStatus, bool productSpecComplete, bool unresolvedActionableDefects, bool unresolvedContaminationDefects) { var validStatuses = new List <LotQualityStatus> { currentLotQualityStatus, LotQualityStatus.Rejected }; if (!unresolvedContaminationDefects) { validStatuses.Add(LotQualityStatus.Released); if (unresolvedActionableDefects) { validStatuses.Add(LotQualityStatus.Contaminated); } if (unresolvedActionableDefects || !productSpecComplete) { validStatuses.Add(LotQualityStatus.Pending); } } else { validStatuses.Add(LotQualityStatus.Contaminated); } return(validStatuses.Distinct().OrderBy(s => s).ToList()); }
public void Returns200OnSuccess() { // arrange MockLotService.Setup(m => m.SetLotQualityStatus(It.IsAny <ISetLotStatusParameters>())) .Returns(new SuccessResult <ILotStatInfoReturn>()); const string lotKey = "12345"; const LotQualityStatus expectedStatus = LotQualityStatus.Released; var dto = new SetLotStatusDto { Status = expectedStatus }; // act var response = LotsControler.SetStatus(lotKey, dto); // assert Assert.AreEqual(HttpStatusCode.OK, response.StatusCode); }
public void Returns_PickedInventoryItems_with_Lot_status_properties_as_expected_on_success() { //Arrange StartStopwatch(); const LotQualityStatus lotStatus0 = LotQualityStatus.Contaminated; const bool onHold0 = false; const LotProductionStatus productionStatus0 = LotProductionStatus.Batched; const LotQualityStatus lotStatus1 = LotQualityStatus.Pending; const bool onHold1 = true; const LotProductionStatus status1 = LotProductionStatus.Produced; var lotKey0 = new LotKey(TestHelper.CreateObjectGraphAndInsertIntoDatabase <Lot>(l => l.EmptyLot(), l => l.QualityStatus = lotStatus0, l => l.ProductionStatus = productionStatus0, l => l.Hold = null)); var lotKey1 = new LotKey(TestHelper.CreateObjectGraphAndInsertIntoDatabase <Lot>(l => l.EmptyLot(), l => l.QualityStatus = lotStatus1, l => l.ProductionStatus = status1, l => l.Hold = LotHoldType.HoldForAdditionalTesting)); var parentRecord = CreateParentRecord(); var pickedInventory = GetPickedInventoryRecordFromParent(parentRecord); var pickedKey0 = new PickedInventoryItemKey(TestHelper.CreateObjectGraphAndInsertIntoDatabase <PickedInventoryItem>(i => i.ConstrainByKeys(pickedInventory, lotKey0))); var pickedKey1 = new PickedInventoryItemKey(TestHelper.CreateObjectGraphAndInsertIntoDatabase <PickedInventoryItem>(i => i.ConstrainByKeys(pickedInventory, lotKey1))); StopWatchAndWriteTime("Arrange"); //Act var result = TimedExecution(() => MethodUnderTest(parentRecord)); //Assert result.AssertSuccess(); var items = GetPickedInventoryItemsFromResult(result.ResultingObject); var inventory = items.Single(r => r.PickedInventoryItemKey == pickedKey0.KeyValue); Assert.AreEqual(lotStatus0, inventory.QualityStatus); Assert.AreEqual(onHold0, inventory.HoldType != null); Assert.AreEqual(productionStatus0, inventory.ProductionStatus); inventory = items.Single(r => r.PickedInventoryItemKey == pickedKey1.KeyValue); Assert.AreEqual(lotStatus1, inventory.QualityStatus); Assert.AreEqual(onHold1, inventory.HoldType != null); Assert.AreEqual(status1, inventory.ProductionStatus); }
public void ParametersAreCorrectlyTransposedToDto() { // arrange ISetLotStatusParameters actualParameters = null; MockLotService.Setup(m => m.SetLotQualityStatus(It.IsAny <ISetLotStatusParameters>())) .Callback((ISetLotStatusParameters p) => actualParameters = p) .Returns(new SuccessResult <ILotStatInfoReturn>()); const string lotKey = "12345"; const LotQualityStatus expectedStatus = LotQualityStatus.Released; var dto = new SetLotStatusDto { Status = expectedStatus }; // act LotsControler.SetStatus(lotKey, dto); // assert Assert.IsNotNull(actualParameters); Assert.AreEqual(lotKey, actualParameters.LotKey); Assert.AreEqual(expectedStatus, actualParameters.QualityStatus); }
public void UtilizesUserIdentityProvider() { // arrange const string lotKey = "12345"; const LotQualityStatus expectedStatus = LotQualityStatus.Released; var dto = new SetLotStatusDto { Status = expectedStatus }; SetLotStatusParameter actualParameters = null; MockUserIdentityProvider.Setup(m => m.SetUserIdentity(It.IsAny <SetLotStatusParameter>())) .Callback((SetLotStatusParameter p) => actualParameters = p) .Returns(actualParameters); MockLotService.Setup(m => m.SetLotQualityStatus(It.IsAny <ISetLotStatusParameters>())) .Returns(new SuccessResult <ILotStatInfoReturn>()); // act LotsControler.SetStatus(lotKey, dto); // assert Assert.IsNotNull(actualParameters); MockUserIdentityProvider.Verify(m => m.SetUserIdentity(actualParameters), Times.Once()); }
public IResult IsValidForPicking(IDictionary <string, PickingValidatorAttributeAndDefects> attributesAndDefects, string attributeKey, string lotKey, LotQualityStatus qualityStatus) { var applicableSpec = _customerSpec != null ? UserMessages.CustomerSpec : UserMessages.ProductSpec; PickingValidatorAttributeAndDefects attributeAndDefects; if (!attributesAndDefects.TryGetValue(attributeKey, out attributeAndDefects)) { if (_looseProductSpec && qualityStatus == LotQualityStatus.Released) { return(new SuccessResult()); } return(new InvalidResult(string.Format(UserMessages.LotMissingRequiredAttribute, lotKey, attributeKey, applicableSpec))); } if (_customerSpec != null ? _customerSpec.ValueOutOfRange(attributeAndDefects.AttributeValue) : _productSpec.ValueOutOfRange(attributeAndDefects.AttributeValue)) { if (!_looseProductSpec || !attributeAndDefects.DefectResolution.Any() || attributeAndDefects.DefectResolution.Any(d => !d)) { return(new InvalidResult(string.Format(UserMessages.LotAttributeOutOfRequiredRange, lotKey, attributeKey, applicableSpec))); } } return(new SuccessResult()); }
internal IResult Execute(DateTime timestamp, Employee employee, LotKey lotKey, LotQualityStatus status, bool forceResolveAllDefects = false) { var lot = _lotUnitOfWork.LotRepository.FindByKey(lotKey, l => l.ChileLot, l => l.Attributes.Select(a => a.AttributeName), l => l.LotDefects.Select(d => d.Resolution)); if (lot == null) { return(new InvalidResult(string.Format(UserMessages.LotNotFound, lotKey))); } var historyResult = new RecordLotHistoryCommand(_lotUnitOfWork).Execute(lot, timestamp); if (!historyResult.Success) { return(historyResult); } if (forceResolveAllDefects) { foreach (var defect in lot.LotDefects) { if (defect.Resolution == null) { defect.Resolution = new LotDefectResolution { EmployeeId = employee.EmployeeId, TimeStamp = timestamp, ResolutionType = ResolutionTypeEnum.AcceptedByUser, Description = "Forced acceptance by user." }; } } } if (lot.ChileLot != null) { var chileLot = _lotUnitOfWork.ChileLotRepository.FindByKey(lotKey, LotStatusHelper.ChileLotIncludePaths); if (chileLot == null) { return(new InvalidResult(string.Format(UserMessages.ChileLotNotFound, lotKey))); } if (!LotStatusHelper.GetValidLotQualityStatuses(chileLot).Contains(status)) { return(new InvalidResult(string.Format(UserMessages.CannotSetLotStatus, lotKey, chileLot.Lot.QualityStatus, status))); } } lot.QualityStatus = status; lot.EmployeeId = employee.EmployeeId; lot.TimeStamp = timestamp; return(new SuccessResult()); }
protected void AssertResult(LotQualityStatus expectedStatus, LotQualityStatus determinedStatus) { Assert.AreEqual(expectedStatus, LotStatusHelper.PreserveQualityStatus(CurrentStatus, determinedStatus)); }
internal static Expression <Func <Lot, bool> > FilterByQualityStatus(LotQualityStatus lotStatus) { return(l => l.QualityStatus == lotStatus); }