public async void HasMemberSubmissions_ForOganisationWithNoAssociatedScheme_ReturnsFalse()
        {
            using (DatabaseWrapper database = new DatabaseWrapper())
            {
                ModelHelper helper = new ModelHelper(database.Model);

                // Arrange
                var scheme1 = helper.CreateScheme();

                var upload1 = helper.CreateMemberUpload(scheme1);
                upload1.IsSubmitted = true;
                upload1.ComplianceYear = 2016;

                var upload2 = helper.CreateMemberUpload(scheme1);
                upload2.IsSubmitted = true;
                upload2.ComplianceYear = 2016;

                var organisation = helper.CreateOrganisation();

                database.Model.SaveChanges();

                var dataAccess = new GetOrganisationOverviewDataAccess(database.WeeeContext);

                // Act
                var result = await dataAccess.HasMemberSubmissions(organisation.Id);

                // Assert
                Assert.False(result);
            }
        }
        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 FetchDataReturnComplianceYearsForSchemeDataAccess(database.WeeeContext);

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

                // Assert
                Assert.Equal(scheme2.Id, result.Id);
            }
        }
        public async void Fetch_TwoUploadsForTheSameComplianceYear_OnlyReturnsTheYearOnce()
        {
            using (var database = new DatabaseWrapper())
            {
                const int complianceYear = 2005;

                // Arrange
                var modelHelper = new ModelHelper(database.Model);

                var organisation = modelHelper.CreateOrganisation();
                await database.Model.SaveChangesAsync();

                var scheme = modelHelper.CreateScheme(organisation);
                await database.Model.SaveChangesAsync();

                var firstDataReturn = modelHelper.CreateDataReturn(scheme, complianceYear, (int)QuarterType.Q1);
                await database.Model.SaveChangesAsync();

                var firstDataReturnVersion = modelHelper.CreateDataReturnVersion(scheme, complianceYear, (int)QuarterType.Q1, true, firstDataReturn);
                modelHelper.CreateDataReturnUpload(scheme, firstDataReturnVersion);
                await database.Model.SaveChangesAsync();

                var secondDataReturn = modelHelper.CreateDataReturn(scheme, complianceYear, (int)QuarterType.Q2);
                await database.Model.SaveChangesAsync();

                var secondDataReturnVersion = modelHelper.CreateDataReturnVersion(scheme, complianceYear, (int)QuarterType.Q2, true, secondDataReturn);
                modelHelper.CreateDataReturnUpload(scheme, secondDataReturnVersion);
                await database.Model.SaveChangesAsync();

                // Act
                var dataAccess = new FetchDataReturnComplianceYearsForSchemeDataAccess(database.WeeeContext);
                var result = await dataAccess.GetDataReturnComplianceYearsForScheme(scheme.Id);

                // Assert
                Assert.Single(result.Where(y => y == complianceYear));
            }
        }
        public async Task FetchSchemeAsync_ReturnsSchemeWithSpecifiedOrganisationId()
        {
            using (DatabaseWrapper database = new DatabaseWrapper())
            {
                // Arrange
                var modelHelper = new ModelHelper(database.Model);

                var organisationId = new Guid("C826DCE8-78EB-4BE4-B419-4DE73D1AD181");

                var organisation = modelHelper.CreateOrganisation();
                organisation.Id = organisationId;

                modelHelper.CreateScheme(organisation);

                database.Model.SaveChanges();

                OrganisationDetailsDataAccess dataAccess = new OrganisationDetailsDataAccess(database.WeeeContext);

                // Act
                Domain.Scheme.Scheme result = await dataAccess.FetchSchemeAsync(organisationId);

                // Assert
                Assert.NotNull(result);
                Assert.Equal(organisationId, result.OrganisationId);
            }
        }
        public async Task HasDataReturnSubmissions_ForOganisationWithNoAssociatedScheme_ReturnsFalse()
        {
            using (DatabaseWrapper database = new DatabaseWrapper())
            {
                ModelHelper helper = new ModelHelper(database.Model);

                // Arrange
                var organisation = helper.CreateOrganisation();

                database.Model.SaveChanges();

                var dataAccess = new GetOrganisationOverviewDataAccess(database.WeeeContext);

                // Act
                var result = await dataAccess.HasDataReturnSubmissions(organisation.Id);

                // Assert
                Assert.False(result);
            }
        }
        public async void HasMultipleManageableOrganisationUsers_ForOrganisationWithMoreThanOneUser_AllRejectedStatuses_ReturnsFalse()
        {
            using (DatabaseWrapper database = new DatabaseWrapper())
            {
                ModelHelper helper = new ModelHelper(database.Model);

                // Arrange
                var organisation = helper.CreateOrganisation();

                // Rejected users
                helper.CreateOrganisationUser(organisation, "Test user1", 3);
                helper.CreateOrganisationUser(organisation, "Test user2", 3);

                database.Model.SaveChanges();

                var dataAccess = new GetOrganisationOverviewDataAccess(database.WeeeContext);

                // Act
                var result = await dataAccess.HasMultipleManageableOrganisationUsers(organisation.Id);

                // Assert
                Assert.False(result);
            }
        }