示例#1
0
        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();
        }
示例#2
0
        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();
        }
示例#3
0
        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();
        }
示例#4
0
        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);
        }
示例#5
0
        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();
        }
示例#6
0
        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();
        }
示例#7
0
        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();
        }