예제 #1
0
        private Mock <PackageService> SetupPackageService()
        {
            var packageRegistrationRepository = new Mock <IEntityRepository <PackageRegistration> >();

            packageRegistrationRepository
            .Setup(x => x.GetAll())
            .Returns(PackageRegistrations.AsQueryable())
            .Verifiable();

            var packageRepository     = new Mock <IEntityRepository <Package> >();
            var certificateRepository = new Mock <IEntityRepository <Certificate> >();
            var auditingService       = new TestAuditingService();
            var telemetryService      = new Mock <ITelemetryService>();
            var securityPolicyService = new Mock <ISecurityPolicyService>();
            var entitiesContext       = new Mock <IEntitiesContext>();
            var contentObjectService  = new Mock <IContentObjectService>();
            var featureFlagService    = new Mock <IFeatureFlagService>();

            featureFlagService.Setup(x => x.ArePatternSetTfmHeuristicsEnabled()).Returns(true);

            var packageService = new Mock <PackageService>(
                packageRegistrationRepository.Object,
                packageRepository.Object,
                certificateRepository.Object,
                auditingService,
                telemetryService.Object,
                securityPolicyService.Object,
                entitiesContext.Object,
                contentObjectService.Object,
                featureFlagService.Object);

            packageService.CallBase = true;

            return(packageService);
        }
예제 #2
0
 public TestableUserServiceWithDBFaking(FakeEntitiesContext context = null)
 {
     FakeEntitiesContext = context ?? new FakeEntitiesContext();
     Config         = (MockConfig = new Mock <IAppConfiguration>()).Object;
     UserRepository = new EntityRepository <User>(FakeEntitiesContext);
     Auditing       = new TestAuditingService();
 }
        private Mock <PackageService> SetupPackageService()
        {
            var packageRegistrationRepository = new Mock <IEntityRepository <PackageRegistration> >();

            packageRegistrationRepository
            .Setup(x => x.GetAll())
            .Returns(PackageRegistrations.AsQueryable())
            .Verifiable();

            var packageRepository     = new Mock <IEntityRepository <Package> >();
            var certificateRepository = new Mock <IEntityRepository <Certificate> >();
            var auditingService       = new TestAuditingService();
            var telemetryService      = new Mock <ITelemetryService>();
            var securityPolicyService = new Mock <ISecurityPolicyService>();

            var packageService = new Mock <PackageService>(
                packageRegistrationRepository.Object,
                packageRepository.Object,
                certificateRepository.Object,
                auditingService,
                telemetryService.Object,
                securityPolicyService.Object);

            packageService.CallBase = true;

            return(packageService);
        }
        public TestableApiController(MockBehavior behavior = MockBehavior.Default)
        {
            OwinContext               = Fakes.CreateOwinContext();
            EntitiesContext           = (MockEntitiesContext = new Mock <IEntitiesContext>()).Object;
            PackageService            = (MockPackageService = new Mock <IPackageService>(behavior)).Object;
            UserService               = (MockUserService = new Mock <IUserService>(behavior)).Object;
            NugetExeDownloaderService = (MockNuGetExeDownloaderService = new Mock <INuGetExeDownloaderService>(MockBehavior.Strict)).Object;
            ContentService            = (MockContentService = new Mock <IContentService>()).Object;
            StatisticsService         = (MockStatisticsService = new Mock <IStatisticsService>()).Object;
            IndexingService           = (MockIndexingService = new Mock <IIndexingService>()).Object;
            AutoCuratePackage         = (MockAutoCuratePackage = new Mock <IAutomaticallyCuratePackageCommand>()).Object;

            MockPackageFileService = new Mock <IPackageFileService>(MockBehavior.Strict);
            MockPackageFileService.Setup(p => p.SavePackageFileAsync(It.IsAny <Package>(), It.IsAny <Stream>()))
            .Returns(Task.CompletedTask);
            PackageFileService = MockPackageFileService.Object;

            MessageService = (MockMessageService = new Mock <IMessageService>()).Object;

            MockConfigurationService = new Mock <IGalleryConfigurationService>();
            MockConfigurationService.SetupGet(s => s.Features.TrackPackageDownloadCountInLocalDatabase)
            .Returns(false);
            ConfigurationService = MockConfigurationService.Object;

            AuditingService = new TestAuditingService();

            TestUtility.SetupHttpContextMockForUrlGeneration(new Mock <HttpContextBase>(), this);
        }
        public TestableApiController(MockBehavior behavior = MockBehavior.Default)
        {
            OwinContext = Fakes.CreateOwinContext();
            EntitiesContext = (MockEntitiesContext = new Mock<IEntitiesContext>()).Object;
            PackageService = (MockPackageService = new Mock<IPackageService>(behavior)).Object;
            UserService = (MockUserService = new Mock<IUserService>(behavior)).Object;
            NugetExeDownloaderService = (MockNuGetExeDownloaderService = new Mock<INuGetExeDownloaderService>(MockBehavior.Strict)).Object;
            ContentService = (MockContentService = new Mock<IContentService>()).Object;
            StatisticsService = (MockStatisticsService = new Mock<IStatisticsService>()).Object;
            IndexingService = (MockIndexingService = new Mock<IIndexingService>()).Object;
            AutoCuratePackage = (MockAutoCuratePackage = new Mock<IAutomaticallyCuratePackageCommand>()).Object;

            MockPackageFileService = new Mock<IPackageFileService>(MockBehavior.Strict);
            MockPackageFileService.Setup(p => p.SavePackageFileAsync(It.IsAny<Package>(), It.IsAny<Stream>()))
                .Returns(Task.CompletedTask);
            PackageFileService = MockPackageFileService.Object;

            MessageService = (MockMessageService = new Mock<IMessageService>()).Object;

            MockConfigurationService = new Mock<ConfigurationService>();
            MockConfigurationService.SetupGet(s => s.Features.TrackPackageDownloadCountInLocalDatabase)
                .Returns(false);
            ConfigurationService = MockConfigurationService.Object;

            AuditingService = new TestAuditingService();

            TestUtility.SetupHttpContextMockForUrlGeneration(new Mock<HttpContextBase>(), this);
        }
예제 #6
0
        private Mock <PackageService> SetupPackageService()
        {
            var packageRegistrationRepository = new Mock <IEntityRepository <PackageRegistration> >();

            packageRegistrationRepository
            .Setup(x => x.GetAll())
            .Returns(PackageRegistrations.AsQueryable())
            .Verifiable();

            var packageRepository              = new Mock <IEntityRepository <Package> >();
            var packageOwnerRequestService     = new Mock <IPackageOwnerRequestService>();
            var packageNamingConflictValidator = new PackageNamingConflictValidator(
                packageRegistrationRepository.Object,
                packageRepository.Object);
            var auditingService = new TestAuditingService();

            var packageService = new Mock <PackageService>(
                packageRegistrationRepository.Object,
                packageRepository.Object,
                packageOwnerRequestService.Object,
                packageNamingConflictValidator,
                auditingService);

            packageService.CallBase = true;

            return(packageService);
        }
예제 #7
0
        public TestableUserService()
        {
            Config               = (MockConfig = new Mock <IAppConfiguration>()).Object;
            UserRepository       = (MockUserRepository = new Mock <IEntityRepository <User> >()).Object;
            CredentialRepository = (MockCredentialRepository = new Mock <IEntityRepository <Credential> >()).Object;
            Auditing             = new TestAuditingService();

            // Set ConfirmEmailAddress to a default of true
            MockConfig.Setup(c => c.ConfirmEmailAddresses).Returns(true);
        }
 public TestableUserServiceWithDBFaking(FakeEntitiesContext context = null)
 {
     FakeEntitiesContext = context ?? new FakeEntitiesContext();
     Config           = (MockConfig = new Mock <IAppConfiguration>()).Object;
     UserRepository   = new EntityRepository <User>(FakeEntitiesContext);
     RoleRepository   = new EntityRepository <Role>(FakeEntitiesContext);
     Auditing         = new TestAuditingService();
     TelemetryService = new TelemetryService(
         new Mock <IDiagnosticsSource>().Object,
         new Mock <ITelemetryClient>().Object);
 }
        private static Mock <PackageService> SetupPackageService(Package package)
        {
            var packageRegistrationRepository = new Mock <IEntityRepository <PackageRegistration> >();
            var packageRepository             = new Mock <IEntityRepository <Package> >();
            var certificateRepository         = new Mock <IEntityRepository <Certificate> >();
            var auditingService       = new TestAuditingService();
            var telemetryService      = new Mock <ITelemetryService>();
            var securityPolicyService = new Mock <ISecurityPolicyService>();
            var entitiesContext       = new Mock <IEntitiesContext>();
            var contentObjectService  = new Mock <IContentObjectService>();
            var featureFlagService    = new Mock <IFeatureFlagService>();

            featureFlagService.Setup(x => x.ArePatternSetTfmHeuristicsEnabled()).Returns(true);


            var packageService = new Mock <PackageService>(
                packageRegistrationRepository.Object,
                packageRepository.Object,
                certificateRepository.Object,
                auditingService,
                telemetryService.Object,
                securityPolicyService.Object,
                entitiesContext.Object,
                contentObjectService.Object,
                featureFlagService.Object);

            packageService.CallBase = true;

            packageService
            .Setup(s => s.FindPackageByIdAndVersionStrict("test", "1.0.0"))
            .Returns(package)
            .Verifiable();

            packageService
            .Setup(s => s.EnrichPackageFromNuGetPackage(
                       It.IsAny <Package>(),
                       It.IsAny <PackageArchiveReader>(),
                       It.IsAny <PackageMetadata>(),
                       It.IsAny <PackageStreamMetadata>(),
                       It.IsAny <User>()))
            .CallBase()
            .Verifiable();

            packageService
            .Setup(s => s.UpdateIsLatestAsync(
                       It.IsAny <PackageRegistration>(),
                       It.IsAny <bool>()))
            .Returns(Task.CompletedTask)
            .Verifiable();

            return(packageService);
        }
