예제 #1
0
        public void ConstructingAnAttendanceWithAnArrivalAfterTheDepartureThrowsAnArgumentException()
        {
            // Arrange
            var arrival   = Randomiser.ArrivalDate;
            var departure = arrival.AddMinutes(-Randomiser.Int(20));

            // Act
            Action action = () => new Attendance(new UserBuilder().Build(), arrival, departure);

            // Assert
            action
            .ShouldThrow <ArgumentException>()
            .WithMessage("The arrival must preceed the departure.");
        }
예제 #2
0
        public void CallingAddAttendanceTwiceByUsernameOnlyAddsTheAttendanceOnceAndUpdatesTheArrivalAndDeparture()
        {
            // Arrange
            var user       = new UserBuilder().Build();
            var arrival1   = DateTime.Now;
            var departure1 = arrival1.AddMinutes(20);
            var arrival2   = arrival1.AddMinutes(Randomiser.Int(10));
            var departure2 = arrival2.AddMinutes(Randomiser.Int(10, 60));
            var attendance = new AttendanceBuilder().User(user).Arrival(arrival1).Departure(departure1).Build();

            // Act
            var happening = new EventBuilder().AddAttendance(attendance).Build();

            happening.AddAttendance(new AttendanceBuilder().User(new UserBuilder().Username(user.Username).Build()).Arrival(arrival2).Departure(departure2).Build());

            // Assert
            Assert.AreEqual(1, happening.Attendances.Count);
            Assert.AreEqual(arrival2, happening.Start);
            Assert.AreEqual(departure2, happening.End);
        }
예제 #3
0
        public void TheEventStartDateIsUpdatedWithAnEarlierAttendanceIsAdded()
        {
            // Arrange

            var attendance        = new AttendanceBuilder().Arrival(DateTime.Now).Build();
            var earlierAttendance = new AttendanceBuilder().Arrival(DateTime.Now.AddHours(-Randomiser.Int(60))).Build();
            var happening         = new EventBuilder().AddAttendance(attendance).Build();

            // Act
            happening.AddAttendance(earlierAttendance);

            // Assert
            Assert.AreEqual(earlierAttendance.Arrival, happening.Start);
        }
예제 #4
0
        public void TheEventStartDateIsNotUpdatedWithALaterAttendanceIsRemoved()
        {
            // Arrange
            var attendance      = new AttendanceBuilder().Arrival(DateTime.Now).Departure(DateTime.Now.AddHours(Randomiser.Int(1, 24))).Build();
            var laterAttendance = new AttendanceBuilder().Arrival(DateTime.Now.AddHours(Randomiser.Int(60))).Build();
            var happening       = new EventBuilder().AddAttendance(attendance).AddAttendance(laterAttendance).Build();

            // Act
            happening.RemoveAttendance(laterAttendance.User);

            // Assert
            Assert.AreEqual(attendance.Arrival, happening.Start);
        }
예제 #5
0
        public void TheEventEndDateIsUpdatedWithALaterAttendanceIsAdded()
        {
            // Arrange
            var user              = new UserBuilder().Build();
            var attendance        = new AttendanceBuilder().User(user).Arrival(DateTime.Now).Build();
            var happening         = new EventBuilder().AddAttendance(attendance).Build();
            var earlierAttendance = new AttendanceBuilder().User(user).Arrival(DateTime.Now.AddHours(-Randomiser.Int(60))).Build();

            // Act
            happening.AddAttendance(earlierAttendance);

            // Assert
            Assert.AreEqual(earlierAttendance.Departure, happening.End);
        }