Archived
Merges working branch into master
This commit is contained in:
commit
de4effaadb
12 files changed
+168
-26
No files matched your search
+2
-5
@@ -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
@@ -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):
|
||||
|
||||
@@ -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"}}]
|
||||
@@ -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
|
||||
@@ -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"}}]
|
||||
@@ -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
@@ -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
@@ -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 ''
|
||||
Whitespace-only changes.
@@ -0,0 +1,3 @@
|
||||
from django.db import models
|
||||
|
||||
# Create your models here.
|
||||
@@ -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)
|
||||
@@ -0,0 +1 @@
|
||||
# Create your views here.
|
||||
Reference in new issue
Block a user