package io.budgetapp.resource; import io.budgetapp.BudgetApplication; import io.budgetapp.configuration.AppConfiguration; import io.budgetapp.modal.ErrorResponse; import io.budgetapp.model.User; import io.budgetapp.model.form.LoginForm; import io.budgetapp.model.form.SignUpForm; import io.budgetapp.model.form.user.Password; import io.dropwizard.testing.junit.DropwizardAppRule; import org.junit.Assert; import org.junit.ClassRule; import org.junit.Test; import javax.ws.rs.core.Response; import java.util.Arrays; import static org.junit.Assert.*; import static org.hamcrest.CoreMatchers.*; import static org.hamcrest.MatcherAssert.assertThat; /** * */ public class UserResourceIT extends ResourceIT { @ClassRule public static final DropwizardAppRule<AppConfiguration> RULE = new DropwizardAppRule<>(BudgetApplication.class, resourceFilePath("config-test.yml")); @Override protected int getPort() { return RULE.getLocalPort(); } @Test public void shouldAbleCreateUser() { // given SignUpForm signUp = new SignUpForm(); // when signUp.setUsername(randomEmail()); signUp.setPassword(randomAlphabets()); Response response = post(ResourceURL.USER, signUp); // then assertCreated(response); Assert.assertNotNull(response.getLocation()); } @Test public void shouldBeAbleValidateSignUpForm() { // given SignUpForm signUp = new SignUpForm(); // when Response response = post(ResourceURL.USER, signUp); // then assertBadRequest(response); ErrorResponse errorResponse = response.readEntity(ErrorResponse.class); assertTrue(errorResponse.getErrors().keySet().containsAll(Arrays.asList("username", "password"))); } @Test public void shouldAbleChangePassword() { // given Password password = new Password(); password.setOriginal(defaultUser.getPassword()); password.setPassword(randomAlphabets()); password.setConfirm(password.getPassword()); // when put(Resources.CHANGE_PASSWORD, password); LoginForm login = new LoginForm(); login.setUsername(defaultUser.getUsername()); login.setPassword(password.getPassword()); Response authResponse = post(Resources.USER_AUTH, login); // then assertOk(authResponse); Assert.assertNotNull(authResponse.readEntity(User.class).getToken()); } }