-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathSmartFactoryTest.java
More file actions
111 lines (93 loc) · 5.26 KB
/
Copy pathSmartFactoryTest.java
File metadata and controls
111 lines (93 loc) · 5.26 KB
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
package smartfactory;
import smartfactory.model.Machine;
import smartfactory.model.MachineStatus;
import smartfactory.model.SensorReading;
import smartfactory.service.SmartFactoryService;
/** ทดสอบด้วย Java ล้วนโดยไม่ต้องติดตั้ง JUnit หรือ Maven */
public class SmartFactoryTest {
public static void main(String[] args) {
testSafeReadingSetsRunning();
testHighTemperatureSetsWarning();
testEmergencyTemperatureStopsMachine();
testMaintenanceResetsMachine();
testStatusAndMaintenanceAreCountedSeparately();
testMachineDetailsCanBeUpdated();
testDuplicateIdIsRejected();
System.out.println("PASS: 7 tests");
}
private static void testSafeReadingSetsRunning() {
Machine machine = new Machine("T-001", "Test Machine", "Test Area");
machine.updateReading(new SensorReading(60, 2));
assertEquals(MachineStatus.RUNNING, machine.getStatus(), "safe reading");
}
private static void testHighTemperatureSetsWarning() {
Machine machine = new Machine("T-002", "Hot Machine", "Test Area");
machine.updateReading(new SensorReading(85, 2));
assertEquals(MachineStatus.WARNING, machine.getStatus(), "high temperature");
assertTrue(machine.requiresMaintenance(), "warning requires maintenance");
}
private static void testEmergencyTemperatureStopsMachine() {
Machine machine = new Machine("T-005", "Emergency Machine", "Test Area");
machine.updateReading(new SensorReading(100.0, 2));
assertEquals(MachineStatus.EMERGENCY_STOP, machine.getStatus(), "emergency temperature");
assertTrue(machine.requiresMaintenance(), "emergency stop requires maintenance");
}
private static void testMaintenanceResetsMachine() {
Machine machine = new Machine("T-003", "Old Machine", "Test Area", MachineStatus.RUNNING, 600);
machine.performMaintenance();
assertEquals(0, machine.getOperatingHours(), "reset hours");
assertEquals(MachineStatus.OFFLINE, machine.getStatus(), "maintenance status");
}
private static void testStatusAndMaintenanceAreCountedSeparately() {
SmartFactoryService service = SmartFactoryService.createWithSampleData();
Machine pump = service.findRequired("M-003");
assertEquals(1L, service.countByStatus(MachineStatus.WARNING), "abnormal sensor count");
assertEquals(2L, service.countRequiringMaintenance(), "initial maintenance count");
assertEquals(MachineStatus.RUNNING, pump.getStatus(), "overdue machine can still be running");
assertTrue(pump.requiresMaintenance(), "operating hours require maintenance");
service.performMaintenance("M-002");
assertEquals(1L, service.countRequiringMaintenance(), "one machine still requires maintenance");
service.updateSensor("M-002", 65, 3);
assertEquals(1L, service.countRequiringMaintenance(), "normal reading keeps the other machine in count");
service.performMaintenance("M-003");
service.updateSensor("M-003", 60, 2);
assertEquals(0L, service.countRequiringMaintenance(), "all maintenance completed");
}
private static void testDuplicateIdIsRejected() {
SmartFactoryService service = new SmartFactoryService();
service.addMachine(new Machine("T-004", "First", "Test Area"));
try {
service.addMachine(new Machine("t-004", "Second", "Test Area"));
throw new AssertionError("duplicate id should fail");
} catch (IllegalArgumentException expected) {
assertTrue(expected.getMessage().contains("ซ้ำ"), "duplicate error message");
}
}
private static void testMachineDetailsCanBeUpdated() {
SmartFactoryService service = SmartFactoryService.createWithSampleData();
Machine conveyor = service.findRequired("M-002");
SensorReading readingBeforeEdit = conveyor.getLatestReading();
service.updateMachineDetails("M-002", " สายพานลำเลียง ", " Packing Line ");
assertEquals("M-002", conveyor.getId(), "machine id remains unchanged");
assertEquals("สายพานลำเลียง", conveyor.getName(), "updated machine name");
assertEquals("Packing Line", conveyor.getLocation(), "updated machine location");
assertEquals(readingBeforeEdit, conveyor.getLatestReading(), "sensor reading remains unchanged");
try {
service.updateMachineDetails("M-002", "", "Line A");
throw new AssertionError("blank machine name should fail");
} catch (IllegalArgumentException expected) {
assertEquals("สายพานลำเลียง", conveyor.getName(), "invalid edit keeps previous name");
assertEquals("Packing Line", conveyor.getLocation(), "invalid edit keeps previous location");
}
}
private static void assertTrue(boolean actual, String message) {
if (!actual) {
throw new AssertionError(message);
}
}
private static void assertEquals(Object expected, Object actual, String message) {
if (!expected.equals(actual)) {
throw new AssertionError(message + " expected=" + expected + " actual=" + actual);
}
}
}