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);
                }
            }
Example #2
0
 private static IReadOnlyDictionary <NuGetVersion, PackageEntity> GetVersionToPackage(PackageRegistrationEntity packageRegistration)
 {
     return(packageRegistration
            .Packages
            .Where(x => x.CatalogPackage != null && !x.CatalogPackage.Deleted)
            .ToDictionary(y => NuGetVersion.Parse(y.Version)));
 }