예제 #10
0
        public async Task SaveAuditRecordAsync_FailedAuthenticatedOperationAuditRecord()
        {
            var expiresIn   = new TimeSpan(days: 1, hours: 2, minutes: 3, seconds: 4);
            var auditRecord = new FailedAuthenticatedOperationAuditRecord(
                usernameOrEmail: "a",
                action: AuditedAuthenticatedOperationAction.PackagePushAttemptByNonOwner,
                attemptedPackage: new AuditedPackageIdentifier("b", "c"),
                attemptedCredential: new Credential(CredentialTypes.ApiKey.V2, value: "d", expiration: expiresIn));
            var service = new TestAuditingService(async(string auditData, string resourceType, string filePath, string action, DateTime timestamp) =>
            {
                Assert.Equal("FailedAuthenticatedOperation", resourceType);
                Assert.Equal("all", filePath);
                Assert.Equal("packagepushattemptbynonowner", action);
                Assert.InRange(timestamp, DateTime.UtcNow.AddMinutes(-1), DateTime.UtcNow.AddMinutes(1));

                var jObject = JObject.Parse(auditData);

                var record = jObject["Record"];

                Assert.Equal("a", record["UsernameOrEmail"].Value <string>());

                var attemptedPackage = record["AttemptedPackage"];

                Assert.Equal("b", attemptedPackage["Id"].Value <string>());
                Assert.Equal("c", attemptedPackage["Version"].Value <string>());

                var attemptedCredential = record["AttemptedCredential"];

                Assert.Equal(0, attemptedCredential["Key"].Value <int>());
                Assert.Equal(CredentialTypes.ApiKey.V2, attemptedCredential["Type"].Value <string>());

                Assert.Equal(JTokenType.Null, attemptedCredential["Value"].Type);
                Assert.Equal(JTokenType.Null, attemptedCredential["Description"].Type);
                Assert.False(attemptedCredential["Scopes"].ToObject <IList <object> >().Any());
                Assert.Equal(JTokenType.Null, attemptedCredential["Identity"].Type);
                Assert.Equal(DateTime.MinValue, attemptedCredential["Created"].Value <DateTime>());

                var expiresUtc = DateTime.UtcNow.Add(expiresIn);

                Assert.InRange(attemptedCredential["Expires"].Value <DateTime>(), expiresUtc.AddMinutes(-1), expiresUtc.AddMinutes(1));
                Assert.Equal(JTokenType.Null, attemptedCredential["LastUsed"].Type);

                await VerifyActor(jObject);

                return(null);
            });

            await service.SaveAuditRecordAsync(auditRecord);
        }
        public TestableUserService()
        {
            Config = (MockConfig = new Mock <IAppConfiguration>()).Object;
            SecurityPolicyService = (MockSecurityPolicyService = new Mock <ISecurityPolicyService>()).Object;
            UserRepository        = (MockUserRepository = new Mock <IEntityRepository <User> >()).Object;
            CredentialRepository  = (MockCredentialRepository = new Mock <IEntityRepository <Credential> >()).Object;
            EntitiesContext       = (MockEntitiesContext = new Mock <IEntitiesContext>()).Object;
            ContentObjectService  = (MockConfigObjectService = new Mock <IContentObjectService>()).Object;
            Auditing = new TestAuditingService();

            // Set ConfirmEmailAddress to a default of true
            MockConfig.Setup(c => c.ConfirmEmailAddresses).Returns(true);

            MockDatabase = new Mock <IDatabase>();
            MockEntitiesContext.Setup(c => c.GetDatabase()).Returns(MockDatabase.Object);
        }
        private static Mock <PackageService> SetupPackageService(Package package)
        {
            var packageRegistrationRepository  = new Mock <IEntityRepository <PackageRegistration> >();
            var packageRepository              = new Mock <IEntityRepository <Package> >();
            var certificateRepository          = new Mock <IEntityRepository <Certificate> >();
            var packageNamingConflictValidator = new PackageNamingConflictValidator(
                packageRegistrationRepository.Object,
                packageRepository.Object);
            var auditingService       = new TestAuditingService();
            var telemetryService      = new Mock <ITelemetryService>();
            var securityPolicyService = new Mock <ISecurityPolicyService>();

            var packageService = new Mock <PackageService>(
                packageRegistrationRepository.Object,
                packageRepository.Object,
                certificateRepository.Object,
                packageNamingConflictValidator,
                auditingService,
                telemetryService.Object,
                securityPolicyService.Object);

            packageService.CallBase = true;

            packageService
            .Setup(s => s.FindPackageByIdAndVersionStrict("test", "1.0.0"))
            .Returns(package)
            .Verifiable();

            packageService
            .Setup(s => s.EnrichPackageFromNuGetPackage(
                       It.IsAny <Package>(),
                       It.IsAny <PackageArchiveReader>(),
                       It.IsAny <PackageMetadata>(),
                       It.IsAny <PackageStreamMetadata>(),
                       It.IsAny <User>()))
            .CallBase()
            .Verifiable();

            packageService
            .Setup(s => s.UpdateIsLatestAsync(
                       It.IsAny <PackageRegistration>(),
                       It.IsAny <bool>()))
            .Returns(Task.CompletedTask)
            .Verifiable();

            return(packageService);
        }
