package io.robe.admin.resources; import com.google.common.hash.Hashing; import io.robe.admin.RobeAdminTest; import io.robe.admin.hibernate.entity.User; import io.robe.admin.util.Authenticator; import io.robe.test.Order; import io.robe.test.Roadrunner; import io.robe.test.request.HttpClient; import io.robe.test.request.TestRequest; import io.robe.test.request.TestResponse; import org.junit.AfterClass; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import java.nio.charset.StandardCharsets; import java.util.HashMap; import java.util.Map; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; /** * Created by adem on 07/10/2016. */ @RunWith(Roadrunner.class) public class AuthenticationResourceTest extends RobeAdminTest { private final HttpClient client = HttpClient.getClient(); private final TestRequest.Builder requestBuilder = new TestRequest.Builder("http://127.0.0.1:8686/robe/authentication"); private final String tokenHeaderName = "auth-token"; private static String TOKEN; private static final String USERNAME = "admin@robe.io"; private static String PASSWORD = Hashing.sha256().hashString("123123", StandardCharsets.UTF_8).toString(); @Before public void checkIfAuthTokenPresent() throws Exception { if (TOKEN == null) { login(); } } @Test @Order public void login() throws Exception { Map<String, String> credentials = new HashMap<>(); credentials.put("username", USERNAME); credentials.put("password", PASSWORD); TestRequest request = requestBuilder.entity(credentials).endpoint("login").build(); TestResponse response = client.post(request); assertEquals(200, response.getStatus()); assertNotNull(response.getCookie(tokenHeaderName)); TOKEN = response.getCookie(tokenHeaderName); } @Test @Order(order = 2) public void getProfile() throws Exception { TestRequest request = requestBuilder.endpoint("profile").header(tokenHeaderName, "").build(); TestResponse response = client.get(request); assertEquals(200, response.getStatus()); User user = response.get(User.class); assertNotNull(user); assertEquals(USERNAME, user.getEmail()); assertEquals(PASSWORD, user.getPassword()); } @Test @Order(order = 3) public void changePassword() throws Exception { String newPassword = Hashing.sha256().hashString("321321", StandardCharsets.UTF_8).toString(); Map<String, String> passwords = new HashMap<>(); passwords.put("password", PASSWORD); passwords.put("newPassword", newPassword); passwords.put("newPasswordRepeat", newPassword); TestRequest request = requestBuilder.endpoint("password").entity(passwords).header(tokenHeaderName, TOKEN).build(); TestResponse response = client.post(request); assertEquals(200, response.getStatus()); } @Test @Order(order = 4) public void logout() throws Exception { TestRequest request = requestBuilder.endpoint("logout").header(tokenHeaderName, TOKEN).build(); TestResponse response = client.post(request); assertEquals(200, response.getStatus()); assertEquals("", response.getCookie("auth-token")); } @AfterClass public static void loginAgain() throws Exception { Authenticator.login(USERNAME, "321321"); } }