/**
* JBoss, Home of Professional Open Source
* Copyright Red Hat, Inc., and individual contributors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.jboss.aerogear.unifiedpush.service;
import org.apache.openejb.jee.Beans;
import org.apache.openejb.junit.ApplicationComposer;
import org.apache.openejb.mockito.MockitoInjector;
import org.apache.openejb.testing.MockInjector;
import org.apache.openejb.testing.Module;
import org.jboss.aerogear.unifiedpush.api.PushApplication;
import org.jboss.aerogear.unifiedpush.dao.InstallationDao;
import org.jboss.aerogear.unifiedpush.jpa.dao.impl.JPAInstallationDao;
import org.jboss.aerogear.unifiedpush.jpa.dao.impl.JPAPushApplicationDao;
import org.jboss.aerogear.unifiedpush.jpa.dao.impl.JPAPushMessageInformationDao;
import org.jboss.aerogear.unifiedpush.jpa.dao.impl.JPAVariantDao;
import org.jboss.aerogear.unifiedpush.service.impl.PushApplicationServiceImpl;
import org.jboss.aerogear.unifiedpush.service.impl.PushSearchByDeveloperServiceImpl;
import org.jboss.aerogear.unifiedpush.service.impl.PushSearchServiceImpl;
import org.jboss.aerogear.unifiedpush.service.impl.SearchManager;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.keycloak.KeycloakPrincipal;
import org.keycloak.KeycloakSecurityContext;
import org.keycloak.representations.AccessToken;
import org.mockito.Mock;
import javax.inject.Inject;
import javax.servlet.http.HttpServletRequest;
import java.util.UUID;
import static org.assertj.core.api.Assertions.assertThat;
import static org.mockito.Mockito.when;
@RunWith(ApplicationComposer.class)
public class PushApplicationServiceTest extends AbstractBaseServiceTest {
@Inject
private PushApplicationServiceImpl pushApplicationService;
@Inject
private PushSearchByDeveloperServiceImpl searchApplicationService;
@Inject
private SearchManager searchManager;
@Mock
private HttpServletRequest httpServletRequest;
@Mock
private KeycloakSecurityContext context;
@Mock
private KeycloakPrincipal keycloakPrincipal;
@MockInjector
public Class<?> mockitoInjector() {
return MockitoInjector.class;
}
@Before
public void setUp(){
AccessToken token = new AccessToken();
//The current developer will always be the admin in this testing scenario
token.setPreferredUsername("admin");
when(context.getToken()).thenReturn(token);
when(keycloakPrincipal.getKeycloakSecurityContext()).thenReturn(context);
when(httpServletRequest.getUserPrincipal()).thenReturn(keycloakPrincipal);
searchManager.setHttpServletRequest(httpServletRequest);
}
@Module
public Beans getBeans() {
final Beans beans = new Beans();
beans.addManagedClass(JPAVariantDao.class);
beans.addManagedClass(JPAInstallationDao.class);
beans.addManagedClass(JPAPushMessageInformationDao.class);
beans.addManagedClass(PushApplicationServiceImpl.class);
beans.addManagedClass(JPAPushApplicationDao.class);
beans.addManagedClass(PushSearchByDeveloperServiceImpl.class);
beans.addManagedClass(PushSearchServiceImpl.class);
beans.addManagedClass(SearchManager.class);
beans.addManagedClass(InstallationDao.class);
return beans;
}
@Test
public void addPushApplication() {
PushApplication pa = new PushApplication();
pa.setName("EJB Container");
final String uuid = UUID.randomUUID().toString();
pa.setPushApplicationID(uuid);
pushApplicationService.addPushApplication(pa);
PushApplication stored = pushApplicationService.findByPushApplicationID(uuid);
assertThat(stored).isNotNull();
assertThat(stored.getId()).isNotNull();
assertThat(pa.getName()).isEqualTo(stored.getName());
assertThat(pa.getPushApplicationID()).isEqualTo(stored.getPushApplicationID());
}
@Test
public void updatePushApplication() {
PushApplication pa = new PushApplication();
pa.setName("EJB Container");
final String uuid = UUID.randomUUID().toString();
pa.setPushApplicationID(uuid);
pushApplicationService.addPushApplication(pa);
PushApplication stored = pushApplicationService.findByPushApplicationID(uuid);
assertThat(stored).isNotNull();
stored.setName("FOO");
pushApplicationService.updatePushApplication(stored);
stored = pushApplicationService.findByPushApplicationID(uuid);
assertThat("FOO").isEqualTo(stored.getName());
}
@Test
public void findByPushApplicationID() {
PushApplication pa = new PushApplication();
pa.setName("EJB Container");
final String uuid = UUID.randomUUID().toString();
pa.setPushApplicationID(uuid);
pushApplicationService.addPushApplication(pa);
PushApplication stored = pushApplicationService.findByPushApplicationID(uuid);
assertThat(stored).isNotNull();
assertThat(stored.getId()).isNotNull();
assertThat(pa.getName()).isEqualTo(stored.getName());
assertThat(pa.getPushApplicationID()).isEqualTo(stored.getPushApplicationID());
stored = pushApplicationService.findByPushApplicationID("123");
assertThat(stored).isNull();
}
@Test
public void findAllPushApplicationsForDeveloper() {
assertThat(searchApplicationService.findAllPushApplicationsForDeveloper(0, 10).getResultList()).isEmpty();
PushApplication pa = new PushApplication();
pa.setName("EJB Container");
final String uuid = UUID.randomUUID().toString();
pa.setPushApplicationID(uuid);
pa.setDeveloper("admin");
pushApplicationService.addPushApplication(pa);
assertThat(searchApplicationService.findAllPushApplicationsForDeveloper(0, 10).getResultList()).isNotEmpty();
assertThat(searchApplicationService.findAllPushApplicationsForDeveloper(0, 10).getResultList()).hasSize(1);
}
@Test
public void removePushApplication() {
PushApplication pa = new PushApplication();
pa.setName("EJB Container");
final String uuid = UUID.randomUUID().toString();
pa.setPushApplicationID(uuid);
pa.setDeveloper("admin");
pushApplicationService.addPushApplication(pa);
assertThat(searchApplicationService.findAllPushApplicationsForDeveloper(0, 10).getResultList()).isNotEmpty();
assertThat(searchApplicationService.findAllPushApplicationsForDeveloper(0, 10).getResultList()).hasSize(1);
pushApplicationService.removePushApplication(pa);
assertThat(searchApplicationService.findAllPushApplicationsForDeveloper(0, 10).getResultList()).isEmpty();
assertThat(pushApplicationService.findByPushApplicationID(uuid)).isNull();
}
@Test
public void findByPushApplicationIDForDeveloper() {
PushApplication pa = new PushApplication();
pa.setName("EJB Container");
final String uuid = UUID.randomUUID().toString();
pa.setPushApplicationID(uuid);
pa.setDeveloper("admin");
pushApplicationService.addPushApplication(pa);
PushApplication queried = searchApplicationService.findByPushApplicationIDForDeveloper(uuid);
assertThat(queried).isNotNull();
assertThat(uuid).isEqualTo(queried.getPushApplicationID());
assertThat(searchApplicationService.findByPushApplicationIDForDeveloper("123-3421")).isNull();
}
}