// Add a new entry.
String firstEntryName = RandomStringUtils.randomAlphanumeric(6);
EntryNamePane entryNamePane = homePage.clickAddNewEntry();
entryNamePane.setName(firstEntryName);
EntryEditPage entryEditPage = entryNamePane.clickAdd();
// Assert the pretty name and the default value of the Short Text field.
// Apparently WebElement#getText() takes into account the text-transform CSS property.
Assert.assertEquals("CITY NAME", entryEditPage.getLabel("cityName"));
Assert.assertEquals("Paris", entryEditPage.getValue("cityName"));
// Change the field value.
entryEditPage.setValue("cityName", "London");
// Save and go back to the application home page.
String appHomePageTitle = appName + " Home";
entryEditPage.clickSaveAndView().clickBreadcrumbLink(appHomePageTitle);
homePage = new ApplicationHomePage();
// Assert the entry we have just created is listed in the live table.
LiveTableElement entriesLiveTable = homePage.getEntriesLiveTable();
entriesLiveTable.waitUntilReady();
Assert.assertTrue(entriesLiveTable.hasRow("City Name", "London"));
// Assert that the application space index lists only the home page and the entry we have just created. The rest
// of the documents (class, template, sheet, preferences) should be marked as hidden.
LiveTableElement appSpaceIndexLiveTable = SpaceIndexPage.gotoPage(appName).getLiveTable();
appSpaceIndexLiveTable.waitUntilReady();
Assert.assertEquals(2, appSpaceIndexLiveTable.getRowCount());
Assert.assertTrue(appSpaceIndexLiveTable.hasRow("Page", "WebHome"));
Assert.assertTrue(appSpaceIndexLiveTable.hasRow("Page", firstEntryName));
// Go back to the application home page.
getDriver().navigate().back();
// Click the edit button.
homePage.edit();
homeEditPage = new ApplicationHomeEditPage();
// Change the application description.
appDescription = "The best app!";
homeEditPage.setDescription(appDescription);
// Remove one of the live table columns.
homeEditPage.removeLiveTableColumn("Actions");
// Save
homePage = homeEditPage.clickSaveAndView();
// Assert that the application description has changed and that the column has been removed.
Assert.assertTrue(homePage.getContent().contains(appDescription));
entriesLiveTable = homePage.getEntriesLiveTable();
entriesLiveTable.waitUntilReady();
Assert.assertFalse(entriesLiveTable.hasColumn("Actions"));
// Click the link to edit the application.
classEditPage = homePage.clickEditApplication();
// Drag a Number field.
fieldEditPane = classEditPage.addField("Number");
// Set the field pretty name.
fieldEditPane.setPrettyName("Population Size");
// Fast forward.
homeEditPage = classEditPage.clickNextStep();
// Just wait for the WYSIWYG editor (which is used for setting the application description) to load so that the
// page layout is stable before we click on the Finish button.
homeEditPage.setDescription(appDescription);
homePage = homeEditPage.clickFinish();
// Add a new entry.
String secondEntryName = RandomStringUtils.randomAlphanumeric(6);
entryNamePane = homePage.clickAddNewEntry();
entryNamePane.setName(secondEntryName);
entryEditPage = entryNamePane.clickAdd();
// Assert the new field is displayed in the edit sheet (field name was auto-generated).
// Apparently WebElement#getText() takes into account the text-transform CSS property.
Assert.assertEquals("POPULATION SIZE", entryEditPage.getLabel("number1"));
// Save and go back to the application home page.
entryEditPage.clickSaveAndView().clickBreadcrumbLink(appHomePageTitle);
homePage = new ApplicationHomePage();
// Assert both entries are displayed in the live table.
entriesLiveTable = homePage.getEntriesLiveTable();
entriesLiveTable.waitUntilReady();