def setUp(self): self.user = User.objects.create_user(email="*****@*****.**", password="******", object_channel="default") self.second_user = User.objects.create_user( email="*****@*****.**", password="******", object_channel="default") self.third_user = User.objects.create_user( email="*****@*****.**", password="******", object_channel="default") organization = Organization(name="test", type=0, owner=self.user) organization.save(object_channel="default") organization.members.add(self.second_user) address = GoogleAddress(typed_address="Rua. Teçaindá, 81") address.save(object_channel="default") self.project = Project.objects.create(name="test project", slug="test slug", details="abc", description="abc", owner=self.user, hidden_address=True, address=address, organization=organization, object_channel="default") self.request = RequestFactory().get('/') self.request.channel = "default"
def test_api_call(self): """Assert GoogleAddress calls google API and get address""" a = GoogleAddress(typed_address="Rua Teçaindá, 81, SP", typed_address2="Casa") a.save(object_channel="default") a = GoogleAddress.objects.get(pk=a.pk) self.assertTrue(a.typed_address == "Rua Teçaindá, 81, SP") self.assertTrue(a.typed_address2 == "Casa") self.assertTrue(a.address_line == "Rua Teçaindá, 81, Pinheiros, São Paulo, SP, Brazil") self.assertTrue(a.__str__() == "Rua Teçaindá, 81, Pinheiros, São Paulo, SP, Brazil") self.assertTrue(a.lat) self.assertTrue(a.lng) a.typed_address = "Rua Capote Valente, 701, SP" a.save() a = GoogleAddress.objects.get(pk=a.pk) self.assertTrue(a.typed_address == "Rua Capote Valente, 701, SP") self.assertTrue(a.typed_address2 == "Casa") self.assertTrue( a.address_line == "Rua Capote Valente, 701, Pinheiros, São Paulo, SP, Brazil") self.assertTrue(a.__str__( ) == "Rua Capote Valente, 701, Pinheiros, São Paulo, SP, Brazil") self.assertTrue(a.lat) self.assertTrue(a.lng) a.address_line = None a.typed_address = 'Rua Teste' self.assertTrue(a.__str__() == "Rua Teste")
class AddressTestCase(TestCase): """ RealTimeSignalProcessor handles updates to a index tied to a model We need to be able to detect changes to a model a rebuild another index, such as detecting changes to GoogleAddress and updating the index for projects and organizations. This is what this class tests. """ def setUp(self): call_command('clear_index', '--noinput', verbosity=0) self.user = User.objects.create_user(email="*****@*****.**", password="******", object_channel="default") self.address1 = GoogleAddress(typed_address="São paulo, SP - Brazil") self.address1.save(object_channel="default") def test_project_index_on_address_update(self): """ Test project index gets reindexed if address changes """ self.assertTrue(SearchQuerySet().models(Project).all().count() == 0) project = Project.objects.create(name="test project", slug="test-slug", details="abc", description="abc", owner=self.user, address=self.address1, published=True, object_channel="default") self.assertTrue(SearchQuerySet().models(Project).all().count() == 1) self.assertTrue(SearchQuerySet().models(Project).filter(address_components__exact=whoosh_raw("São Paulo-administrative_area_level_2")).count() == 1) project.address.typed_address = "Campinas, SP - Brazil" project.address.save() self.assertTrue(SearchQuerySet().models(Project).all().count() == 1) self.assertTrue(SearchQuerySet().models(Project).filter(address_components__exact=whoosh_raw("Campinas-administrative_area_level_2")).count() == 1) project.address.delete() self.assertTrue(SearchQuerySet().models(Project).all().count() == 0) self.assertTrue(SearchQuerySet().models(Project).filter(address_components__exact=whoosh_raw("Campinas-administrative_area_level_2")).count() == 0) def test_organization_index_on_address_update(self): """ Test organization index gets reindexed if address changes """ self.assertTrue(SearchQuerySet().models(Organization).all().count() == 0) organization = Organization(name="test organization", details="abc", owner=self.user, address=self.address1, published=True, type=0) organization.save(object_channel="default") self.assertTrue(SearchQuerySet().models(Organization).all().count() == 1) self.assertTrue(SearchQuerySet().models(Organization).filter(address_components__exact=whoosh_raw("São Paulo-administrative_area_level_2")).count() == 1) organization.address.typed_address = "Campinas, SP - Brazil" organization.address.save() self.assertTrue(SearchQuerySet().models(Organization).all().count() == 1) self.assertTrue(SearchQuerySet().models(Organization).filter(address_components__exact=whoosh_raw("Campinas-administrative_area_level_2")).count() == 1) organization.address.delete() self.assertTrue(SearchQuerySet().models(Organization).all().count() == 0) self.assertTrue(SearchQuerySet().models(Organization).filter(address_components__exact=whoosh_raw("Campinas-administrative_area_level_2")).count() == 0)
def test_locality(self): """Assert GoogleAddressModel.get_city_state preference order is locality, administrative_area_2""" a = GoogleAddress(typed_address="Chicago") a.save(object_channel="default") self.assertTrue("Chicago" in a.get_city_state()) a = remove_component(a, ['locality']) self.assertTrue("Cook" in a.get_city_state())
class ProjectIndexTestCase(TestCase): def setUp(self): call_command('clear_index', '--noinput', verbosity=0) self.user = User.objects.create_user(email="*****@*****.**", password="******", object_channel="default") self.address1 = GoogleAddress(typed_address="São paulo, SP - Brazil") self.address1.save(object_channel="default") self.address2 = GoogleAddress(typed_address="Campinas, SP - Brazil") self.address2.save(object_channel="default") def test_index_on_create_and_update(self): """ Test project index gets updated when a project is created or updated """ self.assertTrue(SearchQuerySet().models(Project).all().count() == 0) project = Project.objects.create(name="test project", slug="test-slug", details="abc", description="abc", owner=self.user, address=self.address1, published=True, object_channel="default") self.assertTrue(SearchQuerySet().models(Project).all().count() == 1) self.assertTrue(SearchQuerySet().models(Project).filter(address_components__exact=whoosh_raw("São Paulo-administrative_area_level_2")).count() == 1) project.address = self.address2 project.save() self.assertTrue(SearchQuerySet().models(Project).all().count() == 1) self.assertTrue(SearchQuerySet().models(Project).filter(address_components__exact=whoosh_raw("Campinas-administrative_area_level_2")).count() == 1) def test_index_on_causes_update(self): """ Test project index gets updated when a cause is modified """ cause = Cause.objects.all().order_by('pk')[0] project = Project.objects.create(name="test project", slug="test-slug", details="abc", description="abc", owner=self.user, address=self.address1, published=True, object_channel="default") self.assertTrue(SearchQuerySet().models(Project).filter(causes=cause.pk).count() == 0) project.causes.add(cause) self.assertTrue(SearchQuerySet().models(Project).filter(causes=cause.pk).count() == 1) def test_index_on_skill_update(self): """ Test project index gets updated when a skill is modified """ skill = Skill.objects.all().order_by('pk')[0] project = Project.objects.create(name="test project", slug="test-slug", details="abc", description="abc", owner=self.user, address=self.address1, published=True, object_channel="default") self.assertTrue(SearchQuerySet().models(Project).filter(skills=skill.pk).count() == 0) project.skills.add(skill) self.assertTrue(SearchQuerySet().models(Project).filter(skills=skill.pk).count() == 1)
class DisponibilityTestCase(TestCase): def setUp(self): call_command('clear_index', '--noinput', verbosity=0) self.user = User.objects.create_user(email="*****@*****.**", password="******", object_channel="default") self.address1 = GoogleAddress(typed_address="São paulo, SP - Brazil") self.address1.save(object_channel="default") self.address2 = GoogleAddress(typed_address="São paulo, SP - Brazil") self.address2.save(object_channel="default") def test_disponibility_save_and_deletion_updates_index(self): """ Test creating and deleting Job or Work updates Project index """ self.assertTrue(SearchQuerySet().models(Project).all().count() == 0) project = Project.objects.create(name="test project", slug="test-slug", details="abc", description="abc", owner=self.user, address=self.address1, published=True, object_channel="default") project2 = Project.objects.create(name="test project", slug="test-slug", details="abc", description="abc", owner=self.user, address=self.address2, published=True, object_channel="default") job = Job(can_be_done_remotely=True, project=project) job.save(object_channel="default") work = Work(can_be_done_remotely=True, project=project2) work.save(object_channel="default") self.assertTrue(SearchQuerySet().models(Project).all().count() == 2) self.assertTrue(SearchQuerySet().models(Project).filter(can_be_done_remotely=True).count() == 2) job.delete() work.delete() self.assertTrue(SearchQuerySet().models(Project).all().count() == 0) self.assertTrue(SearchQuerySet().models(Project).filter(can_be_done_remotely=True).count() == 0)
def create_sample_projects(): # Create sample projects user1 = User.objects.create_user(name="a", email="*****@*****.**", password="******", object_channel="default") user2 = User.objects.create_user(name="a", email="*****@*****.**", password="******", object_channel="test-channel") category1 = Category.objects.create(name="cat1", slug="cat1", object_channel="default") category2 = Category.objects.create(name="cat2", slug="cat2", object_channel="default") address1 = GoogleAddress(typed_address="São paulo, SP - Brazil") address2 = GoogleAddress(typed_address="Campinas, SP - Brazil") address3 = GoogleAddress( typed_address="New york, New york - United States") address4 = GoogleAddress( typed_address="New york, New york - United States") address5 = GoogleAddress( typed_address="New york, New york - United States") address6 = GoogleAddress( typed_address="New york, New york - United States") address1.save(object_channel="default") address2.save(object_channel="default") address3.save(object_channel="default") address4.save(object_channel="default") address5.save(object_channel="default") address6.save(object_channel="test-channel") project = Project(name="test project", slug="test-slug", details="abc", description="abc", owner=user1, address=address1, published=True) project.save(object_channel="default") project.causes.add(Cause.objects.get(pk=1)) project.skills.add(Skill.objects.get(pk=1)) project.skills.add(Skill.objects.get(pk=4)) project.categories.add(category1) work = Work(can_be_done_remotely=False, project=project, weekly_hours=0) work.save(object_channel="default") project = Project(name="test project2", slug="test-slug2", details="abc", description="abc", owner=user1, address=address2, highlighted=True, published=True) project.save(object_channel="default") project.causes.add(Cause.objects.get(pk=2)) project.categories.add(category2) date = datetime.strptime('2017-09-11 00:00:00', '%Y-%m-%d %H:%M:%S') date = date.replace(tzinfo=pytz.UTC) job = Job(can_be_done_remotely=True, project=project, start_date=date) job.save(object_channel="default") project = Project(name="test project3", slug="test-slug3", details="abc", description="abc", owner=user1, address=address3, published=True) project.save(object_channel="default") project.skills.add(Skill.objects.get(pk=2)) project.causes.add(Cause.objects.get(pk=3)) job = Job(can_be_done_remotely=True, project=project) job.save(object_channel="default") project = Project(name="test project4", slug="test-slug4", details="abc", description="abc", owner=user1, address=address4, published=False) project.save(object_channel="default") project = Project(name="test project5", slug="test-slug5", details="abc", description="abc", owner=user1, address=address5, published=True, closed=True) project.save(object_channel="default") project = Project(name="test project6", slug="test-slug6", details="abc", description="abc", owner=user2, address=address6, published=True) project.save(object_channel="test-channel")
def create_sample_organizations(): user1 = User.objects.create_user(name="z", email="*****@*****.**", password="******", object_channel="default") user2 = User.objects.create_user(name="a", email="*****@*****.**", password="******", object_channel="test-channel") address1 = GoogleAddress(typed_address="São paulo, SP - Brazil") address2 = GoogleAddress(typed_address="Santo André, SP - Brazil") address3 = GoogleAddress( typed_address="New york, New york - United States") address4 = GoogleAddress( typed_address="New york, New york - United States") address5 = GoogleAddress( typed_address="New york, New york - United States") address1.save(object_channel="default") address2.save(object_channel="default") address3.save(object_channel="default") address4.save(object_channel="default") address5.save(object_channel="test-channel") organization = Organization(name="test organization", details="abc", owner=user1, address=address1, published=True, type=0) organization.save(object_channel="default") organization.causes.add(Cause.objects.all().order_by('pk')[0]) organization = Organization(name="test organization2", details="abc", owner=user1, address=address2, published=True, highlighted=True, type=0) organization.save(object_channel="default") organization.causes.add(Cause.objects.all().order_by('pk')[1]) organization = Organization(name="test organization3", details="abc", owner=user1, address=address3, published=True, type=0) organization.save(object_channel="default") organization = Organization(name="test organization4", details="abc", owner=user1, address=address4, published=False, type=0) organization.save(object_channel="default") organization = Organization(name="test organization5", details="abc", owner=user2, address=address5, published=True, type=0) organization.save(object_channel="test-channel")
def _create_address(self, address_data: dict) -> GoogleAddress: logging.debug(f'Creating address {address_data["typed_address"]}') address = GoogleAddress(**address_data) if not self.dry_run: address.save(object_channel="gdd") return address
def test_google_address(self): """ Assert google addresses are saved on the correct channel """ a = GoogleAddress(typed_address="Rua Teçaindá, 81, SP", typed_address2="Casa") a.save(object_channel="test-channel")