public async Task SupportsModifyingEntriesInExistingArchives() { // Arrange EntityContext.ConnectionString = "Data Source=" + _databasePath; var id = "Knapcode.MiniZip"; var ver = "0.4.0"; using (var entityContext = new EntityContext()) { await entityContext.Database.EnsureCreatedAsync(); var packageRegistration = new PackageRegistrationEntity { Id = id }; entityContext.PackageRegistrations.Add(packageRegistration); var package = new PackageEntity { PackageRegistration = packageRegistration, Version = ver, }; package.Identity = $"{package.PackageRegistration.Id}/{package.Version}"; entityContext.Packages.Add(package); await entityContext.SaveChangesAsync(); } var packageEnumerator = new PackageCommitEnumerator(); var target = new PackageService(packageEnumerator, _output.GetLogger <PackageService>()); var a = await CreateArchiveAsync(id, ver, new ZipEntry("a.txt"), new ZipEntry("b.txt")); var b = await CreateArchiveAsync(id, ver, new ZipEntry("b.txt"), new ZipEntry("a.txt")); // Act await target.AddOrUpdatePackagesAsync(new[] { a }); await target.AddOrUpdatePackagesAsync(new[] { b }); // Assert using (var entityContext = new EntityContext()) { var archives = entityContext.PackageArchives.ToList(); Assert.Single(archives); Assert.Equal(2, archives[0].EntryCount); var entries = entityContext.PackageEntries.OrderBy(x => x.PackageEntryKey).ToList(); Assert.Equal(2, entries.Count); Assert.Equal(0ul, entries[0].Index); Assert.Equal(Encoding.ASCII.GetBytes("b.txt"), entries[0].Name); Assert.Equal(1ul, entries[1].Index); Assert.Equal(Encoding.ASCII.GetBytes("a.txt"), entries[1].Name); } }
private async Task ConsumeAsync( IReadOnlyList <V2Package> packages, string cursorName, Func <V2Package, DateTimeOffset> getTimestamp) { var oldCUrsor = await _cursorService.GetValueAsync(cursorName); await _service.AddOrUpdatePackagesAsync(packages); var newCursor = packages.Max(getTimestamp); if (newCursor > oldCUrsor) { await _cursorService.SetValueAsync(cursorName, newCursor); } }