django-camomilla-cms 6.0.0b17__py2.py3-none-any.whl → 6.0.1__py2.py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,4 +1,4 @@
1
- camomilla/__init__.py,sha256=xH1i4zwYfJScQn-ySoem00poi295diBqrVChxqcmkW8,251
1
+ camomilla/__init__.py,sha256=Chd2aJ9tllc6G4Js9yDbwgQf9Z4QYydv95s0ijUTuIc,243
2
2
  camomilla/apps.py,sha256=eUwb9ynyiRAc5OXgt7ZsAdhsCOnPCpNdIFYMheNeN-o,532
3
3
  camomilla/authentication.py,sha256=jz6tQT4PPEu-_JLox1LZrOy7EiWBb9MWaObK63MJGus,855
4
4
  camomilla/context_processors.py,sha256=cGowjDZ-oDGYn1j2Pj5QDGCqnzXAOdOwp5dmzin_FTc,165
@@ -9,7 +9,7 @@ camomilla/model_api.py,sha256=-7l3fc2eN1itCMzkWA8nFaQXMmz0vs7IlGlShF-gSuo,2487
9
9
  camomilla/parsers.py,sha256=fL8XGCGPxJIZNZkPdGtnPSbDP-6-yzGOCVMuLPjkx9Y,1975
10
10
  camomilla/permissions.py,sha256=9NlBO4JMmg36vXCUjPNyq6uZxhkdrnXyIbJVLtWhGWE,1813
11
11
  camomilla/redirects.py,sha256=ilcyHidb5Iw3jTrXMnPntr50kkl_WB3QOB0VNkIxP7A,263
12
- camomilla/settings.py,sha256=nY-a1PRhbQ_edvNG5WyndPLWxwsRb_h4eFAjmOHvKYM,3599
12
+ camomilla/settings.py,sha256=yyQFUHAIyzqemWFbwvBCUPGQuB7KmhmnH_Mu9J20SQI,4116
13
13
  camomilla/sitemap.py,sha256=U2t5TwhB_-sEscmQZ69PZ5st3bIap8NRxzWEvCgB130,786
14
14
  camomilla/translation.py,sha256=_QyfTlKG6hQ_ClRfxzeJ-3oI3Nu5peJN9xFkO9Ib3As,1316
15
15
  camomilla/urls.py,sha256=XgaeFoG2eXlJQve3KmFKlD-74CMLW1ziaY1mq-lrAiA,2095
@@ -28,7 +28,7 @@ camomilla/models/article.py,sha256=LgkZgRsubtDV6NwBz8E2bIgKD6H3I-1QLAxEan5TYYs,1
28
28
  camomilla/models/content.py,sha256=mIgtifb_WMIt58we5u6qWZemHvuDN1zZaBeCyzHL78A,956
29
29
  camomilla/models/media.py,sha256=pD-qldiHDOOHgux4lsivQLBcOJJrRx3a4Bg8ODNx7r0,6852
30
30
  camomilla/models/menu.py,sha256=hUszPcn1prWCDhk4RPvbITmyhsB2CjFkaerx9t1GWnc,3766
31
- camomilla/models/page.py,sha256=lkZPdPkl8Yxpz_NfYrpr7Myp8hB3bEAGtdJwKBR7_cg,19385
31
+ camomilla/models/page.py,sha256=czbiKiEje4mj229_XsLMv1mOr7JzbnAD-MIMvSb9tF0,19132
32
32
  camomilla/models/mixins/__init__.py,sha256=c2NixqvrIX4E9WGRqQbylXlqBWDXEqN9mzs_dpB0hFQ,1248
33
33
  camomilla/openapi/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
34
34
  camomilla/openapi/schema.py,sha256=C22dhKjaJ2DTK4KWFjyMJXiwe8NLy7ZTW5d-I1dqZ7g,2546
@@ -41,7 +41,7 @@ camomilla/serializers/page.py,sha256=NNjEypVYu_9iKqdHV_-61ea37gxiHlDP5gsloV_i6yg
41
41
  camomilla/serializers/user.py,sha256=CzrHiVRvYYWNE4eNpCNKtJB7DjVqHHwIcP4NUBXMHSo,3706
42
42
  camomilla/serializers/utils.py,sha256=XRL4CNwQDBNpX8xT7365Dw2Cyx8Kvh18GaadgjS9awk,968
43
43
  camomilla/serializers/validators.py,sha256=X2uBlh348nJjUWHPtiu9XKCD7Etsdg0811a4xHLAUzU,2103
44
- camomilla/serializers/base/__init__.py,sha256=maaL3y6tvc5Ph9y07KVcMvZVYTkzh_3aBiBnGCoi1EA,799
44
+ camomilla/serializers/base/__init__.py,sha256=fAUS9AZe61Nj_LlqOpImwLsW5QHG7i-SqbdorREmYPc,900
45
45
  camomilla/serializers/fields/__init__.py,sha256=0I_E9oMtlC0H48LjStMQZiZ-Ycoy49nWK9GvA5JWxN8,145
46
46
  camomilla/serializers/fields/file.py,sha256=yjKMho2ti9TIAzo6nwyLnNPJ6GVUumL2wxhegvYqI2o,800
