Fakultas Ilmu Komputer UI
Skip to content
GitLab
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in
Toggle navigation
Menu
Open sidebar
PMPL
Collection of Practice
2019
1606885025-practice
Commits
3905646d
Commit
3905646d
authored
Nov 22, 2019
by
Rani Lasma Uli
Browse files
done chapter 19
parent
811737a2
Changes
1
Hide whitespace changes
Inline
Side-by-side
accounts/tests/test_views.py
View file @
3905646d
from
unittest.mock
import
patch
,
call
from
django.test
import
TestCase
class
SendLoginEmailViewTest
(
TestCase
):
def
test_redirects_to_home_page
(
self
):
response
=
self
.
client
.
post
(
'/accounts/send_login_email'
,
data
=
{
'email'
:
'edith@example.com'
})
self
.
assertRedirects
(
response
,
'/'
)
@
patch
(
'accounts.views.send_mail'
)
def
test_sends_mail_to_address_from_post
(
self
,
mock_send_mail
):
self
.
client
.
post
(
'/accounts/send_login_email'
,
data
=
{
'email'
:
'edith@example.com'
})
self
.
assertTrue
(
mock_send_mail
.
called
)
(
subject
,
_
,
from_email
,
to_list
),
_
=
mock_send_mail
.
call_args
self
.
assertEqual
(
subject
,
'Your login link for Superlists'
)
self
.
assertEqual
(
from_email
,
'noreply@superlists'
)
self
.
assertEqual
(
to_list
,
[
'edith@example.com'
])
def
test_adds_success_message
(
self
):
response
=
self
.
client
.
post
(
'/accounts/send_login_email'
,
data
=
{
'email'
:
'edith@example.com'
},
follow
=
True
)
message
=
list
(
response
.
context
[
'messages'
])[
0
]
self
.
assertEqual
(
message
.
message
,
"Check your email, we've sent you a link you can use to log in."
)
self
.
assertEqual
(
message
.
tags
,
"success"
)
@
patch
(
'accounts.views.auth'
)
class
LoginViewTest
(
TestCase
):
def
test_calls_authenticate_with_uid_from_get_request
(
self
,
mock_auth
):
self
.
client
.
get
(
'/accounts/login?token=abcd123'
)
self
.
assertEqual
(
mock_auth
.
authenticate
.
call_args
,
call
(
uid
=
'abcd123'
))
def
test_calls_auth_login_with_user_if_there_is_one
(
self
,
mock_auth
):
response
=
self
.
client
.
get
(
'/accounts/login?token=abcd123'
)
self
.
assertEqual
(
mock_auth
.
login
.
call_args
,
call
(
response
.
wsgi_request
,
mock_auth
.
authenticate
.
return_value
))
def
test_does_not_login_if_user_is_not_authenticated
(
self
,
mock_auth
):
mock_auth
.
authenticate
.
return_value
=
None
self
.
client
.
get
(
'/accounts/login?token=abcd123'
)
self
.
assertEqual
(
mock_auth
.
login
.
called
,
False
)
import
os
import
re
from
unittest
import
skipIf
from
django.core
import
mail
from
selenium.webdriver.common.keys
import
Keys
from
functional_tests.base
import
FunctionalTest
TEST_EMAIL
=
'safira@example.com'
SUBJECT
=
'Your login link for Superlists'
class
LoginTest
(
FunctionalTest
):
@
skipIf
(
os
.
environ
.
get
(
"HEROKU_HOST"
),
"Somehow always fails at Heroku, outgoing SMTP blocked by Heroku"
)
def
test_can_get_email_link_to_log_in
(
self
):
# Safira goes to the awesome superlists site
# and notices a "Log in" section in the navbar for the first time
# It's telling her to enter her email address, so she does
self
.
browser
.
get
(
self
.
BASE_URL
)
self
.
browser
.
find_element_by_name
(
'email'
).
send_keys
(
TEST_EMAIL
)
self
.
browser
.
find_element_by_name
(
'email'
).
send_keys
(
Keys
.
ENTER
)
# A message appears telling her an email has been sent
self
.
wait_for
(
lambda
:
self
.
assertIn
(
'Check your email'
,
self
.
browser
.
find_element_by_tag_name
(
'body'
).
text
))
# She checks her email and finds a message
email
=
mail
.
outbox
[
0
]
self
.
assertIn
(
TEST_EMAIL
,
email
.
to
)
self
.
assertEqual
(
email
.
subject
,
SUBJECT
)
# It has a url link in it
self
.
assertIn
(
'Use this link to log in'
,
email
.
body
)
url_search
=
re
.
search
(
r
'http://.+/.+$'
,
email
.
body
)
if
not
url_search
:
self
.
fail
(
f
'Could not find url in email body:
\n
{
email
.
body
}
'
)
url
=
url_search
.
group
(
0
)
self
.
assertIn
(
self
.
BASE_URL
,
url
)
# she clicks it
self
.
browser
.
get
(
url
)
# she is logged in!
self
.
wait_for
(
lambda
:
self
.
browser
.
find_element_by_link_text
(
'Log out'
))
navbar
=
self
.
browser
.
find_element_by_css_selector
(
'.navbar'
)
self
.
assertIn
(
TEST_EMAIL
,
navbar
.
text
)
# Now she logs out
self
.
browser
.
find_element_by_link_text
(
'Log out'
).
click
()
# She is logged out
self
.
wait_for
(
lambda
:
self
.
browser
.
find_element_by_name
(
'email'
))
navbar
=
self
.
browser
.
find_element_by_css_selector
(
'.navbar'
)
self
.
assertNotIn
(
TEST_EMAIL
,
navbar
.
text
)
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new 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