public async Task SaveCollectionZipAsync(
            string zipFileName,
            string container,
            MetaData metaDatas,
            DevolvedPostcodes devolvedPostcodes,
            IReadOnlyCollection <Employer> employers,
            IReadOnlyCollection <EPAOrganisation> epaOrganisations,
            IReadOnlyCollection <LARSFrameworkDesktop> larsFrameworks,
            IReadOnlyCollection <LARSFrameworkAimDesktop> larsFrameworkAims,
            IReadOnlyCollection <LARSLearningDelivery> larsLearningDeliveries,
            IReadOnlyCollection <LARSStandard> larsStandards,
            IReadOnlyCollection <Organisation> organisations,
            IReadOnlyCollection <Postcode> postcodes,
            CancellationToken cancellationToken)
        {
            _logger.LogInfo("Starting Zip File Creation");
            using (var stream = await _fileService.OpenWriteStreamAsync(zipFileName, container, cancellationToken))
            {
                using (var zipArchive = new ZipArchive(stream, ZipArchiveMode.Create, true))
                {
                    AddFileToZip(zipArchive, DesktopReferenceDataConstants.MetaDataFile, metaDatas);
                    AddFileToZip(zipArchive, DesktopReferenceDataConstants.DevolvedPostcodesFile, devolvedPostcodes.Postcodes);
                    AddFileToZip(zipArchive, DesktopReferenceDataConstants.DevolvedMcaGlaSofFile, devolvedPostcodes.McaGlaSofLookups);
                    AddFileToZip(zipArchive, DesktopReferenceDataConstants.EmployersFile, employers);
                    AddFileToZip(zipArchive, DesktopReferenceDataConstants.EPAOrganisationsFile, epaOrganisations);
                    AddFileToZip(zipArchive, DesktopReferenceDataConstants.LARSFrameworksFile, larsFrameworks);
                    AddFileToZip(zipArchive, DesktopReferenceDataConstants.LARSFrameworkAimsFile, larsFrameworkAims);
                    AddFileToZip(zipArchive, DesktopReferenceDataConstants.LARSLearningDeliveriesFile, larsLearningDeliveries);
                    AddFileToZip(zipArchive, DesktopReferenceDataConstants.LARSStandardsFile, larsStandards);
                    AddFileToZip(zipArchive, DesktopReferenceDataConstants.OrganisationsFile, organisations);
                    AddFileToZip(zipArchive, DesktopReferenceDataConstants.PostcodesFile, postcodes);
                }

                _logger.LogInfo("Finished Zip File Creation");
            }
        }
        public async Task RetrieveAsync()
        {
            var cancellationToken = CancellationToken.None;

            IReadOnlyCollection <string> postcodes = new List <string> {
                "POSTCODE1", "POSTCODE2", "POSTCODE3", "POSTCODE4"
            };
            var json = @"[""POSTCODE1"",""POSTCODE2"",""POSTCODE3"",""POSTCODE4""]";

            var mcaGlataskResult            = new TaskCompletionSource <List <McaGlaSofLookup> >();
            var devolvedPostcodesTaskResult = new TaskCompletionSource <List <DevolvedPostcode> >();

            var devolvedPostcodes = new DevolvedPostcodes
            {
                McaGlaSofLookups = new List <McaGlaSofLookup>
                {
                    new McaGlaSofLookup
                    {
                        SofCode         = "105",
                        McaGlaFullName  = "Full Name 1",
                        McaGlaShortCode = "ShortCode 1",
                        EffectiveFrom   = new DateTime(2019, 8, 1)
                    },
                    new McaGlaSofLookup
                    {
                        SofCode         = "110",
                        McaGlaFullName  = "Full Name 2",
                        McaGlaShortCode = "ShortCode 2",
                        EffectiveFrom   = new DateTime(2019, 8, 1)
                    }
                },
                Postcodes = new List <DevolvedPostcode>
                {
                    new DevolvedPostcode
                    {
                        Postcode        = "POSTCODE1",
                        Area            = "Area",
                        SourceOfFunding = "105",
                        EffectiveFrom   = new DateTime(2019, 8, 1)
                    },
                    new DevolvedPostcode
                    {
                        Postcode        = "POSTCODE3",
                        Area            = "Area",
                        SourceOfFunding = "105",
                        EffectiveFrom   = new DateTime(2019, 8, 1)
                    },
                    new DevolvedPostcode
                    {
                        Postcode        = "POSTCODE3",
                        Area            = "Area",
                        SourceOfFunding = "110",
                        EffectiveFrom   = new DateTime(2019, 8, 1)
                    }
                }
            };

            mcaGlataskResult.SetResult(devolvedPostcodes.McaGlaSofLookups);
            devolvedPostcodesTaskResult.SetResult(devolvedPostcodes.Postcodes);

            var postcodesContextMock        = new Mock <IPostcodesContext>();
            var postcodesContextFactoryMock = new Mock <IDbContextFactory <IPostcodesContext> >();
            var jsonSerializationMock       = new Mock <IJsonSerializationService>();

            postcodesContextFactoryMock.Setup(c => c.Create()).Returns(postcodesContextMock.Object);
            jsonSerializationMock.Setup(sm => sm.Serialize(postcodes)).Returns(json);

            var service = NewServiceMock(postcodesContextFactoryMock.Object, jsonSerializationService: jsonSerializationMock.Object);

            service.Setup(s => s.RetrieveMcaGlaLookups(postcodesContextMock.Object, cancellationToken)).Returns(mcaGlataskResult.Task);
            service.Setup(s => s.RetrieveDevolvedPostcodes(json, cancellationToken)).Returns(devolvedPostcodesTaskResult.Task);

            var serviceResult = await service.Object.RetrieveAsync(postcodes, cancellationToken);

            serviceResult.Should().BeEquivalentTo(devolvedPostcodes);
        }