1- import io
1+ import datetime as dt
22
33import pytest
4- from openpyxl .reader .excel import load_workbook
54from rest_framework .test import APIClient
5+ from time_machine import TimeMachineFixture
66
7- from tests .testapp .models import ExampleModel
7+ from tests .testapp .models import ExampleModel , AllFieldsModel , Tag
8+
9+ pytestmark = pytest .mark .django_db
810
911
1012@pytest .fixture
1113def api_client ():
1214 return APIClient ()
1315
1416
15- @pytest .mark .django_db
16- def test_simple_viewset_model (api_client ):
17+ def test_simple_viewset_model (api_client , workbook_reader ):
1718 ExampleModel .objects .create (title = "test 1" , description = "This is a test" )
1819 ExampleModel .objects .create (title = "test 2" , description = "Another test" )
1920 ExampleModel .objects .create (title = "test 3" , description = "Testing this out" )
@@ -29,11 +30,10 @@ def test_simple_viewset_model(api_client):
2930 response .headers ["content-disposition" ] == "attachment; filename=my_export.xlsx"
3031 )
3132
32- workbook_buffer = io .BytesIO (response .content )
33- workbook = load_workbook (workbook_buffer , read_only = True )
33+ wb = workbook_reader (response .content )
3434
35- assert len (workbook .worksheets ) == 1
36- sheet = workbook .worksheets [0 ]
35+ assert len (wb .worksheets ) == 1
36+ sheet = wb .worksheets [0 ]
3737 rows = list (sheet .rows )
3838 assert len (rows ) == 4
3939 r0 , r1 , r2 , r3 = rows
@@ -53,3 +53,43 @@ def test_simple_viewset_model(api_client):
5353 assert len (r3 ) == 2
5454 assert r3 [0 ].value == "test 3"
5555 assert r3 [1 ].value == "Testing this out"
56+
57+
58+ def test_all_fields_viewset (
59+ api_client , time_machine : TimeMachineFixture , workbook_reader
60+ ):
61+ time_machine .move_to (dt .datetime (2023 , 9 , 10 , 15 , 44 , 37 ))
62+ instance = AllFieldsModel .objects .create (title = "Hello" , age = 36 , is_active = True )
63+ instance .tags .set (
64+ [
65+ Tag .objects .create (name = "test" ),
66+ Tag .objects .create (name = "example" ),
67+ ]
68+ )
69+ response = api_client .get ("/all-fields/" )
70+ assert response .status_code == 200
71+
72+ wb = workbook_reader (response .content )
73+ sheet = wb .worksheets [0 ]
74+ rows = list (sheet .rows )
75+ assert len (rows ) == 2
76+ r0 , r1 = rows
77+
78+ assert [col .value for col in r0 ] == [
79+ "title" ,
80+ "created_at" ,
81+ "updated_date" ,
82+ "updated_time" ,
83+ "age" ,
84+ "is_active" ,
85+ "tags" ,
86+ ]
87+ assert [col .value for col in r1 ] == [
88+ "Hello" ,
89+ dt .datetime (2023 , 9 , 10 , 15 , 44 , 37 ),
90+ dt .datetime (2023 , 9 , 10 , 0 , 0 ),
91+ dt .time (15 , 44 , 37 ),
92+ 36 ,
93+ True ,
94+ "test, example" ,
95+ ]
0 commit comments