public override IUsersStorageProviderV30 GetProvider( )
        {
            SqlServerUsersStorageProvider prov = new SqlServerUsersStorageProvider( );

            prov.Init(MockHost( ), ConnString + InitialCatalog);
            return(prov);
        }
        public void Init_Upgrade( )
        {
            FixtureTearDown( );

            SqlConnection cn = new SqlConnection(ConnString);

            cn.Open( );

            SqlCommand cmd = cn.CreateCommand( );

            cmd.CommandText = "create database [ScrewTurnWikiTest];";
            cmd.ExecuteNonQuery( );
            cn.Close( );

            cn = new SqlConnection(ConnString + InitialCatalog);
            cn.Open( );

            cmd             = cn.CreateCommand( );
            cmd.CommandText =
                @"CREATE TABLE [UsersProviderVersion] (
	[Version] varchar(12) PRIMARY KEY
);
INSERT INTO [UsersProviderVersion] ([Version]) VALUES ('Irrelevant');

CREATE TABLE [User] (
	[Username] nvarchar(128) PRIMARY KEY,
	[PasswordHash] varchar(128) NOT NULL,
	[Email] varchar(128) NOT NULL,
	[DateTime] datetime NOT NULL,
	[Active] bit NOT NULL DEFAULT ((0)),
	[Admin] bit NOT NULL DEFAULT ((0))
);

