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
16 changes: 16 additions & 0 deletions core/serializers.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
from rest_framework import serializers

from . import models


class AcceptedNFTSerializer(serializers.ModelSerializer):
listings_count = serializers.SerializerMethodField()

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

def get_listings_count(self, obj: models.AcceptedNFT) -> int:
return models.Listing.objects.filter(
nft_contract_address=obj.contract_address
).count()
Empty file added core/tests/__init__.py
Empty file.
16 changes: 16 additions & 0 deletions core/tests/factories.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
import random

import factory

from core import models


class AcceptedNFTFactory(factory.django.DjangoModelFactory):
class Meta:
model = models.AcceptedNFT

name = factory.Faker("word")

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

from . import factories


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

def test_accepted_nft_list_view_successful(self):
response = self.client.get(self.url)
self.assertEqual(response.status_code, 200)

def test_accepted_nft_list_view_with_data(self):
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):
factories.AcceptedNFTFactory()
factories.AcceptedNFTFactory()
factories.AcceptedNFTFactory()
10 changes: 9 additions & 1 deletion core/urls.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,11 @@
from django.urls import path # noqa

urlpatterns = []
from . import views

urlpatterns = [
path(
"accepted-nfts/",
views.AcceptedNFTListAPIView.as_view(),
name="accepted-nfts-list-view",
)
]
8 changes: 8 additions & 0 deletions core/views.py
Original file line number Diff line number Diff line change
@@ -1 +1,9 @@
# Create your views here.
from rest_framework.generics import ListAPIView

from . import models, serializers


class AcceptedNFTListAPIView(ListAPIView):
queryset = models.AcceptedNFT.objects.all().order_by("name")
serializer_class = serializers.AcceptedNFTSerializer
34 changes: 33 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 @@ -17,6 +17,7 @@ pre-commit = "^4.1.0"
dj-database-url = "^2.3.0"
django-cors-headers = "^4.7.0"
psycopg2-binary = "^2.9.10"
factory-boy = "3.3.0"

[tool.poetry.group.dev.dependencies]
black = "^23.9.1"
Expand Down