Exemplo n.º 1
0
 def setUp(self):
     self.tag = Tag(name='test')
     self.tag.save()
     self.user = User.objects.create_user(username='******', email='*****@*****.**')
     self.user.save()
     self.petition = Petition(title='test petition', description='This is a test petition', author=self.user,created_at=timezone.now(),status=1, expires=timezone.now()+timedelta(days=30))
     self.petition.save()
     self.user.profile.petitions_signed.add(self.petition)
Exemplo n.º 2
0
    def test_petition_add_tag(self):
        self.client.force_login(self.superUser)
        tag = Tag(name='test tag2')
        tag.save()
        obj = {"attribute": "add-tag", "value": tag.id}

        response = self.client.post(
            '/petition/update/' + str(self.petition.id), obj)
        self.assertNotEqual(response.status_code, 404)

        pet = Petition.objects.get(pk=self.petition.id)
        if tag not in pet.tags.all():
            self.fail("tag not added")
Exemplo n.º 3
0
async def test_websocket_consumer_get(django_user_model):
    username = '******'
    email = '*****@*****.**'
    password = '******'
    django_user_model.objects.create(username=username,
                                     password=password,
                                     email=email)

    user = django_user_model.objects.get(username=username)

    Profile.objects.all().delete()
    Profile.objects.create(user=user,
                           full_name=username,
                           notifications=Notifications.objects.create())
    # Remove all petitions
    Petition.objects.all().delete()

    # Create Tag
    tag = Tag(name='TestTag')
    tag.save()

    pet = Petition(title='Test petition',
                   description='This is a test petition',
                   author=user,
                   created_at=timezone.now(),
                   status=0,
                   expires=timezone.now() + timedelta(days=30))
    pet.save()
    pet.tags.add(tag)
    pet.save()

    communicator = AuthWebsocketCommunicator(PetitionConsumer,
                                             "/ws/",
                                             user=user)

    connected, subprotocol = await communicator.connect()

    assert connected

    await communicator.send_json_to({"command": "get", "id": 45})
    response = await communicator.receive_json_from()
    assert response == {"command": "get", "petition": False}
    """
    dump = serialize_petitions([pet], user)
    await communicator.send_json_to({"command": "get", "id": pet.id})

    response = await communicator.receive_json_from()
    assert response == {"command": "get", "petition": dump}
    """
    await communicator.disconnect()
Exemplo n.º 4
0
    def generate_tags(self):
        taglst = []
        self.stdout.write('Generating Tag objects')
        try:
            with transaction.atomic():
                for tag in self.tag_names:
                    tag_obj = Tag(name=tag)
                    tag_obj.save()
                    taglst.append(tag_obj)

            self.stdout.write(
                self.style.SUCCESS('Successfully created Tag objects'))
            return taglst
        except Exception as e:
            self.stdout.write(
                self.style.ERROR('Failed to create Tag objects\n %s' % e))
            return None
Exemplo n.º 5
0
class EmailTests(TestCase):
    def setUp(self):
        self.tag = Tag(name='test')
        self.tag.save()
        self.user = User.objects.create_user(username='******', email='*****@*****.**')
        self.user.save()
        self.petition = Petition(title='test petition', description='This is a test petition', author=self.user,created_at=timezone.now(),status=1, expires=timezone.now()+timedelta(days=30))
        self.petition.save()
        self.user.profile.petitions_signed.add(self.petition)

    def test_petition_approved(self):
        petition_approved(self.petition.id, 'test_path')

        self.assertEqual(len(mail.outbox), 1)
        self.assertEqual(mail.outbox[0].subject, EmailTitles.Petition_Approved)

    def test_petition_rejected(self):
        petition_rejected(self.petition.id, 'test_path')

        self.assertEqual(len(mail.outbox), 1)
        self.assertEqual(mail.outbox[0].subject, EmailTitles.Petition_Rejected)

    def test_petition_update(self):
        petition_update(self.petition.id, 'test_path')

        self.assertEqual(len(mail.outbox), 1)
        self.assertEqual(mail.outbox[0].subject, EmailTitles.Petition_Update)

    def test_petition_reached(self):
        petition_reached(self.petition.id, 'test_path')

        self.assertEqual(len(mail.outbox), 1)
        self.assertEqual(mail.outbox[0].subject, EmailTitles.Petition_Reached)

    def test_petition_received(self):
        petition_received(self.petition.id, 'test_path')

        self.assertEqual(len(mail.outbox), 1)
        self.assertEqual(mail.outbox[0].subject, 'PawPrints - Petition received')

    def test_petition_needs_approval(self):
        petition_needs_approval(self.petition.id, 'test_path')

        self.assertEqual(len(mail.outbox), 1)
        self.assertEqual(mail.outbox[0].subject, EmailTitles.Petition_Needs_Approval)
