/components/console-backend-service/internal/domain/servicecatalog/serviceclass_converter_test.go

https://github.com/kyma-project/kyma · Go · 205 lines · 178 code · 27 blank · 0 comment · 0 complexity · a20cae3bdef75a711b9917d38472ba5b MD5 · raw file

  1. package servicecatalog
  2. import (
  3. "encoding/json"
  4. "testing"
  5. "time"
  6. "github.com/kubernetes-sigs/service-catalog/pkg/apis/servicecatalog/v1beta1"
  7. "github.com/kyma-project/kyma/components/console-backend-service/internal/gqlschema"
  8. "github.com/stretchr/testify/assert"
  9. "github.com/stretchr/testify/require"
  10. metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
  11. "k8s.io/apimachinery/pkg/runtime"
  12. "k8s.io/apimachinery/pkg/types"
  13. )
  14. func TestServiceClassConverter_ToGQL(t *testing.T) {
  15. var mockTimeStamp metav1.Time
  16. var zeroTimeStamp time.Time
  17. t.Run("All properties are given", func(t *testing.T) {
  18. converter := serviceClassConverter{}
  19. labels := gqlschema.Labels{
  20. "connected-app": "exampleConnectedApp",
  21. "local": "true",
  22. "showcase": "false",
  23. }
  24. maps := map[string]interface{}{
  25. "displayName": "exampleDisplayName",
  26. "providerDisplayName": "exampleProviderName",
  27. "imageUrl": "exampleImageURL",
  28. "documentationUrl": "exampleDocumentationURL",
  29. "longDescription": "exampleLongDescription",
  30. "supportUrl": "exampleSupportURL",
  31. "labels": labels,
  32. }
  33. byteMaps, err := json.Marshal(maps)
  34. item := v1beta1.ServiceClass{
  35. Spec: v1beta1.ServiceClassSpec{
  36. CommonServiceClassSpec: v1beta1.CommonServiceClassSpec{
  37. ExternalMetadata: &runtime.RawExtension{Raw: byteMaps},
  38. ExternalName: "ExampleExternalName",
  39. Tags: []string{"tag1", "tag2"},
  40. Description: "ExampleDescription",
  41. },
  42. },
  43. ObjectMeta: metav1.ObjectMeta{
  44. Name: "exampleName",
  45. Namespace: "exampleNamespace",
  46. UID: types.UID("exampleUid"),
  47. CreationTimestamp: mockTimeStamp,
  48. ResourceVersion: "exampleVersion",
  49. },
  50. }
  51. providerDisplayName := "exampleProviderName"
  52. imageURL := "exampleImageURL"
  53. documentationURL := "exampleDocumentationURL"
  54. supportURL := "exampleSupportURL"
  55. displayName := "exampleDisplayName"
  56. longDescription := "exampleLongDescription"
  57. expected := gqlschema.ServiceClass{
  58. Name: "exampleName",
  59. Namespace: "exampleNamespace",
  60. ExternalName: "ExampleExternalName",
  61. DisplayName: &displayName,
  62. Description: "ExampleDescription",
  63. LongDescription: &longDescription,
  64. ProviderDisplayName: &providerDisplayName,
  65. ImageURL: &imageURL,
  66. DocumentationURL: &documentationURL,
  67. SupportURL: &supportURL,
  68. CreationTimestamp: zeroTimeStamp,
  69. Tags: []string{"tag1", "tag2"},
  70. Labels: labels,
  71. }
  72. result, err := converter.ToGQL(&item)
  73. assert.Equal(t, err, nil)
  74. assert.Equal(t, &expected, result)
  75. })
  76. t.Run("Invalid externalMetadata (not equals to maps[string]string)", func(t *testing.T) {
  77. converter := serviceClassConverter{}
  78. maps := "randomString"
  79. byteMaps, err := json.Marshal(maps)
  80. item := v1beta1.ServiceClass{
  81. Spec: v1beta1.ServiceClassSpec{
  82. CommonServiceClassSpec: v1beta1.CommonServiceClassSpec{
  83. ExternalMetadata: &runtime.RawExtension{Raw: byteMaps},
  84. ExternalName: "ExampleExternalName",
  85. Tags: []string{"tag1", "tag2"},
  86. Description: "ExampleDescription",
  87. },
  88. },
  89. ObjectMeta: metav1.ObjectMeta{
  90. Name: "exampleName",
  91. UID: types.UID("exampleUid"),
  92. CreationTimestamp: mockTimeStamp,
  93. ResourceVersion: "exampleVersion",
  94. },
  95. }
  96. _, err = converter.ToGQL(&item)
  97. assert.Error(t, err)
  98. })
  99. t.Run("Empty", func(t *testing.T) {
  100. converter := &serviceClassConverter{}
  101. _, err := converter.ToGQL(&v1beta1.ServiceClass{})
  102. require.NoError(t, err)
  103. })
  104. t.Run("Nil", func(t *testing.T) {
  105. converter := &serviceClassConverter{}
  106. item, err := converter.ToGQL(nil)
  107. require.NoError(t, err)
  108. assert.Nil(t, item)
  109. })
  110. }
  111. func TestServiceClassConverter_ToGQLs(t *testing.T) {
  112. t.Run("Success", func(t *testing.T) {
  113. classes := []*v1beta1.ServiceClass{
  114. fixServiceClass(t),
  115. fixServiceClass(t),
  116. }
  117. converter := serviceClassConverter{}
  118. result, err := converter.ToGQLs(classes)
  119. require.NoError(t, err)
  120. assert.Len(t, result, 2)
  121. assert.Equal(t, "exampleName", result[0].Name)
  122. })
  123. t.Run("Empty", func(t *testing.T) {
  124. var classes []*v1beta1.ServiceClass
  125. converter := serviceClassConverter{}
  126. result, err := converter.ToGQLs(classes)
  127. require.NoError(t, err)
  128. assert.Empty(t, result)
  129. })
  130. t.Run("With nil", func(t *testing.T) {
  131. classes := []*v1beta1.ServiceClass{
  132. nil,
  133. fixServiceClass(t),
  134. nil,
  135. }
  136. converter := serviceClassConverter{}
  137. result, err := converter.ToGQLs(classes)
  138. require.NoError(t, err)
  139. assert.Len(t, result, 1)
  140. assert.Equal(t, "exampleName", result[0].Name)
  141. })
  142. }
  143. func fixServiceClass(t require.TestingT) *v1beta1.ServiceClass {
  144. var mockTimeStamp metav1.Time
  145. labels := gqlschema.Labels{
  146. "connected-app": "exampleConnectedApp",
  147. "local": "true",
  148. "showcase": "false",
  149. }
  150. maps := map[string]interface{}{
  151. "displayName": "exampleDisplayName",
  152. "providerDisplayName": "exampleProviderName",
  153. "imageUrl": "exampleImageURL",
  154. "documentationUrl": "exampleDocumentationURL",
  155. "longDescription": "exampleLongDescription",
  156. "supportUrl": "exampleSupportURL",
  157. "labels": labels,
  158. }
  159. byteMaps, err := json.Marshal(maps)
  160. require.NoError(t, err)
  161. return &v1beta1.ServiceClass{
  162. Spec: v1beta1.ServiceClassSpec{
  163. CommonServiceClassSpec: v1beta1.CommonServiceClassSpec{
  164. ExternalMetadata: &runtime.RawExtension{Raw: byteMaps},
  165. ExternalName: "ExampleExternalName",
  166. Tags: []string{"tag1", "tag2"},
  167. Description: "ExampleDescription",
  168. },
  169. },
  170. ObjectMeta: metav1.ObjectMeta{
  171. Name: "exampleName",
  172. Namespace: "exampleNamespace",
  173. UID: types.UID("exampleUid"),
  174. CreationTimestamp: mockTimeStamp,
  175. ResourceVersion: "exampleVersion",
  176. },
  177. }
  178. }