public async Task PostConfirmRemoval_WithInvalidModel_CallsApiAndPopulatesViewModel()
        {
            // Arrange
            Guid registeredProducerId = new Guid("9F253FE4-B644-4EA1-B58E-19C735512449");

            ProducerDetailsScheme producerDetailsScheme = A.Dummy<ProducerDetailsScheme>();

            IWeeeClient weeeClient = A.Fake<IWeeeClient>();
            A.CallTo(() => weeeClient.SendAsync(A<string>._, A<GetProducerDetailsByRegisteredProducerId>._))
                .WhenArgumentsMatch(a => a.Get<GetProducerDetailsByRegisteredProducerId>("request").RegisteredProducerId == registeredProducerId)
                .Returns(producerDetailsScheme);

            ProducersController controller = new ProducersController(
                A.Dummy<BreadcrumbService>(),
                A.Dummy<ISearcher<ProducerSearchResult>>(),
                () => weeeClient,
                A.Dummy<IWeeeCache>());

            controller.ModelState.AddModelError("SomeProperty", "Exception");

            // Act
            ActionResult result = await controller.ConfirmRemoval(registeredProducerId, A.Dummy<ConfirmRemovalViewModel>());

            // Assert
            ViewResult viewResult = result as ViewResult;
            Assert.NotNull(viewResult);

            ConfirmRemovalViewModel viewModel = viewResult.Model as ConfirmRemovalViewModel;
            Assert.NotNull(viewModel);

            Assert.Equal(producerDetailsScheme, viewModel.Producer);
        }
        public async void GetConfirmRemoval_ReturnsHttpForbiddenResult_WhenCanRemoveProducerIsFalse()
        {
            // Arrange
            IWeeeClient weeeClient = A.Fake<IWeeeClient>();

            ProducersController controller = new ProducersController(
                A.Dummy<BreadcrumbService>(),
                A.Dummy<ISearcher<ProducerSearchResult>>(),
                () => weeeClient,
                A.Dummy<IWeeeCache>());

            A.CallTo(() => weeeClient.SendAsync(A<string>._, A<GetProducerDetailsByRegisteredProducerId>._))
                .Returns(
                new ProducerDetailsScheme
                {
                    CanRemoveProducer = false
                });

            // Act
            var result = await controller.ConfirmRemoval(A.Dummy<Guid>());

            // Assert
            Assert.IsType<HttpForbiddenResult>(result);
        }
        public async Task PostConfirmRemoval_WithInvalidModel_ReturnsConfirmRemovalView()
        {
            // Arrange
            ProducersController controller = new ProducersController(
                A.Dummy<BreadcrumbService>(),
                A.Dummy<ISearcher<ProducerSearchResult>>(),
                () => A.Dummy<IWeeeClient>(),
                A.Dummy<IWeeeCache>());

            controller.ModelState.AddModelError("SomeProperty", "Exception");

            // Act
            ActionResult result = await controller.ConfirmRemoval(A.Dummy<Guid>(), A.Dummy<ConfirmRemovalViewModel>());

            // Assert
            ViewResult viewResult = result as ViewResult;
            Assert.NotNull(viewResult);

            Assert.True(string.IsNullOrEmpty(viewResult.ViewName) || viewResult.ViewName.ToLowerInvariant() == "confirmremoval");
        }
        public async void GetConfirmRemoval_ReturnsConfirmRemovalView_WhenCanRemoveProducerIsTrue()
        {
            // Arrange
            IWeeeClient weeeClient = A.Fake<IWeeeClient>();

            ProducersController controller = new ProducersController(
                A.Dummy<BreadcrumbService>(),
                A.Dummy<ISearcher<ProducerSearchResult>>(),
                () => weeeClient,
                A.Dummy<IWeeeCache>());

            A.CallTo(() => weeeClient.SendAsync(A<string>._, A<GetProducerDetailsByRegisteredProducerId>._))
                .Returns(
                new ProducerDetailsScheme
                {
                    CanRemoveProducer = true
                });

            // Act
            ActionResult result = await controller.ConfirmRemoval(A.Dummy<Guid>());

            // Assert
            ViewResult viewResult = result as ViewResult;
            Assert.NotNull(viewResult);

            Assert.True(string.IsNullOrEmpty(viewResult.ViewName) || viewResult.ViewName.ToLowerInvariant() == "confirmremoval");
        }