django-camomilla-cms 6.0.0b18__py2.py3-none-any.whl → 6.1.0__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=rVNwuy2J-skWorDHQHY5RbR836EfOwG8yJmEDdWPZEE,251
1
+ camomilla/__init__.py,sha256=R1pWTtcXHHHh0t0eJesB_UA9sQWaAVY2b2JPbeBk_68,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,10 +9,10 @@ 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=V9rf42MSAwJoGlJS-yAW5pzgGcu5J1g7rrVCAmRtMJU,3763
12
+ camomilla/settings.py,sha256=lEQPysEJZ_0c9Bkr1P38rO2csPrcNCdqeLqGp1aMS2I,4362
13
13
  camomilla/sitemap.py,sha256=U2t5TwhB_-sEscmQZ69PZ5st3bIap8NRxzWEvCgB130,786
14
14
  camomilla/translation.py,sha256=_QyfTlKG6hQ_ClRfxzeJ-3oI3Nu5peJN9xFkO9Ib3As,1316
15
- camomilla/urls.py,sha256=XgaeFoG2eXlJQve3KmFKlD-74CMLW1ziaY1mq-lrAiA,2095
15
+ camomilla/urls.py,sha256=umWlVDJ_J4aPkqeSbHJznrGJi0marvWi8TfSmsRT5a0,2101
16
16
  camomilla/contrib/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
17
17
  camomilla/contrib/modeltranslation/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
18
18
  camomilla/contrib/modeltranslation/hvad_migration.py,sha256=3j_q_Q85eF4iHbU4LG1Zr3LOmfmGmFiVSL-C8KvPsJQ,5409
@@ -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=hL2txxJv5MScU-BsphZUYCybllNAEiR3Dd25c_AS35Y,19976
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
@@ -37,11 +37,11 @@ camomilla/serializers/article.py,sha256=pYVcS0KztzjzSqgruElQMMEZcqTzmQUqXrdv_Sx5
37
37
  camomilla/serializers/content_type.py,sha256=qB2wkmkvQI6LHxfSI6auEh6M9cJRFBaHnpmkBCCzeYo,557
38
38
  camomilla/serializers/media.py,sha256=H4JVpRVxXVmn_BiqrjihKXpfLm9fLmHDFIICRDGJU4s,1940
39
39
  camomilla/serializers/menu.py,sha256=TdoyXs40PqxNevnRbBbYOOX9rUv9zQGiHFNduspaZnw,552
40
- camomilla/serializers/page.py,sha256=NNjEypVYu_9iKqdHV_-61ea37gxiHlDP5gsloV_i6yg,1834
40
+ camomilla/serializers/page.py,sha256=n2gfRkKXiQuCHEIGnJ2gC1sFsFitBxZ6WZ3bxpr_C5Q,1885
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
@@ -72,11 +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/templatetags/model_extras.py,sha256=mfPab5wQwAiBud4PWyn4lRumdqdniz3OhZy433zm4KQ,2180
76
- camomilla/theme/__init__.py,sha256=-G_a31a_XYZrR-sYH8Ect9skMQcf0vEfDEKXexJXOIw,30
75
+ camomilla/templatetags/model_extras.py,sha256=6WfVDYP_OfuVJd3cNGNA55Wj9uWdrbfOZQ0ua9Xt_vc,2257
76
+ camomilla/theme/__init__.py,sha256=PD5agZ0_DXqsFLMBR0hacZV3LbzGbH8qn-j7MIAm3Xs,22
77
77
  camomilla/theme/apps.py,sha256=Ue2H80fbFgxkQyHeU2H0fWs9Y6d-EnHYv4zz824FSRk,1066
78
78
  camomilla/theme/admin/__init__.py,sha256=TALAZaE-gWshSeGc6yy7VahdX5UfeCeoOE9Q5kJCEpM,2270
79
- camomilla/theme/admin/pages.py,sha256=y3rL1nwZlytyD-YR_qqLiBAmjCAjkBY3v56V6JdhBvY,1908
79
+ camomilla/theme/admin/pages.py,sha256=HHi8dxjqffjMQGIRpOVNgQZhtKSSx3pFIctbqoZ9J2I,2614
80
80
  camomilla/theme/admin/translations.py,sha256=iAjGM1A1aYrsz1FpeybROk6rn3Ddl_oUCwgU5oD8nSw,308
81
81
  camomilla/theme/static/admin/css/responsive.css,sha256=yGq6qXrr8xEVsXTnprIBgkX-sMGZrNf0Kkh-xDxf6yE,157
82
82
  camomilla/theme/static/admin/img/favicon.ico,sha256=qpKv_2MaGILvyihnD1Vq9Yk-ZXGkxWTW26ciMeBFMYU,15406
@@ -89,7 +89,7 @@ camomilla/utils/normalization.py,sha256=RDCZtjwpEEwjvfUjQl2bEWFKw7NxTzkXco72VeO2
89
89
  camomilla/utils/query_parser.py,sha256=TUScPzPVVJzaKdqy5NqtMOft3H5Bx6liXTVPM1yjH24,6303
