Browse Source

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

purigarcia 10 năm trước cách đây
mục cha
commit
2f1e634342
52 tập tin đã thay đổi với 1358 bổ sung508 xóa
  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();
+	}
+
+
+}
+