Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 3 additions & 2 deletions src/main/libs/FixFlows.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,9 +8,9 @@ export function fix(results: core.ScanResult[]): core.ScanResult[] {
const fixables: core.RuleResult[] = result.ruleResults.filter(
(r) =>
(r.ruleName === "UnusedVariable" && r.occurs) ||
(r.ruleName === "UnconnectedElement" && r.occurs)
(r.ruleName === "UnconnectedElement" && r.occurs) // TODO: this should be rule.occurs && rule.ruleDefinition.fixable
);
if (fixables && fixables.length > 0) {
if (fixables?.length > 0) {
const newFlow: core.Flow = FixFlows(result.flow, fixables);
result.flow = newFlow;
newResults.push(result);
Expand All @@ -22,6 +22,7 @@ export function fix(results: core.ScanResult[]): core.ScanResult[] {
}

export function FixFlows(flow: core.Flow, ruleResults: core.RuleResult[]): core.Flow {
// TODO: this should be defined on the rule
const unusedVariableRes = ruleResults.find((r) => r.ruleName === "UnusedVariable");
const unusedVariableReferences =
unusedVariableRes && unusedVariableRes.details && unusedVariableRes.details.length > 0
Expand Down
15 changes: 3 additions & 12 deletions src/main/rules/InactiveFlow.ts
Original file line number Diff line number Diff line change
Expand Up @@ -11,24 +11,15 @@ export class InactiveFlow extends RuleCommon implements core.IRuleDefinition {
supportedTypes: core.FlowType.allTypes(),
docRefs: [],
isConfigurable: false,
autoFixable: false,
autoFixable: false, // TODO: make fixable
});
}

public execute(flow: core.Flow): core.RuleResult {
const inactiveFlows: core.FlowElement[] = [];
flow.elements?.forEach((node) => {
const nodeElementString = JSON.stringify(node.element);
if (node.subtype === "status" && nodeElementString !== '"Active"') {
inactiveFlows.push(node);
}
});
const results: core.ResultDetails[] = [];
for (const det of inactiveFlows) {
if (flow.status !== "Active") {
results.push(
new core.ResultDetails(
new core.FlowAttribute(JSON.stringify(det.element), det.subtype, "!= Active")
)
new core.ResultDetails(new core.FlowAttribute(flow.status, "status", "!= Active"))
);
}
return new core.RuleResult(this, results);
Expand Down
8 changes: 4 additions & 4 deletions tests/Exceptions.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -193,7 +193,7 @@ describe("Exceptions", () => {
{ element: "Draft", subtype: "status", metaType: "metadata" },
],
startReference: "testtest",
} as unknown as core.Flow,
} as Partial<core.Flow> as core.Flow,
},
];
const ruleConfig = {
Expand Down Expand Up @@ -407,7 +407,7 @@ describe("Exceptions", () => {
{ element: "Draft", subtype: "status", metaType: "metadata" },
],
startReference: "testtest",
} as unknown as core.Flow,
} as Partial<core.Flow> as core.Flow,
},
{
uri: "something",
Expand Down Expand Up @@ -596,7 +596,7 @@ describe("Exceptions", () => {
{ element: "Draft", subtype: "status", metaType: "metadata" },
],
startReference: "testtest",
} as unknown as core.Flow,
} as Partial<core.Flow> as core.Flow,
},
{
uri: "something",
Expand Down Expand Up @@ -785,7 +785,7 @@ describe("Exceptions", () => {
{ element: "Draft", subtype: "status", metaType: "metadata" },
],
startReference: "testtest",
} as unknown as core.Flow,
} as Partial<core.Flow> as core.Flow,
},
];
const ruleConfig = {
Expand Down
68 changes: 53 additions & 15 deletions tests/InactiveFlow.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,15 +8,10 @@ describe("InactiveFlow", () => {
const flows: ParsedFlow[] = [
{
flow: {
elements: [
{
subtype: "status",
element: "Draft",
},
],
type: "AutoLaunchedFlow",
status: "Draft",
},
} as unknown as ParsedFlow,
} as Partial<ParsedFlow> as ParsedFlow,
];
const ruleConfig = {
rules: {
Expand All @@ -30,20 +25,17 @@ describe("InactiveFlow", () => {
const occurringResults = results[0].ruleResults.filter((rule) => rule.occurs);
expect(occurringResults).toHaveLength(1);
expect(occurringResults[0].ruleName).toBe("InactiveFlow");
expect(occurringResults[0].occurs).toBeTruthy();
});

it("should have no result when flow is active", async () => {
const flows: ParsedFlow[] = [
{
flow: {
elements: [
{
subtype: "status",
element: "Active",
},
],
},
} as unknown as ParsedFlow,
status: "Active",
type: "AutoLaunchedFlow",
},
} as Partial<ParsedFlow> as ParsedFlow,
];
const ruleConfig = {
rules: {
Expand All @@ -58,4 +50,50 @@ describe("InactiveFlow", () => {
expect(result.ruleResults[0].ruleName).toEqual("InactiveFlow");
expect(result.ruleResults[0].occurs).toBeFalsy();
});

it("should return a result when flow is obsolete", async () => {
const flows: ParsedFlow[] = [
{
flow: {
type: "AutoLaunchedFlow",
status: "Obsolete",
},
} as Partial<ParsedFlow> as ParsedFlow,
];
const ruleConfig = {
rules: {
InactiveFlow: {
severity: "error",
},
},
};

const results: ScanResult[] = scan(flows, ruleConfig);
const occurringResults = results[0].ruleResults.filter((rule) => rule.occurs);
expect(occurringResults).toHaveLength(1);
expect(occurringResults[0].ruleName).toBe("InactiveFlow");
});

it("should return a result when flow is InvalidDraft (draft)", async () => {
const flows: ParsedFlow[] = [
{
flow: {
type: "AutoLaunchedFlow",
status: "InvalidDraft",
},
} as Partial<ParsedFlow> as ParsedFlow,
];
const ruleConfig = {
rules: {
InactiveFlow: {
severity: "error",
},
},
};

const results: ScanResult[] = scan(flows, ruleConfig);
const occurringResults = results[0].ruleResults.filter((rule) => rule.occurs);
expect(occurringResults).toHaveLength(1);
expect(occurringResults[0].ruleName).toBe("InactiveFlow");
});
});
8 changes: 4 additions & 4 deletions tests/SameRecordFieldUpdates.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -62,7 +62,7 @@ describe("SameRecordFieldUpdates", () => {
},
],
},
} as unknown as ParsedFlow;
} as Partial<ParsedFlow> as ParsedFlow;

const ruleResult: RuleResult = rule.execute(testData.flow as Flow);

Expand Down Expand Up @@ -123,7 +123,7 @@ describe("SameRecordFieldUpdates", () => {
},
],
},
} as unknown as ParsedFlow;
} as Partial<ParsedFlow> as ParsedFlow;

