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: ¤cy,
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: ¤cy,
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