コード例 #1
0
ファイル: uitests.py プロジェクト: azavea/nyc-trees
    def setUp(self):
        super(EventTestCase, self).setUp()

        # Group admin
        self.user = User(username='******',
                         email='*****@*****.**',
                         first_name='Turanga',
                         last_name='Leela')
        self.user.set_password('password')
        self.user.clean_and_save()

        # Non-Group admin
        self.nonadmin_user = User(username='******',
                                  email='*****@*****.**',
                                  first_name='Zapp',
                                  last_name='Brannigan')
        self.nonadmin_user.set_password('password')
        self.nonadmin_user.clean_and_save()

        self.group = Group.objects.create(
            name='Planet Express',
            slug='planet-express',
            description='A simple delivery company',
            contact_name='Professor Farnseworth',
            contact_email='*****@*****.**',
            contact_url='https://planetexpress.nyc',
            admin=self.user
        )
コード例 #2
0
ファイル: uitests.py プロジェクト: pilgrimish/nyc-trees
    def _get_or_create_user(self):
        if User.objects.filter(username=self.username).exists():
            return User.objects.get(username=self.username)

        user = User(username=self.username, email=self.email)
        user.set_password(self.password)
        user.save()
        return user
コード例 #3
0
def user_can_edit(*, user: User, amendment: models.Amendment) -> bool:
    """Determine if a user can edit (or delete) an amendment, given their rights and its status"""
    return (
        user.has_perm('amendment.edit_finance')
        or user.has_perm('amendment.approve')
        and user.username == amendment.approver
        and amendment.status_id in (models.AmendmentStatuses.RAISED, models.AmendmentStatuses.APPROVED)
        or user.username == amendment.requested_by
        and amendment.status_id == models.AmendmentStatuses.RAISED
    )
コード例 #4
0
 def user_can_edit(self, user: User) -> bool:
     """Checks if a user has edit (and delete) permissions on the object"""
     if self.status_id == Statuses.RAISED:
         return user.has_perm(
             'tutor_payment.raise') and self.raised_by == user
     if self.status_id == Statuses.APPROVED:
         return user.has_perm('tutor_payment.approve')
     if self.status_id == Statuses.TRANSFERRED:
         return user.has_perm('tutor_payment.transfer')
     return False
コード例 #5
0
ファイル: tests.py プロジェクト: azavea/nyc-trees
    def test_email_uniqueness(self):
        guy = User(username='******', email='*****@*****.**')
        guy.set_password('password')
        guy.save()

        gal = User(username='******', email='*****@*****.**')
        gal.set_password('password')

        with self.assertRaises(ValidationError) as ec:
            gal.clean_and_save()

        self.assertIn('email', ec.exception.error_dict)
コード例 #6
0
ファイル: uitests.py プロジェクト: azavea/nyc-trees
class LoginUITest(NycTreesSeleniumTestCase):
    def setUp(self):
        super(LoginUITest, self).setUp()
        self.user = User(username='******', email='*****@*****.**')
        self.user.set_password('password')
        self.user.save()

    def test_login(self):
        self.get('/accounts/login/')

        self.wait_for_textbox_then_type('[name="username"]',
                                        self.user.username)
        self.wait_for_textbox_then_type('[name="password"]', 'password')

        self.click('form input[type="submit"]')
コード例 #7
0
 def setUpTestData(cls):
     """Prep an invoice"""
     cls.user = User(username='******')
     cls.invoice = factories.InvoiceFactory()
     fee = FeeFactory(amount=100)
     cls.enrolment = EnrolmentFactory(module=fee.module)
     transaction = finance_services.add_enrolment_fee(
         enrolment_id=cls.enrolment.id, fee_id=fee.id, user=cls.user)
     services.attach_transaction_to_invoice(transaction=transaction,
                                            invoice=cls.invoice)
コード例 #8
0
 def user_can_delete(self, *, user: User) -> bool:
     """Determine if a user is allowed to remove an entry from the ledger"""
     return (
         # Devs can always delete
         user.has_perm('finance.delete_ledger')
         # Same-day, own-entry deletion for others
         or self.created_by == user.username
         and self.timestamp.date() == date.today()
         # No deleting fee items attached to invoices
         and
         not (hasattr(self, 'invoice_ledger') and not self.type.is_cash))
コード例 #9
0
ファイル: users.py プロジェクト: Sibyx/EvilFlowersCatalog
    def post(self, request):
        form = CreateUserForm.create_from_request(request)

        if not form.is_valid():
            raise ValidationException(request, form)

        if not request.user.has_perm('core.add_user'):
            raise ProblemDetailException(request,
                                         _("Insufficient permissions"),
                                         status=HTTPStatus.FORBIDDEN)

        if User.objects.filter(email=form.cleaned_data['email']).exists():
            raise ProblemDetailException(
                request,
                _("User with same email already exists"),
                status=HTTPStatus.CONFLICT)

        user = User()
        form.populate(user)
        user.set_password(form.cleaned_data['password'])
        user.save()

        return SingleResponse(request,
                              user,
                              serializer=UserSerializer.Base,
                              status=HTTPStatus.CREATED)
