def test_import(self): """Tests the importing of a batch of FB pages as Places""" mgr = PageImportManager() pid_notice_pairs = [ ("84714961156", None), # Square Cafe ("139288502700", TypeError), # Pgh Marathon (no location) ("291107654260858", TypeError), # event page ("9423481220941280", FacebookAPIError), # bogus id ("53379078585", PageImportReport.ModelInstanceExists), # big dog ] random.shuffle(pid_notice_pairs) # grab original FB records from any pages that already exist original_fb_records = {} for pid, notice in pid_notice_pairs: if notice is PageImportReport.ModelInstanceExists: original_fb_records[pid] = ExternalPlaceSource.facebook.get(uid=pid) pids = [pair[0] for pair in pid_notice_pairs] # run insertion code mgr.pull_page_info(pids) # cache pages results = [mgr.import_place(pid) for pid in pids] self.assertEquals( [result.page_id for result in results], [pid for pid, _ in pid_notice_pairs], "non-parallel list of PageImportReports returned", ) for pair, result in zip(pid_notice_pairs, results): pid, expected_notice = pair if not expected_notice: self.assertEquals([], result.notices) # assert a new model instance was created and it's FB record matches what was returned try: place = ExternalPlaceSource.facebook.get(uid=pid).place except ExternalPlaceSource.DoesNotExist: self.fail("No place record for fbid %s" % pid) if place != result.model_instance: self.fail("No place created for fbid %s" % pid) else: # assert no model instance is returned self.assertIsNone(result.model_instance) # assert expected notice was generated self.assertEquals(len(result.notices), 1) self.assertTrue( isinstance(result.notices[0], expected_notice), "Expecting notice %s from importing fb page %s" % (str(expected_notice), pid), ) # if notice was a ModelInstanceExists, be sure the original record wasn't touched if expected_notice is PageImportReport.ModelInstanceExists: self.assertEquals(original_fb_records[pid], ExternalPlaceSource.facebook.get(uid=pid)) # otherwise, make sure no record was created at all else: with self.assertRaises(ExternalPlaceSource.DoesNotExist): ExternalPlaceSource.facebook.get(uid=pid)
def test_import_no_owner(self): """Tests the importing of a batch of FB pages as Places without owner importing disabled.""" no_owner_stored = "84714961156" # sqaure cafe (org and place not in fixture) owner_stored = "50141015898" # voluto coffee (org in fixture but not place) before_orgs = list(Organization.objects.all()) before_records = list(FacebookOrgRecord.objects.all()) mgr = PageImportManager() # ensure no org is created result = mgr.import_place(no_owner_stored, import_owners=False) self.assertIsNone(result.model_instance.owner) # ensure the existing org is found, even without import result = mgr.import_place(owner_stored, import_owners=False) self.assertIsNotNone(result.model_instance) self.assertEquals(result.model_instance.owner, FacebookOrgRecord.objects.get(fb_id=owner_stored).organization) # double check that the Organization and FacebookOrgRecord tables weren't touched self.assertEquals(before_orgs, list(Organization.objects.all())) self.assertEquals(before_records, list(FacebookOrgRecord.objects.all()))