47
47
  camomilla/serializers/fields/related.py,sha256=qQQeUxIZSNqnVRHsXocLGmBNHjAvrlr0eDY9K2uCjWk,5069
@@ -60,7 +60,7 @@ camomilla/storages/default.py,sha256=GNzvV_JZpXMcfTkyXjw5CfK8EIBi3o-NXYBO0KAxD5M
60
60
  camomilla/storages/optimize.py,sha256=VGSXZigzZC8LnPTqyTOpPA2Ba9EJB_KC5bcACoRs4GA,2762
61
61
  camomilla/storages/overwrite.py,sha256=jvW3zHvXNzH9dIjeZmmfXo_O3K1ZQmLQzmlSKAOE8ZA,360
62
62
  camomilla/templates/admin/camomilla/page/change_form.html,sha256=ig7rRUtylDZMINBQuVPpZLmeB4sOTV_VtqnTgzAyxEo,251
63
- camomilla/templates/defaults/base.html,sha256=pklt7Pif3g9d7gwgRxCQj7gniJaHD14ZqZID_xIlC0A,6638
63
+ camomilla/templates/defaults/base.html,sha256=C2gCnQP1AkERPv5w00nVhZdfg2h_8DMoIkmdf2I-VVY,8166
64
64
  camomilla/templates/defaults/articles/default.html,sha256=1f89jBvNtTa1mPAbC91yy8CzeAjTWO3hhQsTuQW5OKg,239
65
65
  camomilla/templates/defaults/pages/default.html,sha256=bP81Qb6M56I-fBJMywWwEu_cnERtWIX28UkGrUSRU6M,144
66
66
  camomilla/templates/defaults/parts/langswitch.html,sha256=AkaQzb2KNjRYCMLUn_jE31V36rwBIwp4MneirWPiBcI,3424
@@ -72,10 +72,11 @@ camomilla/templates_context/rendering.py,sha256=GfTR45_gC7WT7zTKPVXkBDwe22uF63A-
72
72
  camomilla/templatetags/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
73
73
  camomilla/templatetags/camomilla_filters.py,sha256=35x0-cWrRHeLhqypSLlJzEFY_fQDcRHiwZQpFgIsspE,692
74
74
  camomilla/templatetags/menus.py,sha256=7fc4f9DDqtqG6wNb5_Q0km-fq0mqvGnbpR21qO1TJUw,960
75
- camomilla/theme/__init__.py,sha256=3ahSYJ-HBLHrW2VZ45mAM6mlZvpqDKPffxhE0EkD9as,30
76
- camomilla/theme/apps.py,sha256=3nCSZ6d4tkx2aMNNnQQoqX8PGrrMNf4VxCxBV_JXNrA,1040
75
+ camomilla/templatetags/model_extras.py,sha256=6WfVDYP_OfuVJd3cNGNA55Wj9uWdrbfOZQ0ua9Xt_vc,2257
76
+ camomilla/theme/__init__.py,sha256=unmO3xtN2S1e9meUbIjG3AZVyKxUe4HSZNXDOcpZRJg,22
77
+ camomilla/theme/apps.py,sha256=Ue2H80fbFgxkQyHeU2H0fWs9Y6d-EnHYv4zz824FSRk,1066
77
78
  camomilla/theme/admin/__init__.py,sha256=TALAZaE-gWshSeGc6yy7VahdX5UfeCeoOE9Q5kJCEpM,2270
78
- camomilla/theme/admin/pages.py,sha256=y3rL1nwZlytyD-YR_qqLiBAmjCAjkBY3v56V6JdhBvY,1908
79
+ camomilla/theme/admin/pages.py,sha256=HHi8dxjqffjMQGIRpOVNgQZhtKSSx3pFIctbqoZ9J2I,2614
79
80
  camomilla/theme/admin/translations.py,sha256=iAjGM1A1aYrsz1FpeybROk6rn3Ddl_oUCwgU5oD8nSw,308
80
81
  camomilla/theme/static/admin/css/responsive.css,sha256=yGq6qXrr8xEVsXTnprIBgkX-sMGZrNf0Kkh-xDxf6yE,157
81
82
  camomilla/theme/static/admin/img/favicon.ico,sha256=qpKv_2MaGILvyihnD1Vq9Yk-ZXGkxWTW26ciMeBFMYU,15406
@@ -88,7 +89,7 @@ camomilla/utils/normalization.py,sha256=RDCZtjwpEEwjvfUjQl2bEWFKw7NxTzkXco72VeO2
88
89
  camomilla/utils/query_parser.py,sha256=TUScPzPVVJzaKdqy5NqtMOft3H5Bx6liXTVPM1yjH24,6303
89
90
  camomilla/utils/seo.py,sha256=8p_a_TGgohenpJb094tT4mMxbn2xzW0qDILuTnjNocM,3324
90
91
  camomilla/utils/setters.py,sha256=LV57SM65rL1_ZQkVzk9al_Q13lndVywXLkqgfIvgS0Y,915
91
- camomilla/utils/templates.py,sha256=Lv4-5019cnM30HmdZnYWiU5gxry-eFZVAhwOofGQRDs,598
92
+ camomilla/utils/templates.py,sha256=NAvvuv-fwu9CIxQY5t0RKs4GiFClOBZa9pOtcH_YP6s,1576
92
93
  camomilla/utils/translation.py,sha256=w5tvTInDLegWBb1TnDWo09ckKY3K6hajuNNsngZIxPQ,4205
