github.com/kubeshop/testkube@v1.17.23/pkg/cloud/data/testresult/testresult_test.go (about)

     1  package testresult
     2  
     3  import (
     4  	"context"
     5  	"encoding/json"
     6  	"testing"
     7  	"time"
     8  
     9  	"github.com/golang/mock/gomock"
    10  	"github.com/stretchr/testify/assert"
    11  
    12  	"github.com/kubeshop/testkube/pkg/api/v1/testkube"
    13  	"github.com/kubeshop/testkube/pkg/cloud/data/executor"
    14  )
    15  
    16  var ctx = context.Background()
    17  
    18  func TestCloudResultRepository_Get(t *testing.T) {
    19  	t.Parallel()
    20  
    21  	mockCtrl := gomock.NewController(t)
    22  	defer mockCtrl.Finish()
    23  
    24  	mockExecutor := executor.NewMockExecutor(mockCtrl)
    25  	repo := &CloudRepository{executor: mockExecutor}
    26  
    27  	expectedExecution := testkube.TestSuiteExecution{Id: "id1"}
    28  	expectedResponse := GetResponse{TestSuiteExecution: expectedExecution}
    29  	expectedResponseBytes, _ := json.Marshal(expectedResponse)
    30  	mockExecutor.EXPECT().Execute(ctx, CmdTestResultGet, GetRequest{"id1"}).Return(expectedResponseBytes, nil)
    31  
    32  	execution, err := repo.Get(ctx, "id1")
    33  	if err != nil {
    34  		t.Fatalf("Get() returned an unexpected error: %v", err)
    35  	}
    36  
    37  	assert.Equal(t, expectedExecution.Id, execution.Id)
    38  }
    39  
    40  func TestCloudResultRepository_GetByNameAndTestSuite(t *testing.T) {
    41  	t.Parallel()
    42  
    43  	mockCtrl := gomock.NewController(t)
    44  	defer mockCtrl.Finish()
    45  
    46  	mockExecutor := executor.NewMockExecutor(mockCtrl)
    47  	repo := &CloudRepository{executor: mockExecutor}
    48  
    49  	expectedExecution := testkube.TestSuiteExecution{Name: "name1"}
    50  	expectedResponse := GetByNameAndTestSuiteResponse{TestSuiteExecution: expectedExecution}
    51  	expectedResponseBytes, _ := json.Marshal(expectedResponse)
    52  	mockExecutor.
    53  		EXPECT().
    54  		Execute(ctx, CmdTestResultGetByNameAndTestSuite, GetByNameAndTestSuiteRequest{"name1", "testsuite1"}).
    55  		Return(expectedResponseBytes, nil)
    56  
    57  	execution, err := repo.GetByNameAndTestSuite(ctx, "name1", "testsuite1")
    58  	if err != nil {
    59  		t.Fatalf("GetByNameAndTestSuite() returned an unexpected error: %v", err)
    60  	}
    61  
    62  	assert.Equal(t, expectedExecution.Name, execution.Name)
    63  }
    64  
    65  func TestCloudResultRepository_GetLatestByTestSuites(t *testing.T) {
    66  	t.Parallel()
    67  
    68  	mockCtrl := gomock.NewController(t)
    69  	defer mockCtrl.Finish()
    70  
    71  	mockExecutor := executor.NewMockExecutor(mockCtrl)
    72  	repo := &CloudRepository{executor: mockExecutor}
    73  
    74  	prevDate := time.Date(2023, 5, 5, 0, 0, 0, 0, time.UTC)
    75  	midDate := prevDate.Add(time.Hour)
    76  	nextDate := midDate.Add(time.Hour)
    77  	testSuiteNames := []string{"test-suite-1", "test-suite-2"}
    78  	testSuite1 := &testkube.ObjectRef{Name: testSuiteNames[0]}
    79  	testSuite2 := &testkube.ObjectRef{Name: testSuiteNames[1]}
    80  
    81  	startResults := []testkube.TestSuiteExecution{{Id: "id1", TestSuite: testSuite1, StartTime: midDate, EndTime: midDate}, {Id: "id2", TestSuite: testSuite2, StartTime: midDate}}
    82  	endResults := []testkube.TestSuiteExecution{{Id: "id3", TestSuite: testSuite1, StartTime: prevDate, EndTime: nextDate}, {Id: "id4", TestSuite: testSuite2, StartTime: prevDate, EndTime: prevDate}}
    83  	expectedResults := []testkube.TestSuiteExecution{endResults[0], startResults[1]}
    84  
    85  	startReq := GetLatestByTestSuitesRequest{TestSuiteNames: testSuiteNames, SortField: "starttime"}
    86  	startResponse := GetLatestByTestSuitesResponse{TestSuiteExecutions: startResults}
    87  	startResponseBytes, _ := json.Marshal(startResponse)
    88  	endReq := GetLatestByTestSuitesRequest{TestSuiteNames: testSuiteNames, SortField: "endtime"}
    89  	endResponse := GetLatestByTestSuitesResponse{TestSuiteExecutions: endResults}
    90  	endResponseBytes, _ := json.Marshal(endResponse)
    91  
    92  	mockExecutor.EXPECT().Execute(ctx, CmdTestResultGetLatestByTestSuites, startReq).Return(startResponseBytes, nil)
    93  	mockExecutor.EXPECT().Execute(ctx, CmdTestResultGetLatestByTestSuites, endReq).Return(endResponseBytes, nil)
    94  
    95  	results, err := repo.GetLatestByTestSuites(ctx, testSuiteNames)
    96  	if err != nil {
    97  		t.Fatalf("GetLatestByTestSuites() returned an unexpected error: %v", err)
    98  	}
    99  	assert.Equal(t, len(results), len(expectedResults))
   100  	assert.Contains(t, results, expectedResults[0])
   101  	assert.Contains(t, results, expectedResults[1])
   102  }