Skip to content
This repository was archived by the owner on Jun 13, 2025. It is now read-only.

Commit 468b5dc

Browse files
committed
add tests
1 parent abe8aa6 commit 468b5dc

File tree

2 files changed

+125
-5
lines changed

2 files changed

+125
-5
lines changed

codecov_auth/tests/unit/views/test_base.py

Lines changed: 123 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
from datetime import datetime, timedelta
1+
from datetime import datetime, timedelta, timezone
22
from unittest.mock import Mock, patch
33

44
import pytest
@@ -8,10 +8,15 @@
88
from django.http import HttpResponse
99
from django.test import RequestFactory, TestCase, override_settings
1010
from freezegun import freeze_time
11-
from shared.django_apps.codecov_auth.tests.factories import OwnerFactory, UserFactory
11+
from shared.django_apps.codecov_auth.tests.factories import (
12+
OwnerFactory,
13+
SessionFactory,
14+
UserFactory,
15+
)
1216
from shared.license import LicenseInformation
1317

14-
from codecov_auth.models import Owner, OwnerProfile
18+
from codecov_auth.models import DjangoSession, Owner, OwnerProfile, Session
19+
from codecov_auth.tests.factories import DjangoSessionFactory
1520
from codecov_auth.views.base import LoginMixin, StateMixin
1621

1722

@@ -729,3 +734,118 @@ def test_login_authenticated_with_claimed_owner(self):
729734
# does not re-claim owner
730735
assert owner.user is not None
731736
assert owner.user != user
737+
738+
@patch("services.refresh.RefreshService.trigger_refresh", lambda *args: None)
739+
def test_login_owner_with_expired_login_session(self):
740+
user = UserFactory()
741+
owner = OwnerFactory(service="github", user=user)
742+
743+
another_user = UserFactory()
744+
another_owner = OwnerFactory(service="github", user=another_user)
745+
746+
now = datetime.now(timezone.utc)
747+
748+
# Create a session that will be deleted
749+
to_be_deleted_1 = SessionFactory(
750+
owner=owner,
751+
type="login",
752+
name="to_be_deleted",
753+
lastseen="2021-01-01T00:00:00+00:00",
754+
login_session=DjangoSessionFactory(expire_date=now - timedelta(days=1)),
755+
)
756+
to_be_deleted_1_session_key = to_be_deleted_1.login_session.session_key
757+
758+
# Create a session that will not be deleted because its not a login session
759+
to_be_kept_1 = SessionFactory(
760+
owner=owner,
761+
type="api",
762+
name="to_be_kept",
763+
lastseen="2021-01-01T00:00:00+00:00",
764+
login_session=DjangoSessionFactory(expire_date=now + timedelta(days=1)),
765+
)
766+
767+
# Create a session that will not be deleted because it's not expired
768+
to_be_kept_2 = SessionFactory(
769+
owner=owner,
770+
type="login",
771+
name="to_be_kept",
772+
lastseen="2021-01-01T00:00:00+00:00",
773+
login_session=DjangoSessionFactory(expire_date=now + timedelta(days=1)),
774+
)
775+
776+
# Create a session that will not be deleted because it's not the owner's session
777+
to_be_kept_3 = SessionFactory(
778+
owner=another_owner,
779+
type="login",
780+
name="to_be_kept",
781+
lastseen="2021-01-01T00:00:00+00:00",
782+
login_session=DjangoSessionFactory(expire_date=now - timedelta(seconds=1)),
783+
)
784+
785+
assert (
786+
len(DjangoSession.objects.filter(session_key=to_be_deleted_1_session_key))
787+
== 1
788+
)
789+
assert (
790+
len(
791+
DjangoSession.objects.filter(
792+
session_key=to_be_kept_1.login_session.session_key
793+
)
794+
)
795+
== 1
796+
)
797+
assert (
798+
len(
799+
DjangoSession.objects.filter(
800+
session_key=to_be_kept_2.login_session.session_key
801+
)
802+
)
803+
== 1
804+
)
805+
assert (
806+
len(
807+
DjangoSession.objects.filter(
808+
session_key=to_be_kept_3.login_session.session_key
809+
)
810+
)
811+
== 1
812+
)
813+
814+
self.request.user = user
815+
self.mixin_instance.login_owner(owner, self.request, HttpResponse())
816+
owner.refresh_from_db()
817+
818+
new_login_session = Session.objects.filter(name=None)
819+
820+
assert len(new_login_session) == 1
821+
assert len(Session.objects.filter(name="to_be_deleted").all()) == 0
822+
assert len(Session.objects.filter(name="to_be_kept").all()) == 3
823+
824+
assert (
825+
len(DjangoSession.objects.filter(session_key=to_be_deleted_1_session_key))
826+
== 0
827+
)
828+
assert (
829+
len(
830+
DjangoSession.objects.filter(
831+
session_key=to_be_kept_1.login_session.session_key
832+
)
833+
)
834+
== 1
835+
)
836+
assert (
837+
len(
838+
DjangoSession.objects.filter(
839+
session_key=to_be_kept_2.login_session.session_key
840+
)
841+
)
842+
== 1
843+
)
844+
assert (
845+
len(
846+
DjangoSession.objects.filter(
847+
session_key=to_be_kept_3.login_session.session_key
848+
)
849+
)
850+
== 1
851+
)

codecov_auth/views/base.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -470,10 +470,10 @@ def delete_expired_sessions_and_django_sessions(self, owner: Owner) -> None:
470470

471471
# Delete the rows in the Session table using sessionid
472472
Session.objects.filter(
473-
sessionid__in=expired_sessions.values_list("sessionid", flat=True)
473+
sessionid__in=[es.sessionid for es in expired_sessions]
474474
).delete()
475475

476476
# Delete the rows in the DjangoSession table using the extracted keys
477477
DjangoSession.objects.filter(
478-
pk__in=expired_sessions.values_list("login_session_id", flat=True)
478+
session_key__in=[es.login_session for es in expired_sessions]
479479
).delete()

0 commit comments

Comments
 (0)