Пример #1
0
    def test_load_toggles(self):
        from toggle.models import Toggle
        mocked_toggles, expected_items = self._get_mocked_toggles()

        dumped_data = [
            json.dumps(Toggle(slug=slug, enabled_users=items).to_json())
            for slug, items in expected_items.items()
        ]

        existing_toggle_docs = []
        for toggle in mocked_toggles.values():
            doc_dict = toggle.to_json()
            expected = expected_items[toggle.slug]
            # leave only items that aren't in the dump
            doc_dict['enabled_users'] = [
                item for item in doc_dict['enabled_users']
                if item not in expected
            ]
            existing_toggle_docs.append(doc_dict)

        with mock_out_couch(docs=existing_toggle_docs):
            ToggleLoader().load_objects(dumped_data)

            for mocked_toggle in mocked_toggles.values():
                loaded_toggle = Toggle.get(mocked_toggle.slug)
                self.assertItemsEqual(mocked_toggle.enabled_users,
                                      loaded_toggle.enabled_users)
Пример #2
0
    def _dump_and_load(self,
                       expected_objects,
                       not_expected_objects=None,
                       doc_to_doc_class=None):
        output_stream = StringIO()
        CouchDataDumper(self.domain_name, []).dump(output_stream)

        self._delete_couch_data()

        # make sure that there's no data left in the DB
        objects_remaining = _get_doc_counts_from_db(self.domain_name)
        self.assertEqual({}, objects_remaining,
                         'Not all data deleted: {}'.format(objects_remaining))

        dump_output = output_stream.getvalue()
        dump_lines = [
            line.strip() for line in dump_output.split('\n') if line.strip()
        ]

        with mock_out_couch() as fake_db:
            total_object_count, loaded_object_count = CouchDataLoader(
            ).load_objects(dump_lines)

        def _dump_line_to_doc_class(line):
            doc = json.loads(line)
            return _doc_to_doc_class(doc, doc_to_doc_class)

        actual_model_counts = Counter(
            [_dump_line_to_doc_class(line) for line in dump_lines])
        expected_object_counts = Counter(object.__class__
                                         for object in expected_objects)
        expected_total_objects = len(expected_objects)
        self.assertDictEqual(dict(expected_object_counts),
                             dict(actual_model_counts))
        self.assertEqual(expected_total_objects,
                         sum(loaded_object_count.values()))
        self.assertEqual(expected_total_objects, total_object_count)

        counts_in_fake_db = _get_doc_counts_from_fake_db(
            fake_db, doc_to_doc_class)
        self.assertDictEqual(dict(expected_object_counts), counts_in_fake_db)

        for object in expected_objects:
            copied_object_source = fake_db.get(object._id)
            self.assertDictEqual(object.to_json(), copied_object_source)

        if not_expected_objects:
            for object in not_expected_objects:
                with self.assertRaises(ResourceNotFound):
                    fake_db.get(object._id)

        return fake_db
Пример #3
0
    def test_dump_toggles(self):
        dumper = ToggleDumper(self.domain_name, [])
        dumper._user_ids_in_domain = Mock(return_value={'user1', 'user2', 'user3'})

        output_stream = StringIO()

        with mock_out_couch(docs=[doc.to_json() for doc in self.mocked_toggles.values()]):
            dumper.dump(output_stream)
        output_stream.seek(0)
        lines = output_stream.readlines()
        dumped = [json.loads(line.strip()) for line in lines]
        self.assertEqual(len(dumped), 3, ','.join([d['slug'] for d in dumped]))
        for dump in dumped:
            self.assertItemsEqual(self.expected_items[dump['slug']], dump['enabled_users'])
Пример #4
0
    def test_dump_toggles(self):
        mocked_toggles, expected_items = self._get_mocked_toggles()

        dumper = ToggleDumper(self.domain_name, [])
        dumper._user_ids_in_domain = Mock(return_value={'user1', 'user2', 'user3'})

        output_stream = BytesIO()

        with mock_out_couch(docs=[doc.to_json() for doc in mocked_toggles.values()]):
            dump_counter = dumper.dump(output_stream)

        self.assertEqual(3, dump_counter['Toggle'])
        output_stream.seek(0)
        dumped = [json.loads(line.strip()) for line in output_stream.readlines()]
        for dump in dumped:
            self.assertItemsEqual(expected_items[dump['slug']], dump['enabled_users'])