93
94
  camomilla/views/__init__.py,sha256=94QuOnnbfMMb17mruO2ydUt286-8zBmDxEPWrJv5Wog,178
94
95
  camomilla/views/articles.py,sha256=qGxebOA5iTbGGe9PfbH40YBoDPKktH8FJongg6rh2R8,571
@@ -100,33 +101,34 @@ camomilla/views/menus.py,sha256=Kpygnf3tMKJ30gcblUES2NW83A37Vy75ecSGSvExGKM,3301
100
101
  camomilla/views/pages.py,sha256=UL74_u-18QdAkjVl74AVWZbRarEdIPrANTzdcM4iqmE,1338
101
102
  camomilla/views/tags.py,sha256=XcYRlcBFSPPY32lt7POb6fWPJL_8HsTo5JcHcAOiOKw,479
102
103
  camomilla/views/users.py,sha256=_fvsKOEtep4SJLvMva2_q-HdLQT_1KlFNt4wcl3xCJk,3130
103
- camomilla/views/base/__init__.py,sha256=t-7tqY_ep4Xi8YgB1sXDgNWQ5oh2YEUlfQWU5pltwJ0,1063
104
+ camomilla/views/base/__init__.py,sha256=bpbVBGXLTy7No95XyDNB2U8hVXmwQJrF1VjLAS5WH90,1232
104
105
  camomilla/views/mixins/__init__.py,sha256=Znv3fLYVy6lgu03Q_D8fTen4zMxI6VSRaLPDU8Cp7Ws,473
105
106
  camomilla/views/mixins/bulk_actions.py,sha256=i0duWW6wey9m7I_V8-gPcHsbJyPEfSdMdj4h2i-CbPw,787
106
107
  camomilla/views/mixins/language.py,sha256=hfnYznlVMrMLBdJ_f8dChJWENg7Kpt9m1yqavrdLm7E,1299
107
108
  camomilla/views/mixins/optimize.py,sha256=iRPNkoeIIlJugk7DjJhDPaqeX7Opi7TxnUoMDnxJxUk,686
108
109
  camomilla/views/mixins/ordering.py,sha256=mh7fqPyVCVJh84Nl2pYFQouzGxa-ANF3Wqv0pCb7OVU,4779
109
- camomilla/views/mixins/pagination.py,sha256=NWerBdMyBt4Kswig4fbANqGTzsll8SJdE6a8_UIoueU,5772
110
+ camomilla/views/mixins/pagination.py,sha256=Ssa5mMgAgyl7sUk0yum2uVifg6esdGmUTqMSJYacE40,5772
110
111
  camomilla/views/mixins/permissions.py,sha256=TPmR3Hoa3BjeJu9rCE_7lpLOAupue4WI42C21HTo6X4,200
111
- django_camomilla_cms-6.0.0b17.dist-info/licenses/LICENSE,sha256=kVS7zDrNkav2hLLXbOJwVdonY2ToApTK3khyJagGQoQ,1063
112
+ django_camomilla_cms-6.0.1.dist-info/licenses/LICENSE,sha256=kVS7zDrNkav2hLLXbOJwVdonY2ToApTK3khyJagGQoQ,1063
112
113
  tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
114
+ tests/test_admin_page_form.py,sha256=DRJxekEKeYMCf9q62ax7iBeJGhEP2NZ8o02krZBR_DA,1971
113
115
  tests/test_api.py,sha256=t03EFDezGgm4UJl8RIVvnTUkAGTB6ptm0G2lHBQ7ljc,1833
114
- tests/test_camomilla_filters.py,sha256=5LlR3tctGu6qxVmOrY52AGh_ACvEzdAvkwH2v7medpo,1536
115
- tests/test_media.py,sha256=IG-cigWxDnsq54DRVaPO2O0lcsnutfKRsqPTTR8W1E8,4183
116
- tests/test_menu.py,sha256=HyEdDzTDsLtNzsTNGjjZ6SCrgTXRU3FkKviUOacnYRg,3582
117
- tests/test_model_api.py,sha256=Ne8YlXTH2cqP5gzOc8UKjJuh0t-NaKHh5Ol9krpVHQg,3768
118
- tests/test_model_api_permissions.py,sha256=7CSb4-yIOfycAL_vXvh1dE2whx7k0gNkWl9LO0yzy4I,1801
119
- tests/test_model_api_register.py,sha256=9pqf7fvtniw63ZD4P2JItfDC0brD55vIrqjZ4phm_qs,14016
116
+ tests/test_camomilla_filters.py,sha256=rUK8iEyUNH28uTd8Ac13OikiH4Xi-V4wbtS-XjJoG24,1580
117
+ tests/test_media.py,sha256=n5PQmpMvw-a2epmq_60R0X-vVOa4BeyKMZkguGJzKa0,5243
118
+ tests/test_menu.py,sha256=hrTikgXNnry1bS-t5K7UGYreEJ3m-FU0r4pduumwTd4,3791
119
+ tests/test_model_api.py,sha256=ml3OlLuBfcnr2EMjwQLvVDPT2adSQ7WS4IxxXKD1InU,4121
120
+ tests/test_model_api_permissions.py,sha256=lUlcYAOasFFQjMFnqhGXlXriCH-f6xdYSCn1Gqf1eSU,1838
121
+ tests/test_model_api_register.py,sha256=txKaVTGt-DGrmI-6xcUEluPd7ArNi80VvlqBVXdH8zk,13555
120
122
  tests/test_models.py,sha256=WJs8lxWZWn1l7X3a_QFVc8fF5LHTsI8bc3uhQe6-o-Q,684
