...

Source file src/edge-infra.dev/pkg/edge/api/services/activity_service_test.go

Documentation: edge-infra.dev/pkg/edge/api/services

     1  package services
     2  
     3  import (
     4  	"context"
     5  	"testing"
     6  
     7  	"github.com/DATA-DOG/go-sqlmock"
     8  	"github.com/stretchr/testify/assert"
     9  
    10  	"edge-infra.dev/pkg/edge/api/graph/model"
    11  	sqlquery "edge-infra.dev/pkg/edge/api/sql"
    12  )
    13  
    14  var (
    15  	action = &model.Action{
    16  		ActionID:      "ac8536ff-d463-4aff-8fa9-fe81fec1ddc1",
    17  		Input:         "input",
    18  		Action:        "delete",
    19  		Username:      "username",
    20  		Status:        "SUCCESS",
    21  		Error:         nil,
    22  		Time:          "2023-05-18 19:21:29.661274+00",
    23  		BannerEdgeID:  &BannerEdgeID,
    24  		ClusterEdgeID: &ClusterEdgeID,
    25  		TenantEdgeID:  "te8536ff-d463-4aff-8fa9-fe81fec1ddc1",
    26  		BatchID:       &BatchID,
    27  	}
    28  	action2 = model.Action{
    29  		ActionID:      "ac8536ff-d463-4aff-8fa9-fe81fec1ddc2",
    30  		Input:         "input2",
    31  		Action:        "delete2",
    32  		Username:      "username2",
    33  		Status:        "SUCCESS",
    34  		Error:         nil,
    35  		Time:          "2023-05-20 19:21:29.661274+00",
    36  		BannerEdgeID:  &BannerEdgeID,
    37  		ClusterEdgeID: &ClusterEdgeID,
    38  		TenantEdgeID:  "te8536ff-d463-4aff-8fa9-fe81fec1ddc2",
    39  		BatchID:       &BatchID,
    40  	}
    41  	Username      = "username"
    42  	BannerEdgeID  = "ba8536ff-d463-4aff-8fa9-fe81fec1ddc1"
    43  	ClusterEdgeID = "cl8536ff-d463-4aff-8fa9-fe81fec1ddc1"
    44  	TenantEdgeID  = "te8536ff-d463-4aff-8fa9-fe81fec1ddc1"
    45  	BatchID       = "batch6ff-d463-4aff-8fa9-fe81fec1ddc1"
    46  )
    47  
    48  func TestGetActions(t *testing.T) {
    49  	db, mock, err := sqlmock.New(sqlmock.QueryMatcherOption(sqlmock.QueryMatcherEqual))
    50  	if err != nil {
    51  		t.Fatalf("an error '%s' was not expected when opening a stub database connection", err)
    52  	}
    53  	defer db.Close()
    54  	service := NewActivityService(appConfig, db)
    55  	type test struct {
    56  		testName                 string
    57  		username                 *string
    58  		bannerEdgeID             *string
    59  		clusterEdgeID            *string
    60  		batchID                  *string
    61  		actionFilt               *string
    62  		statusFilt               *string
    63  		tenantEdgeID             string
    64  		expect                   []*model.Action
    65  		mockActionsSQLQuery      func() *sqlmock.ExpectedQuery
    66  		mockCountActionsSQLQuery func() *sqlmock.ExpectedQuery
    67  	}
    68  
    69  	tests := []test{
    70  		{testName: "queryByUsername",
    71  			username:      &Username,
    72  			bannerEdgeID:  nil,
    73  			clusterEdgeID: nil,
    74  			tenantEdgeID:  TenantEdgeID,
    75  			batchID:       nil,
    76  			actionFilt:    &action.Action,
    77  			statusFilt:    (*string)(&action.Status),
    78  			expect:        []*model.Action{action},
    79  			mockActionsSQLQuery: func() *sqlmock.ExpectedQuery {
    80  				return mock.ExpectQuery(sqlquery.GetActionsByCatchAllQuery).
    81  					WithArgs(Username, nil, nil, nil, action.Action, action.Status, action.TenantEdgeID, action.Time, 1).
    82  					WillReturnRows(sqlmock.NewRows([]string{
    83  						"action_id", "input", "action", "username", "tenant_edge_id", "banner_edge_id", "cluster_edge_id", "batch_id", "status", "error", "time_done"}).
    84  						AddRow(action.ActionID, action.Input, action.Action, action.Username, action.TenantEdgeID, action.BannerEdgeID, action.ClusterEdgeID, action.BatchID, action.Status, action.Error, action.Time))
    85  			},
    86  			mockCountActionsSQLQuery: func() *sqlmock.ExpectedQuery {
    87  				return mock.ExpectQuery(sqlquery.GetActionsCount).
    88  					WithArgs(Username, nil, nil, nil, action.Action, action.Status, action.TenantEdgeID).
    89  					WillReturnRows(sqlmock.NewRows([]string{"count"}).
    90  						AddRow(1))
    91  			},
    92  		},
    93  
    94  		{testName: "queryByBannerEdgeID",
    95  			username:      nil,
    96  			bannerEdgeID:  &BannerEdgeID,
    97  			clusterEdgeID: nil,
    98  			tenantEdgeID:  TenantEdgeID,
    99  			batchID:       nil,
   100  			actionFilt:    &action.Action,
   101  			statusFilt:    (*string)(&action.Status),
   102  			expect:        []*model.Action{action},
   103  			mockActionsSQLQuery: func() *sqlmock.ExpectedQuery {
   104  				return mock.ExpectQuery(sqlquery.GetActionsByCatchAllQuery).
   105  					WithArgs(nil, action.BannerEdgeID, nil, nil, action.Action, action.Status, action.TenantEdgeID, action.Time, 1).
   106  					WillReturnRows(sqlmock.NewRows([]string{
   107  						"action_id", "input", "action", "username", "tenant_edge_id", "banner_edge_id", "cluster_edge_id", "batch_id", "status", "error", "time_done"}).
   108  						AddRow(action.ActionID, action.Input, action.Action, action.Username, action.TenantEdgeID, action.BannerEdgeID, action.ClusterEdgeID, action.BatchID, action.Status, action.Error, action.Time))
   109  			},
   110  			mockCountActionsSQLQuery: func() *sqlmock.ExpectedQuery {
   111  				return mock.ExpectQuery(sqlquery.GetActionsCount).
   112  					WithArgs(nil, action.BannerEdgeID, nil, nil, action.Action, action.Status, action.TenantEdgeID).
   113  					WillReturnRows(sqlmock.NewRows([]string{"count"}).
   114  						AddRow(1))
   115  			},
   116  		},
   117  
   118  		{testName: "queryByClusterEdgeID",
   119  			username:      nil,
   120  			bannerEdgeID:  nil,
   121  			clusterEdgeID: &ClusterEdgeID,
   122  			tenantEdgeID:  TenantEdgeID,
   123  			batchID:       nil,
   124  			actionFilt:    &action.Action,
   125  			statusFilt:    (*string)(&action.Status),
   126  			expect:        []*model.Action{action},
   127  			mockActionsSQLQuery: func() *sqlmock.ExpectedQuery {
   128  				return mock.ExpectQuery(sqlquery.GetActionsByCatchAllQuery).
   129  					WithArgs(nil, nil, action.ClusterEdgeID, nil, action.Action, action.Status, action.TenantEdgeID, action.Time, 1).
   130  					WillReturnRows(sqlmock.NewRows([]string{
   131  						"action_id", "input", "action", "username", "tenant_edge_id", "banner_edge_id", "cluster_edge_id", "batch_id", "status", "error", "time_done"}).
   132  						AddRow(action.ActionID, action.Input, action.Action, action.Username, action.TenantEdgeID, action.BannerEdgeID, action.ClusterEdgeID, action.BatchID, action.Status, action.Error, action.Time))
   133  			},
   134  			mockCountActionsSQLQuery: func() *sqlmock.ExpectedQuery {
   135  				return mock.ExpectQuery(sqlquery.GetActionsCount).
   136  					WithArgs(nil, nil, action.ClusterEdgeID, nil, action.Action, action.Status, action.TenantEdgeID).
   137  					WillReturnRows(sqlmock.NewRows([]string{"count"}).
   138  						AddRow(1))
   139  			},
   140  		},
   141  
   142  		{testName: "queryByBatchID",
   143  			username:      nil,
   144  			bannerEdgeID:  nil,
   145  			clusterEdgeID: nil,
   146  			tenantEdgeID:  TenantEdgeID,
   147  			batchID:       &BatchID,
   148  			actionFilt:    &action.Action,
   149  			statusFilt:    (*string)(&action.Status),
   150  			expect:        []*model.Action{action},
   151  			mockActionsSQLQuery: func() *sqlmock.ExpectedQuery {
   152  				return mock.ExpectQuery(sqlquery.GetActionsByCatchAllQuery).
   153  					WithArgs(nil, nil, nil, action.BatchID, action.Action, action.Status, action.TenantEdgeID, action.Time, 1).
   154  					WillReturnRows(sqlmock.NewRows([]string{
   155  						"action_id", "input", "action", "username", "tenant_edge_id", "banner_edge_id", "cluster_edge_id", "batch_id", "status", "error", "time_done"}).
   156  						AddRow(action.ActionID, action.Input, action.Action, action.Username, action.TenantEdgeID, action.BannerEdgeID, action.ClusterEdgeID, action.BatchID, action.Status, action.Error, action.Time))
   157  			},
   158  			mockCountActionsSQLQuery: func() *sqlmock.ExpectedQuery {
   159  				return mock.ExpectQuery(sqlquery.GetActionsCount).
   160  					WithArgs(nil, nil, nil, action.BatchID, action.Action, action.Status, action.TenantEdgeID).
   161  					WillReturnRows(sqlmock.NewRows([]string{"count"}).
   162  						AddRow(1))
   163  			},
   164  		},
   165  
   166  		{testName: "queryByDefaultTenantEdgeID",
   167  			username:      nil,
   168  			bannerEdgeID:  nil,
   169  			clusterEdgeID: nil,
   170  			tenantEdgeID:  TenantEdgeID,
   171  			batchID:       nil,
   172  			actionFilt:    &action.Action,
   173  			statusFilt:    (*string)(&action.Status),
   174  			expect:        []*model.Action{action},
   175  			mockActionsSQLQuery: func() *sqlmock.ExpectedQuery {
   176  				return mock.ExpectQuery(sqlquery.GetActionsByCatchAllQuery).
   177  					WithArgs(nil, nil, nil, nil, action.Action, action.Status, action.TenantEdgeID, action.Time, 1).
   178  					WillReturnRows(sqlmock.NewRows([]string{
   179  						"action_id", "input", "action", "username", "tenant_edge_id", "banner_edge_id", "cluster_edge_id", "batch_id", "status", "error", "time_done"}).
   180  						AddRow(action.ActionID, action.Input, action.Action, action.Username, action.TenantEdgeID, action.BannerEdgeID, action.ClusterEdgeID, action.BatchID, action.Status, action.Error, action.Time))
   181  			},
   182  			mockCountActionsSQLQuery: func() *sqlmock.ExpectedQuery {
   183  				return mock.ExpectQuery(sqlquery.GetActionsCount).
   184  					WithArgs(nil, nil, nil, nil, action.Action, action.Status, action.TenantEdgeID).
   185  					WillReturnRows(sqlmock.NewRows([]string{"count"}).
   186  						AddRow(1))
   187  			},
   188  		},
   189  	}
   190  	for _, tc := range tests {
   191  		tc.mockCountActionsSQLQuery()
   192  		tc.mockActionsSQLQuery()
   193  		t.Run(tc.testName, func(t *testing.T) {
   194  			actions, count, err := service.GetActions(context.Background(), tc.username, tc.bannerEdgeID, tc.clusterEdgeID, tc.batchID, &action.Action, tc.statusFilt, tc.tenantEdgeID, action.Time, 1, false)
   195  			assert.Equal(t, actions, tc.expect)
   196  			assert.Equal(t, actions[0], action)
   197  			assert.NoError(t, err)
   198  			assert.Equal(t, count, 1)
   199  			err = mock.ExpectationsWereMet()
   200  			assert.NoError(t, err)
   201  		})
   202  	}
   203  }
   204  
   205  func TestCreateAction(t *testing.T) {
   206  	db, mock, err := sqlmock.New(sqlmock.QueryMatcherOption(sqlmock.QueryMatcherEqual))
   207  	if err != nil {
   208  		t.Fatalf("an error '%s' was not expected when opening a stub database connection", err)
   209  	}
   210  	defer db.Close()
   211  	mock.ExpectExec(sqlquery.CreateActionEntry).WithArgs(action2.Input, action2.Action, action2.Username, action2.TenantEdgeID, action2.BannerEdgeID, action2.ClusterEdgeID, action2.BatchID, action2.Status, action2.Error, sqlmock.AnyArg()).
   212  		WillReturnResult(sqlmock.NewResult(1, 1))
   213  	service := NewActivityService(appConfig, db)
   214  	err = service.CreateAction(context.Background(), action2)
   215  	assert.NoError(t, err)
   216  	err = mock.ExpectationsWereMet()
   217  	assert.NoError(t, err)
   218  }
   219  

View as plain text