Пример #1
0
 def test_edit_project_view_with_only_required_fields_job(self):
     """
 Project edit job with only required fields and no availabilites.
 """
     factory = APIRequestFactory()
     project = {
         'name': "Name",
         'details': 'This needs to be big',
         'description': 'This needs to be big',
         'responsible': 'Marjori',
         'phone': '123123',
         'email': '*****@*****.**',
         'skills': [1],
         'causes': [2],
         'job': {
             'start_date': 20140416,
             'end_date': 20140417
         },
         'nonprofit': 1
     }
     n = self.create_nonprofit()
     p = Project(nonprofit=n,
                 name=project['name'],
                 slug="name",
                 details=project['details'])
     p.save()
     project['id'] = p.id
     request = factory.put("/save/project/", {'project': project})
     force_authenticate(request, user=n.user)
     response = views.save_project(request)
     self.assertEqual(response.status_code, status.HTTP_201_CREATED)
Пример #2
0
def create_project(nonprofit, name):
    address = create_address()
    project = Project(nonprofit=nonprofit, name=name, published=True, googleaddress=address)
    project.save()
    work = Work(project=project)
    work.save()
    return project
Пример #3
0
 def test_edit_projec_view_with_changing_roles(self):
     """
 Project edit with deleting and adding new roles.
 """
     project = {
         'name': "Name",
         'details': 'This needs to be big',
         'description': 'This needs to be big',
         'responsible': 'Marjori',
         'phone': '123123',
         'email': '*****@*****.**',
         'skills': [1],
         'causes': [2],
         'job': {
             'start_date': 20140416,
             'end_date': 20140417
         },
         'nonprofit': 1
     }
     factory = APIRequestFactory()
     n = self.create_nonprofit()
     r = Role(name="role name")
     r.save()
     p = Project(nonprofit=n, name='name', slug="name")
     p.save()
     p.roles.add(r)
     project['id'] = p.id
     request = factory.put("/save/project/", {'project': project})
     force_authenticate(request, user=n.user)
     response = views.save_project(request)
     newP = Project.objects.get(id=p.id)
     self.assertEqual(newP.roles.count(), 0)
     self.assertEquals(response.status_code, status.HTTP_201_CREATED)
Пример #4
0
 def test_edit_project_view_with_only_required_fields_job(self):
   """
   Project edit job with only required fields and no availabilites.
   """
   factory = APIRequestFactory()
   project = {
     'name': "Name",
     'details': 'This needs to be big',
     'description': 'This needs to be big',
     'responsible': 'Marjori',
     'phone': '123123',
     'email': '*****@*****.**',
     'skills': [1],
     'causes': [2],
     'job': {
       'start_date': 20140416,
       'end_date': 20140417
     },
     'nonprofit': 1
   }
   n = self.create_nonprofit()
   p = Project(nonprofit=n, name=project['name'], slug="name", details=project['details'])
   p.save()
   project['id'] = p.id
   request = factory.put("/save/project/", {'project': project})
   force_authenticate(request, user=n.user)
   response = views.save_project(request)
   self.assertEqual(response.status_code, status.HTTP_201_CREATED)
Пример #5
0
 def test_edit_projec_view_with_changing_roles(self):
   """
   Project edit with deleting and adding new roles.
   """
   project = {
     'name': "Name",
     'details': 'This needs to be big',
     'description': 'This needs to be big',
     'responsible': 'Marjori',
     'phone': '123123',
     'email': '*****@*****.**',
     'skills': [1],
     'causes': [2],
     'job': {
       'start_date': 20140416,
       'end_date': 20140417
     },
     'nonprofit': 1
   }
   factory = APIRequestFactory()
   n = self.create_nonprofit()
   r = Role(name="role name")
   r.save()
   p = Project(nonprofit=n, name='name', slug="name")
   p.save()
   p.roles.add(r)
   project['id'] = p.id
   request = factory.put("/save/project/", {'project': project})
   force_authenticate(request, user=n.user)
   response = views.save_project(request)
   newP = Project.objects.get(id=p.id)
   self.assertEqual(newP.roles.count(), 0)
   self.assertEquals(response.status_code, status.HTTP_201_CREATED)
Пример #6
0
 def create_project(self):
     u = User(email="*****@*****.**", name="what", slug="hahah")
     u.save()
     n = Nonprofit(user=u, name="hahah")
     n.save()
     from random import randint
     random = randint(1,100)
     project = Project(nonprofit=n, name='name' + str(random))
     project.nonprofit = n
     project.save()
     project.job = Job(start_date=datetime.now().replace(tzinfo=pytz.timezone("America/Sao_Paulo")), end_date=datetime.now().replace(tzinfo=pytz.timezone("America/Sao_Paulo")))
     project.job.save()
     return project