예제 #13
0
        private static Mock <PackageService> SetupPackageService(Package package)
        {
            var packageRegistrationRepository = new Mock <IEntityRepository <PackageRegistration> >();
            var packageRepository             = new Mock <IEntityRepository <Package> >();
            var packageOwnerRequestRepo       = new Mock <IEntityRepository <PackageOwnerRequest> >();
            var diagnosticsService            = new Mock <IDiagnosticsService>();
            var entitiesContext = new Mock <IEntitiesContext>();
            var configuration   = new Mock <IAppConfiguration>();
            var indexingService = new Mock <IIndexingService>();
            var packageNamingConflictValidator = new PackageNamingConflictValidator(
                packageRegistrationRepository.Object,
                packageRepository.Object);
            var auditingService = new TestAuditingService();

            var packageService = new Mock <PackageService>(
                packageRegistrationRepository.Object,
                packageRepository.Object,
                packageOwnerRequestRepo.Object,
                entitiesContext.Object,
                configuration.Object,
                diagnosticsService.Object,
                indexingService.Object,
                packageNamingConflictValidator,
                auditingService);

            packageService.CallBase = true;

            packageService
            .Setup(s => s.FindPackageByIdAndVersion("test", "1.0.0", true))
            .Returns(package)
            .Verifiable();

            packageService
            .Setup(s => s.EnrichPackageFromNuGetPackage(
                       It.IsAny <Package>(),
                       It.IsAny <PackageArchiveReader>(),
                       It.IsAny <PackageMetadata>(),
                       It.IsAny <PackageStreamMetadata>(),
                       It.IsAny <User>()))
            .CallBase()
            .Verifiable();

            return(packageService);
        }
            public async Task WritesAnAuditRecord()
            {
                // Arrange
                var package = new PackageRegistration {
                    Key = 2, Id = "pkg42"
                };
                var pendingOwner = new User {
                    Key = 100, Username = "******"
                };
                var auditingService = new TestAuditingService();
                var service         = CreateService(auditingService: auditingService);

                // Act
                await service.AddPackageOwnerAsync(package, pendingOwner);

                // Assert
                Assert.True(auditingService.WroteRecord <PackageRegistrationAuditRecord>(ar =>
                                                                                         ar.Action == AuditedPackageRegistrationAction.AddOwner &&
                                                                                         ar.Id == package.Id));
            }
예제 #15
0
        public TestableUserService()
        {
            Config = (MockConfig = new Mock <IAppConfiguration>()).Object;
            SecurityPolicyService  = (MockSecurityPolicyService = new Mock <ISecurityPolicyService>()).Object;
            UserRepository         = (MockUserRepository = new Mock <IEntityRepository <User> >()).Object;
            RoleRepository         = (MockRoleRepository = new Mock <IEntityRepository <Role> >()).Object;
            CredentialRepository   = (MockCredentialRepository = new Mock <IEntityRepository <Credential> >()).Object;
            OrganizationRepository = (MockOrganizationRepository = new Mock <IEntityRepository <Organization> >()).Object;
            EntitiesContext        = (MockEntitiesContext = new Mock <IEntitiesContext>()).Object;
            ContentObjectService   = (MockConfigObjectService = new Mock <IContentObjectService>()).Object;
            DateTimeProvider       = (MockDateTimeProvider = new Mock <IDateTimeProvider>()).Object;
            Auditing          = new TestAuditingService();
            TelemetryService  = (MockTelemetryService = new Mock <ITelemetryService>()).Object;
            DiagnosticsSource = (MockDiagnosticsSource = new Mock <IDiagnosticsSource>()).Object;

            // Set ConfirmEmailAddress to a default of true
            MockConfig.Setup(c => c.ConfirmEmailAddresses).Returns(true);

            MockDatabase = new Mock <IDatabase>();
            MockEntitiesContext.Setup(c => c.GetDatabase()).Returns(MockDatabase.Object);
        }
