|
@@ -255,6 +255,65 @@ public class S6IpqcDisplayContractTests
|
|
|
Assert.Contains("m.tenant_id = @TenantId", s);
|
|
Assert.Contains("m.tenant_id = @TenantId", s);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+ // ───────────────── Batch 3 · D-06 源单状态 / 流程状态 语义消歧 ─────────────────
|
|
|
|
|
+
|
|
|
|
|
+ /// <summary>
|
|
|
|
|
+ /// 误导性 label「检验状态」必须消失——它绑定的是源字段 qms_gcjyd.status,
|
|
|
|
|
+ /// 用户会误读成当前流程进度。
|
|
|
|
|
+ /// </summary>
|
|
|
|
|
+ [Fact]
|
|
|
|
|
+ public void Detail_NoLongerUsesMisleadingInspectionStatusLabel()
|
|
|
|
|
+ {
|
|
|
|
|
+ Assert.DoesNotContain("label=\"检验状态\"", Vue());
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ /// <summary>源字段改标为「源单状态」,但绑定的 DTO 字段不变(API contract 不动)。</summary>
|
|
|
|
|
+ [Fact]
|
|
|
|
|
+ public void Detail_SourceStatus_RelabelledButBindingUnchanged()
|
|
|
|
|
+ {
|
|
|
|
|
+ var v = Vue();
|
|
|
|
|
+ Assert.Contains("label=\"源单状态\"", v);
|
|
|
|
|
+ Assert.Contains("displayValue(detail.inspectionStatus)", v);
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ /// <summary>工作流状态在详情顶部有显式「流程状态:」标注,不再是一个无标签的裸标签。</summary>
|
|
|
|
|
+ [Fact]
|
|
|
|
|
+ public void Detail_WorkflowStatus_IsExplicitlyLabelled()
|
|
|
|
|
+ {
|
|
|
|
|
+ var v = Vue();
|
|
|
|
|
+ Assert.Contains("流程状态:", v);
|
|
|
|
|
+ Assert.Contains("{{ flowStatusText }}", v);
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ /// <summary>
|
|
|
|
|
+ /// 信息层级:流程状态(flow-panel)必须出现在源单状态(基础信息区)之前。
|
|
|
|
|
+ /// 抽屉先渲染 flow-panel 再渲染 el-descriptions,故以源码位置为序即可断言。
|
|
|
|
|
+ /// </summary>
|
|
|
|
|
+ [Fact]
|
|
|
|
|
+ public void Detail_WorkflowStatus_PrecedesSourceStatus()
|
|
|
|
|
+ {
|
|
|
|
|
+ var v = Vue();
|
|
|
|
|
+ Assert.True(v.IndexOf("流程状态:", StringComparison.Ordinal)
|
|
|
|
|
+ < v.IndexOf("label=\"源单状态\"", StringComparison.Ordinal));
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ /// <summary>列表只展示流程状态,不得再引入第二个状态列造成二次困惑。</summary>
|
|
|
|
|
+ [Fact]
|
|
|
|
|
+ public void List_ShowsOnlyWorkflowStatus_NoSourceStatusColumn()
|
|
|
|
|
+ {
|
|
|
|
|
+ var v = Vue();
|
|
|
|
|
+ Assert.Contains("prop=\"businessStatus\" label=\"流程状态\"", v);
|
|
|
|
|
+ Assert.DoesNotContain("el-table-column prop=\"inspectionStatus\"", v);
|
|
|
|
|
+ Assert.DoesNotContain("row.inspectionStatus", v);
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ /// <summary>Batch 2 的终态不显示当前节点逻辑保持不变(防回归)。</summary>
|
|
|
|
|
+ [Fact]
|
|
|
|
|
+ public void CurrentNode_TerminalSuppression_StillIntact()
|
|
|
|
|
+ {
|
|
|
|
|
+ Assert.Contains("!flowState.isCompleted && flowState.currentNodeName", Vue());
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
private static string FindFile(params string[] parts)
|
|
private static string FindFile(params string[] parts)
|
|
|
{
|
|
{
|
|
|
var dir = new DirectoryInfo(AppContext.BaseDirectory);
|
|
var dir = new DirectoryInfo(AppContext.BaseDirectory);
|