chore: improve coverage
ci/woodpecker/push/woodpecker Pipeline failed Details

wip-payments
Aravinth Manivannan 2022-06-18 13:54:03 +05:30
parent 39e54df5ef
commit bdf8f6989f
Signed by: realaravinth
GPG Key ID: AD9F0F08E855ED88
4 changed files with 67 additions and 25 deletions

1
.gitignore vendored
View File

@ -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/

View File

@ -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

View File

@ -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"))

View File

@ -43,10 +43,12 @@ def login_view(request):
user = None user = None
if "@" in login_cred: if "@" in login_cred:
user = authenticate( user = get_user_model().objects.get(email=login_cred)
email=login_cred, if user is not None:
password=request.POST["password"], user = authenticate(
) username=user.username,
password=request.POST["password"],
)
else: else:
user = authenticate( user = authenticate(
username=login_cred, username=login_cred,
@ -75,8 +77,10 @@ def protected_view(request):
def default_login_url(request): def default_login_url(request):
ctx = {"next": request.GET["next"]} if "next" in request.GET:
return redirect(f"{reverse('accounts.login')}?{urlencode(ctx)}") ctx = {"next": request.GET["next"]}
return redirect(f"{reverse('accounts.login')}?{urlencode(ctx)}")
return redirect(reverse("accounts.login"))
@login_required @login_required