1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
package cn.iocoder.yudao.module.srm.service.tender;
 
import cn.iocoder.yudao.module.srm.controller.admin.tender.vo.SrmSupplierQuoteSaveReqVO;
import cn.iocoder.yudao.module.srm.dal.dataobject.*;
import cn.iocoder.yudao.module.srm.dal.mysql.*;
import org.junit.jupiter.api.Test;
import org.springframework.test.util.ReflectionTestUtils;
import java.math.BigDecimal;
import static org.junit.jupiter.api.Assertions.assertThrows;
import static org.mockito.Mockito.*;
import static org.mockito.ArgumentMatchers.*;
 
class SrmQuoteOwnershipTest {
    @Test void rejectsMaterialFromAnotherProject() {
        var service = new SrmTenderBidServiceImpl();
        var bids = mock(SrmTenderBidMapper.class); var projects = mock(SrmTenderProjectMapper.class);
        var quotes = mock(SrmSupplierQuoteMapper.class); var materials = mock(SrmTenderMaterialMapper.class);
        ReflectionTestUtils.setField(service, "tenderBidMapper", bids);
        ReflectionTestUtils.setField(service, "tenderProjectMapper", projects);
        ReflectionTestUtils.setField(service, "supplierQuoteMapper", quotes);
        ReflectionTestUtils.setField(service, "tenderMaterialMapper", materials);
        var bid = new SrmTenderBidDO(); bid.setId(1L); bid.setTenderProjectId(10L); bid.setBidStatus(0);
        var project = new SrmTenderProjectDO(); project.setId(10L); project.setTenderStatus(10);
        var material = new SrmTenderMaterialDO(); material.setId(9L); material.setTenderProjectId(11L);
        when(bids.selectById(1L)).thenReturn(bid); when(projects.selectById(10L)).thenReturn(project);
        when(materials.selectById(9L)).thenReturn(material);
        var req = new SrmSupplierQuoteSaveReqVO(); req.setBidId(1L); req.setTenderMaterialId(9L); req.setQuotePrice(BigDecimal.ONE);
        assertThrows(RuntimeException.class, () -> service.createQuote(req));
        verify(quotes, never()).insert(any(SrmSupplierQuoteDO.class));
    }
 
    @Test void rejectsEditingQuoteWithAnotherBidId() {
        var service = new SrmTenderBidServiceImpl();
        var bids = mock(SrmTenderBidMapper.class); var projects = mock(SrmTenderProjectMapper.class);
        var quotes = mock(SrmSupplierQuoteMapper.class); var materials = mock(SrmTenderMaterialMapper.class);
        ReflectionTestUtils.setField(service, "tenderBidMapper", bids);
        ReflectionTestUtils.setField(service, "tenderProjectMapper", projects);
        ReflectionTestUtils.setField(service, "supplierQuoteMapper", quotes);
        ReflectionTestUtils.setField(service, "tenderMaterialMapper", materials);
        var bid = new SrmTenderBidDO(); bid.setId(1L); bid.setTenderProjectId(10L); bid.setBidStatus(0);
        var project = new SrmTenderProjectDO(); project.setId(10L); project.setTenderStatus(10);
        var quote = new SrmSupplierQuoteDO(); quote.setId(5L); quote.setBidId(2L); quote.setTenderMaterialId(9L);
        when(bids.selectById(1L)).thenReturn(bid); when(projects.selectById(10L)).thenReturn(project);
        when(quotes.selectById(5L)).thenReturn(quote);
        var req = new SrmSupplierQuoteSaveReqVO(); req.setId(5L); req.setBidId(1L); req.setTenderMaterialId(9L); req.setQuotePrice(BigDecimal.ONE);
        assertThrows(RuntimeException.class, () -> service.updateQuote(req));
        verify(quotes, never()).updateById(any(SrmSupplierQuoteDO.class));
    }
}