예제 #16
0
        public TestableReservedNamespaceService(
            IList <ReservedNamespace> reservedNamespaces     = null,
            IList <PackageRegistration> packageRegistrations = null,
            IList <User> users = null)
        {
            ReservedNamespaces   = reservedNamespaces ?? new List <ReservedNamespace>();
            PackageRegistrations = packageRegistrations ?? new List <PackageRegistration>();
            Users = users ?? new List <User>();

            EntitiesContext = SetupEntitiesContext().Object;

            MockReservedNamespaceRepository = SetupReservedNamespaceRepository();
            ReservedNamespaceRepository     = MockReservedNamespaceRepository.Object;

            MockPackageService = SetupPackageService();
            PackageService     = MockPackageService.Object;

            UserService = new TestableUserServiceWithDBFaking();
            ((TestableUserServiceWithDBFaking)UserService).Users = Users;

            AuditingService = new TestAuditingService();
        }
예제 #17
0
        public async Task SaveAuditRecordAsync_PackageRegistrationAuditRecord()
        {
            var packageRegistration = new PackageRegistration()
            {
                DownloadCount = 1,
                Id            = "a",
                Key           = 2
            };
            var auditRecord = new PackageRegistrationAuditRecord(packageRegistration, AuditedPackageRegistrationAction.AddOwner, owner: "b");
            var service     = new TestAuditingService(async(string auditData, string resourceType, string filePath, string action, DateTime timestamp) =>
            {
                Assert.Equal("PackageRegistration", resourceType);
                Assert.Equal("a", filePath);
                Assert.Equal("addowner", action);
                Assert.InRange(timestamp, DateTime.UtcNow.AddMinutes(-1), DateTime.UtcNow.AddMinutes(1));

                var jObject = JObject.Parse(auditData);

                var record = jObject["Record"];

                Assert.Equal("a", record["Id"].Value <string>());

                var registrationRecord = record["RegistrationRecord"];

                Assert.Equal("a", registrationRecord["Id"].Value <string>());
                Assert.Equal(1, registrationRecord["DownloadCount"].Value <int>());
                Assert.Equal(2, registrationRecord["Key"].Value <int>());

                Assert.Equal("b", record["Owner"].Value <string>());
                Assert.Equal("AddOwner", record["Action"].Value <string>());

                await VerifyActor(jObject);

                return(null);
            });

            await service.SaveAuditRecordAsync(auditRecord);
        }
            public async Task WritesAnAuditRecord()
            {
                var owner1 = new User {
                    Key = 1, Username = "******"
                };
                var ownerToRemove = new User {
                    Key = 100, Username = "******"
                };
                var package = new PackageRegistration {
                    Key = 2, Id = "pkg42", Owners = new List <User> {
                        owner1, ownerToRemove
                    }
                };
                var auditingService = new TestAuditingService();
                var service         = CreateService(auditingService: auditingService);

                // Act
                await service.RemovePackageOwnerAsync(package, owner1, ownerToRemove);

                // Assert
                Assert.True(auditingService.WroteRecord <PackageRegistrationAuditRecord>(ar =>
                                                                                         ar.Action == AuditedPackageRegistrationAction.RemoveOwner &&
                                                                                         ar.Id == package.Id));
            }
예제 #19
0
            public TestableUserService()
            {
                Config = (MockConfig = new Mock<IAppConfiguration>()).Object;
                UserRepository = (MockUserRepository = new Mock<IEntityRepository<User>>()).Object;
                CredentialRepository = (MockCredentialRepository = new Mock<IEntityRepository<Credential>>()).Object;
                Auditing = new TestAuditingService();

                // Set ConfirmEmailAddress to a default of true
                MockConfig.Setup(c => c.ConfirmEmailAddresses).Returns(true);
            }