121
- tests/test_pages.py,sha256=qIVdfmbtx7GKHyNWHhirR58gGr9zjfrrzXXkvYlLusc,11469
123
+ tests/test_pages.py,sha256=aXKI0l12lc6jmY3uJXDNwznVNH7SEIiujANvSo_rhIo,11911
122
124
  tests/test_query_parser.py,sha256=R9l0L2QDEDcm2b6IFUhyf7wMXLzL9RySLkzKTWRtBkE,2097
123
- tests/test_templates_context.py,sha256=D72ufRqCGjInGGXHSNVhlJ1HcWG0zMqrAiTuiaU057k,4694
124
- tests/test_utils.py,sha256=o_FG7XOxLePOBfwBr4sk09gej0onWNw9t2-gSjGmgNg,3741
125
- tests/fixtures/__init__.py,sha256=NGj22kLV65v56IpOrOVqSkPhJePTXD4QjuuZhZSMwfQ,460
125
+ tests/test_templates_context.py,sha256=zGdmbQMGNXB2V_15BaQDIgqFMnVjBAw969n1tu3m7HY,5626
126
+ tests/test_utils.py,sha256=ow4csGfU5WzMgAT5zWjZIxZwW1-BqnMduDt8hOzf9cE,2166
127
+ tests/fixtures/__init__.py,sha256=ixyA6ZsmYbiKEsjQGOGoG4KyJmwWrf-qeoQjQG3J66U,426
126
128
  tests/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
127
129
  tests/utils/api.py,sha256=TYcDXeILHtBwzwG0acwPFmiqMZnlF9VnLB0Ydhg55vA,865
128
- tests/utils/media.py,sha256=ChsoHqwWmVYHE7teFsV9swTqBEFD0zcvQSBuKsK9G_s,298
129
- django_camomilla_cms-6.0.0b17.dist-info/METADATA,sha256=oiU3jK3ZCjQurWBdq2vaUZgBr2OMim4RLEjSPtIVm28,2565
130
- django_camomilla_cms-6.0.0b17.dist-info/WHEEL,sha256=oSJJyWjO7Z2XSScFQUpXG1HL-N0sFMqqeKVVbZTPkWc,109
131
- django_camomilla_cms-6.0.0b17.dist-info/top_level.txt,sha256=G9VIGBmMMqC7JEckoTgXKmC6T2BR75QRkqRnngw1_lo,16
132
- django_camomilla_cms-6.0.0b17.dist-info/RECORD,,
130
+ tests/utils/media.py,sha256=-cnrQzzVuhNSb5rT5xMUs5f3yYpBnS0fVGDcjgsb8lw,291
131
+ django_camomilla_cms-6.0.1.dist-info/METADATA,sha256=JrWJpDNYLZJEirL-izKANrA95xxLSL6go3mHCmeHIMA,5652
132
+ django_camomilla_cms-6.0.1.dist-info/WHEEL,sha256=JNWh1Fm1UdwIQV075glCn4MVuCRs0sotJIq-J6rbxCU,109
133
+ django_camomilla_cms-6.0.1.dist-info/top_level.txt,sha256=G9VIGBmMMqC7JEckoTgXKmC6T2BR75QRkqRnngw1_lo,16
134
+ django_camomilla_cms-6.0.1.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (80.3.1)
2
+ Generator: setuptools (80.9.0)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py2-none-any
5
5
  Tag: py3-none-any
@@ -4,14 +4,11 @@ from django.core.files.uploadedfile import SimpleUploadedFile
4
4
 
5
5
 
6
6
  def load_json_fixture(filename):
7
- with open(os.path.join(os.path.dirname(__file__), 'json', filename), "r") as f:
7
+ with open(os.path.join(os.path.dirname(__file__), "json", filename), "r") as f:
8
8
  return json.load(f)
9
9
 
10
10
 
11
11
  def load_asset(filename):
12
- with open(os.path.join(os.path.dirname(__file__), 'assets', filename), "rb") as f:
13
- up_file = SimpleUploadedFile(
14
- filename,
15
- f.read()
16
- )
12
+ with open(os.path.join(os.path.dirname(__file__), "assets", filename), "rb") as f:
13
+ up_file = SimpleUploadedFile(filename, f.read())
17
14
  return up_file