Пример #7
0
 def test_comment_deletion(self):
   """
   Tests Comment deletion.
   """
   u1 = User(email='test', slug='user1')
   u1.save()
   n = Nonprofit(user=u1)
   n.save()
   p = Project(name='Project 1', nonprofit=n)
   p.save()
   u = User(email='*****@*****.**', slug='email')
   u.save()
   c = self.create_comment(p, u, 'Comment nro 1')
   c.save()
   c.delete()
   self.assertTrue(c.deleted)
   self.assertTrue(c.deleted_date)
Пример #8
0
 def test_comment_deletion(self):
     """
 Tests Comment deletion.
 """
     u1 = User(email="test", slug="user1")
     u1.save()
     n = Nonprofit(user=u1)
     n.save()
     p = Project(name="Project 1", nonprofit=n)
     p.save()
     u = User(email="*****@*****.**", slug="email")
     u.save()
     c = self.create_comment(p, u, "Comment nro 1")
     c.save()
     c.delete()
     self.assertTrue(c.deleted)
     self.assertTrue(c.deleted_date)
Пример #9
0
 def test_comment_deletion(self):
   """
   Tests Comment deletion.
   """
   u1 = User(email="test", slug="user1") 
   u1.save()
   n = Nonprofit(user=u1)
   n.save()
   p = Project(name="Project 1", nonprofit=n)
   p.save()
   u = User(email="*****@*****.**", slug="email")
   u.save()
   c = self.create_comment(p, u, "Comment nro 1")
   c.save()
   c.delete()
   self.assertTrue(c.deleted)
   self.assertTrue(c.deleted_date)
Пример #10
0
 def test_comment_creation(self):
   """
   Tests Comment creation.
   """
   u1 = User(email='test', slug='user1')
   u1.save()
   n = Nonprofit(user=u1)
   n.save()
   p = Project(name='Project 1', nonprofit=n)
   p.save()
   u = User(email='*****@*****.**', slug='email')
   u.save()
   c = self.create_comment(p, u, 'Comment nro 1')
   c.save()
   now = datetime.utcnow().replace(tzinfo=pytz.timezone('America/Sao_Paulo'))
   self.assertTrue(isinstance(c, Comment))
   self.assertEqual(c.__unicode__(), '(Project 1) [email protected]: Comment nro 1')
   self.assertTrue(datesAreEqual(c.created_date, now))
Пример #11
0
 def test_comment_creation(self):
   """
   Tests Comment creation.
   """
   u1 = User(email="test", slug="user1") 
   u1.save()
   n = Nonprofit(user=u1)
   n.save()
   p = Project(name="Project 1", nonprofit=n)
   p.save()
   u = User(email="*****@*****.**", slug="email")
   u.save()
   c = self.create_comment(p, u, "Comment nro 1")
   c.save()
   now = datetime.utcnow().replace(tzinfo=pytz.timezone("America/Sao_Paulo"))
   self.assertTrue(isinstance(c, Comment))
   self.assertEqual(c.__unicode__(), "(Project 1) [email protected]: Comment nro 1")
   self.assertTrue(datesAreEqual(c.created_date, now))
Пример #12
0
 def test_comment_creation(self):
     """
 Tests Comment creation.
 """
     u1 = User(email="test", slug="user1")
     u1.save()
     n = Nonprofit(user=u1)
     n.save()
     p = Project(name="Project 1", nonprofit=n)
     p.save()
     u = User(email="*****@*****.**", slug="email")
     u.save()
     c = self.create_comment(p, u, "Comment nro 1")
     c.save()
     now = datetime.utcnow().replace(
         tzinfo=pytz.timezone("America/Sao_Paulo"))
     self.assertTrue(isinstance(c, Comment))
     self.assertEqual(c.__unicode__(),
                      "(Project 1) [email protected]: Comment nro 1")
     self.assertTrue(datesAreEqual(c.created_date, now))
Пример #13
0
 def test_apply_creation(self):
     """
 Tests Apply.
 """
     u = User(name="Voluntario", slug="voluntario")
     u.save()
     v = Volunteer(user=u)
     v.save()
     p = Project(name="Project")
     a = Apply(status=ApplyStatus(), volunteer=v, project=p)
     self.assertTrue(isinstance(a, Apply))
     self.assertEqual(a.__unicode__(), "[False] Voluntario - Project")
