4
4
from pyelasticsearch.exceptions import (
5
5
ElasticHttpNotFoundError,
7
from charmworld.models import CharmSource
8
from charmworld.testing import MongoTestBase
7
from charmworld.models import (
11
from charmworld.testing import (
9
15
from charmworld.migrations import migrate
10
16
from charmworld.migrations.migrate import Versions
17
21
class MigrationTestBase(MongoTestBase):
20
24
super(MigrationTestBase, self).setUp()
21
25
self.versions = Versions(migrate.get_migration_path())
22
true_configure_logging = migrate.configure_logging
23
migrate.configure_logging = fake
26
'configure_logging', true_configure_logging)
26
self.use_context(mock.patch.object(migrate, 'configure_logging'))
29
29
class TestMigration010(MigrationTestBase):
89
89
self.versions.run_migration(self.db, self.index_client,
90
90
'011_ensure_category_questions.py')
91
91
self.assertIn('reliable', [cat['name'] for cat in self.db.qa.find()])
94
class TestMigration012(MigrationTestBase):
96
def test_migration_updates_answers(self):
97
self.use_index_client()
98
charm1 = factory.get_charm_json()
99
charm2 = factory.get_charm_json(name='name', series='series',
101
charm2['qa'] = {'answer': 'data'}
102
charm2['store_data']['revision'] = 5
103
source = CharmSource.from_request(self)
104
qa_data_source = QADataSource.from_db(self.db)
107
self.assertItemsEqual([], qa_data_source.answers.find())
108
self.versions.run_migration(self.db, self.index_client,
109
'012_migrate_qa_representation.py')
111
'_id': '~owner/series/name/5',
116
'answers': {'answer': 'data'}
117
}], list(qa_data_source.answers.find()))
119
def test_migration_removes_original_qa(self):
120
self.use_index_client()
121
source = CharmSource.from_request(self)
122
charm = factory.get_charm_json()
123
charm['qa'] = {'answer': 'data'}
125
for charm_data in source._get_all(charm['_id']):
126
self.assertIn('qa', charm_data)
127
self.versions.run_migration(self.db, self.index_client,
128
'012_migrate_qa_representation.py')
129
for charm_data in source._get_all(charm['_id']):
130
self.assertNotIn('qa', charm_data)