@@ -0,0 +1,63 @@
1
+ import responses
2
+ from django.test import TestCase
3
+ from camomilla.models import Page
4
+ from camomilla.utils.templates import get_templates
5
+ from camomilla.theme.admin import PageAdmin
6
+ from django.contrib.admin.sites import AdminSite
7
+ from camomilla.settings import INTEGRATIONS_ASTRO_URL
8
+
9
+
10
+ class MockRequest:
11
+ pass
12
+
13
+
14
+ request = MockRequest()
15
+
16
+
17
+ class MockRequestWithCookies:
18
+ def __init__(self):
19
+ self.COOKIES = {"sessionid": "mock_session_id", "csrftoken": "mock_csrf_token"}
20
+
21
+
22
+ request_with_cookies = MockRequestWithCookies()
23
+
24
+
25
+ class AdminPageFormTestCase(TestCase):
26
+ def setUp(self):
27
+ self.astro_api_url = INTEGRATIONS_ASTRO_URL + "/api/templates"
28
+
29
+ @responses.activate
30
+ def test_admin_page_form_astro_error(self):
31
+ responses.add(
32
+ responses.GET,
33
+ self.astro_api_url,
34
+ status=500, # Simulating a server error
35
+ )
36
+
37
+ page_admin = PageAdmin(Page, AdminSite())
38
+ form = page_admin.get_form(request)()
39
+ self.assertEqual(len(list(form.fields)), 33)
40
+ self.assertTrue("template" in list(form.fields))
41
+ self.assertListEqual(
42
+ form.fields["template"].widget.choices,
43
+ [("", "---------")] + [(t, t) for t in get_templates(request)],
44
+ )
45
+
46
+ @responses.activate
47
+ def test_admin_page_form(self):
48
+ responses.add(
49
+ responses.GET,
50
+ self.astro_api_url,
51
+ json=["mock_template/1", "mock_template/2"],
52
+ status=200,
53
+ )
54
+
55
+ page_admin = PageAdmin(Page, AdminSite())
56
+ form = page_admin.get_form(request_with_cookies)()
57
+ self.assertEqual(len(list(form.fields)), 33)
58
+ self.assertTrue("template" in list(form.fields))
59
+ self.assertListEqual(
60
+ form.fields["template"].widget.choices,
61
+ [("", "---------")] + [(t, t) for t in get_templates(request_with_cookies)],
62
+ )
63
+ self.assertEqual(responses.calls[0].request.url, self.astro_api_url)
@@ -17,7 +17,9 @@ class CamomillaFiltersTestCase(TestCase):
17
17
  pass
18
18
 
19
19
  def test_filter_content(self):
20
- Page.objects.create(identifier="path", title="Path", permalink="/path", status="PUB")
20
+ Page.objects.create(
21
+ identifier="path", title="Path", permalink="/path", status="PUB"
22
+ )
21
23
  request_factory = RequestFactory()
22
24
  request = request_factory.get("/path")
23
25
  request.META["HTTP_HOST"] = "localhost"
@@ -33,9 +35,11 @@ class CamomillaFiltersTestCase(TestCase):
33
35
  self.assertEqual(content.content, "Hello World!")
34
36
 
35
37
  def test_filter_alternate_urls(self):
36
- Page.objects.create(identifier="path", title="Path", permalink="/path", status="PUB")
38
+ Page.objects.create(
39
+ identifier="path", title="Path", permalink="/path", status="PUB"
40
+ )
37
41
  request = RequestFactory().get("/path")
38
42
  request.META["HTTP_HOST"] = "localhost"
39
43
  page = Page.get(request)
40
44
  alt_urls = dict(alternate_urls(page, request))
41
- self.assertEqual(alt_urls, {'it': None, 'en': '/path/'})
45
+ self.assertEqual(alt_urls, {"it": None, "en": "/path/"})
tests/test_media.py CHANGED
@@ -8,11 +8,12 @@ from rest_framework.test import APIClient
8
8
 
9
9
  client = APIClient()
10
10
 
11
+
11
12
  class MediaTestCase(TestCase):
12
13
  def setUp(self):
13
14
  self.client = APIClient()
14
15
  token = login_superuser()
15
- self.client.credentials(HTTP_AUTHORIZATION='Token ' + token)
16
+ self.client.credentials(HTTP_AUTHORIZATION="Token " + token)
16
17
 
17
18
  @pytest.mark.django_db
18
19
  def test_media_api_crud(self):
@@ -22,7 +23,17 @@ class MediaTestCase(TestCase):
22
23
  "/api/camomilla/media/",
23
24
  {
24
25
  "file": asset,
25
- "data": json.dumps({"translations": {"en": {"alt_text": "Test 1", "title": "Test 1", "description": "Test 1"}}}),
26
+ "data": json.dumps(
27
+ {
28
+ "translations": {
29
+ "en": {
30
+ "alt_text": "Test 1",
31
+ "title": "Test 1",
32
+ "description": "Test 1",
33
+ }
34
+ }
35
+ }
36
+ ),
26
37
  },
27
38
  format="multipart",
28
39
  )
@@ -40,13 +51,23 @@ class MediaTestCase(TestCase):
40
51
  "/api/camomilla/media/",
41
52
  {
42
53
  "file": asset,
43
- "data": json.dumps({"translations": {"en": {"alt_text": "Test 2", "title": "Test 2", "description": "Test 2"}}}),
54
+ "data": json.dumps(
55
+ {
56
+ "translations": {
57
+ "en": {
58
+ "alt_text": "Test 2",
59
+ "title": "Test 2",
60
+ "description": "Test 2",
61
+ }
62
+ }
63
+ }
64
+ ),
44
65
  },
45
66
  format="multipart",
46
67
  )
47
68
  assert response.status_code == 201
