Merges working branch into master

This commit is contained in:
Mark Polak committed 2013-08-22 00:46:33 +02:00
commit de4effaadb
12 files changed
+168 -26

No files matched your search

+2 -5
View File
@@ -27,16 +27,13 @@ class MemberAdmin(admin.ModelAdmin):
return self.readonly_fields + ('username', )
return self.readonly_fields
class InstitutionAdmin(admin.ModelAdmin):
pass
admin.site.unregister(django.contrib.auth.models.Group)
admin.site.unregister(User)
admin.site.register(Address)
admin.site.register(Country)
admin.site.register(Group)
admin.site.register(Institution, InstitutionAdmin)
admin.site.register(Institution)
admin.site.register(Member, MemberAdmin)
admin.site.register(MembershipType)
admin.site.register(Membership)
+25 -7
View File
@@ -72,18 +72,36 @@ class MemberResource(ModelResource):
"""
Catches POST and PATCH requests and intercepts data.
"""
if bundle.obj.user_ptr_id is not None: # happens only if user exists
for key, value in bundle.data.items():
if key == 'username':
if value != bundle.obj.username:
# We can't change username.
raise ImmediateHttpResponse(HttpForbidden("You can't change your username."))
return bundle
# Check if the user exists and return an error when attempting to change the username
if bundle.obj.user_ptr_id is not None and not bundle.data['username'] == bundle.obj.username:
raise ImmediateHttpResponse(HttpForbidden("You can't change your username."))
return bundle
def obj_update(self, bundle, request, **kwargs):
if bundle.data.get('password') is not None:
bundle.obj.set_password(bundle.data['password'])
bundle.obj.save()
if 'address' in bundle.data:
new_address = bundle.data.get('address')
address = bundle.obj.address
if 'street_address' in new_address:
address.street_address = new_address['street_address']
if 'city' in new_address:
address.city = new_address['city']
if 'postal_code' in new_address:
address.postal_code = new_address['postal_code']
if 'country' in new_address:
try:
country = Country.objects.get(name=new_address['country'])
except Country.DoesNotExist, e:
raise ImmediateHttpResponse(HttpForbidden('The country "{}" does not exist.'.format(new_address['country'])))
else:
address.country = country
address.save()
return super(MemberResource, self).obj_update(bundle, request, **kwargs)
def dehydrate(self, bundle):
+1
View File
@@ -0,0 +1 @@
[{"pk": 1, "model": "dusken.address", "fields": {"city": "Oslo", "updated": "2013-08-21T19:37:53.679Z", "created": "2013-08-21T19:37:53.679Z", "country": 1, "postal_code": "1023", "street_address": "Somestreet 1"}}, {"pk": 2, "model": "dusken.address", "fields": {"city": "Amsterdam", "updated": "2013-08-21T19:38:17.664Z", "created": "2013-08-21T19:38:17.664Z", "country": 2, "postal_code": "1432AD", "street_address": "Dutchroad 4"}}]
+1
View File
@@ -0,0 +1 @@
[{"pk": 1, "model": "auth.permission", "fields": {"codename": "add_permission", "name": "Can add permission", "content_type": 1}}, {"pk": 2, "model": "auth.permission", "fields": {"codename": "change_permission", "name": "Can change permission", "content_type": 1}}, {"pk": 3, "model": "auth.permission", "fields": {"codename": "delete_permission", "name": "Can delete permission", "content_type": 1}}, {"pk": 4, "model": "auth.permission", "fields": {"codename": "add_group", "name": "Can add group", "content_type": 2}}, {"pk": 5, "model": "auth.permission", "fields": {"codename": "change_group", "name": "Can change group", "content_type": 2}}, {"pk": 6, "model": "auth.permission", "fields": {"codename": "delete_group", "name": "Can delete group", "content_type": 2}}, {"pk": 7, "model": "auth.permission", "fields": {"codename": "add_user", "name": "Can add user", "content_type": 3}}, {"pk": 8, "model": "auth.permission", "fields": {"codename": "change_user", "name": "Can change user", "content_type": 3}}, {"pk": 9, "model": "auth.permission", "fields": {"codename": "delete_user", "name": "Can delete user", "content_type": 3}}, {"pk": 10, "model": "auth.permission", "fields": {"codename": "add_contenttype", "name": "Can add content type", "content_type": 4}}, {"pk": 11, "model": "auth.permission", "fields": {"codename": "change_contenttype", "name": "Can change content type", "content_type": 4}}, {"pk": 12, "model": "auth.permission", "fields": {"codename": "delete_contenttype", "name": "Can delete content type", "content_type": 4}}, {"pk": 13, "model": "auth.permission", "fields": {"codename": "add_session", "name": "Can add session", "content_type": 5}}, {"pk": 14, "model": "auth.permission", "fields": {"codename": "change_session", "name": "Can change session", "content_type": 5}}, {"pk": 15, "model": "auth.permission", "fields": {"codename": "delete_session", "name": "Can delete session", "content_type": 5}}, {"pk": 16, "model": "auth.permission", "fields": {"codename": "add_site", "name": "Can add site", "content_type": 6}}, {"pk": 17, "model": "auth.permission", "fields": {"codename": "change_site", "name": "Can change site", "content_type": 6}}, {"pk": 18, "model": "auth.permission", "fields": {"codename": "delete_site", "name": "Can delete site", "content_type": 6}}, {"pk": 19, "model": "auth.permission", "fields": {"codename": "add_logentry", "name": "Can add log entry", "content_type": 7}}, {"pk": 20, "model": "auth.permission", "fields": {"codename": "change_logentry", "name": "Can change log entry", "content_type": 7}}, {"pk": 21, "model": "auth.permission", "fields": {"codename": "delete_logentry", "name": "Can delete log entry", "content_type": 7}}, {"pk": 22, "model": "auth.permission", "fields": {"codename": "add_country", "name": "Can add country", "content_type": 8}}, {"pk": 23, "model": "auth.permission", "fields": {"codename": "change_country", "name": "Can change country", "content_type": 8}}, {"pk": 24, "model": "auth.permission", "fields": {"codename": "delete_country", "name": "Can delete country", "content_type": 8}}, {"pk": 25, "model": "auth.permission", "fields": {"codename": "add_address", "name": "Can add address", "content_type": 9}}, {"pk": 26, "model": "auth.permission", "fields": {"codename": "change_address", "name": "Can change address", "content_type": 9}}, {"pk": 27, "model": "auth.permission", "fields": {"codename": "delete_address", "name": "Can delete address", "content_type": 9}}, {"pk": 28, "model": "auth.permission", "fields": {"codename": "add_institution", "name": "Can add institution", "content_type": 10}}, {"pk": 29, "model": "auth.permission", "fields": {"codename": "change_institution", "name": "Can change institution", "content_type": 10}}, {"pk": 30, "model": "auth.permission", "fields": {"codename": "delete_institution", "name": "Can delete institution", "content_type": 10}}, {"pk": 31, "model": "auth.permission", "fields": {"codename": "add_placeofstudy", "name": "Can add place of study", "content_type": 11}}, {"pk": 32, "model": "auth.permission", "fields": {"codename": "change_placeofstudy", "name": "Can change place of study", "content_type": 11}}, {"pk": 33, "model": "auth.permission", "fields": {"codename": "delete_placeofstudy", "name": "Can delete place of study", "content_type": 11}}, {"pk": 34, "model": "auth.permission", "fields": {"codename": "add_member", "name": "Can add user", "content_type": 12}}, {"pk": 35, "model": "auth.permission", "fields": {"codename": "change_member", "name": "Can change user", "content_type": 12}}, {"pk": 36, "model": "auth.permission", "fields": {"codename": "delete_member", "name": "Can delete user", "content_type": 12}}, {"pk": 37, "model": "auth.permission", "fields": {"codename": "add_facebookauth", "name": "Can add facebook auth", "content_type": 13}}, {"pk": 38, "model": "auth.permission", "fields": {"codename": "change_facebookauth", "name": "Can change facebook auth", "content_type": 13}}, {"pk": 39, "model": Line truncated
+1
View File
@@ -0,0 +1 @@
[{"pk": 1, "model": "dusken.country", "fields": {"updated": "2013-08-21T19:37:24.851Z", "name": "Norway", "created": "2013-08-21T19:37:24.851Z"}}, {"pk": 2, "model": "dusken.country", "fields": {"updated": "2013-08-21T19:37:31.577Z", "name": "Netherlands", "created": "2013-08-21T19:37:31.577Z"}}]
+1
View File
@@ -0,0 +1 @@
[{"pk": 1, "model": "dusken.institution", "fields": {"updated": "2013-08-21T19:38:45.577Z", "name": "EDB Long name", "short_name": "KAK-EDB", "created": "2013-08-21T19:38:45.577Z"}}]
+89 -14
View File
@@ -1,7 +1,9 @@
import logging
from support.test import ResourceTestCase
from dusken.models import Member
from dusken.models import Address, Country, Member
from utils.tests import test_fixtures
class MemberTestBase(ResourceTestCase):
@@ -19,7 +21,7 @@ class MemberTestBase(ResourceTestCase):
# URIs to the member api
self.all_members_url = '/api/v1/member/'
self.member_url = self.all_members_url + '{}/'.format(self.member.pk)
self.member_url = self.all_members_url + '{}/'
class MemberTest(MemberTestBase):
@@ -49,7 +51,7 @@ class MemberTest(MemberTestBase):
"""
Tests that we can get a premade user correctly.
"""
resp = self.api_client.get(self.member_url, format='json')
resp = self.api_client.get(self.member_url.format(self.member.pk), format='json')
self.assertValidJSONResponse(resp)
# Check if the returned data is correct:
@@ -127,7 +129,7 @@ class MemberTest(MemberTestBase):
'phone_number' : 90541242
}
resp = self.api_client.patch(self.member_url,
resp = self.api_client.patch(self.member_url.format(self.member.pk),
format='json',
data=data)
self.assertHttpAccepted(resp)
@@ -146,7 +148,7 @@ class MemberTest(MemberTestBase):
newusername = oldusername + 'lolzorz'
data = { 'username' : newusername }
resp = self.api_client.patch(self.member_url, format='json', data=data)
resp = self.api_client.patch(self.member_url.format(self.member.pk), format='json', data=data)
self.assertHttpForbidden(resp)
try:
@@ -161,20 +163,93 @@ class MemberTest(MemberTestBase):
pass # ...the test.
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
class MemberAdressTest(MemberTestBase):
class MemberAddressTest(MemberTestBase):
def test_member_update_address(self):
fixtures = test_fixtures()
def setUp(self):
super(MemberAddressTest, self).setUp()
self.user_id = 1
member = Member.objects.get(id=self.user_id)
member.address = Address.objects.get(id=1)
member.save()
def test_member_address_update_street(self):
data = {
"address": {
"street" : "somestreet",
}
"street_address" : "somestreet 2",
}
}
response = self.api_client.patch(self.member_url,
format='json',
data=data)
response = self.api_client.patch(
self.member_url.format(self.user_id),
format='json',
data=data)
self.assertHttpAccepted(response)
self.assertEquals('somestreet 2', Member.objects.get(id=self.user_id).address.street_address)
def test_member_address_update_city(self):
data = {
"address": {
"city": "Amsterdam"
}
}
response = self.api_client.patch(
self.member_url.format(self.user_id),
format='json',
data=data)
self.assertHttpAccepted(response)
self.assertEquals('Amsterdam', Member.objects.get(id=self.user_id).address.city)
def test_member_address_update_postcode(self):
data = {
"address": {
"postal_code": "0977RT"
}
}
response = self.api_client.patch(
self.member_url.format(self.user_id),
format='json',
data=data)
self.assertHttpAccepted(response)
self.assertEquals('0977RT', Member.objects.get(id=self.user_id).address.postal_code)
def test_member_address_update_country(self):
data = {
"address": {
"country": "Netherlands"
}
}
response = self.api_client.patch(
self.member_url.format(self.user_id),
format='json',
data=data)
self.assertHttpAccepted(response)
self.assertEquals(
Country.objects.get(name="Netherlands"),
Member.objects.get(id=self.user_id).address.country)
def test_member_adress_update_unknown_country(self):
data = {
"address": {
"country": "unknown"
}
}
response = self.api_client.patch(
self.member_url.format(self.user_id),
format='json',
data=data)
self.assertHttpForbidden(response)
self.assertEquals('The country "unknown" does not exist.', response.content)
print response
print Member.objects.get(username="robert").address
Executable
+26
View File
@@ -0,0 +1,26 @@
#!/bin/bash
if [ -f dusken.db ]; then
echo 'Removing existing database...'
rm dusken.db
fi
echo 'Synchronizing database...'
python manage.py syncdb --noinput > /dev/null
echo 'Migrating database...'
python manage.py migrate > /dev/null
echo ''
echo 'Loading fixtures...'
echo ' - Auth'
python manage.py loaddata dusken/fixtures/auth.json > /dev/null
echo ' - Country'
python manage.py loaddata dusken/fixtures/country.json > /dev/null
echo ' - Address'
python manage.py loaddata dusken/fixtures/address.json > /dev/null
echo ' - Institution'
python manage.py loaddata dusken/fixtures/institution.json > /dev/null
echo ''
echo 'Done.'
echo ''
View File
Whitespace-only changes.
+3
View File
@@ -0,0 +1,3 @@
from django.db import models
# Create your models here.
+18
View File
@@ -0,0 +1,18 @@
import os.path
from django.core.management import call_command
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
def test_fixtures():
''' Returns a list with the locations of all defined fixtures. '''
return [os.path.join('dusken', 'fixtures', 'address.json'),
os.path.join('dusken', 'fixtures', 'country.json'),
os.path.join('dusken', 'fixtures', 'institution.json'),
]
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
def load_test_fixtures():
''' Explicitly load all defined fixtures. This can be useful when
you only want to load the fixtures for some testcases, but not
for all tests in a test class.'''
for f in test_fixtures():
call_command('loaddata', f, verbosity=0)
+1
View File
@@ -0,0 +1 @@
# Create your views here.