github.com/kubeshop/testkube@v1.17.23/pkg/api/v1/client/testworkflowtemplate.go (about)

     1  package client
     2  
     3  import (
     4  	"encoding/json"
     5  	"fmt"
     6  	"net/http"
     7  	"strings"
     8  
     9  	"github.com/kubeshop/testkube/pkg/api/v1/testkube"
    10  )
    11  
    12  // NewTestWorkflowTemplateClient creates new TestWorkflowTemplate client
    13  func NewTestWorkflowTemplateClient(
    14  	testWorkflowTemplateTransport Transport[testkube.TestWorkflowTemplate],
    15  ) TestWorkflowTemplateClient {
    16  	return TestWorkflowTemplateClient{
    17  		testWorkflowTemplateTransport: testWorkflowTemplateTransport,
    18  	}
    19  }
    20  
    21  // TestWorkflowTemplateClient is a client for tests
    22  type TestWorkflowTemplateClient struct {
    23  	testWorkflowTemplateTransport Transport[testkube.TestWorkflowTemplate]
    24  }
    25  
    26  // GetTestWorkflowTemplate returns single test by id
    27  func (c TestWorkflowTemplateClient) GetTestWorkflowTemplate(id string) (testkube.TestWorkflowTemplate, error) {
    28  	id = strings.ReplaceAll(id, "/", "--")
    29  	uri := c.testWorkflowTemplateTransport.GetURI("/test-workflow-templates/%s", id)
    30  	return c.testWorkflowTemplateTransport.Execute(http.MethodGet, uri, nil, nil)
    31  }
    32  
    33  // ListTestWorkflowTemplates list all tests
    34  func (c TestWorkflowTemplateClient) ListTestWorkflowTemplates(selector string) (testkube.TestWorkflowTemplates, error) {
    35  	params := map[string]string{"selector": selector}
    36  	uri := c.testWorkflowTemplateTransport.GetURI("/test-workflow-templates")
    37  	return c.testWorkflowTemplateTransport.ExecuteMultiple(http.MethodGet, uri, nil, params)
    38  }
    39  
    40  // DeleteTestWorkflowTemplates deletes multiple test workflow templates by labels
    41  func (c TestWorkflowTemplateClient) DeleteTestWorkflowTemplates(selector string) error {
    42  	uri := c.testWorkflowTemplateTransport.GetURI("/test-workflow-templates")
    43  	return c.testWorkflowTemplateTransport.Delete(uri, selector, true)
    44  }
    45  
    46  // CreateTestWorkflowTemplate creates new TestWorkflowTemplate Custom Resource
    47  func (c TestWorkflowTemplateClient) CreateTestWorkflowTemplate(template testkube.TestWorkflowTemplate) (result testkube.TestWorkflowTemplate, err error) {
    48  	template.Name = strings.ReplaceAll(template.Name, "/", "--")
    49  
    50  	body, err := json.Marshal(template)
    51  	if err != nil {
    52  		return result, err
    53  	}
    54  
    55  	uri := c.testWorkflowTemplateTransport.GetURI("/test-workflow-templates")
    56  	return c.testWorkflowTemplateTransport.Execute(http.MethodPost, uri, body, nil)
    57  }
    58  
    59  // UpdateTestWorkflowTemplate updates TestWorkflowTemplate Custom Resource
    60  func (c TestWorkflowTemplateClient) UpdateTestWorkflowTemplate(template testkube.TestWorkflowTemplate) (result testkube.TestWorkflowTemplate, err error) {
    61  	if template.Name == "" {
    62  		return result, fmt.Errorf("test workflow template name '%s' is not valid", template.Name)
    63  	}
    64  	template.Name = strings.ReplaceAll(template.Name, "/", "--")
    65  
    66  	body, err := json.Marshal(template)
    67  	if err != nil {
    68  		return result, err
    69  	}
    70  
    71  	uri := c.testWorkflowTemplateTransport.GetURI("/test-workflow-templates/%s", template.Name)
    72  	return c.testWorkflowTemplateTransport.Execute(http.MethodPut, uri, body, nil)
    73  }
    74  
    75  // DeleteTestWorkflowTemplate deletes single test by name
    76  func (c TestWorkflowTemplateClient) DeleteTestWorkflowTemplate(name string) error {
    77  	if name == "" {
    78  		return fmt.Errorf("test workflow template name '%s' is not valid", name)
    79  	}
    80  	name = strings.ReplaceAll(name, "/", "--")
    81  
    82  	uri := c.testWorkflowTemplateTransport.GetURI("/test-workflow-templates/%s", name)
    83  	return c.testWorkflowTemplateTransport.Delete(uri, "", true)
    84  }