public void CanCreateAccessDefinition()
        {
            AccessMode modes = AccessMode.Write | AccessMode.Read;

            AccessDefinitionParameters parameters = new AccessDefinitionParameters
            {
                Modes            = modes,
                AccessModesLabel = GetAccessModesLabel(modes)
            };

            CreateAccessDefinition(parameters);

            // Assertions for creation
            // Check for last table row which contains latest access definition
            IReadOnlyList <IWebElement> result = Driver.FindElements(By.CssSelector("tr:last-child td"));

            Assert.GreaterOrEqual(result.Count, 2);
            Assert.AreEqual(parameters.AccessModesLabel, result[0].Text);

            // second td element has list of access modes
            List <string> retreivedModes = result[1].Text.Split(',').Select(x => x.Trim()).ToList();
            List <string> allModes       = modes.AsStringList();

            foreach (string currentMode in retreivedModes)
            {
                Assert.Contains(currentMode, allModes);
            }

            // Destroy access definition
            int rowsBeforeDeletion = Driver.FindElements(By.TagName("tr")).Count();

            // result[4] has the delete button
            result[4].Click();
            Driver.SwitchTo().Alert().Accept();
            WaitPageSourceChange(5, 500);
            int rowsAfterDeletion = Driver.FindElements(By.TagName("tr")).Count();

            // Check if it was detroyed
            Assert.AreEqual(rowsBeforeDeletion - 1, rowsAfterDeletion);
        }
        public void CanFilterAccessibleEntities()
        {
            /*
             * admin create user
             * admin create accessdefinition
             * admin create item
             * admin create collection
             * admin add permission to view item
             * can admin see item ?
             * can admin see collection ?
             * can user can see item ?
             * can user not see collection ?
             * delete user
             * delete item
             * delete collection
             */

            string userName1            = "user read permission";
            string userName2            = "user with user list read permission";
            string userListName         = "userlist read permission";
            string accessDefinitionName = "access modes for integration tests";
            string password             = "******";

            UserParameters user1Parameters = new UserParameters
            {
                UserName = userName1,
                Password = password
            };

            UserParameters user2Parameters = new UserParameters
            {
                UserName = userName2,
                Password = password
            };

            ItemParameters itemParameters = new ItemParameters
            {
                ItemName = "Item for access integration tests"
            };

            CollectionParameters collectionParameters = new CollectionParameters
            {
                CollectionName = "Collection for access integration tests"
            };

            AccessDefinitionParameters accessDefinitionParameters = new AccessDefinitionParameters
            {
                Modes            = AccessMode.Read,
                AccessModesLabel = accessDefinitionName
            };

            UserListParameters userListParameters = new UserListParameters
            {
                ListName = userListName,
                Users    = new string[] { userName2 }
            };


            //CreateUser(user1Parameters);
            //CreateUser(user2Parameters);
            ////CreateUserList(userListParameters);
            // Create metadata set
            // Create entityh type
            CreateItem(itemParameters);
            ////CreateCollection(collectionParameters);
            ////CreateAccessDefinition(accessDefinitionParameters);

            //// navigate to newly created item
            //// click on its button with class glyphicon-eye-close
            WaitPageSourceChange(5, 500);

            //Navigate(new string[] { ContentLabel, ItemsLabel });

            //// click on last item
            ////Driver.FindElement(By.XPath("//button[@class='glyphicon-eye-close']")).Click();
            ////Driver.FindElement(By.XPath("//table/tbody/tr[last()]/tr[last()]/form[last()]/button[@class='glyphicon glyphicon-eye-close']")).Click();
            //Driver.FindElement(By.XPath("(//button[@class[contains(.,'glyphicon-eye-close')]])[last()]")).Click();
            //Driver.FindElement(By.Id("usrName")).SendKeys(userName1);
            //WaitPageSourceChange(5, 500);
            //Driver.FindElement(By.XPath("//li/div[contains(string(), '"+userName1+"')]")).Click();

            //IWebElement groupElement = Driver.FindElement(By.Id("SelectedAccessDefinition"));
            //SelectElement selectElement = new SelectElement(groupElement);
            //// assuming there are at least 2 groups to avoid creating
            //// administrators
            //selectElement.SelectByText(accessDefinitionName + " - Read");
            //Driver.FindElement(By.Id("btnAddUserAccess")).Click();
            //Driver.FindElement(By.LinkText(SaveLabel)).Click();

            //Logout();
            //Login(userName1, password);

            //// check if user 1 can see what it needs

            //Logout();
            //Login(userName2, password);
            //// check if user 2 can see what it needs


            //Logout();

            //LoginAsAdmin();
            // Cleanup


            // delete item
            Navigate(new string[] { ContentLabel, ItemsLabel });

            string pathToRemoveButton = "//td[text()='"
                                        + itemParameters.ItemName
                                        + "']/../td[contains[@class='action-panel']]"
                                        + "//button[contains[@class='glyphicon-remove']]";

            Driver.FindElement(By.XPath(pathToRemoveButton)).Click();


            // delete collection
            //Navigate(new string[] { ContentLabel, CollectionsLabel });

            // delete access definition
            //Navigate(new string[] { SystemLabel, AccessDefinitionLabel });
            // delete user1


            // delete user2

            // delete entity type
            // delete metadata set
        }