com.alehuo.wepas2016projekti.test.UiTest.java Source code

Java tutorial

Introduction

Here is the source code for com.alehuo.wepas2016projekti.test.UiTest.java

Source

/*
 * Copyright (C) 2016 Pivotal Software, Inc.
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */
package com.alehuo.wepas2016projekti.test;

import com.alehuo.wepas2016projekti.CustomHtmlUnitDriver;
import com.alehuo.wepas2016projekti.domain.Image;
import com.alehuo.wepas2016projekti.domain.UserAccount;
import com.alehuo.wepas2016projekti.service.ImageService;
import com.alehuo.wepas2016projekti.service.InitService;
import com.alehuo.wepas2016projekti.service.UserService;
import com.gargoylesoftware.htmlunit.BrowserVersion;
import java.util.List;
import java.util.UUID;
import org.fluentlenium.adapter.FluentTest;
import org.jsoup.Jsoup;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.openqa.selenium.By;
import org.openqa.selenium.JavascriptExecutor;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.context.embedded.LocalServerPort;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
import org.springframework.test.web.servlet.MockMvc;
import org.springframework.test.web.servlet.MvcResult;
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*;
import org.springframework.test.web.servlet.setup.MockMvcBuilders;
import org.springframework.web.context.WebApplicationContext;

/**
 *
 * @author alehuo
 */
@RunWith(SpringRunner.class)
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
public class UiTest extends FluentTest {

    /**
     *
     */
    public WebDriver webDriver = new CustomHtmlUnitDriver(BrowserVersion.getDefault(), true);

    @Autowired
    private ImageService imageService;

    @Autowired
    private UserService userService;

    @Autowired
    private InitService initService;

    @Autowired
    private WebApplicationContext webAppContext;

    private MockMvc mockMvc;

    @LocalServerPort
    private Integer port;

    /**
     *
     * @return
     */
    @Override
    public WebDriver getDefaultDriver() {
        return webDriver;
    }

    /**
     *
     */
    @Before
    public void setUp() {
        this.mockMvc = MockMvcBuilders.webAppContextSetup(webAppContext).build();
        initService.resetApplicationState();
    }

    /**
     *
     * @throws Exception
     */
    @Test
    public void kirjautuminenSisaanJaUlosToimii() throws Exception {

        goTo("http://localhost:" + port);

        assertTrue("\nError: ei lydy 'Kirjaudu sisn' -teksti\n" + pageSource() + "\n",
                pageSource().contains("Kirjaudu sisn"));

        //Nuku vhn aikaa
        Thread.sleep(800);

        //        fill(find("#username")).with("admin");
        //        fill(find("#password")).with("admin");
        webDriver.findElement(By.id("username")).sendKeys("admin");
        webDriver.findElement(By.id("password")).sendKeys("admin");

        System.out.println("USERNAME VALUE: " + find("#username").getValue());
        System.out.println("PASSWORD VALUE: " + find("#password").getValue());

        submit(find("#loginForm"));

        //Nuku vhn aikaa
        Thread.sleep(500);

        assertFalse("Sovellus ei kirjaudu sisn / ohjaa oikein etusivulle",
                webDriver.getCurrentUrl().contains("/login"));

        assertTrue("\nError: ei lydy 'syte' -teksti" + "\n" + pageSource() + "\n",
                pageSource().contains("Syte"));

        webDriver.findElement(By.id("logout")).click();

        assertTrue("\nError: ei lydy 'Kirjaudu sisn' -teksti\n" + pageSource() + "\n",
                pageSource().contains("Kirjaudu sisn"));

        fill(find("#username")).with("vaaratunnus");
        fill(find("#password")).with("vaaratunnus");
        submit(find("form").first());

        assertTrue("\nError: ei lydy 'Kirjaudu sisn' -teksti\n" + pageSource() + "\n",
                pageSource().contains("Kirjaudu sisn"));
    }