예제 #20
0
        public async Task SaveAuditRecordAsync_UserAuditRecord()
        {
            var user = new User()
            {
                CreatedUtc  = DateTime.Now,
                Credentials = new List <Credential>()
                {
                    new Credential(
                        CredentialTypes.Password.V3,
                        value: "a",
                        expiration: new TimeSpan(days: 1, hours: 2, minutes: 3, seconds: 4))
                },
                EmailAddress = "b",
                Roles        = new List <Role>()
                {
                    new Role()
                    {
                        Key = 5, Name = "c"
                    }
                },
                UnconfirmedEmailAddress = "d",
                Username = "******"
            };
            var auditRecord = new UserAuditRecord(user, AuditedUserAction.Login, user.Credentials.First());
            var service     = new TestAuditingService(async(string auditData, string resourceType, string filePath, string action, DateTime timestamp) =>
            {
                Assert.Equal("User", resourceType);
                Assert.Equal("e", filePath);
                Assert.Equal("login", action);
                Assert.InRange(timestamp, DateTime.UtcNow.AddMinutes(-1), DateTime.UtcNow.AddMinutes(1));

                var jObject = JObject.Parse(auditData);

                var record = jObject["Record"];

                Assert.Equal("e", record["Username"].Value <string>());
                Assert.Equal("b", record["EmailAddress"].Value <string>());
                Assert.Equal("d", record["UnconfirmedEmailAddress"].Value <string>());
                Assert.Equal("c", record["Roles"].ToObject <IList <string> >().Single());

                var credentials = record["Credentials"];
                var credential  = credentials.AsEnumerable().Single();

                Assert.Equal(0, credential["Key"].Value <int>());
                Assert.Equal(CredentialTypes.Password.V3, credential["Type"].Value <string>());
                Assert.Equal(JTokenType.Null, credential["Value"].Type);
                Assert.Equal(JTokenType.Null, credential["Description"].Type);
                Assert.False(credential["Scopes"].ToObject <IList <object> >().Any());
                Assert.Equal(JTokenType.Null, credential["Identity"].Type);
                Assert.Equal(DateTime.MinValue, credential["Created"].Value <DateTime>());
                Assert.Equal(user.Credentials.First().Expires.Value, credential["Expires"].Value <DateTime>());
                Assert.Equal(JTokenType.Null, credential["LastUsed"].Type);

                var affectedCredential = record["AffectedCredential"].AsJEnumerable().Single();

                Assert.Equal(0, affectedCredential["Key"].Value <int>());
                Assert.Equal(CredentialTypes.Password.V3, affectedCredential["Type"].Value <string>());
                Assert.Equal(JTokenType.Null, affectedCredential["Value"].Type);
                Assert.Equal(JTokenType.Null, affectedCredential["Description"].Type);
                Assert.Empty(affectedCredential["Scopes"].AsJEnumerable());
                Assert.Equal(JTokenType.Null, affectedCredential["Identity"].Type);
                Assert.Equal(DateTime.MinValue, affectedCredential["Created"].Value <DateTime>());
                Assert.Equal(user.Credentials.First().Expires.Value, affectedCredential["Expires"].Value <DateTime>());
                Assert.Equal(JTokenType.Null, affectedCredential["LastUsed"].Type);

                Assert.Equal(JTokenType.Null, record["AffectedEmailAddress"].Type);
                Assert.Equal("Login", record["Action"].Value <string>());

                await VerifyActor(jObject);

                return(null);
            });

            await service.SaveAuditRecordAsync(auditRecord);
        }
예제 #21
0
            public async Task WritesAnAuditRecord()
            {
                // Arrange
                var package = new PackageRegistration { Key = 2, Id = "pkg42" };
                var ownerToRemove = new User { Key = 100, Username = "******" };
                var packageRepository = new Mock<IEntityRepository<Package>>();
                var auditingService = new TestAuditingService();
                var service = CreateService(
                    packageRepository: packageRepository,
                    auditingService: auditingService);

                // Act
                await service.RemovePackageOwnerAsync(package, ownerToRemove);

                // Assert
                Assert.True(auditingService.WroteRecord<PackageRegistrationAuditRecord>(ar =>
                    ar.Action == AuditedPackageRegistrationAction.RemoveOwner
                    && ar.Id == package.Id));
            }
예제 #22
0
            public async Task WritesAnAuditRecord()
            {
                // Arrange
                var packageRegistration = new PackageRegistration { Id = "theId" };
                var package = new Package { Version = "1.0", PackageRegistration = packageRegistration, Listed = true };
                var packageRepository = new Mock<IEntityRepository<Package>>();
                var auditingService = new TestAuditingService();
                var service = CreateService(
                    packageRepository: packageRepository,
                    auditingService: auditingService);

                // Act
                await service.MarkPackageUnlistedAsync(package);

                // Assert
                Assert.True(auditingService.WroteRecord<PackageAuditRecord>(ar =>
                    ar.Action == AuditedPackageAction.Unlist
                    && ar.Id == package.PackageRegistration.Id
                    && ar.Version == package.Version));
            }
