Browse Source

rename the package, changes some files names, more config variables

purigarcia 9 years ago
parent
commit
2f1e634342
52 changed files with 1358 additions and 508 deletions
  1. 5 0
      automationTest/.classpath
  2. 0 20
      automationTest/src/test/java/androidtest/tests/Config.java
  3. 0 92
      automationTest/src/test/java/androidtest/tests/MoveFileTestSuite.java
  4. 0 84
      automationTest/src/test/java/androidtest/tests/RenameFileTestSuite.java
  5. 0 123
      automationTest/src/test/java/androidtest/tests/UploadTestSuite.java
  6. 25 25
      automationTest/src/test/java/com/owncloud/android/test/ui/actions/Actions.java
  7. 3 0
      automationTest/src/test/java/com/owncloud/android/test/ui/groups/FailingTestCategory.java
  8. 138 0
      automationTest/src/test/java/com/owncloud/android/test/ui/groups/FlexibleCategories.java
  9. 4 0
      automationTest/src/test/java/com/owncloud/android/test/ui/groups/IgnoreTestCategory.java
  10. 5 0
      automationTest/src/test/java/com/owncloud/android/test/ui/groups/NoIgnoreTestCategory.java
  11. 3 0
      automationTest/src/test/java/com/owncloud/android/test/ui/groups/OtherTestCategory.java
  12. 141 0
      automationTest/src/test/java/com/owncloud/android/test/ui/groups/PatternClasspathClassesFinder.java
  13. 5 0
      automationTest/src/test/java/com/owncloud/android/test/ui/groups/SmokeTestCategory.java
  14. 5 0
      automationTest/src/test/java/com/owncloud/android/test/ui/groups/UnfinishedTestCategory.java
  15. 1 1
      automationTest/src/test/java/com/owncloud/android/test/ui/models/CertificatePopUp.java
  16. 4 4
      automationTest/src/test/java/com/owncloud/android/test/ui/models/ElementMenuOptions.java
  17. 3 3
      automationTest/src/test/java/com/owncloud/android/test/ui/models/FileDetailsView.java
  18. 12 8
      automationTest/src/test/java/com/owncloud/android/test/ui/models/FileListView.java
  19. 27 0
      automationTest/src/test/java/com/owncloud/android/test/ui/models/GmailEmailListView.java
  20. 30 0
      automationTest/src/test/java/com/owncloud/android/test/ui/models/GmailEmailView.java
  21. 43 0
      automationTest/src/test/java/com/owncloud/android/test/ui/models/GmailSendMailView.java
  22. 56 0
      automationTest/src/test/java/com/owncloud/android/test/ui/models/ImageView.java
  23. 4 4
      automationTest/src/test/java/com/owncloud/android/test/ui/models/LoginForm.java
  24. 1 1
      automationTest/src/test/java/com/owncloud/android/test/ui/models/MenuList.java
  25. 2 2
      automationTest/src/test/java/com/owncloud/android/test/ui/models/MoveView.java
  26. 1 1
      automationTest/src/test/java/com/owncloud/android/test/ui/models/NewFolderPopUp.java
  27. 34 0
      automationTest/src/test/java/com/owncloud/android/test/ui/models/PassCodeRequestView.java
  28. 43 0
      automationTest/src/test/java/com/owncloud/android/test/ui/models/PassCodeView.java
  29. 1 1
      automationTest/src/test/java/com/owncloud/android/test/ui/models/RemoveConfirmationView.java
  30. 2 2
      automationTest/src/test/java/com/owncloud/android/test/ui/models/SettingsView.java
  31. 28 0
      automationTest/src/test/java/com/owncloud/android/test/ui/models/ShareView.java
  32. 9 7
      automationTest/src/test/java/com/owncloud/android/test/ui/models/UploadFilesView.java
  33. 26 0
      automationTest/src/test/java/com/owncloud/android/test/ui/models/UploadView.java
  34. 1 1
      automationTest/src/test/java/com/owncloud/android/test/ui/models/WaitAMomentPopUp.java
  35. 0 0
      automationTest/src/test/java/com/owncloud/android/test/ui/testSuites/.gitignore
  36. 3 3
      automationTest/src/test/java/com/owncloud/android/test/ui/testSuites/Common.java
  37. 16 16
      automationTest/src/test/java/com/owncloud/android/test/ui/testSuites/CreateFolderTestSuite.java
  38. 14 14
      automationTest/src/test/java/com/owncloud/android/test/ui/testSuites/DeleteFileTestSuite.java
  39. 15 15
      automationTest/src/test/java/com/owncloud/android/test/ui/testSuites/DeleteFolderTestSuite.java
  40. 24 22
      automationTest/src/test/java/com/owncloud/android/test/ui/testSuites/LoginTestSuite.java
  41. 11 11
      automationTest/src/test/java/com/owncloud/android/test/ui/testSuites/LogoutTestSuite.java
  42. 92 0
      automationTest/src/test/java/com/owncloud/android/test/ui/testSuites/MoveFileTestSuite.java
  43. 27 27
      automationTest/src/test/java/com/owncloud/android/test/ui/testSuites/MoveFolderTestSuite.java
  44. 70 0
      automationTest/src/test/java/com/owncloud/android/test/ui/testSuites/PasscodeTestSuite.java
  45. 55 0
      automationTest/src/test/java/com/owncloud/android/test/ui/testSuites/RefreshFolderTestSuite.java
  46. 84 0
      automationTest/src/test/java/com/owncloud/android/test/ui/testSuites/RenameFileTestSuite.java
  47. 21 21
      automationTest/src/test/java/com/owncloud/android/test/ui/testSuites/RenameFolderTestSuite.java
  48. 24 0
      automationTest/src/test/java/com/owncloud/android/test/ui/testSuites/RunFailingTests.java
  49. 22 0
      automationTest/src/test/java/com/owncloud/android/test/ui/testSuites/RunNoIgnoreTests.java
  50. 22 0
      automationTest/src/test/java/com/owncloud/android/test/ui/testSuites/RunSmokeTests.java
  51. 72 0
      automationTest/src/test/java/com/owncloud/android/test/ui/testSuites/ShareLinkFileTestSuite.java
  52. 124 0
      automationTest/src/test/java/com/owncloud/android/test/ui/testSuites/UploadTestSuite.java

+ 5 - 0
automationTest/.classpath

@@ -23,5 +23,10 @@
 			<attribute name="maven.pomderived" value="true"/>
 		</attributes>
 	</classpathentry>
+	<classpathentry excluding="**" kind="src" output="target/test-classes" path="src/test/resources">
+		<attributes>
+			<attribute name="maven.pomderived" value="true"/>
+		</attributes>
+	</classpathentry>
 	<classpathentry kind="output" path="target/classes"/>
 </classpath>

+ 0 - 20
automationTest/src/test/java/androidtest/tests/Config.java

@@ -1,20 +0,0 @@
-package androidtest.tests;
-
-public final class Config {
-
-	//without http or https
-	public static final String URL = "owncloudServerVar";
-	public static boolean isTrusted = true;
-
-	//without http or https
-	public static final String URL2 = "owncloudServer2Var";
-	public static boolean isTrusted2 = true;
-
-	public static final String user = "owncloudUserVar";
-	public static final String password = "owncloudPasswordVar";
-	public static final String user2 = "owncloudUser2Var";
-	public static final String password2 = "owncloudPassword2Var";
-	public static final String userAccount = user + "@"+ URL;
-	public static final String userAccount2 = user2 + "@"+ URL2;
-
-}

+ 0 - 92
automationTest/src/test/java/androidtest/tests/MoveFileTestSuite.java

@@ -1,92 +0,0 @@
-package androidtest.tests;
-
-import static org.junit.Assert.*;
-import io.appium.java_client.android.AndroidDriver;
-
-import org.junit.After;
-import org.junit.Before;
-import org.junit.FixMethodOrder;
-import org.junit.Rule;
-import org.junit.Test;
-import org.junit.experimental.categories.Category;
-import org.junit.rules.TestName;
-import org.junit.runners.MethodSorters;
-
-import androidtest.actions.Actions;
-import androidtest.groups.NoIgnoreTestCategory;
-import androidtest.groups.SmokeTestCategory;
-import androidtest.models.ElementMenuOptions;
-import androidtest.models.MainView;
-import androidtest.models.MoveView;
-import androidtest.models.WaitAMomentPopUp;
-
-
-
-@FixMethodOrder(MethodSorters.NAME_ASCENDING)
-public class MoveFileTestSuite{
-	AndroidDriver driver;
-	Common common;
-	private String FOLDER_WHERE_MOVE = "folderWhereMove";
-	private String FILE_NAME = "test";
-	@Rule public TestName name = new TestName();
-	
-	@Before
-	public void setUp() throws Exception {
-		common=new Common();
-		driver=common.setUpCommonDriver();
-	}
-
-	@Test
-	@Category({NoIgnoreTestCategory.class, SmokeTestCategory.class})
-	public void testMoveFile () throws Exception {
-		WaitAMomentPopUp waitAMomentPopUp;
-
-		MainView mainView = Actions.login(Config.URL, Config.user,Config.password, Config.isTrusted, driver);
-		common.assertIsInMainView();
-
-		Common.waitTillElementIsNotPresent(mainView.getProgressCircular(), 1000);
-
-		//check if the folder already exists and if true, delete them
-		Actions.deleteElement(FOLDER_WHERE_MOVE, mainView, driver);
-		Actions.deleteElement(FILE_NAME, mainView, driver);
-
-		//Create the folder where the other is gone to be moved
-		waitAMomentPopUp = Actions.createFolder(FOLDER_WHERE_MOVE, mainView);
-		Common.waitTillElementIsNotPresent(waitAMomentPopUp.getWaitAMomentTextElement(), 100);
-		mainView.scrollTillFindElement(FOLDER_WHERE_MOVE);
-		assertTrue(mainView.getFileElement().isDisplayed());
-
-		MainView mainViewAfterUploadFile = Actions.uploadFile(FILE_NAME, mainView);
-		mainViewAfterUploadFile.scrollTillFindElement(FILE_NAME);
-		assertTrue(mainViewAfterUploadFile.getFileElement().isDisplayed());
-
-		//select to move the file
-		ElementMenuOptions menuOptions = mainView.longPressOnElement(FILE_NAME);
-		MoveView moveView = menuOptions.clickOnMove();
-
-		//to move to a folder
-		moveView.scrollTillFindElement(FOLDER_WHERE_MOVE).tap(1,1);
-		waitAMomentPopUp = moveView.clickOnChoose();
-		Common.waitTillElementIsNotPresent(waitAMomentPopUp.getWaitAMomentTextElement(), 100);
-
-		//check that the folder moved is inside the other
-		mainView.scrollTillFindElement(FOLDER_WHERE_MOVE).tap(1,1);
-		Common.waitTillElementIsNotPresent(mainView.getProgressCircular(), 1000);
-		Thread.sleep(1000);
-		mainView.scrollTillFindElement(FILE_NAME);
-		assertEquals(FILE_NAME , mainView.getFileElement().getText());
-
-	}
-
-	@After
-	public void tearDown() throws Exception {
-		common.takeScreenShotOnFailed(name.getMethodName());
-		MainView mainView = new MainView(driver);
-		driver.sendKeyEvent(android.view.KeyEvent.KEYCODE_BACK);
-		Actions.deleteElement(FOLDER_WHERE_MOVE, mainView, driver);
-		Actions.deleteElement(FILE_NAME, mainView, driver);
-		driver.removeApp("com.owncloud.android");
-		driver.quit();
-	}
-
-}

+ 0 - 84
automationTest/src/test/java/androidtest/tests/RenameFileTestSuite.java

@@ -1,84 +0,0 @@
-package androidtest.tests;
-
-import static org.junit.Assert.*;
-import io.appium.java_client.android.AndroidDriver;
-
-import org.junit.After;
-import org.junit.Before;
-import org.junit.Rule;
-import org.junit.experimental.categories.Category;
-import org.junit.rules.TestName;
-import org.junit.runners.MethodSorters;
-import org.junit.FixMethodOrder;
-import org.junit.Test;
-import org.openqa.selenium.By;
-import org.openqa.selenium.support.ui.ExpectedConditions;
-
-import androidtest.actions.Actions;
-import androidtest.groups.NoIgnoreTestCategory;
-import androidtest.groups.SmokeTestCategory;
-import androidtest.models.ElementMenuOptions;
-import androidtest.models.MainView;
-import androidtest.models.NewFolderPopUp;
-import androidtest.models.WaitAMomentPopUp;
-
-
-@FixMethodOrder(MethodSorters.NAME_ASCENDING)
-public class RenameFileTestSuite{
-
-	AndroidDriver driver;
-	Common common;
-	private Boolean fileHasBeenCreated = false;
-	private final String OLD_FILE_NAME = "test";
-	private final String FILE_NAME = "newNameFile";
-	private String CurrentCreatedFile = "";
-	
-	@Rule public TestName name = new TestName();
-
-	@Before
-	public void setUp() throws Exception {
-		common=new Common();
-		driver=common.setUpCommonDriver();
-	}
-
-	@Test
-	@Category({NoIgnoreTestCategory.class, SmokeTestCategory.class})
-	public void testRenameFile () throws Exception {
-		MainView mainView = Actions.login(Config.URL, Config.user,Config.password, Config.isTrusted, driver);
-		common.assertIsInMainView();
-
-		//TODO. if the file already exists, do not upload
-		MainView mainViewAfterUploadFile = Actions.uploadFile(OLD_FILE_NAME, mainView);
-
-		//check if the file with the new name already exists, if true delete it
-		Actions.deleteElement(FILE_NAME, mainView, driver);
-
-		mainViewAfterUploadFile.scrollTillFindElement(OLD_FILE_NAME);
-		assertTrue(fileHasBeenCreated = mainViewAfterUploadFile.getFileElement().isDisplayed());
-		CurrentCreatedFile = OLD_FILE_NAME;
-		Common.waitTillElementIsNotPresent(mainViewAfterUploadFile.getProgressCircular(), 1000);
-		common.wait.until(ExpectedConditions.visibilityOf(mainViewAfterUploadFile.getFileElementLayout().findElement(By.id(MainView.getLocalFileIndicator()))));
-		ElementMenuOptions menuOptions = mainViewAfterUploadFile.longPressOnElement(OLD_FILE_NAME);
-		NewFolderPopUp newFolderPopUp = menuOptions.clickOnRename();
-		newFolderPopUp.typeNewFolderName(FILE_NAME);
-		WaitAMomentPopUp waitAMomentPopUp = newFolderPopUp.clickOnNewFolderOkButton();
-		Common.waitTillElementIsNotPresent(waitAMomentPopUp.getWaitAMomentTextElement(), 100);
-		mainViewAfterUploadFile.scrollTillFindElement(FILE_NAME);
-		assertNotNull(mainViewAfterUploadFile.getFileElement());
-		assertTrue(mainViewAfterUploadFile.getFileElement().isDisplayed());	
-		assertEquals(FILE_NAME , mainViewAfterUploadFile.getFileElement().getText());
-		CurrentCreatedFile = FILE_NAME;
-	}
-
-	@After
-	public void tearDown() throws Exception {
-		common.takeScreenShotOnFailed(name.getMethodName());
-		if (fileHasBeenCreated) {
-			MainView mainView = new MainView(driver);
-			Actions.deleteElement(CurrentCreatedFile,mainView, driver);
-		}
-		driver.removeApp("com.owncloud.android");
-		driver.quit();
-	}
-
-}

