public async Task GetLastAllDaysReportTest()
        {
            //Arrange
            var domainReport    = new DomainReport();
            var reportEntityAll = new StandardReportV3Entity()
            {
                Interval = "All"
            };
            var repository = new Mock <IRepository <StandardReportV3Entity> >();

            var repositoryFactory = new Mock <IRepositoryFactory>();
            var valueConverter    = new Mock <ITableValueConverter>();
            var mapper            = new Mock <IReportMapper>();

            repositoryFactory.Setup(m => m.Create <StandardReportV3Entity>(Tables.StandardReportV3)).Returns(repository.Object);
            repository.Setup(m => m.GetLastReport(It.Is <ReportQueryObject>(p => p.Interval == "All"))).Returns(async() => reportEntityAll);
            mapper.Setup(m => m.ReportEntityToDomain(reportEntityAll)).Returns(domainReport);

            var standardReportService = new StandardReportService(repositoryFactory.Object, valueConverter.Object, mapper.Object);

            //Act
            var report = await standardReportService.GetLastAllDaysReport();

            //Assert
            Assert.AreEqual(domainReport, report);
        }
        public void GetDayReportsTest()
        {
            //Arrange
            var startDate  = new DateTime(123214);
            var finishDate = new DateTime(234567);
            var interval   = new Interval()
            {
                Start = startDate, Finish = finishDate
            };

            var repositoryFactory   = new Mock <IRepositoryFactory>();
            var tableValueConverter = new Mock <ITableValueConverter>();
            var mapper = new Mock <IReportMapper>();

            var reportEntity1_1 = new StandardReportV3Entity()
            {
                Tick = Tick1, Interval = "1"
            };
            var reportEntity2_1 = new StandardReportV3Entity()
            {
                Tick = Tick2, Interval = "1"
            };

            var domainReport1 = new DomainReport();
            var domainReport2 = new DomainReport();

            var reportEntities = new List <StandardReportV3Entity>()
            {
                reportEntity1_1,
                reportEntity2_1,
            };

            var repository = new Mock <IRepository <StandardReportV3Entity> >();

            repository.Setup(m => m.GetReportEntities(It.Is <ReportQueryObject>(p => p.StartInterval == Tick2 &&
                                                                                p.EndInterval == Tick1 &&
                                                                                p.IsStartInclude == true &&
                                                                                p.IsEndInclude == false &&
                                                                                p.Interval == "1")))
            .Returns(reportEntities);
            tableValueConverter.Setup(m => m.DateTimeToTick(startDate)).Returns(Tick2);
            tableValueConverter.Setup(m => m.DateTimeToTick(finishDate)).Returns(Tick1);
            repositoryFactory.Setup(m => m.Create <StandardReportV3Entity>(Tables.StandardReportV3)).Returns(repository.Object);
            mapper.Setup(m => m.ReportEntityToDomain(reportEntity1_1)).Returns(domainReport1);
            mapper.Setup(m => m.ReportEntityToDomain(reportEntity2_1)).Returns(domainReport2);

            var reportService = new StandardReportService(repositoryFactory.Object, tableValueConverter.Object, mapper.Object);

            //Act
            var reports = reportService.GetDayReports(interval).ToList();

            //Assert
            Assert.AreEqual(2, reports.Count);
            CollectionAssert.Contains(reports, domainReport1);
            CollectionAssert.Contains(reports, domainReport2);
        }
        public async Task GetReportsForNotExistDateTest()
        {
            //Arrange
            var dateTime = new DateTime(2013, 03, 25, 2, 35, 10);

            var repositoryFactory = new Mock <IRepositoryFactory>();
            var valueConverter    = new Mock <ITableValueConverter>();
            var mapper            = new Mock <IReportMapper>();

            var reportEntities = new List <StandardReportV3Entity>();
            var fakeRepository = new FakeRepository <StandardReportV3Entity>(reportEntities);

            repositoryFactory.Setup(m => m.Create <StandardReportV3Entity>(Tables.StandardReportV3)).Returns(fakeRepository);

            var reportService = new StandardReportService(repositoryFactory.Object, valueConverter.Object, mapper.Object);

            //Act & Assert
            await ExceptionAssert.ThrowsAsync <NotFoundException>(() => reportService.GetReports(dateTime));
        }
        public async Task GetLastAllDaysReportIfNotExistTest()
        {
            //Arrange
            var repository        = new Mock <IRepository <StandardReportV3Entity> >();
            var repositoryFactory = new Mock <IRepositoryFactory>();
            var valueConverter    = new Mock <ITableValueConverter>();
            var mapper            = new Mock <IReportMapper>();

            repositoryFactory.Setup(m => m.Create <StandardReportV3Entity>(Tables.StandardReportV3)).Returns(repository.Object);
            repository.Setup(m => m.GetLastReport(It.Is <ReportQueryObject>(p => p.Interval == "All"))).Returns(async() => null);

            var standardReportService = new StandardReportService(repositoryFactory.Object, valueConverter.Object, mapper.Object);

            //Act
            var report = await standardReportService.GetLastAllDaysReport();

            //Assert
            Assert.IsNotNull(report);
            mapper.Verify(m => m.ReportEntityToDomain(It.IsAny <StandardReportV3Entity>()), Times.Never());
        }
        public async Task GetReportsTest()
        {
            //Arrange
            const string tick     = "tick";
            var          dateTime = new DateTime(2013, 03, 25, 2, 35, 10);

            var repositoryFactory = new Mock <IRepositoryFactory>();
            var valueConverter    = new Mock <ITableValueConverter>();
            var mapper            = new Mock <IReportMapper>();

            var reportEntity = new StandardReportV3Entity()
            {
                Tick = tick
            };
            var domainReport   = new DomainReport();
            var reportEntities = new List <StandardReportV3Entity>()
            {
                new StandardReportV3Entity(), reportEntity
            };
            var domainReports = new List <DomainReport>()
            {
                domainReport
            };

            var fakeRepository = new FakeRepository <StandardReportV3Entity>(reportEntities);

            valueConverter.Setup(m => m.DateTimeToTick(dateTime)).Returns(tick);
            repositoryFactory.Setup(m => m.Create <StandardReportV3Entity>(Tables.StandardReportV3)).Returns(fakeRepository);
            mapper.Setup(m => m.ReportEntityToDomain(reportEntity)).Returns(domainReport);

            var reportService = new StandardReportService(repositoryFactory.Object, valueConverter.Object, mapper.Object);

            //Act
            var reports = await reportService.GetReports(dateTime);

            //Assert
            Assert.AreEqual(1, reports.Count);
            Assert.AreEqual(domainReports[0], reports[0]);
        }
        public async Task WriteReportsTest()
        {
            //Arrange
            const string tick     = "tick";
            var          dateTime = new DateTime(2013, 03, 25, 2, 35, 10);

            var repositoryFactory = new Mock <IRepositoryFactory>();
            var valueConverter    = new Mock <ITableValueConverter>();
            var mapper            = new Mock <IReportMapper>();

            var reportEntity1  = new StandardReportV3Entity();
            var reportEntity2  = new StandardReportV3Entity();
            var domainReport1  = new DomainReport();
            var domainReport2  = new DomainReport();
            var reportEntities = new List <StandardReportV3Entity>();
            var domainReports  = new List <DomainReport>()
            {
                domainReport1, domainReport2
            };

            var fakeRepository = new FakeRepository <StandardReportV3Entity>(reportEntities);

            valueConverter.Setup(m => m.DateTimeToTick(dateTime)).Returns(tick);
            repositoryFactory.Setup(m => m.Create <StandardReportV3Entity>(Tables.StandardReportV3)).Returns(fakeRepository);
            mapper.Setup(m => m.DomainReportToEntity(domainReport1, tick)).Returns(reportEntity1);
            mapper.Setup(m => m.DomainReportToEntity(domainReport2, tick)).Returns(reportEntity2);

            var reportService = new StandardReportService(repositoryFactory.Object, valueConverter.Object, mapper.Object);

            //Act
            await reportService.WriteReports(domainReports, dateTime);

            //Assert
            Assert.AreEqual(2, reportEntities.Count);
            CollectionAssert.Contains(reportEntities, reportEntity1);
            CollectionAssert.Contains(reportEntities, reportEntity2);
        }
        public async Task   DeleteReportsTest()
        {
            //Arrange
            const string tick     = "tick";
            var          dateTime = new DateTime(2013, 03, 25, 2, 35, 10);

            var repositoryFactory = new Mock <IRepositoryFactory>();
            var valueConverter    = new Mock <ITableValueConverter>();
            var mapper            = new Mock <IReportMapper>();

            var reportEntity1 = new StandardReportV3Entity();
            var reportEntity2 = new StandardReportV3Entity();
            var domainReport1 = new DomainReport();
            var domainReport2 = new DomainReport();
            var domainReports = new List <DomainReport>()
            {
                domainReport1, domainReport2
            };

            var repository = new Mock <IRepository <StandardReportV3Entity> >();

            valueConverter.Setup(m => m.DateTimeToTick(dateTime)).Returns(tick);
            repositoryFactory.Setup(m => m.Create <StandardReportV3Entity>(Tables.StandardReportV3)).Returns(repository.Object);
            repository.Setup(m => m.DeleteAsync(It.IsAny <IEnumerable <StandardReportV3Entity> >(), It.IsAny <CancellationToken>())).Returns(async() => { });
            mapper.Setup(m => m.DomainReportToEntity(domainReport1, tick)).Returns(reportEntity1);
            mapper.Setup(m => m.DomainReportToEntity(domainReport2, tick)).Returns(reportEntity2);

            var reportService = new StandardReportService(repositoryFactory.Object, valueConverter.Object, mapper.Object);

            //Act
            await reportService.DeleteReports(domainReports, dateTime);

            //Assert
            repository.Verify(m => m.DeleteAsync(It.Is <IEnumerable <StandardReportV3Entity> >(c => c.Contains(reportEntity1)), It.IsAny <CancellationToken>()), Times.Once());
            repository.Verify(m => m.DeleteAsync(It.Is <IEnumerable <StandardReportV3Entity> >(c => c.Contains(reportEntity2)), It.IsAny <CancellationToken>()), Times.Once());
        }