public AccountReportPagingModel GetAccountReport(int skip, int take)
        {
            var pagingModel = new AccountReportPagingModel();
            var accounts    = new List <AccountReportModel>();
            int accountsCount;

            using (IDbConnection db = new SqlConnection(connectionString))
            {
                var lookup = new Dictionary <string, AccountReportModel>();

                accountsCount = db.Query <int>(sqlCount).FirstOrDefault();
                db.Query <AccountReportModel, TotalByMonth, AccountReportModel>(sql, (r, t) => {
                    AccountReportModel mem;
                    if (!lookup.TryGetValue(r.AccountNumber, out mem))
                    {
                        lookup.Add(r.AccountNumber, mem = r);
                    }
                    if (mem.Totals == null)
                    {
                        mem.Totals = new List <TotalByMonth>();
                    }
                    mem.Totals.Add(t);
                    return(mem);
                },
                                                                                new { @skip = skip, @take = take + skip + 1 },
                                                                                splitOn: "splitId");

                accounts = lookup.Values.ToList();
            }
            pagingModel.AccountReportList = accounts;
            pagingModel.TotalCount        = accountsCount;

            return(pagingModel);
        }
        public void GetReport()
        {
            var skip        = 0;
            var take        = 5;
            var pagingModel = new AccountReportPagingModel();
            var accounts    = new List <AccountReportModel>();

            for (var i = skip; i < take; i++)
            {
                var totals = new List <TotalByMonth>();
                for (var j = skip; j < take; j++)
                {
                    totals.Add(new TotalByMonth
                    {
                        Summ            = Double.MaxValue / i,
                        TransactionDate = DateTime.Now
                    });
                }
                accounts.Add(new AccountReportModel
                {
                    AccountNumber = "1456325897452144",
                    Totals        = totals
                });
            }
            pagingModel.AccountReportList = accounts;
            pagingModel.TotalCount        = take;

            var uploadRepositoryMock = new Mock <IReportRepository>(MockBehavior.Strict);

            uploadRepositoryMock.Setup(repository => repository.GetAccountReport(skip, take))
            .Returns(pagingModel);

            reportService = new ReportService(uploadRepositoryMock.Object);
            var result = reportService.GetAccountReport(skip, take);

            Assert.AreEqual(take, result.TotalCount);
            Assert.AreSame(accounts, result.AccountReportList);
        }