/** * 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.jpa; import net.jakubholy.dbunitexpress.EmbeddedDbTesterRule; import org.jboss.aerogear.unifiedpush.api.AndroidVariant; import org.jboss.aerogear.unifiedpush.api.Installation; import org.jboss.aerogear.unifiedpush.api.Variant; import org.jboss.aerogear.unifiedpush.dao.VariantDao; import org.jboss.aerogear.unifiedpush.jpa.dao.impl.JPAInstallationDao; import org.jboss.aerogear.unifiedpush.utils.DaoDeployment; import org.jboss.arquillian.container.test.api.Deployment; import org.jboss.arquillian.junit.Arquillian; import org.jboss.shrinkwrap.api.spec.JavaArchive; import org.junit.After; import org.junit.Before; import org.junit.Rule; import org.junit.Test; import org.junit.runner.RunWith; import javax.inject.Inject; import javax.persistence.EntityManager; import java.util.Arrays; import java.util.List; import static org.assertj.core.api.Assertions.assertThat; @RunWith(Arquillian.class) public class VariantDaoTest { @Inject private EntityManager entityManager; @Inject private VariantDao variantDao; private JPAInstallationDao installationDao; @Deployment public static JavaArchive createDeployment() { return DaoDeployment.createDeployment(); } @Rule public EmbeddedDbTesterRule testDb = new EmbeddedDbTesterRule("Variant.xml"); @Before public void setUp() { entityManager.getTransaction().begin(); } @After public void tearDown() { entityManager.getTransaction().rollback(); } @Test public void findVariantByIdForDeveloper() { assertThat(variantDao.findByVariantID("1")).isNotNull(); assertThat(variantDao.findByVariantID(null)).isNull(); } @Test public void findVariantIDsForDeveloper() { assertThat(variantDao.findVariantIDsForDeveloper("admin")).isNotNull(); assertThat(variantDao.findVariantIDsForDeveloper("admin")).containsOnly("1"); } @Test public void findVariantsByIDs() { //two valid and two invalid variantIDs final List<String> variantIDs = Arrays.asList("1", "2", "foo", "bar"); final List<Variant> variants = variantDao.findAllVariantsByIDs(variantIDs); assertThat(variants).hasSize(2); assertThat(variants).extracting("name").contains("Android Variant", "Something more Android"); } @Test public void updateVariant() { AndroidVariant queriedVariant = (AndroidVariant) variantDao.findByVariantID("1"); final String primaryKey = queriedVariant.getId(); assertThat(queriedVariant).isNotNull(); assertThat(queriedVariant.getGoogleKey()).isEqualTo("KEY"); queriedVariant.setGoogleKey("NEW_KEY"); variantDao.update(queriedVariant); queriedVariant = (AndroidVariant) variantDao.findByVariantID("1"); assertThat(queriedVariant).isNotNull(); assertThat(queriedVariant.getGoogleKey()).isEqualTo("NEW_KEY"); assertThat(queriedVariant.getId()).isEqualTo(primaryKey); } @Test public void updateAndDeleteVariant() { AndroidVariant queriedVariant = (AndroidVariant) variantDao.findByVariantID("1"); final String primaryKey = queriedVariant.getId(); assertThat(queriedVariant).isNotNull(); assertThat(queriedVariant.getGoogleKey()).isEqualTo("KEY"); queriedVariant.setGoogleKey("NEW_KEY"); variantDao.update(queriedVariant); queriedVariant = (AndroidVariant) variantDao.findByVariantID("1"); assertThat(queriedVariant).isNotNull(); assertThat(queriedVariant.getGoogleKey()).isEqualTo("NEW_KEY"); assertThat(queriedVariant.getId()).isEqualTo(primaryKey); variantDao.delete(queriedVariant); assertThat(variantDao.findByVariantID("1")).isNull(); } @Test public void lookupNonExistingVariant() { AndroidVariant variant = (AndroidVariant) variantDao.findByVariantID("NOT-IN-DATABASE"); assertThat(variant).isNull(); } @Test public void variantIDUnmodifiedAfterUpdate() { AndroidVariant queriedVariant = (AndroidVariant) variantDao.findByVariantID("1"); final String primaryKey = queriedVariant.getId(); assertThat(queriedVariant.getVariantID()).isEqualTo("1"); assertThat(queriedVariant).isNotNull(); queriedVariant.setGoogleKey("NEW_KEY"); variantDao.update(queriedVariant); queriedVariant = (AndroidVariant) variantDao.findByVariantID("1"); assertThat(queriedVariant).isNotNull(); assertThat(queriedVariant.getVariantID()).isEqualTo("1"); assertThat(queriedVariant.getId()).isEqualTo(primaryKey); } @Test public void primaryKeyUnmodifiedAfterUpdate() { final String id = "1"; AndroidVariant variant = (AndroidVariant) variantDao.find(id); assertThat(variant.getId()).isEqualTo(id); variant.setGoogleKey("NEW_KEY"); variantDao.update(variant); entityManager.flush(); entityManager.clear(); variant = (AndroidVariant) variantDao.find(id); assertThat(variant.getGoogleKey()).isEqualTo("NEW_KEY"); assertThat(variant.getId()).isEqualTo(id); } @Test public void deleteVariantIncludingInstallations() { AndroidVariant queriedVariant = (AndroidVariant) variantDao.findByVariantID("1"); variantDao.delete(queriedVariant); entityManager.flush(); entityManager.clear(); assertThat(variantDao.findByVariantID("1")).isNull(); // Installation should be gone... assertThat(entityManager.find(Installation.class, "1")).isNull(); } @Test public void shouldDetectThatVariantIdNotExists() { //given String nonExistentVariantId = "321-variantId"; //when final boolean exists = variantDao.existsVariantIDForDeveloper(nonExistentVariantId, "admin"); assertThat(exists).isEqualTo(false); } @Test public void shouldDetectThatVariantIdExists() { assertThat(variantDao.existsVariantIDForDeveloper("1", "admin")).isEqualTo(true); assertThat(variantDao.existsVariantIDForDeveloper("1", "foo")).isEqualTo(false); } @Test public void shouldDetectThatVariantIdExistsForAdmin() { assertThat(variantDao.existsVariantIDForAdmin("1")).isEqualTo(true); assertThat(variantDao.existsVariantIDForDeveloper("2", "foo")).isEqualTo(true); } }