public async void DoesNotDeductChargeFromMemberUpload_WhenAlreadyInvoiced()
        {
            // Arrange
            var builder = new RemoveProducerHandlerBuilder();

            var memberUpload = new MemberUpload(A.Dummy <Guid>(), A.Dummy <string>(), null, 100, A.Dummy <int>(), A.Dummy <Scheme>(), A.Dummy <string>(), null, A.Dummy <bool>());

            memberUpload.Submit(A.Dummy <User>());
            memberUpload.AssignToInvoiceRun(A.Dummy <InvoiceRun>());

            var producerSubmission = A.Fake <ProducerSubmission>();

            A.CallTo(() => producerSubmission.ChargeThisUpdate)
            .Returns(20);
            A.CallTo(() => producerSubmission.MemberUpload)
            .Returns(memberUpload);

            A.CallTo(() => builder.RemoveProducerDataAccess.GetProducerSubmissionsForRegisteredProducer(A <Guid> ._))
            .Returns(new[] { producerSubmission });

            // Act
            await builder.Build().HandleAsync(A.Dummy <RemoveProducer>());

            // Assert
            A.CallTo(() => builder.RemoveProducerDataAccess.GetProducerSubmissionsForRegisteredProducer(A <Guid> ._))
            .MustHaveHappened();

            Assert.Equal(100, memberUpload.TotalCharges);
        }
        public async void WhenUserIsAuthorised_GetsProducer_AndProducerSubmissions_AndSaveChanges()
        {
            // Arrange
            var builder = new RemoveProducerHandlerBuilder();
            var request = new RemoveProducer(Guid.NewGuid());

            // Act
            await builder.Build().HandleAsync(request);

            // Assert
            A.CallTo(() => builder.RemoveProducerDataAccess.GetProducerRegistration(request.RegisteredProducerId))
            .MustHaveHappened(Repeated.Exactly.Once);

            A.CallTo(() => builder.RemoveProducerDataAccess.GetProducerSubmissionsForRegisteredProducer(request.RegisteredProducerId))
            .MustHaveHappened(Repeated.Exactly.Once);

            A.CallTo(() => builder.RemoveProducerDataAccess.SaveChangesAsync())
            .MustHaveHappened(Repeated.Exactly.Once);
        }
        public async void WhenUserIsUnauthorised_DoesNotGetProducer_OrSaveChanges()
        {
            // Arrange
            var builder = new RemoveProducerHandlerBuilder();

            A.CallTo(() => builder.WeeeAuthorization.EnsureCanAccessInternalArea())
            .Throws <SecurityException>();

            var request = new RemoveProducer(Guid.NewGuid());

            // Act
            await Assert.ThrowsAsync <SecurityException>(() => builder.Build().HandleAsync(request));

            // Assert
            A.CallTo(() => builder.RemoveProducerDataAccess.GetProducerRegistration(A <Guid> ._))
            .MustNotHaveHappened();

            A.CallTo(() => builder.RemoveProducerDataAccess.SaveChangesAsync())
            .MustNotHaveHappened();
        }