예제 #23
0
        public async Task SaveAuditRecordAsync_PackageAuditRecord()
        {
            var package = new Package()
            {
                Copyright = "a",
                Created   = DateTime.Now,
#pragma warning disable CS0612 // Type or member is obsolete
                Deleted = true,
#pragma warning restore CS0612 // Type or member is obsolete
                Description   = "b",
                DownloadCount = 1,
#pragma warning disable CS0612 // Type or member is obsolete
                ExternalPackageUrl = "c",
#pragma warning restore CS0612 // Type or member is obsolete
                FlattenedAuthors      = "d",
                FlattenedDependencies = "e",
                Hash              = "f",
                HashAlgorithm     = "g",
                HideLicenseReport = true,
                IconUrl           = "h",
                IsLatest          = true,
                IsLatestStable    = true,
                IsPrerelease      = true,
                Key                 = 2,
                Language            = "i",
                LastEdited          = DateTime.Now.AddMinutes(1),
                LastUpdated         = DateTime.Now.AddMinutes(2),
                LicenseNames        = "j",
                LicenseReportUrl    = "k",
                LicenseUrl          = "l",
                Listed              = true,
                MinClientVersion    = "m",
                NormalizedVersion   = "n",
                PackageFileSize     = 3,
                PackageRegistration = new PackageRegistration()
                {
                    Id = "o"
                },
                PackageRegistrationKey = 4,
                PackageStatusKey       = PackageStatus.Deleted,
                ProjectUrl             = "p",
                Published    = DateTime.Now.AddMinutes(3),
                ReleaseNotes = "q",
                RequiresLicenseAcceptance = true,
                DevelopmentDependency     = true,
                Summary = "r",
                Tags    = "s",
                Title   = "t",
                UserKey = 5,
                Version = "u"
            };
            var auditRecord = new PackageAuditRecord(package, AuditedPackageAction.Create, reason: "v");
            var service     = new TestAuditingService(async(string auditData, string resourceType, string filePath, string action, DateTime timestamp) =>
            {
                Assert.Equal("Package", resourceType);
                Assert.Equal("o/u", filePath);
                Assert.Equal("create", action);
                Assert.InRange(timestamp, DateTime.UtcNow.AddMinutes(-1), DateTime.UtcNow.AddMinutes(1));

                var jObject = JObject.Parse(auditData);

                var record = jObject["Record"];

                Assert.Equal("o", record["Id"].Value <string>());
                Assert.Equal("u", record["Version"].Value <string>());
                Assert.Equal("f", record["Hash"].Value <string>());

                var packageRecord = record["PackageRecord"];

                Assert.Equal(4, packageRecord["PackageRegistrationKey"].Value <int>());
                Assert.Equal("a", packageRecord["Copyright"].Value <string>());
                Assert.Equal(package.Created.ToUniversalTime(), packageRecord["Created"].Value <DateTime>());
                Assert.Equal("b", packageRecord["Description"].Value <string>());
                Assert.Equal("q", packageRecord["ReleaseNotes"].Value <string>());
                Assert.Equal(1, packageRecord["DownloadCount"].Value <int>());
                Assert.Equal(JTokenType.Null, packageRecord["ExternalPackageUrl"].Type);
                Assert.Equal("g", packageRecord["HashAlgorithm"].Value <string>());
                Assert.Equal("f", packageRecord["Hash"].Value <string>());
                Assert.Equal("h", packageRecord["IconUrl"].Value <string>());
                Assert.True(packageRecord["IsLatest"].Value <bool>());
                Assert.True(packageRecord["IsLatestStable"].Value <bool>());
                Assert.Equal(package.LastUpdated.ToUniversalTime(), packageRecord["LastUpdated"].Value <DateTime>());
                Assert.Equal(package.LastEdited.Value.ToUniversalTime(), packageRecord["LastEdited"].Value <DateTime>());
                Assert.Equal("l", packageRecord["LicenseUrl"].Value <string>());
                Assert.True(packageRecord["HideLicenseReport"].Value <bool>());
                Assert.Equal("i", packageRecord["Language"].Value <string>());
                Assert.Equal(package.Published.ToUniversalTime(), packageRecord["Published"].Value <DateTime>());
                Assert.Equal(3, packageRecord["PackageFileSize"].Value <int>());
                Assert.Equal("p", packageRecord["ProjectUrl"].Value <string>());
                Assert.True(packageRecord["RequiresLicenseAcceptance"].Value <bool>());
                Assert.True(packageRecord["DevelopmentDependency"].Value <bool>());
                Assert.Equal("r", packageRecord["Summary"].Value <string>());
                Assert.Equal("s", packageRecord["Tags"].Value <string>());
                Assert.Equal("t", packageRecord["Title"].Value <string>());
                Assert.Equal("u", packageRecord["Version"].Value <string>());
                Assert.Equal("n", packageRecord["NormalizedVersion"].Value <string>());
                Assert.Equal("j", packageRecord["LicenseNames"].Value <string>());
                Assert.Equal("k", packageRecord["LicenseReportUrl"].Value <string>());
                Assert.True(packageRecord["Listed"].Value <bool>());
                Assert.True(packageRecord["IsPrerelease"].Value <bool>());
                Assert.Equal("d", packageRecord["FlattenedAuthors"].Value <string>());
                Assert.Equal("e", packageRecord["FlattenedDependencies"].Value <string>());
                Assert.Equal(2, packageRecord["Key"].Value <int>());
                Assert.Equal("m", packageRecord["MinClientVersion"].Value <string>());
                Assert.Equal(5, packageRecord["UserKey"].Value <int>());
                Assert.True(packageRecord["Deleted"].Value <bool>());
                Assert.Equal(1, packageRecord["PackageStatusKey"].Value <int>());

                var registrationRecord = record["RegistrationRecord"];

                Assert.Equal("o", registrationRecord["Id"].Value <string>());
                Assert.Equal(0, registrationRecord["DownloadCount"].Value <int>());
                Assert.Equal(0, registrationRecord["Key"].Value <int>());

                Assert.Equal("v", record["Reason"].Value <string>());
                Assert.Equal("Create", record["Action"].Value <string>());

                await VerifyActor(jObject);

                return(null);
            });

            await service.SaveAuditRecordAsync(auditRecord);
        }
        private static Mock<PackageService> SetupPackageService(Package package)
        {
            var packageRegistrationRepository = new Mock<IEntityRepository<PackageRegistration>>();
            var packageRepository = new Mock<IEntityRepository<Package>>();
            var packageOwnerRequestRepo = new Mock<IEntityRepository<PackageOwnerRequest>>();
            var indexingService = new Mock<IIndexingService>();
            var packageNamingConflictValidator = new PackageNamingConflictValidator(
                    packageRegistrationRepository.Object,
                    packageRepository.Object);
            var auditingService = new TestAuditingService();

            var packageService = new Mock<PackageService>(
                packageRegistrationRepository.Object,
                packageRepository.Object,
                packageOwnerRequestRepo.Object,
                indexingService.Object,
                packageNamingConflictValidator,
                auditingService);

            packageService.CallBase = true;

            packageService
                .Setup(s => s.FindPackageByIdAndVersion("test", "1.0.0", true))
                .Returns(package)
                .Verifiable();

            packageService
              .Setup(s => s.EnrichPackageFromNuGetPackage(
                  It.IsAny<Package>(),
                  It.IsAny<PackageArchiveReader>(),
                  It.IsAny<PackageMetadata>(),
                  It.IsAny<PackageStreamMetadata>(),
                  It.IsAny<User>()))
              .CallBase()
              .Verifiable();

            return packageService;
        }
