public void StopOverAt_aLocation_dontBlockInvalidOperationExceptionFromCurrentState() { // arrange: VoyageNumber number = new VoyageNumber("VYG01"); ISchedule schedule = MockRepository.GenerateStrictMock <ISchedule>(); ILocation location = MockRepository.GenerateStrictMock <ILocation>(); VoyageState state = MockRepository.GeneratePartialMock <VoyageState>(number, schedule); state.Expect(s => s.StopOverAt(location)).Throw(new InvalidOperationException()).Repeat.Once(); VoyageEventArgs eventArguments = null; IVoyage eventSender = null; // act: IVoyage voyage = MockRepository.GeneratePartialMock <Challenge00.DDDSample.Voyage.Voyage>(state); voyage.Stopped += delegate(object sender, VoyageEventArgs e) { eventArguments = e; eventSender = sender as IVoyage; }; Assert.Throws <InvalidOperationException>(delegate { voyage.StopOverAt(location); }); // assert: Assert.IsNull(eventSender); Assert.IsNull(eventArguments); state.VerifyAllExpectations(); schedule.VerifyAllExpectations(); location.VerifyAllExpectations(); }
public void StopOverAt_aLocation_willNotFireStopped_whenTheStateDontChange() { // arrange: VoyageNumber number = new VoyageNumber("VYG01"); ISchedule schedule = MockRepository.GenerateStrictMock <ISchedule>(); ILocation location = MockRepository.GenerateStrictMock <ILocation>(); VoyageState state = MockRepository.GeneratePartialMock <VoyageState>(number, schedule); state.Expect(s => s.StopOverAt(location)).Return(state).Repeat.Once(); state.Expect(s => s.Equals(state)).Return(true).Repeat.Once(); VoyageEventArgs eventArguments = null; IVoyage eventSender = null; // act: IVoyage voyage = MockRepository.GeneratePartialMock <Challenge00.DDDSample.Voyage.Voyage>(state); voyage.Stopped += delegate(object sender, VoyageEventArgs e) { eventArguments = e; eventSender = sender as IVoyage; }; voyage.StopOverAt(location); // assert: Assert.AreEqual(number, voyage.Number); Assert.IsNull(eventSender); Assert.IsNull(eventArguments); state.VerifyAllExpectations(); schedule.VerifyAllExpectations(); location.VerifyAllExpectations(); }
public void Voyage_LiveCycle_05() { // arrange: UnLocode code1 = new UnLocode("CODAA"); ILocation loc1 = MockRepository.GenerateStrictMock <ILocation>(); loc1.Expect(l => l.UnLocode).Return(code1).Repeat.Any(); loc1.Expect(l => l.Name).Return("First location").Repeat.Any(); UnLocode code2 = new UnLocode("CODAB"); ILocation loc2 = MockRepository.GenerateStrictMock <ILocation>(); loc2.Expect(l => l.UnLocode).Return(code2).Repeat.Any(); loc2.Expect(l => l.Name).Return("Second location").Repeat.Any(); UnLocode code3 = new UnLocode("CODAC"); ILocation loc3 = MockRepository.GenerateStrictMock <ILocation>(); loc3.Expect(l => l.UnLocode).Return(code3).Repeat.Any(); loc3.Expect(l => l.Name).Return("Third location").Repeat.Any(); ISchedule schedule = new Schedule(); schedule = schedule.Append(new CarrierMovement(loc1, DateTime.UtcNow, loc2, DateTime.UtcNow + TimeSpan.FromDays(2))); schedule = schedule.Append(new CarrierMovement(loc2, DateTime.UtcNow + TimeSpan.FromDays(3), loc3, DateTime.UtcNow + TimeSpan.FromDays(4))); VoyageNumber number = new VoyageNumber("TESTVYG"); VoyageEventArgs departedEvent = null; VoyageEventArgs stoppedEvent = null; Challenge00.DDDSample.Voyage.Voyage voyage = new Challenge00.DDDSample.Voyage.Voyage(number, schedule); voyage.DepartFrom(loc1); voyage.StopOverAt(loc2); voyage.DepartFrom(loc2); voyage.Departed += delegate(object sender, VoyageEventArgs e) { departedEvent = e; }; voyage.Stopped += delegate(object sender, VoyageEventArgs e) { stoppedEvent = e; }; // act: voyage.StopOverAt(loc3); // assert: Assert.AreSame(number, voyage.Number); Assert.IsFalse(voyage.IsMoving); Assert.AreEqual(code3, voyage.LastKnownLocation); Assert.AreEqual(code3, voyage.NextExpectedLocation); Assert.IsNull(departedEvent); Assert.IsNotNull(stoppedEvent); Assert.AreEqual(code2, stoppedEvent.PreviousLocation); Assert.AreEqual(code3, stoppedEvent.DestinationLocation); loc1.VerifyAllExpectations(); loc2.VerifyAllExpectations(); loc3.VerifyAllExpectations(); }
public void Ctor_withValidLocations_works() { // arrange: UnLocode previous = new UnLocode("CDPRV"); UnLocode destination = new UnLocode("CDDES"); // act: VoyageEventArgs args = new VoyageEventArgs(previous, destination); // assert: Assert.AreSame(previous, args.PreviousLocation); Assert.AreSame(destination, args.DestinationLocation); }
public void DepartFrom_aLocation_dontCallUnsubscribedHandlersOf_Departed() { // arrange: VoyageNumber number = new VoyageNumber("VYG01"); UnLocode departure = new UnLocode("DPLOC"); UnLocode arrival = new UnLocode("ARLOC"); ISchedule schedule = MockRepository.GenerateStrictMock <ISchedule>(); ILocation location = MockRepository.GenerateStrictMock <ILocation>(); VoyageState state = MockRepository.GeneratePartialMock <VoyageState>(number, schedule); VoyageState state2 = MockRepository.GeneratePartialMock <VoyageState>(number, schedule); state.Expect(s => s.DepartFrom(location)).Return(state2).Repeat.Once(); state.Expect(s => s.Equals(state2)).Return(false).Repeat.Once(); state2.Expect(s => s.LastKnownLocation).Return(departure).Repeat.Once(); state2.Expect(s => s.NextExpectedLocation).Return(arrival).Repeat.Once(); VoyageEventArgs eventArguments = null; IVoyage eventSender = null; // act: IVoyage voyage = MockRepository.GeneratePartialMock <Challenge00.DDDSample.Voyage.Voyage>(state); EventHandler <VoyageEventArgs> handler = delegate(object sender, VoyageEventArgs e) { eventArguments = e; eventSender = sender as IVoyage; }; voyage.Departed += handler; voyage.Departed -= handler; voyage.DepartFrom(location); // assert: Assert.AreEqual(number, voyage.Number); Assert.IsNull(eventSender); Assert.IsNull(eventArguments); state.VerifyAllExpectations(); schedule.VerifyAllExpectations(); location.VerifyAllExpectations(); state2.VerifyAllExpectations(); }
public void StopOverAt_nextLocation_fireStopped() { // arrange: VoyageNumber number = new VoyageNumber("VYG01"); UnLocode departure = new UnLocode("DPLOC"); UnLocode arrival = new UnLocode("ARLOC"); ISchedule schedule = MockRepository.GenerateStrictMock <ISchedule>(); ILocation location = MockRepository.GenerateStrictMock <ILocation>(); VoyageState state = MockRepository.GeneratePartialMock <VoyageState>(number, schedule); VoyageState state2 = MockRepository.GeneratePartialMock <VoyageState>(number, schedule); state.Expect(s => s.StopOverAt(location)).Return(state2).Repeat.Once(); state.Expect(s => s.Equals(state2)).Return(false).Repeat.Once(); state.Expect(s => s.LastKnownLocation).Return(departure).Repeat.Once(); state.Expect(s => s.NextExpectedLocation).Return(arrival).Repeat.Once(); VoyageEventArgs eventArguments = null; IVoyage eventSender = null; // act: IVoyage voyage = MockRepository.GeneratePartialMock <Challenge00.DDDSample.Voyage.Voyage>(state); voyage.Stopped += delegate(object sender, VoyageEventArgs e) { eventArguments = e; eventSender = sender as IVoyage; }; voyage.StopOverAt(location); // assert: Assert.AreEqual(number, voyage.Number); Assert.AreSame(voyage, eventSender); Assert.AreSame(departure, eventArguments.PreviousLocation); Assert.AreSame(arrival, eventArguments.DestinationLocation); state.VerifyAllExpectations(); schedule.VerifyAllExpectations(); location.VerifyAllExpectations(); state2.VerifyAllExpectations(); }
public void StopOverAt_nullLocation_throwsArgumentNullException() { // arrange: VoyageNumber number = new VoyageNumber("VYG01"); ISchedule schedule = MockRepository.GenerateStrictMock <ISchedule>(); VoyageState state = MockRepository.GeneratePartialMock <VoyageState>(number, schedule); VoyageEventArgs eventArguments = null; IVoyage eventSender = null; // act: IVoyage voyage = MockRepository.GeneratePartialMock <Challenge00.DDDSample.Voyage.Voyage>(state); voyage.Stopped += delegate(object sender, VoyageEventArgs e) { eventArguments = e; eventSender = sender as IVoyage; }; Assert.Throws <ArgumentNullException>(delegate { voyage.StopOverAt(null); }); // assert: Assert.IsNull(eventSender); Assert.IsNull(eventArguments); state.VerifyAllExpectations(); schedule.VerifyAllExpectations(); }