package br.com.caelum.vraptor.musicjungle.acceptance;
import static br.com.caelum.vraptor.musicjungle.enums.MusicType.ROCK;
import static org.hamcrest.Matchers.containsString;
import static org.junit.Assert.assertThat;
import org.junit.Before;
import org.junit.Test;
import br.com.caelum.vraptor.musicjungle.acceptance.builder.MusicBuilder;
import br.com.caelum.vraptor.musicjungle.acceptance.infra.AcceptanceTestCase;
import br.com.caelum.vraptor.musicjungle.acceptance.pages.LoginPage;
import br.com.caelum.vraptor.musicjungle.acceptance.pages.PageObject;
import br.com.caelum.vraptor.musicjungle.acceptance.pages.SearchPage;
import br.com.caelum.vraptor.musicjungle.model.Music;
/**
* Some tests for vraptor {@code routes} of a {@code RESTFUL} resource,
* such as post, get, path, defaul url values, param injection and so on.
*
* @author Rodrigo Turini
*/
public class RoutesTest extends AcceptanceTestCase {
private LoginPage loginPage;
private Music music;
private String userName = "vraptor";
@Before
public void setUp() {
this.loginPage = loginPage();
loginPage.loginAsUser(userName);
this.music = new MusicBuilder(3, "Please Please Me", "Beatles", ROCK).create();
homePage().addMusic(music);
loginPage.logout();
}
@Test
public void shouldHandleAllRoutesTypes() throws Exception {
// @Post testing default route /home/login
shouldAccessPostMethodWithDefaultURLValue();
// @Get(/musics/search)
shouldAccessGetMethodWithADefinedValue();
// @Path(/musics/{music.id}) @Get()
shouldAccessPathPlusGetMethodWithURLParameter();
}
private void shouldAccessPathPlusGetMethodWithURLParameter() {
PageObject musicPage = homePage().clickOnFirstMusic();
assertPageContains(musicPage, music.getTitle(), "Owners:", userName);
}
private void shouldAccessGetMethodWithADefinedValue() {
loginPage.loginAsUser(userName);
String musicTitle = music.getTitle();
SearchPage searchPage = homePage().searchFor(musicTitle);
assertPageContains(searchPage, musicTitle);
}
private void shouldAccessPostMethodWithDefaultURLValue() {
assertPageContains(loginPage, "VRaptor Music Jungle", "Sign in");
}
private void assertPageContains(PageObject page, String ...args) {
String pageSource = page.pageSource();
for (String expectedText : args) {
assertThat(pageSource, containsString(expectedText));
}
}
}