48
69
  assert Media.objects.count() == 2
49
- media = Media.objects.first() # Ordering in model is descending -pk
70
+ media = Media.objects.first() # Ordering in model is descending -pk
50
71
  assert media.alt_text == "Test 2"
51
72
  assert media.title == "Test 2"
52
73
  assert media.description == "Test 2"
@@ -55,17 +76,17 @@ class MediaTestCase(TestCase):
55
76
  # Read media
56
77
  response = self.client.get("/api/camomilla/media/2/")
57
78
  assert response.status_code == 200
58
- assert response.json()['id'] == 2
59
- assert response.json()['title'] == "Test 2"
60
- assert response.json()['file'] == "http://testserver/media/37059501.png"
79
+ assert response.json()["id"] == 2
80
+ assert response.json()["title"] == "Test 2"
81
+ assert response.json()["file"] == "http://testserver/media/37059501.png"
61
82
 
62
83
  # Read medias
63
84
  response = self.client.get("/api/camomilla/media/")
64
85
  assert response.status_code == 200
65
- assert response.json()[0]['id'] == 2 # Ordering in model is descending -pk
66
- assert response.json()[0]['title'] == "Test 2"
67
- assert response.json()[1]['id'] == 1
68
- assert response.json()[1]['title'] == "Test 1"
86
+ assert response.json()[0]["id"] == 2 # Ordering in model is descending -pk
87
+ assert response.json()[0]["title"] == "Test 2"
88
+ assert response.json()[1]["id"] == 1
89
+ assert response.json()[1]["title"] == "Test 1"
69
90
 
70
91
  # Delete media
71
92
  response = self.client.delete("/api/camomilla/media/2/")
@@ -75,7 +96,6 @@ class MediaTestCase(TestCase):
75
96
  assert media.id == 1
76
97
  assert media.title == "Test 1"
77
98
 
78
-
79
99
  @pytest.mark.django_db
80
100
  def test_media_compression(self):
81
101
  asset = load_asset_and_remove_media("Sample-jpg-image-10mb.jpg")
@@ -84,7 +104,17 @@ class MediaTestCase(TestCase):
84
104
  "/api/camomilla/media/",
85
105
  {
86
106
  "file": asset,
87
- "data": json.dumps({"translations": {"en": {"alt_text": "Test", "title": "Test", "description": "Test"}}}),
107
+ "data": json.dumps(
108
+ {
109
+ "translations": {
110
+ "en": {
111
+ "alt_text": "Test",
112
+ "title": "Test",
113
+ "description": "Test",
114
+ }
115
+ }
116
+ }
117
+ ),
88
118
  },
89
119
  format="multipart",
90
120
  )
@@ -94,7 +124,6 @@ class MediaTestCase(TestCase):
94
124
  assert media.file.size < asset_size
95
125
  assert media.file.size < 1000000 # 1MB
96
126
 
97
-
98
127
  @pytest.mark.django_db
99
128
  def test_inflating_prevent(self):
100
129
  asset = load_asset_and_remove_media("optimized.jpg")
@@ -103,7 +132,17 @@ class MediaTestCase(TestCase):
103
132
  "/api/camomilla/media/",
104
133
  {
105
134
  "file": asset,
106
- "data": json.dumps({"translations": {"en": {"alt_text": "Test", "title": "Test", "description": "Test"}}}),
135
+ "data": json.dumps(
136
+ {
137
+ "translations": {
138
+ "en": {
139
+ "alt_text": "Test",
140
+ "title": "Test",
141
+ "description": "Test",
142
+ }
143
+ }
144
+ }
145
+ ),
107
146
  },
108
147
  format="multipart",
109
148
  )
tests/test_menu.py CHANGED
@@ -11,10 +11,10 @@ class MenuTestCase(TestCase):
11
11
  def setUp(self):
12
12
  self.client = APIClient()
13
13
  token = login_superuser()
14
- self.client.credentials(HTTP_AUTHORIZATION='Token ' + token)
14
+ self.client.credentials(HTTP_AUTHORIZATION="Token " + token)
15
15
 
16
- def renderTemplate(self, template, context = None):
17
- return Template('{% load menus %}' + template).render(Context(context))
16
+ def renderTemplate(self, template, context=None):
17
+ return Template("{% load menus %}" + template).render(Context(context))
18
18
 
19
19
  @pytest.mark.django_db
20
20
  def test_template_render_menu(self):
@@ -35,7 +35,7 @@ class MenuTestCase(TestCase):
35
35
  self.renderTemplate('{% render_menu "key_3" %}')
36
36
  self.renderTemplate('{% render_menu "key_4" %}')
37
37
 
38
- rendered = html.unescape(self.renderTemplate('{% get_menus %}'))
38
+ rendered = html.unescape(self.renderTemplate("{% get_menus %}"))
39
39
  assert rendered == "{'key_3': <Menu: key_3>, 'key_4': <Menu: key_4>}"
40
40
 
41
41
  rendered = html.unescape(self.renderTemplate('{% get_menus "arg" %}'))
@@ -43,9 +43,11 @@ class MenuTestCase(TestCase):
43
43
 
44
44
  rendered = html.unescape(self.renderTemplate('{% get_menus "key_3" %}'))
45
45
  assert rendered == "{'key_3': <Menu: key_3>}"
