云
4 小时以前 e09f103259fa602382bb5ce2a03361a6397af46a
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
package cn.iocoder.yudao.module.qcreport.engine;
 
import cn.iocoder.yudao.module.qcreport.dal.dataobject.version.ReportTemplateSchema;
import cn.iocoder.yudao.module.qcreport.engine.context.ReportContextCodec;
import cn.iocoder.yudao.module.qcreport.engine.render.RenderOutcome;
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.condition.EnabledIfSystemProperty;
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import static org.junit.jupiter.api.Assertions.*;
 
/** Explicit local migration harness: renders audited inputs with the real application engine. */
class QcMigrationRenderTest {
    @Test
    @EnabledIfSystemProperty(named="qc.migration.input", matches=".+")
    void renderReviewedMigrationInputs() throws Exception {
        ObjectMapper mapper = new ObjectMapper();
        Path input = Path.of(System.getProperty("qc.migration.input"));
        List<Map<String,Object>> jobs = mapper.readValue(input.toFile(),new TypeReference<>(){});
        List<Map<String,Object>> output = new ArrayList<>();
        Path previews = input.getParent().resolve("report-previews");
        Files.createDirectories(previews);
        for (Map<String,Object> job : jobs) {
            ReportTemplateSchema schema = mapper.convertValue(job.get("schema"), ReportTemplateSchema.class);
            @SuppressWarnings("unchecked") Map<String,Object> snapshot=(Map<String,Object>)job.get("snapshot");
            assertTrue(QualityReportEngine.hasCanvas(schema));
            RenderOutcome outcome=QualityReportEngine.render(schema, ReportContextCodec.fromMap(snapshot));
            assertFalse(outcome.body().isBlank());
            assertFalse(outcome.html().contains("{{"),"Unresolved report binding");
            Map<String,Object> row = new LinkedHashMap<>();
            row.put("id",job.get("id"));row.put("report_no",job.get("report_no"));
            row.put("template_version",job.get("template_version"));
            row.put("snapshot",ReportContextCodec.toMap(outcome.context()));
            row.put("html",outcome.html());row.put("warnings",outcome.errors());
            output.add(row);
            Files.writeString(previews.resolve("report-"+job.get("id")+".html"), outcome.html());
        }
        mapper.writerWithDefaultPrettyPrinter().writeValue(input.getParent().resolve("report-output.json").toFile(),output);
        assertEquals(jobs.size(),output.size());
        assertEquals(12,output.size());
    }
}