public void MatchAndSave_LoopsUntil_SuccessfulSave() { var expected = new List <SerialNumberItem> { new SerialNumberItem { ProductId = "00776", Color = "BL", SerialNum = 1 }, new SerialNumberItem { ProductId = "00776", Color = "BL", SerialNum = 2 } }; _repo.Stub(r => r.UpdateSerialNumberItem(Arg <SerialNumberItem> .Matches(a => a.SerialNum.Equals(1)), Arg <bool> .Is.Equal(false))).Return(false); _repo.Stub(r => r.UpdateSerialNumberItem(Arg <SerialNumberItem> .Matches(a => a.SerialNum.Equals(2)), Arg <bool> .Is.Equal(false))).Return(true); _repo.Stub(r => r.FindUnScannedMatch(Arg <SerialNumberItemQuery> .Is.Anything)).Return(expected); var model = new MatchModel { SerialCode = RSK_PRIMARY, IsInternal = false, DocNumber = DOCNUM }; var actual = new OrderDeliveryService(_repo, _settings, _identity).MatchAndSave(model); _repo.AssertWasCalled(r => r.FindUnScannedMatch(Arg <SerialNumberItemQuery> .Matches(a => a.ProductId.Equals("00776") && a.Color.Equals("BL")))); Assert.AreEqual(actual.UpdatedItem.SerialNum, 2); }