46
-
46
+
47
47
  menus = 'test "menus" in context'
48
- rendered = html.unescape(self.renderTemplate('{% get_menus %}', {"menus": menus}))
48
+ rendered = html.unescape(
49
+ self.renderTemplate("{% get_menus %}", {"menus": menus})
50
+ )
49
51
  assert rendered == menus
50
52
 
51
53
  @pytest.mark.django_db
@@ -53,7 +55,9 @@ class MenuTestCase(TestCase):
53
55
  self.renderTemplate('{% render_menu "key_5" %}')
54
56
 
55
57
  menu = Menu.objects.first()
56
- menu.nodes = [{"title": "key_5_node_title", "link":{"static": "key_5_url_static"}}]
58
+ menu.nodes = [
59
+ {"title": "key_5_node_title", "link": {"static": "key_5_url_static"}}
60
+ ]
57
61
  menu.save()
58
62
 
59
63
  rendered = html.unescape(self.renderTemplate('{% render_menu "key_5" %}'))
@@ -64,11 +68,17 @@ class MenuTestCase(TestCase):
64
68
  self.renderTemplate('{% render_menu "key_6_custom" %}')
65
69
 
66
70
  menu = Menu.objects.first()
67
- menu.nodes = [{"title": "key_6_node_title", "link":{"static": "key_6_url_static"}}]
71
+ menu.nodes = [
72
+ {"title": "key_6_node_title", "link": {"static": "key_6_url_static"}}
73
+ ]
68
74
  menu.save()
69
75
 
70
- rendered = html.unescape(self.renderTemplate('{% render_menu "key_6_custom" "website/menu_custom.html" %}'))
71
- assert {'This is custom menu: key_6_node_title' in rendered}
76
+ rendered = html.unescape(
77
+ self.renderTemplate(
78
+ '{% render_menu "key_6_custom" "website/menu_custom.html" %}'
79
+ )
80
+ )
81
+ assert {"This is custom menu: key_6_node_title" in rendered}
72
82
 
73
83
  @pytest.mark.django_db
74
84
  def test_menu_in_page_template(self):
