From 1498a0489e05316058909174752ead14bd527f6b Mon Sep 17 00:00:00 2001 From: Santi Date: Thu, 7 Mar 2019 00:45:24 +0100 Subject: [PATCH] Pet resource test started Added test to get method --- .../uvigo/esei/daa/dataset/PetsDataset.java | 32 ++++++ .../uvigo/esei/daa/matchers/IsEqualToPet.java | 57 +++++++++++ .../uvigo/esei/daa/rest/PetsResourceTest.java | 98 +++++++++++++++++++ .../esei/daa/rest/PetsResourceUnitTest.java | 55 +++++++++++ .../esei/daa/suites/IntegrationTestSuite.java | 4 +- 5 files changed, 245 insertions(+), 1 deletion(-) create mode 100644 src/test/java/es/uvigo/esei/daa/dataset/PetsDataset.java create mode 100644 src/test/java/es/uvigo/esei/daa/matchers/IsEqualToPet.java create mode 100644 src/test/java/es/uvigo/esei/daa/rest/PetsResourceTest.java create mode 100644 src/test/java/es/uvigo/esei/daa/rest/PetsResourceUnitTest.java diff --git a/src/test/java/es/uvigo/esei/daa/dataset/PetsDataset.java b/src/test/java/es/uvigo/esei/daa/dataset/PetsDataset.java new file mode 100644 index 0000000..0a91744 --- /dev/null +++ b/src/test/java/es/uvigo/esei/daa/dataset/PetsDataset.java @@ -0,0 +1,32 @@ +package es.uvigo.esei.daa.dataset; + +import es.uvigo.esei.daa.entities.Pet; + +import static java.util.Arrays.stream; + +public final class PetsDataset { + private PetsDataset() {} + + public static Pet[] pets() { + return new Pet[] { + new Pet(1, 1, "Tom"), + new Pet(2, 1, "Jerry") + }; + } + + + public static Pet pet(int id) { + return stream(pets()) + .filter(p -> p.getId() == id) + .findAny() + .orElseThrow(IllegalArgumentException::new); + } + public static int existentId() { + return 1; + } + + public static Pet existentPet() { + return pet(existentId()); + } + +} diff --git a/src/test/java/es/uvigo/esei/daa/matchers/IsEqualToPet.java b/src/test/java/es/uvigo/esei/daa/matchers/IsEqualToPet.java new file mode 100644 index 0000000..1ff3cf4 --- /dev/null +++ b/src/test/java/es/uvigo/esei/daa/matchers/IsEqualToPet.java @@ -0,0 +1,57 @@ +package es.uvigo.esei.daa.matchers; + +import es.uvigo.esei.daa.entities.Person; +import es.uvigo.esei.daa.entities.Pet; +import org.hamcrest.Factory; +import org.hamcrest.Matcher; + +public class IsEqualToPet extends IsEqualToEntity { + public IsEqualToPet(Pet entity) { + super(entity); + } + + @Override + protected boolean matchesSafely(Pet actual) { + this.clearDescribeTo(); + + if (actual == null) { + this.addTemplatedDescription("actual", expected.toString()); + return false; + } else { + return checkAttribute("id", Pet::getId, actual) + && checkAttribute("name", Pet::getName, actual) + && checkAttribute("owner", Pet::getOwner, actual); + } + } + + /** + * Factory method that creates a new {@link IsEqualToEntity} matcher with + * the provided {@link Person} as the expected value. + * + * @param pet the expected pet. + * @return a new {@link IsEqualToEntity} matcher with the provided + * {@link Person} as the expected value. + */ + + @Factory + public static IsEqualToPet equalsToPet(Pet pet) { + return new IsEqualToPet(pet); + } + + /** + * Factory method that returns a new {@link Matcher} that includes several + * {@link IsEqualToPet} matchers, each one using an {@link Person} of the + * provided ones as the expected value. + * + * @param pets the pets to be used as the expected values. + * @return a new {@link Matcher} that includes several + * {@link IsEqualToPet} matchers, each one using an {@link Person} of the + * provided ones as the expected value. + * @see IsEqualToEntity#containsEntityInAnyOrder(java.util.function.Function, Object...) + */ + @Factory + public static Matcher> containsPetsInAnyOrder(Pet ... pets) { + return containsEntityInAnyOrder(IsEqualToPet::equalsToPet, pets); + } + +} diff --git a/src/test/java/es/uvigo/esei/daa/rest/PetsResourceTest.java b/src/test/java/es/uvigo/esei/daa/rest/PetsResourceTest.java new file mode 100644 index 0000000..f5ec5a6 --- /dev/null +++ b/src/test/java/es/uvigo/esei/daa/rest/PetsResourceTest.java @@ -0,0 +1,98 @@ +package es.uvigo.esei.daa.rest; + +import com.fasterxml.jackson.jaxrs.json.JacksonJsonProvider; +import com.github.springtestdbunit.DbUnitTestExecutionListener; +import com.github.springtestdbunit.annotation.DatabaseSetup; +import com.github.springtestdbunit.annotation.ExpectedDatabase; +import es.uvigo.esei.daa.DAAExampleApplication; +import es.uvigo.esei.daa.entities.Pet; +import es.uvigo.esei.daa.listeners.ApplicationContextBinding; +import es.uvigo.esei.daa.listeners.ApplicationContextJndiBindingTestExecutionListener; +import es.uvigo.esei.daa.listeners.DbManagement; +import es.uvigo.esei.daa.listeners.DbManagementTestExecutionListener; +import org.glassfish.jersey.client.ClientConfig; +import org.glassfish.jersey.test.JerseyTest; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.TestExecutionListeners; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; + +import javax.sql.DataSource; +import javax.ws.rs.core.Application; +import javax.ws.rs.core.GenericType; +import javax.ws.rs.core.Response; +import java.io.IOException; +import java.util.List; + +import static es.uvigo.esei.daa.dataset.PetsDataset.*; +import static es.uvigo.esei.daa.dataset.UsersDataset.adminLogin; +import static es.uvigo.esei.daa.dataset.UsersDataset.userToken; +import static es.uvigo.esei.daa.matchers.HasHttpStatus.hasOkStatus; +import static es.uvigo.esei.daa.matchers.IsEqualToPet.containsPetsInAnyOrder; +import static es.uvigo.esei.daa.matchers.IsEqualToPet.equalsToPet; +import static org.hamcrest.CoreMatchers.is; +import static org.junit.Assert.assertThat; + +@RunWith(SpringJUnit4ClassRunner.class) +@ContextConfiguration("classpath:contexts/mem-context.xml") +@TestExecutionListeners({ + DbUnitTestExecutionListener.class, + DbManagementTestExecutionListener.class, + ApplicationContextJndiBindingTestExecutionListener.class +}) +@ApplicationContextBinding( + jndiUrl = "java:/comp/env/jdbc/daaexample", + type = DataSource.class +) +@DbManagement( + create = "classpath:db/hsqldb.sql", + drop = "classpath:db/hsqldb-drop.sql" +) + +@DatabaseSetup("/datasets/dataset.xml") // Puede variar +@ExpectedDatabase("/datasets/dataset.xml") // Puede variar +public class PetsResourceTest extends JerseyTest { + + + @Override + protected Application configure() { + return new DAAExampleApplication(); + } + + @Override + protected void configureClient(ClientConfig config) { + super.configureClient(config); + + // Enables JSON transformation in client + config.register(JacksonJsonProvider.class); + config.property("com.sun.jersey.api.json.POJOMappingFeature", Boolean.TRUE); + } + + //@Test + public void testList() throws IOException { + final Response response = target("pets").request() + .header("Authorization", "Basic " + userToken(adminLogin())) + .get(); + assertThat(response, hasOkStatus()); + + final List pets = response.readEntity(new GenericType>(){}); + + assertThat(pets, containsPetsInAnyOrder(pets())); + } + + + @Test + public void testGet() throws IOException { + final Response response = target("pets/" + existentId()).request() + .header("Authorization", "Basic " + userToken(adminLogin())) + .get(); + assertThat(response, hasOkStatus()); + + final Pet pet = response.readEntity(Pet.class); + + assertThat(pet, is(equalsToPet(existentPet()))); + } + + +} diff --git a/src/test/java/es/uvigo/esei/daa/rest/PetsResourceUnitTest.java b/src/test/java/es/uvigo/esei/daa/rest/PetsResourceUnitTest.java new file mode 100644 index 0000000..1aeda56 --- /dev/null +++ b/src/test/java/es/uvigo/esei/daa/rest/PetsResourceUnitTest.java @@ -0,0 +1,55 @@ +package es.uvigo.esei.daa.rest; + +import es.uvigo.esei.daa.dao.PetsDAO; +import es.uvigo.esei.daa.entities.Pet; +import org.junit.After; +import org.junit.Before; +import org.junit.Test; + +import javax.ws.rs.core.Response; + +import static es.uvigo.esei.daa.dataset.PetsDataset.existentPet; +import static es.uvigo.esei.daa.matchers.HasHttpStatus.hasOkStatus; +import static es.uvigo.esei.daa.matchers.IsEqualToPet.equalsToPet; +import static org.easymock.EasyMock.*; +import static org.hamcrest.Matchers.is; +import static org.junit.Assert.assertThat; + +public class PetsResourceUnitTest { + private PetsDAO daoMock; + private PetsResource resource; + + + @Before + public void setUp() throws Exception { + daoMock = createMock(PetsDAO.class); + resource = new PetsResource(daoMock); + } + + @After + public void tearDown() throws Exception { + try { + verify(daoMock); + } finally { + daoMock = null; + resource = null; + } + } + + + @Test + public void testGet() throws Exception { + final Pet pet = existentPet(); + + expect(daoMock.get(pet.getId())).andReturn(pet); + + replay(daoMock); + + final Response response = resource.get(pet.getId()); + + assertThat(response, hasOkStatus()); + assertThat((Pet) response.getEntity(), is(equalsToPet(pet))); + } + + +} diff --git a/src/test/java/es/uvigo/esei/daa/suites/IntegrationTestSuite.java b/src/test/java/es/uvigo/esei/daa/suites/IntegrationTestSuite.java index 822c83f..358f7f8 100644 --- a/src/test/java/es/uvigo/esei/daa/suites/IntegrationTestSuite.java +++ b/src/test/java/es/uvigo/esei/daa/suites/IntegrationTestSuite.java @@ -1,5 +1,6 @@ package es.uvigo.esei.daa.suites; +import es.uvigo.esei.daa.rest.PetsResourceUnitTest; import org.junit.runner.RunWith; import org.junit.runners.Suite; import org.junit.runners.Suite.SuiteClasses; @@ -11,7 +12,8 @@ import es.uvigo.esei.daa.rest.UsersResourceTest; @SuiteClasses({ PeopleDAOTest.class, PeopleResourceTest.class, - UsersResourceTest.class + UsersResourceTest.class, + PetsResourceUnitTest.class }) @RunWith(Suite.class) public class IntegrationTestSuite { -- 2.18.1