Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Setup Code Coverage and Improve Test Coverage #9

Merged
merged 3 commits into from
Jan 22, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -7,3 +7,4 @@
node_modules
**/dist/
/staticfiles/
.coverage
2 changes: 2 additions & 0 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,8 @@ build-prod:
test:
@docker compose -f docker-compose.dev.yml run --rm web pytest

cov:
@docker compose -f docker-compose.dev.yml run --rm web coverage run -m pytest
up:
@docker compose -f docker-compose.dev.yml up -d

Expand Down
66 changes: 65 additions & 1 deletion poetry.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -38,3 +38,4 @@ pytest-django = "^4.7.0"
pytest-timeout = "^2.2.0"
pytest-factoryboy = "^2.6.0"
django-browser-reload = "^1.12.1"
coverage = "^7.4.0"
129 changes: 113 additions & 16 deletions users/test.py
Original file line number Diff line number Diff line change
@@ -1,29 +1,126 @@
import pytest
from django.contrib.auth import get_user_model
from django.db import IntegrityError

from .factory import UserFactory

User = get_user_model()


@pytest.mark.django_db
class TestUser:
"""
Tests the overriden User Model.
"""

def test_user_factory(self):
user = UserFactory()
assert isinstance(user, User)

def test_user_model(self):
user1 = UserFactory()
user2 = UserFactory()
assert isinstance(user, get_user_model())

def test_user_str(self):
user = UserFactory(username="testuser")

assert str(user) == "testuser"

def test_user_is_not_anonymous(self):
user = UserFactory()

assert not user.is_anonymous

def test_user_is_authenticated(self):
user = UserFactory()

assert user.is_authenticated

def test_user_get_full_name(self):
user = UserFactory()

assert user.get_full_name() == f"{user.first_name} {user.last_name}"

def test_user_get_short_name(self):
user = UserFactory()

assert user.get_short_name() == user.first_name

def test_user_password_set_and_check(self):
user = UserFactory()

user.set_password("newpassword")

assert user.check_password("newpassword")

def test_user_has_perm(self):
user = UserFactory()

user.is_superuser = True

assert user.has_perm("auth.view_user")

def test_user_has_module_perms(self):
user = UserFactory()

user.is_superuser = True

assert user.has_module_perms("auth")

def test_duplicate_username(self):
UserFactory(username="testuser")

with pytest.raises(IntegrityError):
UserFactory(username="testuser")

def test_superuser_and_staff_properties(self):
user = UserFactory(is_superuser=True, is_staff=True)

assert user.is_superuser
assert user.is_staff

def test_email_field(self):
user = UserFactory(email="[email protected]")

assert user.email == "[email protected]"

def test_missing_email(self):
with pytest.raises(
IntegrityError,
match=(
'null value in column "email" of relation "users_user" violates not-null constraint'
),
):
UserFactory(email=None)

def test_missing_username(self):
with pytest.raises(
IntegrityError,
match=(
'null value in column "username" of relation "users_user" '
"violates not-null constraint"
),
):
UserFactory(username=None)

def test_get_username(self):
user = UserFactory(username="testuser")

assert user.get_username() == "testuser"

def test_is_active(self):
user = UserFactory(is_active=True)

assert user.is_active

def test_is_not_staff(self):
user = UserFactory(is_staff=False)

assert not user.is_staff

def test_is_not_superuser(self):
user = UserFactory(is_superuser=False)

assert not user.is_superuser

def test_set_unusable_password(self):
user = UserFactory()

assert user1.username == "user1"
assert user1.first_name == "first_name1"
assert user1.last_name == "last_name1"
assert user1.email == "[email protected]"
assert user1.check_password("password")
user.set_unusable_password()

assert user2.username == "user2"
assert user2.first_name == "first_name2"
assert user2.last_name == "last_name2"
assert user2.email == "[email protected]"
assert user2.check_password("password")
assert not user.has_usable_password()