Selaa lähdekoodia

Merge remote-tracking branch 'origin/DEV' into DEV

Galleythrey 8 vuotta sitten
vanhempi
commit
5deae4bb03
29 muutettua tiedostoa jossa 1335 lisäystä ja 3 poistoa
  1. 1 0
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/common/constant/UrlConstants.java
  2. 7 0
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/dao/GroupDao.java
  3. 2 1
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/dao/fromKibug/ApplicationDao.java
  4. 2 0
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/service/GroupService.java
  5. 2 0
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/service/fromKibug/ApplicationService.java
  6. 4 0
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/service/fromKibug/impl/ApplicationServiceImpl.java
  7. 4 0
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/service/impl/GroupServiceImpl.java
  8. 36 0
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/web/ctrl/ExamController.java
  9. 21 0
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/web/ctrl/PaperController.java
  10. 30 0
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/web/ctrl/TargetController.java
  11. 129 0
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/web/data/ExamVO.java
  12. 57 0
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/web/data/PaperVO.java
  13. 102 0
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/web/data/TargetVO.java
  14. 125 0
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/web/data/wrapper/ExamVOWrapper.java
  15. 44 0
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/web/data/wrapper/PaperVOWrapper.java
  16. 44 0
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/web/data/wrapper/TargetVOWrapper.java
  17. 16 0
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/web/logic/ExamLogic.java
  18. 10 0
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/web/logic/PaperLogic.java
  19. 13 0
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/web/logic/TargetLogic.java
  20. 65 0
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/web/logic/impl/ExamLogicImpl.java
  21. 30 0
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/web/logic/impl/PaperLogicImpl.java
  22. 46 0
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/web/logic/impl/TargetLogicImpl.java
  23. 2 2
      mooctest-site-server/src/main/resources/application.yaml
  24. 9 0
      mooctest-site-server/src/test/java/cn/iselab/mooctest/site/service/fromKibug/impl/ApplicationServiceImplTest.java
  25. 74 0
      mooctest-site-server/src/test/java/cn/iselab/mooctest/site/service/impl/GroupServiceTest.java
  26. 113 0
      mooctest-site-server/src/test/java/cn/iselab/mooctest/site/web/ctrl/ExamControllerTest.java
  27. 129 0
      mooctest-site-server/src/test/java/cn/iselab/mooctest/site/web/data/wrapper/ExamVOWrapperTest.java
  28. 129 0
      mooctest-site-server/src/test/java/cn/iselab/mooctest/site/web/logic/impl/ExamLogicImplTest.java
  29. 89 0
      mooctest-site-server/src/test/java/cn/iselab/mooctest/site/web/logic/impl/TargetLogicImplTest.java

+ 1 - 0
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/common/constant/UrlConstants.java

@@ -20,4 +20,5 @@ public class UrlConstants {
     public static final String HOSTNAME = "http://mooctest.net/";
 
     public static final String API_DEV = "/api/dev/";
+    public static final String API_TARGET = "/api/target/";
 }

+ 7 - 0
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/dao/GroupDao.java

@@ -58,6 +58,13 @@ public interface GroupDao extends PagingAndSortingRepository<Group, Long> {
             "AND t2g.taskId = :taskId")
     List<Group> findByTaskId(@Param("taskId") long taskId);
 
+    @Query("SELECT g FROM Task2Group t2g, Group g, Group2Worker g2w " +
+            "WHERE t2g.groupId = g.id " +
+            "AND g.id = g2w.groupId " +
+            "AND t2g.taskId = :examId " +
+            "AND g2w.workerId = :participantId ")
+    List<Group> findByExamIdAndParticipantId(@Param("examId") long examId, @Param("participantId") long participantId);
+
     @Query("SELECT w " +
             "FROM Worker w " +
             "WHERE w.id IN( " +

+ 2 - 1
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/dao/fromKibug/ApplicationDao.java

@@ -7,10 +7,11 @@ import org.springframework.data.repository.PagingAndSortingRepository;
 import org.springframework.data.repository.query.Param;
 
 import javax.transaction.Transactional;
-import java.util.List;
 
 
 @Transactional
 public interface ApplicationDao extends PagingAndSortingRepository<Application, Long>,JpaSpecificationExecutor<Application> {
 
+    @Query("SELECT application FROM Application application WHERE application.uploadedCaseId= :uploaderCaseId")
+    Application getApplicationByUploadedCaseId(@Param("uploaderCaseId") long uploaderCaseId);
 }

+ 2 - 0
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/service/GroupService.java

@@ -44,4 +44,6 @@ public interface GroupService {
     Group save(Group group);
 
     List<Long> getGroupIdsByTaskId(long taskId);
+
+    List<Group> getGroupsByExamIdAndParticipantId(long examId, long participantId);
 }

+ 2 - 0
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/service/fromKibug/ApplicationService.java

@@ -1,6 +1,7 @@
 package cn.iselab.mooctest.site.service.fromKibug;
 
 import cn.iselab.mooctest.site.common.enums.AppPlatform;
+import cn.iselab.mooctest.site.models.App;
 import cn.iselab.mooctest.site.models.fromKibug.Application;
 import cn.iselab.mooctest.site.web.data.fromKibug.ApplicationVO;
 import cn.iselab.mooctest.site.web.data.fromKibug.AutoTestVO;
@@ -25,4 +26,5 @@ public interface ApplicationService {
 
     List<String> getCategories() throws Exception;
 
+    Application getAppByUploaderCaseId(long id) throws Exception;
 }

+ 4 - 0
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/service/fromKibug/impl/ApplicationServiceImpl.java

@@ -195,4 +195,8 @@ public class ApplicationServiceImpl implements ApplicationService {
             }
         };
     }
+
+    public Application getAppByUploaderCaseId(long id){
+        return applicationDao.getApplicationByUploadedCaseId(id);
+    }
 }

+ 4 - 0
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/service/impl/GroupServiceImpl.java

@@ -76,6 +76,10 @@ public class GroupServiceImpl implements GroupService {
         return groupList;
     }
 
