Skip to content
GitLab
Menu
Projects
Groups
Snippets
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
thalia
concrexit
Commits
e6cf8529
Verified
Commit
e6cf8529
authored
Feb 11, 2018
by
Sébastiaan Versteeg
Browse files
Add basic tests for EventAdmin
parent
2fff7a72
Changes
3
Hide whitespace changes
Inline
Side-by-side
website/events/admin.py
View file @
e6cf8529
...
@@ -15,21 +15,27 @@ from utils.translation import TranslatedModelAdmin
...
@@ -15,21 +15,27 @@ from utils.translation import TranslatedModelAdmin
from
.
import
forms
,
models
from
.
import
forms
,
models
class
DoNextModelAdmin
(
TranslatedModelAdmin
):
def
_do_next
(
request
,
response
):
if
'next'
in
request
.
GET
and
is_safe_url
(
request
.
GET
[
'next'
]):
return
HttpResponseRedirect
(
request
.
GET
[
'next'
])
else
:
return
response
def
_do_next
(
self
,
request
,
response
):
if
'next'
in
request
.
GET
and
is_safe_url
(
request
.
GET
[
'next'
]):
class
DoNextModelAdmin
(
TranslatedModelAdmin
):
return
HttpResponseRedirect
(
request
.
GET
[
'next'
])
"""
else
:
This class adds processing of a `next` parameter in the urls
return
response
of the add and change admin forms. If it is set and safe this
override will redirect the user to the provided url.
"""
def
response_add
(
self
,
request
,
obj
):
def
response_add
(
self
,
request
,
obj
):
res
=
super
().
response_add
(
request
,
obj
)
res
=
super
().
response_add
(
request
,
obj
)
return
self
.
_do_next
(
request
,
res
)
return
_do_next
(
request
,
res
)
def
response_change
(
self
,
request
,
obj
):
def
response_change
(
self
,
request
,
obj
):
res
=
super
().
response_change
(
request
,
obj
)
res
=
super
().
response_change
(
request
,
obj
)
return
self
.
_do_next
(
request
,
res
)
return
_do_next
(
request
,
res
)
class
RegistrationInformationFieldInline
(
admin
.
StackedInline
):
class
RegistrationInformationFieldInline
(
admin
.
StackedInline
):
...
...
website/events/tests/test_admin.py
View file @
e6cf8529
...
@@ -3,11 +3,16 @@ from unittest import mock
...
@@ -3,11 +3,16 @@ from unittest import mock
from
django.contrib.admin
import
AdminSite
from
django.contrib.admin
import
AdminSite
from
django.http
import
HttpResponseRedirect
from
django.http
import
HttpResponseRedirect
from
django.test
import
TestCase
,
RequestFactory
from
django.test
import
TestCase
,
RequestFactory
,
override_settings
from
django.utils
import
timezone
from
django.utils
import
timezone
from
freezegun
import
freeze_time
from
activemembers.models
import
Committee
,
CommitteeMembership
from
activemembers.models
import
Committee
,
CommitteeMembership
from
events.admin
import
DoNextModelAdmin
,
RegistrationInformationFieldInline
from
events.admin
import
(
DoNextModelAdmin
,
RegistrationInformationFieldInline
,
EventAdmin
)
from
events.models
import
Event
,
RegistrationInformationField
from
events.models
import
Event
,
RegistrationInformationField
from
members.models
import
Member
from
members.models
import
Member
...
@@ -25,20 +30,22 @@ class DoNextModelAdminTest(TestCase):
...
@@ -25,20 +30,22 @@ class DoNextModelAdminTest(TestCase):
request
=
self
.
rf
.
get
(
'/admin/events/event/1'
)
request
=
self
.
rf
.
get
(
'/admin/events/event/1'
)
response
=
self
.
admin
.
response_add
(
request
,
None
)
response
=
self
.
admin
.
response_add
(
request
,
None
)
self
.
assertIsNone
(
response
,
HttpResponseRedirect
)
self
.
assertIsNone
(
response
,
"Should return the original response"
)
request
=
self
.
rf
.
get
(
'/admin/events/event/1'
,
data
=
{
request
=
self
.
rf
.
get
(
'/admin/events/event/1'
,
data
=
{
'next'
:
'http://example.org'
,
'next'
:
'http://example.org'
,
})
})
response
=
self
.
admin
.
response_add
(
request
,
None
)
response
=
self
.
admin
.
response_add
(
request
,
None
)
self
.
assertIsNone
(
response
,
HttpResponseRedirect
)
self
.
assertNotIsInstance
(
response
,
HttpResponseRedirect
,
"Should not redirect"
)
request
=
self
.
rf
.
get
(
'/admin/events/event/1'
,
data
=
{
request
=
self
.
rf
.
get
(
'/admin/events/event/1'
,
data
=
{
'next'
:
'/test'
,
'next'
:
'/test'
,
})
})
response
=
self
.
admin
.
response_add
(
request
,
None
)
response
=
self
.
admin
.
response_add
(
request
,
None
)
self
.
assertIsInstance
(
response
,
HttpResponseRedirect
)
self
.
assertIsInstance
(
response
,
HttpResponseRedirect
)
self
.
assertEqual
(
'/test'
,
response
.
url
)
self
.
assertEqual
(
'/test'
,
response
.
url
,
"Should return the url in the next parameter."
)
@
mock
.
patch
(
'utils.translation.TranslatedModelAdmin.response_change'
)
@
mock
.
patch
(
'utils.translation.TranslatedModelAdmin.response_change'
)
def
test_response_change
(
self
,
super_mock
):
def
test_response_change
(
self
,
super_mock
):
...
@@ -46,22 +53,25 @@ class DoNextModelAdminTest(TestCase):
...
@@ -46,22 +53,25 @@ class DoNextModelAdminTest(TestCase):
request
=
self
.
rf
.
get
(
'/admin/events/event/1'
)
request
=
self
.
rf
.
get
(
'/admin/events/event/1'
)
response
=
self
.
admin
.
response_change
(
request
,
None
)
response
=
self
.
admin
.
response_change
(
request
,
None
)
self
.
assertIsNone
(
response
,
HttpResponseRedirect
)
self
.
assertIsNone
(
response
,
"Should return the original response"
)
request
=
self
.
rf
.
get
(
'/admin/events/event/1'
,
data
=
{
request
=
self
.
rf
.
get
(
'/admin/events/event/1'
,
data
=
{
'next'
:
'http://example.org'
,
'next'
:
'http://example.org'
,
})
})
response
=
self
.
admin
.
response_change
(
request
,
None
)
response
=
self
.
admin
.
response_change
(
request
,
None
)
self
.
assertIsNone
(
response
,
HttpResponseRedirect
)
self
.
assertNotIsInstance
(
response
,
HttpResponseRedirect
,
"Should not redirect"
)
request
=
self
.
rf
.
get
(
'/admin/events/event/1'
,
data
=
{
request
=
self
.
rf
.
get
(
'/admin/events/event/1'
,
data
=
{
'next'
:
'/test'
,
'next'
:
'/test'
,
})
})
response
=
self
.
admin
.
response_change
(
request
,
None
)
response
=
self
.
admin
.
response_change
(
request
,
None
)
self
.
assertIsInstance
(
response
,
HttpResponseRedirect
)
self
.
assertIsInstance
(
response
,
HttpResponseRedirect
)
self
.
assertEqual
(
'/test'
,
response
.
url
)
self
.
assertEqual
(
'/test'
,
response
.
url
,
"Should return the url in the next parameter."
)
@
freeze_time
(
'2017-01-01'
)
class
RegistrationInformationFieldInlineTest
(
TestCase
):
class
RegistrationInformationFieldInlineTest
(
TestCase
):
fixtures
=
[
'members.json'
,
'committees.json'
]
fixtures
=
[
'members.json'
,
'committees.json'
]
...
@@ -82,7 +92,8 @@ class RegistrationInformationFieldInlineTest(TestCase):
...
@@ -82,7 +92,8 @@ class RegistrationInformationFieldInlineTest(TestCase):
location_nl
=
'test locatie'
,
location_nl
=
'test locatie'
,
map_location
=
'test map location'
,
map_location
=
'test map location'
,
price
=
0.00
,
price
=
0.00
,
fine
=
0.00
)
fine
=
0.00
)
cls
.
member
=
Member
.
objects
.
filter
(
last_name
=
"Wiggers"
).
first
()
cls
.
member
=
Member
.
objects
.
filter
(
last_name
=
"Wiggers"
).
first
()
cls
.
member
.
is_superuser
=
True
cls
.
member
.
is_superuser
=
True
cls
.
member
.
save
()
cls
.
member
.
save
()
...
@@ -135,7 +146,81 @@ class RegistrationInformationFieldInlineTest(TestCase):
...
@@ -135,7 +146,81 @@ class RegistrationInformationFieldInlineTest(TestCase):
self
.
assertEqual
(
3
,
formset
.
form
.
declared_fields
[
'order'
].
initial
)
self
.
assertEqual
(
3
,
formset
.
form
.
declared_fields
[
'order'
].
initial
)
@
freeze_time
(
'2017-01-01'
)
class
EventAdminTest
(
TestCase
):
class
EventAdminTest
(
TestCase
):
fixtures
=
[
'members.json'
,
'committees.json'
]
@
classmethod
def
setUpTestData
(
cls
):
cls
.
committee
=
Committee
.
objects
.
get
(
pk
=
1
)
cls
.
event
=
Event
.
objects
.
create
(
pk
=
1
,
organiser
=
cls
.
committee
,
title_nl
=
'testevenement'
,
title_en
=
'testevent'
,
description_en
=
'desc'
,
description_nl
=
'besch'
,
published
=
True
,
start
=
(
timezone
.
now
()
+
datetime
.
timedelta
(
hours
=
1
)),
end
=
(
timezone
.
now
()
+
datetime
.
timedelta
(
hours
=
2
)),
location_en
=
'test location'
,
location_nl
=
'test locatie'
,
map_location
=
'test map location'
,
price
=
0.00
,
fine
=
0.00
)
cls
.
member
=
Member
.
objects
.
filter
(
last_name
=
"Wiggers"
).
first
()
def
setUp
(
self
):
def
setUp
(
self
):
pass
self
.
admin_site
=
AdminSite
()
self
.
admin
=
EventAdmin
(
Event
,
self
.
admin_site
)
self
.
rf
=
RequestFactory
()
def
test_overview_link
(
self
):
self
.
assertEqual
(
self
.
admin
.
overview_link
(
self
.
event
),
'<a href="/events/admin/1/">testevenement</a>'
)
@
mock
.
patch
(
'events.admin.DoNextModelAdmin.has_change_permission'
)
@
mock
.
patch
(
'events.services.is_organiser'
)
def
test_has_change_permission
(
self
,
organiser_mock
,
permission_mock
):
permission_mock
.
return_value
=
None
organiser_mock
.
return_value
=
True
request
=
self
.
rf
.
get
(
'/admin/events/event/1/change/'
)
request
.
member
=
self
.
member
res
=
self
.
admin
.
has_change_permission
(
request
,
None
)
self
.
assertEqual
(
res
,
None
)
res
=
self
.
admin
.
has_change_permission
(
request
,
self
.
event
)
self
.
assertEqual
(
res
,
None
)
organiser_mock
.
return_value
=
False
res
=
self
.
admin
.
has_change_permission
(
request
,
self
.
event
)
self
.
assertEqual
(
res
,
False
)
@
override_settings
(
LANGUAGE_CODE
=
'en'
)
def
test_event_date
(
self
):
self
.
assertEqual
(
self
.
admin
.
event_date
(
self
.
event
),
'Sunday 01 jan 2017, 2:00'
)
@
override_settings
(
LANGUAGE_CODE
=
'en'
)
def
test_registration_date
(
self
):
self
.
assertEqual
(
self
.
admin
.
registration_date
(
self
.
event
),
''
)
self
.
event
.
registration_start
=
timezone
.
now
()
self
.
assertEqual
(
self
.
admin
.
registration_date
(
self
.
event
),
'Sunday 01 jan 2017, 1:00'
)
@
override_settings
(
LANGUAGE_CODE
=
'en'
)
def
test_edit_link
(
self
):
self
.
assertEqual
(
self
.
admin
.
edit_link
(
None
),
'Edit'
)
@
override_settings
(
LANGUAGE_CODE
=
'en'
)
def
test_num_participants
(
self
):
self
.
assertEqual
(
self
.
admin
.
num_participants
(
self
.
event
),
'0/∞'
)
self
.
event
.
max_participants
=
2
self
.
assertEqual
(
self
.
admin
.
num_participants
(
self
.
event
),
'0/2'
)
website/events/tests/test_services.py
View file @
e6cf8529
...
@@ -4,6 +4,7 @@ from unittest import mock
...
@@ -4,6 +4,7 @@ from unittest import mock
from
django.contrib.auth.models
import
AnonymousUser
,
Permission
from
django.contrib.auth.models
import
AnonymousUser
,
Permission
from
django.test
import
TestCase
from
django.test
import
TestCase
from
django.utils
import
timezone
from
django.utils
import
timezone
from
freezegun
import
freeze_time
from
activemembers.models
import
Committee
,
CommitteeMembership
from
activemembers.models
import
Committee
,
CommitteeMembership
from
events
import
services
from
events
import
services
...
@@ -12,6 +13,7 @@ from events.models import Event, Registration, RegistrationInformationField
...
@@ -12,6 +13,7 @@ from events.models import Event, Registration, RegistrationInformationField
from
members.models
import
Member
from
members.models
import
Member
@
freeze_time
(
'2017-01-01'
)
class
ServicesTest
(
TestCase
):
class
ServicesTest
(
TestCase
):
fixtures
=
[
'members.json'
,
'committees.json'
]
fixtures
=
[
'members.json'
,
'committees.json'
]
...
...
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment