164
164
self.index_client.index_charm(four)
165
165
result = self.get_charms(**{filter_str: 'common'})
166
166
self.assertEqual(2, len(result))
167
res = lambda x: self.api_class._charm_result(x)
167
res = lambda x: self.api_class._charm_result(Charm(x))
168
168
self.assertItemsEqual([res(one), res(two)], result)
169
169
result = self.get_charms(**{filter_str: 'different'})
170
170
self.assertItemsEqual([res(three)], result)
214
214
charmers = self.api_class._charm_result(
215
self.makeCharm(promulgated=True)[1])
216
steve = self.api_class._charm_result(self.makeCharm(owner='steve')[1])
215
Charm(self.makeCharm(promulgated=True)[1]))
216
steve = self.api_class._charm_result(
217
Charm(self.makeCharm(owner='steve')[1]))
217
218
result = self.get_charms(type_='community')
218
219
self.assertEqual([steve], [charm for charm in result])
219
220
result = self.get_charms(type_='approved')
232
233
def test_charms_type_filter_considers_promulgation(self):
233
234
"""Promulgation controls type."""
234
235
reviewed = self.api_class._charm_result(
235
self.makeCharm(promulgated=True)[1])
236
Charm(self.makeCharm(promulgated=True)[1]))
236
237
unreviewed = self.api_class._charm_result(
237
self.makeCharm(promulgated=False)[1])
238
Charm(self.makeCharm(promulgated=False)[1]))
238
239
result = self.get_charms(type_='community')
239
240
self.assertEqual([unreviewed], [charm for charm in result])
240
241
result = self.get_charms(type_='approved')
257
258
self.assertEqual(200, response.status_code)
258
259
charms = response.json_body['result']
259
260
self.assertEqual(1, len(charms))
260
self.assertEqual(self.api_class._charm_result(abc_charm), charms[0])
262
self.api_class._charm_result(Charm(abc_charm)), charms[0])
262
264
def test_charms_text_search_respects_filters(self):
263
265
official = self.makeCharm(summary='abc def', promulgated=True)[1]
265
267
self.makeCharm(summary='abc def', owner='steve')
266
268
self.makeCharm(owner='steve')
267
269
result = self.get_charms(type_=['approved'], text='def')
268
self.assertEqual([self.api_class._charm_result(official)],
269
[charm for charm in result])
271
[self.api_class._charm_result(Charm(official))],
272
[charm for charm in result])
271
274
def test_charms_limit(self):
272
275
"""Limit provides a maximum for charm numbers."""
310
313
self.assertEqual(['pop%d' % num for num in range(14, 4, -1)],
311
314
[r['charm']['name']
312
315
for r in data['result']['popular']])
313
self.assertEqual(self.api_class._charm_result(last_popular_charm),
314
data['result']['popular'][0])
317
self.api_class._charm_result(Charm(last_popular_charm)),
318
data['result']['popular'][0])
315
319
self.assertEqual(['new%d' % num for num in range(14, 4, -1)],
316
320
[r['charm']['name'] for r in data['result']['new']])
317
self.assertEqual(self.api_class._charm_result(last_new_charm),
318
data['result']['new'][0])
322
self.api_class._charm_result(Charm(last_new_charm)),
323
data['result']['new'][0])
319
324
self.assertItemsEqual(
320
325
['featured%d' % num for num in range(14, -1, -1)],
321
326
[r['charm']['name'] for r in data['result']['featured']])
322
327
featured14, = [charm for charm in data['result']['featured'] if
323
328
charm['charm']['name'] == 'featured14']
324
329
self.assertEqual(
325
self.api_class._charm_result(last_featured_charm),
330
self.api_class._charm_result(Charm(last_featured_charm)),
328
333
def test_charms_accepts_categories(self):
612
617
def make_charm(self, *args, **kwargs):
613
618
"""Make a charm formatted for api."""
614
charm = factory.makeCharm(self.db, *args, **kwargs)[1]
615
return (self.api_class._get_api_id(Charm(charm)),
619
charm_data = factory.makeCharm(self.db, *args, **kwargs)[1]
620
charm = Charm(charm_data)
621
return (self.api_class._get_api_id(charm),
616
622
self.api_class._charm_result(charm))
618
624
def test_unknown_endpoint(self):
1025
1031
def test_charm_result_includes_charm_and_metadata(self):
1026
1032
charm = factory.get_charm_json(promulgated=False)
1027
result = self.api_class._charm_result(charm)
1033
result = self.api_class._charm_result(Charm(charm))
1028
1034
self.assertIn('metadata', result)
1029
1035
self.assertIn('charm', result)
1123
1129
'interface': 'ssl',
1126
result = self.api_class._charm_result(charm)
1132
result = self.api_class._charm_result(Charm(charm))
1127
1133
self.assertNotIn('related', result['metadata'])
1129
1135
def get_charm_response(self, charm, suffix):