const ruleResult: RuleResult = rule.execute(testData.flow as Flow);

Expand Down Expand Up @@ -213,7 +213,7 @@ describe("SameRecordFieldUpdates", () => {
},
],
},
} as unknown as ParsedFlow;
} as Partial<ParsedFlow> as ParsedFlow;

const ruleResult: RuleResult = rule.execute(testData.flow as Flow);

Expand All @@ -232,7 +232,7 @@ describe("SameRecordFieldUpdates", () => {
triggerType: "RecordBeforeSave",
},
},
} as unknown as ParsedFlow;
} as Partial<ParsedFlow> as ParsedFlow;

const ruleResult: RuleResult = rule.execute(testData.flow as Flow);

Expand Down
10 changes: 5 additions & 5 deletions tests/TriggerOrder.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ describe("TriggerOrder", () => {
flow: {
type: "AutoLaunchedFlow",
},
} as unknown as ParsedFlow,
} as Partial<ParsedFlow> as ParsedFlow,
];
const results: ScanResult[] = scan(flows);
const scanResults = results.pop();
Expand All @@ -38,7 +38,7 @@ describe("TriggerOrder", () => {
flow: {
type: "AutoLaunchedFlow",
},
} as unknown as ParsedFlow,
} as Partial<ParsedFlow> as ParsedFlow,
];
const results: ScanResult[] = scan(flows, ruleConfig);
const scanResults = results.pop();
Expand All @@ -55,7 +55,7 @@ describe("TriggerOrder", () => {
flow: {
type: "AutoLaunchedFlow",
},
} as unknown as ParsedFlow,
} as Partial<ParsedFlow> as ParsedFlow,
];

const ruleConfig = {
Expand All @@ -80,7 +80,7 @@ describe("TriggerOrder", () => {
flow: {
type: "AutoLaunchedFlow",
},
} as unknown as ParsedFlow;
} as Partial<ParsedFlow> as ParsedFlow;

const ruleResult: RuleResult = new TriggerOrder().execute(testData.flow as Flow);

Expand All @@ -93,7 +93,7 @@ describe("TriggerOrder", () => {
triggerOrder: 10,
type: "AutoLaunchedFlow",
},
} as unknown as ParsedFlow;
} as Partial<ParsedFlow> as ParsedFlow;

const ruleResult: RuleResult = new TriggerOrder().execute(testData.flow as Flow);

Expand Down