コード例 #10
0
 def setUpTestData(cls):
     """Prep an invoice with two enrolments with £50 and £100 outstanding
     Todo: figure out a concise way to do this
     """
     cls.user = User(username='******')
     cls.invoice = factories.InvoiceFactory()
     fees = [FeeFactory(amount=50), FeeFactory(amount=100)]
     cls.enrolments = [EnrolmentFactory(module=fee.module) for fee in fees]
     for fee, enrolment in zip(fees, cls.enrolments):
         transaction = finance_services.add_enrolment_fee(
             enrolment_id=enrolment.id, fee_id=fee.id, user=cls.user)
         services.attach_transaction_to_invoice(transaction=transaction,
                                                invoice=cls.invoice)
コード例 #11
0
ファイル: import.py プロジェクト: labhackercd/blog
 def handle(self, *args, **options):
     with open('media/csv/users.csv') as csvfile:
         reader = csv.DictReader(csvfile)
         for row in reader:
             user = User()
             user.id = int(row['ID'])
             user.username = row['user_login']
             user.email = row['user_email']
             user.date_joined = row['user_registered']
             user.first_name = row['display_name'].split(' ')[0]
             user.last_name = row['display_name'].split(' ')[-1]
             user.save()
     with open('media/csv/posts.csv') as csvfile:
         reader = csv.DictReader(csvfile)
         for row in reader:
             post = Post()
             post.id = int(row['ID'])
             post.title = row['post_title']
             post.content = row['post_content']
             post.published_at = row['post_date']
             post.slug = row['post_name']
             post.user_id = row['post_author']
             post.save()
     with open('media/csv/comments.csv') as csvfile:
         reader = csv.DictReader(csvfile)
         for row in reader:
             comment = ThreadedComment()
             comment.id = int(row['comment_ID'])
             comment.object_pk = row['comment_post_ID']
             comment.content_type_id = 15
             comment.site_id = 1
             comment.user_name = row['comment_author']
             comment.user_email = row['comment_author_email']
             comment.user_url = row['comment_author_url']
             comment.ip_address = row['comment_author_IP']
             comment.submit_date = row['comment_date']
             comment.comment = row['comment_content']
             if row['comment_parent'] != '0':
                 comment.parent_id = row['comment_parent']
             if row['user_id'] != '0':
                 comment.user_id = row['user_id']
             comment.save()
コード例 #12
0
ファイル: uitests.py プロジェクト: azavea/nyc-trees
    def setUp(self):
        super(RsvpForEventUITest, self).setUp()

        self.user2 = User(username='******',
                          email='*****@*****.**',
                          first_name='Bender',
                          last_name='Rodríguez')
        self.user2.set_password('password')
        self.user2.clean_and_save()

        self.event = Event.objects.create(group=self.group,
                                          title="The event",
                                          slug="the-event",
                                          contact_email="*****@*****.**",
                                          address="123 Main St",
                                          location=CENTRAL_PARK,
                                          max_attendees=100,
                                          begins_at=now(),
                                          ends_at=now())
コード例 #13
0
    def post(self, request):
        form = UserForms.Create.create_from_request(request)

        if not form.is_valid():
            raise ValidationException(request, form)

        password = form.cleaned_data.get('password')
        role = form.cleaned_data.get('role')

        user = User()
        form.fill(user)

        user.set_password(password)
        user.username = user.email
        assign_role(user, role.name)
        user.is_active = False
        user.save()

        return SingleResponse(request,
                              user,
                              status=HTTPStatus.CREATED,
                              serializer=UserSerializer.Base)
コード例 #14
0
def email_personnel_change(
    *,
    model: Union[Address, Student, Tutor],
    initial_values: dict,
    changed_data: list[str],
    user: User,
) -> bool:
    """Emails the personnel office when a change is detected in a tutor's name, address or bank details"""
    # Discern update source
    if isinstance(model, Tutor):
        fields = [
            'bankname',
            'branchaddress',
            'accountname',
            'sortcode',
            'accountno',
            'swift',
            'iban',
            'other_bank_details',
        ]
        tutor = model
    elif isinstance(model, Address):
        fields = ['line1', 'line2', 'line3', 'town', 'state', 'country', 'postcode']
        tutor = model.student.tutor
    elif isinstance(model, Student):
        fields = ['firstname', 'surname', 'title']
        tutor = model.tutor
    else:
        raise TypeError('Invalid type for argument `model`')

    # Build change log
    changes = [(f, initial_values.get(f), getattr(model, f)) for f in fields if f in changed_data]

    if not changes or not _notifiable(tutor):
        # No email sent
        return False

    # Email personnel
    context = {
        'person': tutor.student,
        'updated_by': user.get_full_name(),
        'changes': changes,
        'canonical_url': settings.CANONICAL_URL,
    }
    message = render_to_string(template_name='email/personnel_info_change.html', context=context)
    mail.send_mail(
        recipient_list=[settings.SUPPORT_EMAIL if settings.DEBUG else settings.PERSONNEL_EMAIL],
        from_email=settings.DEFAULT_FROM_EMAIL,
        subject='Tutor details update',
        message=strip_tags(message),
        html_message=message,
    )

    # Email tutor when account or sortcode changes
    tutor_email = tutor.student.get_default_email()
    if tutor_email and ('accountno' in changed_data or 'sortcode' in changed_data):
        context = {
            'firstname': tutor.student.firstname,
            'account': tutor.accountno,
            'sortcode': tutor.sortcode,
        }
        message = render_to_string(template_name='email/tutor_info_change.html', context=context)
        mail.send_mail(
            recipient_list=[settings.SUPPORT_EMAIL if settings.DEBUG else tutor_email],
            from_email=settings.DEFAULT_FROM_EMAIL,
            subject='Department for Continuing Education - payroll information',
            message=strip_tags(message),
            html_message=message,
        )
    return True
