Skip to content

Commit 8bd5e0a

Browse files
Merge pull request #1119 from FernandoOjeda/fo_order_place_quantity_option
Fix order place quantity option
2 parents 428753b + 31c1dad commit 8bd5e0a

File tree

4 files changed

+85
-3
lines changed

4 files changed

+85
-3
lines changed

SoftLayer/CLI/order/place.py

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,10 @@
2323
@click.option('--verify',
2424
is_flag=True,
2525
help="Flag denoting whether or not to only verify the order, not place it")
26+
@click.option('--quantity',
27+
type=int,
28+
default=1,
29+
help="The quantity of the item being ordered")
2630
@click.option('--billing',
2731
type=click.Choice(['hourly', 'monthly']),
2832
default='hourly',
@@ -35,7 +39,7 @@
3539
@click.argument('order_items', nargs=-1)
3640
@environment.pass_env
3741
def cli(env, package_keyname, location, preset, verify, billing, complex_type,
38-
extras, order_items):
42+
quantity, extras, order_items):
3943
"""Place or verify an order.
4044
4145
This CLI command is used for placing/verifying an order of the specified package in
@@ -84,7 +88,7 @@ def cli(env, package_keyname, location, preset, verify, billing, complex_type,
8488
args = (package_keyname, location, order_items)
8589
kwargs = {'preset_keyname': preset,
8690
'extras': extras,
87-
'quantity': 1,
91+
'quantity': quantity,
8892
'complex_type': complex_type,
8993
'hourly': bool(billing == 'hourly')}
9094

SoftLayer/managers/ordering.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -545,8 +545,8 @@ def generate_order(self, package_keyname, location, item_keynames, complex_type=
545545
# 'domain': 'softlayer.com'}]}
546546
order.update(extras)
547547
order['packageId'] = package['id']
548-
order['location'] = self.get_location_id(location)
549548
order['quantity'] = quantity
549+
order['location'] = self.get_location_id(location)
550550
order['useHourlyPricing'] = hourly
551551

552552
preset_core = None

tests/CLI/modules/order_tests.py

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -104,6 +104,27 @@ def test_place(self):
104104
'status': 'APPROVED'},
105105
json.loads(result.output))
106106

107+
def test_place_with_quantity(self):
108+
order_date = '2017-04-04 07:39:20'
109+
order = {'orderId': 1234, 'orderDate': order_date, 'placedOrder': {'status': 'APPROVED'}}
110+
verify_mock = self.set_mock('SoftLayer_Product_Order', 'verifyOrder')
111+
place_mock = self.set_mock('SoftLayer_Product_Order', 'placeOrder')
112+
items_mock = self.set_mock('SoftLayer_Product_Package', 'getItems')
113+
114+
verify_mock.return_value = self._get_verified_order_return()
115+
place_mock.return_value = order
116+
items_mock.return_value = self._get_order_items()
117+
118+
result = self.run_command(['-y', 'order', 'place', '--quantity=2', 'package', 'DALLAS13', 'ITEM1',
119+
'--complex-type', 'SoftLayer_Container_Product_Order_Thing'])
120+
121+
self.assert_no_fail(result)
122+
self.assert_called_with('SoftLayer_Product_Order', 'placeOrder')
123+
self.assertEqual({'id': 1234,
124+
'created': order_date,
125+
'status': 'APPROVED'},
126+
json.loads(result.output))
127+
107128
def test_place_extras_parameter_fail(self):
108129
result = self.run_command(['-y', 'order', 'place', 'package', 'DALLAS13', 'ITEM1',
109130
'--extras', '{"device":['])

tests/managers/ordering_tests.py

Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -370,6 +370,36 @@ def test_generate_order_with_preset(self):
370370
mock_get_ids.assert_called_once_with(pkg, items, 8)
371371
self.assertEqual(expected_order, order)
372372

373+
def test_generate_order_with_quantity(self):
374+
pkg = 'PACKAGE_KEYNAME'
375+
quantity = 2
376+
items = ['ITEM1', 'ITEM2']
377+
extras = {"hardware": [{"hostname": "test01", "domain": "example.com"},
378+
{"hostname": "test02", "domain": "example.com"}]}
379+
complex_type = 'My_Type'
380+
expected_order = {'orderContainers': [
381+
{'complexType': 'My_Type',
382+
'hardware': [{'domain': 'example.com',
383+
'hostname': 'test01'},
384+
{'domain': 'example.com',
385+
'hostname': 'test02'}],
386+
'location': 1854895,
387+
'packageId': 1234,
388+
'prices': [{'id': 1111}, {'id': 2222}],
389+
'quantity': 2,
390+
'useHourlyPricing': True}
391+
]}
392+
393+
mock_pkg, mock_preset, mock_get_ids = self._patch_for_generate()
394+
395+
order = self.ordering.generate_order(pkg, 'DALLAS13', items, complex_type=complex_type, quantity=quantity,
396+
extras=extras)
397+
398+
mock_pkg.assert_called_once_with(pkg, mask='id')
399+
mock_preset.assert_not_called()
400+
mock_get_ids.assert_called_once_with(pkg, items, None)
401+
self.assertEqual(expected_order, order)
402+
373403
def test_generate_order(self):
374404
pkg = 'PACKAGE_KEYNAME'
375405
items = ['ITEM1', 'ITEM2']
@@ -444,6 +474,33 @@ def test_place_order(self):
444474
extras=extras, quantity=quantity)
445475
self.assertEqual(ord_mock.return_value, order)
446476

477+
def test_place_order_with_quantity(self):
478+
ord_mock = self.set_mock('SoftLayer_Product_Order', 'placeOrder')
479+
ord_mock.return_value = {'id': 1234}
480+
pkg = 'PACKAGE_KEYNAME'
481+
location = 'DALLAS13'
482+
items = ['ITEM1', 'ITEM2']
483+
hourly = True
484+
preset_keyname = 'PRESET'
485+
complex_type = 'Complex_Type'
486+
extras = {"hardware": [{"hostname": "test01", "domain": "example.com"},
487+
{"hostname": "test02", "domain": "example.com"}]}
488+
quantity = 2
489+
490+
with mock.patch.object(self.ordering, 'generate_order') as gen_mock:
491+
gen_mock.return_value = {'order': {}}
492+
493+
order = self.ordering.place_order(pkg, location, items, hourly=hourly,
494+
preset_keyname=preset_keyname,
495+
complex_type=complex_type,
496+
extras=extras, quantity=quantity)
497+
498+
gen_mock.assert_called_once_with(pkg, location, items, hourly=hourly,
499+
preset_keyname=preset_keyname,
500+
complex_type=complex_type,
501+
extras=extras, quantity=quantity)
502+
self.assertEqual(ord_mock.return_value, order)
503+
447504
def test_place_quote(self):
448505
ord_mock = self.set_mock('SoftLayer_Product_Order', 'placeQuote')
449506
ord_mock.return_value = {'id': 1234}

0 commit comments

Comments
 (0)