public void TestDeleteInactiveProfiles()
        {
            var membershipConfig = new NameValueCollection(_membershipConfig);
            var membershipProvider = new MongoMembershipProvider();
            membershipProvider.Initialize(DefaultMembershipName, membershipConfig);

            var profileConfig = new NameValueCollection(_profileConfig);
            var profileProvider = new MongoProfileProvider();
            profileProvider.Initialize(DefaultProfileName, profileConfig);

            SetUpTestProfiles(membershipProvider, profileProvider);

            int numberOfUsersBefore, numberOfUsersAfter;
            membershipProvider.GetAllUsers(0, int.MaxValue, out numberOfUsersBefore);

            var numberOfInactiveProfilesDeleted = profileProvider.DeleteInactiveProfiles(ProfileAuthenticationOption.All, DateTime.Now.AddDays(-1));
            var numberOfInactiveProfiles = profileProvider.GetNumberOfInactiveProfiles(ProfileAuthenticationOption.All, DateTime.Now.AddDays(-1));

            membershipProvider.GetAllUsers(0, int.MaxValue, out numberOfUsersAfter);

            Assert.AreEqual(40, numberOfInactiveProfilesDeleted);
            Assert.AreEqual(0, numberOfInactiveProfiles);

            // No users should be removed by this process.
            Assert.AreEqual(numberOfUsersBefore, numberOfUsersAfter);
        }
        /// <summary>
        /// Creates 100 users, 80 of which have profiles, 40 are inactive, 40 are active, 40 are authenticated and 40 are anonymous.
        /// </summary>
        /// <param name="membershipProvider"></param>
        /// <param name="profileProvider"></param>
        private void SetUpTestProfiles(MongoMembershipProvider membershipProvider, MongoProfileProvider profileProvider)
        {
            // Make 20 users that have no profiles.
            for (int i = 0; i < 20; i++) {
                MembershipCreateStatus status;
                membershipProvider.CreateUser("user" + i, "123456", "user" + i + "@test.com", null, null, true, null, out status);
            }

            // Make 80 users that have profiles, half of them anonymous.
            for (int i = 20; i < 100; i++) {
                bool isAuthenticated = i % 2 == 0;

                if (isAuthenticated) {
                    MembershipCreateStatus status;
                    membershipProvider.CreateUser("user" + i, "123456", "user" + i + "@test.com", null, null, true, null, out status);
                }

                var values = new SettingsPropertyValueCollection();
                AddProviderSpecificPropertyValuesTo(values, allowAnonymous: true, prefix: string.Format("({0})", i));
                profileProvider.SetPropertyValues(TestHelper.GenerateSettingsContext("user" + i, isAuthenticated), values);
            }

            // Get a direction connection to the database so we can edit the LastActivityDate.
            var url = new MongoUrl(ConnectionString);
            var server = MongoServer.Create(url);
            var database = server.GetDatabase(url.DatabaseName);
            var collection = database.GetCollection(membershipProvider.ApplicationName + ".users");

            var inactiveDate = DateTime.Now.AddDays(-10);

            // Make half of all profiled users inactive.
            var query = Query.Where("this.UserName.substr(4) >= 60");
            var update = Update.Set("Profile.LastActivityDate", SerializationHelper.SerializeDateTime(inactiveDate));
            collection.Update(query, update, UpdateFlags.Multi);
        }
        public void TestSetPropertyValuesWithAnonymousUser()
        {
            var profileConfig = new NameValueCollection(_profileConfig);
            var profileProvider = new MongoProfileProvider();
            profileProvider.Initialize(DefaultProfileName, profileConfig);

            var userName = Guid.NewGuid().ToString();
            var collection = new SettingsPropertyValueCollection();
            AddProviderSpecificPropertyValuesTo(collection, allowAnonymous: true);
            profileProvider.SetPropertyValues(TestHelper.GenerateSettingsContext(userName, false), collection);
        }
        public void TestSetPropertyValues()
        {
            var membershipConfig = new NameValueCollection(_membershipConfig);
            var membershipProvider = new MongoMembershipProvider();
            membershipProvider.Initialize(DefaultMembershipName, membershipConfig);

            MembershipCreateStatus status;
            membershipProvider.CreateUser("user", "123456", "*****@*****.**", null, null, true, null, out status);

            var profileConfig = new NameValueCollection(_profileConfig);
            var profileProvider = new MongoProfileProvider();
            profileProvider.Initialize(DefaultProfileName, profileConfig);

            var collection = new SettingsPropertyValueCollection();
            AddProviderSpecificPropertyValuesTo(collection, allowAnonymous: false);
            profileProvider.SetPropertyValues(TestHelper.GenerateSettingsContext("user", true), collection);
        }
 public void TestInitializeWhenCalledTwice()
 {
     var config = new NameValueCollection(_profileConfig);
     var provider = new MongoProfileProvider();
     Assert.Throws<InvalidOperationException>(() => {
         provider.Initialize(DefaultProfileName, config);
         provider.Initialize(DefaultProfileName, config);
     });
 }
        public void TestGetPropertyValuesUsingXmlProperties()
        {
            var membershipConfig = new NameValueCollection(_membershipConfig);
            var membershipProvider = new MongoMembershipProvider();
            membershipProvider.Initialize(DefaultMembershipName, membershipConfig);

            MembershipCreateStatus status;
            membershipProvider.CreateUser("user", "123456", "*****@*****.**", null, null, true, null, out status);

            var profileConfig = new NameValueCollection(_profileConfig);
            var profileProvider = new MongoProfileProvider();
            profileProvider.Initialize(DefaultProfileName, profileConfig);

            var values = new SettingsPropertyValueCollection();
            AddXmlPropertyValuesTo(values, allowAnonymous: false);
            profileProvider.SetPropertyValues(TestHelper.GenerateSettingsContext("user", true), values);

            var properties = new SettingsPropertyCollection();
            AddXmlPropertiesTo(properties, allowAnonymous: false);

            var retrievedValues = profileProvider
                .GetPropertyValues(TestHelper.GenerateSettingsContext("user", true), properties);
            var rawRetrievedValues = retrievedValues
                .Cast<SettingsPropertyValue>()
                .Select(value => value.PropertyValue)
                .ToList();
            Assert.AreEqual(1, retrievedValues.Count);
            Assert.Contains("Value of stringValue", rawRetrievedValues);
        }
        public void TestGetPropertyValuesUsingProviderSpecificPropertiesWithAnonymousUser()
        {
            var profileConfig = new NameValueCollection(_profileConfig);
            var profileProvider = new MongoProfileProvider();
            profileProvider.Initialize(DefaultProfileName, profileConfig);

            var userName = Guid.NewGuid().ToString();
            var values = new SettingsPropertyValueCollection();
            AddProviderSpecificPropertyValuesTo(values, allowAnonymous: true);
            profileProvider.SetPropertyValues(TestHelper.GenerateSettingsContext(userName, false), values);

            var properties = new SettingsPropertyCollection();
            AddProviderSpecificPropertiesTo(properties, allowAnonymous: true);

            var retrievedValues = profileProvider
                .GetPropertyValues(TestHelper.GenerateSettingsContext(userName, false), properties);
            var rawRetrievedValues = retrievedValues
                .Cast<SettingsPropertyValue>()
                .Select(value => value.PropertyValue)
                .ToList();
            Assert.AreEqual(2, retrievedValues.Count);
            Assert.Contains("Value of stringValue1", rawRetrievedValues);
            Assert.Contains("Value of stringValue2", rawRetrievedValues);
        }
        public void TestGetNumberOfInactiveProfilesThatAreAuthenticated()
        {
            var membershipConfig = new NameValueCollection(_membershipConfig);
            var membershipProvider = new MongoMembershipProvider();
            membershipProvider.Initialize(DefaultMembershipName, membershipConfig);

            var profileConfig = new NameValueCollection(_profileConfig);
            var profileProvider = new MongoProfileProvider();
            profileProvider.Initialize(DefaultProfileName, profileConfig);

            SetUpTestProfiles(membershipProvider, profileProvider);

            var numberOfInactiveProfiles = profileProvider.GetNumberOfInactiveProfiles(ProfileAuthenticationOption.Authenticated, DateTime.Now.AddDays(-1));
            Assert.AreEqual(20, numberOfInactiveProfiles);
        }
        public void TestGetAllProfiles()
        {
            var membershipConfig = new NameValueCollection(_membershipConfig);
            var membershipProvider = new MongoMembershipProvider();
            membershipProvider.Initialize(DefaultMembershipName, membershipConfig);

            var profileConfig = new NameValueCollection(_profileConfig);
            var profileProvider = new MongoProfileProvider();
            profileProvider.Initialize(DefaultProfileName, profileConfig);

            SetUpTestProfiles(membershipProvider, profileProvider);

            int totalRecords = 0;
            var profiles = profileProvider.GetAllProfiles(ProfileAuthenticationOption.All, 0, 30, out totalRecords);

            Assert.AreEqual(80, totalRecords);
            Assert.AreEqual(30, profiles.Count);
            foreach (ProfileInfo p in profiles) {
                Assert.AreEqual("user", p.UserName.Substring(0, 4));
                Assert.Greater(p.Size, 0);
            }
        }
        public void TestGetAllProfilesThatAreAuthenticated()
        {
            var membershipConfig = new NameValueCollection(_membershipConfig);
            var membershipProvider = new MongoMembershipProvider();
            membershipProvider.Initialize(DefaultMembershipName, membershipConfig);

            var profileConfig = new NameValueCollection(_profileConfig);
            var profileProvider = new MongoProfileProvider();
            profileProvider.Initialize(DefaultProfileName, profileConfig);

            SetUpTestProfiles(membershipProvider, profileProvider);

            int totalRecords = 0;
            var profiles = profileProvider.GetAllProfiles(ProfileAuthenticationOption.Authenticated, 0, 30, out totalRecords);

            Assert.AreEqual(40, totalRecords);
            Assert.AreEqual(30, profiles.Count);
            foreach (ProfileInfo p in profiles) {
                Assert.AreEqual("user", p.UserName.Substring(0, 4));

                // All even records are authenticated in this test.
                Assert.IsTrue(Convert.ToInt32(p.UserName.Substring(4)) % 2 == 0);

                Assert.IsFalse(p.IsAnonymous);
                Assert.Greater(p.Size, 0);
            }
        }
        public void TestFindProfilesByUserNameThatAreAnonymous()
        {
            var membershipConfig = new NameValueCollection(_membershipConfig);
            var membershipProvider = new MongoMembershipProvider();
            membershipProvider.Initialize(DefaultMembershipName, membershipConfig);

            var profileConfig = new NameValueCollection(_profileConfig);
            var profileProvider = new MongoProfileProvider();
            profileProvider.Initialize(DefaultProfileName, profileConfig);

            SetUpTestProfiles(membershipProvider, profileProvider);

            int totalRecords = 0;
            var profiles = profileProvider.FindProfilesByUserName(ProfileAuthenticationOption.Anonymous, @"user2\d*", 0, 2, out totalRecords);

            Assert.AreEqual(5, totalRecords);
            Assert.AreEqual(2, profiles.Count);
            foreach (ProfileInfo p in profiles) {
                Assert.IsTrue(p.UserName.StartsWith("user2"));

                // All even records are authenticated in this test.
                Assert.IsFalse(Convert.ToInt32(p.UserName.Substring(4)) % 2 == 0);

                Assert.IsTrue(p.IsAnonymous);
                Assert.Greater(p.Size, 0);
            }
        }
        public void TestFindProfilesByUserName()
        {
            var membershipConfig = new NameValueCollection(_membershipConfig);
            var membershipProvider = new MongoMembershipProvider();
            membershipProvider.Initialize(DefaultMembershipName, membershipConfig);

            var profileConfig = new NameValueCollection(_profileConfig);
            var profileProvider = new MongoProfileProvider();
            profileProvider.Initialize(DefaultProfileName, profileConfig);

            SetUpTestProfiles(membershipProvider, profileProvider);

            int totalRecords = 0;
            var profiles = profileProvider.FindProfilesByUserName(ProfileAuthenticationOption.All, @"user2\d*", 0, 2, out totalRecords);

            Assert.AreEqual(10, totalRecords);
            Assert.AreEqual(2, profiles.Count);
            foreach (ProfileInfo p in profiles) {
                Assert.IsTrue(p.UserName.StartsWith("user2"));
                Assert.Greater(p.Size, 0);
            }
        }
        public void TestFindInactiveProfilesByUserName()
        {
            var membershipConfig = new NameValueCollection(_membershipConfig);
            var membershipProvider = new MongoMembershipProvider();
            membershipProvider.Initialize(DefaultMembershipName, membershipConfig);

            var profileConfig = new NameValueCollection(_profileConfig);
            var profileProvider = new MongoProfileProvider();
            profileProvider.Initialize(DefaultProfileName, profileConfig);

            SetUpTestProfiles(membershipProvider, profileProvider);

            int totalRecords = 0;
            var profiles = profileProvider.FindInactiveProfilesByUserName(
                ProfileAuthenticationOption.All, @"user\d*(0|1)", DateTime.Now.AddDays(-1), 0, 2, out totalRecords);

            Assert.AreEqual(8, totalRecords);
            Assert.AreEqual(2, profiles.Count);
            foreach (ProfileInfo p in profiles) {
                Assert.IsTrue(p.UserName.StartsWith("user") && (p.UserName.EndsWith("0") || p.UserName.EndsWith("1")));
                Assert.Greater(p.Size, 0);
            }
        }
        public void TestDeleteProfilesUsingStringArray()
        {
            var membershipConfig = new NameValueCollection(_membershipConfig);
            var membershipProvider = new MongoMembershipProvider();
            membershipProvider.Initialize(DefaultMembershipName, membershipConfig);

            var profileConfig = new NameValueCollection(_profileConfig);
            var profileProvider = new MongoProfileProvider();
            profileProvider.Initialize(DefaultProfileName, profileConfig);

            SetUpTestProfiles(membershipProvider, profileProvider);

            int numberOfUsersBefore, numberOfUsersAfter;
            membershipProvider.GetAllUsers(0, int.MaxValue, out numberOfUsersBefore);

            // Note that user0 does not have a profile.
            var numberOfProfilesDeleted = profileProvider.DeleteProfiles(new [] { "user0", "user44", "user56" });

            int numberOfProfilesRemaining;
            profileProvider.GetAllProfiles(ProfileAuthenticationOption.All, 0, int.MaxValue, out numberOfProfilesRemaining);

            membershipProvider.GetAllUsers(0, int.MaxValue, out numberOfUsersAfter);

            Assert.AreEqual(2, numberOfProfilesDeleted);
            Assert.AreEqual(78, numberOfProfilesRemaining);

            // No users should be removed by this process.
            Assert.AreEqual(numberOfUsersBefore, numberOfUsersAfter);
        }
        public void TestDeleteProfilesUsingProfileInfoCollection()
        {
            var membershipConfig = new NameValueCollection(_membershipConfig);
            var membershipProvider = new MongoMembershipProvider();
            membershipProvider.Initialize(DefaultMembershipName, membershipConfig);

            var profileConfig = new NameValueCollection(_profileConfig);
            var profileProvider = new MongoProfileProvider();
            profileProvider.Initialize(DefaultProfileName, profileConfig);

            SetUpTestProfiles(membershipProvider, profileProvider);

            int numberOfUsersBefore, numberOfUsersAfter;
            membershipProvider.GetAllUsers(0, int.MaxValue, out numberOfUsersBefore);

            int totalRecords;
            var profiles = profileProvider.FindProfilesByUserName(ProfileAuthenticationOption.All, @"user3\d", 0, int.MaxValue, out totalRecords);
            var numberOfProfilesDeleted = profileProvider.DeleteProfiles(profiles);

            int numberOfProfilesRemaining;
            profileProvider.GetAllProfiles(ProfileAuthenticationOption.All, 0, int.MaxValue, out numberOfProfilesRemaining);

            membershipProvider.GetAllUsers(0, int.MaxValue, out numberOfUsersAfter);

            Assert.AreEqual(10, numberOfProfilesDeleted);
            Assert.AreEqual(70, numberOfProfilesRemaining);

            // No users should be removed by this process.
            Assert.AreEqual(numberOfUsersBefore, numberOfUsersAfter);
        }