コード例 #15
0
ファイル: uitests.py プロジェクト: azavea/nyc-trees
 def setUp(self):
     super(LoginUITest, self).setUp()
     self.user = User(username='******', email='*****@*****.**')
     self.user.set_password('password')
     self.user.save()
コード例 #16
0
 def create(self, validated_data):
     user = User(**validated_data)
     user.set_password(validated_data['password'])
     user.save()
     return user
コード例 #17
0
ファイル: users.py プロジェクト: Sibyx/EvilFlowersCatalog
 def resolve_permissions(data: User):
     return data.get_all_permissions()
コード例 #18
0
ファイル: uitests.py プロジェクト: azavea/nyc-trees
class RsvpForEventUITest(EventTestCase):
    def setUp(self):
        super(RsvpForEventUITest, self).setUp()

        self.user2 = User(username='******',
                          email='*****@*****.**',
                          first_name='Bender',
                          last_name='Rodríguez')
        self.user2.set_password('password')
        self.user2.clean_and_save()

        self.event = Event.objects.create(group=self.group,
                                          title="The event",
                                          slug="the-event",
                                          contact_email="*****@*****.**",
                                          address="123 Main St",
                                          location=CENTRAL_PARK,
                                          max_attendees=100,
                                          begins_at=now(),
                                          ends_at=now())

    @property
    def event_detail_url(self):
        return self.event.get_absolute_url()

    def get_event_page(self):
        self.get(self.event_detail_url)

    def test_rsvp(self):
        self.assertEqual(EventRegistration.objects.all().count(), 0)
        self.login(self.user2.username)
        self.get_event_page()

        self.wait_for_text("RSVP")
        self.click('#rsvp')
        self.wait_for_text("RSVPed")
        self.assertEqual(EventRegistration.objects.all().count(), 1)
        self.assertEqual(EventRegistration.objects.all()[0].user,
                         self.user2)
        self.assertEqual(EventRegistration.objects.all()[0].event,
                         self.event)

    def test_cancel_rsvp(self):
        EventRegistration.objects.create(user=self.user2, event=self.event)

        self.login(self.user2.username)
        self.get_event_page()

        self.wait_for_text("1 / 100")
        self.click('#rsvp')
        self.wait_for_text("0 / 100")
        self.assertEqual(EventRegistration.objects.all().count(), 0)

    def test_group_admin_sees_admin_button(self):
        self.login(self.user.username)
        self.get_event_page()
        self.wait_for_text("Admin")

    def test_user_not_logged_in_can_rsvp(self):
        self.get_event_page()
        self.wait_for_text("0 / 100")
        self.click('#rsvp')
        expected_url = (self.live_server_url + reverse('login') + '?next=' +
                        self.event_detail_url)
        self.assertEqual(expected_url, self.sel.current_url)

        self.wait_for_textbox_then_type('[name="username"]',
                                        self.user2.username)
        self.wait_for_textbox_then_type('[name="password"]', 'password')
        self.click('form input[type="submit"]')

        expected_url = self.live_server_url + self.event_detail_url
        self.assertEqual(expected_url, self.sel.current_url)
        self.wait_for_text("0 / 100")
        self.click('#rsvp')
        self.wait_for_text("1 / 100")

    def test_at_capacity(self):
        self.event.max_attendees = 1
        self.event.save()
        EventRegistration.objects.create(user=self.user, event=self.event)
        self.login(self.user2.username)
        self.get_event_page()
        self.wait_for_text("At Capacity")
        self.click('#rsvp')  # clicking should do nothing
        self.wait_for_text("At Capacity")

    def test_user_not_logged_in_at_capacity(self):
        self.event.max_attendees = 1
        self.event.save()
        EventRegistration.objects.create(user=self.user, event=self.event)
        self.get_event_page()
        self.wait_for_text("At Capacity")
        self.click('#rsvp')  # clicking should do nothing
        self.wait_for_text("At Capacity")