public async void GetSchemeByIdHandler_HappyPath_ReturnsSchemeData()
        {
            // Arrage
            Guid schemeId = new Guid("AC9116BC-5732-4F80-9AED-A6E2A0C4C1F1");

            ISchemeDataAccess dataAccess = A.Fake<ISchemeDataAccess>();
            Scheme scheme = A.Fake<Scheme>();
            A.CallTo(() => dataAccess.GetSchemeOrDefault(schemeId)).Returns(scheme);

            IWeeeAuthorization authorization = new AuthorizationBuilder()
                .AllowInternalAreaAccess()
                .Build();

            var mapper = A.Fake<IMapper>();
            SchemeData schemeData = A.Fake<SchemeData>();
            A.CallTo(() => mapper.Map<Scheme, SchemeData>(scheme))
                .Returns(schemeData);

            GetSchemeByIdHandler handler = new GetSchemeByIdHandler(dataAccess, mapper, authorization);

            GetSchemeById request = new GetSchemeById(schemeId);

            // Act
            SchemeData result = await handler.HandleAsync(request);

            // Assert
            Assert.Equal(schemeData, result);
        }
        public async void GetSchemeByIdHandler_WithNonInternalUser_ThrowsSecurityException(AuthorizationBuilder.UserType userType)
        {
            // Arrage
            Guid schemeId = new Guid("AC9116BC-5732-4F80-9AED-A6E2A0C4C1F1");

            ISchemeDataAccess dataAccess = A.Fake<ISchemeDataAccess>();
            Scheme scheme = A.Fake<Scheme>();
            A.CallTo(() => dataAccess.GetSchemeOrDefault(schemeId)).Returns(scheme);
            
            IWeeeAuthorization authorization = AuthorizationBuilder.CreateFromUserType(userType);

            var mapper = A.Fake<IMapper>();
            SchemeData schemeData = A.Fake<SchemeData>();
            A.CallTo(() => mapper.Map<Scheme, SchemeData>(scheme))
                .Returns(schemeData);

            GetSchemeByIdHandler handler = new GetSchemeByIdHandler(dataAccess, mapper, authorization);

            GetSchemeById request = new GetSchemeById(schemeId);

            // Act
            Func<Task<SchemeData>> action = () => handler.HandleAsync(request);

            // Assert
            await Assert.ThrowsAsync<SecurityException>(action);
        }
        public async void GetSchemeByIdHandler_WithUnknownId_ThrowsArgumentException()
        {
            // Arrage
            Guid badSchemeId = new Guid("88C60FAC-1172-43F2-9AA5-7E79A8877F92");

            ISchemeDataAccess dataAccess = A.Fake <ISchemeDataAccess>();

            A.CallTo(() => dataAccess.GetSchemeOrDefault(badSchemeId)).Returns((Scheme)null);

            IWeeeAuthorization authorization = new AuthorizationBuilder()
                                               .AllowInternalAreaAccess()
                                               .Build();

            var mapper = A.Fake <IMapper>();

            GetSchemeByIdHandler handler = new GetSchemeByIdHandler(dataAccess, mapper, authorization);

            GetSchemeById request = new GetSchemeById(badSchemeId);

            // Act
            Func <Task <SchemeData> > action = () => handler.HandleAsync(request);

            // Assert
            await Assert.ThrowsAsync <ArgumentException>(action);
        }
        public async void GetSchemeByIdHandler_WithNonInternalUser_ThrowsSecurityException(AuthorizationBuilder.UserType userType)
        {
            // Arrage
            Guid schemeId = new Guid("AC9116BC-5732-4F80-9AED-A6E2A0C4C1F1");

            ISchemeDataAccess dataAccess = A.Fake <ISchemeDataAccess>();
            Scheme            scheme     = A.Fake <Scheme>();

            A.CallTo(() => dataAccess.GetSchemeOrDefault(schemeId)).Returns(scheme);

            IWeeeAuthorization authorization = AuthorizationBuilder.CreateFromUserType(userType);

            var        mapper     = A.Fake <IMapper>();
            SchemeData schemeData = A.Fake <SchemeData>();

            A.CallTo(() => mapper.Map <Scheme, SchemeData>(scheme))
            .Returns(schemeData);

            GetSchemeByIdHandler handler = new GetSchemeByIdHandler(dataAccess, mapper, authorization);

            GetSchemeById request = new GetSchemeById(schemeId);

            // Act
            Func <Task <SchemeData> > action = () => handler.HandleAsync(request);

            // Assert
            await Assert.ThrowsAsync <SecurityException>(action);
        }
        public async void GetSchemeByIdHandler_HappyPath_ReturnsSchemeData()
        {
            // Arrage
            Guid schemeId = new Guid("AC9116BC-5732-4F80-9AED-A6E2A0C4C1F1");

            ISchemeDataAccess dataAccess = A.Fake <ISchemeDataAccess>();
            Scheme            scheme     = A.Fake <Scheme>();

            A.CallTo(() => dataAccess.GetSchemeOrDefault(schemeId)).Returns(scheme);

            IWeeeAuthorization authorization = new AuthorizationBuilder()
                                               .AllowInternalAreaAccess()
                                               .Build();

            var        mapper     = A.Fake <IMapper>();
            SchemeData schemeData = A.Fake <SchemeData>();

            A.CallTo(() => mapper.Map <Scheme, SchemeData>(scheme))
            .Returns(schemeData);

            GetSchemeByIdHandler handler = new GetSchemeByIdHandler(dataAccess, mapper, authorization);

            GetSchemeById request = new GetSchemeById(schemeId);

            // Act
            SchemeData result = await handler.HandleAsync(request);

            // Assert
            Assert.Equal(schemeData, result);
        }
        public async Task <ActionResult> DownloadProducerDetailsCsv(int complianceYear, Guid?schemeId, Guid?authorityId,
                                                                    bool includeRemovedProducers, bool includeBrandNames)
        {
            var fileName = new StringBuilder();

            fileName.AppendFormat("{0:D4}", complianceYear);

            if (schemeId != null)
            {
                using (var client = apiClient())
                {
                    var requestScheme = new GetSchemeById(schemeId.Value);
                    var scheme        = await client.SendAsync(User.GetAccessToken(), requestScheme);

                    fileName.AppendFormat("_{0}", scheme.ApprovalName);
                }
            }

            if (authorityId != null)
            {
                using (var client = apiClient())
                {
                    var requestAuthority = new GetUKCompetentAuthorityById(authorityId.Value);
                    var authorityData    = await client.SendAsync(User.GetAccessToken(), requestAuthority);

                    fileName.AppendFormat("_{0}", authorityData.Abbreviation);
                }
            }

            fileName.AppendFormat("_producerdetails_{0:ddMMyyyy_HHmm}.csv", SystemTime.UtcNow);

            CSVFileData membersDetailsCsvData;

            using (var client = apiClient())
            {
                var request =
                    new GetMemberDetailsCsv(complianceYear, includeRemovedProducers, schemeId, authorityId, includeBrandNames);
                membersDetailsCsvData = await client.SendAsync(User.GetAccessToken(), request);
            }

            var data = new UTF8Encoding().GetBytes(membersDetailsCsvData.FileContent);

            return(File(data, "text/csv", CsvFilenameFormat.FormatFileName(fileName.ToString())));
        }
        public async void GetSchemeByIdHandler_WithUnknownId_ThrowsArgumentException()
        {
            // Arrage
            Guid badSchemeId = new Guid("88C60FAC-1172-43F2-9AA5-7E79A8877F92");

            ISchemeDataAccess dataAccess = A.Fake<ISchemeDataAccess>();
            A.CallTo(() => dataAccess.GetSchemeOrDefault(badSchemeId)).Returns((Scheme)null);

            IWeeeAuthorization authorization = new AuthorizationBuilder()
                .AllowInternalAreaAccess()
                .Build();

            var mapper = A.Fake<IMapper>();

            GetSchemeByIdHandler handler = new GetSchemeByIdHandler(dataAccess, mapper, authorization);

            GetSchemeById request = new GetSchemeById(badSchemeId);

            // Act
            Func<Task<SchemeData>> action = () => handler.HandleAsync(request);

            // Assert
            await Assert.ThrowsAsync<ArgumentException>(action);
        }
        public async Task<ActionResult> DownloadProducerDetailsCsv(int complianceYear, Guid? schemeId, Guid? authorityId,
            bool includeRemovedProducers, bool includeBrandNames)
        {
            StringBuilder fileName = new StringBuilder();

            fileName.AppendFormat("{0:D4}", complianceYear);

            if (schemeId != null)
            {
                using (IWeeeClient client = apiClient())
                {
                    GetSchemeById requestScheme = new GetSchemeById(schemeId.Value);
                    SchemeData scheme = await client.SendAsync(User.GetAccessToken(), requestScheme);

                    fileName.AppendFormat("_{0}", scheme.ApprovalName);
                }
            }

            if (authorityId != null)
            {
                using (IWeeeClient client = apiClient())
                {
                    GetUKCompetentAuthorityById requestAuthority = new GetUKCompetentAuthorityById(authorityId.Value);
                    UKCompetentAuthorityData authorityData = await client.SendAsync(User.GetAccessToken(), requestAuthority);

                    fileName.AppendFormat("_{0}", authorityData.Abbreviation);
                }
            }

            fileName.AppendFormat("_producerdetails_{0:ddMMyyyy_HHmm}.csv", SystemTime.UtcNow);

            CSVFileData membersDetailsCsvData;
            using (IWeeeClient client = apiClient())
            {
                GetMemberDetailsCsv request = 
                    new GetMemberDetailsCsv(complianceYear, includeRemovedProducers, schemeId, authorityId, includeBrandNames);
                membersDetailsCsvData = await client.SendAsync(User.GetAccessToken(), request);
            }

            byte[] data = new UTF8Encoding().GetBytes(membersDetailsCsvData.FileContent);

            return File(data, "text/csv", CsvFilenameFormat.FormatFileName(fileName.ToString()));
        }