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());
|
}
|
}
|