1
- import io
1
+ import datetime as dt
2
2
3
3
import pytest
4
- from openpyxl .reader .excel import load_workbook
5
4
from rest_framework .test import APIClient
5
+ from time_machine import TimeMachineFixture
6
6
7
- from tests .testapp .models import ExampleModel
7
+ from tests .testapp .models import ExampleModel , AllFieldsModel , Tag
8
+
9
+ pytestmark = pytest .mark .django_db
8
10
9
11
10
12
@pytest .fixture
11
13
def api_client ():
12
14
return APIClient ()
13
15
14
16
15
- @pytest .mark .django_db
16
- def test_simple_viewset_model (api_client ):
17
+ def test_simple_viewset_model (api_client , workbook_reader ):
17
18
ExampleModel .objects .create (title = "test 1" , description = "This is a test" )
18
19
ExampleModel .objects .create (title = "test 2" , description = "Another test" )
19
20
ExampleModel .objects .create (title = "test 3" , description = "Testing this out" )
@@ -29,11 +30,10 @@ def test_simple_viewset_model(api_client):
29
30
response .headers ["content-disposition" ] == "attachment; filename=my_export.xlsx"
30
31
)
31
32
32
- workbook_buffer = io .BytesIO (response .content )
33
- workbook = load_workbook (workbook_buffer , read_only = True )
33
+ wb = workbook_reader (response .content )
34
34
35
- assert len (workbook .worksheets ) == 1
36
- sheet = workbook .worksheets [0 ]
35
+ assert len (wb .worksheets ) == 1
36
+ sheet = wb .worksheets [0 ]
37
37
rows = list (sheet .rows )
38
38
assert len (rows ) == 4
39
39
r0 , r1 , r2 , r3 = rows
@@ -53,3 +53,43 @@ def test_simple_viewset_model(api_client):
53
53
assert len (r3 ) == 2
54
54
assert r3 [0 ].value == "test 3"
55
55
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