Exemplo n.º 6
0
 def test_petition_publish(self):
     self.client.force_login(self.user)
     tag = Tag(name='test tag')
     tag.save()
     obj = {"attribute": "publish", "value": "foo"}
     self.petition.status = 0
     self.petition.tags.add(tag)
     self.petition.save()
     request = self.factory.post(
         '/petition/update/' + str(self.petition.id), obj)
     request.META['HTTP_HOST'] = 'localhost'
     request.user = self.user
     response = petition_edit(request, self.petition.id)
     # Make sure there is no 404
     self.assertNotEqual(response.status_code, 404)
     # Check that petition was published
     pet = Petition.objects.get(pk=self.petition.id)
     self.assertEqual(pet.status, 1)
Exemplo n.º 7
0
 def setUp(self):
     self.client = Client()
     self.factory = RequestFactory()
     self.superUser = User.objects.create_user(username='******',
                                               email='txu1267',
                                               is_staff=True)
     self.superUser.set_password('test')
     self.superUser.save()
     self.superUser2 = User.objects.create_user(username='******',
                                                email='txu1266',
                                                is_superuser=True)
     self.superUser2.set_password('test')
     self.superUser2.save()
     self.user = User.objects.create_user(username='******',
                                          email='axu7254')
     self.user2 = User.objects.create_user(username='******',
                                           email='cxl1234')
     self.user3 = User.objects.create_user(username='******',
                                           email='abc4321')
     self.tag = Tag(name='Test')
     self.tag.save()
     self.petition = Petition(title='Test petition',
                              description='This is a test petition',
                              author=self.user,
                              created_at=timezone.now(),
                              status=0,
                              expires=timezone.now() + timedelta(days=30))
     self.petition.save()
     self.petition.tags.add(self.tag)
     self.petitionPublished = Petition(
         title='Test petition Published',
         description='This is a test petition Published',
         author=self.user2,
         created_at=timezone.now(),
         status=1,
         expires=timezone.now() + timedelta(days=30))
     self.petitionPublished.save()
Exemplo n.º 8
0
    def handle(self, *args, **options):
        CONFIG = settings.CONFIG
        tags = CONFIG['tags']

        num_tags = len(tags)
        if num_tags == 0:
            raise CommandError("No tags specified in config.yml")

        self.stdout.write('Generating %d Tag objects' % num_tags)
        try:
            with transaction.atomic():
                for tag in tags:
                    name = tag['name']
                    if name == "":
                        raise CommandError("Empty Tag found.")

                    tag_obj = Tag(name=name)
                    tag_obj.save()
        except:
            self.stdout.write(
                self.style.ERROR('Failed to create Tag objects.'))
            return
        self.stdout.write(
            self.style.SUCCESS('Successfully created Tag objects'))
