...

Source file src/edge-infra.dev/pkg/edge/api/graph/mapper/mapper_bsl_test.go

Documentation: edge-infra.dev/pkg/edge/api/graph/mapper

     1  package mapper_test
     2  
     3  import (
     4  	"testing"
     5  
     6  	"github.com/stretchr/testify/assert"
     7  
     8  	"edge-infra.dev/pkg/edge/api/bsl/types"
     9  	"edge-infra.dev/pkg/edge/api/graph/mapper"
    10  	"edge-infra.dev/pkg/edge/api/graph/model"
    11  	"edge-infra.dev/pkg/edge/api/services"
    12  )
    13  
    14  var (
    15  	siteName                = "Test Site"
    16  	status                  = services.ActiveStatus
    17  	description             = "Test site description"
    18  	referenceID             = "test-site-id"
    19  	timezone                = "UTC"
    20  	parentEnterpriseUnitID  = "parent"
    21  	locked                  = false
    22  	currency                = "USD"
    23  	contactPerson           = "John Doe"
    24  	phoneNumber             = "1234567891"
    25  	countryCode             = "+1"
    26  	street                  = "1 Test Street"
    27  	city                    = "Oklahoma City"
    28  	state                   = "Oklahoma"
    29  	country                 = "US"
    30  	postalCode              = "74464"
    31  	daypartsName            = "Hours of Operation"
    32  	dayOne                  = "Monday"
    33  	startTimeOne            = "8am"
    34  	endTimeOne              = "5pm"
    35  	dayTwo                  = "Tuesday"
    36  	startTimeTwo            = "7am"
    37  	endTimeTwo              = "4pm"
    38  	customAttributeTypeName = "Test Attribute"
    39  	key                     = "key"
    40  	value                   = "value"
    41  )
    42  
    43  func TestToBSLSiteNoContactPhoneNumberFields(t *testing.T) {
    44  	siteName := "site-no-phone"
    45  
    46  	site := &model.Site{
    47  		SiteName:           &siteName,
    48  		EnterpriseUnitName: &siteName,
    49  		Status:             &status,
    50  		Coordinates: &model.CoordinatesInput{
    51  			Latitude:  90.0,
    52  			Longitude: 180.0,
    53  		},
    54  		Locked: &locked,
    55  		Contact: &model.ContactInput{
    56  			ContactPerson: &contactPerson,
    57  		},
    58  	}
    59  	typesSite := mapper.ToBSLSite(site, &types.BslSite{
    60  		Locked: &locked,
    61  	})
    62  	assert.NotEmpty(t, typesSite)
    63  	assert.Equal(t, site.Coordinates.Latitude, typesSite.Coordinates.Latitude)
    64  	assert.Equal(t, site.Coordinates.Longitude, typesSite.Coordinates.Longitude)
    65  
    66  	assert.Equal(t, site.Contact.ContactPerson, typesSite.Contact.ContactPerson)
    67  	assert.Nil(t, typesSite.Contact.PhoneNumber)
    68  	assert.Nil(t, typesSite.Contact.PhoneNumberCountryCode, nil)
    69  }
    70  
    71  func TestToBSLSiteNoContactPersonFields(t *testing.T) {
    72  	siteName := "site-no-person"
    73  
    74  	site := &model.Site{
    75  		SiteName:           &siteName,
    76  		EnterpriseUnitName: &siteName,
    77  		Status:             &status,
    78  		Coordinates: &model.CoordinatesInput{
    79  			Latitude:  90.0,
    80  			Longitude: 180.0,
    81  		},
    82  		Locked: &locked,
    83  		Contact: &model.ContactInput{
    84  			PhoneNumber:            &phoneNumber,
    85  			PhoneNumberCountryCode: &countryCode,
    86  		},
    87  	}
    88  	typesSite := mapper.ToBSLSite(site, &types.BslSite{
    89  		Locked: &locked,
    90  	})
    91  	assert.NotEmpty(t, typesSite)
    92  	assert.Equal(t, site.Coordinates.Latitude, typesSite.Coordinates.Latitude)
    93  	assert.Equal(t, site.Coordinates.Longitude, typesSite.Coordinates.Longitude)
    94  
    95  	assert.Nil(t, typesSite.Contact.ContactPerson)
    96  	assert.Equal(t, site.Contact.PhoneNumber, typesSite.Contact.PhoneNumber)
    97  	assert.Equal(t, site.Contact.PhoneNumberCountryCode, typesSite.Contact.PhoneNumberCountryCode)
    98  }
    99  
   100  func TestToBSLSiteFullFields(t *testing.T) {
   101  	site := &model.Site{
   102  		SiteName:           &siteName,
   103  		Status:             &status,
   104  		EnterpriseUnitName: &siteName,
   105  		Coordinates: &model.CoordinatesInput{
   106  			Latitude:  90.0,
   107  			Longitude: 180.0,
   108  		},
   109  		Description:            &description,
   110  		ReferenceID:            &referenceID,
   111  		TimeZone:               &timezone,
   112  		ParentEnterpriseUnitID: &parentEnterpriseUnitID,
   113  		Locked:                 &locked,
   114  		Currency:               &currency,
   115  		Contact: &model.ContactInput{
   116  			ContactPerson:          &contactPerson,
   117  			PhoneNumber:            &phoneNumber,
   118  			PhoneNumberCountryCode: &countryCode,
   119  		},
   120  		Address: &model.AddressInput{
   121  			Street:     &street,
   122  			City:       &city,
   123  			State:      &state,
   124  			Country:    &country,
   125  			PostalCode: &postalCode,
   126  		},
   127  		Dayparts: []*model.DaypartsInput{
   128  			{
   129  				Name:        &daypartsName,
   130  				Day:         &dayOne,
   131  				Description: &description,
   132  				StartTime:   &startTimeOne,
   133  				EndTime:     &endTimeOne,
   134  			},
   135  		},
   136  		CustomAttributeSets: []*model.CustomAttributeSetsInput{
   137  			{
   138  				TypeName: &customAttributeTypeName,
   139  				Attributes: []*model.AttributesInput{
   140  					{
   141  						Key:   &key,
   142  						Value: &value,
   143  					},
   144  				},
   145  			},
   146  		},
   147  		Hours: []*model.HoursInput{
   148  			{
   149  				Close: &model.CloseInput{
   150  					Day:  &dayOne,
   151  					Time: &endTimeOne,
   152  				},
   153  				Open: &model.OpenInput{
   154  					Day:  &dayOne,
   155  					Time: &startTimeOne,
   156  				},
   157  			},
   158  			{
   159  				Close: &model.CloseInput{
   160  					Day:  &dayTwo,
   161  					Time: &endTimeTwo,
   162  				},
   163  				Open: &model.OpenInput{
   164  					Day:  &dayTwo,
   165  					Time: &startTimeTwo,
   166  				},
   167  			},
   168  		},
   169  	}
   170  	typesSite := mapper.ToBSLSite(site, &types.BslSite{})
   171  	assert.NotEmpty(t, typesSite)
   172  
   173  	assert.Equal(t, *site.SiteName, typesSite.SiteName)
   174  	assert.Equal(t, *site.Status, typesSite.Status)
   175  	assert.Equal(t, *site.EnterpriseUnitName, typesSite.EnterpriseUnitName)
   176  	assert.Equal(t, site.Coordinates.Latitude, typesSite.Coordinates.Latitude)
   177  	assert.Equal(t, site.Coordinates.Longitude, typesSite.Coordinates.Longitude)
   178  	assert.Equal(t, site.Description, typesSite.Description)
   179  	assert.Equal(t, site.ReferenceID, typesSite.ReferenceID)
   180  	assert.Equal(t, site.TimeZone, typesSite.TimeZone)
   181  	assert.Equal(t, site.ParentEnterpriseUnitID, typesSite.ParentEnterpriseUnitID)
   182  	assert.Equal(t, site.Locked, typesSite.Locked)
   183  	assert.Equal(t, site.Currency, typesSite.Currency)
   184  	assert.Equal(t, site.Contact.ContactPerson, typesSite.Contact.ContactPerson)
   185  	assert.Equal(t, site.Contact.PhoneNumber, typesSite.Contact.PhoneNumber)
   186  	assert.Equal(t, site.Contact.PhoneNumberCountryCode, typesSite.Contact.PhoneNumberCountryCode)
   187  	assert.Equal(t, site.Address.Street, typesSite.Address.Street)
   188  	assert.Equal(t, site.Address.City, typesSite.Address.City)
   189  	assert.Equal(t, site.Address.State, typesSite.Address.State)
   190  	assert.Equal(t, site.Address.Country, typesSite.Address.Country)
   191  	assert.Equal(t, site.Address.PostalCode, typesSite.Address.PostalCode)
   192  	assert.Equal(t, site.Dayparts[0].Name, typesSite.Dayparts[0].Name)
   193  	assert.Equal(t, site.Dayparts[0].Day, typesSite.Dayparts[0].Day)
   194  	assert.Equal(t, site.Dayparts[0].Description, typesSite.Dayparts[0].Description)
   195  	assert.Equal(t, site.Dayparts[0].StartTime, typesSite.Dayparts[0].StartTime)
   196  	assert.Equal(t, site.Dayparts[0].EndTime, typesSite.Dayparts[0].EndTime)
   197  	assert.Equal(t, site.CustomAttributeSets[0].TypeName, typesSite.CustomAttributeSets[0].TypeName)
   198  	assert.Equal(t, site.CustomAttributeSets[0].Attributes[0].Key, typesSite.CustomAttributeSets[0].Attributes[0].Key)
   199  	assert.Equal(t, site.CustomAttributeSets[0].Attributes[0].Value, typesSite.CustomAttributeSets[0].Attributes[0].Value)
   200  	assert.Equal(t, site.Hours[0].Open.Day, typesSite.Hours[0].Open.Day)
   201  	assert.Equal(t, site.Hours[0].Open.Time, typesSite.Hours[0].Open.Time)
   202  	assert.Equal(t, site.Hours[0].Close.Day, typesSite.Hours[0].Close.Day)
   203  	assert.Equal(t, site.Hours[0].Close.Time, typesSite.Hours[0].Close.Time)
   204  	assert.Equal(t, site.Hours[1].Open.Day, typesSite.Hours[1].Open.Day)
   205  	assert.Equal(t, site.Hours[1].Open.Time, typesSite.Hours[1].Open.Time)
   206  	assert.Equal(t, site.Hours[1].Close.Day, typesSite.Hours[1].Close.Day)
   207  	assert.Equal(t, site.Hours[1].Close.Time, typesSite.Hours[1].Close.Time)
   208  }
   209  
   210  func TestToBSLSite2MissingFields(t *testing.T) {
   211  	defaultValue := ""
   212  	site := &model.Site{
   213  		Description: &defaultValue,
   214  		ReferenceID: &defaultValue,
   215  	}
   216  	currentSite := &types.BslSite{
   217  		SiteName:           siteName,
   218  		Status:             status,
   219  		EnterpriseUnitName: siteName,
   220  		Coordinates: types.Coordinates{
   221  			Latitude:  90.0,
   222  			Longitude: 180.0,
   223  		},
   224  		Description:            &description,
   225  		ReferenceID:            &referenceID,
   226  		TimeZone:               &timezone,
   227  		ParentEnterpriseUnitID: &parentEnterpriseUnitID,
   228  		Currency:               &currency,
   229  		Contact: &types.Contact{
   230  			ContactPerson:          &contactPerson,
   231  			PhoneNumberCountryCode: &countryCode,
   232  		},
   233  		Address: &types.Address{
   234  			Street: &street,
   235  			State:  &state,
   236  		},
   237  		Dayparts: []*types.Dayparts{
   238  			{
   239  				Name:    &daypartsName,
   240  				Day:     &dayOne,
   241  				EndTime: &endTimeOne,
   242  			},
   243  		},
   244  		CustomAttributeSets: []*types.CustomAttributeSets{
   245  			{
   246  				TypeName: &customAttributeTypeName,
   247  			},
   248  		},
   249  		Hours: []*types.Hours{
   250  			{
   251  				Close: &types.Close{
   252  					Day:  &dayOne,
   253  					Time: &endTimeOne,
   254  				},
   255  				Open: &types.Open{
   256  					Day:  &dayOne,
   257  					Time: &startTimeOne,
   258  				},
   259  			},
   260  		},
   261  	}
   262  	typesSite := mapper.ToBSLSite(site, currentSite)
   263  	assert.NotEmpty(t, typesSite)
   264  
   265  	assert.Equal(t, siteName, typesSite.SiteName)
   266  	assert.Equal(t, status, typesSite.Status)
   267  	assert.Equal(t, siteName, typesSite.EnterpriseUnitName)
   268  	assert.Equal(t, services.DefaultLatitude, typesSite.Coordinates.Latitude)
   269  	assert.Equal(t, services.DefaultLongitude, typesSite.Coordinates.Longitude)
   270  	assert.Equal(t, timezone, *typesSite.TimeZone)
   271  	assert.Equal(t, parentEnterpriseUnitID, *typesSite.ParentEnterpriseUnitID)
   272  	assert.Equal(t, currency, *typesSite.Currency)
   273  	assert.Equal(t, contactPerson, *typesSite.Contact.ContactPerson)
   274  	assert.Equal(t, countryCode, *typesSite.Contact.PhoneNumberCountryCode)
   275  	assert.Equal(t, street, *typesSite.Address.Street)
   276  	assert.Equal(t, state, *typesSite.Address.State)
   277  	assert.Equal(t, daypartsName, *typesSite.Dayparts[0].Name)
   278  	assert.Equal(t, dayOne, *typesSite.Dayparts[0].Day)
   279  	assert.Equal(t, endTimeOne, *typesSite.Dayparts[0].EndTime)
   280  	assert.Equal(t, customAttributeTypeName, *typesSite.CustomAttributeSets[0].TypeName)
   281  	assert.Equal(t, startTimeOne, *typesSite.Hours[0].Open.Time)
   282  	assert.Equal(t, dayOne, *typesSite.Hours[0].Close.Day)
   283  
   284  	assert.Nil(t, typesSite.Description)
   285  	assert.Nil(t, typesSite.ReferenceID)
   286  }
   287  

View as plain text