public void SwagOMeterAwardEngineShouldNotBeAbleToSwagWhenAnAttendeeDoesntWantTheSwagAndTheOtherAttendeeHasLeft()
        {
            // Arrange
            var stubAttendee1 = new Mock<IAttendee>();
            stubAttendee1.SetupGet(a => a.Name).Returns("Bob");

            var stubAttendee2 = new Mock<IAttendee>();
            stubAttendee2.SetupGet(a => a.Name).Returns("Fred");

            var stubSwagObject = new Mock<ISwag>();
            stubSwagObject.SetupGet(a => a.Thing).Returns("Pants");

            var stubAttendees = new List<IAttendee> { stubAttendee1.Object, stubAttendee2.Object };
            var stubSwag = new List<ISwag> { stubSwagObject.Object };

            var stubAttendeeSource = new Mock<IAttendeeSource>();
            stubAttendeeSource.Setup(sa => sa.Load(It.IsAny<string>())).Returns(stubAttendees);

            var stubSwagSource = new Mock<ISwagSource>();
            stubSwagSource.Setup(ss => ss.Load(It.IsAny<string>())).Returns(stubSwag);

            // Act
            var awardEngine = new SwagOMeterAwardEngine(stubAttendeeSource.Object, stubSwagSource.Object);
            awardEngine.AwardSwag();
            awardEngine.AttendeeDoesNotWantSwag();
            awardEngine.AwardSwag();
            awardEngine.AttendeeNotPresent();

            // Assert
            Assert.IsNull(awardEngine.WinningAttendee);
            Assert.IsNull(awardEngine.AwardedSwag);
            Assert.IsFalse(awardEngine.CanSwag);
        }
        public void SwagOMeterAwardEngineShouldHaveCanSwagSetToFalseWhenAWinnerIsNotPresentAndTheSwagIsReAssignedButOnlyOneAttendeeAndSwagIsLeft()
        {
            // Arrange
            var stubAttendee = new Mock<IAttendee>();
            var stubSwagObject = new Mock<ISwag>();

            var stubAttendees = new List<IAttendee> { stubAttendee.Object };
            var stubSwag = new List<ISwag> { stubSwagObject.Object };

            var stubAttendeeSource = new Mock<IAttendeeSource>();
            stubAttendeeSource.Setup(sa => sa.Load(It.IsAny<string>())).Returns(stubAttendees);

            var stubSwagSource = new Mock<ISwagSource>();
            stubSwagSource.Setup(ss => ss.Load(It.IsAny<string>())).Returns(stubSwag);

            // Act
            var awardEngine = new SwagOMeterAwardEngine(stubAttendeeSource.Object, stubSwagSource.Object);
            awardEngine.AwardSwag();
            awardEngine.AttendeeNotPresent();

            // Assert
            Assert.IsNull(awardEngine.WinningAttendee);
            Assert.IsNull(awardEngine.AwardedSwag);
            Assert.IsFalse(awardEngine.CanSwag);
        }
        public void SwagOMeterAwardEngineShouldHaveCanSwagSetToTrueWhenAWinnerIsNotPresentAndTheSwagIsReAssigned()
        {
            // Arrange
            var mockAttendee1 = new Mock<IAttendee>();
            var mockAttendee2 = new Mock<IAttendee>();
            var mockSwag = new Mock<ISwag>();

            var stubAttendees = new List<IAttendee> { mockAttendee1.Object, mockAttendee2.Object };
            var stubSwag = new List<ISwag> { mockSwag.Object };

            var stubAttendeeSource = new Mock<IAttendeeSource>();
            stubAttendeeSource.Setup(sa => sa.Load(It.IsAny<string>())).Returns(stubAttendees);

            var stubSwagSource = new Mock<ISwagSource>();
            stubSwagSource.Setup(ss => ss.Load(It.IsAny<string>())).Returns(stubSwag);

            var mockWinnersSource = new Mock<IWinnersSource>();

            // Act
            var awardEngine = new SwagOMeterAwardEngine(stubAttendeeSource.Object, stubSwagSource.Object);
            awardEngine.AwardSwag();
            awardEngine.AttendeeNotPresent();
            awardEngine.SaveWinners(mockWinnersSource.Object);

            // Assert
            Assert.IsNull(awardEngine.WinningAttendee);
            Assert.IsNull(awardEngine.AwardedSwag);
            Assert.IsTrue(awardEngine.CanSwag);
            mockWinnersSource.Verify(ws => ws.Save(It.IsAny<IList<IWinner>>()), Times.Never());
        }
        public void SwagOMeterAwardEngineShouldHaveCanSwagSetToFalseWhenAWinnerIsNotPresentAndTheSwagIsReAssignedAndReAwarded()
        {
            // Arrange
            var mockAttendee1 = new Mock<IAttendee>();
            var mockAttendee2 = new Mock<IAttendee>();
            var mockSwag = new Mock<ISwag>();

            var stubAttendees = new List<IAttendee> { mockAttendee1.Object, mockAttendee2.Object };
            var stubSwag = new List<ISwag> { mockSwag.Object };

            var stubAttendeeSource = new Mock<IAttendeeSource>();
            stubAttendeeSource.Setup(sa => sa.Load(It.IsAny<string>())).Returns(stubAttendees);

            var stubSwagSource = new Mock<ISwagSource>();
            stubSwagSource.Setup(ss => ss.Load(It.IsAny<string>())).Returns(stubSwag);

            // Act
            var awardEngine = new SwagOMeterAwardEngine(stubAttendeeSource.Object, stubSwagSource.Object);
            awardEngine.AwardSwag();
            awardEngine.AttendeeNotPresent();
            awardEngine.AwardSwag();

            // Assert
            Assert.IsNotNull(awardEngine.WinningAttendee);
            Assert.AreEqual(mockSwag.Object, awardEngine.AwardedSwag);
            Assert.IsFalse(awardEngine.CanSwag);
        }