Skip to content

Commit

Permalink
Merge pull request #122 from gwu-libraries/t96-add-new-collection
Browse files Browse the repository at this point in the history
👍
  • Loading branch information
kerchner committed Jan 14, 2016
2 parents f4bab08 + f5d3093 commit 820d1c1
Show file tree
Hide file tree
Showing 6 changed files with 118 additions and 24 deletions.
3 changes: 3 additions & 0 deletions sfm/sfm/settings/common.py
Original file line number Diff line number Diff line change
Expand Up @@ -134,3 +134,6 @@
RABBITMQ_HOST = env.get('SFM_RABBITMQ_HOST')
RABBITMQ_USER = env.get('SFM_RABBITMQ_USER')
RABBITMQ_PASSWORD = env.get('SFM_RABBITMQ_PASSWORD')

# crispy forms bootstrap version
CRISPY_TEMPLATE_PACK = 'bootstrap3'
41 changes: 28 additions & 13 deletions sfm/ui/forms.py
Original file line number Diff line number Diff line change
@@ -1,12 +1,18 @@
from django import forms
from django.contrib.auth.models import Group
from crispy_forms.helper import FormHelper
from crispy_forms.layout import Layout, Fieldset, Button, Submit
from crispy_forms.bootstrap import FormActions

from .models import Collection, SeedSet, Seed, Credential


class CollectionForm(forms.ModelForm):
group = forms.ModelChoiceField(queryset=None)

class Meta:
model = Collection
fields = '__all__'
fields = ['name', 'description', 'group']
exclude = []
widgets = None
localized_fields = None
Expand All @@ -15,16 +21,27 @@ class Meta:
error_messages = {}

def __init__(self, *args, **kwargs):
return super(CollectionForm, self).__init__(*args, **kwargs)

def is_valid(self):
return super(CollectionForm, self).is_valid()

def full_clean(self):
return super(CollectionForm, self).full_clean()

def save(self, commit=True):
return super(CollectionForm, self).save(commit)
request = kwargs.pop('request')

super(CollectionForm, self).__init__(*args, **kwargs)
# limiting groups in dropdown to user's
self.fields['group'].queryset = Group.objects.filter(
pk__in=request.user.groups.all())

# set up crispy forms helper
self.helper = FormHelper(self)
self.helper.layout = Layout(
Fieldset(
'',
'name',
'description',
'group'
),
FormActions(
Submit('submit', 'Add'),
Button('cancel', 'Cancel', onclick="window.history.back()")
)
)


class SeedSetForm(forms.ModelForm):
Expand Down Expand Up @@ -111,5 +128,3 @@ def full_clean(self):

def save(self, commit=True):
return super(CredentialForm, self).save(commit)


2 changes: 1 addition & 1 deletion sfm/ui/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ class Collection(models.Model):

group = models.ForeignKey(Group, related_name='collections')
name = models.CharField(max_length=255, blank=False,
help_text='Collection name')
verbose_name='Collection name')
description = models.TextField(blank=True)
is_active = models.BooleanField(default=True)
is_visible = models.BooleanField(default=True)
Expand Down
28 changes: 19 additions & 9 deletions sfm/ui/templates/ui/collection_create.html
Original file line number Diff line number Diff line change
@@ -1,16 +1,26 @@
{% extends 'base.html' %}
{% load crispy_forms_tags %}
{% block title %}
Create Collection
Add New Collection
{% endblock %}

{% block content %}
<h1><a href={% url "collection_list" %}>Collection</a></h1>
<h2>Create Collection</h2>

<form action="" method="post">{% csrf_token %}
{{ form|crispy }}
<input type="submit" value="Create" />
</form>
<a href={% url "collection_list" %}>Cancel</a>
<div class="row">
<div class="col-md-12">
<ol class="breadcrumb">
<li><a href={% url "collection_list" %}>My Collections</a></li>
<li class="active">Add New Collection</li>
</ol>
</div>
</div>
<div class="row">
<div class="col-md-12">
<h2>Add New Collection</h2>
</div>
</div>
<div class="row">
<div class="col-md-12">
{% crispy form %}
</div>
</div>
{% endblock %}
60 changes: 60 additions & 0 deletions sfm/ui/test_forms.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
from django.contrib.auth.models import Group
from django.test import TestCase, RequestFactory

from .forms import CollectionForm
from .views import CollectionCreateView
from .models import User


def create_group(name):
return Group.objects.create(name=name)


class CollectionFormTest(TestCase):

def setUp(self):
self.factory = RequestFactory()
self.user = User.objects.create_user(username='testuser',
email='testuser@example.com', password='password')
group = create_group(name='testgroup1')
self.user.groups.add(group)
create_group(name='testgroup2')

def test_form_has_correct_groups(self):
request = self.factory.get('/ui/collections/create/')
request.user = self.user
response = CollectionCreateView.as_view()(request)
self.assertContains(response, 'testgroup')
self.assertNotContains(response, 'testgroup2')

def test_valid_data(self):
request = self.factory.get('/ui/collections/create')
request.user = self.user
groupno = Group.objects.filter(name='testgroup1')
form = CollectionForm({
'name': 'my test collection',
'description': 'my description',
'group': groupno
}, request=request)
self.assertTrue(form.is_valid())

def test_invalid_data_blank_name(self):
request = self.factory.get('/ui/collections/create')
request.user = self.user
groupno = Group.objects.filter(name='testgroup1')
form = CollectionForm({
'name': '',
'description': 'my description',
'group': groupno
}, request=request)
self.assertFalse(form.is_valid())

def test_invalid_data_blank_group(self):
request = self.factory.get('/ui/collections/create')
request.user = self.user
form = CollectionForm({
'name': 'my test collection',
'description': 'my description',
'group': ''
}, request=request)
self.assertFalse(form.is_valid())
8 changes: 7 additions & 1 deletion sfm/ui/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@

from .forms import CollectionForm, SeedSetForm, SeedForm, CredentialForm
from .models import Collection, SeedSet, Seed, Credential

from utils import schedule_harvest


Expand All @@ -33,12 +34,17 @@ class CollectionDetailView(LoginRequiredMixin, DetailView):
template_name = 'ui/collection_detail.html'


class CollectionCreateView(CreateView):
class CollectionCreateView(LoginRequiredMixin, CreateView):
model = Collection
form_class = CollectionForm
template_name = 'ui/collection_create.html'
success_url = reverse_lazy('collection_list')

def get_form_kwargs(self):
kwargs = super(CollectionCreateView, self).get_form_kwargs()
kwargs['request'] = self.request
return kwargs


class CollectionUpdateView(UpdateView):
model = Collection
Expand Down

0 comments on commit 820d1c1

Please sign in to comment.