package cn.iocoder.yudao.module.bpm.service.oa.universal;

import cn.iocoder.yudao.module.bpm.controller.admin.oa.universal.vo.OaUniversalPageReqVO;
import cn.iocoder.yudao.module.bpm.controller.admin.oa.universal.vo.OaUniversalSaveReqVO;
import cn.iocoder.yudao.module.bpm.service.oa.universal.OaUniversalServiceImpl;
import org.junit.jupiter.api.Disabled;
import org.junit.jupiter.api.Test;

import javax.annotation.Resource;

import cn.iocoder.yudao.framework.test.core.ut.BaseDbUnitTest;

import cn.iocoder.yudao.module.bpm.dal.dataobject.oa.universal.OaUniversalDO;
import cn.iocoder.yudao.module.bpm.dal.mysql.oa.universal.OaUniversalMapper;
import cn.iocoder.yudao.framework.common.pojo.PageResult;

import org.springframework.context.annotation.Import;

import static cn.iocoder.yudao.module.bpm.enums.ErrorCodeConstants.*;
import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.*;
import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.*;
import static cn.iocoder.yudao.framework.common.util.date.LocalDateTimeUtils.*;
import static cn.iocoder.yudao.framework.common.util.object.ObjectUtils.*;
import static org.junit.jupiter.api.Assertions.*;

/**
 * {@link OaUniversalServiceImpl} 的单元测试类
 *
 * @author dp
 */
@Import(OaUniversalServiceImpl.class)
public class OaUniversalServiceImplTest extends BaseDbUnitTest {
    //
    // @Resource
    // private OaUniversalServiceImpl oaUniversalService;
    //
    // @Resource
    // private OaUniversalMapper oaUniversalMapper;
    //
    // @Test
    // public void testCreateOaUniversal_success() {
    //     // 准备参数
    //     OaUniversalSaveReqVO createReqVO = randomPojo(OaUniversalSaveReqVO.class).setId(null);
    //
    //     // 调用
    //     Long oaUniversalId = oaUniversalService.createOaUniversal(createReqVO);
    //     // 断言
    //     assertNotNull(oaUniversalId);
    //     // 校验记录的属性是否正确
    //     OaUniversalDO oaUniversal = oaUniversalMapper.selectById(oaUniversalId);
    //     assertPojoEquals(createReqVO, oaUniversal, "id");
    // }
    //
    // @Test
    // public void testUpdateOaUniversal_success() {
    //     // mock 数据
    //     OaUniversalDO dbOaUniversal = randomPojo(OaUniversalDO.class);
    //     oaUniversalMapper.insert(dbOaUniversal);// @Sql: 先插入出一条存在的数据
    //     // 准备参数
    //     OaUniversalSaveReqVO updateReqVO = randomPojo(OaUniversalSaveReqVO.class, o -> {
    //         o.setId(dbOaUniversal.getId()); // 设置更新的 ID
    //     });
    //
    //     // 调用
    //     oaUniversalService.updateOaUniversal(updateReqVO);
    //     // 校验是否更新正确
    //     OaUniversalDO oaUniversal = oaUniversalMapper.selectById(updateReqVO.getId()); // 获取最新的
    //     assertPojoEquals(updateReqVO, oaUniversal);
    // }
    //
    // @Test
    // public void testUpdateOaUniversal_notExists() {
    //     // 准备参数
    //     OaUniversalSaveReqVO updateReqVO = randomPojo(OaUniversalSaveReqVO.class);
    //
    //     // 调用, 并断言异常
    //     assertServiceException(() -> oaUniversalService.updateOaUniversal(updateReqVO), OA_UNIVERSAL_NOT_EXISTS);
    // }
    //
    // @Test
    // public void testDeleteOaUniversal_success() {
    //     // mock 数据
    //     OaUniversalDO dbOaUniversal = randomPojo(OaUniversalDO.class);
    //     oaUniversalMapper.insert(dbOaUniversal);// @Sql: 先插入出一条存在的数据
    //     // 准备参数
    //     Long id = dbOaUniversal.getId();
    //
    //     // 调用
    //     oaUniversalService.deleteOaUniversal(id);
    //    // 校验数据不存在了
    //    assertNull(oaUniversalMapper.selectById(id));
    // }
    //
    // @Test
    // public void testDeleteOaUniversal_notExists() {
    //     // 准备参数
    //     Long id = randomLongId();
    //
    //     // 调用, 并断言异常
    //     assertServiceException(() -> oaUniversalService.deleteOaUniversal(id), OA_UNIVERSAL_NOT_EXISTS);
    // }
    //
    // @Test
    // @Disabled  // TODO 请修改 null 为需要的值，然后删除 @Disabled 注解
    // public void testGetOaUniversalPage() {
    //    // mock 数据
    //    OaUniversalDO dbOaUniversal = randomPojo(OaUniversalDO.class, o -> { // 等会查询到
    //        o.setUniversalId(null);
    //        o.setEmployeeId(null);
    //        o.setEmployeeUuid(null);
    //        o.setEmployeeName(null);
    //        o.setUserId(null);
    //        o.setUserUuid(null);
    //        o.setDeptId(null);
    //        o.setDeptUuid(null);
    //        o.setPosition(null);
    //        o.setTitle(null);
    //        o.setDescription(null);
    //        o.setRemarks(null);
    //        o.setProcInstId(null);
    //        o.setAuditStatus(null);
    //        o.setCurrentAuditUserId(null);
    //        o.setCurrentAuditUserUuid(null);
    //        o.setCurrentAuditEmployeeId(null);
    //        o.setCurrentAuditEmployeeUuid(null);
    //        o.setFinalAuditDate(null);
    //        o.setInfoSource(null);
    //        o.setCreateTime(null);
    //    });
    //    oaUniversalMapper.insert(dbOaUniversal);
    //    // 测试 universalId 不匹配
    //    oaUniversalMapper.insert(cloneIgnoreId(dbOaUniversal, o -> o.setUniversalId(null)));
    //    // 测试 employeeId 不匹配
    //    oaUniversalMapper.insert(cloneIgnoreId(dbOaUniversal, o -> o.setEmployeeId(null)));
    //    // 测试 employeeUuid 不匹配
    //    oaUniversalMapper.insert(cloneIgnoreId(dbOaUniversal, o -> o.setEmployeeUuid(null)));
    //    // 测试 employeeName 不匹配
    //    oaUniversalMapper.insert(cloneIgnoreId(dbOaUniversal, o -> o.setEmployeeName(null)));
    //    // 测试 userId 不匹配
    //    oaUniversalMapper.insert(cloneIgnoreId(dbOaUniversal, o -> o.setUserId(null)));
    //    // 测试 userUuid 不匹配
    //    oaUniversalMapper.insert(cloneIgnoreId(dbOaUniversal, o -> o.setUserUuid(null)));
    //    // 测试 deptId 不匹配
    //    oaUniversalMapper.insert(cloneIgnoreId(dbOaUniversal, o -> o.setDeptId(null)));
    //    // 测试 deptUuid 不匹配
    //    oaUniversalMapper.insert(cloneIgnoreId(dbOaUniversal, o -> o.setDeptUuid(null)));
    //    // 测试 position 不匹配
    //    oaUniversalMapper.insert(cloneIgnoreId(dbOaUniversal, o -> o.setPosition(null)));
    //    // 测试 title 不匹配
    //    oaUniversalMapper.insert(cloneIgnoreId(dbOaUniversal, o -> o.setTitle(null)));
    //    // 测试 description 不匹配
    //    oaUniversalMapper.insert(cloneIgnoreId(dbOaUniversal, o -> o.setDescription(null)));
    //    // 测试 remarks 不匹配
    //    oaUniversalMapper.insert(cloneIgnoreId(dbOaUniversal, o -> o.setRemarks(null)));
    //    // 测试 procInstId 不匹配
    //    oaUniversalMapper.insert(cloneIgnoreId(dbOaUniversal, o -> o.setProcInstId(null)));
    //    // 测试 auditStatus 不匹配
    //    oaUniversalMapper.insert(cloneIgnoreId(dbOaUniversal, o -> o.setAuditStatus(null)));
    //    // 测试 currentAuditUserId 不匹配
    //    oaUniversalMapper.insert(cloneIgnoreId(dbOaUniversal, o -> o.setCurrentAuditUserId(null)));
    //    // 测试 currentAuditUserUuid 不匹配
    //    oaUniversalMapper.insert(cloneIgnoreId(dbOaUniversal, o -> o.setCurrentAuditUserUuid(null)));
    //    // 测试 currentAuditEmployeeId 不匹配
    //    oaUniversalMapper.insert(cloneIgnoreId(dbOaUniversal, o -> o.setCurrentAuditEmployeeId(null)));
    //    // 测试 currentAuditEmployeeUuid 不匹配
    //    oaUniversalMapper.insert(cloneIgnoreId(dbOaUniversal, o -> o.setCurrentAuditEmployeeUuid(null)));
    //    // 测试 finalAuditDate 不匹配
    //    oaUniversalMapper.insert(cloneIgnoreId(dbOaUniversal, o -> o.setFinalAuditDate(null)));
    //    // 测试 infoSource 不匹配
    //    oaUniversalMapper.insert(cloneIgnoreId(dbOaUniversal, o -> o.setInfoSource(null)));
    //    // 测试 createTime 不匹配
    //    oaUniversalMapper.insert(cloneIgnoreId(dbOaUniversal, o -> o.setCreateTime(null)));
    //    // 准备参数
    //    OaUniversalPageReqVO reqVO = new OaUniversalPageReqVO();
    //    reqVO.setUniversalId(null);
    //    reqVO.setEmployeeId(null);
    //    reqVO.setEmployeeUuid(null);
    //    reqVO.setEmployeeName(null);
    //    reqVO.setUserId(null);
    //    reqVO.setUserUuid(null);
    //    reqVO.setDeptId(null);
    //    reqVO.setDeptUuid(null);
    //    reqVO.setPosition(null);
    //    reqVO.setTitle(null);
    //    reqVO.setDescription(null);
    //    reqVO.setRemarks(null);
    //    reqVO.setProcInstId(null);
    //    reqVO.setAuditStatus(null);
    //    reqVO.setCurrentAuditUserId(null);
    //    reqVO.setCurrentAuditUserUuid(null);
    //    reqVO.setCurrentAuditEmployeeId(null);
    //    reqVO.setCurrentAuditEmployeeUuid(null);
    //    reqVO.setFinalAuditDate(buildBetweenTime(2023, 2, 1, 2023, 2, 28));
    //    reqVO.setInfoSource(null);
    //    reqVO.setCreateTime(buildBetweenTime(2023, 2, 1, 2023, 2, 28));
    //
    //    // 调用
    //    PageResult<OaUniversalDO> pageResult = oaUniversalService.getOaUniversalPage(reqVO);
    //    // 断言
    //    assertEquals(1, pageResult.getTotal());
    //    assertEquals(1, pageResult.getList().size());
    //    assertPojoEquals(dbOaUniversal, pageResult.getList().get(0));
    // }

}