90
90
  camomilla/utils/seo.py,sha256=8p_a_TGgohenpJb094tT4mMxbn2xzW0qDILuTnjNocM,3324
91
91
  camomilla/utils/setters.py,sha256=LV57SM65rL1_ZQkVzk9al_Q13lndVywXLkqgfIvgS0Y,915
92
- camomilla/utils/templates.py,sha256=pgj9vrMypdJEYfvabbWRTu3r498pbjvcLCOSrrsm-sw,924
92
+ camomilla/utils/templates.py,sha256=NAvvuv-fwu9CIxQY5t0RKs4GiFClOBZa9pOtcH_YP6s,1576
93
93
  camomilla/utils/translation.py,sha256=w5tvTInDLegWBb1TnDWo09ckKY3K6hajuNNsngZIxPQ,4205
94
94
  camomilla/views/__init__.py,sha256=94QuOnnbfMMb17mruO2ydUt286-8zBmDxEPWrJv5Wog,178
95
95
  camomilla/views/articles.py,sha256=qGxebOA5iTbGGe9PfbH40YBoDPKktH8FJongg6rh2R8,571
@@ -97,37 +97,40 @@ camomilla/views/contents.py,sha256=JxvnmgeK8JEmCMLzVG8pVq2DwvmjXtgnIdsDnn74tA4,1
97
97
  camomilla/views/decorators.py,sha256=hR--nTGQn2mMKDrWn-0Ildzbsvp11OfoWAtedKEzmiA,982
98
98
  camomilla/views/languages.py,sha256=Rt_X7s3dbDBv4dxsQ9fnav_u0TAzzo8fGKBBx3esDsg,441
99
99
  camomilla/views/medias.py,sha256=XYa-NTLLQmSSynpfrFT3av-K_r59aRns3dTGfYMj-0Q,3002
100
- camomilla/views/menus.py,sha256=Kpygnf3tMKJ30gcblUES2NW83A37Vy75ecSGSvExGKM,3301
101
- camomilla/views/pages.py,sha256=UL74_u-18QdAkjVl74AVWZbRarEdIPrANTzdcM4iqmE,1338
100
+ camomilla/views/menus.py,sha256=2uEeQc68wmmxiQ-mEG9wj1m18uF9f4oq-_5anAVOIbw,3449
101
+ camomilla/views/pages.py,sha256=GwLRcyrLqL3g4BFcbGQ2b0yspA-osA092zTMgVys56M,1345
102
102
  camomilla/views/tags.py,sha256=XcYRlcBFSPPY32lt7POb6fWPJL_8HsTo5JcHcAOiOKw,479
103
103
  camomilla/views/users.py,sha256=_fvsKOEtep4SJLvMva2_q-HdLQT_1KlFNt4wcl3xCJk,3130
104
- camomilla/views/base/__init__.py,sha256=t-7tqY_ep4Xi8YgB1sXDgNWQ5oh2YEUlfQWU5pltwJ0,1063
104
+ camomilla/views/base/__init__.py,sha256=bpbVBGXLTy7No95XyDNB2U8hVXmwQJrF1VjLAS5WH90,1232
105
105
  camomilla/views/mixins/__init__.py,sha256=Znv3fLYVy6lgu03Q_D8fTen4zMxI6VSRaLPDU8Cp7Ws,473
106
106
  camomilla/views/mixins/bulk_actions.py,sha256=i0duWW6wey9m7I_V8-gPcHsbJyPEfSdMdj4h2i-CbPw,787
107
107
  camomilla/views/mixins/language.py,sha256=hfnYznlVMrMLBdJ_f8dChJWENg7Kpt9m1yqavrdLm7E,1299
108
108
  camomilla/views/mixins/optimize.py,sha256=iRPNkoeIIlJugk7DjJhDPaqeX7Opi7TxnUoMDnxJxUk,686
109
109
  camomilla/views/mixins/ordering.py,sha256=mh7fqPyVCVJh84Nl2pYFQouzGxa-ANF3Wqv0pCb7OVU,4779
110
- camomilla/views/mixins/pagination.py,sha256=NWerBdMyBt4Kswig4fbANqGTzsll8SJdE6a8_UIoueU,5772
110
+ camomilla/views/mixins/pagination.py,sha256=Ssa5mMgAgyl7sUk0yum2uVifg6esdGmUTqMSJYacE40,5772
111
111
  camomilla/views/mixins/permissions.py,sha256=TPmR3Hoa3BjeJu9rCE_7lpLOAupue4WI42C21HTo6X4,200
112
- django_camomilla_cms-6.0.0b18.dist-info/licenses/LICENSE,sha256=kVS7zDrNkav2hLLXbOJwVdonY2ToApTK3khyJagGQoQ,1063
112
+ django_camomilla_cms-6.1.0.dist-info/licenses/LICENSE,sha256=kVS7zDrNkav2hLLXbOJwVdonY2ToApTK3khyJagGQoQ,1063
113
113
  tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
