From 657346a1316f26568d074c06605b31c348bc1b71 Mon Sep 17 00:00:00 2001 From: Tim Li Date: Tue, 22 Oct 2024 10:04:36 -0700 Subject: [PATCH 1/2] Add test coverage to admin tasklist commands --- tools/cli/admin_task_list_commands_test.go | 105 +++++++++++++++++++++ 1 file changed, 105 insertions(+) diff --git a/tools/cli/admin_task_list_commands_test.go b/tools/cli/admin_task_list_commands_test.go index f2f42fd08dd..78edb6537ad 100644 --- a/tools/cli/admin_task_list_commands_test.go +++ b/tools/cli/admin_task_list_commands_test.go @@ -210,6 +210,111 @@ func TestAdminDescribeTaskList_InvalidTaskListType(t *testing.T) { assert.NoError(t, err) } +func TestAdminListTaskList_Success(t *testing.T) { + mockCtrl := gomock.NewController(t) + defer mockCtrl.Finish() + + // Mock clients + serverFrontendClient := frontend.NewMockClient(mockCtrl) + serverAdminClient := admin.NewMockClient(mockCtrl) + + // Create CLI app with mock clients + app := NewCliApp(&clientFactoryMock{ + serverFrontendClient: serverFrontendClient, + serverAdminClient: serverAdminClient, + }) + + // Prepare expected response + expectedResponse := &types.GetTaskListsByDomainResponse{ + DecisionTaskListMap: map[string]*types.DescribeTaskListResponse{ + "decision-tasklist-1": { + Pollers: []*types.PollerInfo{ + {Identity: "poller1"}, + {Identity: "poller2"}, + }, + }, + "decision-tasklist-2": { + Pollers: []*types.PollerInfo{ + {Identity: "poller3"}, + }, + }, + }, + ActivityTaskListMap: map[string]*types.DescribeTaskListResponse{ + "activity-tasklist-1": { + Pollers: []*types.PollerInfo{ + {Identity: "poller4"}, + }, + }, + }, + } + + // Set up the expected call and response + serverFrontendClient.EXPECT(). + GetTaskListsByDomain(gomock.Any(), gomock.Any()). + Return(expectedResponse, nil). + Times(1) + + // Set up CLI context + c := setTasklistMock(app) + + // Call the function under test + err := AdminListTaskList(c) + assert.NoError(t, err) +} + +func TestAdminListTaskList_GetTaskListsByDomainFails(t *testing.T) { + mockCtrl := gomock.NewController(t) + defer mockCtrl.Finish() + + // Mock clients + serverFrontendClient := frontend.NewMockClient(mockCtrl) + serverAdminClient := admin.NewMockClient(mockCtrl) + + // Create CLI app with mock clients + app := NewCliApp(&clientFactoryMock{ + serverFrontendClient: serverFrontendClient, + serverAdminClient: serverAdminClient, + }) + + // Set up the expected call to return an error + serverFrontendClient.EXPECT(). + GetTaskListsByDomain(gomock.Any(), gomock.Any()). + Return(nil, fmt.Errorf("GetTaskListsByDomain failed")). + Times(1) + + // Set up CLI context + c := setTasklistMock(app) + + // Call the function under test + err := AdminListTaskList(c) + assert.Error(t, err) + assert.Contains(t, err.Error(), "Operation GetTaskListByDomain failed.") +} + +func TestAdminListTaskList_NoDomainFlag(t *testing.T) { + mockCtrl := gomock.NewController(t) + defer mockCtrl.Finish() + + // Mock clients + serverFrontendClient := frontend.NewMockClient(mockCtrl) + serverAdminClient := admin.NewMockClient(mockCtrl) + + // Create CLI app with mock clients + app := NewCliApp(&clientFactoryMock{ + serverFrontendClient: serverFrontendClient, + serverAdminClient: serverAdminClient, + }) + + // Omit the Domain flag + set := flag.NewFlagSet("test", 0) + c := cli.NewContext(app, set, nil) + + // Call the function under test + err := AdminListTaskList(c) + assert.Error(t, err) + assert.Contains(t, err.Error(), "Required flag not found: ") +} + // Helper function to set up the CLI context func setTasklistMock(app *cli.App) *cli.Context { set := flag.NewFlagSet("test", 0) From 87a4c03aab7097137e4bfc020f24b1a038967097 Mon Sep 17 00:00:00 2001 From: Tim Li Date: Tue, 22 Oct 2024 12:50:05 -0700 Subject: [PATCH 2/2] respond to comments --- tools/cli/admin_task_list_commands_test.go | 193 +++++++++++---------- 1 file changed, 99 insertions(+), 94 deletions(-) diff --git a/tools/cli/admin_task_list_commands_test.go b/tools/cli/admin_task_list_commands_test.go index 78edb6537ad..5e618db734c 100644 --- a/tools/cli/admin_task_list_commands_test.go +++ b/tools/cli/admin_task_list_commands_test.go @@ -210,109 +210,114 @@ func TestAdminDescribeTaskList_InvalidTaskListType(t *testing.T) { assert.NoError(t, err) } -func TestAdminListTaskList_Success(t *testing.T) { +func TestAdminListTaskList(t *testing.T) { mockCtrl := gomock.NewController(t) defer mockCtrl.Finish() - // Mock clients - serverFrontendClient := frontend.NewMockClient(mockCtrl) - serverAdminClient := admin.NewMockClient(mockCtrl) - - // Create CLI app with mock clients - app := NewCliApp(&clientFactoryMock{ - serverFrontendClient: serverFrontendClient, - serverAdminClient: serverAdminClient, - }) - - // Prepare expected response - expectedResponse := &types.GetTaskListsByDomainResponse{ - DecisionTaskListMap: map[string]*types.DescribeTaskListResponse{ - "decision-tasklist-1": { - Pollers: []*types.PollerInfo{ - {Identity: "poller1"}, - {Identity: "poller2"}, - }, - }, - "decision-tasklist-2": { - Pollers: []*types.PollerInfo{ - {Identity: "poller3"}, - }, + // Define table of test cases + tests := []struct { + name string + setupMocks func(*frontend.MockClient) + expectedError string + domainFlag string + taskListFlag string + taskListType string + }{ + { + name: "Success", + setupMocks: func(client *frontend.MockClient) { + expectedResponse := &types.GetTaskListsByDomainResponse{ + DecisionTaskListMap: map[string]*types.DescribeTaskListResponse{ + "decision-tasklist-1": { + Pollers: []*types.PollerInfo{ + {Identity: "poller1"}, + {Identity: "poller2"}, + }, + }, + "decision-tasklist-2": { + Pollers: []*types.PollerInfo{ + {Identity: "poller3"}, + }, + }, + }, + ActivityTaskListMap: map[string]*types.DescribeTaskListResponse{ + "activity-tasklist-1": { + Pollers: []*types.PollerInfo{ + {Identity: "poller4"}, + }, + }, + }, + } + client.EXPECT(). + GetTaskListsByDomain(gomock.Any(), gomock.Any()). + Return(expectedResponse, nil). + Times(1) }, + expectedError: "", + domainFlag: "test-domain", + taskListFlag: "test-tasklist", + taskListType: "decision", }, - ActivityTaskListMap: map[string]*types.DescribeTaskListResponse{ - "activity-tasklist-1": { - Pollers: []*types.PollerInfo{ - {Identity: "poller4"}, - }, + { + name: "GetTaskListsByDomainFails", + setupMocks: func(client *frontend.MockClient) { + client.EXPECT(). + GetTaskListsByDomain(gomock.Any(), gomock.Any()). + Return(nil, fmt.Errorf("GetTaskListsByDomain failed")). + Times(1) }, + expectedError: "Operation GetTaskListByDomain failed", + domainFlag: "test-domain", + taskListFlag: "test-tasklist", + taskListType: "decision", + }, + { + name: "NoDomainFlag", + setupMocks: func(client *frontend.MockClient) {}, + expectedError: "Required flag not found", + domainFlag: "", // Omit Domain flag + taskListFlag: "test-tasklist", + taskListType: "decision", }, } - // Set up the expected call and response - serverFrontendClient.EXPECT(). - GetTaskListsByDomain(gomock.Any(), gomock.Any()). - Return(expectedResponse, nil). - Times(1) - - // Set up CLI context - c := setTasklistMock(app) - - // Call the function under test - err := AdminListTaskList(c) - assert.NoError(t, err) -} - -func TestAdminListTaskList_GetTaskListsByDomainFails(t *testing.T) { - mockCtrl := gomock.NewController(t) - defer mockCtrl.Finish() - - // Mock clients - serverFrontendClient := frontend.NewMockClient(mockCtrl) - serverAdminClient := admin.NewMockClient(mockCtrl) - - // Create CLI app with mock clients - app := NewCliApp(&clientFactoryMock{ - serverFrontendClient: serverFrontendClient, - serverAdminClient: serverAdminClient, - }) - - // Set up the expected call to return an error - serverFrontendClient.EXPECT(). - GetTaskListsByDomain(gomock.Any(), gomock.Any()). - Return(nil, fmt.Errorf("GetTaskListsByDomain failed")). - Times(1) - - // Set up CLI context - c := setTasklistMock(app) - - // Call the function under test - err := AdminListTaskList(c) - assert.Error(t, err) - assert.Contains(t, err.Error(), "Operation GetTaskListByDomain failed.") -} - -func TestAdminListTaskList_NoDomainFlag(t *testing.T) { - mockCtrl := gomock.NewController(t) - defer mockCtrl.Finish() - - // Mock clients - serverFrontendClient := frontend.NewMockClient(mockCtrl) - serverAdminClient := admin.NewMockClient(mockCtrl) - - // Create CLI app with mock clients - app := NewCliApp(&clientFactoryMock{ - serverFrontendClient: serverFrontendClient, - serverAdminClient: serverAdminClient, - }) - - // Omit the Domain flag - set := flag.NewFlagSet("test", 0) - c := cli.NewContext(app, set, nil) - - // Call the function under test - err := AdminListTaskList(c) - assert.Error(t, err) - assert.Contains(t, err.Error(), "Required flag not found: ") + // Loop through test cases + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + // Mock clients + serverFrontendClient := frontend.NewMockClient(mockCtrl) + serverAdminClient := admin.NewMockClient(mockCtrl) + + // Create CLI app with mock clients + app := NewCliApp(&clientFactoryMock{ + serverFrontendClient: serverFrontendClient, + serverAdminClient: serverAdminClient, + }) + + // Set up mocks for the current test case + tt.setupMocks(serverFrontendClient) + + // Set up the CLI context + set := flag.NewFlagSet("test", 0) + if tt.domainFlag != "" { + set.String(FlagDomain, tt.domainFlag, "Domain flag") + } + set.String(FlagTaskList, tt.taskListFlag, "TaskList flag") + set.String(FlagTaskListType, tt.taskListType, "TaskListType flag") + c := cli.NewContext(app, set, nil) + + // Call the function under test + err := AdminListTaskList(c) + + // Check expected outcomes + if tt.expectedError != "" { + assert.Error(t, err) + assert.Contains(t, err.Error(), tt.expectedError) + } else { + assert.NoError(t, err) + } + }) + } } // Helper function to set up the CLI context