# ARMTEST
Funzionalità per il run di test su progetti Armundia.
## Basic usage
Dipendenza da utilizzare:
```xml
com.armundia.tech
armtest
1.0.2
```
Utilizzo per una classe di test (con o senza `@Testable`) e metodi `@Test`:
```java
class MioPrimoTest extends ArmUnitTest {
@Inject
private CdiTestService service;
@Test
void test01_base() {
String info = service.readInfo();
assertNotNull(info, "info must be not null");
}
}
```
da notare l'uso di una classe base `ArmUnitTest` per i test.
Questo permetterà di avere:
* supporto completo CDI (auto discovery anche su più jar dei bean)
* unico limite: i bean devono essere esplicitamente indicati con un'annotazione `@Dependent`, `@RequestScoped`, `@SessionScoped` o `@ApplicationScoped`
* supporto `@PersistenceContext` (normalmente disponibile solo in contesto Enterprise)
## supporto scenari DB via file H2
```java
@Scenario(name = "one", order = 1)
class ScenarioOne extends ArmUnitTest {
@Inject
private OneService service;
@Test
void test01_query() {
List dom = service.getApDom("CMA_ASSET_CLASS_INFO");
assertTrue(!dom.isEmpty(), "dominio CMA_ASSET_CLASS_INFO vuoto/non trovato");
}
}
```
Dove il servizio `OneService` è, ad esempio, con accesso al db tramite `EntityManager`:
```java
@Dependent
public class OneService {
@PersistenceContext
private EntityManager em;
public List getApDom(String cod) {
TypedQuery query = em.createQuery("SELECT a FROM ApDom a WHERE a.id.codCampo = :cod", ApDom.class);
query.setParameter("cod", cod);
return query.getResultList();
}
}
```
userà il database per lo scenario **`one`** che corrisponde al database, H2, in:
`resources\META-INF\scenarios`
`one.mv.db`
a cui corrisponde il file:
`one.trace.db`
Oltre questa modalità con i file `.db`, è supportato il recupero di tali file da un file `.zip` (per ridurre lo spazio utilizzato).
Altre modalità supportate:
**script aggiuntivo** a partire da un database esistente:
```java
@Scenario(name = "one", scripts = "META-INF/scenarios/add-datas.sql")
```
**script db completo** a partire da un database vuoto (in memoria):
```java
@Scenario(name = "one", asResource=false, scripts = "META-INF/scenarios/from-scratch.sql")
```
**script db multipli** a partire da un database vuoto in memoria (base non esiste come risorsa):
```java
@Scenario(name = "base", scripts = "META-INF/scenarios/from-scratch.sql,META-INF/scenarios/more.sql")
```
## Auto test per tutti i Pojo di un package (!)
```java
List errors = ArmTest.instance().testPojosInPackage("com.armundia.armtest.testpojo");
// eventualmente aggiungere un controllo, ma già la riga precedente
// aumenta la coverage richiamando tanti get/set
assertEquals(0, errors.size(), "expected no errors");
```
Oppure:
````java
List errors = ArmTest.instance().testPojos(
null, // nessuna annotation in particolare
"com.armundia.armtest.testpojo", "com.armundia.armtest.testpojo");
// eventualmente aggiungere un controllo, ma già la riga precedente
// aumenta la coverage richiamando tanti get/set
assertEquals(0, errors.size(), "expected no errors");
````
## MAVEN run test commands
da bash shell:
```bash
mvn test
```
con report coverage:
```bash
mvn test jacoco:report
```
## Future features
* verifica supporto Rest JAX-RS
## Release commands
Follow the steps to release a maven package into Nexus Repository
Assure that the `pom.xml` has the `` tag that points to the git developer connection and manage takes the HEAD commit of your repository.
```xml
scm:git:{git-http-connection}
HEAD
```
`mvn release:clean`
`mvn release:prepare`
After, if it goes all well, **push** the commits and the tag created by the execution and run:
`mvn release:perform`
If something about `mvn release:perform` goes wrong and we want to revert all the `release` stuff, we need to remove the commit and tag created by the execution and run:
`mvn release:rollback`
## Release
Qui sono indicate le release finora effettuate.
### Next Release
#### 1.0.2
Major release con:
* supporto CDI/Junit 5
* supporto scenari di test db, basati su h2
#### 0.0.1
* Released the package... TODO