INSERT INTO [User] ([Username], [PasswordHash], [Email], [DateTime], [Active], [Admin]) values ('user', 'hash', '*****@*****.**', '2008/12/27 12:12:12', 'true', 'false');
INSERT INTO [User] ([Username], [PasswordHash], [Email], [DateTime], [Active], [Admin]) values ('user2', 'hash2', '*****@*****.**', '2008/12/27 12:12:13', 'false', 'true');";

            bool done = false;

            try
            {
                cmd.ExecuteNonQuery( );
                done = true;
            }
            catch (SqlException sqlex)
            {
                Console.WriteLine(sqlex.ToString( ));
            }
            finally
            {
                cn.Close( );
            }

            if (!done)
            {
                throw new Exception("Could not create v2 test database");
            }

            MockRepository mocks = new MockRepository( );
            IHostV30       host  = mocks.DynamicMock <IHostV30>( );

            Expect.Call(host.GetSettingValue(SettingName.AdministratorsGroup)).Return("Administrators").Repeat.Once( );
            Expect.Call(host.GetSettingValue(SettingName.UsersGroup)).Return("Users").Repeat.Once( );

            Expect.Call(host.UpgradeSecurityFlagsToGroupsAcl(null, null)).IgnoreArguments( ).Repeat.Times(1).Return(true);

            mocks.Replay(host);

            IUsersStorageProviderV30 prov = new SqlServerUsersStorageProvider( );

            prov.Init(host, ConnString + InitialCatalog);

            mocks.Verify(host);

            UserInfo[] users = prov.GetUsers( );

            Assert.AreEqual(2, users.Length, "Wrong user count");

            Assert.AreEqual("user", users[0].Username, "Wrong username");
            Assert.IsNull(users[0].DisplayName, "Display name should be null");
            Assert.AreEqual("*****@*****.**", users[0].Email, "Wrong email");
            Assert.AreEqual("2008/12/27 12:12:12", users[0].DateTime.ToString("yyyy'/'MM'/'dd' 'HH':'mm':'ss"), "Wrong date/time");
            Assert.IsTrue(users[0].Active, "User should be active");
            Assert.AreEqual(1, users[0].Groups.Length, "Wrong group count");
            Assert.AreEqual("Users", users[0].Groups[0], "Wrong group");

            Assert.AreEqual("user2", users[1].Username, "Wrong username");
            Assert.IsNull(users[1].DisplayName, "Display name should be null");
            Assert.AreEqual("*****@*****.**", users[1].Email, "Wrong email");
            Assert.AreEqual("2008/12/27 12:12:13", users[1].DateTime.ToString("yyyy'/'MM'/'dd' 'HH':'mm':'ss"), "Wrong date/time");
            Assert.IsFalse(users[1].Active, "User should be inactive");
            Assert.AreEqual(1, users[1].Groups.Length, "Wrong group count");
            Assert.AreEqual("Administrators", users[1].Groups[0], "Wrong group");
        }
        public void Init_Upgrade()
        {
            FixtureTearDown();

            SqlConnection cn = new SqlConnection(ConnString);
            cn.Open();

            SqlCommand cmd = cn.CreateCommand();
            cmd.CommandText = "create database [ScrewTurnWikiTest];";
            cmd.ExecuteNonQuery();
            cn.Close();

            cn = new SqlConnection(ConnString + InitialCatalog);
            cn.Open();

            cmd = cn.CreateCommand();
            cmd.CommandText =
            @"CREATE TABLE [UsersProviderVersion] (
            [Version] varchar(12) PRIMARY KEY
            );
            INSERT INTO [UsersProviderVersion] ([Version]) VALUES ('Irrelevant');

            CREATE TABLE [User] (
            [Username] nvarchar(128) PRIMARY KEY,
            [PasswordHash] varchar(128) NOT NULL,
            [Email] varchar(128) NOT NULL,
            [DateTime] datetime NOT NULL,
            [Active] bit NOT NULL DEFAULT ((0)),
            [Admin] bit NOT NULL DEFAULT ((0))
            );

            INSERT INTO [User] ([Username], [PasswordHash], [Email], [DateTime], [Active], [Admin]) values ('user', 'hash', '*****@*****.**', '2008/12/27 12:12:12', 'true', 'false');
            INSERT INTO [User] ([Username], [PasswordHash], [Email], [DateTime], [Active], [Admin]) values ('user2', 'hash2', '*****@*****.**', '2008/12/27 12:12:13', 'false', 'true');";

            bool done = false;
            try {
                cmd.ExecuteNonQuery();
                done = true;
            }
            catch(SqlException sqlex) {
                Console.WriteLine(sqlex.ToString());
            }
            finally {
                cn.Close();
            }

            if(!done) throw new Exception("Could not create v2 test database");

            MockRepository mocks = new MockRepository();
            IHostV30 host = mocks.DynamicMock<IHostV30>();
            Expect.Call(host.GetSettingValue(SettingName.AdministratorsGroup)).Return("Administrators").Repeat.Once();
            Expect.Call(host.GetSettingValue(SettingName.UsersGroup)).Return("Users").Repeat.Once();

            Expect.Call(host.UpgradeSecurityFlagsToGroupsAcl(null, null)).IgnoreArguments().Repeat.Times(1).Return(true);

            mocks.Replay(host);

            IUsersStorageProviderV30 prov = new SqlServerUsersStorageProvider();
            prov.Init(host, ConnString + InitialCatalog);

            mocks.Verify(host);

            UserInfo[] users = prov.GetUsers();

            Assert.AreEqual(2, users.Length, "Wrong user count");

            Assert.AreEqual("user", users[0].Username, "Wrong username");
            Assert.IsNull(users[0].DisplayName, "Display name should be null");
            Assert.AreEqual("*****@*****.**", users[0].Email, "Wrong email");
            Assert.AreEqual("2008/12/27 12:12:12", users[0].DateTime.ToString("yyyy'/'MM'/'dd' 'HH':'mm':'ss"), "Wrong date/time");
            Assert.IsTrue(users[0].Active, "User should be active");
            Assert.AreEqual(1, users[0].Groups.Length, "Wrong group count");
            Assert.AreEqual("Users", users[0].Groups[0], "Wrong group");

            Assert.AreEqual("user2", users[1].Username, "Wrong username");
            Assert.IsNull(users[1].DisplayName, "Display name should be null");
            Assert.AreEqual("*****@*****.**", users[1].Email, "Wrong email");
            Assert.AreEqual("2008/12/27 12:12:13", users[1].DateTime.ToString("yyyy'/'MM'/'dd' 'HH':'mm':'ss"), "Wrong date/time");
            Assert.IsFalse(users[1].Active, "User should be inactive");
            Assert.AreEqual(1, users[1].Groups.Length, "Wrong group count");
            Assert.AreEqual("Administrators", users[1].Groups[0], "Wrong group");
        }
        public void SetUp_InvalidConnString(string c)
        {
            SqlServerUsersStorageProvider prov = new SqlServerUsersStorageProvider();

            prov.SetUp(MockHost(), c);
        }
 public override IUsersStorageProviderV30 GetProvider()
 {
     SqlServerUsersStorageProvider prov = new SqlServerUsersStorageProvider();
     prov.Init(MockHost(), ConnString + InitialCatalog);
     return prov;
 }