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)
예제 #7
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")
예제 #8
0
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")
예제 #9
0
 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
예제 #10
0
 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")