~jcsackett/charmworld/bac-tag-constraints

« back to all changes in this revision

Viewing changes to charmworld/migrations/versions/tests/test_migrations.py

  • Committer: Tarmac
  • Author(s): Aaron Bentley
  • Date: 2013-08-06 21:06:58 UTC
  • mfrom: (328.2.13 separate-qa)
  • Revision ID: tarmac-20130806210658-6eau0bkn7o9rmspo
[r=benji][bug=][author=abentley] Separate QA answers from other data.

Show diffs side-by-side

added added

removed removed

Lines of Context:
4
4
from pyelasticsearch.exceptions import (
5
5
    ElasticHttpNotFoundError,
6
6
)
7
 
from charmworld.models import CharmSource
8
 
from charmworld.testing import MongoTestBase
 
7
from charmworld.models import (
 
8
    CharmSource,
 
9
    QADataSource,
 
10
)
 
11
from charmworld.testing import (
 
12
    factory,
 
13
    MongoTestBase,
 
14
)
9
15
from charmworld.migrations import migrate
10
16
from charmworld.migrations.migrate import Versions
11
17
 
12
 
 
13
 
def fake():
14
 
    pass
 
18
import mock
15
19
 
16
20
 
17
21
class MigrationTestBase(MongoTestBase):
19
23
    def setUp(self):
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
24
 
        self.addCleanup(
25
 
            setattr, migrate,
26
 
            'configure_logging', true_configure_logging)
 
26
        self.use_context(mock.patch.object(migrate, 'configure_logging'))
27
27
 
28
28
 
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()])
 
92
 
 
93
 
 
94
class TestMigration012(MigrationTestBase):
 
95
 
 
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',
 
100
                                        owner='owner')
 
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)
 
105
        source.save(charm1)
 
106
        source.save(charm2)
 
107
        self.assertItemsEqual([], qa_data_source.answers.find())
 
108
        self.versions.run_migration(self.db, self.index_client,
 
109
                                    '012_migrate_qa_representation.py')
 
110
        self.assertEqual([{
 
111
            '_id': '~owner/series/name/5',
 
112
            'name': 'name',
 
113
            'series': 'series',
 
114
            'owner': 'owner',
 
115
            'revision': 5,
 
116
            'answers': {'answer': 'data'}
 
117
        }], list(qa_data_source.answers.find()))
 
118
 
 
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'}
 
124
        source.save(charm)
 
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)