diff --git a/.gitignore b/.gitignore
index 3ef0888..6f016b8 100644
--- a/.gitignore
+++ b/.gitignore
@@ -217,3 +217,97 @@ target/test-classes/cucumber/feature/GetTweet\.feature
target/test-classes/cucumber/feature/GetUser\.feature
target/failsafe-reports/failsafe-summary\.xml
+
+target/kwetter/403\.xhtml
+
+target/kwetter/404\.xhtml
+
+target/kwetter/500\.xhtml
+
+target/kwetter/admin/index\.xhtml
+
+target/kwetter/admin/logout\.xhtml
+
+target/kwetter/admin/permissions\.xhtml
+
+target/kwetter/admin/roles\.xhtml
+
+target/kwetter/admin/tweets\.xhtml
+
+target/kwetter/admin/users\.xhtml
+
+target/kwetter/includes/menu\.xhtml
+
+target/kwetter/includes/top-bar\.xhtml
+
+target/kwetter/login\.xhtml
+
+target/kwetter/resources/css/prism\.css
+
+target/kwetter/resources/css/starter\.css
+
+target/kwetter/resources/js/prism\.js
+
+target/kwetter/resources/js/starter\.js
+
+target/kwetter/WEB-INF/classes/admin_de\.properties
+
+target/kwetter/WEB-INF/classes/admin_nl\.properties
+
+target/kwetter/WEB-INF/classes/admin-config\.properties
+
+target/kwetter/WEB-INF/classes/admin\.properties
+
+target/kwetter/WEB-INF/classes/kwetter\.properties
+
+target/kwetter/WEB-INF/classes/META-INF/beans\.xml
+
+target/kwetter/WEB-INF/classes/META-INF/glassfish-web\.xml
+
+target/kwetter/WEB-INF/classes/META-INF/persistence\.xml
+
+target/kwetter/WEB-INF/classes/privateKey\.pem
+
+target/kwetter/WEB-INF/classes/publicKey\.pem
+
+target/kwetter/WEB-INF/faces-config\.xml
+
+target/kwetter/WEB-INF/glassfish-web\.xml
+
+target/kwetter/WEB-INF/templates/admin-template\.xhtml
+
+target/kwetter/WEB-INF/templates/template\.xhtml
+
+target/maven-archiver/pom\.properties
+
+target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/createdFiles\.lst
+
+target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/inputFiles\.lst
+
+target/surefire-reports/2019-05-06T12-17-11_762-jvmRun1\.dump
+
+target/surefire-reports/2019-05-06T12-17-11_762\.dumpstream
+
+target/surefire-reports/com\.nscharrenberg\.kwetter\.domain\.TweetTest\.txt
+
+target/surefire-reports/com\.nscharrenberg\.kwetter\.domain\.UserTest\.txt
+
+target/surefire-reports/com\.nscharrenberg\.kwetter\.integration\.PermissionTest\.txt
+
+target/surefire-reports/com\.nscharrenberg\.kwetter\.service\.PermissionServiceTest\.txt
+
+target/surefire-reports/com\.nscharrenberg\.kwetter\.service\.RoleServiceTest\.txt
+
+target/surefire-reports/com\.nscharrenberg\.kwetter\.service\.TweetServiceTest\.txt
+
+target/surefire-reports/TEST-com\.nscharrenberg\.kwetter\.domain\.TweetTest\.xml
+
+target/surefire-reports/TEST-com\.nscharrenberg\.kwetter\.domain\.UserTest\.xml
+
+target/surefire-reports/TEST-com\.nscharrenberg\.kwetter\.integration\.PermissionTest\.xml
+
+target/surefire-reports/TEST-com\.nscharrenberg\.kwetter\.service\.PermissionServiceTest\.xml
+
+target/surefire-reports/TEST-com\.nscharrenberg\.kwetter\.service\.RoleServiceTest\.xml
+
+target/surefire-reports/TEST-com\.nscharrenberg\.kwetter\.service\.TweetServiceTest\.xml
diff --git a/Kwetter.iml b/Kwetter.iml
index 8efa959..2bd00b2 100644
--- a/Kwetter.iml
+++ b/Kwetter.iml
@@ -41,8 +41,6 @@
{{ address }}
Hi You!
How are you doing?
", "text/html; charset=utf-8"); - - Transport.send(message); - } -} diff --git a/src/main/test/com/nscharrenberg/kwetter/integration/PermissionTest.java b/src/main/test/com/nscharrenberg/kwetter/integration/PermissionTest.java deleted file mode 100644 index 451e550..0000000 --- a/src/main/test/com/nscharrenberg/kwetter/integration/PermissionTest.java +++ /dev/null @@ -1,57 +0,0 @@ -package com.nscharrenberg.kwetter.integration; - -import com.github.tomakehurst.wiremock.client.WireMock; -import static com.github.tomakehurst.wiremock.client.WireMock.aResponse; -import static com.github.tomakehurst.wiremock.client.WireMock.containing; -import static com.github.tomakehurst.wiremock.client.WireMock.post; -import static com.github.tomakehurst.wiremock.client.WireMock.urlEqualTo; -import com.jayway.restassured.RestAssured; -import static com.jayway.restassured.RestAssured.given; -import com.jayway.restassured.http.ContentType; -import com.jayway.restassured.parsing.Parser; -import java.io.File; -import java.net.URL; -import org.hamcrest.Matchers; -import org.jboss.arquillian.container.test.api.Deployment; -import org.jboss.arquillian.junit.Arquillian; -import org.jboss.arquillian.junit.InSequence; -import org.jboss.arquillian.test.api.ArquillianResource; -import org.jboss.shrinkwrap.api.ShrinkWrap; -import org.jboss.shrinkwrap.api.spec.WebArchive; -import org.jboss.shrinkwrap.resolver.api.maven.Maven; -import org.junit.Test; -import org.junit.runner.RunWith; - -@RunWith(Arquillian.class) -public class PermissionTest { - private final WireMock wiremock = new WireMock(8888); - - @Deployment(testable = false) - public static WebArchive createDeployment() { - File[] files = Maven.resolver() - .loadPomFromFile("pom.xml") - .importRuntimeDependencies() - .resolve() - .withTransitivity() - .asFile(); - return ShrinkWrap.create(WebArchive.class) - .addPackages(true, "com.nscharrenberg.kwetter") - .addAsWebInfResource(new File("src/main/resources/META-INF/beans.xml")) - .addAsLibraries(files); - } - - @ArquillianResource - private URL contextPath; - - @Test - @InSequence(1) - public void testGetUsers() { - RestAssured.registerParser("text/plain", Parser.TEXT); - given() - .when() - .get(contextPath.toString() + "api/users") - .then() - .statusCode(200) - .contentType(ContentType.JSON); - } -} diff --git a/src/main/test/com/nscharrenberg/kwetter/selenium/setups/LoginPage.java b/src/main/test/com/nscharrenberg/kwetter/selenium/setups/LoginPage.java new file mode 100644 index 0000000..a5a0b56 --- /dev/null +++ b/src/main/test/com/nscharrenberg/kwetter/selenium/setups/LoginPage.java @@ -0,0 +1,38 @@ +package com.nscharrenberg.kwetter.selenium.setups; + +import org.openqa.selenium.By; +import org.openqa.selenium.WebDriver; +import org.openqa.selenium.WebElement; +import org.openqa.selenium.support.ui.ExpectedConditions; +import org.openqa.selenium.support.ui.WebDriverWait; + +public class LoginPage { + private static final String USERNAME_FIELD = "username"; + private static final String PASSWORD_FIELD = "password"; + private static final String LOGIN_BUTTON_FIELD = "loginBtn"; + private static final int TIMEOUT_SECONDS = 20; + + public String login(WebDriver driver, String username, String password) { + WebDriverWait wait = new WebDriverWait(driver, TIMEOUT_SECONDS); + + // Set Username Field + WebElement usernameElement = wait.until(ExpectedConditions.elementToBeClickable(By.id(USERNAME_FIELD))); + usernameElement.sendKeys(username); + + WebElement passwordElement = wait.until(ExpectedConditions.elementToBeClickable(By.id(PASSWORD_FIELD))); + passwordElement.sendKeys(password); + + WebElement loginButtonElement = wait.until(ExpectedConditions.elementToBeClickable(By.id(LOGIN_BUTTON_FIELD))); + loginButtonElement.click(); + +// WebElement loginPage = wait.until(ExpectedConditions.presenceOfElementLocated(By.id("usernameTag"))); +// wait.until(ExpectedConditions.or( +// ExpectedConditions.presenceOfElementLocated(By.id("usernameTag")), +// ExpectedConditions.presenceOfElementLocated(By.className("alert-danger")) +// )); + + WebElement loginPage =wait.until(ExpectedConditions.presenceOfElementLocated(By.xpath("//*[contains(@id,'usernameTag') or (contains(@class,'alert-danger'))]"))); + + return loginPage.getText(); + } +} diff --git a/src/main/test/com/nscharrenberg/kwetter/selenium/tests/LoginSeleniumTests.java b/src/main/test/com/nscharrenberg/kwetter/selenium/tests/LoginSeleniumTests.java new file mode 100644 index 0000000..6171c5a --- /dev/null +++ b/src/main/test/com/nscharrenberg/kwetter/selenium/tests/LoginSeleniumTests.java @@ -0,0 +1,41 @@ +package com.nscharrenberg.kwetter.selenium.tests; + +import com.nscharrenberg.kwetter.selenium.setups.LoginPage; +import com.nscharrenberg.kwetter.selenium.utils.SeleniumTestBase; +import org.junit.Test; + +import java.io.IOException; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotEquals; + +public class LoginSeleniumTests extends SeleniumTestBase { + private LoginPage loginPage = new LoginPage(); + + @Test + public void login_valid_user() throws IOException { + String loginUrl = WEBSITE_HOST + "auth/login"; + String username = "admin"; + String password = "password123"; + + webDriver.get(loginUrl); + screenshotHelper.saveScreenshot("login_for_success_test_screenshot.png"); + String nextPage = loginPage.login(webDriver, username, password); + screenshotHelper.saveScreenshot("login_success_screenshot.png"); + assertEquals("@" + username, nextPage); + } + + @Test + public void login_invalid_user() throws IOException { + String loginUrl = WEBSITE_HOST + "auth/login"; + String username = "admin123"; + String password = "wrongpassword"; + + webDriver.get(loginUrl); + screenshotHelper.saveScreenshot("login_for_failed_test_screenshot.png"); + String nextPage = loginPage.login(webDriver, username, password); + screenshotHelper.saveScreenshot("login_invalid_screenshot.png"); + assertNotEquals("@" + username, nextPage); + assertEquals("Wrong username or password", nextPage); + } +} diff --git a/src/main/test/com/nscharrenberg/kwetter/selenium/utils/ScreenshotHelper.java b/src/main/test/com/nscharrenberg/kwetter/selenium/utils/ScreenshotHelper.java new file mode 100644 index 0000000..f2abc51 --- /dev/null +++ b/src/main/test/com/nscharrenberg/kwetter/selenium/utils/ScreenshotHelper.java @@ -0,0 +1,23 @@ +package com.nscharrenberg.kwetter.selenium.utils; + +import org.apache.commons.io.FileUtils; +import org.openqa.selenium.OutputType; +import org.openqa.selenium.TakesScreenshot; +import org.openqa.selenium.WebDriver; + +import java.io.File; +import java.io.IOException; + +public class ScreenshotHelper { + private WebDriver webDriver; + + public ScreenshotHelper(WebDriver webDriver) { + super(); + this.webDriver = webDriver; + } + + public void saveScreenshot(String screenshotFileName) throws IOException { + File screenshot = ((TakesScreenshot) webDriver).getScreenshotAs(OutputType.FILE); + FileUtils.copyFile(screenshot, new File("tests_results/" + screenshotFileName)); + } +} diff --git a/src/main/test/com/nscharrenberg/kwetter/selenium/utils/SeleniumTestBase.java b/src/main/test/com/nscharrenberg/kwetter/selenium/utils/SeleniumTestBase.java new file mode 100644 index 0000000..e29ffeb --- /dev/null +++ b/src/main/test/com/nscharrenberg/kwetter/selenium/utils/SeleniumTestBase.java @@ -0,0 +1,40 @@ +package com.nscharrenberg.kwetter.selenium.utils; + +import org.junit.After; +import org.junit.Before; +import org.openqa.selenium.WebDriver; +import org.openqa.selenium.chrome.ChromeDriver; +import org.openqa.selenium.chrome.ChromeOptions; + +import java.io.IOException; + +public class SeleniumTestBase { + protected static final String WEBSITE_HOST = "http://localhost:4200/"; + + protected WebDriver webDriver; + protected ScreenshotHelper screenshotHelper; + + public SeleniumTestBase() { + super(); + } + + @Before + public void setup() { + String projectLocation = System.getProperty("user.dir"); + System.setProperty("webdriver.chrome.driver", projectLocation + "\\selenium\\chromedriver.exe"); + + ChromeOptions options = new ChromeOptions(); + options.addArguments("--incognito"); + + webDriver = new ChromeDriver(options); + screenshotHelper = new ScreenshotHelper(webDriver); + + // Maximize Window + webDriver.manage().window().maximize(); + } + + @After + public void close() throws IOException { + webDriver.close(); + } +} diff --git a/target/kwetter/WEB-INF/web.xml b/target/kwetter/WEB-INF/web.xml index 5e2a871..e85d745 100644 --- a/target/kwetter/WEB-INF/web.xml +++ b/target/kwetter/WEB-INF/web.xml @@ -61,7 +61,6 @@