TSK-61: Classification-Interface created, changed pulic reachable code to Classification not Impl, ClassificationServiceImplsTest improved

This commit is contained in:
Marcel Lengl 2017-12-07 13:18:17 +01:00
parent c8c037c3db
commit 2e473c54bd
27 changed files with 1022 additions and 485 deletions

View File

@ -1,19 +1,25 @@
package pro.taskana;
import javax.ejb.EJB;
import javax.ws.rs.DELETE;
import javax.ws.rs.GET;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.core.Response;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import pro.taskana.exceptions.ClassificationAlreadyExistException;
import pro.taskana.exceptions.ClassificationNotFoundException;
import pro.taskana.exceptions.NotAuthorizedException;
import pro.taskana.exceptions.TaskNotFoundException;
import pro.taskana.exceptions.WorkbasketNotFoundException;
import pro.taskana.model.Classification;
import pro.taskana.model.ClassificationImpl;
import pro.taskana.model.Task;
import pro.taskana.model.Workbasket;
import javax.ejb.EJB;
import javax.ws.rs.*;
import javax.ws.rs.core.Response;
@Path("/test")
public class TaskanaRestTest {
@ -23,12 +29,12 @@ public class TaskanaRestTest {
private TaskanaEjb taskanaEjb;
@GET
public Response startTask() throws NotAuthorizedException, WorkbasketNotFoundException, ClassificationNotFoundException {
public Response startTask() throws NotAuthorizedException, WorkbasketNotFoundException, ClassificationNotFoundException, ClassificationAlreadyExistException {
Workbasket workbasket = new Workbasket();
workbasket.setName("wb");
taskanaEjb.getWorkbasketService().createWorkbasket(workbasket);
Classification classification = new Classification();
taskanaEjb.getClassificationService().addClassification(classification);
Classification classification = (Classification) new ClassificationImpl();
taskanaEjb.getClassificationService().createClassification(classification);
Task task = new Task();
task.setClassification(classification);

View File

@ -0,0 +1,249 @@
package pro.taskana;
import java.sql.Date;
/**
* Interface used to specify the Classification-Model.
*/
public interface Classification {
/**
* @return unique classification ID
*/
String getId();
/**
* Set/Change the classification-ID. Only ID+Domain need to be unique.
* @param id
*/
void setId(String id);
/**
* Used to get the ID of the parent classification.
* There will be no value if the current classification is
* a parent-classification.
* @return unique ID or null if parent itself.
*/
String getParentClassificationId();
/**
* Set/Change a reference to the current parent classification via ID.
* If this field would be set to NULL the classification will become
* a parent-classification itself.
* @param parentClassificationId
*/
void setParentClassificationId(String parentClassificationId);
/**
* @return category of this classification.
*/
String getCategory();
/**
* Set/Change the category of this classification.
* @param category
*/
void setCategory(String category);
/**
* Get the type of the current classification.
* @return type
*/
String getType();
/**
* Set/Change the current type of the classification.
* @param type
*/
void setType(String type);
/**
* Get the current domain-name of this
* classification.
* @return domain name
*/
String getDomain();
/**
* Set/Change the domain of this classification.
* @param domain name
*/
void setDomain(String domain);
/**
* Get a flag if the classification if currently valid
* in the used domain.
* @return isValidInDomain - flag
*/
Boolean getIsValidInDomain();
/**
* Set/Change the flag which marks the classification as
* valid/invalid in the currently used domain.
* @param isValidInDomain - flag
*/
void setIsValidInDomain(Boolean isValidInDomain);
/**
* Get the Date when this classification was as created.
* @return created as date
*/
Date getCreated();
/**
* Get the classification name.
* @return name
*/
String getName();
/**
* Set/Change the classification name.
* @param name
*/
void setName(String name);
/**
* Get the description of a classification.
* @return description
*/
String getDescription();
/**
* Set/Change the classification description.
* @param description
*/
void setDescription(String description);
/**
* Get the current classification priority (numeric).
* @return priority
*/
int getPriority();
/**
* Set/Change the numeric priority of a classification.
* @param priority
*/
void setPriority(int priority);
/**
* Get the current service level.
* @return serviceLevel
*/
String getServiceLevel();
/**
* Set/Change the security level.
* @param serviceLevel
*/
void setServiceLevel(String serviceLevel);
/**
* Get the 1. custom-attribute.
* @return custom1
*/
String getCustom1();
/**
* Set/Change the 1. custom-attribute.
* @param custom1
*/
void setCustom1(String custom1);
/**
* Get the 2. custom-attribute.
* @return custom2
*/
String getCustom2();
/**
* Set/Change the 2. custom-attribute.
* @param custom2
*/
void setCustom2(String custom2);
/**
* Get the 3. custom-attribute.
* @return custom3
*/
String getCustom3();
/**
* Set/Change the 3. custom-attribute.
* @param custom3
*/
void setCustom3(String custom3);
/**
* Get the 4. custom-attribute.
* @return custom4
*/
String getCustom4();
/**
* Set/Change the 4. custom-attribute.
* @param custom4
*/
void setCustom4(String custom4);
/**
* Get the 5. custom-attribute.
* @return custom5
*/
String getCustom5();
/**
* Set/Change the 5. custom-attribute.
* @param custom5
*/
void setCustom5(String custom5);
/**
* Get the 6. custom-attribute.
* @return custom6
*/
String getCustom6();
/**
* Set/Change the 6. custom-attribute.
* @param custom6
*/
void setCustom6(String custom6);
/**
* Get the 7. custom-attribute.
* @return custom7
*/
String getCustom7();
/**
* Set/Change the 7. custom-attribute.
* @param custom7
*/
void setCustom7(String custom7);
/**
* Get the 8. custom-attribute.
* @return custom8
*/
String getCustom8();
/**
* Set/Change the 8. custom-attribute.
* @param custom8
*/
void setCustom8(String custom8);
/**
* Get the sql-date since/when the classification is valid from.
* @return validFrom
*/
Date getValidFrom();
/**
* Get the sql-date until the classification is valid.
* @return validUntil
*/
Date getValidUntil();
}

View File

@ -1,7 +1,5 @@
package pro.taskana;
import pro.taskana.model.Classification;
import java.util.Date;
/**

View File

@ -1,10 +1,10 @@
package pro.taskana;
import java.util.List;
import pro.taskana.exceptions.ClassificationAlreadyExistException;
import pro.taskana.exceptions.ClassificationNotFoundException;
import pro.taskana.exceptions.NotAuthorizedException;
import pro.taskana.model.Classification;
import java.util.List;
/**
* This class manages the classifications.
@ -35,22 +35,33 @@ public interface ClassificationService {
Classification getClassification(String id, String domain) throws ClassificationNotFoundException;
/**
* Insert a new Classification.
* Persist a new classification. If the classification does
* already exist in a domain, it will just be updated.
* @param classification
* the classification to insert
* @throws ClassificationAlreadyExistException
* when the classification does already exists with same ID+domain.
*/
void addClassification(Classification classification);
void createClassification(Classification classification) throws ClassificationAlreadyExistException;
/**
* Update a Classification.
* @param classification
* the Classification to update
* @throws ClassificationNotFoundException when the classification does not exist already.
*/
void updateClassification(Classification classification);
void updateClassification(Classification classification) throws ClassificationNotFoundException;
/**
* This method provides a query builder for quering the database.
* @return a {@link ClassificationQuery}
*/
ClassificationQuery createClassificationQuery();
/**
* Creating a new {@link Classification} with unchangeable default values.
* It will be only generated and is not persisted until CREATE-call.
* @return classification to specify
*/
Classification newClassification();
}

View File

@ -0,0 +1,14 @@
package pro.taskana.exceptions;
/**
* This Exception will be thrown, when a classification does already exits,
* but wanted to create with same ID+domain.
*/
public class ClassificationAlreadyExistException extends NotFoundException {
private static final long serialVersionUID = 4716611657569005013L;
public ClassificationAlreadyExistException(String classificationId) {
super(classificationId);
}
}

View File

@ -1,6 +1,7 @@
package pro.taskana.exceptions;
/**
<<<<<<< HEAD
* This exception will be thrown if a specific task is not in the database.
*/
@SuppressWarnings("serial")

View File

@ -7,6 +7,8 @@ package pro.taskana.exceptions;
*/
public class TaskanaException extends Exception {
private static final long serialVersionUID = 123234345123412L;
public TaskanaException() {
super();
}

View File

@ -7,6 +7,8 @@ package pro.taskana.exceptions;
*/
public class TaskanaRuntimeException extends RuntimeException {
private static final long serialVersionUID = 1511142769801824L;
public TaskanaRuntimeException() {
super();
}

View File

@ -1,17 +1,17 @@
package pro.taskana.impl;
import java.util.Arrays;
import java.util.Date;
import java.util.List;
import org.apache.ibatis.session.RowBounds;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import pro.taskana.Classification;
import pro.taskana.ClassificationQuery;
import pro.taskana.TaskanaEngine;
import pro.taskana.impl.util.LoggerUtils;
import pro.taskana.model.Classification;
import java.util.Arrays;
import java.util.Date;
import java.util.List;
/**
* Implementation of ClassificationQuery interface.

View File

@ -1,23 +1,26 @@
package pro.taskana.impl;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import pro.taskana.ClassificationQuery;
import pro.taskana.ClassificationService;
import pro.taskana.TaskanaEngine;
import pro.taskana.exceptions.ClassificationNotFoundException;
import pro.taskana.exceptions.NotAuthorizedException;
import pro.taskana.impl.util.IdGenerator;
import pro.taskana.impl.util.LoggerUtils;
import pro.taskana.model.Classification;
import pro.taskana.model.mappings.ClassificationMapper;
import java.sql.Date;
import java.time.Duration;
import java.time.LocalDate;
import java.util.ArrayList;
import java.util.List;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import pro.taskana.Classification;
import pro.taskana.ClassificationQuery;
import pro.taskana.ClassificationService;
import pro.taskana.TaskanaEngine;
import pro.taskana.exceptions.ClassificationAlreadyExistException;
import pro.taskana.exceptions.ClassificationNotFoundException;
import pro.taskana.exceptions.NotAuthorizedException;
import pro.taskana.impl.util.IdGenerator;
import pro.taskana.impl.util.LoggerUtils;
import pro.taskana.model.ClassificationImpl;
import pro.taskana.model.mappings.ClassificationMapper;
/**
* This is the implementation of ClassificationService.
*/
@ -45,8 +48,8 @@ public class ClassificationServiceImpl implements ClassificationService {
taskanaEngineImpl.openConnection();
List<Classification> rootClassifications;
rootClassifications = this.createClassificationQuery().parentClassification("").validUntil(CURRENT_CLASSIFICATIONS_VALID_UNTIL).list();
result = this.populateChildClassifications(rootClassifications);
return result;
rootClassifications = this.populateChildClassifications(rootClassifications);
return rootClassifications;
} finally {
taskanaEngineImpl.returnConnection();
if (LOGGER.isDebugEnabled()) {
@ -72,17 +75,30 @@ public class ClassificationServiceImpl implements ClassificationService {
}
@Override
public void addClassification(Classification classification) {
LOGGER.debug("entry to addClassification(classification = {})", classification);
try {
public void createClassification(Classification classification) throws ClassificationAlreadyExistException {
LOGGER.debug("entry to createClassification(classification = {})", classification);
try {
taskanaEngineImpl.openConnection();
classification.setId(IdGenerator.generateWithPrefix(ID_PREFIX_CLASSIFICATION));
classification.setCreated(Date.valueOf(LocalDate.now()));
this.setDefaultValues(classification);
classificationMapper.insert(classification);
LOGGER.debug("Method addClassification added classification {}.", classification);
ClassificationImpl classificationImpl = (ClassificationImpl) classification;
this.setDefaultValues(classificationImpl);
Classification oldClassification;
try {
oldClassification = this.getClassification(classificationImpl.getId(), classificationImpl.getDomain());
} catch (ClassificationNotFoundException e) {
oldClassification = null;
}
if (oldClassification == null) {
classificationImpl.setCreated(classificationImpl.getValidFrom());
classificationMapper.insert(classificationImpl);
LOGGER.debug("Method createClassification created classification {}.", classification);
if (classificationImpl.getDomain() != "") {
classificationImpl.setDomain("");
classificationMapper.insert(classificationImpl);
LOGGER.debug("Method createClassification created classification {}.", classification);
}
} else {
throw new ClassificationAlreadyExistException(classificationImpl.getId());
}
} finally {
taskanaEngineImpl.returnConnection();
LOGGER.debug("exit from addClassification()");
@ -94,41 +110,48 @@ public class ClassificationServiceImpl implements ClassificationService {
LOGGER.debug("entry to updateClassification(Classification = {})", classification);
try {
taskanaEngineImpl.openConnection();
this.setDefaultValues(classification);
ClassificationImpl classificationImpl = (ClassificationImpl) classification;
this.setDefaultValues(classificationImpl);
Classification oldClassification = null;
ClassificationImpl oldClassification = null;
try {
oldClassification = this.getClassification(classification.getId(), classification.getDomain());
LOGGER.debug("Method updateClassification() inserted classification {}.", classification);
oldClassification = (ClassificationImpl) this.getClassification(classificationImpl.getId(), classificationImpl.getDomain());
LOGGER.debug("Method updateClassification() inserted classification {}.", classificationImpl);
if (oldClassification == null) {
throw new ClassificationNotFoundException("Classification not found. ID: " + classificationImpl.getId());
}
// ! If you update an classification twice the same day,
// the older version is valid from today until yesterday.
if (!oldClassification.getDomain().equals(classification.getDomain())) {
classification.setCreated(Date.valueOf(LocalDate.now()));
classificationMapper.insert(classification);
if (!oldClassification.getDomain().equals(classificationImpl.getDomain())) {
classificationImpl.setCreated(Date.valueOf(LocalDate.now()));
classificationMapper.insert(classificationImpl);
LOGGER.debug("Method updateClassification() inserted classification {}.", classification);
} else {
oldClassification.setValidUntil(Date.valueOf(LocalDate.now().minusDays(1)));
classificationMapper.update(oldClassification);
classificationMapper.insert(classification);
LOGGER.debug("Method updateClassification() updated old classification {} and inserted new {}.", oldClassification, classification);
classificationMapper.insert(classificationImpl);
LOGGER.debug("Method updateClassification() updated old classification {} and inserted new {}.", oldClassification, classificationImpl);
}
} catch (ClassificationNotFoundException e) {
classification.setId(IdGenerator.generateWithPrefix(ID_PREFIX_CLASSIFICATION));
classification.setCreated(Date.valueOf(LocalDate.now()));
classificationMapper.insert(classification);
LOGGER.debug("Method updateClassification() inserted classification {}.", classification);
}
classificationImpl.setId(IdGenerator.generateWithPrefix(ID_PREFIX_CLASSIFICATION));
classificationImpl.setCreated(Date.valueOf(LocalDate.now()));
classificationMapper.insert(classificationImpl);
LOGGER.debug("Method updateClassification() inserted classification {}.", classificationImpl);
}
} finally {
taskanaEngineImpl.returnConnection();
LOGGER.debug("exit from updateClassification().");
}
}
private void setDefaultValues(Classification classification) {
private void setDefaultValues(ClassificationImpl classification) {
classification.setValidFrom(Date.valueOf(LocalDate.now()));
classification.setValidUntil(CURRENT_CLASSIFICATIONS_VALID_UNTIL);
classification.setValidInDomain(true);
if (classification.getIsValidInDomain() == null) {
classification.setIsValidInDomain(true);
}
if (classification.getServiceLevel() != null) {
try {
Duration.parse(classification.getServiceLevel());
@ -137,6 +160,10 @@ public class ClassificationServiceImpl implements ClassificationService {
}
}
if (classification.getId() == null) {
classification.setId(IdGenerator.generateWithPrefix(ID_PREFIX_CLASSIFICATION));
}
if (classification.getParentClassificationId() == classification.getId()) {
throw new IllegalArgumentException("A classification can't be a parent to itself");
}
@ -144,10 +171,10 @@ public class ClassificationServiceImpl implements ClassificationService {
if (classification.getParentClassificationId() == null) {
classification.setParentClassificationId("");
}
if (classification.getDomain() == null) {
classification.setDomain("");
}
}
@Override
@ -156,8 +183,10 @@ public class ClassificationServiceImpl implements ClassificationService {
List<Classification> result = null;
try {
taskanaEngineImpl.openConnection();
result = classificationMapper.getAllClassificationsWithId(id, domain);
return result;
List<ClassificationImpl> classifications = classificationMapper.getAllClassificationsWithId(id, domain);
List<Classification> results = new ArrayList<>();
classifications.stream().forEach(c -> results.add((Classification) c));
return results;
} finally {
taskanaEngineImpl.returnConnection();
if (LOGGER.isDebugEnabled()) {
@ -195,4 +224,13 @@ public class ClassificationServiceImpl implements ClassificationService {
public ClassificationQuery createClassificationQuery() {
return new ClassificationQueryImpl(taskanaEngine);
}
@Override
public Classification newClassification() {
Date date = Date.valueOf(LocalDate.now());
ClassificationImpl classification = new ClassificationImpl();
this.setDefaultValues(classification);
classification.setCreated(date);
return classification;
}
}

View File

@ -1,7 +1,17 @@
package pro.taskana.impl;
import java.sql.Date;
import java.sql.Timestamp;
import java.time.Duration;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import pro.taskana.Classification;
import pro.taskana.TaskQuery;
import pro.taskana.TaskService;
import pro.taskana.TaskanaEngine;
@ -11,18 +21,16 @@ import pro.taskana.exceptions.TaskNotFoundException;
import pro.taskana.exceptions.WorkbasketNotFoundException;
import pro.taskana.impl.util.IdGenerator;
import pro.taskana.impl.util.LoggerUtils;
import pro.taskana.model.*;
import pro.taskana.model.DueWorkbasketCounter;
import pro.taskana.model.ObjectReference;
import pro.taskana.model.Task;
import pro.taskana.model.TaskState;
import pro.taskana.model.TaskStateCounter;
import pro.taskana.model.Workbasket;
import pro.taskana.model.WorkbasketAuthorization;
import pro.taskana.model.mappings.ObjectReferenceMapper;
import pro.taskana.model.mappings.TaskMapper;
import java.sql.Date;
import java.sql.Timestamp;
import java.time.Duration;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;
/**
* This is the implementation of TaskService.
*/
@ -107,7 +115,7 @@ public class TaskServiceImpl implements TaskService {
taskanaEngineImpl.openConnection();
Workbasket wb = taskanaEngine.getWorkbasketService().getWorkbasket(task.getWorkbasketId());
taskanaEngine.getWorkbasketService().checkAuthorization(task.getWorkbasketId(), WorkbasketAuthorization.APPEND);
task.setWorkbasketId(wb.getId());
Classification classification = task.getClassification();
if (classification == null) {
throw new ClassificationNotFoundException(null);

View File

@ -2,10 +2,12 @@ package pro.taskana.model;
import java.sql.Date;
import pro.taskana.Classification;
/**
* Classification entity.
*/
public class Classification {
public class ClassificationImpl implements Classification {
private String id;
private String parentClassificationId;
@ -29,6 +31,7 @@ public class Classification {
private Date validFrom;
private Date validUntil;
@Override
public String getId() {
return id;
}
@ -37,46 +40,56 @@ public class Classification {
this.id = id;
}
@Override
public String getParentClassificationId() {
return parentClassificationId;
}
@Override
public void setParentClassificationId(String parentClassificationId) {
this.parentClassificationId = parentClassificationId;
}
@Override
public String getType() {
return type;
}
@Override
public void setType(String type) {
this.type = type;
}
@Override
public String getCategory() {
return category;
}
@Override
public void setCategory(String category) {
this.category = category;
}
@Override
public String getDomain() {
return this.domain;
}
@Override
public void setDomain(String domain) {
this.domain = domain;
}
public Boolean getValidInDomain() {
@Override
public Boolean getIsValidInDomain() {
return isValidInDomain;
}
public void setValidInDomain(Boolean validInDomain) {
isValidInDomain = validInDomain;
public void setIsValidInDomain(Boolean isValidInDomain) {
this.isValidInDomain = isValidInDomain;
}
@Override
public Date getCreated() {
return created;
}
@ -85,102 +98,127 @@ public class Classification {
this.created = created;
}
@Override
public String getName() {
return name;
}
@Override
public void setName(String name) {
this.name = name;
}
@Override
public String getDescription() {
return description;
}
@Override
public void setDescription(String description) {
this.description = description;
}
@Override
public int getPriority() {
return priority;
}
@Override
public void setPriority(int priority) {
this.priority = priority;
}
@Override
public String getServiceLevel() {
return serviceLevel;
}
@Override
public void setServiceLevel(String serviceLevel) {
this.serviceLevel = serviceLevel;
}
@Override
public String getCustom1() {
return custom1;
}
@Override
public void setCustom1(String custom1) {
this.custom1 = custom1;
}
@Override
public String getCustom2() {
return custom2;
}
@Override
public void setCustom2(String custom2) {
this.custom2 = custom2;
}
@Override
public String getCustom3() {
return custom3;
}
@Override
public void setCustom3(String custom3) {
this.custom3 = custom3;
}
@Override
public String getCustom4() {
return custom4;
}
@Override
public void setCustom4(String custom4) {
this.custom4 = custom4;
}
@Override
public String getCustom5() {
return custom5;
}
@Override
public void setCustom5(String custom5) {
this.custom5 = custom5;
}
@Override
public String getCustom6() {
return custom6;
}
@Override
public void setCustom6(String custom6) {
this.custom6 = custom6;
}
@Override
public String getCustom7() {
return custom7;
}
@Override
public void setCustom7(String custom7) {
this.custom7 = custom7;
}
@Override
public String getCustom8() {
return custom8;
}
@Override
public void setCustom8(String custom8) {
this.custom8 = custom8;
}
@Override
public Date getValidFrom() {
return validFrom;
}
@ -189,6 +227,7 @@ public class Classification {
this.validFrom = validFrom;
}
@Override
public Date getValidUntil() {
return validUntil;
}
@ -245,6 +284,4 @@ public class Classification {
builder.append("]");
return builder.toString();
}
}

View File

@ -4,6 +4,8 @@ import java.sql.Timestamp;
import java.util.Collections;
import java.util.Map;
import pro.taskana.Classification;
/**
* Task entity.
*/

View File

@ -10,7 +10,7 @@ import org.apache.ibatis.annotations.Results;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Update;
import pro.taskana.model.Classification;
import pro.taskana.model.ClassificationImpl;
/**
* This class is the mybatis mapping of classifications.
@ -45,7 +45,7 @@ public interface ClassificationMapper {
@Result(property = "custom8", column = "CUSTOM_8"),
@Result(property = "validFrom", column = "VALID_FROM"),
@Result(property = "validUntil", column = "VALID_UNTIL")})
Classification findByIdAndDomain(@Param("id") String id, @Param("domain") String domain, @Param("valid_until")Date validUntil);
ClassificationImpl findByIdAndDomain(@Param("id") String id, @Param("domain") String domain, @Param("valid_until")Date validUntil);
@Select("SELECT ID, PARENT_CLASSIFICATION_ID, CATEGORY, TYPE, DOMAIN, VALID_IN_DOMAIN, CREATED, NAME, DESCRIPTION, PRIORITY, SERVICE_LEVEL, CUSTOM_1, CUSTOM_2, CUSTOM_3, CUSTOM_4, CUSTOM_5, CUSTOM_6, CUSTOM_7, CUSTOM_8, VALID_FROM, VALID_UNTIL "
+ "FROM CLASSIFICATION "
@ -72,13 +72,13 @@ public interface ClassificationMapper {
@Result(property = "custom8", column = "CUSTOM_8"),
@Result(property = "validFrom", column = "VALID_FROM"),
@Result(property = "validUntil", column = "VALID_UNTIL")})
Classification findById(@Param("id") String id);
ClassificationImpl findById(@Param("id") String id);
@Insert("INSERT INTO CLASSIFICATION (ID, PARENT_CLASSIFICATION_ID, CATEGORY, TYPE, DOMAIN, VALID_IN_DOMAIN, CREATED, NAME, DESCRIPTION, PRIORITY, SERVICE_LEVEL, CUSTOM_1, CUSTOM_2, CUSTOM_3, CUSTOM_4, CUSTOM_5, CUSTOM_6, CUSTOM_7, CUSTOM_8, VALID_FROM, VALID_UNTIL) VALUES (#{classification.id}, #{classification.parentClassificationId}, #{classification.category}, #{classification.type}, #{classification.domain}, #{classification.isValidInDomain}, #{classification.created}, #{classification.name}, #{classification.description}, #{classification.priority}, #{classification.serviceLevel}, #{classification.custom1}, #{classification.custom2}, #{classification.custom3}, #{classification.custom4}, #{classification.custom5}, #{classification.custom6}, #{classification.custom7}, #{classification.custom8}, #{classification.validFrom}, #{classification.validUntil})")
void insert(@Param("classification") Classification classification);
void insert(@Param("classification") ClassificationImpl classification);
@Update(value = "UPDATE CLASSIFICATION SET PARENT_CLASSIFICATION_ID = #{classification.parentClassificationId}, CATEGORY = #{classification.category}, TYPE = #{classification.type}, NAME = #{classification.name}, DESCRIPTION = #{classification.description}, PRIORITY = #{classification.priority}, SERVICE_LEVEL = #{classification.serviceLevel}, DOMAIN = #{classification.domain}, VALID_IN_DOMAIN = #{classification.isValidInDomain}, CUSTOM_1 = #{classification.custom1}, CUSTOM_2 = #{classification.custom2}, CUSTOM_3 = #{classification.custom3}, CUSTOM_4 = #{classification.custom4}, CUSTOM_5 = #{classification.custom5}, CUSTOM_6 = #{classification.custom6}, CUSTOM_7 = #{classification.custom7}, CUSTOM_8 = #{classification.custom8}, VALID_FROM = #{classification.validFrom}, VALID_UNTIL = #{classification.validUntil} WHERE ID = #{classification.id}")
void update(@Param("classification") Classification classification);
void update(@Param("classification") ClassificationImpl classification);
@Select("<script>"
+ "SELECT * "
@ -108,6 +108,6 @@ public interface ClassificationMapper {
@Result(property = "custom8", column = "CUSTOM_8"),
@Result(property = "validFrom", column = "VALID_FROM"),
@Result(property = "validUntil", column = "VALID_UNTIL")})
List<Classification> getAllClassificationsWithId(@Param("id") String id, @Param("domain") String domain);
List<ClassificationImpl> getAllClassificationsWithId(@Param("id") String id, @Param("domain") String domain);
}

View File

@ -8,7 +8,7 @@ import org.apache.ibatis.annotations.Select;
import pro.taskana.impl.ClassificationQueryImpl;
import pro.taskana.impl.ObjectReferenceQueryImpl;
import pro.taskana.impl.TaskQueryImpl;
import pro.taskana.model.Classification;
import pro.taskana.model.ClassificationImpl;
import pro.taskana.model.ObjectReference;
import pro.taskana.model.Task;
@ -74,7 +74,7 @@ public interface QueryMapper {
@Result(property = "description", column = "DESCRIPTION"),
@Result(property = "priority", column = "PRIORITY"),
@Result(property = "state", column = "STATE"),
@Result(property = "classification", column = "CLASSIFICATION_ID", javaType = Classification.class, one = @One(select = CLASSIFICATION_FINDBYID)),
@Result(property = "classification", column = "CLASSIFICATION_ID", javaType = ClassificationImpl.class, one = @One(select = CLASSIFICATION_FINDBYID)),
@Result(property = "workbasketId", column = "WORKBASKETID"),
@Result(property = "owner", column = "OWNER"),
@Result(property = "primaryObjRef", column = "PRIMARY_OBJ_REF_ID", javaType = ObjectReference.class, one = @One(select = OBJECTREFERENCEMAPPER_FINDBYID)),
@ -115,7 +115,7 @@ public interface QueryMapper {
@Result(property = "category", column = "CATEGORY"),
@Result(property = "type", column = "TYPE"),
@Result(property = "domain", column = "DOMAIN"),
@Result(property = "validInDomain", column = "VALID_IN_DOMAIN"),
@Result(property = "isValidInDomain", column = "VALID_IN_DOMAIN"),
@Result(property = "created", column = "CREATED"),
@Result(property = "name", column = "NAME"),
@Result(property = "description", column = "DESCRIPTION"),
@ -131,7 +131,7 @@ public interface QueryMapper {
@Result(property = "custom8", column = "CUSTOM_8"),
@Result(property = "validFrom", column = "VALID_FROM"),
@Result(property = "validUntil", column = "VALID_UNTIL") })
List<Classification> queryClassification(ClassificationQueryImpl classificationQuery);
List<ClassificationImpl> queryClassification(ClassificationQueryImpl classificationQuery);
@Select("<script>SELECT ID, COMPANY, SYSTEM, SYSTEM_INSTANCE, TYPE, VALUE "

View File

@ -2,6 +2,8 @@ package pro.taskana.model.mappings;
import org.apache.ibatis.annotations.*;
import org.apache.ibatis.type.JdbcType;
import pro.taskana.Classification;
import pro.taskana.impl.persistence.MapTypeHandler;
import pro.taskana.model.*;
@ -32,7 +34,7 @@ public interface TaskMapper {
@Result(property = "description", column = "DESCRIPTION"),
@Result(property = "priority", column = "PRIORITY"),
@Result(property = "state", column = "STATE"),
@Result(property = "classification", column = "CLASSIFICATION_ID", javaType = Classification.class, one = @One(select = CLASSIFICATION_FINDBYID)),
@Result(property = "classification", column = "CLASSIFICATION_ID", javaType = ClassificationImpl.class, one = @One(select = CLASSIFICATION_FINDBYID)),
@Result(property = "workbasketId", column = "WORKBASKETID"),
@Result(property = "businessProcessId", column = "BUSINESS_PROCESS_ID"),
@Result(property = "parentBusinessProcessId", column = "PARENT_BUSINESS_PROCESS_ID"),

View File

@ -14,8 +14,9 @@ import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.mockito.junit.MockitoJUnitRunner;
import pro.taskana.Classification;
import pro.taskana.exceptions.NotAuthorizedException;
import pro.taskana.model.Classification;
import pro.taskana.model.ClassificationImpl;
/**
* Test for ClassificationQueryImpl.
@ -60,7 +61,7 @@ public class ClassificationQueryImplTest {
@Test
public void should_ReturnOneItem_when_BuilderIsUsed() throws NotAuthorizedException {
when(taskanaEngine.getSqlSession()).thenReturn(sqlSession);
when(sqlSession.selectOne(any(), any())).thenReturn(new Classification());
when(sqlSession.selectOne(any(), any())).thenReturn(new ClassificationImpl());
Classification result = classificationQueryImpl.name("test", "asd", "blubber").type("cool", "bla").priority(1, 2)
.parentClassification("superId").single();

View File

@ -1,26 +1,37 @@
package pro.taskana.impl;
import org.junit.Assert;
import static org.hamcrest.CoreMatchers.equalTo;
import static org.hamcrest.CoreMatchers.not;
import static org.hamcrest.CoreMatchers.startsWith;
import static org.junit.Assert.assertThat;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.Mockito.doNothing;
import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.verifyNoMoreInteractions;
import java.sql.Date;
import java.time.LocalDate;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.Spy;
import org.mockito.junit.MockitoJUnitRunner;
import pro.taskana.Classification;
import pro.taskana.exceptions.ClassificationAlreadyExistException;
import pro.taskana.exceptions.ClassificationNotFoundException;
import pro.taskana.exceptions.NotAuthorizedException;
import pro.taskana.model.Classification;
import pro.taskana.model.ClassificationImpl;
import pro.taskana.model.mappings.ClassificationMapper;
import java.sql.Date;
import java.sql.SQLException;
import java.time.LocalDate;
import java.util.ArrayList;
import java.util.List;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.Mockito.*;
/**
* Unit Test for ClassificationServiceImpl.
* @author EH
@ -28,135 +39,221 @@ import static org.mockito.Mockito.*;
@RunWith(MockitoJUnitRunner.class)
public class ClassificationServiceImplTest {
private final Date today = Date.valueOf(LocalDate.now());
private final String idPrefixClassification = "CLI";
@Spy
@InjectMocks
ClassificationServiceImpl classificationService;
private ClassificationServiceImpl cutSpy;
@Mock
ClassificationMapper classificationMapper;
private ClassificationMapper classificationMapperMock;
@Mock
TaskanaEngineImpl taskanaEngineImpl;
private TaskanaEngineImpl taskanaEngineImplMock;
@Test
public void testAddClassification() throws ClassificationNotFoundException {
doNothing().when(classificationMapper).insert(any());
@Mock
private ClassificationQueryImpl classificationQueryImplMock;
Classification classification = new Classification();
classification.setId("0");
classificationService.addClassification(classification);
when(classificationMapper.findByIdAndDomain(any(), any(), any())).thenReturn(classification);
Assert.assertNotNull(classificationService.getClassification(classification.getId(), ""));
@Before
public void setup() {
doNothing().when(taskanaEngineImplMock).openConnection();
doNothing().when(taskanaEngineImplMock).returnConnection();
}
@Test
public void testModifiedClassification() {
doNothing().when(classificationMapper).insert(any());
doNothing().when(classificationMapper).update(any());
doNothing().when(taskanaEngineImpl).openConnection();
doNothing().when(taskanaEngineImpl).returnConnection();
int insert = 0;
Classification classification = new Classification();
classification.setId("0");
classificationService.addClassification(classification);
insert++;
when(classificationMapper.findByIdAndDomain(any(), any(), any())).thenReturn(classification);
//same domain
Classification classification2 = new Classification();
classification2.setId(classification.getId());
classification2.setDescription("TEST EVERYTHING");
classificationService.updateClassification(classification2);
insert++;
//different domain
Classification classification3 = new Classification();
classification3.setId(classification.getId());
classification3.setDomain("testDomain");
classificationService.updateClassification(classification3);
insert++;
verify(classificationMapper, times(1)).update(any()); // update when same domain
verify(classificationMapper, times(insert)).insert(any()); // insert all classifications
Assert.assertEquals(classification.getValidUntil(), Date.valueOf(LocalDate.now().minusDays(1)));
Assert.assertEquals(classification2.getValidUntil(), classification3.getValidUntil());
}
@Test
public void testGetClassification() throws ClassificationNotFoundException, SQLException {
doNothing().when(classificationMapper).insert(any());
doNothing().when(taskanaEngineImpl).openConnection();
doNothing().when(taskanaEngineImpl).returnConnection();
Classification classification = new Classification();
classification.setDomain("domain");
classificationService.addClassification(classification);
doReturn(classification).when(classificationMapper).findByIdAndDomain(any(), any(), any());
Classification test = classificationService.getClassification(classification.getId(), "domain");
Assert.assertEquals("domain", test.getDomain());
}
@Test
public void testFindAllClassifications() throws NotAuthorizedException {
doNothing().when(classificationMapper).insert(any());
doNothing().when(taskanaEngineImpl).openConnection();
doNothing().when(taskanaEngineImpl).returnConnection();
// insert Classifications
Classification classification0 = new Classification();
classificationService.addClassification(classification0);
Classification classification1 = new Classification();
classificationService.addClassification(classification1);
Classification classification2 = new Classification();
classification2.setParentClassificationId(classification0.getId());
classificationService.addClassification(classification2);
//update Classification1
Classification classification11 = new Classification();
classification11.setId(classification1.getId());
when(classificationMapper.findByIdAndDomain(any(), any(), any())).thenReturn(classification1);
classificationService.updateClassification(classification11);
public void testGetClassificationTree() throws NotAuthorizedException {
List<Classification> classifications = new ArrayList<>();
classifications.add(classification0);
classifications.add(classification1);
classifications.add(classification2);
classifications.add(classification11);
doReturn(new TestClassificationQuery(classifications)).when(classificationService).createClassificationQuery();
List<Classification> classificationList = classificationService.getClassificationTree();
doReturn(classificationQueryImplMock).when(cutSpy).createClassificationQuery();
doReturn(classificationQueryImplMock).when(classificationQueryImplMock).parentClassification("");
doReturn(classificationQueryImplMock).when(classificationQueryImplMock).validUntil(ClassificationServiceImpl.CURRENT_CLASSIFICATIONS_VALID_UNTIL);
doReturn(classifications).when(classificationQueryImplMock).list();
verify(classificationMapper, atLeast(2)).insert(any());
Assert.assertEquals(2 + 1, classificationList.size());
List<Classification> actaulResults = cutSpy.getClassificationTree();
verify(taskanaEngineImplMock, times(2)).openConnection();
verify(cutSpy, times(1)).createClassificationQuery();
verify(classificationQueryImplMock, times(1)).parentClassification("");
verify(classificationQueryImplMock, times(1)).validUntil(ClassificationServiceImpl.CURRENT_CLASSIFICATIONS_VALID_UNTIL);
verify(classificationQueryImplMock, times(1)).list();
verify(taskanaEngineImplMock, times(2)).returnConnection();
assertThat(actaulResults, equalTo(classifications));
}
@Test(expected = ClassificationAlreadyExistException.class)
public void testCreateClassificationAlreadyExisting() throws ClassificationAlreadyExistException, ClassificationNotFoundException {
Classification classification = createDummyCLassification();
doReturn(classification).when(cutSpy).getClassification(classification.getId(), classification.getDomain());
try {
cutSpy.createClassification(classification);
} catch (ClassificationAlreadyExistException e) {
verify(taskanaEngineImplMock, times(1)).openConnection();
verify(cutSpy, times(1)).getClassification(classification.getId(), classification.getDomain());
verify(taskanaEngineImplMock, times(1)).returnConnection();
verifyNoMoreInteractions(classificationMapperMock, taskanaEngineImplMock, classificationQueryImplMock);
throw e;
}
}
@Test
public void testClassificationQuery() throws NotAuthorizedException {
doNothing().when(classificationMapper).insert(any());
doNothing().when(taskanaEngineImpl).openConnection();
doNothing().when(taskanaEngineImpl).returnConnection();
Classification classification = new Classification();
classification.setDescription("DESC");
classificationService.addClassification(classification);
Classification classification1 = new Classification();
classification1.setDescription("ABC");
classificationService.addClassification(classification1);
public void testCreateClassificationInOwnDomain() throws ClassificationAlreadyExistException, ClassificationNotFoundException {
Classification classification = createDummyCLassification();
String domain = classification.getDomain();
doReturn(null).when(cutSpy).getClassification(classification.getId(), classification.getDomain());
List<Classification> classifications = new ArrayList<>();
classifications.add(classification);
classifications.add(classification1);
cutSpy.createClassification(classification);
doReturn(new TestClassificationQuery(classifications)).when(classificationService).createClassificationQuery();
verify(taskanaEngineImplMock, times(1)).openConnection();
verify(cutSpy, times(1)).getClassification(classification.getId(), domain);
verify(classificationMapperMock, times(2)).insert(any());
verify(taskanaEngineImplMock, times(1)).returnConnection();
verifyNoMoreInteractions(classificationMapperMock, taskanaEngineImplMock, classificationQueryImplMock);
assertThat(classification.getCreated(), equalTo(today));
assertThat(classification.getDomain(), equalTo(""));
assertThat(classification.getValidFrom(), equalTo(today));
assertThat(classification.getValidUntil(), equalTo(ClassificationServiceImpl.CURRENT_CLASSIFICATIONS_VALID_UNTIL));
}
List<Classification> classificationDESC = classificationService.createClassificationQuery().descriptionLike("DESC").list();
Assert.assertEquals(1, classificationDESC.size());
@Test
public void testCreateClassificationAsRoot() throws ClassificationAlreadyExistException, ClassificationNotFoundException {
Classification classification = createDummyCLassification();
classification.setDomain("");
doReturn(null).when(cutSpy).getClassification(classification.getId(), classification.getDomain());
cutSpy.createClassification(classification);
verify(taskanaEngineImplMock, times(1)).openConnection();
verify(cutSpy, times(1)).getClassification(classification.getId(), classification.getDomain());
verify(classificationMapperMock, times(1)).insert((ClassificationImpl) classification);
verify(taskanaEngineImplMock, times(1)).returnConnection();
verifyNoMoreInteractions(classificationMapperMock, taskanaEngineImplMock, classificationQueryImplMock);
assertThat(classification.getCreated(), equalTo(today));
assertThat(classification.getDomain(), equalTo(""));
assertThat(classification.getValidFrom(), equalTo(today));
assertThat(classification.getValidUntil(), equalTo(ClassificationServiceImpl.CURRENT_CLASSIFICATIONS_VALID_UNTIL));
}
@Test
public void testUpdateClassificationAtNewDomain() throws ClassificationNotFoundException {
Classification classification = createDummyCLassification();
Classification oldClassification = createDummyCLassification();
oldClassification.setDomain("");
doReturn(oldClassification).when(cutSpy).getClassification(classification.getId(), classification.getDomain());
cutSpy.updateClassification(classification);
verify(taskanaEngineImplMock, times(1)).openConnection();
verify(cutSpy, times(1)).getClassification(classification.getId(), classification.getDomain());
verify(classificationMapperMock, times(1)).insert((ClassificationImpl) classification);
verify(taskanaEngineImplMock, times(1)).returnConnection();
verifyNoMoreInteractions(classificationMapperMock, taskanaEngineImplMock, classificationQueryImplMock);
assertThat(classification.getCreated(), equalTo(today));
assertThat(classification.getValidFrom(), equalTo(today));
assertThat(classification.getValidUntil(), equalTo(ClassificationServiceImpl.CURRENT_CLASSIFICATIONS_VALID_UNTIL));
}
@Test
public void testUpdateClassificationAtSameDomain() throws ClassificationNotFoundException {
Classification classification = createDummyCLassification();
ClassificationImpl oldClassification = (ClassificationImpl) createDummyCLassification();
oldClassification.setValidUntil(Date.valueOf(LocalDate.now()));
Date yesterday = Date.valueOf(LocalDate.now().minusDays(1));
doReturn(oldClassification).when(cutSpy).getClassification(classification.getId(), classification.getDomain());
cutSpy.updateClassification(classification);
verify(taskanaEngineImplMock, times(1)).openConnection();
verify(cutSpy, times(1)).getClassification(classification.getId(), classification.getDomain());
verify(classificationMapperMock, times(1)).update(oldClassification);
verify(classificationMapperMock, times(1)).insert((ClassificationImpl) classification);
verify(taskanaEngineImplMock, times(1)).returnConnection();
verifyNoMoreInteractions(classificationMapperMock, taskanaEngineImplMock, classificationQueryImplMock);
assertThat(oldClassification.getValidUntil(), equalTo(yesterday));
}
@Test
public void testGetAllClassificationWithId() {
Classification dummyClassification = createDummyCLassification();
List<ClassificationImpl> classificationImpls = Arrays.asList(createDummyCLassificationImpl(), createDummyCLassificationImpl());
doReturn(classificationImpls).when(classificationMapperMock).getAllClassificationsWithId(dummyClassification.getId(), dummyClassification.getDomain());
List<Classification> actualResults = cutSpy.getAllClassificationsWithId(dummyClassification.getId(), dummyClassification.getDomain());
verify(taskanaEngineImplMock, times(1)).openConnection();
verify(classificationMapperMock, times(1)).getAllClassificationsWithId(dummyClassification.getId(), dummyClassification.getDomain());
verify(taskanaEngineImplMock, times(1)).returnConnection();
verifyNoMoreInteractions(classificationMapperMock, taskanaEngineImplMock, classificationQueryImplMock);
assertThat(actualResults.size(), equalTo(classificationImpls.size()));
}
@Test
public void testGetClassificationFromChildDomain() throws ClassificationNotFoundException {
Classification expectedClassification = createDummyCLassification();
doReturn(expectedClassification).when(classificationMapperMock)
.findByIdAndDomain(expectedClassification.getId(), expectedClassification.getDomain(), ClassificationServiceImpl.CURRENT_CLASSIFICATIONS_VALID_UNTIL);
Classification actualClassification = cutSpy.getClassification(expectedClassification.getId(), expectedClassification.getDomain());
verify(taskanaEngineImplMock, times(1)).openConnection();
verify(classificationMapperMock, times(1)).findByIdAndDomain(expectedClassification.getId(), expectedClassification.getDomain(), ClassificationServiceImpl.CURRENT_CLASSIFICATIONS_VALID_UNTIL);
verify(taskanaEngineImplMock, times(1)).returnConnection();
verifyNoMoreInteractions(classificationMapperMock, taskanaEngineImplMock, classificationQueryImplMock);
assertThat(actualClassification, equalTo(expectedClassification));
}
@Test
public void testGetClassificationFromRootDomain() throws ClassificationNotFoundException {
Classification classification = createDummyCLassification();
Classification expectedClassification = createDummyCLassification();
expectedClassification.setDomain("");
doReturn(null).when(classificationMapperMock)
.findByIdAndDomain(classification.getId(), classification.getDomain(), ClassificationServiceImpl.CURRENT_CLASSIFICATIONS_VALID_UNTIL);
doReturn(expectedClassification).when(classificationMapperMock)
.findByIdAndDomain(expectedClassification.getId(), expectedClassification.getDomain(), ClassificationServiceImpl.CURRENT_CLASSIFICATIONS_VALID_UNTIL);
Classification actualClassification = cutSpy.getClassification(classification.getId(), classification.getDomain());
verify(taskanaEngineImplMock, times(1)).openConnection();
verify(classificationMapperMock, times(1)).findByIdAndDomain(classification.getId(), classification.getDomain(), ClassificationServiceImpl.CURRENT_CLASSIFICATIONS_VALID_UNTIL);
verify(classificationMapperMock, times(1)).findByIdAndDomain(expectedClassification.getId(), "", ClassificationServiceImpl.CURRENT_CLASSIFICATIONS_VALID_UNTIL);
verify(taskanaEngineImplMock, times(1)).returnConnection();
verifyNoMoreInteractions(classificationMapperMock, taskanaEngineImplMock, classificationQueryImplMock);
assertThat(actualClassification, equalTo(expectedClassification));
}
@Test
public void testCreateClassificationQuery() {
cutSpy.createClassificationQuery();
verifyNoMoreInteractions(classificationMapperMock, taskanaEngineImplMock, classificationQueryImplMock);
}
@Test
public void testNewClassification() {
Classification actualResult = cutSpy.newClassification();
verifyNoMoreInteractions(classificationMapperMock, taskanaEngineImplMock, classificationQueryImplMock);
assertThat(actualResult.getId(), not(equalTo(null)));
assertThat(actualResult.getId(), startsWith(idPrefixClassification));
assertThat(actualResult.getCreated(), equalTo(today));
assertThat(actualResult.getParentClassificationId(), equalTo(""));
assertThat(actualResult.getDomain(), equalTo(""));
assertThat(actualResult.getValidFrom(), equalTo(today));
assertThat(actualResult.getValidUntil(), equalTo(ClassificationServiceImpl.CURRENT_CLASSIFICATIONS_VALID_UNTIL));
}
private Classification createDummyCLassification() {
ClassificationImpl classificationImpl = new ClassificationImpl();
classificationImpl.setDescription("A DUMMY FOR TESTING A SERVICE");
classificationImpl.setName("SERVICE-DUMMY");
classificationImpl.setDomain("test-domain");
classificationImpl.setServiceLevel("P2D");
classificationImpl.setId("ID: 1");
classificationImpl.setParentClassificationId("");
return (Classification) classificationImpl;
}
private ClassificationImpl createDummyCLassificationImpl() {
return (ClassificationImpl) createDummyCLassification();
}
}

View File

@ -1,5 +1,25 @@
package pro.taskana.impl;
import static org.hamcrest.core.IsEqual.equalTo;
import static org.hamcrest.core.IsNot.not;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertThat;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.Mockito.doNothing;
import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.doThrow;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.verifyNoMoreInteractions;
import java.sql.Date;
import java.sql.Timestamp;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
@ -8,30 +28,27 @@ import org.mockito.Mock;
import org.mockito.Mockito;
import org.mockito.MockitoAnnotations;
import org.mockito.junit.MockitoJUnitRunner;
import pro.taskana.Classification;
import pro.taskana.ClassificationService;
import pro.taskana.WorkbasketService;
import pro.taskana.configuration.TaskanaEngineConfiguration;
import pro.taskana.exceptions.ClassificationAlreadyExistException;
import pro.taskana.exceptions.ClassificationNotFoundException;
import pro.taskana.exceptions.NotAuthorizedException;
import pro.taskana.exceptions.TaskNotFoundException;
import pro.taskana.exceptions.WorkbasketNotFoundException;
import pro.taskana.model.*;
import pro.taskana.model.ClassificationImpl;
import pro.taskana.model.DueWorkbasketCounter;
import pro.taskana.model.ObjectReference;
import pro.taskana.model.Task;
import pro.taskana.model.TaskState;
import pro.taskana.model.TaskStateCounter;
import pro.taskana.model.Workbasket;
import pro.taskana.model.WorkbasketAuthorization;
import pro.taskana.model.mappings.ObjectReferenceMapper;
import pro.taskana.model.mappings.TaskMapper;
import java.sql.Date;
import java.sql.Timestamp;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import static org.hamcrest.core.IsEqual.equalTo;
import static org.hamcrest.core.IsNot.not;
import static org.junit.Assert.*;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.Mockito.*;
/**
* Unit Test for TaskServiceImpl.
* @author EH
@ -80,7 +97,7 @@ public class TaskServiceImplTest {
}
@Test
public void testCreateSimpleTask() throws NotAuthorizedException, WorkbasketNotFoundException, ClassificationNotFoundException {
public void testCreateSimpleTask() throws NotAuthorizedException, WorkbasketNotFoundException, ClassificationNotFoundException, ClassificationAlreadyExistException {
Mockito.doNothing().when(taskMapperMock).insert(any());
Task expectedTask = createUnitTestTask("1", "DUMMYTASK", "1");
@ -93,7 +110,7 @@ public class TaskServiceImplTest {
verify(workbasketServiceMock, times(1)).getWorkbasket(any());
verify(taskMapperMock, times(1)).insert(expectedTask);
verify(taskanaEngineImpl, times(1)).returnConnection();
verify(classificationServiceMock, times(1)).addClassification(any());
verify(classificationServiceMock, times(1)).createClassification(any());
verify(classificationServiceMock, times(1)).getClassification(any(), any());
verifyNoMoreInteractions(taskanaEngineConfigurationMock, taskanaEngineMock, taskanaEngineImpl,
taskMapperMock, objectReferenceMapperMock, workbasketServiceMock,
@ -109,7 +126,7 @@ public class TaskServiceImplTest {
}
@Test
public void testCreateSimpleTaskWithObjectReference() throws NotAuthorizedException, WorkbasketNotFoundException, ClassificationNotFoundException {
public void testCreateSimpleTaskWithObjectReference() throws NotAuthorizedException, WorkbasketNotFoundException, ClassificationNotFoundException, ClassificationAlreadyExistException {
ObjectReference expectedObjectReference = new ObjectReference();
expectedObjectReference.setId("1");
expectedObjectReference.setType("DUMMY");
@ -130,7 +147,7 @@ public class TaskServiceImplTest {
verify(objectReferenceMapperMock, times(1)).findByObjectReference(any());
verify(taskMapperMock, times(1)).insert(expectedTask);
verify(taskanaEngineImpl, times(1)).returnConnection();
verify(classificationServiceMock, times(1)).addClassification(any());
verify(classificationServiceMock, times(1)).createClassification(any());
verify(classificationServiceMock, times(1)).getClassification(any(),
any());
verifyNoMoreInteractions(taskanaEngineConfigurationMock, taskanaEngineMock, taskanaEngineImpl,
@ -148,7 +165,7 @@ public class TaskServiceImplTest {
}
@Test
public void testCreateSimpleTaskWithObjectReferenceIsNull() throws NotAuthorizedException, WorkbasketNotFoundException, ClassificationNotFoundException {
public void testCreateSimpleTaskWithObjectReferenceIsNull() throws NotAuthorizedException, WorkbasketNotFoundException, ClassificationNotFoundException, ClassificationAlreadyExistException {
ObjectReference expectedObjectReference = new ObjectReference();
expectedObjectReference.setId("1");
expectedObjectReference.setType("DUMMY");
@ -168,7 +185,7 @@ public class TaskServiceImplTest {
verify(taskanaEngineMock, times(1)).getClassificationService();
verify(workbasketServiceMock, times(1)).checkAuthorization(any(), any());
verify(workbasketServiceMock, times(1)).getWorkbasket(any());
verify(classificationServiceMock, times(1)).addClassification(any());
verify(classificationServiceMock, times(1)).createClassification(any());
verify(classificationServiceMock, times(1)).getClassification(any(), any());
verify(objectReferenceMapperMock, times(1)).findByObjectReference(any());
verify(objectReferenceMapperMock, times(1)).insert(any());
@ -194,7 +211,7 @@ public class TaskServiceImplTest {
expectedObjectReference.setId("1");
expectedObjectReference.setType("DUMMY");
Classification classification = new Classification();
Classification classification = (Classification) new ClassificationImpl();
classification.setName("Name");
classification.setCategory("MANUAL");
@ -332,7 +349,7 @@ public class TaskServiceImplTest {
}
@Test
public void testCompleteTask() throws TaskNotFoundException, InterruptedException {
public void testCompleteTask() throws TaskNotFoundException, InterruptedException, ClassificationAlreadyExistException {
Task expectedTask = createUnitTestTask("1", "Unit Test Task 1", "1");
Thread.sleep(SLEEP_TIME); // to have different timestamps
Mockito.doReturn(expectedTask).when(taskMapperMock).findById(expectedTask.getId());
@ -368,7 +385,7 @@ public class TaskServiceImplTest {
@Test
public void testTransferTaskToDestinationWorkbasketWithoutSecurity()
throws TaskNotFoundException, WorkbasketNotFoundException, NotAuthorizedException {
throws TaskNotFoundException, WorkbasketNotFoundException, NotAuthorizedException, ClassificationAlreadyExistException {
TaskServiceImpl cutSpy = Mockito.spy(cut);
Workbasket destinationWorkbasket = createWorkbasket("2");
Task task = createUnitTestTask("1", "Unit Test Task 1", "1");
@ -403,7 +420,7 @@ public class TaskServiceImplTest {
@Test
public void testTransferTaskToDestinationWorkbasketUsingSecurityTrue()
throws TaskNotFoundException, WorkbasketNotFoundException, NotAuthorizedException {
throws TaskNotFoundException, WorkbasketNotFoundException, NotAuthorizedException, ClassificationAlreadyExistException {
TaskServiceImpl cutSpy = Mockito.spy(cut);
Workbasket destinationWorkbasket = createWorkbasket("2");
Task task = createUnitTestTask("1", "Unit Test Task 1", "1");
@ -435,7 +452,7 @@ public class TaskServiceImplTest {
@Test(expected = WorkbasketNotFoundException.class)
public void testTransferDestinationWorkbasketDoesNotExist()
throws TaskNotFoundException, WorkbasketNotFoundException, NotAuthorizedException {
throws TaskNotFoundException, WorkbasketNotFoundException, NotAuthorizedException, ClassificationAlreadyExistException {
String destinationWorkbasketId = "2";
Task task = createUnitTestTask("1", "Unit Test Task 1", "1");
@ -458,7 +475,7 @@ public class TaskServiceImplTest {
@Test(expected = TaskNotFoundException.class)
public void testTransferTaskDoesNotExist()
throws TaskNotFoundException, WorkbasketNotFoundException, NotAuthorizedException {
throws TaskNotFoundException, WorkbasketNotFoundException, NotAuthorizedException, ClassificationAlreadyExistException {
Task task = createUnitTestTask("1", "Unit Test Task 1", "1");
TaskServiceImpl cutSpy = Mockito.spy(cut);
@ -477,7 +494,7 @@ public class TaskServiceImplTest {
@Test(expected = NotAuthorizedException.class)
public void testTransferNotAuthorizationOnWorkbasketAppend()
throws TaskNotFoundException, WorkbasketNotFoundException, NotAuthorizedException {
throws TaskNotFoundException, WorkbasketNotFoundException, NotAuthorizedException, ClassificationAlreadyExistException {
String destinationWorkbasketId = "2";
Task task = createUnitTestTask("1", "Unit Test Task 1", "1");
TaskServiceImpl cutSpy = Mockito.spy(cut);
@ -499,7 +516,7 @@ public class TaskServiceImplTest {
@Test(expected = NotAuthorizedException.class)
public void testTransferNotAuthorizationOnWorkbasketTransfer()
throws TaskNotFoundException, WorkbasketNotFoundException, NotAuthorizedException {
throws TaskNotFoundException, WorkbasketNotFoundException, NotAuthorizedException, ClassificationAlreadyExistException {
String destinationWorkbasketId = "2";
Task task = createUnitTestTask("1", "Unit Test Task 1", "1");
TaskServiceImpl cutSpy = Mockito.spy(cut);
@ -573,7 +590,7 @@ public class TaskServiceImplTest {
}
@Test
public void testSetTaskReadWIthExistingTask() throws TaskNotFoundException {
public void testSetTaskReadWIthExistingTask() throws TaskNotFoundException, ClassificationAlreadyExistException {
TaskServiceImpl cutSpy = Mockito.spy(cut);
Task task = createUnitTestTask("1", "Unit Test Task 1", "1");
task.setModified(null);
@ -592,7 +609,7 @@ public class TaskServiceImplTest {
}
@Test(expected = TaskNotFoundException.class)
public void testSetTaskReadTaskNotBeFound() throws TaskNotFoundException {
public void testSetTaskReadTaskNotBeFound() throws TaskNotFoundException, ClassificationAlreadyExistException {
TaskServiceImpl cutSpy = Mockito.spy(cut);
Task task = createUnitTestTask("1", "Unit Test Task 1", "1");
task.setModified(null);
@ -610,7 +627,7 @@ public class TaskServiceImplTest {
}
@Test
public void testGetTaskByIdWithExistingTask() throws TaskNotFoundException {
public void testGetTaskByIdWithExistingTask() throws TaskNotFoundException, ClassificationAlreadyExistException {
Task expectedTask = createUnitTestTask("1", "DUMMY-TASK", "1");
doReturn(expectedTask).when(taskMapperMock).findById(expectedTask.getId());
@ -641,7 +658,7 @@ public class TaskServiceImplTest {
}
}
private Task createUnitTestTask(String id, String name, String workbasketId) {
private Task createUnitTestTask(String id, String name, String workbasketId) throws ClassificationAlreadyExistException {
Task task = new Task();
task.setId(id);
task.setName(name);
@ -649,8 +666,8 @@ public class TaskServiceImplTest {
Timestamp now = new Timestamp(System.currentTimeMillis());
task.setCreated(now);
task.setModified(now);
Classification classification = new Classification();
classificationServiceMock.addClassification(classification);
Classification classification = (Classification) new ClassificationImpl();
classificationServiceMock.createClassification(classification);
task.setClassification(classification);
return task;
}

View File

@ -1,24 +1,25 @@
package pro.taskana.impl;
import pro.taskana.ClassificationQuery;
import pro.taskana.exceptions.NotAuthorizedException;
import pro.taskana.model.Classification;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import pro.taskana.Classification;
import pro.taskana.ClassificationQuery;
import pro.taskana.exceptions.NotAuthorizedException;
import pro.taskana.model.ClassificationImpl;
/**
* Created by BV on 26.10.2017.
*/
public class TestClassificationQuery implements ClassificationQuery {
private List<Classification> classifications;
private List<ClassificationImpl> classifications;
private String[] parentId;
private Date[] validUntil;
private String description;
public TestClassificationQuery(List<Classification> classifications) {
public TestClassificationQuery(List<ClassificationImpl> classifications) {
this.classifications = classifications;
}
@ -95,7 +96,7 @@ public class TestClassificationQuery implements ClassificationQuery {
public List<Classification> list() throws NotAuthorizedException {
List<Classification> returnedClassifications = new ArrayList<>();
returnedClassifications.addAll(classifications);
for (Classification classification : classifications) {
for (ClassificationImpl classification : classifications) {
if (this.validUntil != null) {
boolean validDate = false;
for (Date valid : validUntil) {
@ -138,7 +139,7 @@ public class TestClassificationQuery implements ClassificationQuery {
}
@Override
public Classification single() throws NotAuthorizedException {
public ClassificationImpl single() throws NotAuthorizedException {
return null;
}
}

View File

@ -1,25 +1,34 @@
package pro.taskana.impl.integration;
import java.io.FileNotFoundException;
import java.sql.Date;
import java.sql.SQLException;
import java.time.LocalDate;
import java.util.ArrayList;
import java.util.List;
import javax.security.auth.login.LoginException;
import javax.sql.DataSource;
import org.h2.store.fs.FileUtils;
import org.junit.*;
import org.junit.AfterClass;
import org.junit.Assert;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;
import pro.taskana.Classification;
import pro.taskana.ClassificationService;
import pro.taskana.TaskanaEngine;
import pro.taskana.TaskanaEngine.ConnectionManagementMode;
import pro.taskana.configuration.TaskanaEngineConfiguration;
import pro.taskana.exceptions.ClassificationAlreadyExistException;
import pro.taskana.exceptions.ClassificationNotFoundException;
import pro.taskana.exceptions.NotAuthorizedException;
import pro.taskana.impl.TaskanaEngineImpl;
import pro.taskana.impl.configuration.DBCleaner;
import pro.taskana.impl.configuration.TaskanaEngineConfigurationTest;
import pro.taskana.model.Classification;
import javax.security.auth.login.LoginException;
import javax.sql.DataSource;
import java.io.FileNotFoundException;
import java.sql.Date;
import java.sql.SQLException;
import java.time.LocalDate;
import java.util.List;
import pro.taskana.model.ClassificationImpl;
/**
* Integration Test for ClassificationServiceImpl with connection management mode AUTOCOMMIT.
@ -54,31 +63,31 @@ public class ClassificationServiceImplIntAutoCommitTest {
}
@Test
public void testInsertClassification() throws ClassificationNotFoundException {
Classification classification = new Classification();
classificationService.addClassification(classification);
public void testInsertClassification() throws ClassificationAlreadyExistException, ClassificationNotFoundException {
ClassificationImpl classification = new ClassificationImpl();
classificationService.createClassification(classification);
Assert.assertNotNull(classificationService.getClassification(classification.getId(), ""));
}
@Test
public void testFindAllClassifications() throws NotAuthorizedException {
Classification classification0 = new Classification();
classificationService.addClassification(classification0);
Classification classification1 = new Classification();
classificationService.addClassification(classification1);
Classification classification2 = new Classification();
public void testFindAllClassifications() throws NotAuthorizedException, ClassificationAlreadyExistException {
ClassificationImpl classification0 = new ClassificationImpl();
classificationService.createClassification(classification0);
ClassificationImpl classification1 = new ClassificationImpl();
classificationService.createClassification(classification1);
ClassificationImpl classification2 = new ClassificationImpl();
classification2.setParentClassificationId(classification0.getId());
classificationService.addClassification(classification2);
classificationService.createClassification(classification2);
Assert.assertEquals(2 + 1, classificationService.getClassificationTree().size());
}
@Test
public void testModifiedClassification() {
public void testModifiedClassification() throws ClassificationAlreadyExistException, ClassificationNotFoundException {
Classification classification = new Classification();
classificationService.addClassification(classification);
ClassificationImpl classification = new ClassificationImpl();
classificationService.createClassification(classification);
classification.setDescription("TEST SOMETHING");
classificationService.updateClassification(classification);
@ -86,18 +95,18 @@ public class ClassificationServiceImplIntAutoCommitTest {
}
@Test
public void testInsertAndClassificationMapper() throws NotAuthorizedException {
Classification classification = new Classification();
classificationService.addClassification(classification);
public void testInsertAndClassificationMapper() throws NotAuthorizedException, ClassificationAlreadyExistException {
ClassificationImpl classification = new ClassificationImpl();
classificationService.createClassification(classification);
Date today = Date.valueOf(LocalDate.now());
List<Classification> list = classificationService.createClassificationQuery().validInDomain(Boolean.TRUE).created(today).validFrom(today).validUntil(Date.valueOf("9999-12-31")).list();
Assert.assertEquals(1, list.size());
}
@Test
public void testUpdateAndClassificationMapper() throws NotAuthorizedException {
Classification classification = new Classification();
classificationService.addClassification(classification);
public void testUpdateAndClassificationMapper() throws NotAuthorizedException, ClassificationAlreadyExistException, ClassificationNotFoundException {
ClassificationImpl classification = new ClassificationImpl();
classificationService.createClassification(classification);
System.out.println(classification.getId());
classification.setDescription("description");
classificationService.updateClassification(classification);
@ -115,24 +124,26 @@ public class ClassificationServiceImplIntAutoCommitTest {
System.out.println(classification.getParentClassificationId());
List<Classification> allClassifications = classificationService.getClassificationTree();
List<Classification> temp = classificationService.getClassificationTree();
List<ClassificationImpl> allClassifications = new ArrayList<>();
temp.stream().forEach(c -> allClassifications.add((ClassificationImpl) c));
Assert.assertEquals(2, allClassifications.size());
}
@Test
public void testFindWithClassificationMapperDomainAndCategory() throws NotAuthorizedException {
Classification classification1 = new Classification();
public void testFindWithClassificationMapperDomainAndCategory() throws NotAuthorizedException, ClassificationAlreadyExistException {
ClassificationImpl classification1 = new ClassificationImpl();
classification1.setDomain("domain1");
classification1.setCategory("category1");
classificationService.addClassification(classification1);
Classification classification2 = new Classification();
classificationService.createClassification(classification1);
ClassificationImpl classification2 = new ClassificationImpl();
classification2.setDomain("domain2");
classification2.setCategory("category1");
classificationService.addClassification(classification2);
Classification classification3 = new Classification();
classificationService.createClassification(classification2);
ClassificationImpl classification3 = new ClassificationImpl();
classification3.setDomain("domain1");
classification3.setCategory("category2");
classificationService.addClassification(classification3);
classificationService.createClassification(classification3);
List<Classification> list = classificationService.createClassificationQuery().category("category1").domain("domain1").list();
Assert.assertEquals(1, list.size());
@ -141,26 +152,26 @@ public class ClassificationServiceImplIntAutoCommitTest {
}
@Test
public void testFindWithClassificationMapperCustomAndCategory() throws NotAuthorizedException {
Classification classification1 = new Classification();
public void testFindWithClassificationMapperCustomAndCategory() throws NotAuthorizedException, ClassificationAlreadyExistException {
ClassificationImpl classification1 = new ClassificationImpl();
classification1.setDescription("DESC1");
classification1.setCategory("category1");
classificationService.addClassification(classification1);
Classification classification2 = new Classification();
classificationService.createClassification(classification1);
ClassificationImpl classification2 = new ClassificationImpl();
classification2.setDescription("DESC1");
classification2.setCustom1("custom1");
classification2.setCategory("category1");
classificationService.addClassification(classification2);
Classification classification3 = new Classification();
classificationService.createClassification(classification2);
ClassificationImpl classification3 = new ClassificationImpl();
classification3.setCustom1("custom2");
classification3.setCustom2("custom1");
classification3.setCategory("category2");
classificationService.addClassification(classification3);
Classification classification4 = new Classification();
classificationService.createClassification(classification3);
ClassificationImpl classification4 = new ClassificationImpl();
classification4.setDescription("description2");
classification4.setCustom8("custom2");
classification4.setCategory("category1");
classificationService.addClassification(classification4);
classificationService.createClassification(classification4);
List<Classification> list = classificationService.createClassificationQuery().descriptionLike("DESC1").customFields("custom1").list();
Assert.assertEquals(1, list.size());
@ -171,26 +182,26 @@ public class ClassificationServiceImplIntAutoCommitTest {
}
@Test
public void testFindWithClassificationMapperPriorityTypeAndParent() throws NotAuthorizedException {
Classification classification = new Classification();
public void testFindWithClassificationMapperPriorityTypeAndParent() throws NotAuthorizedException, ClassificationAlreadyExistException {
ClassificationImpl classification = new ClassificationImpl();
classification.setPriority(Integer.decode("5"));
classification.setType("type1");
classificationService.addClassification(classification);
Classification classification1 = new Classification();
classificationService.createClassification(classification);
ClassificationImpl classification1 = new ClassificationImpl();
classification1.setPriority(Integer.decode("3"));
classification1.setType("type1");
classification1.setParentClassificationId(classification.getId());
classificationService.addClassification(classification1);
Classification classification2 = new Classification();
classificationService.createClassification(classification1);
ClassificationImpl classification2 = new ClassificationImpl();
classification2.setPriority(Integer.decode("5"));
classification2.setType("type2");
classification2.setParentClassificationId(classification.getId());
classificationService.addClassification(classification2);
Classification classification3 = new Classification();
classificationService.createClassification(classification2);
ClassificationImpl classification3 = new ClassificationImpl();
classification3.setPriority(Integer.decode("5"));
classification3.setType("type1");
classification3.setParentClassificationId(classification1.getId());
classificationService.addClassification(classification3);
classificationService.createClassification(classification3);
List<Classification> list = classificationService.createClassificationQuery().parentClassification(classification.getId()).list();
Assert.assertEquals(2, list.size());
@ -201,30 +212,30 @@ public class ClassificationServiceImplIntAutoCommitTest {
}
@Test
public void testFindWithClassificationMapperServiceLevelNameAndDescription() throws NotAuthorizedException {
public void testFindWithClassificationMapperServiceLevelNameAndDescription() throws NotAuthorizedException, ClassificationAlreadyExistException {
int all = 0;
Classification classification = new Classification();
ClassificationImpl classification = new ClassificationImpl();
classification.setServiceLevel("P1D");
classification.setName("name1");
classification.setDescription("desc");
classificationService.addClassification(classification);
classificationService.createClassification(classification);
all++;
Classification classification1 = new Classification();
ClassificationImpl classification1 = new ClassificationImpl();
classification1.setServiceLevel("P1DT1H");
classification1.setName("name1");
classification1.setDescription("desc");
classificationService.addClassification(classification1);
classificationService.createClassification(classification1);
all++;
Classification classification2 = new Classification();
ClassificationImpl classification2 = new ClassificationImpl();
classification2.setServiceLevel("P1D");
classification2.setName("name");
classification2.setDescription("desc");
classificationService.addClassification(classification2);
classificationService.createClassification(classification2);
all++;
Classification classification3 = new Classification();
ClassificationImpl classification3 = new ClassificationImpl();
classification3.setName("name1");
classification3.setDescription("description");
classificationService.addClassification(classification3);
classificationService.createClassification(classification3);
all++;
List<Classification> list = classificationService.createClassificationQuery().name("name").list();
@ -238,11 +249,11 @@ public class ClassificationServiceImplIntAutoCommitTest {
}
@Test
public void testDefaultSettingsWithClassificationMapper() throws NotAuthorizedException {
Classification classification = new Classification();
Classification classification1 = new Classification();
classificationService.addClassification(classification);
classificationService.addClassification(classification1);
public void testDefaultSettingsWithClassificationMapper() throws NotAuthorizedException, ClassificationAlreadyExistException, ClassificationNotFoundException {
ClassificationImpl classification = new ClassificationImpl();
ClassificationImpl classification1 = new ClassificationImpl();
classificationService.createClassification(classification);
classificationService.createClassification(classification1);
classification1.setParentClassificationId(classification.getId());
classificationService.updateClassification(classification1);

View File

@ -1,20 +1,5 @@
package pro.taskana.impl.integration;
import org.h2.store.fs.FileUtils;
import org.junit.*;
import pro.taskana.ClassificationService;
import pro.taskana.TaskanaEngine;
import pro.taskana.TaskanaEngine.ConnectionManagementMode;
import pro.taskana.configuration.TaskanaEngineConfiguration;
import pro.taskana.exceptions.ClassificationNotFoundException;
import pro.taskana.exceptions.NotAuthorizedException;
import pro.taskana.impl.TaskanaEngineImpl;
import pro.taskana.impl.configuration.DBCleaner;
import pro.taskana.impl.configuration.TaskanaEngineConfigurationTest;
import pro.taskana.model.Classification;
import javax.security.auth.login.LoginException;
import javax.sql.DataSource;
import java.io.FileNotFoundException;
import java.sql.Connection;
import java.sql.Date;
@ -22,6 +7,30 @@ import java.sql.SQLException;
import java.time.LocalDate;
import java.util.List;
import javax.security.auth.login.LoginException;
import javax.sql.DataSource;
import org.h2.store.fs.FileUtils;
import org.junit.After;
import org.junit.AfterClass;
import org.junit.Assert;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;
import pro.taskana.Classification;
import pro.taskana.ClassificationService;
import pro.taskana.TaskanaEngine;
import pro.taskana.TaskanaEngine.ConnectionManagementMode;
import pro.taskana.configuration.TaskanaEngineConfiguration;
import pro.taskana.exceptions.ClassificationAlreadyExistException;
import pro.taskana.exceptions.ClassificationNotFoundException;
import pro.taskana.exceptions.NotAuthorizedException;
import pro.taskana.impl.TaskanaEngineImpl;
import pro.taskana.impl.configuration.DBCleaner;
import pro.taskana.impl.configuration.TaskanaEngineConfigurationTest;
import pro.taskana.model.ClassificationImpl;
/**
* Integration Test for ClassificationServiceImpl with connection management mode EXPLICIT.
* @author BBR
@ -56,41 +65,41 @@ public class ClassificationServiceImplIntExplicitTest {
}
@Test
public void testInsertClassification() throws SQLException, ClassificationNotFoundException {
public void testInsertClassification() throws SQLException, ClassificationNotFoundException, ClassificationAlreadyExistException {
Connection connection = dataSource.getConnection();
taskanaEngineImpl.setConnection(connection);
Classification classification = new Classification();
classificationService.addClassification(classification);
ClassificationImpl classification = new ClassificationImpl();
classificationService.createClassification(classification);
Assert.assertNotNull(classificationService.getClassification(classification.getId(), ""));
connection.commit();
}
@Test
public void testFindAllClassifications() throws NotAuthorizedException, SQLException {
public void testFindAllClassifications() throws NotAuthorizedException, SQLException, ClassificationAlreadyExistException {
Connection connection = dataSource.getConnection();
taskanaEngineImpl.setConnection(connection);
Classification classification0 = new Classification();
classificationService.addClassification(classification0);
Classification classification1 = new Classification();
classificationService.addClassification(classification1);
Classification classification2 = new Classification();
ClassificationImpl classification0 = new ClassificationImpl();
classificationService.createClassification(classification0);
ClassificationImpl classification1 = new ClassificationImpl();
classificationService.createClassification(classification1);
ClassificationImpl classification2 = new ClassificationImpl();
classification2.setParentClassificationId(classification0.getId());
classificationService.addClassification(classification2);
classificationService.createClassification(classification2);
Assert.assertEquals(2 + 1, classificationService.getClassificationTree().size());
connection.commit();
}
@Test
public void testModifiedClassification() throws SQLException {
public void testModifiedClassification() throws SQLException, ClassificationAlreadyExistException, ClassificationNotFoundException {
Connection connection = dataSource.getConnection();
taskanaEngineImpl.setConnection(connection);
Classification classification = new Classification();
ClassificationImpl classification = new ClassificationImpl();
connection.commit();
classificationService.addClassification(classification);
classificationService.createClassification(classification);
classification.setDescription("TEST SOMETHING");
classificationService.updateClassification(classification);
connection.commit();
@ -98,22 +107,22 @@ public class ClassificationServiceImplIntExplicitTest {
}
@Test
public void testInsertAndClassificationMapper() throws NotAuthorizedException, SQLException {
public void testInsertAndClassificationMapper() throws NotAuthorizedException, SQLException, ClassificationAlreadyExistException {
Connection connection = dataSource.getConnection();
taskanaEngineImpl.setConnection(connection);
Classification classification = new Classification();
classificationService.addClassification(classification);
ClassificationImpl classification = new ClassificationImpl();
classificationService.createClassification(classification);
Date today = Date.valueOf(LocalDate.now());
List<Classification> list = classificationService.createClassificationQuery().validInDomain(Boolean.TRUE).created(today).validFrom(today).validUntil(Date.valueOf("9999-12-31")).list();
Assert.assertEquals(1, list.size());
}
@Test
public void testUpdateAndClassificationMapper() throws NotAuthorizedException, SQLException {
public void testUpdateAndClassificationMapper() throws NotAuthorizedException, SQLException, ClassificationAlreadyExistException, ClassificationNotFoundException {
Connection connection = dataSource.getConnection();
taskanaEngineImpl.setConnection(connection);
Classification classification = new Classification();
classificationService.addClassification(classification);
ClassificationImpl classification = new ClassificationImpl();
classificationService.createClassification(classification);
System.out.println(classification.getId());
classification.setDescription("description");
classificationService.updateClassification(classification);
@ -137,21 +146,21 @@ public class ClassificationServiceImplIntExplicitTest {
}
@Test
public void testFindWithClassificationMapperDomainAndCategory() throws NotAuthorizedException, SQLException {
public void testFindWithClassificationMapperDomainAndCategory() throws NotAuthorizedException, SQLException, ClassificationAlreadyExistException {
Connection connection = dataSource.getConnection();
taskanaEngineImpl.setConnection(connection);
Classification classification1 = new Classification();
ClassificationImpl classification1 = new ClassificationImpl();
classification1.setDomain("domain1");
classification1.setCategory("category1");
classificationService.addClassification(classification1);
Classification classification2 = new Classification();
classificationService.createClassification(classification1);
ClassificationImpl classification2 = new ClassificationImpl();
classification2.setDomain("domain2");
classification2.setCategory("category1");
classificationService.addClassification(classification2);
Classification classification3 = new Classification();
classificationService.createClassification(classification2);
ClassificationImpl classification3 = new ClassificationImpl();
classification3.setDomain("domain1");
classification3.setCategory("category2");
classificationService.addClassification(classification3);
classificationService.createClassification(classification3);
List<Classification> list = classificationService.createClassificationQuery().category("category1").domain("domain1").list();
Assert.assertEquals(1, list.size());
@ -161,28 +170,28 @@ public class ClassificationServiceImplIntExplicitTest {
}
@Test
public void testFindWithClassificationMapperCustomAndCategory() throws NotAuthorizedException, SQLException {
public void testFindWithClassificationMapperCustomAndCategory() throws NotAuthorizedException, SQLException, ClassificationAlreadyExistException {
Connection connection = dataSource.getConnection();
taskanaEngineImpl.setConnection(connection);
Classification classification1 = new Classification();
ClassificationImpl classification1 = new ClassificationImpl();
classification1.setDescription("DESC1");
classification1.setCategory("category1");
classificationService.addClassification(classification1);
Classification classification2 = new Classification();
classificationService.createClassification(classification1);
ClassificationImpl classification2 = new ClassificationImpl();
classification2.setDescription("DESC1");
classification2.setCustom1("custom1");
classification2.setCategory("category1");
classificationService.addClassification(classification2);
Classification classification3 = new Classification();
classificationService.createClassification(classification2);
ClassificationImpl classification3 = new ClassificationImpl();
classification3.setCustom1("custom2");
classification3.setCustom2("custom1");
classification3.setCategory("category2");
classificationService.addClassification(classification3);
Classification classification4 = new Classification();
classificationService.createClassification(classification3);
ClassificationImpl classification4 = new ClassificationImpl();
classification4.setDescription("description2");
classification4.setCustom8("custom2");
classification4.setCategory("category1");
classificationService.addClassification(classification4);
classificationService.createClassification(classification4);
List<Classification> list = classificationService.createClassificationQuery().descriptionLike("DESC1").customFields("custom1").list();
Assert.assertEquals(1, list.size());
@ -194,28 +203,28 @@ public class ClassificationServiceImplIntExplicitTest {
}
@Test
public void testFindWithClassificationMapperPriorityTypeAndParent() throws NotAuthorizedException, SQLException {
public void testFindWithClassificationMapperPriorityTypeAndParent() throws NotAuthorizedException, SQLException, ClassificationAlreadyExistException {
Connection connection = dataSource.getConnection();
taskanaEngineImpl.setConnection(connection);
Classification classification = new Classification();
ClassificationImpl classification = new ClassificationImpl();
classification.setPriority(Integer.decode("5"));
classification.setType("type1");
classificationService.addClassification(classification);
Classification classification1 = new Classification();
classificationService.createClassification(classification);
ClassificationImpl classification1 = new ClassificationImpl();
classification1.setPriority(Integer.decode("3"));
classification1.setType("type1");
classification1.setParentClassificationId(classification.getId());
classificationService.addClassification(classification1);
Classification classification2 = new Classification();
classificationService.createClassification(classification1);
ClassificationImpl classification2 = new ClassificationImpl();
classification2.setPriority(Integer.decode("5"));
classification2.setType("type2");
classification2.setParentClassificationId(classification.getId());
classificationService.addClassification(classification2);
Classification classification3 = new Classification();
classificationService.createClassification(classification2);
ClassificationImpl classification3 = new ClassificationImpl();
classification3.setPriority(Integer.decode("5"));
classification3.setType("type1");
classification3.setParentClassificationId(classification1.getId());
classificationService.addClassification(classification3);
classificationService.createClassification(classification3);
List<Classification> list = classificationService.createClassificationQuery().parentClassification(classification.getId()).list();
Assert.assertEquals(2, list.size());
@ -227,32 +236,32 @@ public class ClassificationServiceImplIntExplicitTest {
}
@Test
public void testFindWithClassificationMapperServiceLevelNameAndDescription() throws NotAuthorizedException, SQLException {
public void testFindWithClassificationMapperServiceLevelNameAndDescription() throws NotAuthorizedException, SQLException, ClassificationAlreadyExistException {
Connection connection = dataSource.getConnection();
taskanaEngineImpl.setConnection(connection);
int all = 0;
Classification classification = new Classification();
ClassificationImpl classification = new ClassificationImpl();
classification.setServiceLevel("P1D");
classification.setName("name1");
classification.setDescription("desc");
classificationService.addClassification(classification);
classificationService.createClassification(classification);
all++;
Classification classification1 = new Classification();
ClassificationImpl classification1 = new ClassificationImpl();
classification1.setServiceLevel("P1DT1H");
classification1.setName("name1");
classification1.setDescription("desc");
classificationService.addClassification(classification1);
classificationService.createClassification(classification1);
all++;
Classification classification2 = new Classification();
ClassificationImpl classification2 = new ClassificationImpl();
classification2.setServiceLevel("P1D");
classification2.setName("name");
classification2.setDescription("desc");
classificationService.addClassification(classification2);
classificationService.createClassification(classification2);
all++;
Classification classification3 = new Classification();
ClassificationImpl classification3 = new ClassificationImpl();
classification3.setName("name1");
classification3.setDescription("description");
classificationService.addClassification(classification3);
classificationService.createClassification(classification3);
all++;
List<Classification> list = classificationService.createClassificationQuery().name("name").list();
@ -267,18 +276,17 @@ public class ClassificationServiceImplIntExplicitTest {
}
@Test
public void testDefaultSettingsWithClassificationMapper() throws NotAuthorizedException, SQLException {
public void testDefaultSettingsWithClassificationMapper() throws NotAuthorizedException, SQLException, ClassificationAlreadyExistException, ClassificationNotFoundException {
Connection connection = dataSource.getConnection();
taskanaEngineImpl.setConnection(connection);
Classification classification = new Classification();
Classification classification1 = new Classification();
classificationService.addClassification(classification);
classificationService.addClassification(classification1);
ClassificationImpl classification = new ClassificationImpl();
ClassificationImpl classification1 = new ClassificationImpl();
classificationService.createClassification(classification);
classificationService.createClassification(classification1);
classification1.setParentClassificationId(classification.getId());
classificationService.updateClassification(classification1);
List<Classification>
list = classificationService.createClassificationQuery().parentClassification("").list();
List<Classification> list = classificationService.createClassificationQuery().parentClassification("").list();
Assert.assertEquals(2, list.size());
list = classificationService.createClassificationQuery().validUntil(Date.valueOf("9999-12-31")).list();
Assert.assertEquals(2, list.size());

View File

@ -1,32 +1,39 @@
package pro.taskana.impl.integration;
import static org.hamcrest.CoreMatchers.equalTo;
import static org.junit.Assert.assertThat;
import java.io.FileNotFoundException;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import javax.security.auth.login.LoginException;
import javax.sql.DataSource;
import org.h2.store.fs.FileUtils;
import org.junit.AfterClass;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;
import pro.taskana.Classification;
import pro.taskana.TaskanaEngine;
import pro.taskana.TaskanaEngine.ConnectionManagementMode;
import pro.taskana.configuration.TaskanaEngineConfiguration;
import pro.taskana.exceptions.WorkbasketNotFoundException;
import pro.taskana.impl.*;
import pro.taskana.impl.ClassificationServiceImpl;
import pro.taskana.impl.SummaryServiceImpl;
import pro.taskana.impl.TaskServiceImpl;
import pro.taskana.impl.TaskanaEngineImpl;
import pro.taskana.impl.WorkbasketServiceImpl;
import pro.taskana.impl.configuration.DBCleaner;
import pro.taskana.impl.configuration.TaskanaEngineConfigurationTest;
import pro.taskana.model.Classification;
import pro.taskana.model.ClassificationImpl;
import pro.taskana.model.Task;
import pro.taskana.model.TaskSummary;
import pro.taskana.model.Workbasket;
import javax.security.auth.login.LoginException;
import javax.sql.DataSource;
import java.io.FileNotFoundException;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import static org.hamcrest.CoreMatchers.equalTo;
import static org.junit.Assert.assertThat;
/**
* Testing {@link SummaryServiceImpl} with real DB-Connection and
* real results.
@ -86,7 +93,6 @@ public class SummaryServiceImplIntAutoCommitTest {
List<TaskSummary> actualTaskSumamryResult = summaryServiceImp.getTaskSummariesByWorkbasketId(dummyWorkbasket.getId());
assertThat(actualTaskSumamryResult, equalTo(expectedTaskSumamries));
assertThat(actualTaskSumamryResult.size(), equalTo(expectedTaskSumamries.size()));
}
@ -110,10 +116,10 @@ public class SummaryServiceImplIntAutoCommitTest {
dummyWorkbasket.setName("Dummy-Basket");
dummyWorkbasket = workbasketServiceImpl.createWorkbasket(dummyWorkbasket);
dummyClassification = new Classification();
dummyClassification = new ClassificationImpl();
dummyClassification.setId("1");
dummyClassification.setName("Dummy-Classification");
classificationServiceImpl.addClassification(dummyClassification);
classificationServiceImpl.createClassification(dummyClassification);
dummyTask = new Task();
dummyTask.setId("1");

View File

@ -1,12 +1,26 @@
package pro.taskana.impl.integration;
import java.io.FileNotFoundException;
import java.sql.SQLException;
import java.util.List;
import javax.security.auth.login.LoginException;
import javax.sql.DataSource;
import org.h2.store.fs.FileUtils;
import org.junit.*;
import org.junit.AfterClass;
import org.junit.Assert;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;
import pro.taskana.Classification;
import pro.taskana.ClassificationQuery;
import pro.taskana.ObjectReferenceQuery;
import pro.taskana.TaskanaEngine;
import pro.taskana.TaskanaEngine.ConnectionManagementMode;
import pro.taskana.configuration.TaskanaEngineConfiguration;
import pro.taskana.exceptions.ClassificationAlreadyExistException;
import pro.taskana.exceptions.ClassificationNotFoundException;
import pro.taskana.exceptions.NotAuthorizedException;
import pro.taskana.exceptions.TaskNotFoundException;
@ -17,17 +31,11 @@ import pro.taskana.impl.TaskServiceImpl;
import pro.taskana.impl.TaskanaEngineImpl;
import pro.taskana.impl.configuration.DBCleaner;
import pro.taskana.impl.configuration.TaskanaEngineConfigurationTest;
import pro.taskana.model.Classification;
import pro.taskana.model.ClassificationImpl;
import pro.taskana.model.Task;
import pro.taskana.model.TaskState;
import pro.taskana.model.Workbasket;
import javax.security.auth.login.LoginException;
import javax.sql.DataSource;
import java.io.FileNotFoundException;
import java.sql.SQLException;
import java.util.List;
/**
* Integration Test for TaskServiceImpl transactions with connection management mode AUTOCOMMIT.
* @author EH
@ -62,12 +70,12 @@ public class TaskServiceImplIntAutocommitTest {
@Test
public void testStart() throws FileNotFoundException, SQLException, TaskNotFoundException,
WorkbasketNotFoundException, NotAuthorizedException, ClassificationNotFoundException {
WorkbasketNotFoundException, NotAuthorizedException, ClassificationNotFoundException, ClassificationAlreadyExistException {
Workbasket wb = new Workbasket();
wb.setName("workbasket");
taskanaEngine.getWorkbasketService().createWorkbasket(wb);
Classification classification = new Classification();
taskanaEngine.getClassificationService().addClassification(classification);
Classification classification = (Classification) new ClassificationImpl();
taskanaEngine.getClassificationService().createClassification(classification);
Task task = new Task();
task.setName("Unit Test Task");
@ -85,12 +93,12 @@ public class TaskServiceImplIntAutocommitTest {
@Test(expected = TaskNotFoundException.class)
public void testStartTransactionFail()
throws FileNotFoundException, SQLException, TaskNotFoundException, NotAuthorizedException, WorkbasketNotFoundException, ClassificationNotFoundException {
throws FileNotFoundException, SQLException, TaskNotFoundException, NotAuthorizedException, WorkbasketNotFoundException, ClassificationNotFoundException, ClassificationAlreadyExistException {
Workbasket wb = new Workbasket();
wb.setName("sdf");
taskanaEngine.getWorkbasketService().createWorkbasket(wb);
Classification classification = new Classification();
taskanaEngine.getClassificationService().addClassification(classification);
Classification classification = (Classification) new ClassificationImpl();
taskanaEngine.getClassificationService().createClassification(classification);
Task task = new Task();
task.setName("Unit Test Task");
@ -106,16 +114,12 @@ public class TaskServiceImplIntAutocommitTest {
@Test
public void testCreateTaskInTaskanaWithDefaultDb()
throws FileNotFoundException, SQLException, TaskNotFoundException, NotAuthorizedException, WorkbasketNotFoundException, ClassificationNotFoundException {
TaskanaEngineConfiguration taskanaEngineConfiguration = new TaskanaEngineConfiguration(null, false, false);
TaskanaEngine te = taskanaEngineConfiguration.buildTaskanaEngine();
TaskServiceImpl taskServiceImpl = (TaskServiceImpl) te.getTaskService();
throws FileNotFoundException, SQLException, TaskNotFoundException, NotAuthorizedException, WorkbasketNotFoundException, ClassificationNotFoundException, ClassificationAlreadyExistException {
Workbasket wb = new Workbasket();
wb.setName("workbasket");
taskanaEngine.getWorkbasketService().createWorkbasket(wb);
Classification classification = new Classification();
taskanaEngine.getClassificationService().addClassification(classification);
wb = taskanaEngine.getWorkbasketService().createWorkbasket(wb);
Classification classification = (Classification) new ClassificationImpl();
taskanaEngine.getClassificationService().createClassification(classification);
Task task = new Task();
task.setName("Unit Test Task");
@ -128,12 +132,12 @@ public class TaskServiceImplIntAutocommitTest {
}
@Test
public void should_ReturnList_when_BuilderIsUsed() throws SQLException, NotAuthorizedException, WorkbasketNotFoundException, ClassificationNotFoundException {
public void should_ReturnList_when_BuilderIsUsed() throws SQLException, NotAuthorizedException, WorkbasketNotFoundException, ClassificationNotFoundException, ClassificationAlreadyExistException {
Workbasket wb = new Workbasket();
wb.setName("workbasket");
taskanaEngine.getWorkbasketService().createWorkbasket(wb);
Classification classification = new Classification();
taskanaEngine.getClassificationService().addClassification(classification);
Classification classification = (Classification) new ClassificationImpl();
taskanaEngine.getClassificationService().createClassification(classification);
Task task = new Task();
task.setName("Unit Test Task");
@ -156,7 +160,6 @@ public class TaskServiceImplIntAutocommitTest {
.objectReference(objectReferenceQuery).list();
Assert.assertEquals(0, results.size());
}
@AfterClass

View File

@ -1,23 +1,5 @@
package pro.taskana.impl.integration;
import org.h2.store.fs.FileUtils;
import org.junit.*;
import pro.taskana.ClassificationQuery;
import pro.taskana.ObjectReferenceQuery;
import pro.taskana.TaskanaEngine;
import pro.taskana.TaskanaEngine.ConnectionManagementMode;
import pro.taskana.configuration.TaskanaEngineConfiguration;
import pro.taskana.exceptions.ClassificationNotFoundException;
import pro.taskana.exceptions.NotAuthorizedException;
import pro.taskana.exceptions.TaskNotFoundException;
import pro.taskana.exceptions.WorkbasketNotFoundException;
import pro.taskana.impl.*;
import pro.taskana.impl.configuration.DBCleaner;
import pro.taskana.impl.configuration.TaskanaEngineConfigurationTest;
import pro.taskana.model.*;
import javax.security.auth.login.LoginException;
import javax.sql.DataSource;
import java.io.FileNotFoundException;
import java.sql.Connection;
import java.sql.SQLException;
@ -25,6 +7,42 @@ import java.sql.Timestamp;
import java.time.LocalDateTime;
import java.util.List;
import javax.security.auth.login.LoginException;
import javax.sql.DataSource;
import org.h2.store.fs.FileUtils;
import org.junit.After;
import org.junit.AfterClass;
import org.junit.Assert;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;
import pro.taskana.Classification;
import pro.taskana.ClassificationQuery;
import pro.taskana.ObjectReferenceQuery;
import pro.taskana.TaskanaEngine;
import pro.taskana.TaskanaEngine.ConnectionManagementMode;
import pro.taskana.configuration.TaskanaEngineConfiguration;
import pro.taskana.exceptions.ClassificationAlreadyExistException;
import pro.taskana.exceptions.ClassificationNotFoundException;
import pro.taskana.exceptions.NotAuthorizedException;
import pro.taskana.exceptions.TaskNotFoundException;
import pro.taskana.exceptions.WorkbasketNotFoundException;
import pro.taskana.impl.ClassificationQueryImpl;
import pro.taskana.impl.ClassificationServiceImpl;
import pro.taskana.impl.ObjectReferenceQueryImpl;
import pro.taskana.impl.TaskServiceImpl;
import pro.taskana.impl.TaskanaEngineImpl;
import pro.taskana.impl.WorkbasketServiceImpl;
import pro.taskana.impl.configuration.DBCleaner;
import pro.taskana.impl.configuration.TaskanaEngineConfigurationTest;
import pro.taskana.model.ClassificationImpl;
import pro.taskana.model.ObjectReference;
import pro.taskana.model.Task;
import pro.taskana.model.TaskState;
import pro.taskana.model.Workbasket;
/**
* Integration Test for TaskServiceImpl transactions with connection management mode EXPLICIT.
* @author EH
@ -57,7 +75,7 @@ public class TaskServiceImplIntExplicitTest {
}
@Test
public void testStart() throws FileNotFoundException, SQLException, TaskNotFoundException, NotAuthorizedException, WorkbasketNotFoundException, ClassificationNotFoundException {
public void testStart() throws FileNotFoundException, SQLException, TaskNotFoundException, NotAuthorizedException, WorkbasketNotFoundException, ClassificationNotFoundException, ClassificationAlreadyExistException {
Connection connection = dataSource.getConnection();
taskanaEngineImpl.setConnection(connection);
@ -74,16 +92,16 @@ public class TaskServiceImplIntExplicitTest {
@Test(expected = TaskNotFoundException.class)
public void testStartTransactionFail()
throws FileNotFoundException, SQLException, TaskNotFoundException, NotAuthorizedException, WorkbasketNotFoundException, ClassificationNotFoundException {
throws FileNotFoundException, SQLException, TaskNotFoundException, NotAuthorizedException, WorkbasketNotFoundException, ClassificationNotFoundException, ClassificationAlreadyExistException {
Connection connection = dataSource.getConnection();
taskanaEngineImpl.setConnection(connection);
// taskServiceImpl = (TaskServiceImpl) taskanaEngine.getTaskService();
Workbasket workbasket = new Workbasket();
workbasket.setName("workbasket");
Classification classification = new Classification();
Classification classification = (Classification) new ClassificationImpl();
taskanaEngine.getWorkbasketService().createWorkbasket(workbasket);
taskanaEngine.getClassificationService().addClassification(classification);
taskanaEngine.getClassificationService().createClassification(classification);
Task task = new Task();
task.setName("Unit Test Task");
@ -101,7 +119,7 @@ public class TaskServiceImplIntExplicitTest {
@Test
public void testCreateTaskInTaskanaWithDefaultDb()
throws FileNotFoundException, SQLException, TaskNotFoundException, NotAuthorizedException, WorkbasketNotFoundException, ClassificationNotFoundException {
throws FileNotFoundException, SQLException, TaskNotFoundException, NotAuthorizedException, WorkbasketNotFoundException, ClassificationNotFoundException, ClassificationAlreadyExistException {
DataSource ds = TaskanaEngineConfiguration.createDefaultDataSource();
TaskanaEngineConfiguration taskanaEngineConfiguration = new TaskanaEngineConfiguration(ds, false, false);
TaskanaEngine te = taskanaEngineConfiguration.buildTaskanaEngine();
@ -113,9 +131,9 @@ public class TaskServiceImplIntExplicitTest {
Workbasket workbasket = new Workbasket();
workbasket.setName("workbasket");
Classification classification = new Classification();
Classification classification = (Classification) new ClassificationImpl();
workbasketServiceImpl.createWorkbasket(workbasket);
classificationServiceImpl.addClassification(classification);
classificationServiceImpl.createClassification(classification);
Task task = new Task();
task.setName("Unit Test Task");
@ -130,15 +148,15 @@ public class TaskServiceImplIntExplicitTest {
}
@Test
public void testCreateTaskWithPlannedAndName() throws SQLException, NotAuthorizedException, WorkbasketNotFoundException, ClassificationNotFoundException {
public void testCreateTaskWithPlannedAndName() throws SQLException, NotAuthorizedException, WorkbasketNotFoundException, ClassificationNotFoundException, ClassificationAlreadyExistException {
Connection connection = dataSource.getConnection();
taskanaEngineImpl.setConnection(connection);
Classification classification = new Classification();
Classification classification = (Classification) new ClassificationImpl();
classification.setCategory("MANUAL");
classification.setName("classification name");
classification.setServiceLevel("P1D");
taskanaEngine.getClassificationService().addClassification(classification);
taskanaEngine.getClassificationService().createClassification(classification);
ObjectReference objectReference = new ObjectReference();
objectReference.setCompany("Novatec");
@ -175,7 +193,7 @@ public class TaskServiceImplIntExplicitTest {
}
@Test(expected = WorkbasketNotFoundException.class)
public void createTaskShouldThrowWorkbasketNotFoundException() throws NotAuthorizedException, WorkbasketNotFoundException, ClassificationNotFoundException, SQLException {
public void createTaskShouldThrowWorkbasketNotFoundException() throws NotAuthorizedException, WorkbasketNotFoundException, ClassificationNotFoundException, SQLException, ClassificationAlreadyExistException {
Connection connection = dataSource.getConnection();
taskanaEngineImpl.setConnection(connection);
@ -185,26 +203,26 @@ public class TaskServiceImplIntExplicitTest {
}
@Test(expected = ClassificationNotFoundException.class)
public void createManualTaskShouldThrowClassificationNotFoundException() throws NotAuthorizedException, WorkbasketNotFoundException, ClassificationNotFoundException, SQLException {
public void createManualTaskShouldThrowClassificationNotFoundException() throws NotAuthorizedException, WorkbasketNotFoundException, ClassificationNotFoundException, SQLException, ClassificationAlreadyExistException {
Connection connection = dataSource.getConnection();
taskanaEngineImpl.setConnection(connection);
Task test = this.generateDummyTask();
test.setClassification(new Classification());
test.setClassification(new ClassificationImpl());
taskServiceImpl.createTask(test);
}
@Test
public void should_ReturnList_when_BuilderIsUsed() throws SQLException, NotAuthorizedException, WorkbasketNotFoundException, ClassificationNotFoundException {
public void should_ReturnList_when_BuilderIsUsed() throws SQLException, NotAuthorizedException, WorkbasketNotFoundException, ClassificationNotFoundException, ClassificationAlreadyExistException {
Connection connection = dataSource.getConnection();
taskanaEngineImpl.setConnection(connection);
Workbasket workbasket = new Workbasket();
workbasket.setName("workbasket");
Classification classification = new Classification();
Classification classification = (Classification) new ClassificationImpl();
taskanaEngine.getWorkbasketService().createWorkbasket(workbasket);
taskanaEngine.getClassificationService().addClassification(classification);
taskanaEngine.getClassificationService().createClassification(classification);
Task task = new Task();
task.setName("Unit Test Task");
@ -230,13 +248,13 @@ public class TaskServiceImplIntExplicitTest {
connection.commit();
}
private Task generateDummyTask() {
private Task generateDummyTask() throws ClassificationAlreadyExistException {
Workbasket workbasket = new Workbasket();
workbasket.setName("wb");
taskanaEngine.getWorkbasketService().createWorkbasket(workbasket);
Classification classification = new Classification();
taskanaEngine.getClassificationService().addClassification(classification);
Classification classification = (Classification) new ClassificationImpl();
taskanaEngine.getClassificationService().createClassification(classification);
Task task = new Task();
task.setWorkbasketId(workbasket.getId());

View File

@ -3,10 +3,10 @@ package pro.taskana;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;
import pro.taskana.exceptions.ClassificationNotFoundException;
import pro.taskana.exceptions.NotAuthorizedException;
import pro.taskana.exceptions.WorkbasketNotFoundException;
import pro.taskana.model.Classification;
import pro.taskana.model.Task;
@Component

View File

@ -3,15 +3,20 @@
*/
package pro.taskana.rest;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import pro.taskana.ClassificationService;
import pro.taskana.model.Classification;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
import pro.taskana.Classification;
import pro.taskana.ClassificationService;
@RestController
@RequestMapping(path = "/v1/classifications", produces = { MediaType.APPLICATION_JSON_VALUE })
@ -53,7 +58,7 @@ public class ClassificationController {
@RequestMapping(method = RequestMethod.POST)
public ResponseEntity<Classification> createClassification(@RequestBody Classification classification) {
try {
classificationService.addClassification(classification);
classificationService.createClassification(classification);
return ResponseEntity.status(HttpStatus.CREATED).body(classification);
} catch (Exception e) {
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).build();