Skip to content

Commit 355d01f

Browse files
authored
refactor: refactor test cases for ConstructStartWorkflowRequest to reduce code duplication (#7206)
Co-authored-by: Tri Le <[email protected]> What changed and why? Unit test cases for the function ConstructStartWorkflowRequest has been refactored Why? To reduce code duplication. How did you test it? local unit tests. Potential risks N/A Release notes N/A Documentation Changes N/A
1 parent 469112a commit 355d01f

File tree

2 files changed

+138
-78
lines changed

2 files changed

+138
-78
lines changed

tools/cli/workflow_commands.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -483,7 +483,7 @@ func constructStartWorkflowRequest(c *cli.Context) (*types.StartWorkflowExecutio
483483

484484
memoFields, err := processMemo(c)
485485
if err != nil {
486-
return nil, commoncli.Problem("Error processing memo: ", err)
486+
return nil, commoncli.Problem("error processing memo: ", err)
487487
}
488488
if len(memoFields) != 0 {
489489
startRequest.Memo = &types.Memo{Fields: memoFields}

tools/cli/workflow_commands_test.go

Lines changed: 137 additions & 77 deletions
Original file line numberDiff line numberDiff line change
@@ -2006,86 +2006,146 @@ func Test_ShowHistoryWithID_MissingWorkflowID(t *testing.T) {
20062006
assert.ErrorContains(t, err, fmt.Sprintf("%s is required", FlagDomain))
20072007
}
20082008

2009-
func Test_ConstructStartWorkflowRequest_MissingFlags(t *testing.T) {
2010-
app := NewCliApp(&clientFactoryMock{})
2011-
set := flag.NewFlagSet("test", 0)
2012-
c := cli.NewContext(app, set, nil)
2013-
_, err := constructStartWorkflowRequest(c)
2014-
assert.ErrorContains(t, err, fmt.Sprintf("%s is required", FlagDomain))
2015-
2016-
set.String(FlagDomain, "test-domain", "domain")
2017-
_, err = constructStartWorkflowRequest(c)
2018-
assert.ErrorContains(t, err, fmt.Sprintf("%s is required", FlagTaskList))
2019-
2020-
set.String(FlagTaskList, "test-tasklist", "tasklist")
2021-
_, err = constructStartWorkflowRequest(c)
2022-
assert.ErrorContains(t, err, fmt.Sprintf("%s is required", FlagWorkflowType))
2023-
2024-
set.String(FlagWorkflowType, "test-workflow-type", "workflow_type")
2025-
_, err = constructStartWorkflowRequest(c)
2026-
assert.ErrorContains(t, err, fmt.Sprintf("%s format is invalid", FlagExecutionTimeout))
2027-
2028-
set.String(FlagExecutionTimeout, "10", "execution_timeout")
2029-
set.Int(FlagWorkflowIDReusePolicy, 1, "workflowidreusepolicy")
2030-
_, err = constructStartWorkflowRequest(c)
2031-
assert.NoError(t, err)
2032-
2033-
// invalid workflowID reuse policy
2034-
ctx := clitest.NewCLIContext(t, app, clitest.StringArgument(FlagDomain, "test-domain"), clitest.StringArgument(FlagTaskList, "test-tasklist"),
2035-
clitest.StringArgument(FlagWorkflowType, "test-workflow-type"), clitest.StringArgument(FlagExecutionTimeout, "10"),
2036-
clitest.IntArgument(FlagWorkflowIDReusePolicy, -10))
2037-
_, err = constructStartWorkflowRequest(ctx)
2038-
assert.ErrorContains(t, err, "value is not in supported range")
2039-
2040-
// process Json error
2041-
ctx = clitest.NewCLIContext(t, app, clitest.StringArgument(FlagDomain, "test-domain"), clitest.StringArgument(FlagTaskList, "test-tasklist"),
2042-
clitest.StringArgument(FlagWorkflowType, "test-workflow-type"), clitest.StringArgument(FlagExecutionTimeout, "10"),
2043-
clitest.IntArgument(FlagWorkflowIDReusePolicy, 1), clitest.StringArgument(FlagInput, "invalid json"))
2044-
_, err = constructStartWorkflowRequest(ctx)
2045-
assert.ErrorContains(t, err, "input is not valid JSON")
2046-
2047-
// error processing first run at
2048-
ctx = clitest.NewCLIContext(t, app, clitest.StringArgument(FlagDomain, "test-domain"), clitest.StringArgument(FlagTaskList, "test-tasklist"),
2049-
clitest.StringArgument(FlagWorkflowType, "test-workflow-type"), clitest.StringArgument(FlagExecutionTimeout, "10"),
2050-
clitest.IntArgument(FlagWorkflowIDReusePolicy, 1), clitest.StringArgument(FlagCronSchedule, "* * * * *"),
2051-
clitest.StringArgument(FirstRunAtTime, "10:00"))
2052-
_, err = constructStartWorkflowRequest(ctx)
2053-
assert.ErrorContains(t, err, "time format invalid")
2054-
2055-
// error processing header
2056-
ctx = clitest.NewCLIContext(t, app, clitest.StringArgument(FlagDomain, "test-domain"), clitest.StringArgument(FlagTaskList, "test-tasklist"),
2057-
clitest.StringArgument(FlagWorkflowType, "test-workflow-type"), clitest.StringArgument(FlagExecutionTimeout, "10"),
2058-
clitest.IntArgument(FlagWorkflowIDReusePolicy, 1), clitest.StringArgument(FlagCronSchedule, "* * * * *"),
2059-
clitest.StringArgument(FlagHeaderFile, "invalid file"))
2060-
_, err = constructStartWorkflowRequest(ctx)
2061-
assert.ErrorContains(t, err, "error when process header")
2062-
2063-
// error processing memo
2064-
ctx = clitest.NewCLIContext(t, app, clitest.StringArgument(FlagDomain, "test-domain"), clitest.StringArgument(FlagTaskList, "test-tasklist"),
2065-
clitest.StringArgument(FlagWorkflowType, "test-workflow-type"), clitest.StringArgument(FlagExecutionTimeout, "10"),
2066-
clitest.IntArgument(FlagWorkflowIDReusePolicy, 1), clitest.StringArgument(FlagCronSchedule, "* * * * *"),
2067-
clitest.StringArgument(FlagMemoFile, "invalid file"), clitest.StringArgument(FlagSearchAttributesKey, "key"))
2068-
_, err = constructStartWorkflowRequest(ctx)
2069-
assert.ErrorContains(t, err, "Error processing memo")
2070-
2071-
// error processing search attributes
2072-
ctx = clitest.NewCLIContext(t, app, clitest.StringArgument(FlagDomain, "test-domain"), clitest.StringArgument(FlagTaskList, "test-tasklist"),
2073-
clitest.StringArgument(FlagWorkflowType, "test-workflow-type"), clitest.StringArgument(FlagExecutionTimeout, "10"),
2074-
clitest.IntArgument(FlagWorkflowIDReusePolicy, 1), clitest.StringArgument(FlagCronSchedule, "* * * * *"),
2075-
clitest.StringArgument(FlagSearchAttributesKey, "key"))
2076-
_, err = constructStartWorkflowRequest(ctx)
2077-
assert.ErrorContains(t, err, "error processing search attributes")
2009+
func Test_ConstructStartWorkflowRequest(t *testing.T) {
2010+
baseArgs := []clitest.CliArgument{
2011+
clitest.StringArgument(FlagDomain, "test-domain"),
2012+
clitest.StringArgument(FlagTaskList, "test-tasklist"),
2013+
clitest.StringArgument(FlagWorkflowType, "test-workflow-type"),
2014+
}
20782015

2079-
ctx = clitest.NewCLIContext(t, app, clitest.StringArgument(FlagDomain, "test-domain"), clitest.StringArgument(FlagTaskList, "test-tasklist"),
2080-
clitest.StringArgument(FlagWorkflowType, "test-workflow-type"), clitest.StringArgument(FlagExecutionTimeout, "10"),
2081-
clitest.IntArgument(FlagWorkflowIDReusePolicy, 1), clitest.StringArgument(FlagCronSchedule, "* * * * *"),
2082-
clitest.StringArgument(FlagSearchAttributesKey, "key"), clitest.StringArgument(FlagSearchAttributesVal, "val"))
2083-
_, err = constructStartWorkflowRequest(ctx)
2084-
assert.NoError(t, err)
2085-
}
2016+
tests := []struct {
2017+
name string
2018+
cliArguments []clitest.CliArgument
2019+
expectedError bool
2020+
expectedErrorMessage string
2021+
}{
2022+
{
2023+
name: "missing domain",
2024+
cliArguments: []clitest.CliArgument{},
2025+
expectedError: true,
2026+
expectedErrorMessage: fmt.Sprintf("%s is required", FlagDomain),
2027+
},
2028+
{
2029+
name: "missing task list",
2030+
cliArguments: []clitest.CliArgument{
2031+
clitest.StringArgument(FlagDomain, "test-domain"),
2032+
},
2033+
expectedError: true,
2034+
expectedErrorMessage: fmt.Sprintf("%s is required", FlagTaskList),
2035+
},
2036+
{
2037+
name: "missing workflow type",
2038+
cliArguments: []clitest.CliArgument{
2039+
clitest.StringArgument(FlagDomain, "test-domain"),
2040+
clitest.StringArgument(FlagTaskList, "test-tasklist"),
2041+
},
2042+
expectedError: true,
2043+
expectedErrorMessage: fmt.Sprintf("%s is required", FlagWorkflowType),
2044+
},
2045+
{
2046+
name: "invalid execution timeout",
2047+
cliArguments: baseArgs,
2048+
expectedError: true,
2049+
expectedErrorMessage: fmt.Sprintf("%s format is invalid", FlagExecutionTimeout),
2050+
},
2051+
{
2052+
name: "invalid workflowID reuse policy",
2053+
cliArguments: append(
2054+
baseArgs,
2055+
clitest.StringArgument(FlagExecutionTimeout, "10"),
2056+
clitest.IntArgument(FlagWorkflowIDReusePolicy, -10),
2057+
),
2058+
expectedError: true,
2059+
expectedErrorMessage: "value is not in supported range",
2060+
},
2061+
{
2062+
name: "process JSON error",
2063+
cliArguments: append(
2064+
baseArgs,
2065+
clitest.StringArgument(FlagExecutionTimeout, "10"),
2066+
clitest.IntArgument(FlagWorkflowIDReusePolicy, 1),
2067+
clitest.StringArgument(FlagInput, "invalid json"),
2068+
),
2069+
expectedError: true,
2070+
expectedErrorMessage: "input is not valid JSON",
2071+
},
2072+
{
2073+
name: "error processing first run at",
2074+
cliArguments: append(
2075+
baseArgs,
2076+
clitest.StringArgument(FlagExecutionTimeout, "10"),
2077+
clitest.IntArgument(FlagWorkflowIDReusePolicy, 1),
2078+
clitest.StringArgument(FlagCronSchedule, "* * * * *"),
2079+
clitest.StringArgument(FirstRunAtTime, "10:00"),
2080+
),
2081+
expectedError: true,
2082+
expectedErrorMessage: "time format invalid",
2083+
},
2084+
{
2085+
name: "error processing header",
2086+
cliArguments: append(
2087+
baseArgs,
2088+
clitest.StringArgument(FlagExecutionTimeout, "10"),
2089+
clitest.IntArgument(FlagWorkflowIDReusePolicy, 1),
2090+
clitest.StringArgument(FlagCronSchedule, "* * * * *"),
2091+
clitest.StringArgument(FlagHeaderFile, "invalid file"),
2092+
),
2093+
expectedError: true,
2094+
expectedErrorMessage: "error when process header",
2095+
},
2096+
{
2097+
name: "error processing memo",
2098+
cliArguments: append(
2099+
baseArgs,
2100+
clitest.StringArgument(FlagExecutionTimeout, "10"),
2101+
clitest.IntArgument(FlagWorkflowIDReusePolicy, 1),
2102+
clitest.StringArgument(FlagCronSchedule, "* * * * *"),
2103+
clitest.StringArgument(FlagSearchAttributesKey, "key"),
2104+
clitest.StringArgument(FlagMemoFile, "invalid file"),
2105+
),
2106+
expectedError: true,
2107+
expectedErrorMessage: "error processing memo",
2108+
},
2109+
{
2110+
name: "error processing search attributes",
2111+
cliArguments: append(
2112+
baseArgs,
2113+
clitest.StringArgument(FlagExecutionTimeout, "10"),
2114+
clitest.IntArgument(FlagWorkflowIDReusePolicy, 1),
2115+
clitest.StringArgument(FlagCronSchedule, "* * * * *"),
2116+
clitest.StringArgument(FlagSearchAttributesKey, "key"),
2117+
),
2118+
expectedError: true,
2119+
expectedErrorMessage: "error processing search attributes",
2120+
},
2121+
{
2122+
name: "no error",
2123+
cliArguments: append(
2124+
baseArgs,
2125+
clitest.StringArgument(FlagExecutionTimeout, "10"),
2126+
clitest.IntArgument(FlagWorkflowIDReusePolicy, 1),
2127+
clitest.StringArgument(FlagCronSchedule, "* * * * *"),
2128+
clitest.StringArgument(FlagSearchAttributesKey, "key"),
2129+
clitest.StringArgument(FlagSearchAttributesVal, "val"),
2130+
),
2131+
expectedError: false,
2132+
expectedErrorMessage: "",
2133+
},
2134+
}
20862135

2087-
func Test_NewTest(t *testing.T) {
2136+
for _, tc := range tests {
2137+
t.Run(tc.name, func(t *testing.T) {
2138+
app := NewCliApp(&clientFactoryMock{})
2139+
ctx := clitest.NewCLIContext(t, app, tc.cliArguments...)
2140+
_, err := constructStartWorkflowRequest(ctx)
20882141

2142+
if tc.expectedError {
2143+
assert.ErrorContains(t, err, tc.expectedErrorMessage)
2144+
} else {
2145+
assert.NoError(t, err)
2146+
}
2147+
})
2148+
}
20892149
}
20902150

20912151
func Test_StartWorkflowHelper_RetryErrorMapping(t *testing.T) {

0 commit comments

Comments
 (0)