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  }