    /**
     *
     * @throws Exception
     */
    @Test
    public void rekisteroityminenToimii() throws Exception {
        goTo("http://localhost:" + port);

        webDriver.findElement(By.name("register")).click();

        assertTrue("\nError: ei lydy 'Rekisteridy' -teksti\n" + pageSource() + "\n",
                pageSource().contains("Rekisteridy"));

        fill(find("#username")).with("matti");
        fill(find("#password")).with("meikalainen");
        fill(find("#email")).with("matti.meikalainen@localhost.fi");
        submit(find("#registerForm"));

        Thread.sleep(500);

        assertTrue("\nError: ei lydy 'Kirjaudu sisn' -teksti\n" + pageSource() + "\n",
                pageSource().contains("Kirjaudu sisn"));

        webDriver.findElement(By.name("register")).click();

        assertTrue("\nError: ei lydy 'Rekisteridy' -teksti\n" + pageSource() + "\n",
                pageSource().contains("Rekisteridy"));

        fill(find("#username")).with("admin");
        fill(find("#password")).with("meikalainen");
        fill(find("#email")).with("matti.meikalainen@localhost.fi");
        submit(find("#registerForm"));

        Thread.sleep(500);

        assertTrue(
                "\nError: ei lydy 'Kyttjtunnus on joko varattu tai virheellisen kokoinen, sen on oltava 4-25 merkki pitk.' -teksti\n"
                        + pageSource() + "\n",
                pageSource().contains(
                        "Kyttjtunnus on joko varattu tai virheellisen kokoinen, sen on oltava 4-25 merkki pitk."));

        goTo("http://localhost:" + port);

        fill(find("#username")).with("matti");
        fill(find("#password")).with("meikalainen");
        submit(find("#loginForm"));

        Thread.sleep(500);

        assertTrue("\nError: ei lydy 'Syte' -teksti\n" + pageSource() + "\n",
                pageSource().contains("Syte"));

    }

    /**
     *
     * @throws Exception
     */
    @Test
    public void profiiliSivunSelaaminenToimii1() throws Exception {

        //Varmistetaan ett profiilia ei pse selaamaan ilman ett on kirjautunut sisn
        goTo("http://localhost:" + port + "/profile/user");

        assertTrue(pageSource().contains("Kirjaudu sisn"));

        //Aiempi testi testaa jo siirtymisen kirjautumissivulle
        goTo("http://localhost:" + port);

        assertTrue(pageSource().contains("Kirjaudu sisn"));

        fill(find("#username")).with("admin");
        fill(find("#password")).with("admin");
        submit(find("#loginForm"));

        //Nuku vhn aikaa
        Thread.sleep(500);
        //        System.out.println("\n\n\n\n\n\n\n\n" + pageSource() + "\n\n\n\n\n\n\n\n");
        assertTrue(pageSource().contains("Syte"));

        goTo("http://localhost:" + port + "/profile/user");

        String parsedPageSource = Jsoup.parse(pageSource()).text();
        assertTrue(parsedPageSource.contains("Kyttjn user jakamat kuvat"));

        goTo("http://localhost:" + port + "/profile/user2");
        assertTrue(pageSource().contains("Profiilia ei lydy"));

        webDriver.findElement(By.id("profiili")).click();
        parsedPageSource = Jsoup.parse(pageSource()).text();
        assertTrue(parsedPageSource.contains("Kyttjn admin jakamat kuvat"));
    }

    /**
     *
     * @throws Exception
     */
    @Test
    public void hakuToimii() throws Exception {
        goTo("http://localhost:" + port);

        fill(find("#username")).with("admin");
        fill(find("#password")).with("admin");
        submit(find("#loginForm"));

        webDriver.findElement(By.id("haku")).click();
        assertTrue("\nError: ei lydy 'Hae kyttji' -teksti \n" + pageSource() + "\n",
                pageSource().contains("Hae kyttji"));

        fill(find("#username")).with("user");
        submit(find("#searchForm"));
        //        System.out.println(pageSource());
        assertTrue("\nError: ei lydy 'href=\"/profile/user\"' -teksti \n" + pageSource() + "\n",
                pageSource().contains("href=\"/profile/user\""));

        fill(find("#username")).with("eiuser");
        submit(find("#searchForm"));

        assertFalse("\nError: lytyy 'href=\"/profile/user\"' -teksti \n" + pageSource() + "\n",
                pageSource().contains("href=\"/profile/user\""));
    }