Пример #5
0
    def test_dump_toggles(self):
        mocked_toggles, expected_items = self._get_mocked_toggles()

        dumper = ToggleDumper(self.domain_name, [])
        dumper._user_ids_in_domain = Mock(return_value={'user1', 'user2', 'user3'})

        output_stream = StringIO()

        with mock_out_couch(docs=[doc.to_json() for doc in mocked_toggles.values()]):
            dump_counter = dumper.dump(output_stream)

        self.assertEqual(3, dump_counter['Toggle'])
        output_stream.seek(0)
        dumped = [json.loads(line.strip()) for line in output_stream.readlines()]
        for dump in dumped:
            self.assertItemsEqual(expected_items[dump['slug']], dump['enabled_users'])
Пример #6
0
    def test_dump_toggles(self):
        dumper = ToggleDumper(self.domain_name, [])
        users = {'user1', 'user2', 'user3'}

        output_stream = StringIO()

        with mock_out_couch(docs=[doc.to_json() for doc in self.mocked_toggles.values()]), \
             patch("corehq.apps.dump_reload.couch.dump.get_all_usernames_by_domain", return_value=users):
            dumper.dump(output_stream)
        output_stream.seek(0)
        lines = output_stream.readlines()
        dumped = [json.loads(line.strip()) for line in lines]
        self.assertEqual(len(dumped), 3, ','.join([d['slug'] for d in dumped]))
        for dump in dumped:
            self.assertItemsEqual(self.expected_items[dump['slug']],
                                  dump['enabled_users'])
Пример #7
0
    def _dump_and_load(self, expected_objects, not_expected_objects=None, doc_to_doc_class=None):
        output_stream = StringIO()
        CouchDataDumper(self.domain_name, []).dump(output_stream)

        self._delete_couch_data()

        # make sure that there's no data left in the DB
        objects_remaining = _get_doc_counts_from_db(self.domain_name)
        self.assertEqual({}, objects_remaining, 'Not all data deleted: {}'.format(objects_remaining))

        dump_output = output_stream.getvalue()
        dump_lines = [line.strip() for line in dump_output.split('\n') if line.strip()]

        with mock_out_couch() as fake_db:
            total_object_count, loaded_object_count = CouchDataLoader().load_objects(dump_lines)

        def _dump_line_to_doc_class(line):
            doc = json.loads(line)
            return _doc_to_doc_class(doc, doc_to_doc_class)

        actual_model_counts = Counter([
            _dump_line_to_doc_class(line)
            for line in dump_lines
        ])
        expected_object_counts = Counter(
            object.__class__ for object in expected_objects
        )
        expected_total_objects = len(expected_objects)
        self.assertDictEqual(dict(expected_object_counts), dict(actual_model_counts))
        self.assertEqual(expected_total_objects, sum(loaded_object_count.values()))
        self.assertEqual(expected_total_objects, total_object_count)

        counts_in_fake_db = _get_doc_counts_from_fake_db(fake_db, doc_to_doc_class)
        self.assertDictEqual(dict(expected_object_counts), counts_in_fake_db)

        for object in expected_objects:
            copied_object_source = fake_db.get(object._id)
            self.assertDictEqual(object.to_json(), copied_object_source)

        if not_expected_objects:
            for object in not_expected_objects:
                with self.assertRaises(ResourceNotFound):
                    fake_db.get(object._id)

        return fake_db
Пример #8
0
    def test_load_toggles(self):
        from toggle.models import Toggle
        mocked_toggles, expected_items = self._get_mocked_toggles()

        dumped_data = [
            json.dumps(Toggle(slug=slug, enabled_users=items).to_json())
            for slug, items in expected_items.items()
        ]

        existing_toggle_docs = []
        for toggle in mocked_toggles.values():
            doc_dict = toggle.to_json()
            expected = expected_items[toggle.slug]
            # leave only items that aren't in the dump
            doc_dict['enabled_users'] = [item for item in doc_dict['enabled_users'] if item not in expected]
            existing_toggle_docs.append(doc_dict)

        with mock_out_couch(docs=existing_toggle_docs):
            ToggleLoader().load_objects(dumped_data)

            for mocked_toggle in mocked_toggles.values():
                loaded_toggle = Toggle.get(mocked_toggle.slug)
                self.assertItemsEqual(mocked_toggle.enabled_users, loaded_toggle.enabled_users)