Skip to content
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
8 changes: 8 additions & 0 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,10 @@ migrations:
migrate:
poetry run python manage.py migrate

# run test
test:
poetry run python manage.py test

# start database
database-up:
docker compose up trajectfi_db -d
Expand Down Expand Up @@ -60,6 +64,10 @@ docker-migrations:
docker-migrate:
docker compose run --rm ${service} python manage.py migrate

# run tests with docker
docker-test:
docker compose run --rm ${service} python manage.py test

# to format the codebase with docker
docker-format:
docker compose run --rm ${service} black .
Expand Down
35 changes: 35 additions & 0 deletions core/serializers.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,17 @@


class AcceptedNFTSerializer(serializers.ModelSerializer):
"""
Serializer class for AcceptedNFT Model.
Additionally return a number of listings that uses
the nfts's contract address

Fields:
- name
- contract_address
- listing_count
"""

listings_count = serializers.SerializerMethodField()

class Meta:
Expand All @@ -14,3 +25,27 @@ def get_listings_count(self, obj: models.AcceptedNFT) -> int:
return models.Listing.objects.filter(
nft_contract_address=obj.contract_address
).count()


class AcceptedTokenSerializer(serializers.ModelSerializer):
"""
Serializer class for AcceptedToken Model.
Additionally return a number of listings that uses
the token's contract address

Fields:
- name
- contract_address
- listing_count
"""

listings_count = serializers.SerializerMethodField()

class Meta:
model = models.AcceptedToken
fields = ["name", "contract_address", "listings_count"]

def get_listings_count(self, obj: models.AcceptedNFT) -> int:
return models.Listing.objects.filter(
token_contract_address=obj.contract_address
).count()
11 changes: 11 additions & 0 deletions core/tests/factories.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,3 +14,14 @@ class Meta:
@factory.lazy_attribute
def contract_address(self):
return "0x" + "".join(random.choices("0123456789abcdef", k=60))


class AcceptedTokenFactory(factory.django.DjangoModelFactory):
class Meta:
model = models.AcceptedToken

name = factory.Faker("word")

@factory.lazy_attribute
def contract_address(self):
return "0x" + "".join(random.choices("0123456789abcdef", k=60))
34 changes: 34 additions & 0 deletions core/tests/test_accepted_tokens..py
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
from django.urls import reverse
from rest_framework.test import APITestCase

from . import factories


class TestAcceptedTokenListAPIView(APITestCase):
def setUp(self):
self.url = reverse("accepted-tokens-list-view")

def test_accepted_token_list_view_successful(self):
"""
Test for the success response of the api
"""
response = self.client.get(self.url)
self.assertEqual(response.status_code, 200)

def test_accepted_token_list_view_with_data(self):
"""
Test for the success response of the api with data in the db
"""
self._generate_data()
response = self.client.get(self.url)
self.assertEqual(response.status_code, 200)
data = response.json()
self.assertEqual(len(data), 3)

def _generate_data(self):
"""
Generate mock data in the db using the factory
"""
factories.AcceptedTokenFactory()
factories.AcceptedTokenFactory()
factories.AcceptedTokenFactory()
9 changes: 7 additions & 2 deletions core/urls.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
from django.urls import path # noqa
from django.urls import path

from . import views

Expand All @@ -7,5 +7,10 @@
"accepted-nfts/",
views.AcceptedNFTListAPIView.as_view(),
name="accepted-nfts-list-view",
)
),
path(
"accepted-tokens/",
views.AcceptedTokenListAPIView.as_view(),
name="accepted-tokens-list-view",
),
]
5 changes: 5 additions & 0 deletions core/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,3 +7,8 @@
class AcceptedNFTListAPIView(ListAPIView):
queryset = models.AcceptedNFT.objects.all().order_by("name")
serializer_class = serializers.AcceptedNFTSerializer


class AcceptedTokenListAPIView(ListAPIView):
queryset = models.AcceptedToken.objects.all().order_by("name")
serializer_class = serializers.AcceptedTokenSerializer