public void TestThat_GetSessionsVotedForByKnownUser_ObtainsTheSessionsForTheSpecifiedUser()
        {
            var dataProvider = new DataProviderBuilder().Build();
            var controller = new VotingControllerBuilder().WithDataProvider(dataProvider).Build();

            controller.GetSessionsVotedForByKnownUser(1234);

            dataProvider.Received().GetVotedForSessions(1234);
        }
        public void TestThat_AnonymousUserVotes_GetsItsDataFromTheDataProvider()
        {
            var dataProvider = new DataProviderBuilder().Build();
            var controller = new VotingControllerBuilder().WithDataProvider(dataProvider).Build();

            controller.AnonymousUserVotes();

            dataProvider.Received().GetAnonymousUserVotes();
        }
        public void TestThat_GetSessionsVotedForByAnonymousUser_ObtainsTheSessionsForTheSpecifiedCookieId()
        {
            var dataProvider = new DataProviderBuilder().Build();
            var controller = new VotingControllerBuilder().WithDataProvider(dataProvider).Build();
            var cookieId = Guid.NewGuid();

            controller.GetSessionsVotedForByAnonymousUser(cookieId);

            dataProvider.Received().GetVotedForSessions(cookieId);
        }
        public void TestThat_NumberOfUsersWhoHaveCastXVotes_UsesTheDataObtainedFromTheDataProvider_ToCreateTheChartData()
        {
            var voteCounts = new[] {new NumberOfUsersWithVotesModel()};
            var dataProvider = new DataProviderBuilder().WithNumberOfVotesCastCounts(voteCounts).Build();
            var chartDataConverter = new ChartDataConverterBuilder().Build();
            var controller = new VotingControllerBuilder().WithDataProvider(dataProvider)
                                    .WithChartDataConverter(chartDataConverter)
                                    .Build();

            controller.NumberOfUsersWhoHaveCastXVotes();

            chartDataConverter.Received().ToChartData(voteCounts);
        }
        public void TestThat_VotesPerDay_UsesTheDataObtainedFromTheDataProvider_ToCreateTheChartData()
        {
            var votes = new[] { new DayOfWeekVoteModel() };
            var dataProvider = new DataProviderBuilder().WithVotesPerDay(votes).Build();
            var chartDataConverter = new ChartDataConverterBuilder().Build();
            var controller = new VotingControllerBuilder()
                                    .WithDataProvider(dataProvider)
                                    .WithChartDataConverter(chartDataConverter)
                                    .Build();

            controller.VotesPerDay();

            chartDataConverter.Received().ToChartData(votes);
        }
        public void TestThat_VotesPerHour_UsesTheDataObtainedFromTheDataProvider_ToCreateTheChartData()
        {
            var votes = new[] {new DateTimeVoteModel()};
            var dataProvider = new DataProviderBuilder().WithVotesPerHour(votes).Build();
            var chartDataConverter = new ChartDataConverterBuilder().Build();
            var controller = new VotingControllerBuilder()
                                    .WithDataProvider(dataProvider)
                                    .WithChartDataConverter(chartDataConverter)
                                    .Build();

            controller.VotesPerHour();

            chartDataConverter.Received().ToChartData(votes, Arg.Any<Func<DateTimeVoteModel, long>>());
        }
        public void TestThat_VotesForIPAddress_SetsTheIPAddressOnTheModel()
        {
            var votes = new[] {new CookieVoteModel(), new CookieVoteModel()};
            var dataProvider = new DataProviderBuilder().WithVotesForIPAddresses(votes).Build();
            var controller = new VotingControllerBuilder().WithDataProvider(dataProvider).Build();

            var model = controller.VotesForIPAddress("1.2.3.4").GetViewModel<VotesForIpAddressViewModel>();

            Assert.That(model.IPAddress, Is.EqualTo("1.2.3.4"));
        }
        public void TestThat_VotesForIPAddress_SetsTheVotesObtainedFromTheDataProviderOnTheModel()
        {
            var votes = new[] {new CookieVoteModel(), new CookieVoteModel()};
            var dataProvider = new DataProviderBuilder().WithVotesForIPAddresses(votes).Build();
            var controller = new VotingControllerBuilder().WithDataProvider(dataProvider).Build();

            var model = controller.VotesForIPAddress("1.2.3.4").GetViewModel<VotesForIpAddressViewModel>();

            CollectionAssert.AreEquivalent(votes, model.DistinctVotes);
        }
        public void TestThat_VotersPerIPAddress_SetsTheVotersObtainedFromTheDataProviderOnTheModel()
        {
            var voters = new[] {new IPAddressVoterModel(), new IPAddressVoterModel()};
            var dataProvider = new DataProviderBuilder().WithVotersForIPAddresses(voters).Build();
            var controller = new VotingControllerBuilder().WithDataProvider(dataProvider).Build();

            var model = controller.VotersPerIPAddress().GetViewModel<VotersPerIPAddressViewModel>();

            CollectionAssert.AreEquivalent(voters, model.IPAddressVoters);
        }
        public void TestThat_VotesForIPAddress_SetsTheHighestOccuringNumberOfVotesOnTheModel()
        {
            var votes = new[] {new CookieVoteModel {NumberOfVotes = 2}, new CookieVoteModel {NumberOfVotes = 4}};
            var dataProvider = new DataProviderBuilder().WithVotesForIPAddresses(votes).Build();
            var controller = new VotingControllerBuilder().WithDataProvider(dataProvider).Build();

            var model = controller.VotesForIPAddress("1.2.3.4").GetViewModel<VotesForIpAddressViewModel>();

            Assert.That(model.HighestNumberOfVotes, Is.EqualTo(4));
        }
        public void TestThat_IPAddresses_SetsTheHighestOccuringNumberOfVotesOnTheModel()
        {
            var votes = new[] {new VotesForIPAddressModel {NumberOfVotes = 2}, new VotesForIPAddressModel {NumberOfVotes = 4}};
            var dataProvider = new DataProviderBuilder().WithVotesForDistinctIPAddresses(votes).Build();
            var controller = new VotingControllerBuilder().WithDataProvider(dataProvider).Build();

            var model = controller.IPAddresses().GetViewModel<IPAddressStatsViewModel>();

            Assert.That(model.HighestVoteCount, Is.EqualTo(4));
        }
        public void TestThat_Index_DoesNotCalculateTheNumberOfDaysOfVotingPassedGreaterThanTheTotalNumberOfAllowableVotingDays()
        {
            var dataProvider = new DataProviderBuilder()
                                        .WithNumberOfDaysSinceVotingOpened(25)
                                        .WithNumberOfDaysOfVoting(10)
                                        .Build();
            var controller = new VotingControllerBuilder().WithDataProvider(dataProvider).Build();

            var model = controller.Index().GetViewModel<VotingStatsViewModel>();

            Assert.That(model.NumberOfDaysOfVotingPassed, Is.EqualTo(10));
        }
        public void TestThat_Leaderboard_SetsTheSessionsObtainedFromTheDataProviderOnTheModel()
        {
            var sessions = new[] {new SessionLeaderBoardEntry(), new SessionLeaderBoardEntry()};
            var dataProvider = new DataProviderBuilder().WithLeaderboard(sessions).Build();
            var controller = new VotingControllerBuilder().WithDataProvider(dataProvider).Build();

            var model = controller.Leaderboard().GetViewModel<LeaderboardViewModel>();

            CollectionAssert.AreEquivalent(sessions, model.Sessions);
        }
        public void TestThat_Leaderboard_SetsTheHighestOccuringNumberOfVotesOnTheModel()
        {
            var sessions = new[] {new SessionLeaderBoardEntry {NumberOfVotes = 2}, new SessionLeaderBoardEntry {NumberOfVotes = 4}};
            var dataProvider = new DataProviderBuilder().WithLeaderboard(sessions).Build();
            var controller = new VotingControllerBuilder().WithDataProvider(dataProvider).Build();

            var model = controller.Leaderboard().GetViewModel<LeaderboardViewModel>();

            Assert.That(model.HighestVoteCount, Is.EqualTo(4));
        }
        public void TestThat_Leaderboard_LimitsTheNumberOfSessions()
        {
            var dataProvider = new DataProviderBuilder().WithLeaderboard(new[] {new SessionLeaderBoardEntry()}).Build();
            var controller = new VotingControllerBuilder().WithDataProvider(dataProvider).Build();

            controller.Leaderboard(123);

            dataProvider.Received().GetLeaderBoard(123, Arg.Any<bool>());
        }
        public void TestThat_Leaderboard_ForbidsDuplicateSpeakers()
        {
            var dataProvider = new DataProviderBuilder().WithLeaderboard(new[] {new SessionLeaderBoardEntry()}).Build();
            var controller = new VotingControllerBuilder().WithDataProvider(dataProvider).Build();

            controller.Leaderboard(123, false);

            dataProvider.Received().GetLeaderBoard(Arg.Any<int>(), false);
        }
        public void TestThat_IPAddresses_SetsTheSessionsObtainedFromTheDataProviderOnTheModel()
        {
            var votes = new[] {new VotesForIPAddressModel(), new VotesForIPAddressModel()};
            var dataProvider = new DataProviderBuilder().WithVotesForDistinctIPAddresses(votes).Build();
            var controller = new VotingControllerBuilder().WithDataProvider(dataProvider).Build();

            var model = controller.IPAddresses().GetViewModel<IPAddressStatsViewModel>();

            CollectionAssert.AreEquivalent(votes, model.IPAddresses);
        }
        public void TestThat_Index_CalculatesTheCorrectPercentage_ForTheDurationThroughTheVotingPeriod(
            int numberOfDaysSinceVotingOpened, int numberOfDaysVoting, int expectedPercentageCompletion)
        {
            var dataProvider = new DataProviderBuilder()
                                        .WithNumberOfDaysSinceVotingOpened(numberOfDaysSinceVotingOpened)
                                        .WithNumberOfDaysOfVoting(numberOfDaysVoting)
                                        .Build();
            var controller = new VotingControllerBuilder().WithDataProvider(dataProvider).Build();

            var model = controller.Index().GetViewModel<VotingStatsViewModel>();

            Assert.That(model.VotingCompletePercentage, Is.EqualTo(expectedPercentageCompletion));
        }
        public void TestThat_Index_DoesNotCalculateGreaterThanOneHunderdPercent_ForTheDurationThroughTheVotingPeriod()
        {
            var dataProvider = new DataProviderBuilder()
                                        .WithNumberOfDaysSinceVotingOpened(25)
                                        .WithNumberOfDaysOfVoting(10)
                                        .Build();
            var controller = new VotingControllerBuilder().WithDataProvider(dataProvider).Build();

            var model = controller.Index().GetViewModel<VotingStatsViewModel>();

            Assert.That(model.VotingCompletePercentage, Is.EqualTo(100));
        }