Skip to content

Commit 010f6f8

Browse files
author
Ryan Rossiter
committed
Add unit tests for the order manager and CLI
1 parent 9526a96 commit 010f6f8

File tree

3 files changed

+454
-39
lines changed

3 files changed

+454
-39
lines changed

SoftLayer/managers/ordering.py

Lines changed: 31 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,32 @@
88

99
from SoftLayer import exceptions
1010

11+
CATEGORY_MASK = '''id,
12+
isRequired,
13+
itemCategory[
14+
id,
15+
name,
16+
categoryCode
17+
]
18+
'''
19+
20+
ITEM_MASK = '''id,
21+
keyName,
22+
description
23+
'''
24+
25+
PACKAGE_MASK = '''id,
26+
name,
27+
keyName,
28+
isActive
29+
'''
30+
31+
PRESET_MASK = '''id,
32+
name,
33+
keyName,
34+
description
35+
'''
36+
1137

1238
class OrderingManager(object):
1339
"""Manager to help ordering via the SoftLayer API.
@@ -232,15 +258,7 @@ def list_categories(self, package_keyname, **kwargs):
232258
:returns: List of categories associated with the package
233259
"""
234260
get_kwargs = {}
235-
default_mask = '''id,
236-
isRequired,
237-
itemCategory[
238-
id,
239-
name,
240-
categoryCode
241-
]
242-
'''
243-
get_kwargs['mask'] = kwargs.get('mask', default_mask)
261+
get_kwargs['mask'] = kwargs.get('mask', CATEGORY_MASK)
244262

245263
if 'filter' in kwargs:
246264
get_kwargs['filter'] = kwargs['filter']
@@ -260,11 +278,7 @@ def list_items(self, package_keyname, **kwargs):
260278
261279
"""
262280
get_kwargs = {}
263-
default_mask = '''id,
264-
keyName,
265-
description
266-
'''
267-
get_kwargs['mask'] = kwargs.get('mask', default_mask)
281+
get_kwargs['mask'] = kwargs.get('mask', ITEM_MASK)
268282

269283
if 'filter' in kwargs:
270284
get_kwargs['filter'] = kwargs['filter']
@@ -283,12 +297,7 @@ def list_packages(self, **kwargs):
283297
284298
"""
285299
get_kwargs = {}
286-
default_mask = '''id,
287-
name,
288-
keyName,
289-
isActive
290-
'''
291-
get_kwargs['mask'] = kwargs.get('mask', default_mask)
300+
get_kwargs['mask'] = kwargs.get('mask', PACKAGE_MASK)
292301

293302
if 'filter' in kwargs:
294303
get_kwargs['filter'] = kwargs['filter']
@@ -305,12 +314,7 @@ def list_presets(self, package_keyname, **kwargs):
305314
306315
"""
307316
get_kwargs = {}
308-
default_mask = '''id,
309-
name,
310-
keyName,
311-
description
312-
'''
313-
get_kwargs['mask'] = kwargs.get('mask', default_mask)
317+
get_kwargs['mask'] = kwargs.get('mask', PRESET_MASK)
314318

315319
if 'filter' in kwargs:
316320
get_kwargs['filter'] = kwargs['filter']
@@ -322,7 +326,7 @@ def list_presets(self, package_keyname, **kwargs):
322326
acc_presets = self.package_svc.getAccountRestrictedActivePresets(
323327
id=package['id'], **get_kwargs)
324328
active_presets = self.package_svc.getActivePresets(id=package['id'], **get_kwargs)
325-
return acc_presets + active_presets
329+
return active_presets + acc_presets
326330

327331
def get_preset_by_key(self, package_keyname, preset_keyname, mask=None):
328332
"""Gets a single preset with the given key."""
@@ -351,10 +355,6 @@ def get_price_id_list(self, package_keyname, item_keynames):
351355
keynames in the given package
352356
353357
"""
354-
package = self.get_package_by_key(package_keyname, mask='id')
355-
if not package:
356-
raise exceptions.SoftLayerError("Package {} does not exist".format(package_keyname))
357-
358358
mask = 'id, keyName, prices'
359359
items = self.list_items(package_keyname, mask=mask)
360360

tests/CLI/modules/order_tests.py

