Skip to content

Commit 6dbf2dd

Browse files
Fixed an ordering bug related to capacityRestrictions #863
1 parent 23fed91 commit 6dbf2dd

3 files changed

Lines changed: 626 additions & 16 deletions

File tree

plugin/commands/order/place_test.go

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -41,11 +41,11 @@ var _ = Describe("Place", func() {
4141
cliCommand.Command.PersistentFlags().Var(cliCommand.OutputFlag, "output", "--output=JSON for json output.")
4242
cliCommand.OrderManager = OrderManager
4343
})
44-
AfterEach(func() {
45-
// Clear API call logs and any errors that might have been set after every test
46-
fakeHandler.ClearApiCallLogs()
47-
fakeHandler.ClearErrors()
48-
})
44+
AfterEach(func() {
45+
// Clear API call logs and any errors that might have been set after every test
46+
fakeHandler.ClearApiCallLogs()
47+
fakeHandler.ClearErrors()
48+
})
4949

5050
Describe("order verify", func() {
5151
for k, _ := range order.TYPEMAP {
@@ -246,7 +246,7 @@ var _ = Describe("Place", func() {
246246
Describe("softlayer-cli/issues/863", func() {
247247
BeforeEach(func() {
248248
fakeHandler.ClearApiCallLogs()
249-
fakeHandler.SetFileNames([]string{"getItems-835", "getDatacenters_mad02"})
249+
fakeHandler.SetFileNames([]string{"getItems-835", "getDatacenters_mad02", "getActivePresets-835"})
250250
})
251251
It("Finds the correct price IDs", func() {
252252
err := testhelpers.RunCobraCommand(
@@ -261,14 +261,14 @@ var _ = Describe("Place", func() {
261261
"--preset=BL2_8x32x100", "--verify",
262262
)
263263
Expect(err).NotTo(HaveOccurred())
264-
264+
265265
callLog := fakeHandler.ApiCallLogs
266266
Expect(len(callLog)).To(Equal(9))
267267
fmt.Printf(callLog[8].String())
268268
Expect(callLog[8].String()).To(Equal(`SoftLayer_Product_Order::verifyOrder(id=0, mask='', filter='', ` +
269269
`{"parameters":[{"complexType":"SoftLayer_Container_Product_Order_Virtual_Guest",` +
270-
`"location":"3460412","packageId":865,"presetId":785,"prices":[{"id":899},{"id":21},{"id":204637},` +
271-
`{"id":314158},{"id":55},{"id":57},{"id":58},{"id":420},{"id":905},{"id":22505}],"quantity":1,` +
270+
`"location":"3460412","packageId":865,"presetId":281,"prices":[{"id":899},{"id":21},{"id":204637},` +
271+
`{"id":314142},{"id":55},{"id":57},{"id":58},{"id":420},{"id":905},{"id":22505}],"quantity":1,` +
272272
`"useHourlyPricing":false,"virtualGuests":[{"domain":"ibm.com","hostname":"testServer"}]}]}`,
273273
))
274274
})

plugin/managers/order.go

Lines changed: 18 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -232,7 +232,9 @@ func (i orderManager) GenerateOrder(packageKeyname, location string, itemKeyname
232232
}
233233

234234
for _, item := range presetItems.Prices {
235-
if item.Item != nil && item.Item.ItemCategory != nil && item.Item.ItemCategory.CategoryCode != nil && *item.Item.ItemCategory.CategoryCode == "guest_core" {
235+
if item.Item != nil && item.Item.ItemCategory != nil &&
236+
item.Item.ItemCategory.CategoryCode != nil &&
237+
*item.Item.ItemCategory.CategoryCode == "guest_core" {
236238
if item.Item.Capacity != nil {
237239
presetCore = float64(*item.Item.Capacity)
238240
}
@@ -317,8 +319,9 @@ func (i orderManager) GetPresetbyKey(packageKeyname, presetKeyname string) (data
317319
return activePresets[0], nil
318320
}
319321

322+
// Makes an API call to get packageKeyName
323+
// Finds the given itemKeynames in the result, checking any capacity restrictions for the items if needed
320324
func (i orderManager) GetPriceIdList(packageKeyname string, itemKeynames []string, presetCore float64) ([]int, error) {
321-
322325
mask := "id, itemCategory, keyName, prices[categories]"
323326
packages, err := i.GetPackageByKey(packageKeyname, "id")
324327
if err != nil {
@@ -343,16 +346,22 @@ func (i orderManager) GetPriceIdList(packageKeyname string, itemKeynames []strin
343346
if len(newItems) != 0 {
344347
matchingItem = newItems[0]
345348
} else {
346-
return nil, errors.New(T("Item {{.Item}} does not exist for package {{.Package}}", map[string]interface{}{"Item": itemKeyname, "Package": packageKeyname}))
349+
subs := map[string]interface{}{"Item": itemKeyname, "Package": packageKeyname}
350+
return nil, errors.New(T("Item {{.Item}} does not exist for package {{.Package}}", subs))
347351
}
352+
348353
var itemCategory string
349354
if matchingItem.ItemCategory != nil && matchingItem.ItemCategory.CategoryCode != nil {
350355
itemCategory = *matchingItem.ItemCategory.CategoryCode
351356
}
357+
352358
if _, ok := categoryDict[itemCategory]; !ok {
353359
for _, p := range matchingItem.Prices {
354-
if ((p.LocationGroupId != nil && *p.LocationGroupId == 0) || p.LocationGroupId == nil) && p.Id != nil {
355-
var capacityMin, capacityMax int
360+
if ((p.LocationGroupId != nil && *p.LocationGroupId == 0) ||
361+
p.LocationGroupId == nil) && p.Id != nil {
362+
363+
capacityMin := -1
364+
capacityMax := -1
356365
if p.CapacityRestrictionMinimum != nil {
357366
capacityMin, err = strconv.Atoi(*p.CapacityRestrictionMinimum)
358367
if err != nil {
@@ -375,15 +384,17 @@ func (i orderManager) GetPriceIdList(packageKeyname string, itemKeynames []strin
375384
priceId = *p.Id
376385
}
377386
}
378-
379387
}
380388
}
381389
} else {
382390
var PriceIdList []int
383391
categoryDict[itemCategory] += 1
384392
categoryCode := itemCategory[:len(itemCategory)-1] + strconv.Itoa(categoryDict[itemCategory])
385393
for _, p := range matchingItem.Prices {
386-
if p.LocationGroupId != nil && *p.LocationGroupId == 0 && len(p.Categories) > 0 && p.Categories[0].CategoryCode != nil && *p.Categories[0].CategoryCode == categoryCode {
394+
if p.LocationGroupId != nil && *p.LocationGroupId == 0 &&
395+
len(p.Categories) > 0 && p.Categories[0].CategoryCode != nil &&
396+
*p.Categories[0].CategoryCode == categoryCode {
397+
387398
PriceIdList = append(PriceIdList, *p.Id)
388399
}
389400
}

0 commit comments

Comments
 (0)