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)
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
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'])
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'])
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'])
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'])
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
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)