package androidtest.tests;


import io.appium.java_client.MobileBy;

import org.junit.After;
import org.junit.Before;
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.models.AppDetailsView;
import androidtest.models.ElementMenuOptions;
import androidtest.models.MainView;


@FixMethodOrder(MethodSorters.NAME_ASCENDING)
public class UploadTestSuite extends Common{

	String FILE_NAME = "test";

	@Before
	public void setUp() throws Exception {
		setUpCommonDriver();
	}

	@Test
	public void test1UploadFile () throws Exception {

		MainView mainView = Actions.login(Config.URL, Config.user,Config.password, Config.isTrusted, driver);
		assertTrue(waitForTextPresent("ownCloud", mainView.getTitleTextElement()));

		//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());
		waitTillElementIsNotPresent(mainViewAfterUploadFile.getProgressCircular(), 1000);
		wait.until(ExpectedConditions.visibilityOf(mainViewAfterUploadFile.getFileElementLayout().findElement(By.id(MainView.getLocalFileIndicator()))));


	}

	@Test
	public void test2KeepFileUpToDate () throws Exception {

		MainView mainView = Actions.login(Config.URL, Config.user,Config.password, Config.isTrusted, driver);
		assertTrue(waitForTextPresent("ownCloud", mainView.getTitleTextElement()));

		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(isElementPresent(mainViewAfterUploadFile.getFileElementLayout(), MobileBy.id(MainView.getFavoriteFileIndicator())));

	}


	@After
	public void tearDown() throws Exception {
		takeScreenShotOnFailed(getName());
		MainView mainView = new MainView(driver);
		Actions.deleteElement(FILE_NAME,mainView, driver);
		driver.removeApp("com.owncloud.android");
		driver.quit();
	}


}