Lines changed: 184 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,184 @@
1+
"""
2+
SoftLayer.tests.CLI.modules.order_tests
3+
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
4+
:license: MIT, see LICENSE for more details.
5+
"""
6+
import json
7+
8+
from SoftLayer import testing
9+
10+
11+
class OrderTests(testing.TestCase):
12+
def test_category_list(self):
13+
cat1 = {'itemCategory': {'name': 'cat1', 'categoryCode': 'code1'},
14+
'isRequired': 1}
15+
cat2 = {'itemCategory': {'name': 'cat2', 'categoryCode': 'code2'},
16+
'isRequired': 0}
17+
p_mock = self.set_mock('SoftLayer_Product_Package', 'getConfiguration')
18+
p_mock.return_value = [cat1, cat2]
19+
20+
result = self.run_command(['order', 'category-list', 'package'])
21+
22+
self.assert_no_fail(result)
23+
self.assert_called_with('SoftLayer_Product_Package', 'getConfiguration')
24+
self.assertEqual([{'name': 'cat1',
25+
'categoryCode': 'code1',
26+
'isRequired': 'Y'},
27+
{'name': 'cat2',
28+
'categoryCode': 'code2',
29+
'isRequired': 'N'}],
30+
json.loads(result.output))
31+
32+
def test_item_list(self):
33+
item1 = {'keyName': 'item1', 'description': 'description1'}
34+
item2 = {'keyName': 'item2', 'description': 'description2'}
35+
p_mock = self.set_mock('SoftLayer_Product_Package', 'getItems')
36+
p_mock.return_value = [item1, item2]
37+
38+
result = self.run_command(['order', 'item-list', 'package'])
39+
40+
self.assert_no_fail(result)
41+
self.assert_called_with('SoftLayer_Product_Package', 'getItems')
42+
self.assertEqual([{'keyName': 'item1',
43+
'description': 'description1'},
44+
{'keyName': 'item2',
45+
'description': 'description2'}],
46+
json.loads(result.output))
47+
48+
def test_package_list(self):
49+
item1 = {'name': 'package1', 'keyName': 'PACKAGE1',
50+
'isActive': 1}
51+
item2 = {'name': 'package2', 'keyName': 'PACKAGE2',
52+
'isActive': 1}
53+
p_mock = self.set_mock('SoftLayer_Product_Package', 'getAllObjects')
54+
p_mock.return_value = [item1, item2]
55+
56+
result = self.run_command(['order', 'package-list'])
57+
58+
self.assert_no_fail(result)
59+
self.assert_called_with('SoftLayer_Product_Package', 'getAllObjects')
60+
self.assertEqual([{'name': 'package1',
61+
'keyName': 'PACKAGE1'},
62+
{'name': 'package2',
63+
'keyName': 'PACKAGE2'}],
64+
json.loads(result.output))
65+
66+
def test_place(self):
67+
order_date = '2017-04-04 07:39:20'
68+
order = {'orderId': 1234, 'orderDate': order_date,
69+
'placedOrder': {'status': 'APPROVED'}}
70+
verify_mock = self.set_mock('SoftLayer_Product_Order', 'verifyOrder')
71+
place_mock = self.set_mock('SoftLayer_Product_Order', 'placeOrder')
72+
items_mock = self.set_mock('SoftLayer_Product_Package', 'getItems')
73+
74+
verify_mock.return_value = self._get_verified_order_return()
75+
place_mock.return_value = order
76+
items_mock.return_value = self._get_order_items()
77+
78+
result = self.run_command(['-y', 'order', 'place', 'package', 'DALLAS13', 'ITEM1'])
79+
80+
self.assert_no_fail(result)
81+
self.assert_called_with('SoftLayer_Product_Order', 'verifyOrder')
82+
self.assert_called_with('SoftLayer_Product_Order', 'placeOrder')
83+
self.assertEqual({'id': 1234,
84+
'created': order_date,
85+
'status': 'APPROVED'},
86+
json.loads(result.output))
87+
88+
def test_verify_hourly(self):
89+
order_date = '2017-04-04 07:39:20'
90+
order = {'orderId': 1234, 'orderDate': order_date,
91+
'placedOrder': {'status': 'APPROVED'}}
92+
verify_mock = self.set_mock('SoftLayer_Product_Order', 'verifyOrder')
93+
items_mock = self.set_mock('SoftLayer_Product_Package', 'getItems')
94+
95+
order = self._get_verified_order_return()
96+
verify_mock.return_value = order
97+
items_mock.return_value = self._get_order_items()
98+
99+
result = self.run_command(['order', 'place', '--billing', 'hourly', '--verify',
100+
'package', 'DALLAS13', 'ITEM1', 'ITEM2'])
101+
102+
self.assert_no_fail(result)
103+
self.assert_called_with('SoftLayer_Product_Order', 'verifyOrder')
104+
expected_results = []
105+
106+
for price in order['prices']:
107+
expected_results.append({'keyName': price['item']['keyName'],
108+
'description': price['item']['description'],
109+
'cost': price['hourlyRecurringFee']})
110+
111+
self.assertEqual(expected_results,
112+
json.loads(result.output))
113+
114+
def test_verify_monthly(self):
115+
order_date = '2017-04-04 07:39:20'
116+
order = {'orderId': 1234, 'orderDate': order_date,
117+
'placedOrder': {'status': 'APPROVED'}}
118+
verify_mock = self.set_mock('SoftLayer_Product_Order', 'verifyOrder')
119+
items_mock = self.set_mock('SoftLayer_Product_Package', 'getItems')
120+
121+
order = self._get_verified_order_return()
122+
verify_mock.return_value = order
123+
items_mock.return_value = self._get_order_items()
124+
125+
result = self.run_command(['order', 'place', '--billing', 'monthly', '--verify',
126+
'package', 'DALLAS13', 'ITEM1', 'ITEM2'])
127+
128+
self.assert_no_fail(result)
129+
self.assert_called_with('SoftLayer_Product_Order', 'verifyOrder')
130+
expected_results = []
131+
132+
for price in order['prices']:
133+
expected_results.append({'keyName': price['item']['keyName'],
134+
'description': price['item']['description'],
135+
'cost': price['recurringFee']})
136+
137+
self.assertEqual(expected_results,
138+
json.loads(result.output))
139+
140+
def test_preset_list(self):
141+
active_preset1 = {'name': 'active1', 'keyName': 'PRESET1',
142+
'description': 'description1'}
143+
active_preset2 = {'name': 'active2', 'keyName': 'PRESET2',
144+
'description': 'description2'}
145+
acc_preset = {'name': 'account1', 'keyName': 'PRESET3',
146+
'description': 'description3'}
147+
active_mock = self.set_mock('SoftLayer_Product_Package', 'getActivePresets')
148+
account_mock = self.set_mock('SoftLayer_Product_Package',
149+
'getAccountRestrictedActivePresets')
150+
active_mock.return_value = [active_preset1, active_preset2]
151+
account_mock.return_value = [acc_preset]
152+
153+
result = self.run_command(['order', 'preset-list', 'package'])
154+
155+
self.assert_no_fail(result)
156+
self.assert_called_with('SoftLayer_Product_Package', 'getActivePresets')
157+
self.assert_called_with('SoftLayer_Product_Package',
158+
'getAccountRestrictedActivePresets')
159+
self.assertEqual([{'name': 'active1',
160+
'keyName': 'PRESET1',
161+
'description': 'description1'},
162+
{'name': 'active2',
163+
'keyName': 'PRESET2',
164+
'description': 'description2'},
165+
{'name': 'account1',
166+
'keyName': 'PRESET3',
167+
'description': 'description3'}],
168+
json.loads(result.output))
169+
170+
def _get_order_items(self):
171+
item1 = {'keyName': 'ITEM1', 'description': 'description1',
172+
'prices': [{'id': 1111, 'locationGroupId': ''}]}
173+
item2 = {'keyName': 'ITEM2', 'description': 'description2',
174+
'prices': [{'id': 2222, 'locationGroupId': ''}]}
175+
176+
return [item1, item2]
177+
178+
def _get_verified_order_return(self):
179+
item1, item2 = self._get_order_items()
180+
price1 = {'item': item1, 'hourlyRecurringFee': '0.04',
181+
'recurringFee': '120'}
182+
price2 = {'item': item2, 'hourlyRecurringFee': '0.05',
183+
'recurringFee': '150'}
184+
return {'prices': [price1, price2]}

0 commit comments

Comments
 (0)