public async Task GetTogglesAsync_GetResponseWith2ToggleDtos_Ok()
        {
            var toggles         = ToggleFakeData.GetToggles();
            var unitoOfWorkMock = new Mock <IUnitOfWork <DbContext> >();
            var repositoryMock  = new Mock <IRepository <Toggle> >();

            repositoryMock.Setup(r => r.GetAsync()).Returns(Task.FromResult(toggles));

            var repositoryFactoryMock = new Mock <IRepositoryFactory>();

            repositoryFactoryMock.Setup(r => r.CreateRepository <Toggle>(unitoOfWorkMock.Object)).Returns(repositoryMock.Object);

            var manager = new ToggleBusinessManager(unitoOfWorkMock.Object, repositoryFactoryMock.Object);

            var response = await manager.GetTogglesAsync();

            Assert.IsNotNull(response);
            Assert.IsNotNull(response.IsValid);
            Assert.AreEqual(response.Result.Count(), 2);
            foreach (var item in response.Result)
            {
                Assert.IsNotNull(item.Name);
                Assert.IsNotNull(item.Id);
                Assert.IsNotNull(item.Applications);
            }
        }
        public void DeleteToggleAsync_Ok()
        {
            var toggle1 = ToggleFakeData.GetToggleDto1();

            var mock = new Mock <IToggleBusinessManager>();

            mock.Setup(toggleBusinessManager => toggleBusinessManager.DeleteToggle(toggle1.Id));

            using (var controller = new ToggleController(mock.Object))
            {
                var responseActionResult = controller.DeleteToggle(toggle1.Id) as OkResult;
                Assert.IsNotNull(responseActionResult);
            }
        }
        public async Task GetTogglesAsyncc_WithoutId()
        {
            var toogle          = ToggleFakeData.GetToggles().FirstOrDefault();
            var unitoOfWorkMock = new Mock <IUnitOfWork <DbContext> >();
            var repositoryMock  = new Mock <IRepository <Toggle> >();

            repositoryMock.Setup(r => r.FindIdAsync(toogle.Id)).Returns(Task.FromResult(toogle));

            var repositoryFactoryMock = new Mock <IRepositoryFactory>();

            repositoryFactoryMock.Setup(r => r.CreateRepository <Toggle>(unitoOfWorkMock.Object)).Returns(repositoryMock.Object);

            var manager = new ToggleBusinessManager(unitoOfWorkMock.Object, repositoryFactoryMock.Object);
            await manager.GetToggleAsync(string.Empty);
        }
        public async Task PutToggleAsync_WithoutToggleDto()
        {
            var toggle          = ToggleFakeData.GetToggle1();
            var unitoOfWorkMock = new Mock <IUnitOfWork <DbContext> >();
            var repositoryMock  = new Mock <IRepository <Toggle> >();

            repositoryMock.Setup(r => r.FindIdAsync(toggle.Id)).Returns(Task.FromResult(toggle));

            var repositoryFactoryMock = new Mock <IRepositoryFactory>();

            repositoryFactoryMock.Setup(r => r.CreateRepository <Toggle>(unitoOfWorkMock.Object)).Returns(repositoryMock.Object);

            var manager = new ToggleBusinessManager(unitoOfWorkMock.Object, repositoryFactoryMock.Object);
            await manager.PutToggleAsync(null);
        }
        public async Task PostToggleAsync_WithoutToggleDtoId()
        {
            var toggle = ToggleFakeData.GetToggleDto1();

            toggle.Id = string.Empty;
            var unitoOfWorkMock = new Mock <IUnitOfWork <DbContext> >();
            var repositoryMock  = new Mock <IRepository <Toggle> >();

            var repositoryFactoryMock = new Mock <IRepositoryFactory>();

            repositoryFactoryMock.Setup(r => r.CreateRepository <Toggle>(unitoOfWorkMock.Object)).Returns(repositoryMock.Object);

            var manager = new ToggleBusinessManager(unitoOfWorkMock.Object, repositoryFactoryMock.Object);
            await manager.PostToggleAsync(toggle);
        }
        public void DeleteToggleAsync_ToogleIdNotExists()
        {
            var toggle          = ToggleFakeData.GetToggle1();
            var unitoOfWorkMock = new Mock <IUnitOfWork <DbContext> >();
            var repositoryMock  = new Mock <IRepository <Toggle> >();

            repositoryMock.Setup(r => r.GetById(toggle.Id)).Returns(default(Toggle));

            var repositoryFactoryMock = new Mock <IRepositoryFactory>();

            repositoryFactoryMock.Setup(r => r.CreateRepository <Toggle>(unitoOfWorkMock.Object)).Returns(repositoryMock.Object);

            var manager = new ToggleBusinessManager(unitoOfWorkMock.Object, repositoryFactoryMock.Object);

            manager.DeleteToggle(toggle.Id);
        }
        public async Task PutToggleAsync_InternalServerError()
        {
            var toogleDto = ToggleFakeData.GetToggleDto2();
            var id        = Guid.NewGuid().ToString();
            var mock      = new Mock <IToggleBusinessManager>();

            mock.Setup(toggleBusinessManager => toggleBusinessManager.PutToggleAsync(toogleDto)).Throws(new NullReferenceException());

            using (var controller = new ToggleController(mock.Object))
            {
                var responseActionResult = await controller.PutToggleAsync(toogleDto) as ExceptionResult;

                Assert.IsNotNull(responseActionResult);
                Assert.IsTrue(responseActionResult.Exception is NullReferenceException);
            }
        }
        public async Task GetToggleAsync_Ok()
        {
            var toggle          = ToggleFakeData.GetToggle1();
            var unitoOfWorkMock = new Mock <IUnitOfWork <DbContext> >();
            var repositoryMock  = new Mock <IRepository <Toggle> >();

            repositoryMock.Setup(r => r.FindIdAsync(toggle.Id)).Returns(Task.FromResult(toggle));

            var repositoryFactoryMock = new Mock <IRepositoryFactory>();

            repositoryFactoryMock.Setup(r => r.CreateRepository <Toggle>(unitoOfWorkMock.Object)).Returns(repositoryMock.Object);

            var manager  = new ToggleBusinessManager(unitoOfWorkMock.Object, repositoryFactoryMock.Object);
            var response = await manager.GetToggleAsync(toggle.Id);

            Assert.IsNotNull(response);
            Assert.IsNotNull(response.IsValid);
            Assert.AreEqual(response.Result.Id, toggle.Id);
        }
        public async Task PostToggleAsync_Ok()
        {
            var toogleDto = ToggleFakeData.GetToggleDto2();

            var mock = new Mock <IToggleBusinessManager>();

            mock.Setup(toggleBusinessManager => toggleBusinessManager.PostToggleAsync(toogleDto)).Returns(Task.FromResult(new Response <ToggleDto> {
                IsValid = true, Result = toogleDto
            }));

            using (var controller = new ToggleController(mock.Object))
            {
                var responseActionResult = await controller.PostToggleAsync(toogleDto) as OkNegotiatedContentResult <Response <ToggleDto> >;

                Assert.IsNotNull(responseActionResult);
                Assert.IsTrue(responseActionResult.Content.IsValid);
                Assert.IsNotNull(responseActionResult.Content.Result);
            }
        }
        public async Task GetToggledAsync_Ok()
        {
            var toggle1 = ToggleFakeData.GetToggleDto1();

            var mock = new Mock <IToggleBusinessManager>();

            mock.Setup(toggleBusinessManager => toggleBusinessManager.GetToggleAsync(toggle1.Id)).Returns(Task.FromResult(ToggleFakeData.GetResponseWithToggleDto1()));

            using (var controller = new ToggleController(mock.Object))
            {
                var responseActionResult = (await controller.GetToggleAsync(toggle1.Id)) as OkNegotiatedContentResult <Response <ToggleDto> >;
                Assert.IsNotNull(responseActionResult);
                Assert.IsNotNull(responseActionResult.Content);
                Assert.IsNotNull(responseActionResult.Content.Result);
                Assert.IsNotNull(responseActionResult.Content.Result.Id);
                Assert.IsNotNull(responseActionResult.Content.Result.Name);

                Assert.AreEqual(toggle1.Id, responseActionResult.Content.Result.Id);
                Assert.AreEqual(toggle1.Name, responseActionResult.Content.Result.Name);
                Assert.AreEqual(toggle1.Version, responseActionResult.Content.Result.Version);
                Assert.AreEqual(toggle1.Applications.Count(), responseActionResult.Content.Result.Applications.Count());
            }
        }
        public void GetToggles()
        {
            var toggles = ToggleFakeData.GetToggles();

            AssertToggles(toggles);
        }
        public async Task GetTogglesAsync_GetResponseWithErrorCodeAndMessage_Ok()
        {
            var mock = new Mock <IToggleBusinessManager>();

            mock.Setup(toggleBusinessManager => toggleBusinessManager.GetTogglesAsync()).Returns(Task.FromResult(ToggleFakeData.GetResponseWithErrorCodeAndMessage()));

            using (var controller = new ToggleController(mock.Object))
            {
                var responseActionResult = await controller.GetTogglesAsync() as OkNegotiatedContentResult <Response <IEnumerable <ToggleDto> > >;

                Assert.IsNotNull(responseActionResult);
                Assert.IsNotNull(responseActionResult);
                Assert.IsNotNull(responseActionResult.Content.ErrorCode);
                Assert.IsNotNull(responseActionResult.Content.Message);
                Assert.IsFalse(responseActionResult.Content.IsValid);
                Assert.IsNull(responseActionResult.Content.Result);
            }
        }
        public async Task GetTogglesAsync_GetResponseWith2ToggleDtos_Ok()
        {
            var mock = new Mock <IToggleBusinessManager>();

            mock.Setup(toggleBusinessManager => toggleBusinessManager.GetTogglesAsync()).Returns(Task.FromResult(ToggleFakeData.GetResponseWith2ToggleDtos()));

            using (var controller = new ToggleController(mock.Object))
            {
                var responseActionResult = await controller.GetTogglesAsync() as OkNegotiatedContentResult <Response <IEnumerable <ToggleDto> > >;

                Assert.IsNotNull(responseActionResult);
                Assert.IsNotNull(responseActionResult);
                Assert.IsNull(responseActionResult.Content.ErrorCode);
                Assert.IsNull(responseActionResult.Content.Message);
                Assert.IsTrue(responseActionResult.Content.IsValid);
                Assert.IsTrue(responseActionResult.Content.Result.Count() == 2);
                foreach (var item in responseActionResult.Content.Result)
                {
                    Assert.IsNotNull(item.Id);
                    Assert.IsNotNull(item.Name);
                    Assert.IsNotNull(item.Version);
                    Assert.IsNotNull(item.Applications);
                    foreach (var app in item.Applications)
                    {
                        Assert.IsNotNull(app.Id);
                        Assert.IsNotNull(app.Name);
                    }
                }
            }
        }