/******************************************************************************* * Copyright (c) 2012-2017 Codenvy, S.A. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Codenvy, S.A. - initial API and implementation *******************************************************************************/ package org.eclipse.che.api.user.server; import com.google.common.collect.ImmutableMap; import com.jayway.restassured.response.Response; import org.eclipse.che.api.core.rest.ApiExceptionMapper; import org.eclipse.che.commons.env.EnvironmentContext; import org.eclipse.che.commons.subject.Subject; import org.eclipse.che.commons.subject.SubjectImpl; import org.everrest.assured.EverrestJetty; import org.everrest.core.Filter; import org.everrest.core.GenericContainerRequest; import org.everrest.core.RequestFilter; import org.mockito.Answers; import org.mockito.InjectMocks; import org.mockito.Mock; import org.mockito.testng.MockitoTestNGListener; import org.testng.annotations.Listeners; import org.testng.annotations.Test; import java.util.Map; import static com.jayway.restassured.RestAssured.given; import static java.util.Arrays.asList; import static java.util.Collections.emptyList; import static org.everrest.assured.JettyHttpServer.ADMIN_USER_NAME; import static org.everrest.assured.JettyHttpServer.ADMIN_USER_PASSWORD; import static org.everrest.assured.JettyHttpServer.SECURE_PATH; import static org.mockito.Mockito.verify; import static org.testng.Assert.assertEquals; /** * Tests for {@link PreferencesService}. * * @author Yevhenii Voevodin */ @Listeners({EverrestJetty.class, MockitoTestNGListener.class}) public class PreferencesServiceTest { @SuppressWarnings("unused") private static final ApiExceptionMapper MAPPER = new ApiExceptionMapper(); @SuppressWarnings("unused") private static final EnvironmentFilter FILTER = new EnvironmentFilter(); private static final Subject SUBJECT = new SubjectImpl("user", "user123", "token", false); @Mock(answer = Answers.RETURNS_MOCKS) private PreferenceManager preferenceManager; @InjectMocks private PreferencesService preferencesService; @Test public void shouldFindPreferences() throws Exception { final Response response = given().auth() .basic(ADMIN_USER_NAME, ADMIN_USER_PASSWORD) .when() .get(SECURE_PATH + "/preferences"); assertEquals(response.getStatusCode(), 200); verify(preferenceManager).find(SUBJECT.getUserId()); } @Test public void shouldFindPreferencesAndFilter() throws Exception { final Response response = given().auth() .basic(ADMIN_USER_NAME, ADMIN_USER_PASSWORD) .when() .get(SECURE_PATH + "/preferences?filter=.*github.*"); assertEquals(response.getStatusCode(), 200); verify(preferenceManager).find(SUBJECT.getUserId(), ".*github.*"); } @Test public void shouldSavePreferences() throws Exception { final Map<String, String> preferences = ImmutableMap.of("pref1", "value1", "pref2", "value2", "pref3", "value3"); final Response response = given().auth() .basic(ADMIN_USER_NAME, ADMIN_USER_PASSWORD) .contentType("application/json") .body(preferences) .when() .post(SECURE_PATH + "/preferences"); assertEquals(response.getStatusCode(), 204); verify(preferenceManager).save(SUBJECT.getUserId(), preferences); } @Test public void shouldNotSavePreferencesWhenNothingSent() throws Exception { final Response response = given().auth() .basic(ADMIN_USER_NAME, ADMIN_USER_PASSWORD) .contentType("application/json") .when() .post(SECURE_PATH + "/preferences"); assertEquals(response.getStatusCode(), 400); } @Test public void shouldUpdatePreferences() throws Exception { final Map<String, String> preferences = ImmutableMap.of("pref1", "value1", "pref2", "value2", "pref3", "value3"); final Response response = given().auth() .basic(ADMIN_USER_NAME, ADMIN_USER_PASSWORD) .contentType("application/json") .body(preferences) .when() .put(SECURE_PATH + "/preferences"); assertEquals(response.getStatusCode(), 200); verify(preferenceManager).update(SUBJECT.getUserId(), preferences); } @Test public void shouldNotUpdatePreferencesWhenNothingSent() throws Exception { final Response response = given().auth() .basic(ADMIN_USER_NAME, ADMIN_USER_PASSWORD) .contentType("application/json") .when() .put(SECURE_PATH + "/preferences"); assertEquals(response.getStatusCode(), 400); } @Test public void shouldRemoveSpecifiedPreferences() throws Exception { final Response response = given().auth() .basic(ADMIN_USER_NAME, ADMIN_USER_PASSWORD) .contentType("application/json") .body(asList("pref1", "pref2")) .when() .delete(SECURE_PATH + "/preferences"); assertEquals(response.getStatusCode(), 204); verify(preferenceManager).remove(SUBJECT.getUserId(), asList("pref1", "pref2")); } @Test public void shouldRemoveAllPreferencesIfNothingSent() throws Exception { final Response response = given().auth() .basic(ADMIN_USER_NAME, ADMIN_USER_PASSWORD) .contentType("application/json") .when() .delete(SECURE_PATH + "/preferences"); assertEquals(response.getStatusCode(), 204); verify(preferenceManager).remove(SUBJECT.getUserId()); } @Filter public static class EnvironmentFilter implements RequestFilter { public void doFilter(GenericContainerRequest request) { EnvironmentContext.getCurrent().setSubject(SUBJECT); } } }