~jcsackett/charmworld/bac-tag-constraints

« back to all changes in this revision

Viewing changes to charmworld/tests/test_models.py

[r=benji][bug=][author=abentley] Prerequisite changes for versioning.

Show diffs side-by-side

added added

removed removed

Lines of Context:
21
21
from mock import patch
22
22
from pyelasticsearch.exceptions import (
23
23
    ElasticHttpError,
24
 
    ElasticHttpNotFoundError,
25
24
)
 
25
import pymongo
26
26
import yaml
27
27
 
28
28
from charmworld.models import (
68
68
        self.assertEqual('~foo/bar/baz/25', charm_id)
69
69
 
70
70
    def test_construct_charm_id_promulgated(self):
 
71
        # Promulgation has no effect on this ID.
71
72
        payload = factory.get_payload_json(owner='foo', series='bar',
72
73
                                           name='baz', promulgated=True)
73
74
        factory.add_store_data(payload, revision=25, promulgated=True)
81
82
        charm_id = construct_charm_id(payload)
82
83
        self.assertEqual('~foo/bar/baz/0', charm_id)
83
84
 
 
85
    def test_construct_charm_id_no_revision(self):
 
86
        payload = factory.get_payload_json(owner='foo', series='bar',
 
87
                                           name='baz')
 
88
        charm_id = construct_charm_id(payload, use_revision=False)
 
89
        self.assertEqual('~foo/bar/baz', charm_id)
 
90
 
84
91
 
85
92
class CharmTestCase(TestCase):
86
93
    """Unit tests for the Charm model that wraps charm representations."""
1293
1300
        ignore, charm_with_error = factory.makeCharm(
1294
1301
            self.db, name='charm_with_error', charm_error=True)
1295
1302
        result = find_charms(self.db)
1296
 
        self.assertEqual(1, result.count())
 
1303
        self.assertEqual(1, len(result))
1297
1304
        self.assertEqual(valid_charm, result[0])
1298
1305
 
1299
1306
    def test_find_charms_invalid_included(self):
1303
1310
        ignore, charm_with_error = factory.makeCharm(
1304
1311
            self.db, name='charm_with_error', charm_error=True)
1305
1312
        result = find_charms(self.db, valid_charms_only=False)
1306
 
        self.assertEqual(2, result.count())
 
1313
        self.assertEqual(2, len(result))
1307
1314
 
1308
1315
    def test_find_charms_with_more_parameters(self):
1309
1316
        # Any parameter of Collection.find() can be specified.
1310
1317
        ignore, charm_1 = factory.makeCharm(self.db, name='valid_charm_1')
1311
1318
        ignore, charm_2 = factory.makeCharm(self.db, name='valid_charm_2')
1312
1319
        result = find_charms(self.db, {'name': 'does-not-exist'})
1313
 
        self.assertEqual(0, result.count())
 
1320
        self.assertEqual(0, len(result))
1314
1321
        result = find_charms(self.db, spec={'name': 'valid_charm_1'})
1315
 
        self.assertEqual(1, result.count())
 
1322
        self.assertEqual(1, len(result))
1316
1323
        self.assertEqual(charm_1, result[0])
1317
1324
        result = find_charms(
1318
1325
            self.db, spec={'name': 'valid_charm_1'}, fields=('bname', 'name'))
1337
1344
            self.db, promulgated=True)
1338
1345
        factory.makeCharm(self.db)
1339
1346
        result = find_charms(self.db, only_promulgated=True)
1340
 
        self.assertEqual(1, result.count())
 
1347
        self.assertEqual(1, len(result))
1341
1348
        self.assertEqual(promulgated_charm, result[0])
1342
1349
 
 
1350
    def test_sort(self):
 
1351
        charm_1 = factory.makeCharm(self.db, owner='a', series='b')[0]
 
1352
        charm_2 = factory.makeCharm(self.db, owner='b', series='a')[0]
 
1353
        charms = find_charms(self.db, sort=[('owner', pymongo.ASCENDING)])
 
1354
        self.assertEqual([charm_1, charm_2], [c['_id'] for c in charms])
 
1355
        charms = find_charms(self.db, sort=[('owner', pymongo.DESCENDING)])
 
1356
        self.assertEqual([charm_2, charm_1], [c['_id'] for c in charms])
 
1357
 
1343
1358
 
1344
1359
class TestCharmSource(MongoTestBase):
1345
1360
 
1359
1374
        factory.makeCharm(self.db)[0]
1360
1375
        # Create a charm which is index-incompatible with the previous one.
1361
1376
        factory.makeCharm(self.db,
1362
 
                          owner={'first': 'J', 'last': 'Random'})[0]
 
1377
                          maintainer={'first': 'J', 'last': 'Random'})[0]
1363
1378
        handler = self.get_handler('sync-index')
1364
1379
        with patch('charmworld.models.configure_logging'):
1365
1380
            with patch('charmworld.models.get_ini', lambda: INI):
1372
1387
    def test_save_deletes_on_error(self):
1373
1388
        self.use_index_client()
1374
1389
        source = CharmSource.from_request(self)
1375
 
        source.save({'_id': 'a', 'b': {}})
 
1390
        source.save({
 
1391
            '_id': 'a',
 
1392
            'b': {},
 
1393
            'owner': 'foo',
 
1394
            'series': 'bar',
 
1395
            'name': 'baz',
 
1396
        })
1376
1397
        with self.assertRaises(ElasticHttpError):
1377
 
            source.save({'_id': 'a', 'b': 'c'})
1378
 
        with self.assertRaises(ElasticHttpNotFoundError):
1379
 
            self.index_client.get('a')
 
1398
            source.save({
 
1399
                '_id': 'a',
 
1400
                'b': 'c',
 
1401
                'owner': 'foo',
 
1402
                'series': 'bar',
 
1403
                'name': 'baz',
 
1404
            })
 
1405
        self.assertIs(None, self.index_client.get('a'))
1380
1406
 
1381
1407
 
1382
1408
class TestOptionsStorage(TestCase):