Esempio n. 1
0
File: tests.py Progetto: pdc/kanbo
class TestAccessForm(TestCase):
    def test_converts_username_to_user_instance(self):
        self.given_a_board()
        self.given_another_user('hortense')

        self.when_instantiating_access_form_with_username('hortense')

        self.then_form_should_be_valid()
        self.then_user_should_be_instance(username='******')

    def test_rejects_nonexistent_username(self):
        self.given_a_board()
        self.given_another_user('hortense')

        self.when_instantiating_access_form_with_username('bartholemew')

        self.then_form_should_NOT_be_valid()
        self.then_user_field_should_have_error_message()

    # Helpers

    def given_a_board(self):
        self.owner = User.objects.create_user(username='******', password='******')
        self.board = self.owner.board_set.create(name='a')

        self.bag = self.board.bag_set.create(name='state')
        self.new_tag = self.bag.tag_set.create(name='new')
        self.progress_tag = self.bag.tag_set.create(name='in-progress')
        self.done_tag = self.bag.tag_set.create(name='done')

    def given_another_user(self, username='******', password='******'):
        self.other = User.objects.create_user(username=username, password=password)

    def when_instantiating_access_form_with_username(self, username='******', can_rearrange=True):
        post = {
            'user': username,
        }
        if can_rearrange:
            post['can_rearrange'] = 'on'
        self.form = AccessForm(post, instance=Access(board=self.board))

    def then_form_should_be_valid(self):
        self.assertTrue(self.form.is_valid())

    def then_form_should_NOT_be_valid(self):
        self.assertFalse(self.form.is_valid())

    def then_user_should_be_instance(self, username):
        actual = self.form.cleaned_data['user']
        self.assertTrue(isinstance(actual, User))
        self.assertEqual(username, actual.username)

    def then_user_field_should_have_error_message(self):
        self.assertTrue(self.form['user'].errors)
Esempio n. 2
0
File: tests.py Progetto: pdc/kanbo
 def when_instantiating_access_form_with_username(self, username='******', can_rearrange=True):
     post = {
         'user': username,
     }
     if can_rearrange:
         post['can_rearrange'] = 'on'
     self.form = AccessForm(post, instance=Access(board=self.board))
Esempio n. 3
0
File: views.py Progetto: pdc/kanbo
def board_detail(request, owner, board):
    if not board.allows_add_remove_user(request.user):
        add_user_form = None
    elif request.method == 'POST':
        add_user_form = AccessForm(request.POST, instance=Access(board=board))
        if add_user_form.is_valid():
            add_user_form.save(message_callback=lambda msg: messages.info(request, msg))
            return redirect_to_board_detail(board)
    else:
        add_user_form = AccessForm(instance=Access(board=board)) # blank form

    collaborators = board.collaborators.all()
    for x in collaborators:
        x.can_rearrange = board.allows_rearrange(x)

    popup_path = reverse('new-card-popup', kwargs={
        'owner_username': board.owner.username,
        'board_name': board.name})
    popup_url = request.build_absolute_uri(popup_path)
    features = {
        'width': 600,
        'height': 200,
    }
    features.update((x, 'no') for x in ['location', 'menubar', 'status', 'toolbar'])
    features.update((x, 'yes') for x in ['resizable', 'scrollbar'])
    bookmarklet_url = "javascript:d=document,e=escape,x=d.getElementsByTagName('h1');window.open('{url}?title='+e(d.title)+'&h1='+e(x.length?x[0].textContent:'')+'&url='+e(d.location),'new-card','{features}');void(0)".format(
        url=popup_url,
        features=','.join('{0}={1}'.format(k, v) for (k, v) in sorted(features.items()))
    )

    return {
        'board': board,
        'collaborators': collaborators,
        'any_cant_rearrange': any(not x.can_rearrange for x in collaborators),
        'bags': board.bag_set.all(),
        'allows_add_remove_user': board.allows_add_remove_user(request.user),
        'add_user_form': add_user_form,
        'bookmarklet_url': bookmarklet_url,
    }
Esempio n. 4
0
File: views.py Progetto: pdc/kanbo
def add_user(request, owner, board):
    if not board.allows_add_remove_user(request.user):
        messages.info(request, 'You can’t add users to this board.')
        return redirect_to_board_detail(board)

    if request.method == 'POST':
        print ' request.POST', request.POST
        form = AccessForm(request.POST, instance=Access(board=board))
        if form.is_valid():
            try:
                access = Access.objects.get(user=form.cleaned_data['user'], board=board)
                access.can_rearrange = form.cleaned_data['can_rearrange']
                access.save()
                messages.info(request, '{0} was already a member.'.format(access.user.username))
            except Access.DoesNotExist:
                access = form.save()
            return redirect_to_board_detail(board)
    else:
        form = AccessForm(instance=Access(board=board)) # blank form
    return {
        'form': form,
        'non_field_errors': form.errors.get(NON_FIELD_ERRORS),
    }