github.com/kubeshop/testkube@v1.17.23/pkg/crd/crd_test.go (about)

     1  package crd
     2  
     3  import (
     4  	"testing"
     5  
     6  	"github.com/stretchr/testify/assert"
     7  
     8  	"github.com/kubeshop/testkube/pkg/api/v1/testkube"
     9  )
    10  
    11  func TestGenerateYAML(t *testing.T) {
    12  
    13  	t.Run("generate single CRD yaml", func(t *testing.T) {
    14  		// given
    15  		expected := "apiVersion: executor.testkube.io/v1\nkind: Webhook\nmetadata:\n  name: name1\n  namespace: namespace1\n  labels:\n    key1: value1\nspec:\n  events:\n  - start-test\n  uri: http://localhost\n  selector: app=backend\n  payloadObjectField: text\n  payloadTemplate: {{ .Id }}\n  payloadTemplateReference: ref\n  headers:\n    Content-Type: appication/xml\n"
    16  		webhooks := []testkube.Webhook{
    17  			{
    18  				Name:                     "name1",
    19  				Namespace:                "namespace1",
    20  				Uri:                      "http://localhost",
    21  				Events:                   []testkube.EventType{*testkube.EventStartTest},
    22  				Selector:                 "app=backend",
    23  				Labels:                   map[string]string{"key1": "value1"},
    24  				PayloadObjectField:       "text",
    25  				PayloadTemplate:          "{{ .Id }}",
    26  				Headers:                  map[string]string{"Content-Type": "appication/xml"},
    27  				PayloadTemplateReference: "ref",
    28  			},
    29  		}
    30  
    31  		// when
    32  		result, err := GenerateYAML[testkube.Webhook](TemplateWebhook, webhooks)
    33  
    34  		// then
    35  		assert.NoError(t, err)
    36  		assert.Equal(t, expected, result)
    37  	})
    38  
    39  	t.Run("generate multiple CRDs yaml", func(t *testing.T) {
    40  		// given
    41  		expected := "apiVersion: executor.testkube.io/v1\nkind: Webhook\nmetadata:\n  name: name1\n  namespace: namespace1\n  labels:\n    key1: value1\nspec:\n  events:\n  - start-test\n  uri: http://localhost\n  selector: app=backend\n  payloadObjectField: text\n  payloadTemplate: {{ .Id }}\n  payloadTemplateReference: ref\n  headers:\n    Content-Type: appication/xml\n\n---\napiVersion: executor.testkube.io/v1\nkind: Webhook\nmetadata:\n  name: name2\n  namespace: namespace2\n  labels:\n    key2: value2\nspec:\n  events:\n  - end-test-success\n  uri: http://localhost\n  selector: app=backend\n  payloadObjectField: text\n  payloadTemplate: {{ .Id }}\n  payloadTemplateReference: ref\n  headers:\n    Content-Type: appication/xml\n"
    42  		webhooks := []testkube.Webhook{
    43  			{
    44  				Name:                     "name1",
    45  				Namespace:                "namespace1",
    46  				Uri:                      "http://localhost",
    47  				Events:                   []testkube.EventType{*testkube.EventStartTest},
    48  				Selector:                 "app=backend",
    49  				Labels:                   map[string]string{"key1": "value1"},
    50  				PayloadObjectField:       "text",
    51  				PayloadTemplate:          "{{ .Id }}",
    52  				Headers:                  map[string]string{"Content-Type": "appication/xml"},
    53  				PayloadTemplateReference: "ref",
    54  			},
    55  			{
    56  				Name:                     "name2",
    57  				Namespace:                "namespace2",
    58  				Uri:                      "http://localhost",
    59  				Events:                   []testkube.EventType{*testkube.EventEndTestSuccess},
    60  				Selector:                 "app=backend",
    61  				Labels:                   map[string]string{"key2": "value2"},
    62  				PayloadObjectField:       "text",
    63  				PayloadTemplate:          "{{ .Id }}",
    64  				Headers:                  map[string]string{"Content-Type": "appication/xml"},
    65  				PayloadTemplateReference: "ref",
    66  			},
    67  		}
    68  
    69  		// when
    70  		result, err := GenerateYAML[testkube.Webhook](TemplateWebhook, webhooks)
    71  
    72  		// then
    73  		assert.NoError(t, err)
    74  		assert.Equal(t, expected, result)
    75  	})
    76  	t.Run("generate executor CRD yaml", func(t *testing.T) {
    77  		// given
    78  		expected := "apiVersion: executor.testkube.io/v1\nkind: Executor\nmetadata:\n  name: name1\n  namespace: namespace1\n  labels:\n    key1: value1\nspec:\n  types:\n  - custom-curl-container/test\n  executor_type: container\n  image: docker.io/curlimages/curl:latest\n  args:\n  - -v\n  - test\n  command:\n  - curl\n  imagePullSecrets:\n  - name: secret-name\n  features:\n  - artifacts\n  content_types:\n  - git-file\n  - git-dir\n  meta:\n    iconURI: http://mydomain.com/icon.jpg\n    docsURI: http://mydomain.com/docs\n    tooltips:\n      name: please enter executor name\n  useDataDirAsWorkingDir: true\n"
    79  		executors := []testkube.ExecutorUpsertRequest{
    80  			{
    81  				Namespace:    "namespace1",
    82  				Name:         "name1",
    83  				ExecutorType: "container",
    84  				Image:        "docker.io/curlimages/curl:latest",
    85  				ImagePullSecrets: []testkube.LocalObjectReference{{
    86  					Name: "secret-name",
    87  				}},
    88  				Command: []string{"curl"},
    89  				Args:    []string{"-v", "test"},
    90  				Types:   []string{"custom-curl-container/test"},
    91  				Labels: map[string]string{
    92  					"key1": "value1",
    93  				},
    94  				Features:     []string{"artifacts"},
    95  				ContentTypes: []string{"git-file", "git-dir"},
    96  				Meta: &testkube.ExecutorMeta{
    97  					IconURI: "http://mydomain.com/icon.jpg",
    98  					DocsURI: "http://mydomain.com/docs",
    99  					Tooltips: map[string]string{
   100  						"name": "please enter executor name",
   101  					},
   102  				},
   103  				UseDataDirAsWorkingDir: true,
   104  			},
   105  		}
   106  
   107  		// when
   108  		result, err := GenerateYAML[testkube.ExecutorUpsertRequest](TemplateExecutor, executors)
   109  
   110  		// then
   111  		assert.NoError(t, err)
   112  		assert.Equal(t, expected, result)
   113  	})
   114  	t.Run("generate test CRD yaml", func(t *testing.T) {
   115  		// given
   116  		expected := "apiVersion: tests.testkube.io/v3\nkind: Test\nmetadata:\n  name: name1\n  namespace: namespace1\n  labels:\n    key1: value1\nspec:\n  executionRequest:\n    name: execution-name\n    args:\n      - -v\n      - test\n    image: docker.io/curlimages/curl:latest\n    command:\n    - curl\n    imagePullSecrets:\n    - name: secret-name\n    negativeTest: true\n    activeDeadlineSeconds: 10\n"
   117  		tests := []testkube.TestUpsertRequest{
   118  			{
   119  				Name:      "name1",
   120  				Namespace: "namespace1",
   121  				Labels: map[string]string{
   122  					"key1": "value1",
   123  				},
   124  				ExecutionRequest: &testkube.ExecutionRequest{
   125  					Name:  "execution-name",
   126  					Image: "docker.io/curlimages/curl:latest",
   127  					ImagePullSecrets: []testkube.LocalObjectReference{{
   128  						Name: "secret-name",
   129  					}},
   130  					Command:               []string{"curl"},
   131  					Args:                  []string{"-v", "test"},
   132  					ActiveDeadlineSeconds: 10,
   133  					NegativeTest:          true,
   134  				},
   135  			},
   136  		}
   137  
   138  		// when
   139  		result, err := GenerateYAML(TemplateTest, tests)
   140  
   141  		// then
   142  		assert.NoError(t, err)
   143  		assert.Equal(t, expected, result)
   144  	})
   145  
   146  }