Exemplo n.º 9
0
class PetitionTest(TestCase):
    def setUp(self):
        self.client = Client()
        self.factory = RequestFactory()
        self.superUser = User.objects.create_user(username='******',
                                                  email='txu1267',
                                                  is_staff=True)
        self.superUser.set_password('test')
        self.superUser.save()
        self.superUser2 = User.objects.create_user(username='******',
                                                   email='txu1266',
                                                   is_superuser=True)
        self.superUser2.set_password('test')
        self.superUser2.save()
        self.user = User.objects.create_user(username='******',
                                             email='axu7254')
        self.user2 = User.objects.create_user(username='******',
                                              email='cxl1234')
        self.user3 = User.objects.create_user(username='******',
                                              email='abc4321')
        self.tag = Tag(name='Test')
        self.tag.save()
        self.petition = Petition(title='Test petition',
                                 description='This is a test petition',
                                 author=self.user,
                                 created_at=timezone.now(),
                                 status=0,
                                 expires=timezone.now() + timedelta(days=30))
        self.petition.save()
        self.petition.tags.add(self.tag)
        self.petitionPublished = Petition(
            title='Test petition Published',
            description='This is a test petition Published',
            author=self.user2,
            created_at=timezone.now(),
            status=1,
            expires=timezone.now() + timedelta(days=30))
        self.petitionPublished.save()

    def test_about_page(self):
        response = self.client.get('/about/')
        assert response.status_code == 200
        self.assertTemplateUsed(response, 'about.html')

    def test_maintenance_page(self):
        response = self.client.get('/maintenance/')
        assert response.status_code == 200
        self.assertTemplateUsed(response, 'Something_Special.html')

    def test_index_page(self):
        response = self.client.get('/')
        self.assertEqual(response.status_code, 200)
        self.assertTemplateUsed(response, 'index.html')

    def test_404(self):
        response = self.client.get('/doesnotexist')
        self.assertEqual(response.status_code, 404)
        self.assertTemplateUsed(response, '404.html')

    def test_petition_edit(self):
        self.client.force_login(self.superUser)
        # Change petition title to 'New'
        obj = {"attribute": "title", "value": "New"}
        response = self.client.post(
            '/petition/update/' + str(self.petition.id), obj)
        # Check that it doesn't 404
        self.assertNotEqual(response.status_code, 404)
        # Check that petition was actually changed
        pet = Petition.objects.get(pk=self.petition.id)
        self.assertEqual(pet.title, 'New')

    def test_petition_publish(self):
        self.client.force_login(self.user)
        tag = Tag(name='test tag')
        tag.save()
        obj = {"attribute": "publish", "value": "foo"}
        self.petition.status = 0
        self.petition.tags.add(tag)
        self.petition.save()
        request = self.factory.post(
            '/petition/update/' + str(self.petition.id), obj)
        request.META['HTTP_HOST'] = 'localhost'
        request.user = self.user
        response = petition_edit(request, self.petition.id)
        # Make sure there is no 404
        self.assertNotEqual(response.status_code, 404)
        # Check that petition was published
        pet = Petition.objects.get(pk=self.petition.id)
        self.assertEqual(pet.status, 1)

    def test_sign_petition(self):
        self.client.force_login(self.superUser)
        response = self.client.post(
            '/petition/sign/' + str(self.petitionPublished.id),
            {'test': 'test'})
        pet = Petition.objects.get(pk=self.petitionPublished.id)
        self.assertEqual(pet.signatures, 1)
        self.assertEqual(response.status_code, 200)

    def test_petition_subscribe(self):
        self.client.force_login(self.user)
        user = User.objects.get(pk=self.user.id)
        self.assertEqual(
            user.profile.subscriptions.filter(pk=self.petition.id).exists(),
            False)
        response = self.client.post(
            '/petition/subscribe/' + str(self.petition.id), {})
        user = User.objects.get(pk=self.user.id)

        self.assertEqual(
            user.profile.subscriptions.filter(pk=self.petition.id).exists(),
            True)

    def test_petition_unsubscribe(self):
        self.client.force_login(self.user)
        user = User.objects.get(pk=self.user.id)
        self.assertEqual(
            user.profile.subscriptions.filter(pk=self.petition.id).exists(),
            False)
        response = self.client.post(
            '/petition/subscribe/' + str(self.petition.id), {})
        user = User.objects.get(pk=self.user.id)

        self.assertEqual(
            user.profile.subscriptions.filter(pk=self.petition.id).exists(),
            True)

        response = self.client.post(
            '/petition/unsubscribe/' + str(self.petition.id), {})
        user = User.objects.get(pk=self.user.id)

        self.assertEqual(
            user.profile.subscriptions.filter(pk=self.petition.id).exists(),
            False)

    def test_petition_unpublish(self):
        self.client.force_login(self.superUser)
        response = self.client.post('/petition/unpublish/' +
                                    str(self.petition.id))
        self.assertEqual(response.status_code, 200)
        pet = Petition.objects.get(pk=self.petition.id)
        self.assertEqual(pet.status, 2)

        # Test using not super user
        self.client.force_login(self.user)
        pet.status = 1
        pet.save()
        response = self.client.post('/petition/unpublish/' +
                                    str(self.petition.id))
        pet = Petition.objects.get(pk=self.petition.id)
        self.assertEqual(pet.status, 1)

    def test_petition_page(self):
        response = self.client.get('/petition/' + str(self.petition.id))
        self.assertEqual(response.status_code, 200)

    def test_url_redirect_fail(self):
        self.client.force_login(self.user)
        response = self.client.get('/petition/' + str(666))
        self.assertEqual(response.status_code, 404)

    def test_create_petition(self):
        self.client.force_login(self.user)
        response = self.client.post('/petition/create/')
        self.assertEqual(response.status_code, 200)
        userobj = User.objects.get(pk=self.user.id)
        self.assertEqual(userobj.profile.petitions_signed.all()[0].title,
                         PETITION_DEFAULT_TITLE)

    def test_check_edit(self):
        self.client.force_login(self.user)
        self.assertEqual(edit_check(self.user, self.petition), True)
        self.assertEqual(edit_check(self.superUser, self.petition), True)
        self.assertEqual(edit_check(self.superUser2, self.petition), False)
        self.assertEqual(edit_check(self.user2, self.petition), False)

    def test_serialize_petitions(self):
        petitions = Petition.objects.all()
        json_response = serialize_petitions(petitions)
        # TODO: Improve this test to be more thorough
        self.assertNotEqual(json_response, None)

    def test_url_redirect(self):
        self.client.force_login(self.user)
        response = self.client.get('/petitions/' + str(self.petition.id))
        self.assertEqual(response.status_code, 302)
        self.assertRedirects(response,
                             '/?p=' + str(self.petition.id),
                             status_code=302,
                             target_status_code=200)

    def test_edit_petition_description(self):
        self.client.force_login(self.superUser)
        obj = {"attribute": "description", "value": "test test test"}
        response = self.client.post(
            '/petition/update/' + str(self.petition.id), obj)
        self.assertNotEqual(response.status_code, 404)

        pet = Petition.objects.get(pk=self.petition.id)
        self.assertEqual(pet.description, "test test test")

    def test_petition_add_tag(self):
        self.client.force_login(self.superUser)
        tag = Tag(name='test tag2')
        tag.save()
        obj = {"attribute": "add-tag", "value": tag.id}

        response = self.client.post(
            '/petition/update/' + str(self.petition.id), obj)
        self.assertNotEqual(response.status_code, 404)

        pet = Petition.objects.get(pk=self.petition.id)
        if tag not in pet.tags.all():
            self.fail("tag not added")

    def test_petition_remove_tag(self):
        self.client.force_login(self.superUser)
        tag = Tag(name='test tag2')
        tag.save()
        self.petition.tags.add(tag)
        self.petition.save()
        obj = {"attribute": "remove-tag", "value": tag.id}

        response = self.client.post(
            '/petition/update/' + str(self.petition.id), obj)
        self.assertNotEqual(response.status_code, 404)

        pet = Petition.objects.get(pk=self.petition.id)
        if tag in pet.tags.all():
            self.fail("tag not removed")

    def test_petition_add_update(self):
        self.client.force_login(self.superUser)
        obj = {"attribute": "add_update", "value": "test update"}

        request = self.factory.post(
            '/petition/update/' + str(self.petition.id), obj)
        request.user = self.superUser
        request.META['HTTP_HOST'] = "random"
        response = petition_edit(request, self.petition.id)
        self.assertNotEqual(response.status_code, 404)

        pet = Petition.objects.get(pk=self.petition.id)
        fail = True
        for update in pet.updates.all():
            value = update.description
            if value == "test update":
                fail = False
        if fail:
            self.fail("did not add update")

    def test_petition_add_response(self):
        self.client.force_login(self.superUser)
        obj = {"attribute": "response", "value": "test response"}

        request = self.factory.post(
            '/petition/update/' + str(self.petition.id), obj)
        request.user = self.superUser
        request.META['HTTP_HOST'] = "random"
        response = petition_edit(request, self.petition.id)

        self.assertNotEqual(response.status_code, 404)

        pet = Petition.objects.get(pk=self.petition.id)
        if pet.response.description != "test response":
            self.fail()

    def test_petition_mark_work_in_progress(self):
        self.client.force_login(self.superUser)
        obj = {"attribute": "mark-in-progress"}
        self.assertEqual(self.petitionPublished.in_progress, None)

        response = self.client.post(
            '/petition/update/' + str(self.petitionPublished.id), obj)

        self.assertNotEqual(response.status_code, 404)

        pet = Petition.objects.get(pk=self.petitionPublished.id)
        self.assertEqual(pet.in_progress, True)

    def test_petition_unpublish_progress(self):
        self.client.force_login(self.superUser)
        obj = {"attribute": "unpublish"}
        self.assertEqual(self.petitionPublished.status, 1)
        request = self.factory.post(
            '/petition/update/' + str(self.petitionPublished.id), obj)
        request.user = self.superUser
        request.META['HTTP_HOST'] = "random"
        response = petition_edit(request, self.petitionPublished.id)
        self.assertNotEqual(response.status_code, 404)

        pet = Petition.objects.get(pk=self.petitionPublished.id)
        self.assertEqual(pet.status, 2)

    def test_get_petition(self):
        self.client.force_login(self.superUser)
        petition = get_petition(self.petition.id, self.user)
        self.assertEqual(petition, self.petition)

    def test_get_petition_fail(self):
        self.client.force_login(self.superUser)
        petition = get_petition(self.petition.id, self.user2)
        self.assertEqual(petition, False)

    def test_petition_str(self):
        assert str(self.petition) == self.petition.title

    def test_tag_str(self):
        assert str(self.tag) == self.tag.name

    def test_response_str(self):
        resp = Response.objects.create(description='Response',
                                       created_at=timezone.now(),
                                       author='Test Author')
        assert str(resp) == 'Test Author'