public async Task FetchSchemeByOrganisationIdAsync_ThrowsInvalidOperationException_WhenNoMatchingOrganisationId()
        {
            using (DatabaseWrapper database = new DatabaseWrapper())
            {
                var dataAccess = new ProcessDataReturnXmlFileDataAccess(database.WeeeContext);

                await Assert.ThrowsAsync <InvalidOperationException>(() => dataAccess.FetchSchemeByOrganisationIdAsync(Guid.NewGuid()));
            }
        }
        public async Task FetchSchemeByOrganisationIdAsync_ThrowsInvalidOperationException_WhenNoMatchingOrganisationId()
        {
            using (DatabaseWrapper database = new DatabaseWrapper())
            {
                var dataAccess = new ProcessDataReturnXmlFileDataAccess(database.WeeeContext);

                await Assert.ThrowsAsync<InvalidOperationException>(() => dataAccess.FetchSchemeByOrganisationIdAsync(Guid.NewGuid()));
            }
        }
        public async Task AddAndSaveAsync_AddsDataReturnUpload_ToWeeeContextDataReturnsUploads()
        {
            using (DatabaseWrapper database = new DatabaseWrapper())
            {
                // Arrange
                ModelHelper  helper       = new ModelHelper(database.Model);
                DomainHelper domainHelper = new DomainHelper(database.WeeeContext);

                var scheme = helper.CreateScheme();
                helper.GetOrCreateRegisteredProducer(scheme, 2016, "AAAA");

                database.Model.SaveChanges();

                var upload = new Domain.DataReturns.DataReturnUpload(domainHelper.GetScheme(scheme.Id), "Upload Data", new List <Domain.DataReturns.DataReturnUploadError>(), "File name", 2016, 1);

                var dataAccess = new ProcessDataReturnXmlFileDataAccess(database.WeeeContext);

                // Act
                await dataAccess.AddAndSaveAsync(upload);

                // Assert
                Assert.Single(database.WeeeContext.DataReturnsUploads, u => u.Id == upload.Id);
            }
        }
        public async Task FetchSchemeByOrganisationIdAsync_GetsSchemeForMatchingOrganisationId()
        {
            using (DatabaseWrapper database = new DatabaseWrapper())
            {
                // Arrange
                ModelHelper helper = new ModelHelper(database.Model);

                var organisation1 = helper.CreateOrganisation();
                helper.CreateScheme(organisation1);

                var organisation2 = helper.CreateOrganisation();
                var scheme2       = helper.CreateScheme(organisation2);

                database.Model.SaveChanges();

                var dataAccess = new ProcessDataReturnXmlFileDataAccess(database.WeeeContext);

                // Act
                var result = await dataAccess.FetchSchemeByOrganisationIdAsync(organisation2.Id);

                // Assert
                Assert.Equal(scheme2.Id, result.Id);
            }
        }
        public async Task AddAndSaveAsync_AddsDataReturnUpload_ToWeeeContextDataReturnsUploads()
        {
            using (DatabaseWrapper database = new DatabaseWrapper())
            {
                // Arrange
                ModelHelper helper = new ModelHelper(database.Model);
                DomainHelper domainHelper = new DomainHelper(database.WeeeContext);

                var scheme = helper.CreateScheme();
                helper.GetOrCreateRegisteredProducer(scheme, 2016, "AAAA");

                database.Model.SaveChanges();

                var upload = new Domain.DataReturns.DataReturnUpload(domainHelper.GetScheme(scheme.Id), "Upload Data", new List<Domain.DataReturns.DataReturnUploadError>(), "File name", 2016, 1);

                var dataAccess = new ProcessDataReturnXmlFileDataAccess(database.WeeeContext);

                // Act
                await dataAccess.AddAndSaveAsync(upload);

                // Assert
                Assert.Single(database.WeeeContext.DataReturnsUploads, u => u.Id == upload.Id);
            }
        }
        public async Task FetchSchemeByOrganisationIdAsync_GetsSchemeForMatchingOrganisationId()
        {
            using (DatabaseWrapper database = new DatabaseWrapper())
            {
                // Arrange
                ModelHelper helper = new ModelHelper(database.Model);

                var organisation1 = helper.CreateOrganisation();
                helper.CreateScheme(organisation1);

                var organisation2 = helper.CreateOrganisation();
                var scheme2 = helper.CreateScheme(organisation2);

                database.Model.SaveChanges();

                var dataAccess = new ProcessDataReturnXmlFileDataAccess(database.WeeeContext);

                // Act
                var result = await dataAccess.FetchSchemeByOrganisationIdAsync(organisation2.Id);

                // Assert
                Assert.Equal(scheme2.Id, result.Id);
            }
        }