Пример #14
0
 def test_edit_project_view_with_changing_roles_one_stays(self):
   """
   Project edit with deleting 1 role but keeping another.
   """
   project = {
     'name': "Name",
     'details': 'This needs to be big',
     'description': 'This needs to be big',
     'responsible': 'Marjori',
     'phone': '123123',
     'email': '*****@*****.**',
     'skills': [{'id': 1}],
     'causes': [{'id': 1}],
     'job': {
       'start_date': 20140416,
       'end_date': 20140417,
       'can_be_done_remotely': True,
     },
     'nonprofit': 1
   }
   factory = APIRequestFactory()
   n = self.create_nonprofit()
   r = Role(name="role name")
   r.save()
   r1 = Role(name="role name 1")
   r1.save()
   p = Project(nonprofit=n, name='name', slug="name")
   p.save()
   p.roles.add(r)
   p.roles.add(r1)
   project['id'] = p.id
   project['roles'] = [{'id': r.id}]
   request = factory.put("/save/project/", {'project': json.dumps(project)})
   force_authenticate(request, user=n.user)
   with transaction.atomic():
     response = views.save_project(request)
   newP = Project.objects.get(id=p.id)
   #self.assertEqual(newP.roles.count(), 1)
   self.assertEquals(response.status_code, status.HTTP_201_CREATED)
Пример #15
0
 def create_project(self):
     u = User(email="*****@*****.**", name="what", slug="hahah")
     u.save()
     n = Nonprofit(user=u, name="hahah")
     n.save()
     from random import randint
     random = randint(1, 100)
     project = Project(nonprofit=n, name='name' + str(random))
     project.nonprofit = n
     project.save()
     project.job = Job(start_date=datetime.now().replace(
         tzinfo=pytz.timezone("America/Sao_Paulo")),
                       end_date=datetime.now().replace(
                           tzinfo=pytz.timezone("America/Sao_Paulo")))
     project.job.save()
     return project
Пример #16
0
def create_project(request, format=None):

    nonprofit = None
    # Need a nonprofit user
    try:
        nonprofit = request.user.nonprofit
    except Exception as e:
        if not request.user.is_staff:
            error = "ERROR - %d - %s" % (sys.exc_traceback.tb_lineno, e)
            return Response({"User not authenticated. " + error}, status.HTTP_403_FORBIDDEN)

    try:
        obj = json.loads(request.DATA["project"])
    except:
        obj = request.DATA["project"]

    project = Project()
    try:
        # Getting required field
        if nonprofit:
            project.nonprofit = nonprofit
        else:
            project.nonprofit = Nonprofit.objects.get(id=obj["nonprofit"])

        project.name = obj["name"]
        project.slug = create_project_slug(project.name)
        project.details = obj["details"]
        project.description = obj["description"]
        project.responsible = obj["responsible"]
        project.phone = obj["phone"]
        project.email = obj["email"]
        project.save()

        skills = obj["skills"]
        for s in skills:
            project.skills.add(Skill.objects.get(id=s))

        causes = obj["causes"]
        for c in causes:
            project.causes.add(Cause.objects.get(id=c))

        if obj.get("work", None):
            work = Work()
            work.project = project
            work.weekly_hours = obj["work"].get("weekly_hours", 0)
            work.can_be_done_remotely = obj["work"].get("can_be_done_remotely", False)
            work.save()

            availabilities = obj["work"].get("availabilities", None)
            if availabilities:
                for a in availabilities:
                    availability = Availability()
                    availability.weekday = a["weekday"]
                    availability.period = a["period"]
                    availability.save()
                    work.availabilities.add(availability)
            work.save()
        elif obj.get("job", None):
            job = Job()
            job.project = project
            job.start_date = datetime.utcfromtimestamp(obj["job"]["start_date"] / 1000).replace(
                tzinfo=pytz.timezone("America/Sao_Paulo")
            )
            job.end_date = datetime.utcfromtimestamp(obj["job"]["end_date"] / 1000).replace(
                tzinfo=pytz.timezone("America/Sao_Paulo")
            )
            job.save()

        has_work = False
        has_job = False
        try:
            project.work
            has_work = True
        except:
            pass
        try:
            project.job
            has_job = True
        except:
            pass

        if not has_job and not has_work:
            return Response({"detail": "Needs to have project or work."}, status.HTTP_400_BAD_REQUEST)

        # Doing not required fields
        try:
            obja = obj.get("address", None)
            if obja:
                address = Address()
                address.addressline = obja.get("addressline", None)
                address.addressline2 = obja.get("addressline2", None)
                address.addressnumber = obja.get("addressnumber", None)
                address.neighborhood = obja.get("neighborhood", None)
                address.zipcode = obja.get("zipcode", None)
                if obja.get("city", None) and obja["city"].get("id", None):
                    address.city = City.objects.get(id=obja["city"]["id"])
                address.save()
                project.address = address
                project.save()

            project.facebook_event = obj.get("facebook_event", None)

            project.image = request.FILES.get("image")
            project.image_small = request.FILES.get("image")
            project.image_medium = request.FILES.get("image")
            project.image_large = request.FILES.get("image")

            roles = obj.get("roles", None)
            if roles:
                for r in roles:
                    role = Role()
                    role.name = r["name"]
                    role.prerequisites = r["prerequisites"]
                    role.details = r["details"]
                    role.vacancies = r["vacancies"]
                    role.save()
                    project.roles.add(role)
        except Exception as e:
            error = "ERROR - %d - %s" % (sys.exc_traceback.tb_lineno, e)
            print error

    except Exception as e:
        error = "ERROR - %d - %s" % (sys.exc_traceback.tb_lineno, e)
        return Response({"detail": error}, status.HTTP_400_BAD_REQUEST)

    project.save()
    return Response({"detail": "Project succesfully created.", "slug": project.slug}, status.HTTP_201_CREATED)