114
+ tests/test_admin_page_form.py,sha256=DRJxekEKeYMCf9q62ax7iBeJGhEP2NZ8o02krZBR_DA,1971
114
115
  tests/test_api.py,sha256=t03EFDezGgm4UJl8RIVvnTUkAGTB6ptm0G2lHBQ7ljc,1833
115
- tests/test_camomilla_filters.py,sha256=5LlR3tctGu6qxVmOrY52AGh_ACvEzdAvkwH2v7medpo,1536
116
- tests/test_media.py,sha256=IG-cigWxDnsq54DRVaPO2O0lcsnutfKRsqPTTR8W1E8,4183
117
- tests/test_menu.py,sha256=HyEdDzTDsLtNzsTNGjjZ6SCrgTXRU3FkKviUOacnYRg,3582
118
- tests/test_model_api.py,sha256=Ne8YlXTH2cqP5gzOc8UKjJuh0t-NaKHh5Ol9krpVHQg,3768
119
- tests/test_model_api_permissions.py,sha256=7CSb4-yIOfycAL_vXvh1dE2whx7k0gNkWl9LO0yzy4I,1801
120
- 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
121
122
  tests/test_models.py,sha256=WJs8lxWZWn1l7X3a_QFVc8fF5LHTsI8bc3uhQe6-o-Q,684
122
- tests/test_pages.py,sha256=qIVdfmbtx7GKHyNWHhirR58gGr9zjfrrzXXkvYlLusc,11469
123
+ tests/test_page_meta.py,sha256=QFmX97LBYSuHn9vJPM80MWZc3BwfGO5V-sCClk7ExOA,3142
124
+ tests/test_page_relation_api.py,sha256=PrFY3vuuFal4og8MUq8ba02qITsNOtIP1eNmQ_f9jxk,2760
125
+ tests/test_pages.py,sha256=Zo1dV6Ie2hPPfc2V7uPbVW9gEtuBWOGypglaVIbTG98,11885
123
126
  tests/test_query_parser.py,sha256=R9l0L2QDEDcm2b6IFUhyf7wMXLzL9RySLkzKTWRtBkE,2097
124
- tests/test_templates_context.py,sha256=D72ufRqCGjInGGXHSNVhlJ1HcWG0zMqrAiTuiaU057k,4694
125
- tests/test_utils.py,sha256=o_FG7XOxLePOBfwBr4sk09gej0onWNw9t2-gSjGmgNg,3741
126
- tests/fixtures/__init__.py,sha256=NGj22kLV65v56IpOrOVqSkPhJePTXD4QjuuZhZSMwfQ,460
127
+ tests/test_templates_context.py,sha256=zGdmbQMGNXB2V_15BaQDIgqFMnVjBAw969n1tu3m7HY,5626
128
+ tests/test_utils.py,sha256=ow4csGfU5WzMgAT5zWjZIxZwW1-BqnMduDt8hOzf9cE,2166
129
+ tests/fixtures/__init__.py,sha256=ixyA6ZsmYbiKEsjQGOGoG4KyJmwWrf-qeoQjQG3J66U,426
127
130
  tests/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
128
131
  tests/utils/api.py,sha256=TYcDXeILHtBwzwG0acwPFmiqMZnlF9VnLB0Ydhg55vA,865
129
132
  tests/utils/media.py,sha256=-cnrQzzVuhNSb5rT5xMUs5f3yYpBnS0fVGDcjgsb8lw,291
130
- django_camomilla_cms-6.0.0b18.dist-info/METADATA,sha256=BwxjdmoaRTe-4KYk6odNDH53VHDiyBtS5vRA2dHWjIY,2565
131
- django_camomilla_cms-6.0.0b18.dist-info/WHEEL,sha256=_z0Kb-VmhLeNt2nZ-PsoQBjD25rP0tBwgAyRYD7oTKI,109
132
- django_camomilla_cms-6.0.0b18.dist-info/top_level.txt,sha256=G9VIGBmMMqC7JEckoTgXKmC6T2BR75QRkqRnngw1_lo,16
133
- django_camomilla_cms-6.0.0b18.dist-info/RECORD,,
133
+ django_camomilla_cms-6.1.0.dist-info/METADATA,sha256=mA_yBZVvW76HuYxBelBObDFK6c7kztUJ67Svwps6gFY,5652
134
+ django_camomilla_cms-6.1.0.dist-info/WHEEL,sha256=JNWh1Fm1UdwIQV075glCn4MVuCRs0sotJIq-J6rbxCU,109
135
+ django_camomilla_cms-6.1.0.dist-info/top_level.txt,sha256=G9VIGBmMMqC7JEckoTgXKmC6T2BR75QRkqRnngw1_lo,16
136
+ django_camomilla_cms-6.1.0.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (80.7.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
+ ]