Skip to content

Commit 856c9f3

Browse files
committed
merge develop
2 parents eb4ba79 + dedf575 commit 856c9f3

File tree

6 files changed

+146
-4
lines changed

6 files changed

+146
-4
lines changed

demo/requirements.txt

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,10 +22,10 @@ jinja2==2.10 # via coreschema
2222
markupsafe==1.1.0 # via jinja2
2323
pip-tools==3.1.0
2424
psycopg2==2.7.5
25-
pytz==2018.7 # via django
26-
requests==2.19.1 # via coreapi, facepy
25+
pytz==2018.5 # via django
26+
requests==2.20.0 # via coreapi, facepy
2727
shortuuid==0.5.0 # via django-shortuuidfield
2828
six==1.11.0 # via django-shortuuidfield, facepy, pip-tools
2929
sqlparse==0.2.4 # via django-debug-toolbar
3030
uritemplate==3.0.0 # via coreapi
31-
urllib3==1.23 # via requests
31+
urllib3==1.24.1 # via requests

requirements-test.txt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,3 +7,5 @@ pytest-pythonpath
77

88
coverage
99
django-webtest
10+
11+
pretend

tests/functional/conftest.py

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
import pytest
2+
3+
from demo.accounts.models import User, APIToken
4+
5+
6+
@pytest.fixture
7+
def user0(db):
8+
return User.objects.create_user(
9+
10+
first_name="Bobby",
11+
last_name="Email",
12+
password="pass123",
13+
is_active=True,
14+
date_joined="2018-02-15T15:35:02Z",
15+
)
16+
17+
18+
@pytest.fixture
19+
def userfb0(db):
20+
return User.objects.create_user(
21+
22+
first_name="Alex",
23+
last_name="Facebook",
24+
facebook_id="1234dddd",
25+
facebook_access_token="oauthtoken1111",
26+
is_active=True,
27+
)
28+
29+
30+
@pytest.fixture
31+
def token0(user0):
32+
return APIToken.objects.create_token(
33+
user=user0,
34+
)
35+
36+
37+
@pytest.fixture
38+
def token1(userfb0):
39+
return APIToken.objects.create_token(
40+
user=userfb0,
41+
)

tests/functional/test_email.py

Lines changed: 52 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,57 @@
11
from django.urls import reverse
22

3+
from demo.accounts.models import User, APIToken
34

4-
def test_signup(db, django_app):
5+
6+
def test_signup(db, django_app, mailoutbox):
57
params = {"email": "[email protected]", "password": "correct battery horse staple"}
68
django_app.post_json(reverse("auth:signup"), params=params, status=201)
9+
10+
user = User.objects.last()
11+
assert user.email == "[email protected]"
12+
assert user.has_usable_password()
13+
m = mailoutbox[0]
14+
assert len(mailoutbox) == 1
15+
assert list(m.to) == ["[email protected]"]
16+
17+
18+
def test_signup_same_as_password(db, django_app):
19+
params = {"email": "[email protected]", "password": "[email protected]"}
20+
resp = django_app.post_json(reverse("auth:signup"), params=params, status=400)
21+
22+
assert "password" in resp.json
23+
24+
25+
def test_signup_invalid_email(db, django_app):
26+
params = {"email": "bobby", "password": "[email protected]"}
27+
resp = django_app.post_json(reverse("auth:signup"), params=params, status=400)
28+
29+
assert "email" in resp.json
30+
31+
32+
def test_signup_already_exists(db, django_app, user0):
33+
params = {"email": "[email protected]", "password": "pass123"}
34+
resp = django_app.post_json(reverse("auth:signup"), params=params, status=400)
35+
36+
assert "email" in resp.json
37+
38+
39+
def test_login(db, django_app, user0):
40+
params = {"email": "[email protected]", "password": "pass123"}
41+
resp = django_app.post_json(reverse("auth:login"), params=params, status=200)
42+
43+
assert "token" in resp.json
44+
45+
46+
def test_login_unknown_user(db, django_app):
47+
params = {"email": "[email protected]", "password": "correct battery horse staple"}
48+
resp = django_app.post_json(reverse("auth:login"), params=params, status=400)
49+
50+
assert "errors" in resp.json
51+
52+
53+
def test_logout(db, django_app, token0):
54+
headers = {"Authorization": "Bearer {}".format(token0.key)}
55+
django_app.post_json(reverse("auth:logout"), headers=headers, status=200)
56+
57+
assert APIToken.objects.filter(key=token0.key).first() is None

tests/functional/test_facebook.py

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
from django.urls import reverse
2+
3+
from pretend import stub
4+
5+
6+
def fake_signed_request(signed_request=None, application_secret_key=None,
7+
application_id=None, api_version=None):
8+
token_object = stub(token="fb oauth token")
9+
user_object = stub(oauth_token=token_object)
10+
return stub(user=user_object)
11+
12+
13+
def fake_graph_api_get(self, path="", page=False, retry=3, **options):
14+
return {
15+
"email": "[email protected]",
16+
"first_name": "Alex",
17+
"last_name": "Facebook",
18+
"third_party_id": "1234dddd",
19+
}
20+
21+
22+
def fake_get_access_token(access_token, application_id, application_secret_key,
23+
api_version=None):
24+
return "oauth token extended", "other setting"
25+
26+
27+
def test_facebook_login(django_app, monkeypatch, userfb0, token1):
28+
monkeypatch.setattr("facepy.GraphAPI.get", fake_graph_api_get)
29+
monkeypatch.setattr("facepy.SignedRequest", fake_signed_request)
30+
monkeypatch.setattr("facepy.get_extended_access_token", fake_get_access_token)
31+
32+
params = {"signed_request": "abcd_signed_request"}
33+
resp = django_app.post_json(reverse("auth:fb-login"), params=params, status=200)
34+
35+
assert resp.json.keys() == {"token"}
36+
assert resp.json["token"] != token1.key

tests/functional/test_token_auth.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
from django.urls import reverse
2+
3+
4+
def test_account(db, django_app, token0):
5+
headers = {"Authorization": "Bearer {}".format(token0.key)}
6+
resp = django_app.get(reverse("user-profile"), headers=headers, status=200)
7+
8+
assert resp.json == {
9+
"first_name": "Bobby",
10+
"last_name": "Email",
11+
"date_joined": "2018-02-15T15:35:02Z",
12+
}

0 commit comments

Comments
 (0)