wanshenmean
8 天以前 adb4016b5eb5b119a899480c321be996d9bf10bd
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
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
using Microsoft.Extensions.Logging;
using Moq;
using WIDESEAWCS_Common.TaskEnum;
using WIDESEAWCS_Core;
using WIDESEAWCS_ITaskInfoService;
using WIDESEAWCS_Model.Models;
using WIDESEAWCS_QuartzJob;
using WIDESEAWCS_QuartzJob.Service;
using WIDESEAWCS_Tasks;
 
namespace WIDESEAWCS_Tests;
 
public class StackerCraneTaskSelectorTests
{
    [Fact]
    public void SelectTask_ShouldCallTransferCheck_ForOutboundTask_AndReturnRelocationTask()
    {
        var taskService = new Mock<ITaskService>();
        var routerService = new Mock<IRouterService>();
        var stackerCrane = new Mock<IStackerCrane>();
 
        stackerCrane.SetupGet(x => x.DeviceCode).Returns("SC01");
        stackerCrane.SetupGet(x => x.LastTaskType).Returns((int?)null);
 
        var outboundTask = new Dt_Task
        {
            TaskNum = 1001,
            TaskType = (int)TaskOutboundTypeEnum.Outbound,
            Roadway = "SC01",
            NextAddress = "OUT-01"
        };
 
        var relocationTask = new Dt_Task
        {
            TaskNum = 2001,
            TaskType = (int)TaskRelocationTypeEnum.Relocation,
            Roadway = "SC01",
            NextAddress = "R-01"
        };
 
        taskService
            .Setup(x => x.QueryStackerCraneTask("SC01", ""))
            .Returns(outboundTask);
        taskService.Setup(x => x.QueryByTaskNum(2001)).Returns((Dt_Task?)null);
        taskService.Setup(x => x.AddData(It.IsAny<Dt_Task>())).Returns(WebResponseContent.Instance.OK());
 
        var transferCheckCalledCount = 0;
        var mockLogger = new Mock<ILogger>();
        var selector = new StackerCraneTaskSelector(
            taskService.Object,
            routerService.Object,
            taskNum =>
            {
                transferCheckCalledCount++;
                Assert.Equal(1001, taskNum);
                return relocationTask;
            },
            mockLogger.Object);
 
        var selectedTask = selector.SelectTask(stackerCrane.Object);
 
        Assert.NotNull(selectedTask);
        Assert.Equal(relocationTask.TaskNum, selectedTask!.TaskNum);
        Assert.Equal(1, transferCheckCalledCount);
        taskService.Verify(x => x.AddData(It.Is<Dt_Task>(t => t.TaskNum == 2001)), Times.Once);
    }
 
    [Fact]
    public void SelectTask_ShouldAddTaskToTable_WhenTransferCheckReturnsNewOutboundTask()
    {
        var taskService = new Mock<ITaskService>();
        var routerService = new Mock<IRouterService>();
        var stackerCrane = new Mock<IStackerCrane>();
 
        stackerCrane.SetupGet(x => x.DeviceCode).Returns("SC01");
        stackerCrane.SetupGet(x => x.LastTaskType).Returns((int?)null);
 
        var outboundTask = new Dt_Task
        {
            TaskNum = 1101,
            TaskType = (int)TaskOutboundTypeEnum.Outbound,
            Roadway = "SC01",
            NextAddress = "OUT-01"
        };
 
        var newOutboundTask = new Dt_Task
        {
            TaskNum = 2101,
            TaskType = (int)TaskOutboundTypeEnum.Outbound,
            Roadway = "SC01",
            NextAddress = "OUT-02"
        };
 
        taskService.Setup(x => x.QueryStackerCraneTask("SC01", "")).Returns(outboundTask);
        taskService.Setup(x => x.QueryByTaskNum(2101)).Returns((Dt_Task?)null);
        taskService.Setup(x => x.AddData(It.IsAny<Dt_Task>())).Returns(WebResponseContent.Instance.OK());
        taskService
            .Setup(x => x.UpdateTaskExceptionMessage(It.IsAny<int>(), It.IsAny<string>()))
            .Returns(WebResponseContent.Instance.OK());
        taskService.Setup(x => x.QueryStackerCraneOutTasks("SC01", It.IsAny<List<string>>())).Returns(new List<Dt_Task>());
        taskService.Setup(x => x.QueryStackerCraneInTask("SC01", "")).Returns((Dt_Task?)null);
 
        routerService
            .Setup(x => x.QueryNextRoute("SC01", "OUT-02", (int)TaskOutboundTypeEnum.Outbound))
            .Returns((WIDESEAWCS_QuartzJob.Models.Dt_Router?)null);
        routerService
            .Setup(x => x.QueryNextRoutes("SC01", "OUT-01", (int)TaskOutboundTypeEnum.Outbound))
            .Returns(new List<WIDESEAWCS_QuartzJob.Models.Dt_Router>());
 
        var mockLogger = new Mock<ILogger>();
        var selector = new StackerCraneTaskSelector(
            taskService.Object,
            routerService.Object,
            _ => newOutboundTask,
            mockLogger.Object);
 
        _ = selector.SelectTask(stackerCrane.Object);
 
        taskService.Verify(x => x.AddData(It.Is<Dt_Task>(t => t.TaskNum == 2101)), Times.Once);
    }
}