chore: improve coverage
ci/woodpecker/push/woodpecker Pipeline failed
Details
ci/woodpecker/push/woodpecker Pipeline failed
Details
parent
39e54df5ef
commit
bdf8f6989f
|
@ -152,3 +152,4 @@ cython_debug/
|
||||||
# option (not recommended) you can uncomment the following to ignore the entire idea folder.
|
# option (not recommended) you can uncomment the following to ignore the entire idea folder.
|
||||||
#.idea/
|
#.idea/
|
||||||
keys
|
keys
|
||||||
|
htmlcov/
|
||||||
|
|
3
Makefile
3
Makefile
|
@ -14,6 +14,7 @@ default: ## Run app
|
||||||
coverage: ## Generate test coverage report
|
coverage: ## Generate test coverage report
|
||||||
. ./venv/bin/activate && coverage run manage.py test
|
. ./venv/bin/activate && coverage run manage.py test
|
||||||
. ./venv/bin/activate && coverage report -m
|
. ./venv/bin/activate && coverage report -m
|
||||||
|
. ./venv/bin/activate && coverage html
|
||||||
|
|
||||||
doc: ## Generates documentation
|
doc: ## Generates documentation
|
||||||
$(call unimplemented)
|
$(call unimplemented)
|
||||||
|
@ -41,4 +42,4 @@ migrate: ## Run migrations
|
||||||
$(call run_migrations)
|
$(call run_migrations)
|
||||||
|
|
||||||
test: ## Run tests
|
test: ## Run tests
|
||||||
@. ./venv/bin/activate && python manage.py test --parallel --with-coverage
|
@. ./venv/bin/activate && python manage.py test --parallel
|
||||||
|
|
|
@ -28,21 +28,36 @@ from .management.commands.rm_unverified_users import (
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
def register_util(t: TestCase, username: str):
|
||||||
|
t.password = "password121231"
|
||||||
|
t.username = username
|
||||||
|
t.email = f"{t.username}@example.org"
|
||||||
|
t.user = get_user_model().objects.create(
|
||||||
|
username=t.username,
|
||||||
|
email=t.email,
|
||||||
|
)
|
||||||
|
t.user.set_password(t.password)
|
||||||
|
t.user.save()
|
||||||
|
|
||||||
|
|
||||||
|
def login_util(t: TestCase, c: Client, redirect_to: str):
|
||||||
|
payload = {
|
||||||
|
"login": t.username,
|
||||||
|
"password": t.password,
|
||||||
|
}
|
||||||
|
resp = c.post(reverse("accounts.login"), payload)
|
||||||
|
t.assertEqual(resp.status_code, 302)
|
||||||
|
t.assertEqual(resp.headers["location"], reverse(redirect_to))
|
||||||
|
|
||||||
|
|
||||||
class LoginTest(TestCase):
|
class LoginTest(TestCase):
|
||||||
"""
|
"""
|
||||||
Tests create new app view
|
Tests create new app view
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def setUp(self):
|
def setUp(self):
|
||||||
self.password = "password121231"
|
|
||||||
self.username = "create_new_app_tests"
|
self.username = "create_new_app_tests"
|
||||||
self.email = f"{self.username}@example.org"
|
register_util(t=self, username=self.username)
|
||||||
self.user = get_user_model().objects.create(
|
|
||||||
username=self.username,
|
|
||||||
email=self.email,
|
|
||||||
)
|
|
||||||
self.user.set_password(self.password)
|
|
||||||
self.user.save()
|
|
||||||
|
|
||||||
def test_login_template_works(self):
|
def test_login_template_works(self):
|
||||||
"""
|
"""
|
||||||
|
@ -58,16 +73,10 @@ class LoginTest(TestCase):
|
||||||
c = Client()
|
c = Client()
|
||||||
|
|
||||||
# username login works
|
# username login works
|
||||||
payload = {
|
login_util(t=self, c=c, redirect_to="accounts.home")
|
||||||
"login": self.username,
|
|
||||||
"password": self.password,
|
|
||||||
}
|
|
||||||
resp = c.post(reverse("accounts.login"), payload)
|
|
||||||
self.assertEqual(resp.status_code, 302)
|
|
||||||
self.assertEqual(resp.headers["location"], reverse("accounts.home"))
|
|
||||||
|
|
||||||
# email login works
|
# email login works
|
||||||
paylaod = {
|
payload = {
|
||||||
"login": self.email,
|
"login": self.email,
|
||||||
"password": self.password,
|
"password": self.password,
|
||||||
}
|
}
|
||||||
|
@ -81,10 +90,24 @@ class LoginTest(TestCase):
|
||||||
"password": self.user.email,
|
"password": self.user.email,
|
||||||
}
|
}
|
||||||
|
|
||||||
resp = self.client.post(reverse("accounts.login"), paylaod)
|
resp = self.client.post(reverse("accounts.login"), payload)
|
||||||
self.assertEqual(resp.status_code, 401)
|
self.assertEqual(resp.status_code, 401)
|
||||||
self.assertEqual(b"Login Failed" in resp.content, True)
|
self.assertEqual(b"Login Failed" in resp.content, True)
|
||||||
|
|
||||||
|
# protected view works
|
||||||
|
resp = c.get(reverse("accounts.home"))
|
||||||
|
self.assertEqual(resp.status_code, 302)
|
||||||
|
self.assertEqual(resp.headers["location"], reverse("dash.home"))
|
||||||
|
|
||||||
|
def test_default_login_uri_works(self):
|
||||||
|
"""
|
||||||
|
/accounts/login should redirect_to /login
|
||||||
|
"""
|
||||||
|
c = Client()
|
||||||
|
resp = c.get(reverse("accounts.default_login_url"))
|
||||||
|
self.assertEqual(resp.status_code, 302)
|
||||||
|
self.assertEqual(resp.headers["location"], reverse("accounts.login"))
|
||||||
|
|
||||||
|
|
||||||
class RegistrationTest(TestCase):
|
class RegistrationTest(TestCase):
|
||||||
def test_register_template_works(self):
|
def test_register_template_works(self):
|
||||||
|
@ -121,11 +144,24 @@ class RegistrationTest(TestCase):
|
||||||
|
|
||||||
pending_url = challenge.pending_url()
|
pending_url = challenge.pending_url()
|
||||||
self.assertEqual(resp.headers["location"], pending_url)
|
self.assertEqual(resp.headers["location"], pending_url)
|
||||||
|
resend_url = reverse("accounts.verify.resend", args=(challenge.public_ref,))
|
||||||
|
|
||||||
resp = c.post(reverse("accounts.verify.resend", args=(challenge.public_ref,)))
|
# visit pending URL
|
||||||
|
resp = c.get(pending_url)
|
||||||
|
self.assertEqual(resp.status_code, 200)
|
||||||
|
self.assertEqual(str.encode(msg["email"]) in resp.content, True)
|
||||||
|
self.assertEqual(str.encode(resend_url) in resp.content, True)
|
||||||
|
|
||||||
|
resp = c.post(resend_url)
|
||||||
self.assertEqual(resp.status_code, 302)
|
self.assertEqual(resp.status_code, 302)
|
||||||
self.assertEqual(resp.headers["location"], pending_url)
|
self.assertEqual(resp.headers["location"], pending_url)
|
||||||
|
|
||||||
|
resp = c.get(challenge.verification_link())
|
||||||
|
self.assertEqual(resp.status_code, 200)
|
||||||
|
self.assertEqual(
|
||||||
|
str.encode(challenge.verification_link()) in resp.content, True
|
||||||
|
)
|
||||||
|
|
||||||
resp = c.post(challenge.verification_link())
|
resp = c.post(challenge.verification_link())
|
||||||
self.assertEqual(resp.status_code, 302)
|
self.assertEqual(resp.status_code, 302)
|
||||||
self.assertEqual(resp.headers["location"], reverse("accounts.login"))
|
self.assertEqual(resp.headers["location"], reverse("accounts.login"))
|
||||||
|
|
|
@ -43,8 +43,10 @@ def login_view(request):
|
||||||
user = None
|
user = None
|
||||||
|
|
||||||
if "@" in login_cred:
|
if "@" in login_cred:
|
||||||
|
user = get_user_model().objects.get(email=login_cred)
|
||||||
|
if user is not None:
|
||||||
user = authenticate(
|
user = authenticate(
|
||||||
email=login_cred,
|
username=user.username,
|
||||||
password=request.POST["password"],
|
password=request.POST["password"],
|
||||||
)
|
)
|
||||||
else:
|
else:
|
||||||
|
@ -75,8 +77,10 @@ def protected_view(request):
|
||||||
|
|
||||||
|
|
||||||
def default_login_url(request):
|
def default_login_url(request):
|
||||||
|
if "next" in request.GET:
|
||||||
ctx = {"next": request.GET["next"]}
|
ctx = {"next": request.GET["next"]}
|
||||||
return redirect(f"{reverse('accounts.login')}?{urlencode(ctx)}")
|
return redirect(f"{reverse('accounts.login')}?{urlencode(ctx)}")
|
||||||
|
return redirect(reverse("accounts.login"))
|
||||||
|
|
||||||
|
|
||||||
@login_required
|
@login_required
|
||||||
|
|
Loading…
Reference in New Issue