public async Task TestGetPeriodSecondsAsyncSuccess()
        {
            var repository = Substitute.For <ISiteAvailabilityRepository>();
            var controller = new SiteAvailabilityController(repository);

            repository.GetPeriodSecondsAsync().Returns(Task.FromResult(5));
            var result = await controller.GetPeriodSecondsAsync();

            Assert.AreEqual(5, result);
        }
        public async Task TestPostPeriodSecondsAsyncSuccess()
        {
            var repository         = Substitute.For <ISiteAvailabilityRepository>();
            var controller         = new SiteAvailabilityController(repository);
            var monitoringSettings = new MonitoringSettings {
                PeriodSeconds = 10
            };

            repository.SetPeriodSecondsAsync(monitoringSettings.PeriodSeconds).Returns(Task.FromResult <bool>(true));
            var result = await controller.PostPeriodSecondsAsync(monitoringSettings);

            Assert.IsTrue(result is OkResult);
        }
        public async Task TestGetByIdSuccess()
        {
            var repository = Substitute.For <ISiteAvailabilityRepository>();
            var controller = new SiteAvailabilityController(repository);
            var id         = Guid.NewGuid();
            var site       = new Site {
                Id = id, Url = "url1", IsAvailable = false
            };

            repository.GetSiteAsync(id).Returns(Task.FromResult <Site>(site));
            var result = await controller.GetById(id.ToString());

            Assert.AreEqual(site, result);
        }
        public async Task TestPutAsyncSuccess()
        {
            var repository = Substitute.For <ISiteAvailabilityRepository>();
            var controller = new SiteAvailabilityController(repository);
            var id         = Guid.NewGuid();
            var site       = new Site {
                Id = id, Url = "url1", IsAvailable = false
            };

            repository.UpdateSiteUrlAsync(id, site.Url).Returns(Task.FromResult <UpdateResult>(new UpdateResult.Acknowledged(1, 1, BsonValue.Create(id))));
            var result = await controller.PutAsync(id.ToString(), site);

            Assert.IsTrue(result is OkResult);
        }
        public async Task TestPostAsyncSuccess()
        {
            var repository = Substitute.For <ISiteAvailabilityRepository>();
            var controller = new SiteAvailabilityController(repository);
            var site       = new Site {
                Id = Guid.NewGuid(), Url = "url1", IsAvailable = false
            };

            repository.AddSiteAsync(site).Returns(Task.FromResult <Site>(site));
            var result = await controller.PostAsync(site);

            Assert.IsTrue(result is OkObjectResult);
            var successResult = (OkObjectResult)result;

            Assert.AreEqual(site, successResult.Value);
        }
        public async Task TestGetSuccess()
        {
            var repository = Substitute.For <ISiteAvailabilityRepository>();
            var controller = new SiteAvailabilityController(repository);
            var sites      = new List <Site>();

            sites.Add(new Site {
                Id = Guid.NewGuid(), Url = "url1", IsAvailable = false
            });
            sites.Add(new Site {
                Id = Guid.NewGuid(), Url = "url2", IsAvailable = true
            });
            repository.GetAllSitesAsync().Returns(Task.FromResult <IEnumerable <Site> >(sites));
            var result = await controller.Get();

            Assert.AreEqual(sites, result);
        }
        public async Task TestPostAsyncFail()
        {
            var repository = Substitute.For <ISiteAvailabilityRepository>();
            var controller = new SiteAvailabilityController(repository);
            var site       = new Site {
                Id = Guid.NewGuid(), Url = "", IsAvailable = false
            };

            repository.AddSiteAsync(site).Returns(Task.FromResult <Site>(site));
            controller.ValidateViewModel <Site, SiteAvailabilityController>(site);
            var result = await controller.PostAsync(site);

            Assert.IsTrue(result is BadRequestObjectResult);
            var failResult = (BadRequestObjectResult)result;

            Assert.AreEqual(StatusCodes.Status400BadRequest, failResult.StatusCode);
            Assert.AreEqual(false, controller.ModelState.IsValid);
        }