+    public List<Group> getGroupsByExamIdAndParticipantId(long examId, long participantId) {
+        return groupDao.findByExamIdAndParticipantId(examId, participantId);
+    }
+
     @Override
     public Page<Worker> getWorkersInGroup(long groupId, Pageable pageable) {
         return groupDao.getWorkersByGroupId(groupId, pageable);

+ 36 - 0
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/web/ctrl/ExamController.java

@@ -0,0 +1,36 @@
+package cn.iselab.mooctest.site.web.ctrl;
+
+import cn.iselab.mooctest.site.common.constant.UrlConstants;
+import cn.iselab.mooctest.site.web.data.ExamVO;
+import cn.iselab.mooctest.site.web.data.PaperVO;
+import cn.iselab.mooctest.site.web.logic.ExamLogic;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+import java.util.List;
+
+/**
+ * Created by major on 2017/6/15.
+ */
+
+@RestController
+public class ExamController {
+
+    @Autowired
+    ExamLogic examLogic;
+
+    @RequestMapping(value = "api/exams", method = RequestMethod.GET)
+    public List<ExamVO> getExamList(@RequestParam(value = "organizer_id", required = false) Long organizerId
+            , @RequestParam(value = "participant_id", required = false) Long participantId) {
+        if(organizerId != null && participantId == null)
+            return examLogic.getOrganizerExamList(organizerId);
+        if(participantId != null && organizerId == null)
+            return examLogic.getParticipantExamList(participantId);
+        return null;
+    }
+
+    @RequestMapping(value= "api/exam/{examId}", method = RequestMethod.GET)
+    public PaperVO getExamById(@PathVariable Long examId, @RequestParam(name = "workerId") Long workerId) {
+        //return taskLogic.getPaperById(examId);
+        return null;
+    }
+}

+ 21 - 0
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/web/ctrl/PaperController.java

@@ -0,0 +1,21 @@
+package cn.iselab.mooctest.site.web.ctrl;
+
+import cn.iselab.mooctest.site.web.data.PaperVO;
+import cn.iselab.mooctest.site.web.logic.PaperLogic;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+/**
+ * Created by major on 2017/6/15.
+ */
+
+@RestController
+public class PaperController {
+    @Autowired
+    PaperLogic paperLogic;
+
+    @RequestMapping(value= "api/paper/{paperId}", method = RequestMethod.GET)
+    public PaperVO getPaperById(@PathVariable Long paperId, @RequestParam(name = "workerId") Long workerId) {
+        return paperLogic.getPaperById(paperId);
+    }
+}

+ 30 - 0
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/web/ctrl/TargetController.java

@@ -0,0 +1,30 @@
+package cn.iselab.mooctest.site.web.ctrl;
+
+import cn.iselab.mooctest.site.common.constant.UrlConstants;
+import cn.iselab.mooctest.site.service.AppService;
+import cn.iselab.mooctest.site.service.fromKibug.ApplicationService;
+import cn.iselab.mooctest.site.web.data.TargetVO;
+import cn.iselab.mooctest.site.web.logic.TargetLogic;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.validation.constraints.NotNull;
+import java.util.List;
+
+/**
+ * Created by ROGK on 2017/6/18.
+ */
+@RestController
+public class TargetController {
+
+    @Autowired
+    private TargetLogic targetLogic;
+
+    @RequestMapping(value = UrlConstants.API_TARGET+"list/{managerId}",method = RequestMethod.GET)
+    public List<TargetVO> getTargets(@PathVariable @NotNull long managerId) throws Exception{
+        return targetLogic.getManagerTargets(managerId);
+    }
+}

+ 129 - 0
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/web/data/ExamVO.java

@@ -0,0 +1,129 @@
+package cn.iselab.mooctest.site.web.data;
+
+import java.util.List;
+
+/**
+ * Created by major on 2017/6/14.
+ */
+public class ExamVO {
+    private Long id;
+    private String name;
+    private Long beginTime;
+    private Long endTime;
+    private String info;
+    private Long subsiteId;
+    private Long managerId;
+    private String managerName;
+    private Integer duration;
+    private List<Long> groupIds;
+
+    private Integer workerCount;
+    private List<String> groupNames;
+    private Integer status;
+
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public Long getBeginTime() {
+        return beginTime;
+    }
+
+    public void setBeginTime(Long beginTime) {
+        this.beginTime = beginTime;
+    }
+
+    public Long getEndTime() {
+        return endTime;
+    }
+
+    public void setEndTime(Long endTime) {
+        this.endTime = endTime;
+    }
+
+    public String getInfo() {
+        return info;
+    }
+
+    public void setInfo(String info) {
+        this.info = info;
+    }
+
+    public Long getSubsiteId() {
+        return subsiteId;
+    }
+
+    public void setSubsiteId(Long subsiteId) {
+        this.subsiteId = subsiteId;
+    }
+
+    public Long getManagerId() {
+        return managerId;
+    }
+
+    public void setManagerId(Long managerId) {
+        this.managerId = managerId;
+    }
+
+    public String getManagerName() {
+        return managerName;
+    }
+
+    public void setManagerName(String managerName) {
+        this.managerName = managerName;
+    }
+
+    public Integer getDuration() {
+        return duration;
+    }
+
+    public void setDuration(Integer duration) {
+        this.duration = duration;
+    }
+
+    public List<Long> getGroupIds() {
+        return groupIds;
+    }
+
+    public void setGroupIds(List<Long> groupIds) {
+        this.groupIds = groupIds;
+    }
+
+    public Integer getWorkerCount() {
+        return workerCount;
+    }
+
+    public void setWorkerCount(Integer workerCount) {
+        this.workerCount = workerCount;
+    }
+
+    public List<String> getGroupNames() {
+        return groupNames;
+    }
+
+    public void setGroupNames(List<String> groupNames) {
+        this.groupNames = groupNames;
+    }
+
+    public Integer getStatus() {
+        return status;
+    }
+
+    public void setStatus(Integer status) {
+        this.status = status;
+    }
+
+
+}

+ 57 - 0
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/web/data/PaperVO.java

@@ -0,0 +1,57 @@
+package cn.iselab.mooctest.site.web.data;
+
+import java.util.List;
+
+/**
+ * Created by major on 2017/6/14.
+ */
+public class PaperVO {
+    private Long id;
+    private String name;
+
+    private String taskInfo;
+    private Long subsiteId;
+
+    //future work
+//    private Byte difficult;
+//
+//    public Byte getDifficult() {
+//        return difficult;
+//    }
+//
+//    public void setDifficult(Byte difficult) {
+//        this.difficult = difficult;
+//    }
+
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public String getTaskInfo() {
+        return taskInfo;
+    }
+
+    public void setTaskInfo(String taskInfo) {
+        this.taskInfo = taskInfo;
+    }
+
+    public Long getSubsiteId() {
+        return subsiteId;
+    }
+
+    public void setSubsiteId(Long subsiteId) {
+        this.subsiteId = subsiteId;
+    }
+}

+ 102 - 0
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/web/data/TargetVO.java

@@ -0,0 +1,102 @@
+package cn.iselab.mooctest.site.web.data;
+
+
+import java.sql.Timestamp;
+
+/**
+ * Created by ROGK on 2017/6/18.
+ */
+public class TargetVO {
+
+    private long id;
+    private long managerId;
+    private Long subsiteId;
+    private String name;
+    private Timestamp createTimeMillis;
+    private Timestamp endTimeMillis;
+    private boolean visible;
+    private int status;
+    private int fromCloud;
+    private String url;
+
+    public long getId() {
+        return id;
+    }
+
+    public void setId(long id) {
+        this.id = id;
+    }
+
+    public long getManagerId() {
+        return managerId;
+    }
+
+    public void setManagerId(long managerId) {
+        this.managerId = managerId;
+    }
+
+    public Long getSubsiteId() {
+        return subsiteId;
+    }
+
+    public void setSubsiteId(Long subsiteId) {
+        this.subsiteId = subsiteId;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public Timestamp getCreateTimeMillis() {
+        return createTimeMillis;
+    }
+
+    public void setCreateTimeMillis(Timestamp createTimeMillis) {
+        this.createTimeMillis = createTimeMillis;
+    }
+
+    public Timestamp getEndTimeMillis() {
+        return endTimeMillis;
+    }
+
+    public void setEndTimeMillis(Timestamp endTimeMillis) {
+        this.endTimeMillis = endTimeMillis;
+    }
+
+    public boolean isVisible() {
+        return visible;
+    }
+
+    public void setVisible(boolean visible) {
+        this.visible = visible;
+    }
+
+    public int getStatus() {
+        return status;
+    }
+
+    public void setStatus(int status) {
+        this.status = status;
+    }
+
+    public int getFromCloud() {
+        return fromCloud;
+    }
+
+    public void setFromCloud(int fromCloud) {
+        this.fromCloud = fromCloud;
+    }
+
+    public String getUrl() {
+        return url;
+    }
+
+    public void setUrl(String url) {
+        this.url = url;
+    }
+
+}

+ 125 - 0
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/web/data/wrapper/ExamVOWrapper.java

@@ -0,0 +1,125 @@
+package cn.iselab.mooctest.site.web.data.wrapper;
+
+import cn.iselab.mooctest.site.dao.SubsiteDao;
+import cn.iselab.mooctest.site.models.Group;
+import cn.iselab.mooctest.site.models.Manager;
+import cn.iselab.mooctest.site.models.Task;
+import cn.iselab.mooctest.site.service.GroupService;
+import cn.iselab.mooctest.site.service.ManagerService;
+import cn.iselab.mooctest.site.web.data.ExamVO;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.sql.Timestamp;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * Created by major on 2017/6/14.
+ */
+
+@Service
+public class ExamVOWrapper extends BaseWrapper<ExamVO, Task> {
+    @Autowired
+    private SubsiteDao subsiteDao;
+
+    @Autowired
+    private SubsiteVOWrapper subsiteVOWrapper;
+
+    @Autowired
+    private ManagerVOWrapper managerVOWrapper;
+
+    @Autowired
+    ManagerService managerService;
+
+    @Autowired
+    GroupService groupService;
+
+    @Override
+    public ExamVO wrap(Task task) {
+        ExamVO vo = new ExamVO();
+        vo.setName(task.getName());
+        vo.setSubsiteId(task.getSubsiteId());
+        vo.setId(task.getId());
+        vo.setBeginTime(task.getBeginTime().getTime());
+        vo.setEndTime(task.getEndTime().getTime());
+        vo.setManagerId(task.getManagerId());
+        vo.setDuration(task.getDuration());
+        vo.setInfo(task.getInformation());
+
+        long curr = System.currentTimeMillis();
+        if (vo.getBeginTime() > curr) {
+            vo.setStatus(Task.STATUS_UPCOMING);
+        } else if (vo.getEndTime() > curr) {
+            vo.setStatus(Task.STATUS_ONGOING);
+        } else {
+            vo.setStatus(Task.STATUS_FINISHED);
+        }
+
+        Manager manager = managerService.getManagerById(task.getManagerId());
+        vo.setManagerName(manager.getName());
+        return vo;
+    }
+
+    public ExamVO wrapOrganizerExam(Task task, long organizerId) {
+        ExamVO vo = wrap(task);
+        List<Group> groupList = groupService.getGroupsByManagerId(organizerId);
+        wrapGroupInfo(vo, groupList);
+        return vo;
+    }
+
+    public ExamVO wrapParticipantExam(Task task, long participantId) {
+        ExamVO vo = wrap(task);
+        List<Group> groupList = groupService.getGroupsByExamIdAndParticipantId(vo.getId(), participantId);
+        wrapGroupInfo(vo, groupList);
+        return vo;
+    }
+
+    private void wrapGroupInfo(ExamVO vo, List<Group> groupList) {
+        List<Long> groupIds = new ArrayList<>(groupList.size());
+        List<String> groupNames = new ArrayList<>(groupList.size());
+        groupList.forEach(group -> {
+            groupIds.add(group.getId());
+            groupNames.add(group.getName());
+        });
+        vo.setGroupIds(groupIds);
+        vo.setGroupNames(groupNames);
+    }
+
+    public List<ExamVO> wrapOrganizerExamList(List<Task> taskList, long organizerId) {
+        List<ExamVO> examVOList = new ArrayList<>();
+        taskList.forEach(task -> {
+            ExamVO examVO = this.wrapOrganizerExam(task, organizerId);
+            examVOList.add(examVO);
+        });
+        return examVOList;
+    }
+
+    public List<ExamVO> wrapParticipantExamList(List<Task> taskList, long participantId) {
+        List<ExamVO> examVOList = new ArrayList<>();
+        taskList.forEach(task -> {
+            ExamVO examVO = this.wrapParticipantExam(task, participantId);
+            examVOList.add(examVO);
+        });
+        return examVOList;
+    }
+
+    @Override
+    public Task unwrap(ExamVO vo) {
+
+        Task task = new Task();
+        task.setName(vo.getName());
+        task.setSubsiteId(vo.getSubsiteId());
+        task.setManagerId(vo.getManagerId());
+        task.setId(vo.getId());
+        task.setDuration(vo.getDuration());
+        task.setInformation(vo.getInfo());
+        Timestamp beginTime = new Timestamp(vo.getBeginTime());
+        task.setBeginTime(beginTime);
+        Timestamp endTime = new Timestamp(vo.getEndTime());
+        task.setEndTime(endTime);
+
+        return task;
+    }
+
+}

+ 44 - 0
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/web/data/wrapper/PaperVOWrapper.java

@@ -0,0 +1,44 @@
+package cn.iselab.mooctest.site.web.data.wrapper;
+
+import cn.iselab.mooctest.site.dao.SubsiteDao;
+import cn.iselab.mooctest.site.models.Task;
+import cn.iselab.mooctest.site.web.data.PaperVO;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+/**
+ * Created by major on 2017/6/14.
+ */
+@Service
+public class PaperVOWrapper extends BaseWrapper<PaperVO, Task> {
+    @Autowired
+    private SubsiteDao subsiteDao;
+
+    @Autowired
+    private SubsiteVOWrapper subsiteVOWrapper;
+
+    @Autowired
+    private ManagerVOWrapper managerVOWrapper;
+
+    @Override
+    public PaperVO wrap(Task task) {
+        PaperVO vo = new PaperVO();
+        vo.setName(task.getName());
+        vo.setSubsiteId(task.getSubsiteId());
+        vo.setId(task.getId());
+        vo.setTaskInfo(task.getInformation());
+
+        return vo;
+    }
+
+    @Override
+    public Task unwrap(PaperVO vo) {
+
+        Task task = new Task();
+        task.setName(vo.getName());
+        task.setSubsiteId(vo.getSubsiteId());
+        task.setId(vo.getId());
+        task.setInformation(vo.getTaskInfo());
+        return task;
+    }
+}

+ 44 - 0
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/web/data/wrapper/TargetVOWrapper.java

@@ -0,0 +1,44 @@
+package cn.iselab.mooctest.site.web.data.wrapper;
+
+import cn.iselab.mooctest.site.models.App;
+import cn.iselab.mooctest.site.web.data.TargetVO;
+import org.springframework.stereotype.Service;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * Created by ROGK on 2017/6/18.
+ */
+@Service
+public class TargetVOWrapper extends BaseWrapper<TargetVO,App>{
+
+    @Override
+    public TargetVO wrap(App app){
+
+        TargetVO vo=new TargetVO();
+        vo.setId(app.getId());
+        vo.setManagerId(app.getManagerId());
+        vo.setCreateTimeMillis(app.getCreateTime());
+        vo.setVisible(app.getVisible());
+        vo.setSubsiteId(app.getSubsiteId());
+        vo.setName(app.getName());
+        vo.setUrl(app.getCaseUrl());
+        return vo;
+    }
+
+    @Override
+    public App unwrap(TargetVO targetVO){
+
+        App app=new App();
+        app.setId(targetVO.getId());
+        app.setCreateTime(targetVO.getCreateTimeMillis());
+        app.setManagerId(targetVO.getManagerId());
+        app.setName(targetVO.getName());
+        app.setVisible(targetVO.isVisible());
+        app.setSubsiteId(targetVO.getSubsiteId());
+        app.setCaseUrl(targetVO.getUrl());
+        return app;
+    }
+
+}

+ 16 - 0
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/web/logic/ExamLogic.java

@@ -0,0 +1,16 @@
+package cn.iselab.mooctest.site.web.logic;
+
+import cn.iselab.mooctest.site.web.data.ExamVO;
+
+import java.util.List;
+
+/**
+ * Created by major on 2017/6/15.
+ */
+public interface ExamLogic {
+    ExamVO getExamById(long examId);
+
+    List<ExamVO> getOrganizerExamList(long organizerId);
+
+    List<ExamVO> getParticipantExamList(long participantId);
+}

+ 10 - 0
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/web/logic/PaperLogic.java

@@ -0,0 +1,10 @@
+package cn.iselab.mooctest.site.web.logic;
+
+import cn.iselab.mooctest.site.web.data.PaperVO;
+
+/**
+ * Created by major on 2017/6/15.
+ */
+public interface PaperLogic {
+    PaperVO getPaperById(long paperId);
+}

+ 13 - 0
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/web/logic/TargetLogic.java

@@ -0,0 +1,13 @@
+package cn.iselab.mooctest.site.web.logic;
+
+import cn.iselab.mooctest.site.web.data.TargetVO;
+
+import java.util.List;
+
+/**
+ * Created by ROGK on 2017/6/18.
+ */
+public interface TargetLogic {
+
+    List<TargetVO> getManagerTargets(long managerId) throws Exception;
+}

+ 65 - 0
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/web/logic/impl/ExamLogicImpl.java

@@ -0,0 +1,65 @@
+package cn.iselab.mooctest.site.web.logic.impl;
+
+import cn.iselab.mooctest.site.models.Group;
+import cn.iselab.mooctest.site.models.Task;
+import cn.iselab.mooctest.site.service.GroupService;
+import cn.iselab.mooctest.site.service.TaskService;
+import cn.iselab.mooctest.site.web.data.ExamVO;
+import cn.iselab.mooctest.site.web.data.wrapper.ExamVOWrapper;
+import cn.iselab.mooctest.site.web.logic.BaseLogic;
+import cn.iselab.mooctest.site.web.logic.ExamLogic;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * Created by major on 2017/6/15.
+ */
+
+@Service
+public class ExamLogicImpl extends BaseLogic implements ExamLogic {
+
+    @Autowired
+    TaskService taskService;
+
+    @Autowired
+    GroupService groupService;
+
+    @Autowired
+    ExamVOWrapper examVOWrapper;
+
+
+    @Override
+    public ExamVO getExamById(long examId) {
+        Task task = taskService.getTask(examId);
+        ExamVO examVO = examVOWrapper.wrap(task);
+        List<Long> groupIds = groupService.getGroupIdsByTaskId(examId);
+
+        List<String> groupNames = new ArrayList<>();
+
+//		for (Long groupId : groupIds) {
+//			if (groupService.getWorkersByGroupId(groupId).contains(workerService.getWorkerById(workerId))) {
+//				groupNames.add(groupService.getGroup(groupId).getName());
+//			}
+//		}
+//		examVO.setGroupNames(groupNames);
+
+        return examVO;
+    }
+
+    @Override
+    public List<ExamVO> getOrganizerExamList(long organizerId) {
+        List<Task> taskList = taskService.getTaskList(organizerId);
+        List<ExamVO> examList = examVOWrapper.wrapOrganizerExamList(taskList, organizerId);
+        return examList;
+    }
+
+    @Override
+    public List<ExamVO> getParticipantExamList(long participantId) {
+        List<Task> taskList = taskService.getTaskListByWorkerId(participantId);
+        List<ExamVO> examList = examVOWrapper.wrapParticipantExamList(taskList, participantId);
+        return examList;
+    }
+}

+ 30 - 0
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/web/logic/impl/PaperLogicImpl.java

@@ -0,0 +1,30 @@
+package cn.iselab.mooctest.site.web.logic.impl;
+
+import cn.iselab.mooctest.site.models.Task;
+import cn.iselab.mooctest.site.service.TaskService;
+import cn.iselab.mooctest.site.web.data.PaperVO;
+import cn.iselab.mooctest.site.web.data.wrapper.PaperVOWrapper;
+import cn.iselab.mooctest.site.web.logic.BaseLogic;
+import cn.iselab.mooctest.site.web.logic.PaperLogic;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+/**
+ * Created by major on 2017/6/15.
+ */
+
+@Service
+public class PaperLogicImpl extends BaseLogic implements PaperLogic {
+    @Autowired
+    TaskService taskService;
+
+    @Autowired
+    PaperVOWrapper paperVOWrapper;
+
+    @Override
+    public PaperVO getPaperById(long paperId) {
+        Task task = taskService.getTask(paperId);
+        PaperVO paperVO = paperVOWrapper.wrap(task);
+        return paperVO;
+    }
+}

+ 46 - 0
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/web/logic/impl/TargetLogicImpl.java

@@ -0,0 +1,46 @@
+package cn.iselab.mooctest.site.web.logic.impl;
+
+import cn.iselab.mooctest.site.models.fromKibug.Application;
+import cn.iselab.mooctest.site.models.App;
+import cn.iselab.mooctest.site.service.AppService;
+import cn.iselab.mooctest.site.service.fromKibug.ApplicationService;
+import cn.iselab.mooctest.site.web.data.TargetVO;
+import cn.iselab.mooctest.site.web.data.wrapper.TargetVOWrapper;
+import cn.iselab.mooctest.site.web.exception.IllegalOperationException;
+import cn.iselab.mooctest.site.web.logic.TargetLogic;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.sql.Timestamp;
+import java.util.List;
+
+/**
+ * Created by ROGK on 2017/6/18.
+ */
+@Service
+public class TargetLogicImpl implements TargetLogic{
+
+    @Autowired
+    private AppService appService;
+
+    @Autowired
+    private ApplicationService applicationService;
+
+    @Autowired
+    private TargetVOWrapper targetVOWrapper;
+
+    public List<TargetVO> getManagerTargets(long managerId) throws Exception{
+
+        List<App> apps = appService.getManagerApps(managerId);
+        List<TargetVO> targets= targetVOWrapper.wrap(apps);
+        Application application;
+        for(TargetVO targetVO:targets){
+            application = applicationService.getAppByUploaderCaseId(targetVO.getId());
+
+            targetVO.setEndTimeMillis(new Timestamp(application.getEndTimeMillis()));
+            targetVO.setFromCloud(application.getFromCloud());
+            targetVO.setStatus(application.getStatus());
+        }
+        return targets;
+    }
+}

+ 2 - 2
mooctest-site-server/src/main/resources/application.yaml

@@ -47,8 +47,8 @@ spring:
     profiles: dev
     datasource:
         url: jdbc:mysql://localhost:3306/mooctest_main2?useUnicode=yes&characterEncoding=UTF-8
-        username: root
-        password:
+        username: cxz
+        password: cxz00429
 
 rpcServer:
     port: 9100

+ 9 - 0
mooctest-site-server/src/test/java/cn/iselab/mooctest/site/service/fromKibug/impl/ApplicationServiceImplTest.java

@@ -171,4 +171,13 @@ public class ApplicationServiceImplTest {
         Assert.assertEquals(uncompleteAutoApp.getStatus(), AppStatus.NEW.getStatus());
     }
 
+    @Test
+    public void should_returnApplication_whenApplicationExists() throws Exception{
+
+        Application expect = new Application();
+        when(applicationDao.getApplicationByUploadedCaseId(123L)).thenReturn(expect);
+
+        Application result = applicationService.getAppByUploaderCaseId(123L);
+        Assert.assertEquals(expect,result);
+    }
 }

+ 74 - 0
mooctest-site-server/src/test/java/cn/iselab/mooctest/site/service/impl/GroupServiceTest.java

@@ -0,0 +1,74 @@
+package cn.iselab.mooctest.site.service.impl;
+
+import cn.iselab.mooctest.site.Application;
+import cn.iselab.mooctest.site.dao.GroupDao;
+import cn.iselab.mooctest.site.models.Group;
+import org.junit.Assert;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.InjectMocks;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
+import org.mockito.runners.MockitoJUnitRunner;
+import org.springframework.boot.test.SpringApplicationConfiguration;
+import org.springframework.test.context.web.WebAppConfiguration;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import static org.mockito.Mockito.when;
+/**
+ * Created by major on 2017/6/19.
+ */
+
+@RunWith(MockitoJUnitRunner.class)
+@WebAppConfiguration
+@SpringApplicationConfiguration(classes = Application.class)
+public class GroupServiceTest {
+    @InjectMocks
+    private GroupServiceImpl groupService = new GroupServiceImpl();
+
+    @Mock
+    private GroupDao groupDao;
+
+    @Before
+    public void setUp() {
+        MockitoAnnotations.initMocks(this);
+    }
+
+    @Test
+    public void should_returnAllMergedGroups_when_givenExamIdAndParticipantId() {
+        //arrange
+        long examId = 193;
+        long participantId = 1602;
+
+        List<Group> expect = new ArrayList<>();
+        Group group = new Group();
+        group.setId(12L);
+        group.setName("测试班");
+        group.setManagerId(17L);
+        group.setAllowJoin(true);
+        group.setInformation("La La Land");
+        expect.add(group);
+
+        Group group2 = new Group();
+        group.setId(12L);
+        group.setName("测试班");
+        group.setManagerId(17L);
+        group.setAllowJoin(true);
+        group.setInformation("La La Land");
+        expect.add(group2);
+
+        when(groupDao.findByExamIdAndParticipantId(examId, participantId)).thenReturn(expect);
+        //action
+        List<Group> result = groupService.getGroupsByExamIdAndParticipantId(examId, participantId);
+        //assert
+        Group expectGroup = expect.get(0);
+        Group resultGroup = result.get(0);
+        Assert.assertEquals(expectGroup.getId(), resultGroup.getId());
+        Assert.assertEquals(expectGroup.getName(), resultGroup.getName());
+        Assert.assertEquals(expectGroup.getInformation(), resultGroup.getInformation());
+
+    }
+}

+ 113 - 0
mooctest-site-server/src/test/java/cn/iselab/mooctest/site/web/ctrl/ExamControllerTest.java

@@ -0,0 +1,113 @@
+package cn.iselab.mooctest.site.web.ctrl;
+
+import cn.iselab.mooctest.site.Application;
+import cn.iselab.mooctest.site.models.Task;
+import cn.iselab.mooctest.site.service.TaskService;
+import cn.iselab.mooctest.site.web.data.ExamVO;
+import cn.iselab.mooctest.site.web.data.wrapper.ExamVOWrapper;
+import cn.iselab.mooctest.site.web.logic.ExamLogic;
+import cn.iselab.mooctest.site.web.logic.impl.ExamLogicImpl;
+import org.junit.Assert;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.InjectMocks;
+import org.mockito.Mock;
+import org.mockito.runners.MockitoJUnitRunner;
+import org.springframework.boot.test.SpringApplicationConfiguration;
+import org.springframework.test.context.web.WebAppConfiguration;
+import org.springframework.test.web.servlet.MockMvc;
+import org.springframework.test.web.servlet.MvcResult;
+import org.springframework.test.web.servlet.setup.MockMvcBuilders;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import static org.mockito.Mockito.when;
+import static org.mockito.MockitoAnnotations.initMocks;
+import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
+import static org.springframework.test.web.servlet.result.MockMvcResultHandlers.print;
+import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
+
+/**
+ * Created by major on 2017/6/21.
+ */
+
+@RunWith(MockitoJUnitRunner.class)
+@WebAppConfiguration
+@SpringApplicationConfiguration(classes = Application.class)
+public class ExamControllerTest {
+    private MockMvc mockMvc;
+
+    @InjectMocks
+    private ExamController examController = new ExamController();
+
+    @Mock
+    private ExamLogic examLogic;
+    List<ExamVO> expect = new ArrayList<>();
+
+    @Before
+    public void setupMockMvc() {
+        initMocks(this);
+        mockMvc = MockMvcBuilders.standaloneSetup(examController).build();
+
+        ExamVO examVO = new ExamVO();
+        examVO.setId(497L);
+        examVO.setBeginTime(1495443120000L);
+        examVO.setEndTime(1495999990000L);
+        examVO.setDuration(1);
+        examVO.setInfo("lalaland");
+        examVO.setManagerId(17L);
+        examVO.setName("shi juan 1");
+        examVO.setSubsiteId(2L);
+        List<Long> groupIds = new ArrayList<>();
+        groupIds.add(111L);
+        examVO.setGroupIds(groupIds);
+        examVO.setManagerId(17L);
+        expect.add(examVO);
+
+    }
+
+    @Test
+    public void should_returnMergedList_when_givenOrganizerId() throws Exception {
+        //arrange
+        long organizerId = 17;
+
+
+        when(examLogic.getOrganizerExamList(organizerId)).thenReturn(expect);
+        //action
+        MvcResult result = mockMvc.perform(
+                get("/api/exams").param("organizer_id", "17")
+        ).andDo(print()).andExpect(status().isOk()).andReturn();
+
+        //assert
+        Assert.assertEquals("[{\"id\":497,\"name\":\"shi juan 1\",\"beginTime\":1495443120000," +
+                        "\"endTime\":1495999990000,\"info\":\"lalaland\",\"subsiteId\":2,\"managerId\":17," +
+                        "\"managerName\":null,\"duration\":1,\"groupIds\":[111],\"workerCount\":null," +
+                        "\"groupNames\":null,\"status\":null}]"
+                ,result.getResponse().getContentAsString());
+
+    }
+
+    @Test
+    public void should_returnMergedList_when_givenParticipant() throws Exception {
+        //arrange
+        long participantId = 17;
+
+
+        when(examLogic.getParticipantExamList(participantId)).thenReturn(expect);
+        //action
+        MvcResult result = mockMvc.perform(
+                get("/api/exams").param("participant_id", "17")
+        ).andDo(print()).andExpect(status().isOk()).andReturn();
+
+        //assert
+        Assert.assertEquals("[{\"id\":497,\"name\":\"shi juan 1\",\"beginTime\":1495443120000," +
+                        "\"endTime\":1495999990000,\"info\":\"lalaland\",\"subsiteId\":2,\"managerId\":17," +
+                        "\"managerName\":null,\"duration\":1,\"groupIds\":[111],\"workerCount\":null," +
+                        "\"groupNames\":null,\"status\":null}]"
+                ,result.getResponse().getContentAsString());
+
+    }
+
+}

+ 129 - 0
mooctest-site-server/src/test/java/cn/iselab/mooctest/site/web/data/wrapper/ExamVOWrapperTest.java

@@ -0,0 +1,129 @@
+package cn.iselab.mooctest.site.web.data.wrapper;
+
+import cn.iselab.mooctest.site.Application;
+import cn.iselab.mooctest.site.models.Group;
+import cn.iselab.mooctest.site.models.Manager;
+import cn.iselab.mooctest.site.models.Task;
+import cn.iselab.mooctest.site.service.GroupService;
+import cn.iselab.mooctest.site.service.ManagerService;
+import cn.iselab.mooctest.site.web.data.ExamVO;
+import org.junit.Assert;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.InjectMocks;
+import org.mockito.Mock;
+import org.mockito.runners.MockitoJUnitRunner;
+import org.springframework.boot.test.SpringApplicationConfiguration;
+import org.springframework.test.context.web.WebAppConfiguration;
+
+import java.sql.Timestamp;
+import java.util.ArrayList;
+import java.util.List;
+
+import static org.mockito.Mockito.when;
+import static org.mockito.MockitoAnnotations.initMocks;
+
+/**
+ * Created by major on 2017/6/19.
+ */
+@RunWith(MockitoJUnitRunner.class)
+@WebAppConfiguration
+@SpringApplicationConfiguration(classes = Application.class)
+public class ExamVOWrapperTest  {
+    @InjectMocks
+    private ExamVOWrapper examVOWrapper = new ExamVOWrapper();
+
+    @Mock
+    private GroupService groupService;
+
+    @Mock
+    private ManagerService managerService;
+
+    List<Task> taskList = new ArrayList<>();
+    List<ExamVO> expect = new ArrayList<>();
+    List<Group> groupList = new ArrayList<>();
+    Manager manager = new Manager();
+    long organizerId = 17;
+    long participantId = 17;
+
+    @Before
+    public void setUp() {
+        initMocks(this);
+
+
+        Task task = new Task();
+        task.setId(497L);
+        task.setBeginTime(new Timestamp(1495443120000L));
+        task.setEndTime(new Timestamp(1495999990000L));
+        task.setDuration(1);
+        task.setInformation("lalaland");
+        task.setManagerId(17L);
+        task.setName("shi juan 1");
+        task.setSubsiteId(2L);
+        taskList.add(task);
+
+
+        ExamVO examVO = new ExamVO();
+        examVO.setId(497L);
+        examVO.setBeginTime(1495443120000L);
+        examVO.setEndTime(1495999990000L);
+        examVO.setDuration(1);
+        examVO.setInfo("lalaland");
+        examVO.setManagerId(17L);
+        examVO.setName("shi juan 1");
+        examVO.setSubsiteId(2L);
+        List<Long> groupIds = new ArrayList<>();
+        groupIds.add(111L);
+        examVO.setGroupIds(groupIds);
+        examVO.setManagerId(17L);
+        expect.add(examVO);
+
+        Group group = new Group();
+        group.setId(111L);
+        group.setName("la la land");
+        groupList.add(group);
+
+        manager.setId(17L);
+        manager.setName("czy");
+    }
+
+    @Test
+    public void should_returnExamVOList_when_givenTaskListAndOrganizerId() {
+        //arrange
+
+        when(groupService.getGroupsByManagerId(organizerId)).thenReturn(groupList);
+        when(managerService.getManagerById(organizerId)).thenReturn(manager);
+
+        //action
+        List<ExamVO> result = examVOWrapper.wrapOrganizerExamList(taskList, organizerId);
+
+        //assert
+        ExamVO resultExam = result.get(0);
+        ExamVO expectExam = expect.get(0);
+        Assert.assertEquals(expectExam.getId(), resultExam.getId());
+        Assert.assertEquals(expectExam.getManagerId(), resultExam.getManagerId());
+        Assert.assertEquals(expectExam.getGroupIds().get(0), resultExam.getGroupIds().get(0));
+    }
+
+    @Test
+    public void should_returnExamVOList_when_givenTaskAndParticipantId() {
+        //arrange
+
+
+        when(groupService.getGroupsByExamIdAndParticipantId(expect.get(0).getId(), participantId))
+                .thenReturn(groupList);
+        when(managerService.getManagerById(participantId)).thenReturn(manager);
+
+        //action
+        List<ExamVO> result = examVOWrapper.wrapParticipantExamList(taskList, participantId);
+
+        //assert
+        ExamVO resultExam = result.get(0);
+        ExamVO expectExam = expect.get(0);
+        Assert.assertEquals(expectExam.getId(), resultExam.getId());
+        Assert.assertEquals(expectExam.getManagerId(), resultExam.getManagerId());
+        Assert.assertEquals(expectExam.getGroupIds().get(0), resultExam.getGroupIds().get(0));
+
+    }
+}

+ 129 - 0
mooctest-site-server/src/test/java/cn/iselab/mooctest/site/web/logic/impl/ExamLogicImplTest.java

@@ -0,0 +1,129 @@
+package cn.iselab.mooctest.site.web.logic.impl;
+
+import cn.iselab.mooctest.site.Application;
+import cn.iselab.mooctest.site.models.Task;
+import cn.iselab.mooctest.site.service.TaskService;
+import cn.iselab.mooctest.site.web.data.ExamVO;
+import cn.iselab.mooctest.site.web.data.wrapper.ExamVOWrapper;
+import org.junit.Assert;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.InjectMocks;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
+import org.mockito.runners.MockitoJUnitRunner;
+import org.springframework.boot.test.SpringApplicationConfiguration;
+import org.springframework.test.context.web.WebAppConfiguration;
+
+import java.sql.Timestamp;
+import java.util.ArrayList;
+import java.util.List;
+
+import static org.mockito.Mockito.when;
+/**
+ * Created by major on 2017/6/19.
+ */
+
+@RunWith(MockitoJUnitRunner.class)
+@WebAppConfiguration
+@SpringApplicationConfiguration(classes = Application.class)
+public class ExamLogicImplTest {
+    @InjectMocks
+    private ExamLogicImpl examLogic = new ExamLogicImpl();
+
+    @Mock
+    private TaskService taskService;
+
+    @Mock
+    private ExamVOWrapper examVOWrapper;
+
+    @Before
+    public void setUp() {
+        MockitoAnnotations.initMocks(this);
+    }
+
+    @Test
+    public void should_returnTheParticipantExamList_when_givenParticipantId() {
+        //arrange
+        long participantId = 12L;
+
+        List<Task> taskList = new ArrayList<>();
+        Task task = new Task();
+        task.setId(497L);
+        task.setBeginTime(new Timestamp(1495443120000L));
+        task.setEndTime(new Timestamp(1495999990000L));
+        task.setDuration(1);
+        task.setInformation("lalaland");
+        task.setManagerId(17L);
+        task.setName("shi juan 1");
+        task.setSubsiteId(2L);
+        taskList.add(task);
+
+        List<ExamVO> expect = new ArrayList<>();
+        ExamVO examVO = new ExamVO();
+        examVO.setId(497L);
+        examVO.setBeginTime(1495443120000L);
+        examVO.setEndTime(1495999990000L);
+        examVO.setDuration(1);
+        examVO.setInfo("lalaland");
+        examVO.setManagerId(17L);
+        examVO.setName("shi juan 1");
+        examVO.setSubsiteId(2L);
+        expect.add(examVO);
+        when(taskService.getTaskListByWorkerId(participantId)).thenReturn(taskList);
+        when(examVOWrapper.wrapParticipantExamList(taskList, participantId)).thenReturn(expect);
+
+        //action
+        List<ExamVO> result = examLogic.getParticipantExamList(participantId);
+
+        //assert
+        ExamVO expectExam = expect.get(0);
+        ExamVO resultExam = result.get(0);
+        Assert.assertEquals(expectExam.getId(), resultExam.getId());
+        Assert.assertEquals(expectExam.getManagerId(), resultExam.getManagerId());
+
+    }
+
+    @Test
+    public void should_returnTheOrganizerExamList_when_givenParticipantId() {
+        //arrange
+        long organizerId = 12L;
+
+        List<Task> taskList = new ArrayList<>();
+        Task task = new Task();
+        task.setId(497L);
+        task.setBeginTime(new Timestamp(1495443120000L));
+        task.setEndTime(new Timestamp(1495999990000L));
+        task.setDuration(1);
+        task.setInformation("lalaland");
+        task.setManagerId(17L);
+        task.setName("shi juan 1");
+        task.setSubsiteId(2L);
+        taskList.add(task);
+
+        List<ExamVO> expect = new ArrayList<>();
+        ExamVO examVO = new ExamVO();
+        examVO.setId(497L);
+        examVO.setBeginTime(1495443120000L);
+        examVO.setEndTime(1495999990000L);
+        examVO.setDuration(1);
+        examVO.setInfo("lalaland");
+        examVO.setManagerId(17L);
+        examVO.setName("shi juan 1");
+        examVO.setSubsiteId(2L);
+        expect.add(examVO);
+        when(taskService.getTaskList(organizerId)).thenReturn(taskList);
+        when(examVOWrapper.wrapOrganizerExamList(taskList, organizerId)).thenReturn(expect);
+
+        //action
+        List<ExamVO> result = examLogic.getOrganizerExamList(organizerId);
+
+        //assert
+        ExamVO expectExam = expect.get(0);
+        ExamVO resultExam = result.get(0);
+        Assert.assertEquals(expectExam.getId(), resultExam.getId());
+        Assert.assertEquals(expectExam.getManagerId(), resultExam.getManagerId());
+
+    }
+}

+ 89 - 0
mooctest-site-server/src/test/java/cn/iselab/mooctest/site/web/logic/impl/TargetLogicImplTest.java

@@ -0,0 +1,89 @@
+package cn.iselab.mooctest.site.web.logic.impl;
+
+import cn.iselab.mooctest.site.models.App;
+import cn.iselab.mooctest.site.models.fromKibug.Application;
+import cn.iselab.mooctest.site.service.AppService;
+import cn.iselab.mooctest.site.service.fromKibug.ApplicationService;
+import cn.iselab.mooctest.site.web.data.TargetVO;
+import cn.iselab.mooctest.site.web.data.wrapper.TargetVOWrapper;
+import org.junit.Assert;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.InjectMocks;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
+import org.mockito.runners.MockitoJUnitRunner;
+import org.springframework.boot.test.SpringApplicationConfiguration;
+import org.springframework.test.context.web.WebAppConfiguration;
+
+import java.sql.Timestamp;
+import java.util.ArrayList;
+import java.util.List;
+import static org.mockito.Mockito.when;
+
+/**
+ * Created by ROGK on 2017/6/19.
+ */
+@RunWith(MockitoJUnitRunner.class)
+@WebAppConfiguration
+@SpringApplicationConfiguration(classes = cn.iselab.mooctest.site.Application.class)
+public class TargetLogicImplTest {
+
+    @InjectMocks
+    private TargetLogicImpl targetLogic = new TargetLogicImpl();
+    @Mock
+    private TargetVOWrapper targetVOWrapper;
+    @Mock
+    private ApplicationService applicationService;
+    @Mock
+    private AppService appService;
+
+    @Before
+    public void setUp() throws Exception {
+        MockitoAnnotations.initMocks(this);
+    }
+
+    @Test
+    public void should_returnTargetsList_whenTargetsListExists() throws Exception{
+        List<TargetVO> expect = new ArrayList<>();
+        TargetVO targetVO=new TargetVO();
+        targetVO.setVisible(false);
+        targetVO.setId(1L);
+        targetVO.setName("test");
+        targetVO.setUrl("test");
+        targetVO.setManagerId(1L);
+        targetVO.setSubsiteId(1L);
+        targetVO.setCreateTimeMillis(new Timestamp(1497856288L));
+        targetVO.setStatus(1);
+        targetVO.setEndTimeMillis(new Timestamp(1497856289L));
+        targetVO.setFromCloud(1);
+        expect.add(targetVO);
+
+        List<App> apps=new ArrayList<>();
+        App app = new App();
+        app.setId(1L);
+        app.setName("test");
+        app.setSubsiteId(1L);
+        app.setVisible(false);
+        app.setManagerId(1L);
+        app.setStatus(1);
+        app.setCreateTime(new Timestamp(1497856288L));
+        app.setCaseUrl("test");
+        app.setUrl("test");
+        apps.add(app);
+        when(appService.getManagerApps(17L)).thenReturn(apps);
+
+        when(targetVOWrapper.wrap(apps)).thenReturn(expect);
+
+        Application application=new Application();
+        application.setUploadedCaseId(1L);
+        application.setEndTimeMillis(1497856289L);
+        application.setFromCloud(1);
+        application.setStatus(new Short("1"));
+        when(applicationService.getAppByUploaderCaseId(1L)).thenReturn(application);
+
+        List<TargetVO> result = targetLogic.getManagerTargets(17L);
+        Assert.assertEquals(expect,result);
+    }
+}