예제 #25
0
 public TestableUserServiceWithDBFaking()
 {
     Config = (MockConfig = new Mock<IAppConfiguration>()).Object;
     UserRepository = new EntityRepository<User>(FakeEntitiesContext = new FakeEntitiesContext());
     Auditing = new TestAuditingService();
 }
            public async Task WritesAnAuditRecord()
            {
                // Arrange
                var fakeUploadFileService = new Mock<IUploadFileService>();
                var fakeFileStream = new MemoryStream();
                fakeUploadFileService.Setup(x => x.GetUploadFileAsync(TestUtility.FakeUser.Key)).Returns(Task.FromResult<Stream>(fakeFileStream));
                fakeUploadFileService.Setup(x => x.DeleteUploadFileAsync(TestUtility.FakeUser.Key)).Returns(Task.FromResult(0));
                var fakePackageService = new Mock<IPackageService>();
                var fakePackage = new Package { PackageRegistration = new PackageRegistration { Id = "theId" }, Version = "theVersion" };
                fakePackageService.Setup(x => x.CreatePackageAsync(It.IsAny<PackageArchiveReader>(), It.IsAny<PackageStreamMetadata>(), It.IsAny<User>(), It.IsAny<bool>()))
                    .Returns(Task.FromResult(fakePackage));
                var fakeNuGetPackage = TestPackage.CreateTestPackageStream("theId", "1.0.0");

                var auditingService = new TestAuditingService();

                var controller = CreateController(
                    packageService: fakePackageService,
                    uploadFileService: fakeUploadFileService,
                    fakeNuGetPackage: fakeNuGetPackage,
                    auditingService: auditingService);
                controller.SetCurrentUser(TestUtility.FakeUser);

                // Act
                await controller.VerifyPackage(new VerifyPackageRequest { Listed = true, Edit = null });

                // Assert
                Assert.True(auditingService.WroteRecord<PackageAuditRecord>(ar =>
                    ar.Action == AuditedPackageAction.Create 
                    && ar.Id == fakePackage.PackageRegistration.Id
                    && ar.Version == fakePackage.Version));
            }