    /**
     *
     */
    @Test
    public void uudenKuvanJakaminenToimii() {

        goTo("http://localhost:" + port);

        assertTrue("\nError: ei lydy 'Kirjaudu sisn' -teksti\n" + pageSource() + "\n",
                pageSource().contains("Kirjaudu sisn"));

        //admin -tunnuksilla sisn
        fill(find("#username")).with("admin");
        fill(find("#password")).with("admin");
        //        webDriver.findElement(By.id("username")).sendKeys("admin");
        //        webDriver.findElement(By.id("password")).sendKeys("admin");

        System.out.println("USERNAME VALUE: " + find("#username").getValue());
        System.out.println("PASSWORD VALUE: " + find("#password").getValue());

        //Lhet lomake
        submit(find("#loginForm"));

        //Nyt ollaan etusivulla
        System.out.println("\n\n\n\n\n\n\n\n" + pageSource() + "\n\n\n\n\n\n\n\n");
        assertTrue("\nError: ei lydy 'Syte' -teksti \n" + pageSource() + "\n",
                pageSource().contains("Syte"));

        //Klikkaa "plus" -nappia
        click(find("#uploadBtn").first());

        //Nyt ollaan Upload -sivulla
        assertTrue("\nError: ei lydy 'Jaa kuva' -teksti \n" + pageSource() + "\n",
                pageSource().contains("Jaa kuva"));

        //Lis kuvaus
        String description = UUID.randomUUID().toString().substring(0, 8);
        fill(find("#imageDesc")).with(description);

        //Kuvatiedosto
        WebElement upload = webDriver.findElement(By.id("imgUploadInput"));

        upload.sendKeys("testi.jpg");

        //Klikkaa submit
        webDriver.findElement(By.id("uploadSubmitBtn")).click();

        //Nyt ollaan etusivulla, tarkistetaan ett kuva listtiin onnistuneesti
        assertTrue("\nError: ei lydy ladatun kuvan kuvausta \n" + pageSource() + "\n",
                pageSource().contains(description));

        assertEquals("\nError: kuvia ei ole listassa kuusi \n" + pageSource() + "\n", 6,
                imageService.findAllImages().size());
    }

    /**
     *
     * @throws InterruptedException
     */
    @Test
    public void kuvanTykkaaminenJaKommentointiToimii() throws InterruptedException {

        //Etusivu
        goTo("http://localhost:" + port);

        assertTrue("\nError: ei lydy 'Kirjaudu sisn' -teksti\n" + pageSource() + "\n",
                pageSource().contains("Kirjaudu sisn"));

        //admin -tunnuksilla sisn
        fill(find("#username")).with("admin");
        fill(find("#password")).with("admin");
        //Lhet lomake
        submit(find("#loginForm"));

        //Nuku vhn aikaa
        Thread.sleep(500);

        //Nyt ollaan etusivulla
        assertTrue("\nError: ei lydy 'Syte' teksti\n" + pageSource() + "\n", pageSource().contains("Syte"));

        //Hae kyttjtili ja sen kuvat
        UserAccount u = userService.getUserByUsername("admin");
        List<Image> images = imageService.findAllByUserAccount(u);

        //        System.out.println(images.size());
        assertTrue("\nError: kuvia ei ole listassa tarpeeksi\n", images.size() == 5);

        //Suorita JavaScript -funktio jolla tyktn kuvasta
        ((JavascriptExecutor) webDriver).executeScript("likeImage('" + images.get(0).getUuid() + "')");

        //Nuku vhn aikaa
        Thread.sleep(500);

        //Pivit sivu varmuuden vuoksi (Tykkyksen tulisi sily pivityksen yli)
        webDriver.navigate().refresh();

        //Nyt ollaan etusivulla, tarkistetaan ett tykkys rekisterityi onnistuneesti
        //Kytetn Jsoup -kirjastoa jotta saadaan pelkk teksti sivulta.
        String parsedPageSource = Jsoup.parse(pageSource()).text();
        assertTrue("\nError: kuvalle ei listty tykkyst\n" + pageSource() + "\n",
                parsedPageSource.contains("1 tykkyst"));

        //Suorita JavaScript -funktio jolla tyktn kuvasta
        ((JavascriptExecutor) webDriver).executeScript("likeImage('" + images.get(0).getUuid() + "')");

        //Nuku vhn aikaa
        Thread.sleep(500);

        //Pivit sivu varmuuden vuoksi (Tykkyksen tulisi sily pivityksen yli)
        webDriver.navigate().refresh();

        //Nyt ollaan etusivulla, tarkistetaan ett tykkys rekisterityi onnistuneesti
        //Kytetn Jsoup -kirjastoa jotta saadaan pelkk teksti sivulta.
        parsedPageSource = Jsoup.parse(pageSource()).text();
        assertTrue("\nError: kuvalle ei listty tykkyst\n" + pageSource() + "\n",
                parsedPageSource.contains("0 tykkyst"));

        for (int i = 1; i < 6; i++) {

            //Suorita JavaScript -funktio jolla avataan kommentointi-ikkuna
            ((JavascriptExecutor) webDriver).executeScript("createCommentModal('" + images.get(0).getUuid() + "')");

            //Nuku vhn aikaa
            Thread.sleep(500);

            ((JavascriptExecutor) webDriver)
                    .executeScript("$('#commentModal_" + images.get(0).getUuid() + "').modal('open');");

            //Nuku vhn aikaa
            Thread.sleep(500);

            //Etsi textarea
            assertTrue(
                    "\nError: Ei lydetty commentModalTextarea_" + images.get(0).getUuid() + "\n" + pageSource()
                            + "\n",
                    webDriver.findElement(By.id("commentModalTextarea_" + images.get(0).getUuid())).isDisplayed());

            //Kirjoita teksti
            webDriver.findElement(By.id("commentModalTextarea_" + images.get(0).getUuid()))
                    .sendKeys("HelloWorldTestiKommentti");

            //Lhet kommentti
            webDriver.findElement(By.id("commentModalSubmitBtn_" + images.get(0).getUuid())).click();

            Thread.sleep(500);
            webDriver.navigate().refresh();

            assertTrue("\nError: Ei lydetty 'HelloWorldTestiKommentti' -teksti\n" + pageSource() + "\n",
                    pageSource().contains("HelloWorldTestiKommentti"));

            parsedPageSource = Jsoup.parse(pageSource()).text();

            assertTrue("\nError: kuvalle ei listty kommenttia\n" + pageSource() + "\n",
                    parsedPageSource.contains(i + " kommenttia"));

        }
        Image i = imageService.findOneImageByUuid(images.get(0).getUuid());

        assertEquals("\nError: Kommentteja ei ole tasan viitt\n" + pageSource() + "\n", 5,
                i.getComments().size());
        assertEquals("\nError: kommenttia ei lytynyt sivulta\n" + pageSource() + "\n", "HelloWorldTestiKommentti",
                i.getComments().get(0).getBody());

    }