@@ -77,20 +87,25 @@ class MenuTestCase(TestCase):
77
87
  response = self.client.post(
78
88
  "/api/camomilla/pages/",
79
89
  {
80
- "translations": {
81
- "en": {
82
- "title": "title_page_menu_1",
83
- "permalink": "permalink_page_menu_en_1",
84
- "autopermalink": False
90
+ "translations": {
91
+ "en": {
92
+ "title": "title_page_menu_1",
93
+ "permalink": "permalink_page_menu_en_1",
94
+ "autopermalink": False,
95
+ }
85
96
  }
86
- }
87
97
  },
88
- format='json'
98
+ format="json",
89
99
  )
90
100
  assert response.status_code == 201
91
101
 
92
102
  menu = Menu.objects.first()
93
- menu.nodes = [{"title": "key_7_node_title", "link":{"page": { "id": 1, "model":"camomilla.page" }}}]
103
+ menu.nodes = [
104
+ {
105
+ "title": "key_7_node_title",
106
+ "link": {"page": {"id": 1, "model": "camomilla.page"}},
107
+ }
108
+ ]
94
109
  menu.save()
95
110
 
96
111
  rendered = html.unescape(self.renderTemplate('{% render_menu "key_7" %}'))
tests/test_model_api.py CHANGED
@@ -12,7 +12,9 @@ client = APIClient()
12
12
  def init_test():
13
13
  token = login_superuser()
14
14
  client.credentials(HTTP_AUTHORIZATION="Token " + token)
15
- SimpleRelationModel.objects.bulk_create([SimpleRelationModel(name=f"test{i}") for i in range(1, 10)])
15
+ SimpleRelationModel.objects.bulk_create(
16
+ [SimpleRelationModel(name=f"test{i}") for i in range(1, 10)]
17
+ )
16
18
 
17
19
 
18
20
  @pytest.mark.django_db
@@ -23,7 +25,9 @@ def test_simple_relation_model_api_endpoint():
23
25
  response = client.get("/api/models/simple-relation-model/1/")
24
26
  assert response.status_code == 200
25
27
  assert response.json()["name"] == "test1"
26
- response = client.patch("/api/models/simple-relation-model/1/", {"name": "updated"}, format="json")
28
+ response = client.patch(
29
+ "/api/models/simple-relation-model/1/", {"name": "updated"}, format="json"
30
+ )
27
31
  assert response.status_code == 200
28
32
  assert response.json()["name"] == "updated"
29
33
  response = client.delete("/api/models/simple-relation-model/1/")
@@ -33,7 +37,10 @@ def test_simple_relation_model_api_endpoint():
33
37
  assert len(response.json()) == 8
34
38
  response = client.get("/api/models/simple-relation-model/1/")
35
39
  assert response.status_code == 404
36
- assert response.json() in [{"detail": "Not found."}, {'detail': 'No SimpleRelationModel matches the given query.'}]
40
+ assert response.json() in [
41
+ {"detail": "Not found."},
42
+ {"detail": "No SimpleRelationModel matches the given query."},
43
+ ]
37
44
 
38
45
 
39
46
  @pytest.mark.django_db
@@ -45,24 +52,62 @@ def test_test_model_api_endpoint():
45
52
  response = client.post("/api/models/test-model/", test_model_data, format="json")
46
53
  assert response.status_code == 201
47
54
  assert response.json()["title"] == test_model_data["title"]
48
- assert response.json()["structured_data"]["name"] == test_model_data["structured_data"]["name"]
49
- assert response.json()["structured_data"]["age"] == test_model_data["structured_data"]["age"]
50
- assert response.json()["structured_data"]["child"]["name"] == test_model_data["structured_data"]["child"]["name"]
51
- assert response.json()["structured_data"]["childs"][0]["name"] == test_model_data["structured_data"]["childs"][0]["name"]
52
- assert response.json()["structured_data"]["fk_field"]["id"] == test_model_data["structured_data"]["fk_field"]["id"]
53
- assert response.json()["structured_data"]["qs_field"][0]["id"] == test_model_data["structured_data"]["qs_field"][0]["id"]
55
+ assert (
56
+ response.json()["structured_data"]["name"]
57
+ == test_model_data["structured_data"]["name"]
58
+ )
59
+ assert (
60
+ response.json()["structured_data"]["age"]
61
+ == test_model_data["structured_data"]["age"]
62
+ )
63
+ assert (
64
+ response.json()["structured_data"]["child"]["name"]
65
+ == test_model_data["structured_data"]["child"]["name"]
66
+ )
67
+ assert (
68
+ response.json()["structured_data"]["childs"][0]["name"]
69
+ == test_model_data["structured_data"]["childs"][0]["name"]
70
+ )
71
+ assert (
72
+ response.json()["structured_data"]["fk_field"]["id"]
73
+ == test_model_data["structured_data"]["fk_field"]["id"]
74
+ )
75
+ assert (
76
+ response.json()["structured_data"]["qs_field"][0]["id"]
77
+ == test_model_data["structured_data"]["qs_field"][0]["id"]
78
+ )
54
79
  response = client.get("/api/models/test-model/")
55
80
  assert response.status_code == 200
56
81
  assert len(response.json()) == 1
57
82
  response = client.get("/api/models/test-model/1/")
58
83
  assert response.status_code == 200
59
84
  assert response.json()["title"] == test_model_data["title"]
60
- assert response.json()["structured_data"]["name"] == test_model_data["structured_data"]["name"]
61
- assert response.json()["structured_data"]["age"] == test_model_data["structured_data"]["age"]
62
- assert response.json()["structured_data"]["child"]["name"] == test_model_data["structured_data"]["child"]["name"]
63
- assert response.json()["structured_data"]["childs"][0]["name"] == test_model_data["structured_data"]["childs"][0]["name"]
64
- assert response.json()["structured_data"]["fk_field"]["id"] == test_model_data["structured_data"]["fk_field"]["id"]
65
- assert response.json()["structured_data"]["qs_field"][0]["id"] == test_model_data["structured_data"]["qs_field"][0]["id"]
66
- response = client.patch("/api/models/test-model/1/", {"title": "updated"}, format="json")
85
+ assert (
86
+ response.json()["structured_data"]["name"]
87
+ == test_model_data["structured_data"]["name"]
88
+ )
89
+ assert (
90
+ response.json()["structured_data"]["age"]
91
+ == test_model_data["structured_data"]["age"]
92
+ )
93
+ assert (
94
+ response.json()["structured_data"]["child"]["name"]
95
+ == test_model_data["structured_data"]["child"]["name"]
96
+ )
97
+ assert (
98
+ response.json()["structured_data"]["childs"][0]["name"]
99
+ == test_model_data["structured_data"]["childs"][0]["name"]
100
+ )
101
+ assert (
102
+ response.json()["structured_data"]["fk_field"]["id"]
103
+ == test_model_data["structured_data"]["fk_field"]["id"]
104
+ )
105
+ assert (
106
+ response.json()["structured_data"]["qs_field"][0]["id"]
107
+ == test_model_data["structured_data"]["qs_field"][0]["id"]
108
+ )
109
+ response = client.patch(
110
+ "/api/models/test-model/1/", {"title": "updated"}, format="json"
111
+ )
67
112
  assert response.status_code == 200
68
113
  assert response.json()["title"] == "updated"
@@ -26,7 +26,9 @@ def test_right_permissions():
26
26
  assert len(response.json()) == 1
27
27
  response = client.get("/api/models/test-model/1/")
28
28
  assert response.status_code == 200
29
- response = client.patch("/api/models/test-model/1/", {"title": "updated"}, format="json")
29
+ response = client.patch(
30
+ "/api/models/test-model/1/", {"title": "updated"}, format="json"
31
+ )
30
32
  assert response.status_code == 200
31
33
  assert response.json()["title"] == "updated"
32
34
  response = client.delete("/api/models/test-model/1/")
@@ -36,4 +38,7 @@ def test_right_permissions():
36
38
  assert len(response.json()) == 0
37
39
  response = client.get("/api/models/test-model/1/")
38
40
  assert response.status_code == 404
39
- assert response.json() in [{"detail": "Not found."}, {'detail': 'No TestModel matches the given query.'}]
41
+ assert response.json() in [
42
+ {"detail": "Not found."},
43
+ {"detail": "No TestModel matches the given query."},
44
+ ]