/******************************************************************************* * Copyright (c) 2006-2010 eBay Inc. All Rights Reserved. * 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 * *******************************************************************************/ package org.ebayopensource.turmeric.policyservice.model; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertNull; import java.lang.reflect.Proxy; import java.util.HashSet; import java.util.List; import java.util.Set; import org.ebayopensource.turmeric.utils.jpa.EntityManagerContext; import org.ebayopensource.turmeric.utils.jpa.JPAAroundAdvice; import org.junit.Before; import org.junit.Test; /** * The Class ResourceDAOTest. */ public class ResourceDAOTest extends AbstractJPATest { private ResourceDAO resourceDAO; private Resource rs1; private Resource rs2; private Resource rs3; private Resource rs4; private Operation op1; private Operation op2; private Operation op3; private Operation op4; private static final String OBJECT_TYPE = "OBJECT"; private static final String URL_TYPE = "URL"; private static final String SERVICE_TYPE = "SERVICE"; private static final String GENERIC_TYPE = "GENERIC"; /** * Inits the dao. */ @Before public void initDAO() { ClassLoader classLoader = ResourceDAO.class.getClassLoader(); Class[] interfaces = { ResourceDAO.class }; ResourceDAO target = new ResourceDAOImpl(); resourceDAO = (ResourceDAO) Proxy.newProxyInstance(classLoader, interfaces, new JPAAroundAdvice(factory, target)); rs1 = new Resource(GENERIC_TYPE, "resource_name_1", "resource_description_1"); rs2 = new Resource(GENERIC_TYPE, "resource_name_2", "resource_description_2"); rs3 = new Resource(OBJECT_TYPE, "resource_name_3", "resource_description_3"); rs4 = new Resource(SERVICE_TYPE, "resource_name_4", "resource_desicription_4"); op1 = new Operation("operation_name_1", "op_description_1"); op2 = new Operation("operation_name_2", "op_description_2"); op3 = new Operation("operation_name_3", "op_description_3"); op4 = new Operation("operation_name_4", "op_description_4"); } /** * Test persist resource. * * @throws Exception * the exception */ @Test public void testPersistResource() throws Exception { resourceDAO.persistResource(rs1); EntityManagerContext.open(factory); try { Resource savedResource = EntityManagerContext.get().find( Resource.class, rs1.getId()); assertNotNull(savedResource); assertEquals(GENERIC_TYPE, savedResource.getResourceType()); } finally { EntityManagerContext.close(); } } /** * Test persist operation. * * @throws Exception * the exception */ @Test public void testPersistOperation() throws Exception { resourceDAO.persistOperation(op1); EntityManagerContext.open(factory); try { Operation savedOperation = EntityManagerContext.get().find( Operation.class, op1.getId()); assertNotNull(savedOperation); assertEquals("operation_name_1", savedOperation.getOperationName()); } finally { EntityManagerContext.close(); } } /** * Test find resource by id. * * @throws Exception * the exception */ @Test public void testFindResourceById() throws Exception { resourceDAO.persistResource(rs1); Resource resource = resourceDAO.findResourceById(rs1.getId()); assertNotNull(resource); assertEquals("resource_name_1", resource.getResourceName()); } /** * Test find resource by type. * * @throws Exception * the exception */ @Test public void testFindResourceByType() throws Exception { resourceDAO.persistResource(rs1); resourceDAO.persistResource(rs2); resourceDAO.persistResource(rs3); List<Resource> resources = resourceDAO.findResourceByType(GENERIC_TYPE); assertNotNull(resources); assertEquals(2, resources.size()); } /** * Test find resource by name. * * @throws Exception * the exception */ @Test public void testFindResourceByName() throws Exception { resourceDAO.persistResource(rs1); resourceDAO.persistResource(rs2); resourceDAO.persistResource(rs3); Resource resource = resourceDAO.findResourceByName("resource_name_2"); assertNotNull(resource); assertEquals("resource_name_2", resource.getResourceName()); } /** * Test find operation by id. * * @throws Exception * the exception */ @Test public void testFindOperationById() throws Exception { resourceDAO.persistOperation(op1); Operation operation = resourceDAO.findOperationById(op1.getId()); assertNotNull(operation); assertEquals("operation_name_1", operation.getOperationName()); } /** * Find operation by name. * * @throws Exception * the exception */ @Test public void findOperationByName() throws Exception { Set<Operation> operations = new HashSet<Operation>(); operations.add(op1); operations.add(op2); rs1.addOperations(operations); resourceDAO.persistResource(rs1); Operation operation = resourceDAO.findOperationByName( rs1.getResourceName(), op2.getOperationName(), GENERIC_TYPE); assertNotNull(operation); assertEquals("operation_name_2", operation.getOperationName()); } /** * Find operation by name service typetest. * * @throws Exception * the exception */ @Test public void findOperationByNameServiceTypetest() throws Exception { Set<Operation> operations = new HashSet<Operation>(); operations.add(op1); operations.add(op2); operations.add(op4); rs4.addOperations(operations); resourceDAO.persistResource(rs4); Operation operation = resourceDAO.findOperationByName( rs4.getResourceName(), op4.getOperationName(), SERVICE_TYPE); assertNotNull(operation); assertEquals("operation_name_4", operation.getOperationName()); } /** * Find operation by resource id. * * @throws Exception * the exception */ @Test public void findOperationByResourceId() throws Exception { Set<Operation> operations_for_rs1 = new HashSet<Operation>(); operations_for_rs1.add(op1); operations_for_rs1.add(op2); Set<Operation> operations_for_rs2 = new HashSet<Operation>(); operations_for_rs2.add(op3); rs1.addOperations(operations_for_rs1); rs2.addOperations(operations_for_rs2); resourceDAO.persistResource(rs1); resourceDAO.persistResource(rs2); Set<Operation> operations = resourceDAO.findOperationByResourceId(rs2 .getId()); assertNotNull(operations); assertEquals(1, operations.size()); } /** * Find resource by operation id. * * @throws Exception * the exception */ @Test public void findResourceByOperationId() throws Exception { Set<Operation> operations = new HashSet<Operation>(); operations.add(op1); operations.add(op2); rs1.addOperations(operations); resourceDAO.persistResource(rs1); Resource resource = resourceDAO.findResourceByOperationId(op2.getId()); assertNotNull(resource); assertEquals("resource_name_1", resource.getResourceName()); } /** * Removes the resource. * * @throws Exception * the exception */ @Test public void removeResource() throws Exception { Set<Operation> operations = new HashSet<Operation>(); operations.add(op1); rs1.addOperations(operations); resourceDAO.persistResource(rs1); EntityManagerContext.open(factory); try { Resource savedResource = EntityManagerContext.get().find( Resource.class, rs1.getId()); assertNotNull(savedResource); resourceDAO.removeResource(rs1.getId()); savedResource = EntityManagerContext.get().find(Resource.class, rs1.getId()); assertNull(savedResource); Operation savedOperation = EntityManagerContext.get().find( Operation.class, op1.getId()); assertNull(savedOperation); } finally { EntityManagerContext.close(); } } /** * Removes the operation. * * @throws Exception * the exception */ @Test public void removeOperation() throws Exception { EntityManagerContext.open(factory); try { resourceDAO.persistResource(rs1); op1.setResource(rs1); resourceDAO.persistOperation(op1); rs1.getOperations().add(op1); } finally { EntityManagerContext.close(); } EntityManagerContext.open(factory); try { Operation savedOperation = EntityManagerContext.get().find( Operation.class, op1.getId()); assertNotNull(savedOperation); resourceDAO.removeOperation(op1.getResource().getId(), op1.getOperationName()); savedOperation = EntityManagerContext.get().find(Operation.class, op1.getId()); assertNull(savedOperation); } finally { EntityManagerContext.close(); } } }