    /**
     *
     * @throws Exception
     */
    @Test
    public void kuvanHakuToimii() throws Exception {

        //Etusivu
        goTo("http://localhost:" + port);

        assertTrue("\nError: ei lydy 'Kirjaudu sisn' -teksti\n" + pageSource() + "\n",
                pageSource().contains("Kirjaudu sisn"));

        //admin -tunnuksilla sisn
        fill(find("#username")).with("admin");
        fill(find("#password")).with("admin");
        //Lhet lomake
        submit(find("#loginForm"));

        //Nuku vhn aikaa
        Thread.sleep(500);

        //Nyt ollaan etusivulla
        assertTrue("\nError: ei lydy 'Syte' teksti\n" + pageSource() + "\n", pageSource().contains("Syte"));

        List<Image> kuvat = imageService.findAllImages();

        for (Image image : kuvat) {
            assertEquals("ImageServicest ei lydy kuvaa sen Id'n perusteella", image,
                    imageService.findOneImageById(image.getId()));
            String imageUuid = image.getUuid();
            MvcResult res = mockMvc.perform(get("/img/" + imageUuid)).andReturn();
            assertEquals("Kuvan tyyppi on vr: " + res.getResponse().getHeader("Content-Type"),
                    image.getContentType(), res.getResponse().getHeader("Content-Type"));
            assertEquals("Kuvan koko on vr: " + res.getResponse().getHeader("Content-Length"),
                    image.getImageData().length, Integer.parseInt(res.getResponse().getHeader("Content-Length")));
            assertEquals("Kuvan ETag on vr: " + res.getResponse().getHeader("ETag"), "\"" + imageUuid + "\"",
                    res.getResponse().getHeader("ETag"));
        }

        //Poistetaan kaikki palvelun kuvat
        imageService.deleteAllImages();
        kuvat = imageService.findAllImages();
        assertEquals("Kuvia on viel jljell poiston jlkeen", kuvat.size(), 0);
    }

}
// mm. mockMvc:n get- ja post-metodit