+ 0 - 123
automationTest/src/test/java/androidtest/tests/UploadTestSuite.java

@@ -1,123 +0,0 @@
-package androidtest.tests;
-
-
-import static org.junit.Assert.*;
-import io.appium.java_client.MobileBy;
-import io.appium.java_client.android.AndroidDriver;
-
-import org.junit.After;
-import org.junit.Before;
-import org.junit.Rule;
-import org.junit.experimental.categories.Category;
-import org.junit.rules.TestName;
-import org.junit.runners.MethodSorters;
-import org.junit.FixMethodOrder;
-import org.junit.Test;
-import org.openqa.selenium.By;
-import org.openqa.selenium.support.ui.ExpectedConditions;
-
-import androidtest.actions.Actions;
-import androidtest.groups.FailingTestCategory;
-import androidtest.groups.IgnoreTestCategory;
-import androidtest.groups.NoIgnoreTestCategory;
-import androidtest.models.AppDetailsView;
-import androidtest.models.ElementMenuOptions;
-import androidtest.models.GmailEmailListView;
-import androidtest.models.GmailEmailView;
-import androidtest.models.ImageView;
-import androidtest.models.MainView;
-import androidtest.models.UploadView;
-
-
-@FixMethodOrder(MethodSorters.NAME_ASCENDING)
-@Category({NoIgnoreTestCategory.class})
-public class UploadTestSuite{
-
-	AndroidDriver driver;
-	Common common;
-	String FILE_NAME = "test";
-	
-	@Rule public TestName name = new TestName();
-	
-
-	@Before
-	public void setUp() throws Exception {
-		common=new Common();
-		driver=common.setUpCommonDriver();
-	}
-
-	@Test
-	@Category(NoIgnoreTestCategory.class)
-	public void testUploadFile () throws Exception {
-
-		MainView mainView = Actions.login(Config.URL, Config.user,Config.password, Config.isTrusted, driver);
-		common.assertIsInMainView();
-
-		//check if the file already exists and if true, delete it
-		Actions.deleteElement(FILE_NAME, mainView, driver);
-
-		MainView mainViewAfterUploadFile = Actions.uploadFile(FILE_NAME, mainView);
-
-		mainViewAfterUploadFile.scrollTillFindElement(FILE_NAME);
-		assertTrue(mainViewAfterUploadFile.getFileElement().isDisplayed());
-		Common.waitTillElementIsNotPresent(mainViewAfterUploadFile.getProgressCircular(), 1000);
-		common.wait.until(ExpectedConditions.visibilityOf(mainViewAfterUploadFile.getFileElementLayout().findElement(By.id(MainView.getLocalFileIndicator()))));
-
-
-	}
-	
-	@Test
-	@Category(IgnoreTestCategory.class)
-	public void testUploadFromGmail () throws Exception {
-		MainView mainView = Actions.login(Config.URL, Config.user,Config.password, Config.isTrusted, driver);
-		driver.startActivity("com.google.android.gm", ".ConversationListActivityGmail");
-		GmailEmailListView gmailEmailListView = new GmailEmailListView(driver);
-		GmailEmailView gmailEmailView = gmailEmailListView.clickOnEmail();
-		ImageView imageView = gmailEmailView.clickOnfileButton();
-		imageView.clickOnOptionsButton();
-		imageView.clickOnShareButton();
-		imageView.clickOnOwnCloudButton();
-		imageView.clickOnJustOnceButton();
-		UploadView uploadView = new UploadView(driver);
-		uploadView.clickOUploadButton();
-		driver.startActivity("com.owncloud.android", ".ui.activity.FileDisplayActivity");
-		common.wait.until(ExpectedConditions.visibilityOfAllElementsLocatedBy(By.name("test.jpg")));
-		assertEquals("test.jpg" , driver.findElementByName("test.jpg").getText());
-	}
-
-	
-	@Test	
-	@Category({IgnoreTestCategory.class, FailingTestCategory.class})
-	public void testKeepFileUpToDate () throws Exception {
-
-		MainView mainView = Actions.login(Config.URL, Config.user,Config.password, Config.isTrusted, driver);
-		common.assertIsInMainView();
-
-		Common.waitTillElementIsNotPresent(mainView.getProgressCircular(), 1000);
-
-		MainView mainViewAfterUploadFile = Actions.uploadFile(FILE_NAME, mainView);
-		mainViewAfterUploadFile.scrollTillFindElement(FILE_NAME);
-		assertTrue(mainViewAfterUploadFile.getFileElement().isDisplayed());
-
-		ElementMenuOptions menuOptions = mainViewAfterUploadFile.longPressOnElement(FILE_NAME);
-		AppDetailsView appDetailsView = menuOptions.clickOnDetails();
-		appDetailsView.checkKeepFileUpToDateCheckbox();
-		Thread.sleep(3000);
-		driver.sendKeyEvent(android.view.KeyEvent.KEYCODE_BACK);
-		assertTrue(common.isElementPresent(mainViewAfterUploadFile.getFileElementLayout(), MobileBy.id(MainView.getFavoriteFileIndicator())));
-
-	}
-
-
-	@After
-	public void tearDown() throws Exception {
-		common.takeScreenShotOnFailed(name.getMethodName());
-		MainView mainView = new MainView(driver);
-		Actions.deleteElement(FILE_NAME,mainView, driver);
-		driver.removeApp("com.owncloud.android");
-		driver.quit();
-	}
-
-
-}
-

+ 25 - 25
automationTest/src/test/java/androidtest/actions/Actions.java → automationTest/src/test/java/com/owncloud/android/test/ui/actions/Actions.java

@@ -1,4 +1,4 @@
-package androidtest.actions;
+package com.owncloud.android.test.ui.actions;
 
 import java.util.HashMap;
 
@@ -12,21 +12,21 @@ import io.appium.java_client.android.AndroidElement;
 import org.openqa.selenium.support.ui.ExpectedConditions;
 import org.openqa.selenium.support.ui.WebDriverWait;
 
