刘光辉
昨天 bb638871a7fb692d80f1b7a758f991dc0879002c
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
package jnpf.limsService.impl;
 
import jnpf.limsEntity.LimsMessageConfigRow;
 
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.Arrays;
import java.util.Collections;
 
/** Lightweight checks for message precondition failures in environments without a test runner. */
public class LimsMessageFailurePolicyChecks {
    public static void main(String[] args) throws Exception {
        require(!LimsMessageConfigValidator.validateRows(Collections.emptyList()).isValid(),
                "missing config must be rejected");
 
        LimsMessageConfigRow valid = validRow();
        require(LimsMessageConfigValidator.validateRows(Collections.singletonList(valid)).isValid(),
                "one enabled in-site template must be accepted");
 
        valid.setConfigEnabled(0);
        require(!LimsMessageConfigValidator.validateRows(Collections.singletonList(valid)).isValid(),
                "disabled config must be rejected");
        valid.setConfigEnabled(1);
 
        LimsMessageConfigRow secondRelation = validRow();
        secondRelation.setRelationId("relation-2");
        require(!LimsMessageConfigValidator.validateRows(Arrays.asList(valid, secondRelation)).isValid(),
                "multiple template relations must be rejected");
 
        valid.setMenuUrl(" ");
        require(!LimsMessageConfigValidator.validateRows(Collections.singletonList(valid)).isValid(),
                "empty menu URL must be rejected");
 
        String service = read("jnpf-lims/jnpf-lims-biz/src/main/java/jnpf/limsService/impl/"
                + "LimsMessageServiceImpl.java");
        require(service.contains("ready ? recipients : Collections.emptyList()"),
                "precondition failures must not create delivery rows");
        require(service.contains("RECIPIENT_NOT_FOUND: no active user resolved"),
                "zero-recipient failure reason must be recorded");
        require(service.contains("if (!config.isValid())"),
                "invalid configuration must stop before platform sending");
        require(service.contains("int sendable = config.isValid() ? recipients.size() : 0"),
                "dry-run must not report invalid configuration as sendable");
    }
 
    private static LimsMessageConfigRow validRow() {
        LimsMessageConfigRow row = new LimsMessageConfigRow();
        row.setConfigId("config-1");
        row.setConfigEnabled(1);
        row.setConfigSource("6");
        row.setRelationId("relation-1");
        row.setRelationEnabled(1);
        row.setRelationMessageType("1");
        row.setTemplateId("template-1");
        row.setTemplateEnabled(1);
        row.setTemplateMessageType("1");
        row.setTemplateSource("6");
        row.setMenuUrl("/lims/detail?id={bizId}");
        return row;
    }
 
    private static String read(String path) throws Exception {
        Path root = Paths.get(System.getProperty("user.dir"));
        return new String(Files.readAllBytes(root.resolve(path)), StandardCharsets.UTF_8);
    }
 
    private static void require(boolean value, String message) {
        if (!value) {
            throw new AssertionError(message);
        }
    }
}