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
2 changes: 1 addition & 1 deletion pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,7 @@ build-backend = "setuptools.build_meta"
write_to = "drf_excel/_version.py"

[tool.pytest.ini_options]
addopts = "--cov --cov-report=html"
addopts = "--cov --cov-report=html --cov-report=term"
python_files = "tests.py test_*.py"
DJANGO_SETTINGS_MODULE = "tests.settings"

Expand Down
1 change: 1 addition & 0 deletions tests/settings.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@

USE_TZ = True
TIME_ZONE = "UTC"
ROOT_URLCONF = "tests.urls"

INSTALLED_APPS = [
"django.contrib.auth",
Expand Down
49 changes: 49 additions & 0 deletions tests/test_viewset_mixin.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
import io

import pytest
from openpyxl.reader.excel import load_workbook
from rest_framework.test import APIClient

from tests.testapp.models import ExampleModel

@pytest.fixture
def api_client():
return APIClient()


@pytest.mark.django_db
def test_simple_viewset_model(api_client):
ExampleModel.objects.create(title="test 1", description="This is a test")
ExampleModel.objects.create(title="test 2", description="Another test")
ExampleModel.objects.create(title="test 3", description="Testing this out")

response = api_client.get("/examples/")

assert response.status_code == 200
assert response.headers["Content-Type"] == "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet; charset=utf-8"
assert response.headers["content-disposition"] == "attachment; filename=my_export.xlsx"

workbook_buffer = io.BytesIO(response.content)
workbook = load_workbook(workbook_buffer, read_only=True)

assert len(workbook.worksheets) == 1
sheet = workbook.worksheets[0]
rows = list(sheet.rows)
assert len(rows) == 4
r0, r1, r2, r3 = rows

assert len(r0) == 2
assert r0[0].value == "title"
assert r0[1].value == "description"

assert len(r1) == 2
assert r1[0].value == "test 1"
assert r1[1].value == "This is a test"

assert len(r2) == 2
assert r2[0].value == "test 2"
assert r2[1].value == "Another test"

assert len(r3) == 2
assert r3[0].value == "test 3"
assert r3[1].value == "Testing this out"
9 changes: 9 additions & 0 deletions tests/testapp/models.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
from django.db import models


class ExampleModel(models.Model):
title = models.CharField(max_length=100)
description = models.TextField()

def __str__(self):
return self.title
9 changes: 9 additions & 0 deletions tests/testapp/serializers.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
from rest_framework import serializers

from .models import ExampleModel


class ExampleSerializer(serializers.ModelSerializer):
class Meta:
model = ExampleModel
fields = ("title", "description")
13 changes: 13 additions & 0 deletions tests/testapp/views.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
from rest_framework.viewsets import ReadOnlyModelViewSet
from drf_excel.mixins import XLSXFileMixin
from drf_excel.renderers import XLSXRenderer

from .models import ExampleModel
from .serializers import ExampleSerializer


class ExampleViewSet(XLSXFileMixin, ReadOnlyModelViewSet):
queryset = ExampleModel.objects.all()
serializer_class = ExampleSerializer
renderer_classes = (XLSXRenderer,)
filename = "my_export.xlsx"
8 changes: 8 additions & 0 deletions tests/urls.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
from rest_framework import routers

from .testapp.views import ExampleViewSet

router = routers.SimpleRouter()
router.register(r'examples', ExampleViewSet)

urlpatterns = router.urls