// Wait for the preview.
appCreatePage.waitForApplicationNamePreview();
// Move to the next step.
ApplicationClassEditPage classEditPage = appCreatePage.clickNextStep();
// Step 2
// Add a 'Short Text' field.
ClassFieldEditPane fieldEditPane = classEditPage.addField("Short Text");
// Set the field pretty name and default value
fieldEditPane.setPrettyName("City Name");
fieldEditPane.setDefaultValue("Paris");
// Move to the next step.
ApplicationHomeEditPage homeEditPage = classEditPage.clickNextStep().waitUntilPageIsLoaded();
// Move back to the second step.
classEditPage = homeEditPage.clickPreviousStep();
// Open the configuration panel and set the field name
fieldEditPane = new ClassFieldEditPane("shortText1");
fieldEditPane.openConfigPanel();
fieldEditPane.setName("cityName");
// Move to the next step.
homeEditPage = classEditPage.clickNextStep();
// Step 3
// Enter the application description.
String appDescription = "Simple application to manage data about various cities";
homeEditPage.setDescription(appDescription);
// Add the Short Text field from the previous step to the list of columns.
homeEditPage.addLiveTableColumn("City Name");
// Click the finish button which should lead us to the application home page.
ApplicationHomePage homePage = homeEditPage.clickFinish();
// Assert the application description is present.
Assert.assertTrue(homePage.getContent().contains(appDescription));
// 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();