Пример #17
0
 def create_project(self, nonprofit, name):
     project = Project(nonprofit=nonprofit, name=name)
     project.save()
     return project
Пример #18
0
def create_project(request, format=None):
  # Need a nonprofit user
  try:
    request.user.nonprofit
  except Exception as e:
    error = "ERROR - %d - %s" % (sys.exc_traceback.tb_lineno, e)
    return Response({"User not authenticated. " + error}, status.HTTP_403_FORBIDDEN)

  try:
    obj = json.loads(request.DATA['project'])
  except:
    obj = request.DATA['project']

  project = Project()
  try:
    # Getting required field
    project.nonprofit = request.user.nonprofit
    project.name = obj['name']
    project.slug = create_project_slug(project.name)
    project.details = obj['details']
    project.description = obj['description']
    project.responsible = obj['responsible']
    project.phone = obj['phone']
    project.email = obj['email']
    project.save()

    skills = obj['skills']
    for s in skills:
      project.skills.add(Skill.objects.get(id=s))

    causes = obj['causes']
    for c in causes:
      project.causes.add(Cause.objects.get(id=c))

    if obj.get('work', None):
      work =  Work()
      work.project = project
      work.weekly_hours = obj['work'].get('weekly_hours', 0)
      work.can_be_done_remotely = obj['work'].get('can_be_done_remotely', False)
      work.save()

      availabilities = obj['work'].get('availabilities', None)
      if availabilities:
        for a in availabilities:
          availability = Availability()
          availability.weekday = a['weekday']
          availability.period = a['period']
          availability.save()
          work.availabilities.add(availability)
      work.save()
    elif obj.get('job', None):
      job = Job()
      job.project = project
      job.start_date = datetime.utcfromtimestamp(obj['job']['start_date']/1000).replace(tzinfo=pytz.timezone("America/Sao_Paulo"))
      job.end_date = datetime.utcfromtimestamp(obj['job']['end_date']/1000).replace(tzinfo=pytz.timezone("America/Sao_Paulo"))
      job.save()

    has_work = False
    has_job = False
    try:
      project.work
      has_work = True
    except:
      pass
    try:
      project.job
      has_job = True
    except:
      pass

    if not has_job and not has_work:
      return Response({'detail': 'Needs to have project or work.'}, status.HTTP_400_BAD_REQUEST)

    # Doing not required fields
    try:
      project.facebook_event = obj.get('facebook_event', None)
      obja = obj['address']
      project.address = Address()
      project.address.addressline = obja['addressline']
      project.address.addressline2 = obja['addressline2']
      project.address.addressnumber = obja['addressnumber']
      project.address.neighborhood = obja['neighborhood']
      project.address.zipcode = obja['zipcode']
      project.address.city = City.objects.get(id=obja['city']['id'])
      project.address.save()
      project.image = request.FILES.get('image')
      roles = obj['roles']
      for r in roles:
        role = Role()
        role.name = r['name']
        role.prerequisites = r['prerequisites']
        role.details = r['details']
        role.vacancies = r['vacancies']
        role.save()
        project.roles.add(role)
    except:
      pass

    project.save()

  except Exception as e:
    error = "ERROR - %d - %s" % (sys.exc_traceback.tb_lineno, e)
    return Response({'detail': error}, status.HTTP_400_BAD_REQUEST)

  return Response({'detail': 'Project succesfully created.'}, status.HTTP_201_CREATED)
Пример #19
0
 def create_project(self, nonprofit, name):
   project = Project(nonprofit=nonprofit, name=name)
   project.save()
   return project