github.com/kyma-incubator/compass/components/director@v0.0.0-20230623144113-d764f56ff805/internal/model/application_test.go (about) 1 package model_test 2 3 import ( 4 "fmt" 5 "testing" 6 "time" 7 8 "github.com/kyma-incubator/compass/components/director/pkg/str" 9 10 "github.com/kyma-incubator/compass/components/director/internal/model" 11 "github.com/stretchr/testify/assert" 12 ) 13 14 func TestApplicationCreateInput_ToApplication(t *testing.T) { 15 // GIVEN 16 url := "https://foo.bar" 17 desc := "Sample" 18 id := "foo" 19 intSysID := "bar" 20 providerName := "provider name" 21 timestamp := time.Now() 22 statusCondition := model.ApplicationStatusConditionInitial 23 testCases := []struct { 24 Name string 25 Input *model.ApplicationRegisterInput 26 Expected *model.Application 27 }{ 28 { 29 Name: "All properties given", 30 Input: &model.ApplicationRegisterInput{ 31 Name: "Foo", 32 Description: &desc, 33 Labels: map[string]interface{}{ 34 "test": map[string]interface{}{ 35 "test": "foo", 36 }, 37 }, 38 HealthCheckURL: &url, 39 IntegrationSystemID: &intSysID, 40 ProviderName: &providerName, 41 StatusCondition: &statusCondition, 42 LocalTenantID: str.Ptr("localTenantID"), 43 }, 44 Expected: &model.Application{ 45 Name: "Foo", 46 Description: &desc, 47 HealthCheckURL: &url, 48 IntegrationSystemID: &intSysID, 49 ProviderName: &providerName, 50 LocalTenantID: str.Ptr("localTenantID"), 51 Status: &model.ApplicationStatus{ 52 Timestamp: timestamp, 53 Condition: model.ApplicationStatusConditionInitial, 54 }, 55 BaseEntity: &model.BaseEntity{ 56 ID: id, 57 Ready: true, 58 }, 59 }, 60 }, 61 { 62 Name: "Nil", 63 Input: nil, 64 Expected: nil, 65 }, 66 } 67 68 for i, testCase := range testCases { 69 t.Run(fmt.Sprintf("%d: %s", i, testCase.Name), func(t *testing.T) { 70 // WHEN 71 result := testCase.Input.ToApplication(timestamp, id) 72 73 // THEN 74 assert.Equal(t, testCase.Expected, result) 75 }) 76 } 77 } 78 79 func TestApplicationUpdateInput_UpdateApplication(t *testing.T) { 80 const ( 81 providerName = "provider name" 82 description = "description" 83 healthCheckURL = "https://kyma-project.io" 84 intSysID = "int sys id" 85 ) 86 t.Run("successfully overrides values with new input", func(t *testing.T) { 87 // GIVEN 88 timestamp := time.Now() 89 statusCondition := model.ApplicationStatusConditionConnected 90 filledAppUpdate := model.ApplicationUpdateInput{ 91 ProviderName: str.Ptr(providerName), 92 Description: str.Ptr(description), 93 HealthCheckURL: str.Ptr(healthCheckURL), 94 IntegrationSystemID: str.Ptr(intSysID), 95 StatusCondition: &statusCondition, 96 LocalTenantID: str.Ptr("localTenantID"), 97 } 98 app := model.Application{ 99 BaseEntity: &model.BaseEntity{}, 100 } 101 102 // WHEN 103 app.SetFromUpdateInput(filledAppUpdate, timestamp) 104 105 // THEN 106 assert.Equal(t, filledAppUpdate.Description, app.Description) 107 assert.Equal(t, filledAppUpdate.HealthCheckURL, app.HealthCheckURL) 108 assert.Equal(t, filledAppUpdate.IntegrationSystemID, app.IntegrationSystemID) 109 assert.Equal(t, filledAppUpdate.ProviderName, app.ProviderName) 110 assert.Equal(t, *filledAppUpdate.StatusCondition, app.Status.Condition) 111 assert.Equal(t, filledAppUpdate.LocalTenantID, app.LocalTenantID) 112 assert.Equal(t, timestamp, *app.UpdatedAt) 113 }) 114 115 t.Run("does not override values when input is missing", func(t *testing.T) { 116 // GIVEN 117 timestamp := time.Now() 118 statusCondition := model.ApplicationStatusConditionConnected 119 filledAppUpdate := model.ApplicationUpdateInput{ 120 StatusCondition: &statusCondition, 121 } 122 123 app := model.Application{ 124 ProviderName: str.Ptr(providerName), 125 Description: str.Ptr(description), 126 HealthCheckURL: str.Ptr(healthCheckURL), 127 IntegrationSystemID: str.Ptr(intSysID), 128 BaseEntity: &model.BaseEntity{}, 129 } 130 131 // WHEN 132 app.SetFromUpdateInput(filledAppUpdate, timestamp) 133 134 // THEN 135 assert.Equal(t, description, *app.Description) 136 assert.Equal(t, healthCheckURL, *app.HealthCheckURL) 137 assert.Equal(t, intSysID, *app.IntegrationSystemID) 138 assert.Equal(t, providerName, *app.ProviderName) 139 assert.Equal(t, *filledAppUpdate.StatusCondition, app.Status.Condition) 140 assert.Equal(t, timestamp, *app.UpdatedAt) 141 }) 142 }