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

Add date range query to cyberstorm API #1043

Open
wants to merge 1 commit into
base: master
Choose a base branch
from
Open
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
243 changes: 243 additions & 0 deletions django/thunderstore/api/cyberstorm/tests/test_package_listing_list.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
from datetime import datetime, timedelta
from unittest.mock import patch

import pytest
from django.utils import timezone
from rest_framework.test import APIClient, APIRequestFactory

from thunderstore.api.cyberstorm.views.package_listing_list import (
Expand Down Expand Up @@ -609,6 +611,247 @@ def test_listing_by_community_view__when_package_listed_in_multiple_communities_
)


@pytest.mark.django_db
def test_listing_by_community_view__returns_created_recent(
api_client: APIClient,
community: Community,
) -> None:
now = timezone.now()
recent = PackageListingFactory(
community_=community,
package_kwargs={"date_created": now - timedelta(days=0)},
)
old = PackageListingFactory(
community_=community,
package_kwargs={"date_created": now - timedelta(days=6)},
)
PackageListingFactory(
community_=community,
package_kwargs={"date_created": now - timedelta(days=12)},
)

response = api_client.get(
f"/api/cyberstorm/listing/{community.identifier}/?created_recent=1",
)
result = response.json()

assert result["count"] == 1
assert any(item["name"] == recent.package.name for item in result["results"])

response = api_client.get(
f"/api/cyberstorm/listing/{community.identifier}/?created_recent=7",
)
result1 = response.json()

assert result1["count"] == 2

response = api_client.get(
f"/api/cyberstorm/listing/{community.identifier}/?created_recent=999",
)
result = response.json()

assert result["count"] == 3


@pytest.mark.django_db
def test_listing_by_community_view__returns_updated_recent(
api_client: APIClient,
community: Community,
) -> None:
now = timezone.now()
p1v1 = PackageVersionFactory(
version_number="1.0.0",
)
p1v1.date_created = now - timedelta(days=1)
p1v1.save()
p1v2 = PackageVersionFactory(
version_number="2.0.0",
package=p1v1.package,
)
p1v2.date_created = now - timedelta(days=10)
p1v2.save()
p1v3 = PackageVersionFactory(
version_number="3.0.0",
package=p1v1.package,
)
p1v3.date_created = now - timedelta(days=20)
p1v3.save()

p2v1 = PackageVersionFactory(
version_number="1.0.0",
)
p2v1.date_created = now - timedelta(days=20)
p2v1.save()
p2v2 = PackageVersionFactory(
version_number="2.0.0",
package=p2v1.package,
)
p2v2.date_created = now - timedelta(days=30)
p2v2.save()

p3v1 = PackageVersionFactory(
version_number="1.0.0",
)
p3v1.date_created = now - timedelta(days=365)
p3v1.save()

PackageListingFactory(
community_=community,
package=p1v1.package,
)
PackageListingFactory(
community_=community,
package=p2v1.package,
)
PackageListingFactory(
community_=community,
package=p3v1.package,
)

response = api_client.get(
f"/api/cyberstorm/listing/{community.identifier}/?updated_recent=7",
)
result = response.json()

assert result["count"] == 1
assert p1v2.package.name == result["results"][0]["name"]

response = api_client.get(
f"/api/cyberstorm/listing/{community.identifier}/?updated_recent=25",
)
result = response.json()

assert result["count"] == 2

response = api_client.get(
f"/api/cyberstorm/listing/{community.identifier}/??updated_recent=999",
)
result = response.json()

assert result["count"] == 3


@pytest.mark.django_db
def test_listing_by_community_view__returns_created_within_specified_date_range(
api_client: APIClient,
community: Community,
) -> None:
PackageListingFactory(
community_=community,
package_kwargs={"date_created": "2024-01-01 01:23:45Z"},
)
day7 = PackageListingFactory(
community_=community,
package_kwargs={"date_created": "2024-01-07 00:00:01Z"},
)
day14 = PackageListingFactory(
community_=community,
package_kwargs={"date_created": "2024-01-14 23:59:59Z"},
)

response = api_client.get(
f"/api/cyberstorm/listing/{community.identifier}/?created_before=2024-01-14&created_after=2024-01-07",
)
result1 = response.json()

assert result1["count"] == 2
assert any(item["name"] == day7.package.name for item in result1["results"])
assert any(item["name"] == day14.package.name for item in result1["results"])

response = api_client.get(
f"/api/cyberstorm/listing/{community.identifier}/?created_after=2024-01-07",
)
result2 = response.json()

assert result2["count"] == 2
assert any(item["name"] == day7.package.name for item in result2["results"])
assert any(item["name"] == day14.package.name for item in result2["results"])

response = api_client.get(
f"/api/cyberstorm/listing/{community.identifier}/?created_before=2024-01-06",
)
result3 = response.json()

assert result3["count"] == 1


@pytest.mark.django_db
def test_listing_by_community_view__returns_updated_within_specified_date_range(
api_client: APIClient,
community: Community,
) -> None:
p1v1 = PackageVersionFactory(
version_number="1.0.0",
)
p1v1.date_created = datetime(2024, 1, 1, 0, 0, 0, 0, timezone.utc)
p1v1.save()
p1v2 = PackageVersionFactory(
version_number="2.0.0",
package=p1v1.package,
)
p1v2.date_created = datetime(2024, 1, 7, 0, 0, 0, 0, timezone.utc)
p1v2.save()
p1v3 = PackageVersionFactory(
version_number="3.0.0",
package=p1v1.package,
)
p1v3.date_created = datetime(2024, 1, 14, 0, 0, 0, 0, timezone.utc)
p1v3.save()

p2v1 = PackageVersionFactory(
version_number="1.0.0",
)
p2v1.date_created = datetime(2024, 1, 3, 0, 0, 0, 0, timezone.utc)
p2v1.save()
p2v2 = PackageVersionFactory(
version_number="2.0.0",
package=p2v1.package,
)
p2v2.date_created = datetime(2024, 1, 14, 0, 0, 0, 0, timezone.utc)
p2v2.save()

p3v1 = PackageVersionFactory(
version_number="1.0.0",
)
p3v1.date_created = datetime(2024, 2, 1, 0, 0, 0, 0, timezone.utc)
p3v1.save()

PackageListingFactory(
community_=community,
package=p1v1.package,
)
PackageListingFactory(
community_=community,
package=p2v1.package,
)
PackageListingFactory(
community_=community,
package=p3v1.package,
)

response = api_client.get(
f"/api/cyberstorm/listing/{community.identifier}/?updated_before=2024-01-10&updated_after=2024-01-05",
)
result = response.json()

assert result["count"] == 1
assert p1v2.package.name == result["results"][0]["name"]

response = api_client.get(
f"/api/cyberstorm/listing/{community.identifier}/?updated_before=2024-01-02",
)
result = response.json()

assert result["count"] == 1

response = api_client.get(
f"/api/cyberstorm/listing/{community.identifier}/?updated_after=2024-01-05",
)
result = response.json()

assert result["count"] == 3


@pytest.mark.django_db
def test_listing_by_community_view__does_not_return_rejected_packages(
api_client: APIClient,
Expand Down
Loading
Loading