Archived
Merge in my changes.
This commit is contained in:
commit
4cea50ae6c
4 files changed
+111
-104
No files matched your search
@@ -3,14 +3,21 @@ D.U.S.K.E.N
|
||||
Dårlig Utrustet Studentsystem som Kommer til å Endre Norge.
|
||||
|
||||
Installation
|
||||
============
|
||||
* sudo apt-get install python-dev postgresql-server-dev libmysqlclient-dev python-virtualenv python-pip
|
||||
* virtualenv --distribute --no-site-packages venv
|
||||
* . venv/bin/activate
|
||||
* pip install -r requirements.txt
|
||||
------------
|
||||
`sudo apt-get install python-dev libmysqlclient-dev python-virtualenv python-pip
|
||||
sudo apt-get isntall postgresql-server-dev-9.1 # for postgres client lib
|
||||
virtualenv --distribute --no-site-packages venv # create a project specific python environment
|
||||
. venv/bin/activate # active the environment
|
||||
pip install -U distribute # upgrade distribute
|
||||
pip install -r requirements.txt # install all requirements`
|
||||
|
||||
Database Diagram Generation
|
||||
===========================
|
||||
* sudo apt-get install graphviz libgraphviz-dev
|
||||
* pip install pygraphviz django-extensions
|
||||
* python manage.py graph_models -o diagramfile.png main
|
||||
---------------------------
|
||||
`sudo apt-get install graphviz libgraphviz-dev
|
||||
pip install pygraphviz django-extensions
|
||||
python manage.py graph_models -o diagramfile.png main`
|
||||
|
||||
|
||||
Generate Fixtures for Test
|
||||
--------------------------
|
||||
`python manage.py dumpdata --all -n > main/fixtures/new-testdata.json`
|
||||
+16
-16
@@ -4,20 +4,20 @@ from main.models import *
|
||||
|
||||
|
||||
class MemberResource(ModelResource):
|
||||
"""
|
||||
This class provides following endpoints:
|
||||
(1) /api/v1/member/
|
||||
(2) /api/v1/member/{id}/
|
||||
"""
|
||||
class Meta:
|
||||
queryset = Member.objects.all()
|
||||
resource_name = 'member'
|
||||
list_allowed_methods = [ 'get', 'post' ]
|
||||
detail_allowed_methods = [ 'get', 'post' ]
|
||||
authorization = Authorization() # TODO: for dev (VERY INSECURE)
|
||||
filtering = {
|
||||
'username' : ALL,
|
||||
'epost' : ALL,
|
||||
'phone_number' : ALL
|
||||
}
|
||||
"""
|
||||
This class provides following endpoints:
|
||||
(1) /api/v1/member/
|
||||
(2) /api/v1/member/{id}/
|
||||
"""
|
||||
class Meta:
|
||||
queryset = Member.objects.all()
|
||||
resource_name = 'member'
|
||||
list_allowed_methods = [ 'get', 'post' ]
|
||||
detail_allowed_methods = [ 'get', 'post' ]
|
||||
authorization = Authorization() # TODO: for dev (VERY INSECURE)
|
||||
filtering = {
|
||||
'username' : ALL,
|
||||
'epost' : ALL,
|
||||
'phone_number' : ALL
|
||||
}
|
||||
|
||||
@@ -1 +1 @@
|
||||
[{"pk": 9, "model": "contenttypes.contenttype", "fields": {"model": "address", "name": "address", "app_label": "main"}}, {"pk": 21, "model": "contenttypes.contenttype", "fields": {"model": "apiaccess", "name": "api access", "app_label": "tastypie"}}, {"pk": 22, "model": "contenttypes.contenttype", "fields": {"model": "apikey", "name": "api key", "app_label": "tastypie"}}, {"pk": 4, "model": "contenttypes.contenttype", "fields": {"model": "contenttype", "name": "content type", "app_label": "contenttypes"}}, {"pk": 8, "model": "contenttypes.contenttype", "fields": {"model": "country", "name": "country", "app_label": "main"}}, {"pk": 15, "model": "contenttypes.contenttype", "fields": {"model": "extendedmemberdetail", "name": "extended member detail", "app_label": "main"}}, {"pk": 13, "model": "contenttypes.contenttype", "fields": {"model": "facebookauth", "name": "facebook auth", "app_label": "main"}}, {"pk": 14, "model": "contenttypes.contenttype", "fields": {"model": "googleauth", "name": "google auth", "app_label": "main"}}, {"pk": 19, "model": "contenttypes.contenttype", "fields": {"model": "group", "name": "group", "app_label": "main"}}, {"pk": 2, "model": "contenttypes.contenttype", "fields": {"model": "group", "name": "group", "app_label": "auth"}}, {"pk": 20, "model": "contenttypes.contenttype", "fields": {"model": "groupmembership", "name": "group membership", "app_label": "main"}}, {"pk": 10, "model": "contenttypes.contenttype", "fields": {"model": "institution", "name": "institution", "app_label": "main"}}, {"pk": 7, "model": "contenttypes.contenttype", "fields": {"model": "logentry", "name": "log entry", "app_label": "admin"}}, {"pk": 12, "model": "contenttypes.contenttype", "fields": {"model": "member", "name": "member", "app_label": "main"}}, {"pk": 18, "model": "contenttypes.contenttype", "fields": {"model": "membership", "name": "membership", "app_label": "main"}}, {"pk": 17, "model": "contenttypes.contenttype", "fields": {"model": "membershiptype", "name": "membership type", "app_label": "main"}}, {"pk": 16, "model": "contenttypes.contenttype", "fields": {"model": "paymentformembership", "name": "payment for membership", "app_label": "main"}}, {"pk": 1, "model": "contenttypes.contenttype", "fields": {"model": "permission", "name": "permission", "app_label": "auth"}}, {"pk": 11, "model": "contenttypes.contenttype", "fields": {"model": "placeofstudy", "name": "place of study", "app_label": "main"}}, {"pk": 5, "model": "contenttypes.contenttype", "fields": {"model": "session", "name": "session", "app_label": "sessions"}}, {"pk": 6, "model": "contenttypes.contenttype", "fields": {"model": "site", "name": "site", "app_label": "sites"}}, {"pk": 3, "model": "contenttypes.contenttype", "fields": {"model": "user", "name": "user", "app_label": "auth"}}, {"pk": 1, "model": "sites.site", "fields": {"domain": "example.com", "name": "example.com"}}, {"pk": 1, "model": "main.country", "fields": {"updated": "2013-02-01T17:14:37Z", "name": "Norge", "created": "2013-02-01T17:14:37Z"}}, {"pk": 1, "model": "main.address", "fields": {"city": "Oslo", "updated": "2013-02-01T17:15:15Z", "created": "2013-02-01T17:15:15Z", "country": 1, "postal_code": "0266", "street_address": "Odins gate 12A H0401"}}, {"pk": 1, "model": "main.institution", "fields": {"updated": "2013-02-01T17:14:14Z", "name": "Universitetet i Oslo", "created": "2013-02-01T17:14:14Z"}}, {"pk": 1, "model": "main.placeofstudy", "fields": {"from_date": "2013-02-01", "updated": "2013-02-01T17:52:06Z", "institution": 1, "created": "2013-02-01T17:52:06Z"}}, {"pk": 1, "model": "main.member", "fields": {"username": "robertko", "phone_number": 90567268, "first_name": "Robert", "last_name": "Kolner", "created": "2013-02-01T17:51:12Z", "place_of_study": [1], "updated": "2013-02-01T17:51:12Z", "date_of_birth": "1988-12-31", "legacy_id": null, "address": 1, "password": "lol", "email": "robert.kolner@gmail.com"}}, {"pk": 2, "model": "main.member", "fields": {"username": null, "phone_number": null, "first_name": null, "last_name": null, "created": "2013-02-01T17:55:12Z", "place_of_study": [], "updated": "2013-02-01T17:55:12Z", "date_of_birth": null, "legacy_id": null, "address": null, "password": "asdf", "email": "asdf@asdf.com"}}, {"pk": 1, "model": "main.paymentformembership", "fields": {"voucher_id": null, "webshop_payment_id": 1337, "sms_payment_id": null, "updated": "2013-02-01T17:51:37Z", "created": "2013-02-01T17:51:37Z"}}, {"pk": 1, "model": "main.membershiptype", "fields": {"duration_months": 12, "updated": "2013-02-01T17:13:39Z", "name": "Medlem av DNS", "created": "2013-02-01T17:13:39Z", "end_month": 7, "end_day_of_month": 31}}, {"pk": 1, "model": "main.membership", "fields": {"member": 1, "updated": "2013-02-01T17:53:07Z", "created": "2013-02-01T17:53:07Z", "payment": 1, "mtype": 1, "start_date": "2013-02-01"}}, {"pk": 1, "model": "main.group", "fields": {"updated": "2013-02-01T17:44:48Z", "created": "2013-02-01T17:44:48Z", "name": "EDB", "posix_name": "Line truncated
|
||||
[{"pk": 1, "model": "main.country", "fields": {"updated": "2013-02-01T17:14:37Z", "name": "Norge", "created": "2013-02-01T17:14:37Z"}}, {"pk": 1, "model": "main.address", "fields": {"city": "Oslo", "updated": "2013-02-01T17:15:15Z", "created": "2013-02-01T17:15:15Z", "country": 1, "postal_code": "0266", "street_address": "Odins gate 12A H0401"}}, {"pk": 1, "model": "main.institution", "fields": {"updated": "2013-02-01T17:14:14Z", "name": "Universitetet i Oslo", "created": "2013-02-01T17:14:14Z"}}, {"pk": 1, "model": "main.placeofstudy", "fields": {"from_date": "2013-02-01", "updated": "2013-02-01T17:52:06Z", "institution": 1, "created": "2013-02-01T17:52:06Z"}}, {"pk": 1, "model": "main.member", "fields": {"username": "robertko", "phone_number": 90567268, "first_name": "Robert", "last_name": "Kolner", "created": "2013-02-01T17:51:12Z", "place_of_study": [1], "updated": "2013-02-01T17:51:12Z", "date_of_birth": "1988-12-31", "legacy_id": null, "address": 1, "password": "lol", "email": "robert.kolner@gmail.com"}}, {"pk": 2, "model": "main.member", "fields": {"username": null, "phone_number": null, "first_name": null, "last_name": null, "created": "2013-02-01T17:55:12Z", "place_of_study": [], "updated": "2013-02-01T17:55:12Z", "date_of_birth": null, "legacy_id": null, "address": null, "password": "asdf", "email": "asdf@asdf.com"}}, {"pk": 1, "model": "main.paymentformembership", "fields": {"voucher_id": null, "webshop_payment_id": 1337, "sms_payment_id": null, "updated": "2013-02-01T17:51:37Z", "created": "2013-02-01T17:51:37Z"}}, {"pk": 1, "model": "main.membershiptype", "fields": {"duration_months": 12, "updated": "2013-02-01T17:13:39Z", "name": "Medlem av DNS", "created": "2013-02-01T17:13:39Z", "end_month": 7, "end_day_of_month": 31}}, {"pk": 1, "model": "main.membership", "fields": {"member": 1, "updated": "2013-02-01T17:53:07Z", "created": "2013-02-01T17:53:07Z", "payment": 1, "mtype": 1, "start_date": "2013-02-01"}}, {"pk": 1, "model": "main.group", "fields": {"updated": "2013-02-01T17:44:48Z", "created": "2013-02-01T17:44:48Z", "name": "EDB", "posix_name": "edb"}}, {"pk": 2, "model": "main.group", "fields": {"updated": "2013-02-01T17:45:21Z", "created": "2013-02-01T17:45:21Z", "name": "Aktiv", "posix_name": "dns-aktiv"}}, {"pk": 3, "model": "main.group", "fields": {"updated": "2013-02-01T17:46:24Z", "created": "2013-02-01T17:46:24Z", "name": "Alle", "posix_name": "dns-alle"}}, {"pk": 1, "model": "main.groupmembership", "fields": {"member": 1, "updated": "2013-02-01T17:53:31Z", "group": 1, "start_date": "2013-02-01", "created": "2013-02-01T17:53:31Z"}}, {"pk": 2, "model": "main.groupmembership", "fields": {"member": 1, "updated": "2013-02-01T17:53:44Z", "group": 2, "start_date": "2013-02-01", "created": "2013-02-01T17:53:44Z"}}]
|
||||
+78
-78
@@ -4,101 +4,101 @@ from support.test import ResourceTestCase
|
||||
from main.models import Member
|
||||
|
||||
class MemberTest(ResourceTestCase):
|
||||
fixtures = [ 'testdata.json' ]
|
||||
fixtures = [ 'testdata.json' ]
|
||||
|
||||
def assertValidMemberData(self, member):
|
||||
self.assertEquals(type(member), dict)
|
||||
self.assertKeys(member, [
|
||||
u'id',
|
||||
u'email',
|
||||
u'username',
|
||||
u'password',
|
||||
u'phone_number',
|
||||
u'first_name',
|
||||
u'last_name',
|
||||
u'date_of_birth',
|
||||
u'legacy_id',
|
||||
u'created',
|
||||
u'updated',
|
||||
u'resource_uri'
|
||||
])
|
||||
self.assertNotEquals(None,member['id'])
|
||||
self.assertNotEquals(None,member['email'])
|
||||
self.assertNotEquals(None,member['created'])
|
||||
self.assertNotEquals(None,member['updated'])
|
||||
self.assertNotEquals(None,member['resource_uri'])
|
||||
def assertValidMemberData(self, member):
|
||||
self.assertEquals(type(member), dict)
|
||||
self.assertKeys(member, [
|
||||
u'id',
|
||||
u'email',
|
||||
u'username',
|
||||
u'password',
|
||||
u'phone_number',
|
||||
u'first_name',
|
||||
u'last_name',
|
||||
u'date_of_birth',
|
||||
u'legacy_id',
|
||||
u'created',
|
||||
u'updated',
|
||||
u'resource_uri'
|
||||
])
|
||||
self.assertNotEquals(None,member['id'])
|
||||
self.assertNotEquals(None,member['email'])
|
||||
self.assertNotEquals(None,member['created'])
|
||||
self.assertNotEquals(None,member['updated'])
|
||||
self.assertNotEquals(None,member['resource_uri'])
|
||||
|
||||
def setUp(self):
|
||||
super(MemberTest, self).setUp()
|
||||
def setUp(self):
|
||||
super(MemberTest, self).setUp()
|
||||
|
||||
# Get the preloaded member, which will be used for
|
||||
# comparison with fetched object.
|
||||
self.member = Member.objects.get(username='robertko')
|
||||
# Get the preloaded member, which will be used for
|
||||
# comparison with fetched object.
|
||||
self.member = Member.objects.get(username='robertko')
|
||||
|
||||
# URI to get the existing member. We'll probably
|
||||
# need it at one point or another.
|
||||
self.all_members_url = '/api/v1/member/'
|
||||
self.member_url = self.all_members_url + '{}/'.format(self.member.pk)
|
||||
# URI to get the existing member. We'll probably
|
||||
# need it at one point or another.
|
||||
self.all_members_url = '/api/v1/member/'
|
||||
self.member_url = self.all_members_url + '{}/'.format(self.member.pk)
|
||||
|
||||
def test_check_request_types(self):
|
||||
"""
|
||||
Tests that the endpoint responds to correct types of requests.
|
||||
"""
|
||||
resp = self.api_client.get(self.all_members_url, format='json')
|
||||
self.assertNotEquals(resp.status_code, 405)
|
||||
def test_check_request_types(self):
|
||||
"""
|
||||
Tests that the endpoint responds to correct types of requests.
|
||||
"""
|
||||
resp = self.api_client.get(self.all_members_url, format='json')
|
||||
self.assertNotEquals(resp.status_code, 405)
|
||||
|
||||
resp = self.api_client.post(self.all_members_url)
|
||||
self.assertNotEquals(resp.status_code, 405)
|
||||
resp = self.api_client.post(self.all_members_url)
|
||||
self.assertNotEquals(resp.status_code, 405)
|
||||
|
||||
resp = self.api_client.put(self.all_members_url)
|
||||
self.assertHttpMethodNotAllowed(resp)
|
||||
resp = self.api_client.put(self.all_members_url)
|
||||
self.assertHttpMethodNotAllowed(resp)
|
||||
|
||||
resp = self.api_client.delete(self.all_members_url)
|
||||
self.assertHttpMethodNotAllowed(resp)
|
||||
resp = self.api_client.delete(self.all_members_url)
|
||||
self.assertHttpMethodNotAllowed(resp)
|
||||
|
||||
|
||||
def test_get_member(self):
|
||||
"""
|
||||
Tests that we can get a premade user correctly.
|
||||
"""
|
||||
resp = self.api_client.get(self.member_url, format='json')
|
||||
self.assertValidJSONResponse(resp)
|
||||
def test_get_member(self):
|
||||
"""
|
||||
Tests that we can get a premade user correctly.
|
||||
"""
|
||||
resp = self.api_client.get(self.member_url, format='json')
|
||||
self.assertValidJSONResponse(resp)
|
||||
|
||||
# Check if the returned data is correct:
|
||||
member = self.deserialize(resp)
|
||||
self.assertValidMemberData(member)
|
||||
# Check if the returned data is correct:
|
||||
member = self.deserialize(resp)
|
||||
self.assertValidMemberData(member)
|
||||
|
||||
def test_get_all_members(self):
|
||||
"""
|
||||
Tests that we can get all users from the api.
|
||||
"""
|
||||
resp = self.api_client.get(self.all_members_url, format='json')
|
||||
self.assertValidJSONResponse(resp)
|
||||
def test_get_all_members(self):
|
||||
"""
|
||||
Tests that we can get all users from the api.
|
||||
"""
|
||||
resp = self.api_client.get(self.all_members_url, format='json')
|
||||
self.assertValidJSONResponse(resp)
|
||||
|
||||
# Check if the returned data is correct:
|
||||
all_members = self.deserialize(resp)['objects']
|
||||
self.assertTrue(len(all_members) > 0) # assumes we have *some* data
|
||||
|
||||
for index in range(len(all_members)):
|
||||
self.assertValidMemberData(all_members[index])
|
||||
# Check if the returned data is correct:
|
||||
all_members = self.deserialize(resp)['objects']
|
||||
self.assertEqual(len(all_members), 2)
|
||||
|
||||
def test_get_filtered_members(self):
|
||||
"""
|
||||
Tests that we can get a filtered list from the api.
|
||||
"""
|
||||
data = {
|
||||
"username" : "robertko" # change if necessary
|
||||
}
|
||||
for index in range(len(all_members)):
|
||||
self.assertValidMemberData(all_members[index])
|
||||
|
||||
resp = self.api_client.get(self.all_members_url, format='json', data=data)
|
||||
self.assertValidJSONResponse(resp)
|
||||
def test_get_filtered_members(self):
|
||||
"""
|
||||
Tests that we can get a filtered list from the api.
|
||||
"""
|
||||
data = {
|
||||
"username" : "robertko"
|
||||
}
|
||||
|
||||
# Check if the returned data is correct:
|
||||
all_members = self.deserialize(resp)['objects']
|
||||
self.assertEqual(len(all_members), 1)
|
||||
resp = self.api_client.get(self.all_members_url, format='json', data=data)
|
||||
self.assertValidJSONResponse(resp)
|
||||
|
||||
member = all_members[0]
|
||||
self.assertValidMemberData(member)
|
||||
# Check if the returned data is correct:
|
||||
all_members = self.deserialize(resp)['objects']
|
||||
self.assertEqual(len(all_members), 1)
|
||||
|
||||
member = all_members[0]
|
||||
self.assertValidMemberData(member)
|
||||
|
||||
def test_post_new_member(self):
|
||||
"""
|
||||
|
||||
Reference in new issue
Block a user