/*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
* Copyright (c) 2013, MPL CodeInside http://codeinside.ru
*/
package ru.codeinside.adm.test;
import org.activiti.engine.ProcessEngine;
import org.activiti.engine.repository.ProcessDefinition;
import org.jboss.arquillian.container.test.api.Deployment;
import org.jboss.arquillian.junit.Arquillian;
import org.jboss.shrinkwrap.api.ShrinkWrap;
import org.jboss.shrinkwrap.api.asset.EmptyAsset;
import org.jboss.shrinkwrap.api.spec.JavaArchive;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Ignore;
import org.junit.Test;
import org.junit.runner.RunWith;
import ru.codeinside.adm.AdminServiceProvider;
import ru.codeinside.adm.database.Bid;
import ru.codeinside.adm.database.Procedure;
import ru.codeinside.adm.database.ProcedureProcessDefinition;
import ru.codeinside.adm.database.ProcedureType;
import ru.codeinside.adm.database.SmevChain;
import ru.codeinside.adm.fixtures.FxDefinition;
import ru.codeinside.gses.beans.ActivitiDeclarerContext;
import ru.codeinside.gses.manager.ManagerService;
import ru.codeinside.gses.migrations.BaseBean;
import ru.codeinside.gses.service.DeclarantServiceProvider;
import ru.codeinside.gses.service.impl.DeclarantServiceImpl;
import ru.codeinside.gses.webui.Configurator;
import ru.codeinside.gses.webui.osgi.TRefRegistryImpl;
import ru.codeinside.gws.api.DeclarerContext;
import ru.codeinside.log.Logger;
import javax.inject.Inject;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.transaction.UserTransaction;
import java.io.InputStream;
import java.util.concurrent.atomic.AtomicLong;
//TODO: добавить в PersistanceAsset правильную очитску базы.
@RunWith(Arquillian.class)
@Ignore("Конфликтует с AdminServiceTest так как база данных не очищается")
public class DeclarerTest extends Assert {
@Deployment
public static JavaArchive createDeployment() {
return ShrinkWrap
.create(JavaArchive.class)
.addPackage(FxDefinition.class.getPackage())
.addPackage(AdminServiceProvider.class.getPackage())
.addClass(ManagerService.class)
.addClass(DeclarantServiceImpl.class)
.addClass(ActivitiContext.class)
.addClass(Configurator.class)
.addClass(BaseBean.class)
.addClass(DeclarantServiceProvider.class)
.addPackage(Logger.class.getPackage())
.addPackage(TRefRegistryImpl.class.getPackage())
.addClass(DummyActivitiJobProvider.class)
.add(new PersistanceAsset(), "META-INF/persistence.xml")
.addAsManifestResource(EmptyAsset.INSTANCE, "beans.xml");
}
@Inject
UserTransaction tx;
@PersistenceContext(unitName = "myPU")
EntityManager em;
@Inject
public ProcessEngine processEngine;
@Before
public void disableFixtures() {
FxMarker.enabled = false;
}
@Test
public void simple() throws Exception {
tx.begin();
ProcessDefinition def = deployForm("json-form/test.bpmn");
Procedure procedure = new Procedure();
procedure.setType(ProcedureType.Administrative);
procedure.setDescription("test");
procedure.setName("test");
procedure.setVersion("1");
em.persist(procedure);
ProcedureProcessDefinition ppd = new ProcedureProcessDefinition();
ppd.setProcessDefinitionId(def.getId());
ppd.setVersion(0.0d + def.getVersion());
ppd.setProcessDefinitionKey("uniJsonForm");
ppd.setProcedure(procedure);
em.persist(ppd);
em.flush();
tx.commit();
tx.begin();
AtomicLong gid = new AtomicLong(0L);
SmevChain smevChain = new SmevChain(false, null, "1234", null, null, null);
DeclarerContext declarerContext = new ActivitiDeclarerContext(smevChain, gid, def.getId(), "123");
String json = String.format("{num: %5000d}", 1);
assertEquals(5007, json.length());
declarerContext.setValue("someVar", json);
String bidId = declarerContext.declare();
assertEquals(gid.get(), Long.parseLong(bidId));
if (false) { // пробелмы с byteArray у ibatis и H2
Bid bid = em.createQuery(
"select b from Bid b where b.id=:bidId", Bid.class).setParameter("bidId", Long.parseLong(bidId)).getSingleResult();
Object someVar = processEngine.getRuntimeService().getVariable(bid.getProcessInstanceId(), "someVar");
byte[] asBytes = (byte[]) someVar;
assertArrayEquals(json.getBytes(), asBytes);
}
tx.rollback();
}
private ProcessDefinition deployForm(String resource) {
final InputStream is = getClass().getClassLoader().getResourceAsStream(resource);
assertNotNull(resource, is);
org.activiti.engine.repository.Deployment deploy = processEngine.getRepositoryService().createDeployment().addInputStream(resource, is).deploy();
ProcessDefinition processDefinition = processEngine.getRepositoryService().createProcessDefinitionQuery().deploymentId(deploy.getId()).singleResult();
return processDefinition;
}
}