-import androidtest.models.CertificatePopUp;
-import androidtest.models.ElementMenuOptions;
-import androidtest.models.FilesView;
-import androidtest.models.LoginForm;
-import androidtest.models.MainView;
-import androidtest.models.MenuList;
-import androidtest.models.NewFolderPopUp;
-import androidtest.models.RemoveConfirmationView;
-import androidtest.models.SettingsView;
-import androidtest.models.WaitAMomentPopUp;
-import androidtest.tests.Common;
+import com.owncloud.android.test.ui.models.CertificatePopUp;
+import com.owncloud.android.test.ui.models.ElementMenuOptions;
+import com.owncloud.android.test.ui.models.UploadFilesView;
+import com.owncloud.android.test.ui.models.LoginForm;
+import com.owncloud.android.test.ui.models.FileListView;
+import com.owncloud.android.test.ui.models.MenuList;
+import com.owncloud.android.test.ui.models.NewFolderPopUp;
+import com.owncloud.android.test.ui.models.RemoveConfirmationView;
+import com.owncloud.android.test.ui.models.SettingsView;
+import com.owncloud.android.test.ui.models.WaitAMomentPopUp;
+import com.owncloud.android.test.ui.testSuites.Common;
 
 public class Actions {
 
-	public static MainView login(String url, String user, String password, Boolean isTrusted, AndroidDriver driver) throws InterruptedException {
+	public static FileListView login(String url, String user, String password, Boolean isTrusted, AndroidDriver driver) throws InterruptedException {
 		LoginForm loginForm = new LoginForm(driver);
 		CertificatePopUp certificatePopUp = loginForm.typeHostUrl(url);	
 		if(!isTrusted){
@@ -49,8 +49,8 @@ public class Actions {
 		return loginForm.clickOnConnectButton();
 	}
 
-	public static WaitAMomentPopUp createFolder(String folderName, MainView mainView){
-		NewFolderPopUp newFolderPopUp = mainView.clickOnNewFolderButton();
+	public static WaitAMomentPopUp createFolder(String folderName, FileListView fileListView){
+		NewFolderPopUp newFolderPopUp = fileListView.clickOnNewFolderButton();
 		newFolderPopUp.typeNewFolderName(folderName);
 		WaitAMomentPopUp waitAMomentPopUp = newFolderPopUp.clickOnNewFolderOkButton();
 		//TODO. assert here
@@ -76,8 +76,8 @@ public class Actions {
 	}
 
 
-	public static void deleteAccount (MainView mainView) {	
-		MenuList menulist = mainView.clickOnMenuButton();
+	public static void deleteAccount (FileListView fileListView) {	
+		MenuList menulist = fileListView.clickOnMenuButton();
 		SettingsView settingView = menulist.clickOnSettingsButton();
 		deleteAccount(settingView);
 	}
@@ -92,14 +92,14 @@ public class Actions {
 	}
 
 	//TODO. convert deleteFodler and deleteFile in deleteElement
-	public static AndroidElement deleteElement(String elementName,  MainView mainView, AndroidDriver driver) throws Exception{
+	public static AndroidElement deleteElement(String elementName,  FileListView fileListView, AndroidDriver driver) throws Exception{
 		AndroidElement fileElement;
 		WaitAMomentPopUp waitAMomentPopUp;
 		try{
 			//To open directly the "file list view" and we don't need to know in which view we are
 			driver.startActivity("com.owncloud.android", ".ui.activity.FileDisplayActivity");
 			fileElement = (AndroidElement) driver.findElementByName(elementName);
-			ElementMenuOptions menuOptions = mainView.longPressOnElement(elementName);
+			ElementMenuOptions menuOptions = fileListView.longPressOnElement(elementName);
 			RemoveConfirmationView removeConfirmationView = menuOptions.clickOnRemove();;
 			waitAMomentPopUp = removeConfirmationView.clickOnRemoteAndLocalButton();
 			Common.waitTillElementIsNotPresent(waitAMomentPopUp.getWaitAMomentTextElement(), 100);
@@ -109,14 +109,14 @@ public class Actions {
 		return fileElement;
 	}
 
-	public static MainView uploadFile(String elementName,  MainView mainView) throws InterruptedException{
-		mainView.clickOnUploadButton();
-		FilesView filesView = mainView.clickOnFilesElementUploadFile();
-		filesView.clickOnFileName(elementName);
-		MainView mainViewAfterUploadFile = filesView.clickOnUploadButton();
+	public static FileListView uploadFile(String elementName,  FileListView fileListView) throws InterruptedException{
+		fileListView.clickOnUploadButton();
+		UploadFilesView uploadFilesView = fileListView.clickOnFilesElementUploadFile();
+		uploadFilesView.clickOnFileName(elementName);
+		FileListView fileListViewAfterUploadFile = uploadFilesView.clickOnUploadButton();
 		//TO DO. detect when the file is successfully uploaded
 		Thread.sleep(15000);
-		return mainViewAfterUploadFile; 
+		return fileListViewAfterUploadFile; 
 	}
 
 

+ 3 - 0
automationTest/src/test/java/com/owncloud/android/test/ui/groups/FailingTestCategory.java

@@ -0,0 +1,3 @@
+package com.owncloud.android.test.ui.groups;
+
+public interface FailingTestCategory extends IgnoreTestCategory {}

+ 138 - 0
automationTest/src/test/java/com/owncloud/android/test/ui/groups/FlexibleCategories.java

@@ -0,0 +1,138 @@
+package com.owncloud.android.test.ui.groups;
+
+import java.lang.annotation.Annotation;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+
+import org.junit.Test;
+import org.junit.experimental.categories.Categories.CategoryFilter;
+import org.junit.experimental.categories.Categories.ExcludeCategory;
+import org.junit.experimental.categories.Categories.IncludeCategory;
+import org.junit.experimental.categories.Category;
+import org.junit.runner.Description;
+import org.junit.runner.manipulation.NoTestsRemainException;
+import org.junit.runners.Suite;
+import org.junit.runners.model.InitializationError;
+import org.junit.runners.model.RunnerBuilder;
+
+/**
+ * This class is based on org.junit.experimental.categories.Categories from JUnit 4.10.
+ *
+ * All anotations and inner classes from the original class Categories are removed,
+ * since they will be re-used.
+ * Unfortunately sub-classing Categories did not work.
+ */
+public class FlexibleCategories extends Suite {
+
+ /**
+  * Specifies the package which should be scanned for test classes (e.g. @TestScanPackage("my.package")).
+  * This annotation is required.
+  */
+ @Retention(RetentionPolicy.RUNTIME)
+ public @interface TestScanPackage {
+  public String value();
+ }
+
+ /**
+  * Specifies the prefix of matching class names (e.g. @TestClassPrefix("Test")).
+  * This annotation is optional (default: "").
+  */
+ @Retention(RetentionPolicy.RUNTIME)
+ public @interface TestClassPrefix {
+  public String value();
+ }
+
+ /**
+  * Specifies the suffix of matching class names (e.g. @TestClassSuffix("Test")).
+  * This annotation is optional (default: "Test").
+  */
+ @Retention(RetentionPolicy.RUNTIME)
+ public @interface TestClassSuffix {
+  public String value();
+ }
+
+ /**
+  * Specifies an annotation for methods which must be present in a matching class (e.g. @TestMethodAnnotationFilter(Test.class)).
+  * This annotation is optional (default: org.junit.Test.class).
+  */
+ @Retention(RetentionPolicy.RUNTIME)
+ public @interface TestMethodAnnotation {
+  public Class<? extends Annotation> value();
+ }
+
+ public FlexibleCategories(Class<?> clazz, RunnerBuilder builder)
+   throws InitializationError {
+  this(builder, clazz, PatternClasspathClassesFinder.getSuiteClasses(
+    getTestScanPackage(clazz), getTestClassPrefix(clazz), getTestClassSuffix(clazz),
+    getTestMethodAnnotation(clazz)));
+  try {
+   filter(new CategoryFilter(getIncludedCategory(clazz),
+     getExcludedCategory(clazz)));
+  } catch (NoTestsRemainException e) {
+   // Ignore all classes with no matching tests.
+  }
+  assertNoCategorizedDescendentsOfUncategorizeableParents(getDescription());
+ }
+
+ public FlexibleCategories(RunnerBuilder builder, Class<?> clazz,
+   Class<?>[] suiteClasses) throws InitializationError {
+  super(builder, clazz, suiteClasses);
+ }
+
+ private static String getTestScanPackage(Class<?> clazz) throws InitializationError {
+  TestScanPackage annotation = clazz.getAnnotation(TestScanPackage.class);
+  if (annotation == null) {
+   throw new InitializationError("No package given to scan for tests!\nUse the annotation @TestScanPackage(\"my.package\") on the test suite " + clazz + ".");
+  }
+  return annotation.value();
+ }
+
+ private static String getTestClassPrefix(Class<?> clazz) {
+  TestClassPrefix annotation = clazz.getAnnotation(TestClassPrefix.class);
+  return annotation == null ? "" : annotation.value();
+ }
+
+ private static String getTestClassSuffix(Class<?> clazz) {
+  TestClassSuffix annotation = clazz.getAnnotation(TestClassSuffix.class);
+  return annotation == null ? "Test" : annotation.value();
+ }
+
+ private static Class<? extends Annotation> getTestMethodAnnotation(Class<?> clazz) {
+  TestMethodAnnotation annotation = clazz.getAnnotation(TestMethodAnnotation.class);
+  return annotation == null ? Test.class : annotation.value();
+ }
+
+ private Class<?> getIncludedCategory(Class<?> clazz) {
+  IncludeCategory annotation= clazz.getAnnotation(IncludeCategory.class);
+  return annotation == null ? null : annotation.value();
+ }
+
+ private Class<?> getExcludedCategory(Class<?> clazz) {
+  ExcludeCategory annotation= clazz.getAnnotation(ExcludeCategory.class);
+  return annotation == null ? null : annotation.value();
+ }
+
+ private void assertNoCategorizedDescendentsOfUncategorizeableParents(Description description) throws InitializationError {
+  if (!canHaveCategorizedChildren(description))
+   assertNoDescendantsHaveCategoryAnnotations(description);
+  for (Description each : description.getChildren())
+   assertNoCategorizedDescendentsOfUncategorizeableParents(each);
+ }
+
+ private void assertNoDescendantsHaveCategoryAnnotations(Description description) throws InitializationError {
+  for (Description each : description.getChildren()) {
+   if (each.getAnnotation(Category.class) != null)
+    throw new InitializationError("Category annotations on Parameterized classes are not supported on individual methods.");
+   assertNoDescendantsHaveCategoryAnnotations(each);
+  }
+ }
+
+ // If children have names like [0], our current magical category code can't determine their
+ // parentage.
+ private static boolean canHaveCategorizedChildren(Description description) {
+  for (Description each : description.getChildren())
+   if (each.getTestClass() == null)
+    return false;
+  return true;
+ }
+}

+ 4 - 0
automationTest/src/test/java/com/owncloud/android/test/ui/groups/IgnoreTestCategory.java

@@ -0,0 +1,4 @@
+package com.owncloud.android.test.ui.groups;
+
+public interface IgnoreTestCategory {}
+

+ 5 - 0
automationTest/src/test/java/com/owncloud/android/test/ui/groups/NoIgnoreTestCategory.java

@@ -0,0 +1,5 @@
+package com.owncloud.android.test.ui.groups;
+
+public interface NoIgnoreTestCategory {
+
+}

+ 3 - 0
automationTest/src/test/java/com/owncloud/android/test/ui/groups/OtherTestCategory.java

@@ -0,0 +1,3 @@
+package com.owncloud.android.test.ui.groups;
+
+public interface OtherTestCategory extends IgnoreTestCategory {}

+ 141 - 0
automationTest/src/test/java/com/owncloud/android/test/ui/groups/PatternClasspathClassesFinder.java

@@ -0,0 +1,141 @@
+package com.owncloud.android.test.ui.groups;
+
+import java.io.File;
+import java.io.IOException;
+import java.lang.annotation.Annotation;
+import java.lang.reflect.Method;
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.Enumeration;
+import java.util.List;
+
+/**
+ *
+ * Modified version of ClasspathClassesFinder from:
+ * http://linsolas.free.fr/wordpress/index.php/2011/02/how-to-categorize-junit-tests-with-maven/
+ *
+ * The difference is, that it does not search for annotated classes but for classes with a certain
+ * class name prefix and suffix.
+ */
+public final class PatternClasspathClassesFinder {
+
+ /**
+  * Get the list of classes of a given package name, and that are annotated
+  * by a given annotation.
+  *
+  * @param packageName
+  *            The package name of the classes.
+  * @param classPrefix
+  *            The prefix of the class name.
+  * @param classSuffix
+  *            The suffix of the class name.
+  * @param methodAnnotation
+  *            Only return classes containing methods annotated with methodAnnotation.
+  * @return The List of classes that matches the requirements.
+  */
+ public static Class<?>[] getSuiteClasses(String packageName,
+   String classPrefix, String classSuffix,
+   Class<? extends Annotation> methodAnnotation) {
+  try {
+   return getClasses(packageName, classPrefix, classSuffix, methodAnnotation);
+  } catch (Exception e) {
+   e.printStackTrace();
+  }
+  return null;
+ }
+
+ /**
+  * Get the list of classes of a given package name, and that are annotated
+  * by a given annotation.
+  *
+  * @param packageName
+  *            The package name of the classes.
+  * @param classPrefix
+  *            The prefix of the class name.
+  * @param classSuffix
+  *            The suffix of the class name.
+  * @param methodAnnotation
+  *            Only return classes containing methods annotated with methodAnnotation.
+  * @return The List of classes that matches the requirements.
+  * @throws ClassNotFoundException
+  *             If something goes wrong...
+  * @throws IOException
+  *             If something goes wrong...
+  */
+ private static Class<?>[] getClasses(String packageName,
+   String classPrefix, String classSuffix,
+   Class<? extends Annotation> methodAnnotation)
+   throws ClassNotFoundException, IOException {
+  ClassLoader classLoader = Thread.currentThread()
+    .getContextClassLoader();
+  String path = packageName.replace('.', '/');
+  // Get classpath
+  Enumeration<URL> resources = classLoader.getResources(path);
+  List<File> dirs = new ArrayList<File>();
+  while (resources.hasMoreElements()) {
+   URL resource = resources.nextElement();
+   dirs.add(new File(resource.getFile()));
+  }
+  // For each classpath, get the classes.
+  ArrayList<Class<?>> classes = new ArrayList<Class<?>>();
+  for (File directory : dirs) {
+   classes.addAll(findClasses(directory, packageName, classPrefix, classSuffix, methodAnnotation));
+  }
+  return classes.toArray(new Class[classes.size()]);
+ }
+
+ /**
+  * Find classes, in a given directory (recursively), for a given package
+  * name, that are annotated by a given annotation.
+  *
+  * @param directory
+  *            The directory where to look for.
+  * @param packageName
+  *            The package name of the classes.
+  * @param classPrefix
+  *            The prefix of the class name.
+  * @param classSuffix
+  *            The suffix of the class name.
+  * @param methodAnnotation
+  *            Only return classes containing methods annotated with methodAnnotation.
+  * @return The List of classes that matches the requirements.
+  * @throws ClassNotFoundException
+  *             If something goes wrong...
+  */
+ private static List<Class<?>> findClasses(File directory,
+   String packageName, String classPrefix, String classSuffix,
+   Class<? extends Annotation> methodAnnotation)
+   throws ClassNotFoundException {
+  List<Class<?>> classes = new ArrayList<Class<?>>();
+  if (!directory.exists()) {
+   return classes;
+  }
+  File[] files = directory.listFiles();
+  for (File file : files) {
+   if (file.isDirectory()) {
+    classes.addAll(findClasses(file,
+      packageName + "." + file.getName(), classPrefix, classSuffix, methodAnnotation));
+   } else if (file.getName().startsWith(classPrefix) && file.getName().endsWith(classSuffix + ".class")) {
+    // We remove the .class at the end of the filename to get the
+    // class name...
+    Class<?> clazz = Class.forName(packageName
+      + '.'
+      + file.getName().substring(0,
+        file.getName().length() - 6));
+
+    // Check, if class contains test methods (prevent "No runnable methods" exception):
+    boolean classHasTest = false;
+    for (Method method : clazz.getMethods()) {
+     if (method.getAnnotation(methodAnnotation) != null) {
+      classHasTest = true;
+      break;
+     }
+    }
+    if (classHasTest) {
+     classes.add(clazz);
+    }
+   }
+  }
+  return classes;
+ }
+}

+ 5 - 0
automationTest/src/test/java/com/owncloud/android/test/ui/groups/SmokeTestCategory.java

@@ -0,0 +1,5 @@
+package com.owncloud.android.test.ui.groups;
+
+public interface SmokeTestCategory {
+
+}

+ 5 - 0
automationTest/src/test/java/com/owncloud/android/test/ui/groups/UnfinishedTestCategory.java

@@ -0,0 +1,5 @@
+package com.owncloud.android.test.ui.groups;
+
+public interface UnfinishedTestCategory extends IgnoreTestCategory{
+
+}

+ 1 - 1
automationTest/src/test/java/androidtest/models/CertificatePopUp.java → automationTest/src/test/java/com/owncloud/android/test/ui/models/CertificatePopUp.java

@@ -1,4 +1,4 @@
-package androidtest.models;
+package com.owncloud.android.test.ui.models;
 
 import io.appium.java_client.android.AndroidDriver;
 import io.appium.java_client.android.AndroidElement;

+ 4 - 4
automationTest/src/test/java/androidtest/models/ElementMenuOptions.java → automationTest/src/test/java/com/owncloud/android/test/ui/models/ElementMenuOptions.java

@@ -1,4 +1,4 @@
-package androidtest.models;
+package com.owncloud.android.test.ui.models;
 
 import io.appium.java_client.android.AndroidDriver;
 import io.appium.java_client.android.AndroidElement;
@@ -31,10 +31,10 @@ public class ElementMenuOptions {
 		PageFactory.initElements(new AppiumFieldDecorator(driver), this);
 	}
 	
-	public AppDetailsView clickOnDetails () {
+	public FileDetailsView clickOnDetails () {
 		detailsFileElement.click();
-		AppDetailsView appDetailsView = new AppDetailsView(driver);
-		return appDetailsView;
+		FileDetailsView fileDetailsView = new FileDetailsView(driver);
+		return fileDetailsView;
 	}
 	
 	public RemoveConfirmationView clickOnRemove () {

+ 3 - 3
automationTest/src/test/java/androidtest/models/AppDetailsView.java → automationTest/src/test/java/com/owncloud/android/test/ui/models/FileDetailsView.java

@@ -1,4 +1,4 @@
-package androidtest.models;
+package com.owncloud.android.test.ui.models;
 
 import io.appium.java_client.android.AndroidDriver;
 import io.appium.java_client.android.AndroidElement;
@@ -8,7 +8,7 @@ import io.appium.java_client.pagefactory.AppiumFieldDecorator;
 import org.openqa.selenium.support.CacheLookup;
 import org.openqa.selenium.support.PageFactory;
 
-public class AppDetailsView {
+public class FileDetailsView {
 	final AndroidDriver driver;
 	
 	@CacheLookup
@@ -18,7 +18,7 @@ public class AppDetailsView {
 	@AndroidFindBy(id = "com.owncloud.android:id/fdProgressBar")
 	private AndroidElement progressBar;
 	
-	public AppDetailsView (AndroidDriver driver) {
+	public FileDetailsView (AndroidDriver driver) {
 		this.driver = driver;
 		PageFactory.initElements(new AppiumFieldDecorator(driver), this);
 	}

+ 12 - 8
automationTest/src/test/java/androidtest/models/MainView.java → automationTest/src/test/java/com/owncloud/android/test/ui/models/FileListView.java

@@ -1,4 +1,4 @@
-package androidtest.models;
+package com.owncloud.android.test.ui.models;
 
 import java.util.List;
 
@@ -11,11 +11,11 @@ import io.appium.java_client.pagefactory.AppiumFieldDecorator;
 import org.openqa.selenium.NoSuchElementException;
 import org.openqa.selenium.support.CacheLookup;
 import org.openqa.selenium.support.PageFactory;
-
 import org.openqa.selenium.Point;
-import androidtest.actions.Actions;
 
-public class MainView {
+import com.owncloud.android.test.ui.actions.Actions;
+
+public class FileListView {
 	final AndroidDriver driver;
 	
 	@AndroidFindBy(uiAutomator = "new UiSelector().description(\"More options\")")
@@ -61,9 +61,10 @@ public class MainView {
 	
 	private static String localFileIndicator = "com.owncloud.android:id/localFileIndicator";
 	private static String favoriteFileIndicator = "com.owncloud.android:id/favoriteIcon";
+	private static String sharedElementIndicator = "com.owncloud.android:id/sharedIcon";
 	
 	
-	public MainView (AndroidDriver driver) {
+	public FileListView (AndroidDriver driver) {
 		this.driver = driver;
 		PageFactory.initElements(new AppiumFieldDecorator(driver), this);
 	}
@@ -94,10 +95,10 @@ public class MainView {
 		uploadButton.click();
 	}
 	
-	public FilesView clickOnFilesElementUploadFile () {
+	public UploadFilesView clickOnFilesElementUploadFile () {
 		filesElementUploadFile.click();
-		FilesView filesView = new FilesView(driver);
-		return filesView;
+		UploadFilesView uploadFilesView = new UploadFilesView(driver);
+		return uploadFilesView;
 	}
 	
 	public AndroidElement getTitleTextElement () {
@@ -157,6 +158,9 @@ public class MainView {
 		return favoriteFileIndicator;
 	}
 	
+	public static String getSharedElementIndicator() {
+		return sharedElementIndicator;
+	}
 	public void pulldownToRefresh () throws InterruptedException {
 		Point listLocation = listLayout.getLocation();
 		driver.swipe(listLocation.getX(),listLocation.getY(), listLocation.getX(),listLocation.getY()+1000, 5000);

+ 27 - 0
automationTest/src/test/java/com/owncloud/android/test/ui/models/GmailEmailListView.java

@@ -0,0 +1,27 @@
+package com.owncloud.android.test.ui.models;
+
+import io.appium.java_client.android.AndroidDriver;
+import io.appium.java_client.android.AndroidElement;
+import io.appium.java_client.pagefactory.AndroidFindBy;
+import io.appium.java_client.pagefactory.AppiumFieldDecorator;
+import org.openqa.selenium.support.PageFactory;
+
+public class GmailEmailListView {
+	
+	final AndroidDriver driver;
+	
+	@AndroidFindBy(uiAutomator = "new UiSelector().description(\"me about UploadFile,  at 9:53 AM, conversation read\")")
+	private AndroidElement email;
+		
+	public GmailEmailListView (AndroidDriver driver) {
+		this.driver = driver;
+		PageFactory.initElements(new AppiumFieldDecorator(driver), this);
+	}
+	
+	public GmailEmailView clickOnEmail (){
+		email.click();
+		GmailEmailView gmailEmailView = new GmailEmailView(driver);
+		return gmailEmailView;
+	}
+	
+}

+ 30 - 0
automationTest/src/test/java/com/owncloud/android/test/ui/models/GmailEmailView.java

@@ -0,0 +1,30 @@
+package com.owncloud.android.test.ui.models;
+
+import io.appium.java_client.android.AndroidDriver;
+import io.appium.java_client.android.AndroidElement;
+import io.appium.java_client.pagefactory.AndroidFindBy;
+import io.appium.java_client.pagefactory.AppiumFieldDecorator;
+
+import org.openqa.selenium.support.CacheLookup;
+import org.openqa.selenium.support.PageFactory;
+
+import com.owncloud.android.test.ui.testSuites.Config;
+
+public class GmailEmailView {
+	final AndroidDriver driver;
+	
+	@CacheLookup
+	@AndroidFindBy(name = Config.fileToTestSendByEmailName)
+	private AndroidElement fileButton;
+		
+	public GmailEmailView (AndroidDriver driver) {
+		this.driver = driver;
+		PageFactory.initElements(new AppiumFieldDecorator(driver), this);
+	}
+	
+	public ImageView clickOnfileButton (){
+		fileButton.click();
+		ImageView imageView = new ImageView(driver);
+		return imageView;
+	}
+}

+ 43 - 0
automationTest/src/test/java/com/owncloud/android/test/ui/models/GmailSendMailView.java

@@ -0,0 +1,43 @@
+package com.owncloud.android.test.ui.models;
+
+import io.appium.java_client.android.AndroidDriver;
+import io.appium.java_client.android.AndroidElement;
+import io.appium.java_client.pagefactory.AndroidFindBy;
+import io.appium.java_client.pagefactory.AppiumFieldDecorator;
+
+import org.openqa.selenium.support.CacheLookup;
+import org.openqa.selenium.support.PageFactory;
+
+public class GmailSendMailView {
+	final AndroidDriver driver;
+	
+	@CacheLookup
+	@AndroidFindBy(uiAutomator = "new UiSelector().description(\"To\")")
+	private AndroidElement toTextField;
+	
+	@CacheLookup
+	@AndroidFindBy(name = "Subject")
+	private AndroidElement subjectTextField;
+	
+	@CacheLookup
+	@AndroidFindBy(uiAutomator = "new UiSelector().description(\"Send\")")
+	private AndroidElement sendButton;
+	
+	public GmailSendMailView (AndroidDriver driver) {
+		this.driver = driver;
+		PageFactory.initElements(new AppiumFieldDecorator(driver), this);
+	}
+	
+	public void typeToEmailAdress (String email) {
+		toTextField.sendKeys(email + "\n");
+	}
+
+	public void clickOnSendButton () {
+		sendButton.click();
+	}
+		
+	public void typeSubject (String subject) {
+		subjectTextField.clear();
+		subjectTextField.sendKeys(subject);
+	}
+}

+ 56 - 0
automationTest/src/test/java/com/owncloud/android/test/ui/models/ImageView.java

@@ -0,0 +1,56 @@
+package com.owncloud.android.test.ui.models;
+
+import io.appium.java_client.android.AndroidDriver;
+import io.appium.java_client.android.AndroidElement;
+import io.appium.java_client.pagefactory.AndroidFindBy;
+import io.appium.java_client.pagefactory.AppiumFieldDecorator;
+
+import org.openqa.selenium.support.CacheLookup;
+import org.openqa.selenium.support.PageFactory;
+
+import com.owncloud.android.test.ui.actions.Actions;
+
+
+public class ImageView {
+	final AndroidDriver driver;
+	
+	@CacheLookup
+	@AndroidFindBy(uiAutomator = "new UiSelector().description(\"More options\")")
+	private AndroidElement optionsButton;
+	
+	@AndroidFindBy(name = "Share")
+	private AndroidElement shareButton;
+	
+	@AndroidFindBy(name = "ownCloud")
+	private AndroidElement ownCloudButton;
+	
+	@AndroidFindBy(name = "Just once")
+	private AndroidElement justOnceButton;
+	
+	@AndroidFindBy(id = "android:id/resolver_list")
+	private AndroidElement sharingAppsLayout;
+	
+	public ImageView (AndroidDriver driver) {
+		this.driver = driver;
+		PageFactory.initElements(new AppiumFieldDecorator(driver), this);
+	}
+	
+	public void clickOnOptionsButton(){
+		optionsButton.click();
+	}
+	
+	public void clickOnShareButton(){
+		shareButton.click();
+	}
+	
+	public void clickOnOwnCloudButton(){
+		if (! ownCloudButton.isDisplayed()) {
+			Actions.scrollTillFindElement("ownCloud", sharingAppsLayout, driver);
+		}
+		ownCloudButton.click();
+	}
+	
+	public void clickOnJustOnceButton(){
+		justOnceButton.click();
+	}
+}

+ 4 - 4
automationTest/src/test/java/androidtest/models/LoginForm.java → automationTest/src/test/java/com/owncloud/android/test/ui/models/LoginForm.java

@@ -1,4 +1,4 @@
-package androidtest.models;
+package com.owncloud.android.test.ui.models;
 
 import org.openqa.selenium.support.CacheLookup;
 import org.openqa.selenium.support.PageFactory;
@@ -62,10 +62,10 @@ public class LoginForm {
 		//driver.hideKeyboard();
 	}
 	
-	public MainView clickOnConnectButton () {
+	public FileListView clickOnConnectButton () {
 		connectButton.click();
-		MainView mainView = new MainView(driver);
-		return mainView;
+		FileListView fileListView = new FileListView(driver);
+		return fileListView;
 	}
 	
 	public AndroidElement gethostUrlInput () {

+ 1 - 1
automationTest/src/test/java/androidtest/models/MenuList.java → automationTest/src/test/java/com/owncloud/android/test/ui/models/MenuList.java

@@ -1,4 +1,4 @@
-package androidtest.models;
+package com.owncloud.android.test.ui.models;
 
 import org.openqa.selenium.support.PageFactory;
 

+ 2 - 2
automationTest/src/test/java/androidtest/models/MoveView.java → automationTest/src/test/java/com/owncloud/android/test/ui/models/MoveView.java

@@ -1,4 +1,4 @@
-package androidtest.models;
+package com.owncloud.android.test.ui.models;
 
 import io.appium.java_client.android.AndroidDriver;
 import io.appium.java_client.android.AndroidElement;
@@ -8,7 +8,7 @@ import io.appium.java_client.pagefactory.AppiumFieldDecorator;
 import org.openqa.selenium.support.CacheLookup;
 import org.openqa.selenium.support.PageFactory;
 
-import androidtest.actions.Actions;
+import com.owncloud.android.test.ui.actions.Actions;
 
 public class MoveView {
 	final AndroidDriver driver;

+ 1 - 1
automationTest/src/test/java/androidtest/models/NewFolderPopUp.java → automationTest/src/test/java/com/owncloud/android/test/ui/models/NewFolderPopUp.java

@@ -1,4 +1,4 @@
-package androidtest.models;
+package com.owncloud.android.test.ui.models;
 
 import org.openqa.selenium.support.PageFactory;
 

+ 34 - 0
automationTest/src/test/java/com/owncloud/android/test/ui/models/PassCodeRequestView.java

@@ -0,0 +1,34 @@
+package com.owncloud.android.test.ui.models;
+
+import org.openqa.selenium.support.PageFactory;
+
+import io.appium.java_client.android.AndroidDriver;
+import io.appium.java_client.android.AndroidElement;
+import io.appium.java_client.pagefactory.AndroidFindBy;
+import io.appium.java_client.pagefactory.AppiumFieldDecorator;
+
+public class PassCodeRequestView {
+final AndroidDriver driver;
+	
+	@AndroidFindBy(uiAutomator = "new UiSelector().className(\"android.widget.EditText\").index(0)")
+	private AndroidElement codeElement1;
+	
+	@AndroidFindBy(uiAutomator = "new UiSelector().className(\"android.widget.EditText\").index(1)")
+	private AndroidElement codeElement2;
+	
+	@AndroidFindBy(uiAutomator = "new UiSelector().className(\"android.widget.EditText\").index(2)")
+	private AndroidElement codeElement3;
+	
+	@AndroidFindBy(uiAutomator = "new UiSelector().className(\"android.widget.EditText\").index(3)")
+	private AndroidElement codeElement4;
+	
+	public PassCodeRequestView (AndroidDriver driver) {
+		this.driver = driver;
+		PageFactory.initElements(new AppiumFieldDecorator(driver), this);
+	}
+	
+	public void enterPasscode(String codeNumber1, String codeNumber2, String codeNumber3, String codeNumber4){
+		codeElement1.sendKeys(codeNumber1 + codeNumber1 + codeNumber1 + codeNumber1);
+	}
+
+}

+ 43 - 0
automationTest/src/test/java/com/owncloud/android/test/ui/models/PassCodeView.java

@@ -0,0 +1,43 @@
+package com.owncloud.android.test.ui.models;
+
+import io.appium.java_client.android.AndroidDriver;
+import io.appium.java_client.android.AndroidElement;
+import io.appium.java_client.pagefactory.AndroidFindBy;
+import io.appium.java_client.pagefactory.AppiumFieldDecorator;
+
+import org.openqa.selenium.support.PageFactory;
+
+public class PassCodeView {
+	final AndroidDriver driver;
+	
+	@AndroidFindBy(uiAutomator = "new UiSelector().className(\"android.widget.EditText\").index(0)")
+	private AndroidElement codeElement1;
+	
+	@AndroidFindBy(uiAutomator = "new UiSelector().className(\"android.widget.EditText\").index(1)")
+	private AndroidElement codeElement2;
+	
+	@AndroidFindBy(uiAutomator = "new UiSelector().className(\"android.widget.EditText\").index(2)")
+	private AndroidElement codeElement3;
+	
+	@AndroidFindBy(uiAutomator = "new UiSelector().className(\"android.widget.EditText\").index(3)")
+	private AndroidElement codeElement4;
+	
+	@AndroidFindBy(name = "Cancel")
+	private AndroidElement cancelButton;
+	
+	public PassCodeView (AndroidDriver driver) {
+		this.driver = driver;
+		PageFactory.initElements(new AppiumFieldDecorator(driver), this);
+	}
+	
+	public PassCodeView enterPasscode(String codeNumber1, String codeNumber2, String codeNumber3, String codeNumber4){
+		codeElement1.sendKeys(codeNumber1 + codeNumber1 + codeNumber1 + codeNumber1);
+		return this;
+	}
+	public SettingsView reenterPasscode(String codeNumber1, String codeNumber2, String codeNumber3, String codeNumber4){
+		codeElement1.sendKeys(codeNumber1 + codeNumber1 + codeNumber1 + codeNumber1);
+		SettingsView settingsView = new SettingsView(driver);
+		return settingsView;
+	}
+
+}

+ 1 - 1
automationTest/src/test/java/androidtest/models/RemoveConfirmationView.java → automationTest/src/test/java/com/owncloud/android/test/ui/models/RemoveConfirmationView.java

@@ -1,4 +1,4 @@
-package androidtest.models;
+package com.owncloud.android.test.ui.models;
 
 import io.appium.java_client.android.AndroidDriver;
 import io.appium.java_client.android.AndroidElement;

+ 2 - 2
automationTest/src/test/java/androidtest/models/SettingsView.java → automationTest/src/test/java/com/owncloud/android/test/ui/models/SettingsView.java

@@ -1,4 +1,4 @@
-package androidtest.models;
+package com.owncloud.android.test.ui.models;
 
 import io.appium.java_client.android.AndroidDriver;
 import io.appium.java_client.android.AndroidElement;
@@ -8,7 +8,7 @@ import io.appium.java_client.pagefactory.AppiumFieldDecorator;
 import org.openqa.selenium.support.CacheLookup;
 import org.openqa.selenium.support.PageFactory;
 
-import androidtest.tests.Config;
+import com.owncloud.android.test.ui.testSuites.Config;
 
 public class SettingsView {
 	final AndroidDriver driver;

+ 28 - 0
automationTest/src/test/java/com/owncloud/android/test/ui/models/ShareView.java

@@ -0,0 +1,28 @@
+package com.owncloud.android.test.ui.models;
+
+import io.appium.java_client.android.AndroidDriver;
+import io.appium.java_client.android.AndroidElement;
+import io.appium.java_client.pagefactory.AppiumFieldDecorator;
+
+import org.openqa.selenium.support.CacheLookup;
+import org.openqa.selenium.support.FindBy;
+import org.openqa.selenium.support.PageFactory;
+
+public class ShareView {
+	final AndroidDriver driver;
+	
+	@CacheLookup
+	@FindBy(id = "android:id/select_dialog_listview")
+	private AndroidElement listViewLayout;
+	
+	public ShareView (AndroidDriver driver) {
+		this.driver = driver;
+		PageFactory.initElements(new AppiumFieldDecorator(driver), this);
+	}
+	
+	public AndroidElement getListViewLayout () {
+		return listViewLayout;
+	}
+	
+	
+}

+ 9 - 7
automationTest/src/test/java/androidtest/models/FilesView.java → automationTest/src/test/java/com/owncloud/android/test/ui/models/UploadFilesView.java

@@ -1,14 +1,16 @@
-package androidtest.models;
+package com.owncloud.android.test.ui.models;
 
 import io.appium.java_client.android.AndroidDriver;
 import io.appium.java_client.android.AndroidElement;
 import io.appium.java_client.pagefactory.AndroidFindBy;
 import io.appium.java_client.pagefactory.AppiumFieldDecorator;
+
 import org.openqa.selenium.support.CacheLookup;
 import org.openqa.selenium.support.PageFactory;
-import androidtest.actions.Actions;
 
-public class FilesView{
+import com.owncloud.android.test.ui.actions.Actions;
+
+public class UploadFilesView{
 	final AndroidDriver driver;
 	
 	@CacheLookup
@@ -21,15 +23,15 @@ public class FilesView{
 	
 	private AndroidElement fileElement;
 	
-	public FilesView (AndroidDriver driver) {
+	public UploadFilesView (AndroidDriver driver) {
 		this.driver = driver;
 		PageFactory.initElements(new AppiumFieldDecorator(driver), this);
 	}
 	
-	public MainView clickOnUploadButton () {
+	public FileListView clickOnUploadButton () {
 		uploadButton.click();
-		MainView mainView = new MainView (driver);
-		return mainView;
+		FileListView fileListView = new FileListView (driver);
+		return fileListView;
 	}
 	
 	//change to scrollTillFindElement

+ 26 - 0
automationTest/src/test/java/com/owncloud/android/test/ui/models/UploadView.java

@@ -0,0 +1,26 @@
+package com.owncloud.android.test.ui.models;
+
+import io.appium.java_client.android.AndroidDriver;
+import io.appium.java_client.android.AndroidElement;
+import io.appium.java_client.pagefactory.AndroidFindBy;
+import io.appium.java_client.pagefactory.AppiumFieldDecorator;
+
+import org.openqa.selenium.support.CacheLookup;
+import org.openqa.selenium.support.PageFactory;
+
+public class UploadView {
+	final AndroidDriver driver;
+	
+	@CacheLookup
+	@AndroidFindBy(name = "Upload")
+	private AndroidElement uploadButton;
+		
+	public UploadView (AndroidDriver driver) {
+		this.driver = driver;
+		PageFactory.initElements(new AppiumFieldDecorator(driver), this);
+	}
+	
+	public void clickOUploadButton () {
+		uploadButton.click();
+	}
+}

+ 1 - 1
automationTest/src/test/java/androidtest/models/WaitAMomentPopUp.java → automationTest/src/test/java/com/owncloud/android/test/ui/models/WaitAMomentPopUp.java

@@ -1,4 +1,4 @@
-package androidtest.models;
+package com.owncloud.android.test.ui.models;
 
 import org.openqa.selenium.support.PageFactory;
 

+ 0 - 0
automationTest/src/test/java/androidtest/tests/.gitignore → automationTest/src/test/java/com/owncloud/android/test/ui/testSuites/.gitignore


+ 3 - 3
automationTest/src/test/java/androidtest/tests/Common.java → automationTest/src/test/java/com/owncloud/android/test/ui/testSuites/Common.java

@@ -1,4 +1,4 @@
-package androidtest.tests;
+package com.owncloud.android.test.ui.testSuites;
 
 import static org.junit.Assert.*;
 import java.io.File;
@@ -99,12 +99,12 @@ public class Common{
 		FileUtils.copyFile(file, new File(screenShotName));
 	}
 
-	protected void assertIsInMainView() throws InterruptedException {
+	protected void assertIsInFileListView() throws InterruptedException {
 		assertTrue(waitForTextPresent("ownCloud", (AndroidElement) driver.findElementByAndroidUIAutomator("new UiSelector().resourceId(\"android:id/action_bar_title\")")));
 		assertTrue(isElementPresent((AndroidElement) driver.findElementByAndroidUIAutomator("new UiSelector().description(\"Upload\")")));	
 	}
 
-	protected void assertIsNotInMainView() throws InterruptedException {
+	protected void assertIsNotInFileListView() throws InterruptedException {
 		AndroidElement fileElement;
 		assertTrue(waitForTextPresent("ownCloud", (AndroidElement) driver.findElementByAndroidUIAutomator("new UiSelector().resourceId(\"android:id/action_bar_title\")")));
 		try {

+ 16 - 16
automationTest/src/test/java/androidtest/tests/CreateFolderTestSuite.java → automationTest/src/test/java/com/owncloud/android/test/ui/testSuites/CreateFolderTestSuite.java

@@ -1,4 +1,4 @@
-package androidtest.tests;
+package com.owncloud.android.test.ui.testSuites;
 
 import static org.junit.Assert.*;
 import io.appium.java_client.android.AndroidDriver;
@@ -12,11 +12,11 @@ import org.junit.runners.MethodSorters;
 import org.junit.FixMethodOrder;
 import org.junit.Test;
 
-import androidtest.actions.Actions;
-import androidtest.groups.NoIgnoreTestCategory;
-import androidtest.groups.SmokeTestCategory;
-import androidtest.models.MainView;
-import androidtest.models.WaitAMomentPopUp;
+import com.owncloud.android.test.ui.actions.Actions;
+import com.owncloud.android.test.ui.groups.NoIgnoreTestCategory;
+import com.owncloud.android.test.ui.groups.SmokeTestCategory;
+import com.owncloud.android.test.ui.models.FileListView;
+import com.owncloud.android.test.ui.models.WaitAMomentPopUp;
 
 
 @FixMethodOrder(MethodSorters.NAME_ASCENDING)
@@ -41,27 +41,27 @@ public class CreateFolderTestSuite{
 	public void testCreateNewFolder () throws Exception {
 		String NEW_FOLDER_NAME = "testCreateFolder";
 
-		MainView mainView = Actions.login(Config.URL, Config.user,Config.password, Config.isTrusted, driver);
-		common.assertIsInMainView();
+		FileListView fileListView = Actions.login(Config.URL, Config.user,Config.password, Config.isTrusted, driver);
+		common.assertIsInFileListView();
 
 		//check if the folder already exists and if true, delete them
-		Actions.deleteElement(NEW_FOLDER_NAME, mainView, driver);
+		Actions.deleteElement(NEW_FOLDER_NAME, fileListView, driver);
 
-		WaitAMomentPopUp waitAMomentPopUp = Actions.createFolder(NEW_FOLDER_NAME, mainView);
+		WaitAMomentPopUp waitAMomentPopUp = Actions.createFolder(NEW_FOLDER_NAME, fileListView);
 		Common.waitTillElementIsNotPresent(waitAMomentPopUp.getWaitAMomentTextElement(), 100);
-		mainView.scrollTillFindElement(FOLDER_NAME);
-		assertNotNull(mainView.getFileElement());
-		assertTrue(folderHasBeenCreated=mainView.getFileElement().isDisplayed());	
+		fileListView.scrollTillFindElement(FOLDER_NAME);
+		assertNotNull(fileListView.getFileElement());
+		assertTrue(folderHasBeenCreated=fileListView.getFileElement().isDisplayed());	
 		CurrentCreatedFolder = FOLDER_NAME;
-		assertEquals(FOLDER_NAME , mainView.getFileElement().getText());
+		assertEquals(FOLDER_NAME , fileListView.getFileElement().getText());
 	}
 
 	@After
 	public void tearDown() throws Exception {
 		common.takeScreenShotOnFailed(name.getMethodName());
 		if (folderHasBeenCreated) {
-			MainView mainView = new MainView(driver);
-			Actions.deleteElement(CurrentCreatedFolder, mainView, driver);
+			FileListView fileListView = new FileListView(driver);
+			Actions.deleteElement(CurrentCreatedFolder, fileListView, driver);
 		}
 		driver.removeApp("com.owncloud.android");
 		driver.quit();

+ 14 - 14
automationTest/src/test/java/androidtest/tests/DeleteFileTestSuite.java → automationTest/src/test/java/com/owncloud/android/test/ui/testSuites/DeleteFileTestSuite.java

@@ -1,4 +1,4 @@
-package androidtest.tests;
+package com.owncloud.android.test.ui.testSuites;
 
 import static org.junit.Assert.*;
 import io.appium.java_client.android.AndroidDriver;
@@ -14,10 +14,10 @@ import org.junit.Test;
 import org.openqa.selenium.By;
 import org.openqa.selenium.support.ui.ExpectedConditions;
 
-import androidtest.actions.Actions;
-import androidtest.groups.NoIgnoreTestCategory;
-import androidtest.groups.SmokeTestCategory;
-import androidtest.models.MainView;
+import com.owncloud.android.test.ui.actions.Actions;
+import com.owncloud.android.test.ui.groups.NoIgnoreTestCategory;
+import com.owncloud.android.test.ui.groups.SmokeTestCategory;
+import com.owncloud.android.test.ui.models.FileListView;
 
 
 @FixMethodOrder(MethodSorters.NAME_ASCENDING)
@@ -25,7 +25,7 @@ public class DeleteFileTestSuite{
 	
 	AndroidDriver driver;
 	Common common;
-	private final String FILE_NAME = "test";
+	private final String FILE_NAME = Config.fileToTestName;
 	
 	@Rule public TestName name = new TestName();
 	
@@ -38,18 +38,18 @@ public class DeleteFileTestSuite{
 	@Test
 	@Category({NoIgnoreTestCategory.class, SmokeTestCategory.class})
 	public void testDeleteFile () throws Exception {		
-		MainView mainView = Actions.login(Config.URL, Config.user,Config.password, Config.isTrusted, driver);
-		common.assertIsInMainView();
+		FileListView fileListView = Actions.login(Config.URL, Config.user,Config.password, Config.isTrusted, driver);
+		common.assertIsInFileListView();
 		
 		//TODO. if the file already exists, do not upload
-		MainView mainViewAfterUploadFile = Actions.uploadFile(FILE_NAME, mainView);
+		FileListView fileListViewAfterUploadFile = Actions.uploadFile(FILE_NAME, fileListView);
 		
-		mainViewAfterUploadFile.scrollTillFindElement(FILE_NAME);
-		Common.waitTillElementIsNotPresent(mainViewAfterUploadFile.getProgressCircular(), 1000);
-		common.wait.until(ExpectedConditions.visibilityOf(mainViewAfterUploadFile.getFileElementLayout().findElement(By.id(MainView.getLocalFileIndicator()))));
+		fileListViewAfterUploadFile.scrollTillFindElement(FILE_NAME);
+		Common.waitTillElementIsNotPresent(fileListViewAfterUploadFile.getProgressCircular(), 1000);
+		common.wait.until(ExpectedConditions.visibilityOf(fileListViewAfterUploadFile.getFileElementLayout().findElement(By.id(FileListView.getLocalFileIndicator()))));
 		
-		Actions.deleteElement(FILE_NAME,mainViewAfterUploadFile, driver);
-		assertFalse(mainViewAfterUploadFile.getFileElement().isDisplayed());
+		Actions.deleteElement(FILE_NAME,fileListViewAfterUploadFile, driver);
+		assertFalse(fileListViewAfterUploadFile.getFileElement().isDisplayed());
 	}
 
 	@After

+ 15 - 15
automationTest/src/test/java/androidtest/tests/DeleteFolderTestSuite.java → automationTest/src/test/java/com/owncloud/android/test/ui/testSuites/DeleteFolderTestSuite.java

@@ -1,4 +1,4 @@
-package androidtest.tests;
+package com.owncloud.android.test.ui.testSuites;
 
 import static org.junit.Assert.*;
 import io.appium.java_client.android.AndroidDriver;
@@ -12,11 +12,11 @@ import org.junit.runners.MethodSorters;
 import org.junit.FixMethodOrder;
 import org.junit.Test;
 
-import androidtest.actions.Actions;
-import androidtest.groups.NoIgnoreTestCategory;
-import androidtest.groups.SmokeTestCategory;
-import androidtest.models.MainView;
-import androidtest.models.WaitAMomentPopUp;
+import com.owncloud.android.test.ui.actions.Actions;
+import com.owncloud.android.test.ui.groups.NoIgnoreTestCategory;
+import com.owncloud.android.test.ui.groups.SmokeTestCategory;
+import com.owncloud.android.test.ui.models.FileListView;
+import com.owncloud.android.test.ui.models.WaitAMomentPopUp;
 
 
 @FixMethodOrder(MethodSorters.NAME_ASCENDING)
@@ -38,27 +38,27 @@ public class DeleteFolderTestSuite{
 	@Test
 	@Category({NoIgnoreTestCategory.class, SmokeTestCategory.class})
 	public void testDeleteFolder () throws Exception {
-		MainView mainView = Actions.login(Config.URL, Config.user,Config.password, Config.isTrusted, driver);
-		common.assertIsInMainView();
+		FileListView fileListView = Actions.login(Config.URL, Config.user,Config.password, Config.isTrusted, driver);
+		common.assertIsInFileListView();
 		
 		//TODO. if the folder already exists, do no created
 		//create the folder
-		WaitAMomentPopUp waitAMomentPopUp = Actions.createFolder(FOLDER_NAME, mainView);
+		WaitAMomentPopUp waitAMomentPopUp = Actions.createFolder(FOLDER_NAME, fileListView);
 		Common.waitTillElementIsNotPresent(waitAMomentPopUp.getWaitAMomentTextElement(), 100);
-		mainView.scrollTillFindElement(FOLDER_NAME);
-		assertTrue(folderHasBeenCreated = mainView.getFileElement().isDisplayed());
+		fileListView.scrollTillFindElement(FOLDER_NAME);
+		assertTrue(folderHasBeenCreated = fileListView.getFileElement().isDisplayed());
 
 		//delete the folder
-		Actions.deleteElement(FOLDER_NAME, mainView, driver);
-		assertFalse(folderHasBeenCreated =mainView.getFileElement().isDisplayed());
+		Actions.deleteElement(FOLDER_NAME, fileListView, driver);
+		assertFalse(folderHasBeenCreated =fileListView.getFileElement().isDisplayed());
 	}
 
 	@After
 	public void tearDown() throws Exception {
 		common.takeScreenShotOnFailed(name.getMethodName());
 		if(folderHasBeenCreated){
-			MainView mainView = new MainView(driver);
-			Actions.deleteElement(FOLDER_NAME, mainView, driver);
+			FileListView fileListView = new FileListView(driver);
+			Actions.deleteElement(FOLDER_NAME, fileListView, driver);
 		}
 		driver.removeApp("com.owncloud.android");
 		driver.quit();

+ 24 - 22
automationTest/src/test/java/androidtest/tests/LoginTestSuite.java → automationTest/src/test/java/com/owncloud/android/test/ui/testSuites/LoginTestSuite.java

@@ -1,7 +1,8 @@
-package androidtest.tests;
+package com.owncloud.android.test.ui.testSuites;
 
 import static org.junit.Assert.*;
 import io.appium.java_client.android.AndroidDriver;
+
 import org.junit.After;
 import org.junit.Before;
 import org.junit.Rule;
@@ -11,12 +12,13 @@ import org.junit.runners.MethodSorters;
 import org.junit.FixMethodOrder;
 import org.junit.Test;
 import org.openqa.selenium.ScreenOrientation;
-import androidtest.actions.Actions;
-import androidtest.groups.*;
-import androidtest.models.LoginForm;
-import androidtest.models.MainView;
-import androidtest.models.MenuList;
-import androidtest.models.SettingsView;
+
+import com.owncloud.android.test.ui.actions.Actions;
+import com.owncloud.android.test.ui.groups.*;
+import com.owncloud.android.test.ui.models.LoginForm;
+import com.owncloud.android.test.ui.models.FileListView;
+import com.owncloud.android.test.ui.models.MenuList;
+import com.owncloud.android.test.ui.models.SettingsView;
 
 @FixMethodOrder(MethodSorters.NAME_ASCENDING)
 public class LoginTestSuite{
@@ -36,16 +38,16 @@ public class LoginTestSuite{
 	public void test1LoginPortrait () throws Exception {
 		driver.rotate(ScreenOrientation.PORTRAIT);
 		
-		MainView mainView = Actions.login(Config.URL, Config.user,Config.password, Config.isTrusted, driver);
-		common.assertIsInMainView();
+		FileListView fileListView = Actions.login(Config.URL, Config.user,Config.password, Config.isTrusted, driver);
+		common.assertIsInFileListView();
 	}
 	
 	@Test
 	@Category({NoIgnoreTestCategory.class})
 	public void test2LoginLandscape () throws Exception {
 		driver.rotate(ScreenOrientation.LANDSCAPE);
-		MainView mainView = Actions.login(Config.URL, Config.user,Config.password, Config.isTrusted, driver);
-		common.assertIsInMainView();
+		FileListView fileListView = Actions.login(Config.URL, Config.user,Config.password, Config.isTrusted, driver);
+		common.assertIsInFileListView();
 	}
 	
 	
@@ -53,15 +55,15 @@ public class LoginTestSuite{
 	@Category({NoIgnoreTestCategory.class, SmokeTestCategory.class})
 	public void test3MultiAccountRotate () throws Exception {
 		driver.rotate(ScreenOrientation.LANDSCAPE);
-		MainView mainView = Actions.login(Config.URL, Config.user,Config.password, Config.isTrusted, driver);
-		common.assertIsInMainView();
+		FileListView fileListView = Actions.login(Config.URL, Config.user,Config.password, Config.isTrusted, driver);
+		common.assertIsInFileListView();
 		
 		driver.rotate(ScreenOrientation.PORTRAIT);
-		MenuList menu = mainView.clickOnMenuButton();
+		MenuList menu = fileListView.clickOnMenuButton();
 		SettingsView settingsView = menu.clickOnSettingsButton();
 		
 		settingsView.tapOnAddAccount(1, 1000);
-		mainView = Actions.login(Config.URL2, Config.user2,Config.password2, Config.isTrusted2, driver);
+		fileListView = Actions.login(Config.URL2, Config.user2,Config.password2, Config.isTrusted2, driver);
 		common.assertIsInSettingsView();
 	}
 	
@@ -69,16 +71,16 @@ public class LoginTestSuite{
 	@Category({NoIgnoreTestCategory.class})
 	public void test4ExistingAccountRotate () throws Exception {
 		driver.rotate(ScreenOrientation.PORTRAIT);
-		MainView mainView = Actions.login(Config.URL, Config.user,Config.password, Config.isTrusted, driver);
-		common.assertIsInMainView();
+		FileListView fileListView = Actions.login(Config.URL, Config.user,Config.password, Config.isTrusted, driver);
+		common.assertIsInFileListView();
 		
 		driver.rotate(ScreenOrientation.LANDSCAPE);
-		MenuList menu = mainView.clickOnMenuButton();
+		MenuList menu = fileListView.clickOnMenuButton();
 		SettingsView settingsView = menu.clickOnSettingsButton();
 		settingsView.tapOnAddAccount(1, 1000);
 		
 		LoginForm loginForm = new LoginForm(driver);
-		mainView = Actions.login(Config.URL, Config.user,Config.password, Config.isTrusted, driver);	
+		fileListView = Actions.login(Config.URL, Config.user,Config.password, Config.isTrusted, driver);	
 		assertTrue(common.waitForTextPresent("An account for the same user and server already exists in the device", loginForm.getAuthStatusText()));
 	}
 	
@@ -86,9 +88,9 @@ public class LoginTestSuite{
 	@Category({NoIgnoreTestCategory.class})
 	public void test5ChangePasswordWrong () throws Exception {
 		driver.rotate(ScreenOrientation.PORTRAIT);
-		MainView mainView = Actions.login(Config.URL, Config.user,Config.password, Config.isTrusted, driver);
-		common.assertIsInMainView();
-		MenuList menu = mainView.clickOnMenuButton();
+		FileListView fileListView = Actions.login(Config.URL, Config.user,Config.password, Config.isTrusted, driver);
+		common.assertIsInFileListView();
+		MenuList menu = fileListView.clickOnMenuButton();
 		SettingsView settingsView = menu.clickOnSettingsButton();
 		settingsView.tapOnAccountElement(1, 1000);
 		LoginForm changePasswordForm = settingsView.clickOnChangePasswordElement();

+ 11 - 11
automationTest/src/test/java/androidtest/tests/LogoutTestSuite.java → automationTest/src/test/java/com/owncloud/android/test/ui/testSuites/LogoutTestSuite.java

@@ -1,4 +1,4 @@
-package androidtest.tests;
+package com.owncloud.android.test.ui.testSuites;
 
 
 import static org.junit.Assert.*;
@@ -11,13 +11,13 @@ import org.junit.Test;
 import org.junit.experimental.categories.Category;
 import org.junit.rules.TestName;
 
-import androidtest.actions.Actions;
-import androidtest.groups.NoIgnoreTestCategory;
-import androidtest.groups.SmokeTestCategory;
-import androidtest.models.LoginForm;
-import androidtest.models.MainView;
-import androidtest.models.MenuList;
-import androidtest.models.SettingsView;
+import com.owncloud.android.test.ui.actions.Actions;
+import com.owncloud.android.test.ui.groups.NoIgnoreTestCategory;
+import com.owncloud.android.test.ui.groups.SmokeTestCategory;
+import com.owncloud.android.test.ui.models.LoginForm;
+import com.owncloud.android.test.ui.models.FileListView;
+import com.owncloud.android.test.ui.models.MenuList;
+import com.owncloud.android.test.ui.models.SettingsView;
 
 public class LogoutTestSuite{
 	
@@ -35,9 +35,9 @@ public class LogoutTestSuite{
 	@Test
 	@Category({NoIgnoreTestCategory.class, SmokeTestCategory.class})
 	public void testLogout () throws Exception {
-		MainView mainView = Actions.login(Config.URL, Config.user,Config.password, Config.isTrusted, driver);
-		common.assertIsInMainView();
-		MenuList menulist = mainView.clickOnMenuButton();
+		FileListView fileListView = Actions.login(Config.URL, Config.user,Config.password, Config.isTrusted, driver);
+		common.assertIsInFileListView();
+		MenuList menulist = fileListView.clickOnMenuButton();
 		SettingsView settingsView = menulist.clickOnSettingsButton();
 		settingsView.tapOnAccountElement(1, 1000);
 		LoginForm loginForm = settingsView.clickOnDeleteAccountElement();

+ 92 - 0
automationTest/src/test/java/com/owncloud/android/test/ui/testSuites/MoveFileTestSuite.java

@@ -0,0 +1,92 @@
+package com.owncloud.android.test.ui.testSuites;
+
+import static org.junit.Assert.*;
+import io.appium.java_client.android.AndroidDriver;
+
+import org.junit.After;
+import org.junit.Before;
+import org.junit.FixMethodOrder;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.experimental.categories.Category;
+import org.junit.rules.TestName;
+import org.junit.runners.MethodSorters;
+
+import com.owncloud.android.test.ui.actions.Actions;
+import com.owncloud.android.test.ui.groups.NoIgnoreTestCategory;
+import com.owncloud.android.test.ui.groups.SmokeTestCategory;
+import com.owncloud.android.test.ui.models.ElementMenuOptions;
+import com.owncloud.android.test.ui.models.FileListView;
+import com.owncloud.android.test.ui.models.MoveView;
+import com.owncloud.android.test.ui.models.WaitAMomentPopUp;
+
+
+
+@FixMethodOrder(MethodSorters.NAME_ASCENDING)
+public class MoveFileTestSuite{
+	AndroidDriver driver;
+	Common common;
+	private String FOLDER_WHERE_MOVE = "folderWhereMove";
+	private String FILE_NAME = Config.fileToTestName;
+	@Rule public TestName name = new TestName();
+	
+	@Before
+	public void setUp() throws Exception {
+		common=new Common();
+		driver=common.setUpCommonDriver();
+	}
+
+	@Test
+	@Category({NoIgnoreTestCategory.class, SmokeTestCategory.class})
+	public void testMoveFile () throws Exception {
+		WaitAMomentPopUp waitAMomentPopUp;
+
+		FileListView fileListView = Actions.login(Config.URL, Config.user,Config.password, Config.isTrusted, driver);
+		common.assertIsInFileListView();
+
+		//Common.waitTillElementIsNotPresent(fileListView.getProgressCircular(), 1000);
+
+		//check if the folder already exists and if true, delete them
+		Actions.deleteElement(FOLDER_WHERE_MOVE, fileListView, driver);
+		Actions.deleteElement(FILE_NAME, fileListView, driver);
+
+		//Create the folder where the other is gone to be moved
+		waitAMomentPopUp = Actions.createFolder(FOLDER_WHERE_MOVE, fileListView);
+		Common.waitTillElementIsNotPresent(waitAMomentPopUp.getWaitAMomentTextElement(), 100);
+		fileListView.scrollTillFindElement(FOLDER_WHERE_MOVE);
+		assertTrue(fileListView.getFileElement().isDisplayed());
+
+		FileListView fileListViewAfterUploadFile = Actions.uploadFile(FILE_NAME, fileListView);
+		fileListViewAfterUploadFile.scrollTillFindElement(FILE_NAME);
+		assertTrue(fileListViewAfterUploadFile.getFileElement().isDisplayed());
+
+		//select to move the file
+		ElementMenuOptions menuOptions = fileListView.longPressOnElement(FILE_NAME);
+		MoveView moveView = menuOptions.clickOnMove();
+
+		//to move to a folder
+		moveView.scrollTillFindElement(FOLDER_WHERE_MOVE).tap(1,1);
+		waitAMomentPopUp = moveView.clickOnChoose();
+		Common.waitTillElementIsNotPresent(waitAMomentPopUp.getWaitAMomentTextElement(), 100);
+
+		//check that the folder moved is inside the other
+		fileListView.scrollTillFindElement(FOLDER_WHERE_MOVE).tap(1,1);
+		Common.waitTillElementIsNotPresent(fileListView.getProgressCircular(), 1000);
+		Thread.sleep(1000);
+		fileListView.scrollTillFindElement(FILE_NAME);
+		assertEquals(FILE_NAME , fileListView.getFileElement().getText());
+
+	}
+
+	@After
+	public void tearDown() throws Exception {
+		common.takeScreenShotOnFailed(name.getMethodName());
+		FileListView fileListView = new FileListView(driver);
+		driver.sendKeyEvent(android.view.KeyEvent.KEYCODE_BACK);
+		Actions.deleteElement(FOLDER_WHERE_MOVE, fileListView, driver);
+		Actions.deleteElement(FILE_NAME, fileListView, driver);
+		driver.removeApp("com.owncloud.android");
+		driver.quit();
+	}
+
+}

+ 27 - 27
automationTest/src/test/java/androidtest/tests/MoveFolderTestSuite.java → automationTest/src/test/java/com/owncloud/android/test/ui/testSuites/MoveFolderTestSuite.java

@@ -1,4 +1,4 @@
-package androidtest.tests;
+package com.owncloud.android.test.ui.testSuites;
 
 import static org.junit.Assert.*;
 import io.appium.java_client.android.AndroidDriver;
@@ -12,13 +12,13 @@ import org.junit.runners.MethodSorters;
 import org.junit.FixMethodOrder;
 import org.junit.Test;
 
-import androidtest.actions.Actions;
-import androidtest.groups.NoIgnoreTestCategory;
-import androidtest.groups.SmokeTestCategory;
-import androidtest.models.ElementMenuOptions;
-import androidtest.models.MainView;
-import androidtest.models.MoveView;
-import androidtest.models.WaitAMomentPopUp;
+import com.owncloud.android.test.ui.actions.Actions;
+import com.owncloud.android.test.ui.groups.NoIgnoreTestCategory;
+import com.owncloud.android.test.ui.groups.SmokeTestCategory;
+import com.owncloud.android.test.ui.models.ElementMenuOptions;
+import com.owncloud.android.test.ui.models.FileListView;
+import com.owncloud.android.test.ui.models.MoveView;
+import com.owncloud.android.test.ui.models.WaitAMomentPopUp;
 
 
 @FixMethodOrder(MethodSorters.NAME_ASCENDING)
@@ -41,29 +41,29 @@ public class MoveFolderTestSuite{
 	public void testMoveFolder () throws Exception {
 		WaitAMomentPopUp waitAMomentPopUp;
 
-		MainView mainView = Actions.login(Config.URL, Config.user,Config.password, Config.isTrusted, driver);
-		common.assertIsInMainView();
+		FileListView fileListView = Actions.login(Config.URL, Config.user,Config.password, Config.isTrusted, driver);
+		common.assertIsInFileListView();
 
-		Common.waitTillElementIsNotPresent(mainView.getProgressCircular(), 1000);
+		//Common.waitTillElementIsNotPresent(fileListView.getProgressCircular(), 1000);
 
 		//check if the folder already exists and if true, delete them
-		Actions.deleteElement(FOLDER_WHERE_MOVE, mainView, driver);
-		Actions.deleteElement(FOLDER_TO_MOVE, mainView, driver);
+		Actions.deleteElement(FOLDER_WHERE_MOVE, fileListView, driver);
+		Actions.deleteElement(FOLDER_TO_MOVE, fileListView, driver);
 
 		//Create the folder where the other is gone to be moved
-		waitAMomentPopUp = Actions.createFolder(FOLDER_WHERE_MOVE, mainView);
+		waitAMomentPopUp = Actions.createFolder(FOLDER_WHERE_MOVE, fileListView);
 		Common.waitTillElementIsNotPresent(waitAMomentPopUp.getWaitAMomentTextElement(), 100);
-		mainView.scrollTillFindElement(FOLDER_WHERE_MOVE);
-		assertTrue(mainView.getFileElement().isDisplayed());
+		fileListView.scrollTillFindElement(FOLDER_WHERE_MOVE);
+		assertTrue(fileListView.getFileElement().isDisplayed());
 
 		//Create the folder which is going to be moved
-		waitAMomentPopUp = Actions.createFolder(FOLDER_TO_MOVE, mainView);
+		waitAMomentPopUp = Actions.createFolder(FOLDER_TO_MOVE, fileListView);
 		Common.waitTillElementIsNotPresent(waitAMomentPopUp.getWaitAMomentTextElement(), 100);
-		mainView.scrollTillFindElement(FOLDER_TO_MOVE);
-		assertTrue(mainView.getFileElement().isDisplayed());
+		fileListView.scrollTillFindElement(FOLDER_TO_MOVE);
+		assertTrue(fileListView.getFileElement().isDisplayed());
 
 		//select to move the folder
-		ElementMenuOptions menuOptions = mainView.longPressOnElement(FOLDER_TO_MOVE);
+		ElementMenuOptions menuOptions = fileListView.longPressOnElement(FOLDER_TO_MOVE);
 		MoveView moveView = menuOptions.clickOnMove();
 
 		//to move to a folder
@@ -72,20 +72,20 @@ public class MoveFolderTestSuite{
 		Common.waitTillElementIsNotPresent(waitAMomentPopUp.getWaitAMomentTextElement(), 100);
 		
 		//check that the folder moved is inside the other
-		mainView.scrollTillFindElement(FOLDER_WHERE_MOVE).tap(1,1);
-		Common.waitTillElementIsNotPresent(mainView.getProgressCircular(), 1000);
+		fileListView.scrollTillFindElement(FOLDER_WHERE_MOVE).tap(1,1);
+		Common.waitTillElementIsNotPresent(fileListView.getProgressCircular(), 1000);
 		Thread.sleep(1000);
-		mainView.scrollTillFindElement(FOLDER_TO_MOVE);
-		assertEquals(FOLDER_TO_MOVE , mainView.getFileElement().getText());
+		fileListView.scrollTillFindElement(FOLDER_TO_MOVE);
+		assertEquals(FOLDER_TO_MOVE , fileListView.getFileElement().getText());
 	}
 
 	@After
 	public void tearDown() throws Exception {
 		common.takeScreenShotOnFailed(name.getMethodName());
-		MainView mainView = new MainView(driver);
+		FileListView fileListView = new FileListView(driver);
 		driver.sendKeyEvent(android.view.KeyEvent.KEYCODE_BACK);
-		Actions.deleteElement(FOLDER_WHERE_MOVE, mainView, driver);
-		Actions.deleteElement(FOLDER_TO_MOVE, mainView, driver);
+		Actions.deleteElement(FOLDER_WHERE_MOVE, fileListView, driver);
+		Actions.deleteElement(FOLDER_TO_MOVE, fileListView, driver);
 		driver.removeApp("com.owncloud.android");
 		driver.quit();
 	}

+ 70 - 0
automationTest/src/test/java/com/owncloud/android/test/ui/testSuites/PasscodeTestSuite.java

@@ -0,0 +1,70 @@
+package com.owncloud.android.test.ui.testSuites;
+
+import io.appium.java_client.android.AndroidDriver;
+
+import org.junit.After;
+import org.junit.Before;
+import org.junit.FixMethodOrder;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.experimental.categories.Category;
+import org.junit.rules.TestName;
+import org.junit.runners.MethodSorters;
+import org.openqa.selenium.ScreenOrientation;
+
+import com.owncloud.android.test.ui.actions.Actions;
+import com.owncloud.android.test.ui.groups.NoIgnoreTestCategory;
+import com.owncloud.android.test.ui.models.FileListView;
+import com.owncloud.android.test.ui.models.MenuList;
+import com.owncloud.android.test.ui.models.PassCodeRequestView;
+import com.owncloud.android.test.ui.models.PassCodeView;
+import com.owncloud.android.test.ui.models.SettingsView;
+
+@FixMethodOrder(MethodSorters.NAME_ASCENDING)
+public class PasscodeTestSuite {
+	AndroidDriver driver;
+	Common common;
+	
+	@Rule public TestName name = new TestName();
+	
+	@Before
+	public void setUp() throws Exception {
+		common=new Common();
+		driver=common.setUpCommonDriver();
+	}
+	
+	@Test
+	@Category({NoIgnoreTestCategory.class})
+	public void testPincodeEnable () throws Exception {
+		driver.rotate(ScreenOrientation.PORTRAIT);
+		FileListView fileListView = Actions.login(Config.URL, Config.user,Config.password, Config.isTrusted, driver);
+		common.assertIsInFileListView();
+		
+		MenuList menu = fileListView.clickOnMenuButton();
+		SettingsView settingsView = menu.clickOnSettingsButton();
+		
+		PassCodeView passCodeview = settingsView.EnablePassCode();
+		PassCodeView passCodeview2 = passCodeview.enterPasscode(Config.passcode1, Config.passcode2, Config.passcode3, Config.passcode4);
+		passCodeview2.reenterPasscode(Config.passcode1, Config.passcode2, Config.passcode3, Config.passcode4);
+		
+		driver.sendKeyEvent(android.view.KeyEvent.KEYCODE_HOME);
+		//TO DO. Open the app instead of start an activity
+		driver.startActivity("com.owncloud.android", ".ui.activity.FileDisplayActivity");
+		//here we check that we are not in the fileDisplayActivity, because pincode is asked
+		common.assertIsNotInFileListView();
+		common.assertIsPasscodeRequestView();
+		
+		PassCodeRequestView passCodeReequestView = new PassCodeRequestView(driver);
+		passCodeReequestView.enterPasscode(Config.passcode1, Config.passcode2, Config.passcode3, Config.passcode4);
+		common.assertIsInFileListView();
+	}
+	
+	
+	@After
+	public void tearDown() throws Exception {
+		common.takeScreenShotOnFailed(name.getMethodName());
+		driver.removeApp("com.owncloud.android");
+		driver.quit();
+	}
+
+}

+ 55 - 0
automationTest/src/test/java/com/owncloud/android/test/ui/testSuites/RefreshFolderTestSuite.java

@@ -0,0 +1,55 @@
+package com.owncloud.android.test.ui.testSuites;
+
+import static org.junit.Assert.*;
+import io.appium.java_client.android.AndroidDriver;
+
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Rule;
+import org.junit.experimental.categories.Category;
+import org.junit.rules.TestName;
+import org.junit.runners.MethodSorters;
+import org.junit.FixMethodOrder;
+import org.junit.Test;
+
+import com.owncloud.android.test.ui.actions.Actions;
+import com.owncloud.android.test.ui.groups.UnfinishedTestCategory;
+import com.owncloud.android.test.ui.models.FileListView;
+
+
+@FixMethodOrder(MethodSorters.NAME_ASCENDING)
+public class RefreshFolderTestSuite{
+	AndroidDriver driver;
+	Common common;
+	
+	@Rule public TestName name = new TestName();
+
+	@Before
+	public void setUp() throws Exception {
+		common=new Common();
+		driver=common.setUpCommonDriver();
+	}
+
+
+	@Test
+	@Category({UnfinishedTestCategory.class})
+	public void testPulldownToRefreshFolder () throws Exception {
+		FileListView fileListView = Actions.login(Config.URL, Config.user,Config.password, Config.isTrusted, driver);
+		common.assertIsInFileListView();
+		//TODO. Remove the sleep and check why is not working the assert when using waitTillElementIsNotPresent
+		Thread.sleep(5000);
+		//waitTillElementIsNotPresent(fileListView.getProgressCircular(), 1000);
+		fileListView.pulldownToRefresh();
+		assertTrue(fileListView.getProgressCircular().isDisplayed());
+		//TODO insert a file in the web, and check that it's shown here
+	}
+
+
+	@After
+	public void tearDown() throws Exception {
+		common.takeScreenShotOnFailed(name.getMethodName());
+		driver.removeApp("com.owncloud.android");
+		driver.quit();
+	}
+
+}

+ 84 - 0
automationTest/src/test/java/com/owncloud/android/test/ui/testSuites/RenameFileTestSuite.java

@@ -0,0 +1,84 @@
+package com.owncloud.android.test.ui.testSuites;
+
+import static org.junit.Assert.*;
+import io.appium.java_client.android.AndroidDriver;
+
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Rule;
+import org.junit.experimental.categories.Category;
+import org.junit.rules.TestName;
+import org.junit.runners.MethodSorters;
+import org.junit.FixMethodOrder;
+import org.junit.Test;
+import org.openqa.selenium.By;
+import org.openqa.selenium.support.ui.ExpectedConditions;
+
+import com.owncloud.android.test.ui.actions.Actions;
+import com.owncloud.android.test.ui.groups.NoIgnoreTestCategory;
+import com.owncloud.android.test.ui.groups.SmokeTestCategory;
+import com.owncloud.android.test.ui.models.ElementMenuOptions;
+import com.owncloud.android.test.ui.models.FileListView;
+import com.owncloud.android.test.ui.models.NewFolderPopUp;
+import com.owncloud.android.test.ui.models.WaitAMomentPopUp;
+
+
+@FixMethodOrder(MethodSorters.NAME_ASCENDING)
+public class RenameFileTestSuite{
+
+	AndroidDriver driver;
+	Common common;
+	private Boolean fileHasBeenCreated = false;
+	private final String OLD_FILE_NAME = Config.fileToTestName;
+	private final String FILE_NAME = "newNameFile";
+	private String CurrentCreatedFile = "";
+	
+	@Rule public TestName name = new TestName();
+
+	@Before
+	public void setUp() throws Exception {
+		common=new Common();
+		driver=common.setUpCommonDriver();
+	}
+
+	@Test
+	@Category({NoIgnoreTestCategory.class, SmokeTestCategory.class})
+	public void testRenameFile () throws Exception {
+		FileListView fileListView = Actions.login(Config.URL, Config.user,Config.password, Config.isTrusted, driver);
+		common.assertIsInFileListView();
+
+		//TODO. if the file already exists, do not upload
+		FileListView fileListViewAfterUploadFile = Actions.uploadFile(OLD_FILE_NAME, fileListView);
+
+		//check if the file with the new name already exists, if true delete it
+		Actions.deleteElement(FILE_NAME, fileListView, driver);
+
+		fileListViewAfterUploadFile.scrollTillFindElement(OLD_FILE_NAME);
+		assertTrue(fileHasBeenCreated = fileListViewAfterUploadFile.getFileElement().isDisplayed());
+		CurrentCreatedFile = OLD_FILE_NAME;
+		Common.waitTillElementIsNotPresent(fileListViewAfterUploadFile.getProgressCircular(), 1000);
+		common.wait.until(ExpectedConditions.visibilityOf(fileListViewAfterUploadFile.getFileElementLayout().findElement(By.id(FileListView.getLocalFileIndicator()))));
+		ElementMenuOptions menuOptions = fileListViewAfterUploadFile.longPressOnElement(OLD_FILE_NAME);
+		NewFolderPopUp newFolderPopUp = menuOptions.clickOnRename();
+		newFolderPopUp.typeNewFolderName(FILE_NAME);
+		WaitAMomentPopUp waitAMomentPopUp = newFolderPopUp.clickOnNewFolderOkButton();
+		Common.waitTillElementIsNotPresent(waitAMomentPopUp.getWaitAMomentTextElement(), 100);
+		fileListViewAfterUploadFile.scrollTillFindElement(FILE_NAME);
+		assertNotNull(fileListViewAfterUploadFile.getFileElement());
+		assertTrue(fileListViewAfterUploadFile.getFileElement().isDisplayed());	
+		assertEquals(FILE_NAME , fileListViewAfterUploadFile.getFileElement().getText());
+		CurrentCreatedFile = FILE_NAME;
+	}
+
+	@After
+	public void tearDown() throws Exception {
+		common.takeScreenShotOnFailed(name.getMethodName());
+		if (fileHasBeenCreated) {
+			FileListView fileListView = new FileListView(driver);
+			Actions.deleteElement(CurrentCreatedFile,fileListView, driver);
+		}
+		driver.removeApp("com.owncloud.android");
+		driver.quit();
+	}
+
+}

+ 21 - 21
automationTest/src/test/java/androidtest/tests/RenameFolderTestSuite.java → automationTest/src/test/java/com/owncloud/android/test/ui/testSuites/RenameFolderTestSuite.java

@@ -1,4 +1,4 @@
-package androidtest.tests;
+package com.owncloud.android.test.ui.testSuites;
 
 import static org.junit.Assert.*;
 import io.appium.java_client.android.AndroidDriver;
@@ -12,13 +12,13 @@ import org.junit.runners.MethodSorters;
 import org.junit.FixMethodOrder;
 import org.junit.Test;
 
-import androidtest.actions.Actions;
-import androidtest.groups.NoIgnoreTestCategory;
-import androidtest.groups.SmokeTestCategory;
-import androidtest.models.ElementMenuOptions;
-import androidtest.models.MainView;
-import androidtest.models.NewFolderPopUp;
-import androidtest.models.WaitAMomentPopUp;
+import com.owncloud.android.test.ui.actions.Actions;
+import com.owncloud.android.test.ui.groups.NoIgnoreTestCategory;
+import com.owncloud.android.test.ui.groups.SmokeTestCategory;
+import com.owncloud.android.test.ui.models.ElementMenuOptions;
+import com.owncloud.android.test.ui.models.FileListView;
+import com.owncloud.android.test.ui.models.NewFolderPopUp;
+import com.owncloud.android.test.ui.models.WaitAMomentPopUp;
 
 
 @FixMethodOrder(MethodSorters.NAME_ASCENDING)
@@ -43,39 +43,39 @@ public class RenameFolderTestSuite{
 	@Test
 	@Category({NoIgnoreTestCategory.class, SmokeTestCategory.class})
 	public void testRenameFolder () throws Exception {
-		MainView mainView = Actions.login(Config.URL, Config.user,Config.password, Config.isTrusted, driver);
-		common.assertIsInMainView();
+		FileListView fileListView = Actions.login(Config.URL, Config.user,Config.password, Config.isTrusted, driver);
+		common.assertIsInFileListView();
 
 		//TODO. if the folder already exists, do no created
 		//create the folder to rename
-		WaitAMomentPopUp waitAMomentPopUp = Actions.createFolder(OLD_FOLDER_NAME, mainView);
+		WaitAMomentPopUp waitAMomentPopUp = Actions.createFolder(OLD_FOLDER_NAME, fileListView);
 		Common.waitTillElementIsNotPresent(waitAMomentPopUp.getWaitAMomentTextElement(), 100);
-		mainView.scrollTillFindElement(OLD_FOLDER_NAME);
+		fileListView.scrollTillFindElement(OLD_FOLDER_NAME);
 
-		assertTrue(folderHasBeenCreated = mainView.getFileElement().isDisplayed());
+		assertTrue(folderHasBeenCreated = fileListView.getFileElement().isDisplayed());
 
 		//check if the folder with the new name already exists and if true, delete them
-		Actions.deleteElement(FOLDER_NAME, mainView, driver);
+		Actions.deleteElement(FOLDER_NAME, fileListView, driver);
 
 		CurrentCreatedFolder = OLD_FOLDER_NAME;
-		ElementMenuOptions menuOptions = mainView.longPressOnElement(OLD_FOLDER_NAME);
+		ElementMenuOptions menuOptions = fileListView.longPressOnElement(OLD_FOLDER_NAME);
 		NewFolderPopUp FolderPopUp = menuOptions.clickOnRename();
 		FolderPopUp.typeNewFolderName(FOLDER_NAME);
 		FolderPopUp.clickOnNewFolderOkButton();
 		CurrentCreatedFolder = FOLDER_NAME;
 		Common.waitTillElementIsNotPresent(waitAMomentPopUp.getWaitAMomentTextElement(), 100);
-		mainView.scrollTillFindElement(FOLDER_NAME);
-		assertNotNull(mainView.getFileElement());
-		assertTrue(folderHasBeenCreated = mainView.getFileElement().isDisplayed());	
-		assertEquals(FOLDER_NAME , mainView.getFileElement().getText());
+		fileListView.scrollTillFindElement(FOLDER_NAME);
+		assertNotNull(fileListView.getFileElement());
+		assertTrue(folderHasBeenCreated = fileListView.getFileElement().isDisplayed());	
+		assertEquals(FOLDER_NAME , fileListView.getFileElement().getText());
 	}
 
 	@After
 	public void tearDown() throws Exception {
 		common.takeScreenShotOnFailed(name.getMethodName());
 		if(folderHasBeenCreated){
-			MainView mainView = new MainView(driver);
-			Actions.deleteElement(CurrentCreatedFolder, mainView, driver);
+			FileListView fileListView = new FileListView(driver);
+			Actions.deleteElement(CurrentCreatedFolder, fileListView, driver);
 		}
 		driver.removeApp("com.owncloud.android");
 		driver.quit();

+ 24 - 0
automationTest/src/test/java/com/owncloud/android/test/ui/testSuites/RunFailingTests.java

@@ -0,0 +1,24 @@
+package com.owncloud.android.test.ui.testSuites;
+
+
+import org.junit.experimental.categories.Categories.ExcludeCategory;
+import org.junit.experimental.categories.Categories.IncludeCategory;
+import org.junit.runner.RunWith;
+
+import com.owncloud.android.test.ui.groups.FailingTestCategory;
+import com.owncloud.android.test.ui.groups.FlexibleCategories;
+import com.owncloud.android.test.ui.groups.NoIgnoreTestCategory;
+import com.owncloud.android.test.ui.groups.FlexibleCategories.TestClassPrefix;
+import com.owncloud.android.test.ui.groups.FlexibleCategories.TestClassSuffix;
+import com.owncloud.android.test.ui.groups.FlexibleCategories.TestScanPackage;
+
+
+@RunWith(FlexibleCategories.class)
+@ExcludeCategory(NoIgnoreTestCategory.class)
+@IncludeCategory(FailingTestCategory.class)
+@TestScanPackage("com.owncloud.android.test.ui.testSuites")
+@TestClassPrefix("")
+@TestClassSuffix("TestSuite")
+public class RunFailingTests {
+
+}

+ 22 - 0
automationTest/src/test/java/com/owncloud/android/test/ui/testSuites/RunNoIgnoreTests.java

@@ -0,0 +1,22 @@
+package com.owncloud.android.test.ui.testSuites;
+
+import org.junit.experimental.categories.Categories.ExcludeCategory;
+import org.junit.experimental.categories.Categories.IncludeCategory;
+import org.junit.runner.RunWith;
+
+import com.owncloud.android.test.ui.groups.FlexibleCategories;
+import com.owncloud.android.test.ui.groups.IgnoreTestCategory;
+import com.owncloud.android.test.ui.groups.NoIgnoreTestCategory;
+import com.owncloud.android.test.ui.groups.FlexibleCategories.TestClassPrefix;
+import com.owncloud.android.test.ui.groups.FlexibleCategories.TestClassSuffix;
+import com.owncloud.android.test.ui.groups.FlexibleCategories.TestScanPackage;
+
+
+@RunWith(FlexibleCategories.class)
+@ExcludeCategory(IgnoreTestCategory.class)
+@IncludeCategory(NoIgnoreTestCategory.class)
+@TestScanPackage("com.owncloud.android.test.ui.testSuites")
+@TestClassPrefix("")
+@TestClassSuffix("TestSuite")
+public class RunNoIgnoreTests {
+}

+ 22 - 0
automationTest/src/test/java/com/owncloud/android/test/ui/testSuites/RunSmokeTests.java

@@ -0,0 +1,22 @@
+package com.owncloud.android.test.ui.testSuites;
+
+import org.junit.experimental.categories.Categories.ExcludeCategory;
+import org.junit.experimental.categories.Categories.IncludeCategory;
+import org.junit.runner.RunWith;
+
+import com.owncloud.android.test.ui.groups.FlexibleCategories;
+import com.owncloud.android.test.ui.groups.IgnoreTestCategory;
+import com.owncloud.android.test.ui.groups.SmokeTestCategory;
+import com.owncloud.android.test.ui.groups.FlexibleCategories.TestClassPrefix;
+import com.owncloud.android.test.ui.groups.FlexibleCategories.TestClassSuffix;
+import com.owncloud.android.test.ui.groups.FlexibleCategories.TestScanPackage;
+
+
+@RunWith(FlexibleCategories.class)
+@ExcludeCategory(IgnoreTestCategory.class)
+@IncludeCategory(SmokeTestCategory.class)
+@TestScanPackage("com.owncloud.android.test.ui.testSuites")
+@TestClassPrefix("")
+@TestClassSuffix("TestSuite")
+public class RunSmokeTests {
+}

+ 72 - 0
automationTest/src/test/java/com/owncloud/android/test/ui/testSuites/ShareLinkFileTestSuite.java

@@ -0,0 +1,72 @@
+package com.owncloud.android.test.ui.testSuites;
+
+import static org.junit.Assert.assertTrue;
+import io.appium.java_client.android.AndroidDriver;
+
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.experimental.categories.Category;
+import org.junit.rules.TestName;
+import org.openqa.selenium.By;
+import org.openqa.selenium.support.ui.ExpectedConditions;
+
+import com.owncloud.android.test.ui.actions.Actions;
+import com.owncloud.android.test.ui.groups.NoIgnoreTestCategory;
+import com.owncloud.android.test.ui.groups.SmokeTestCategory;
+import com.owncloud.android.test.ui.models.ElementMenuOptions;
+import com.owncloud.android.test.ui.models.GmailSendMailView;
+import com.owncloud.android.test.ui.models.FileListView;
+import com.owncloud.android.test.ui.models.ShareView;
+
+public class ShareLinkFileTestSuite{
+	
+	AndroidDriver driver;
+	Common common;
+	private final String FILE_NAME = Config.fileToTestName;
+	private Boolean fileHasBeenCreated = false;
+	
+	@Rule public TestName name = new TestName();
+	
+	@Before
+	public void setUp() throws Exception {
+		common=new Common();
+		driver=common.setUpCommonDriver();
+	}
+
+	@Test
+	@Category({NoIgnoreTestCategory.class, SmokeTestCategory.class})
+	public void testShareLinkFile () throws Exception {	
+		FileListView fileListView = Actions.login(Config.URL, Config.user,Config.password, Config.isTrusted, driver);
+		common.assertIsInFileListView();
+		
+		//TODO. if the file already exists, do not upload
+		FileListView fileListViewAfterUploadFile = Actions.uploadFile(FILE_NAME, fileListView);
+				
+		fileListViewAfterUploadFile.scrollTillFindElement(FILE_NAME);
+		assertTrue(fileHasBeenCreated = fileListViewAfterUploadFile.getFileElement().isDisplayed());
+		
+		ElementMenuOptions elementMenuOption = fileListViewAfterUploadFile.longPressOnElement(FILE_NAME);
+		ShareView shareView = elementMenuOption.clickOnShareLinkElement();
+		Actions.scrollTillFindElement("Gmail", shareView.getListViewLayout(), driver).click();
+		GmailSendMailView gmailSendMailView = new GmailSendMailView(driver);
+		gmailSendMailView.typeToEmailAdress(Config.gmailAccount);
+		gmailSendMailView.clickOnSendButton();
+		Common.waitTillElementIsNotPresent(fileListViewAfterUploadFile.getProgressCircular(), 1000);
+		common.wait.until(ExpectedConditions.visibilityOf(fileListViewAfterUploadFile.getFileElementLayout().findElement(By.id(FileListView.getSharedElementIndicator()))));
+		assertTrue(fileListViewAfterUploadFile.getFileElementLayout().findElement(By.id(FileListView.getSharedElementIndicator())).isDisplayed());
+
+	}
+
+	@After
+	public void tearDown() throws Exception {
+		common.takeScreenShotOnFailed(name.getMethodName());
+		if (fileHasBeenCreated) {
+			FileListView fileListView = new FileListView(driver);
+			Actions.deleteElement(FILE_NAME,fileListView, driver);
+		}
+		driver.removeApp("com.owncloud.android");
+		driver.quit();
+	}
+}

+ 124 - 0
automationTest/src/test/java/com/owncloud/android/test/ui/testSuites/UploadTestSuite.java

@@ -0,0 +1,124 @@
+package com.owncloud.android.test.ui.testSuites;
+
+
+import static org.junit.Assert.*;
+import io.appium.java_client.MobileBy;
+import io.appium.java_client.android.AndroidDriver;
+
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Rule;
+import org.junit.experimental.categories.Category;
+import org.junit.rules.TestName;
+import org.junit.runners.MethodSorters;
+import org.junit.FixMethodOrder;
+import org.junit.Test;
+import org.openqa.selenium.By;
+import org.openqa.selenium.support.ui.ExpectedConditions;
+
+import com.owncloud.android.test.ui.actions.Actions;
+import com.owncloud.android.test.ui.groups.FailingTestCategory;
+import com.owncloud.android.test.ui.groups.IgnoreTestCategory;
+import com.owncloud.android.test.ui.groups.NoIgnoreTestCategory;
+import com.owncloud.android.test.ui.models.FileDetailsView;
+import com.owncloud.android.test.ui.models.ElementMenuOptions;
+import com.owncloud.android.test.ui.models.GmailEmailListView;
+import com.owncloud.android.test.ui.models.GmailEmailView;
+import com.owncloud.android.test.ui.models.ImageView;
+import com.owncloud.android.test.ui.models.FileListView;
+import com.owncloud.android.test.ui.models.UploadView;
+
+
+@FixMethodOrder(MethodSorters.NAME_ASCENDING)
+@Category({NoIgnoreTestCategory.class})
+public class UploadTestSuite{
+
+	AndroidDriver driver;
+	Common common;
+	String FILE_NAME = Config.fileToTestName;
+	
+	@Rule public TestName name = new TestName();
+	
+
+	@Before
+	public void setUp() throws Exception {
+		common=new Common();
+		driver=common.setUpCommonDriver();
+	}
+
+	@Test
+	@Category(NoIgnoreTestCategory.class)
+	public void testUploadFile () throws Exception {
+
+		FileListView fileListView = Actions.login(Config.URL, Config.user,Config.password, Config.isTrusted, driver);
+		common.assertIsInFileListView();
+
+		//check if the file already exists and if true, delete it
+		Actions.deleteElement(FILE_NAME, fileListView, driver);
+
+		FileListView fileListViewAfterUploadFile = Actions.uploadFile(FILE_NAME, fileListView);
+
+		fileListViewAfterUploadFile.scrollTillFindElement(FILE_NAME);
+		assertTrue(fileListViewAfterUploadFile.getFileElement().isDisplayed());
+		Common.waitTillElementIsNotPresent(fileListViewAfterUploadFile.getProgressCircular(), 1000);
+		common.wait.until(ExpectedConditions.visibilityOf(fileListViewAfterUploadFile.getFileElementLayout().findElement(By.id(FileListView.getLocalFileIndicator()))));
+		assertTrue(fileListViewAfterUploadFile.getFileElementLayout().findElement(By.id(FileListView.getLocalFileIndicator())).isDisplayed());
+
+	}
+	
+	@Test
+	@Category(IgnoreTestCategory.class)
+	public void testUploadFromGmail () throws Exception {
+		FileListView fileListView = Actions.login(Config.URL, Config.user,Config.password, Config.isTrusted, driver);
+		driver.startActivity("com.google.android.gm", ".ConversationListActivityGmail");
+		GmailEmailListView gmailEmailListView = new GmailEmailListView(driver);
+		GmailEmailView gmailEmailView = gmailEmailListView.clickOnEmail();
+		ImageView imageView = gmailEmailView.clickOnfileButton();
+		imageView.clickOnOptionsButton();
+		imageView.clickOnShareButton();
+		imageView.clickOnOwnCloudButton();
+		imageView.clickOnJustOnceButton();
+		UploadView uploadView = new UploadView(driver);
+		uploadView.clickOUploadButton();
+		driver.startActivity("com.owncloud.android", ".ui.activity.FileDisplayActivity");
+		common.wait.until(ExpectedConditions.visibilityOfAllElementsLocatedBy(By.name(Config.fileToTestSendByEmailName)));
+		assertEquals(Config.fileToTestSendByEmailName , driver.findElementByName(Config.fileToTestSendByEmailName).getText());
+	}
+
+	
+	@Test	
+	@Category({IgnoreTestCategory.class, FailingTestCategory.class})
+	public void testKeepFileUpToDate () throws Exception {
+
+		FileListView fileListView = Actions.login(Config.URL, Config.user,Config.password, Config.isTrusted, driver);
+		common.assertIsInFileListView();
+
+		Common.waitTillElementIsNotPresent(fileListView.getProgressCircular(), 1000);
+
+		FileListView fileListViewAfterUploadFile = Actions.uploadFile(FILE_NAME, fileListView);
+		fileListViewAfterUploadFile.scrollTillFindElement(FILE_NAME);
+		assertTrue(fileListViewAfterUploadFile.getFileElement().isDisplayed());
+
+		ElementMenuOptions menuOptions = fileListViewAfterUploadFile.longPressOnElement(FILE_NAME);
+		FileDetailsView fileDetailsView = menuOptions.clickOnDetails();
+		fileDetailsView.checkKeepFileUpToDateCheckbox();
+		Thread.sleep(3000);
+		driver.sendKeyEvent(android.view.KeyEvent.KEYCODE_BACK);
+		//assertTrue(common.isElementPresent(fileListViewAfterUploadFile.getFileElementLayout(), MobileBy.id(FileListView.getFavoriteFileIndicator())));
+		assertTrue(fileListViewAfterUploadFile.getFileElementLayout().findElement(By.id(FileListView.getFavoriteFileIndicator())).isDisplayed());
+
+	}
+
+
+	@After
+	public void tearDown() throws Exception {
+		common.takeScreenShotOnFailed(name.getMethodName());
+		FileListView fileListView = new FileListView(driver);
+		Actions.deleteElement(FILE_NAME,fileListView, driver);
+		driver.removeApp("com.owncloud.android");
+		driver.quit();
+	}
+
+
+}
+