comfortable_mexican_sofa 1.12.11 → 2.0.0

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.
Files changed (490) hide show
  1. checksums.yaml +5 -5
  2. data/.codeclimate.yml +4 -0
  3. data/.gitattributes +2 -0
  4. data/.github/issue_template.md +22 -0
  5. data/.github/pull_request_template.md +6 -0
  6. data/.gitignore +3 -0
  7. data/.rubocop.yml +5 -0
  8. data/.rubocop_todo.yml +974 -0
  9. data/.travis.yml +2 -10
  10. data/Gemfile +5 -7
  11. data/README.md +40 -39
  12. data/Rakefile +1 -31
  13. data/app/assets/javascripts/comfy/admin/cms/application.js.coffee +7 -4
  14. data/app/assets/javascripts/comfy/admin/cms/base.js.coffee +23 -33
  15. data/app/assets/javascripts/comfy/admin/cms/lib/diff/pretty_text_diff.js +76 -0
  16. data/app/assets/javascripts/comfy/admin/cms/lib/flatpickr.min.js +2 -0
  17. data/app/assets/javascripts/comfy/admin/cms/lib/flatpickr/i18n/ar.js +52 -0
  18. data/app/assets/javascripts/comfy/admin/cms/lib/flatpickr/i18n/bg.js +65 -0
  19. data/app/assets/javascripts/comfy/admin/cms/lib/flatpickr/i18n/bn.js +65 -0
  20. data/app/assets/javascripts/comfy/admin/cms/lib/flatpickr/i18n/cat.js +83 -0
  21. data/app/assets/javascripts/comfy/admin/cms/lib/flatpickr/i18n/cs.js +70 -0
  22. data/app/assets/javascripts/comfy/admin/cms/lib/flatpickr/i18n/cy.js +92 -0
  23. data/app/assets/javascripts/comfy/admin/cms/lib/flatpickr/i18n/da.js +71 -0
  24. data/app/assets/javascripts/comfy/admin/cms/lib/flatpickr/i18n/de.js +70 -0
  25. data/app/assets/javascripts/comfy/admin/cms/lib/flatpickr/i18n/default.js +80 -0
  26. data/app/assets/javascripts/comfy/admin/cms/lib/flatpickr/i18n/eo.js +73 -0
  27. data/app/assets/javascripts/comfy/admin/cms/lib/flatpickr/i18n/es.js +69 -0
  28. data/app/assets/javascripts/comfy/admin/cms/lib/flatpickr/i18n/et.js +73 -0
  29. data/app/assets/javascripts/comfy/admin/cms/lib/flatpickr/i18n/fa.js +68 -0
  30. data/app/assets/javascripts/comfy/admin/cms/lib/flatpickr/i18n/fi.js +69 -0
  31. data/app/assets/javascripts/comfy/admin/cms/lib/flatpickr/i18n/fr.js +75 -0
  32. data/app/assets/javascripts/comfy/admin/cms/lib/flatpickr/i18n/gr.js +74 -0
  33. data/app/assets/javascripts/comfy/admin/cms/lib/flatpickr/i18n/he.js +57 -0
  34. data/app/assets/javascripts/comfy/admin/cms/lib/flatpickr/i18n/hi.js +65 -0
  35. data/app/assets/javascripts/comfy/admin/cms/lib/flatpickr/i18n/hr.js +66 -0
  36. data/app/assets/javascripts/comfy/admin/cms/lib/flatpickr/i18n/hu.js +72 -0
  37. data/app/assets/javascripts/comfy/admin/cms/lib/flatpickr/i18n/id.js +61 -0
  38. data/app/assets/javascripts/comfy/admin/cms/lib/flatpickr/i18n/it.js +70 -0
  39. data/app/assets/javascripts/comfy/admin/cms/lib/flatpickr/i18n/ja.js +57 -0
  40. data/app/assets/javascripts/comfy/admin/cms/lib/flatpickr/i18n/ko.js +60 -0
  41. data/app/assets/javascripts/comfy/admin/cms/lib/flatpickr/i18n/lt.js +72 -0
  42. data/app/assets/javascripts/comfy/admin/cms/lib/flatpickr/i18n/lv.js +67 -0
  43. data/app/assets/javascripts/comfy/admin/cms/lib/flatpickr/i18n/mk.js +69 -0
  44. data/app/assets/javascripts/comfy/admin/cms/lib/flatpickr/i18n/mn.js +67 -0
  45. data/app/assets/javascripts/comfy/admin/cms/lib/flatpickr/i18n/ms.js +68 -0
  46. data/app/assets/javascripts/comfy/admin/cms/lib/flatpickr/i18n/my.js +69 -0
  47. data/app/assets/javascripts/comfy/admin/cms/lib/flatpickr/i18n/nl.js +75 -0
  48. data/app/assets/javascripts/comfy/admin/cms/lib/flatpickr/i18n/no.js +73 -0
  49. data/app/assets/javascripts/comfy/admin/cms/lib/flatpickr/i18n/pa.js +65 -0
  50. data/app/assets/javascripts/comfy/admin/cms/lib/flatpickr/i18n/pl.js +68 -0
  51. data/app/assets/javascripts/comfy/admin/cms/lib/flatpickr/i18n/pt-BR.js +66 -0
  52. data/app/assets/javascripts/comfy/admin/cms/lib/flatpickr/i18n/pt.js +66 -0
  53. data/app/assets/javascripts/comfy/admin/cms/lib/flatpickr/i18n/ro.js +69 -0
  54. data/app/assets/javascripts/comfy/admin/cms/lib/flatpickr/i18n/ru.js +66 -0
  55. data/app/assets/javascripts/comfy/admin/cms/lib/flatpickr/i18n/si.js +65 -0
  56. data/app/assets/javascripts/comfy/admin/cms/lib/flatpickr/i18n/sk.js +70 -0
  57. data/app/assets/javascripts/comfy/admin/cms/lib/flatpickr/i18n/sl.js +70 -0
  58. data/app/assets/javascripts/comfy/admin/cms/lib/flatpickr/i18n/sq.js +65 -0
  59. data/app/assets/javascripts/comfy/admin/cms/lib/flatpickr/i18n/sr.js +69 -0
  60. data/app/assets/javascripts/comfy/admin/cms/lib/flatpickr/i18n/sv.js +70 -0
  61. data/app/assets/javascripts/comfy/admin/cms/lib/flatpickr/i18n/th.js +72 -0
  62. data/app/assets/javascripts/comfy/admin/cms/lib/flatpickr/i18n/tr.js +66 -0
  63. data/app/assets/javascripts/comfy/admin/cms/lib/flatpickr/i18n/uk.js +66 -0
  64. data/app/assets/javascripts/comfy/admin/cms/lib/flatpickr/i18n/vn.js +66 -0
  65. data/app/assets/javascripts/comfy/admin/cms/lib/flatpickr/i18n/zh-CN.js +61 -0
  66. data/app/assets/javascripts/comfy/admin/cms/lib/flatpickr/i18n/zh-TW.js +61 -0
  67. data/app/assets/javascripts/comfy/admin/cms/lib/redactor.js +9 -3
  68. data/app/assets/javascripts/comfy/admin/cms/uploader.js.coffee +9 -10
  69. data/app/assets/stylesheets/comfy/admin/cms/application.sass +4 -4
  70. data/app/assets/stylesheets/comfy/admin/cms/base.sass +215 -338
  71. data/app/assets/stylesheets/comfy/admin/cms/lib/flatpickr.min.css +13 -0
  72. data/app/assets/stylesheets/comfy/admin/cms/redactor_overrides.sass +2 -2
  73. data/app/controllers/comfy/admin/base_controller.rb +20 -0
  74. data/app/controllers/comfy/admin/cms/base_controller.rb +9 -22
  75. data/app/controllers/comfy/admin/cms/categories_controller.rb +2 -3
  76. data/app/controllers/comfy/admin/cms/files_controller.rb +50 -31
  77. data/app/controllers/comfy/admin/cms/layouts_controller.rb +12 -13
  78. data/app/controllers/comfy/admin/cms/pages_controller.rb +28 -28
  79. data/app/controllers/comfy/admin/cms/revisions_controller.rb +23 -14
  80. data/app/controllers/comfy/admin/cms/sites_controller.rb +9 -10
  81. data/app/controllers/comfy/admin/cms/snippets_controller.rb +11 -11
  82. data/app/controllers/comfy/admin/cms/translations_controller.rb +98 -0
  83. data/app/controllers/comfy/cms/assets_controller.rb +9 -10
  84. data/app/controllers/comfy/cms/base_controller.rb +0 -2
  85. data/app/controllers/comfy/cms/content_controller.rb +50 -31
  86. data/app/controllers/concerns/comfy/paginate.rb +2 -2
  87. data/app/helpers/comfy/admin/cms_helper.rb +29 -0
  88. data/app/helpers/comfy/cms_helper.rb +40 -60
  89. data/app/models/comfy/cms/categorization.rb +8 -11
  90. data/app/models/comfy/cms/category.rb +10 -14
  91. data/app/models/comfy/cms/file.rb +31 -47
  92. data/app/models/comfy/cms/fragment.rb +55 -0
  93. data/app/models/comfy/cms/layout.rb +45 -40
  94. data/app/models/comfy/cms/page.rb +47 -36
  95. data/app/models/comfy/cms/revision.rb +5 -8
  96. data/app/models/comfy/cms/site.rb +26 -51
  97. data/app/models/comfy/cms/snippet.rb +20 -24
  98. data/app/models/comfy/cms/translation.rb +37 -0
  99. data/app/models/concerns/comfy/cms/with_categories.rb +38 -0
  100. data/app/models/concerns/comfy/cms/with_fragments.rb +121 -0
  101. data/app/views/comfy/admin/cms/categories/_categories.html.haml +2 -1
  102. data/app/views/comfy/admin/cms/categories/_edit.html.haml +7 -6
  103. data/app/views/comfy/admin/cms/categories/_form.html.haml +8 -5
  104. data/app/views/comfy/admin/cms/categories/_index.html.haml +24 -20
  105. data/app/views/comfy/admin/cms/categories/_show.html.haml +10 -9
  106. data/app/views/comfy/admin/cms/categories/create.js.erb +2 -2
  107. data/app/views/comfy/admin/cms/categories/edit.js.erb +1 -1
  108. data/app/views/comfy/admin/cms/categories/update.js.erb +2 -2
  109. data/app/views/comfy/admin/cms/files/_file.html.haml +31 -25
  110. data/app/views/comfy/admin/cms/files/_form.html.haml +16 -12
  111. data/app/views/comfy/admin/cms/files/edit.html.haml +1 -1
  112. data/app/views/comfy/admin/cms/files/index.html.haml +17 -19
  113. data/app/views/comfy/admin/cms/files/new.html.haml +1 -1
  114. data/app/views/comfy/admin/cms/layouts/_form.html.haml +10 -10
  115. data/app/views/comfy/admin/cms/layouts/_index_branch.html.haml +21 -19
  116. data/app/views/comfy/admin/cms/layouts/edit.html.haml +5 -5
  117. data/app/views/comfy/admin/cms/layouts/index.html.haml +4 -7
  118. data/app/views/comfy/admin/cms/pages/_form.html.haml +15 -21
  119. data/app/views/comfy/admin/cms/pages/_form_fragments.html.haml +40 -0
  120. data/app/views/comfy/admin/cms/pages/_fragment_attachments.html.haml +10 -0
  121. data/app/views/comfy/admin/cms/pages/_index_branch.html.haml +34 -26
  122. data/app/views/comfy/admin/cms/pages/edit.html.haml +19 -5
  123. data/app/views/comfy/admin/cms/pages/form_fragments.js.erb +1 -0
  124. data/app/views/comfy/admin/cms/pages/index.html.haml +5 -8
  125. data/app/views/comfy/admin/cms/pages/new.html.haml +1 -1
  126. data/app/views/comfy/admin/cms/revisions/show.html.haml +29 -27
  127. data/app/views/comfy/admin/cms/sites/_form.html.haml +6 -8
  128. data/app/views/comfy/admin/cms/sites/edit.html.haml +1 -1
  129. data/app/views/comfy/admin/cms/sites/index.html.haml +23 -22
  130. data/app/views/comfy/admin/cms/sites/new.html.haml +1 -1
  131. data/app/views/comfy/admin/cms/snippets/_form.html.haml +9 -9
  132. data/app/views/comfy/admin/cms/snippets/edit.html.haml +6 -5
  133. data/app/views/comfy/admin/cms/snippets/index.html.haml +25 -25
  134. data/app/views/comfy/admin/cms/snippets/new.html.haml +1 -1
  135. data/app/views/comfy/admin/cms/translations/_form.html.haml +21 -0
  136. data/app/views/comfy/admin/cms/translations/edit.html.haml +9 -0
  137. data/app/views/comfy/admin/cms/translations/form_fragments.js.erb +1 -0
  138. data/app/views/comfy/admin/cms/translations/new.html.haml +5 -0
  139. data/app/views/kaminari/comfy/_first_page.html.haml +3 -2
  140. data/app/views/kaminari/comfy/_gap.html.haml +2 -2
  141. data/app/views/kaminari/comfy/_last_page.html.haml +3 -2
  142. data/app/views/kaminari/comfy/_next_page.html.haml +2 -2
  143. data/app/views/kaminari/comfy/_page.html.haml +2 -2
  144. data/app/views/kaminari/comfy/_prev_page.html.haml +1 -1
  145. data/app/views/layouts/comfy/admin/cms/_body.html.haml +13 -15
  146. data/app/views/layouts/comfy/admin/cms/_footer_js.html.haml +10 -3
  147. data/app/views/layouts/comfy/admin/cms/_head.html.haml +7 -10
  148. data/app/views/layouts/comfy/admin/cms/_left.html.haml +33 -15
  149. data/app/views/layouts/comfy/admin/cms/_right.html.haml +2 -2
  150. data/comfortable_mexican_sofa.gemspec +19 -19
  151. data/config/application.rb +14 -8
  152. data/config/boot.rb +2 -2
  153. data/config/cms_routes.rb +3 -3
  154. data/config/environments/development.rb +37 -4
  155. data/config/environments/test.rb +12 -14
  156. data/config/initializers/comfortable_mexican_sofa.rb +5 -12
  157. data/config/locales/cs.yml +33 -7
  158. data/config/locales/da.yml +33 -7
  159. data/config/locales/de.yml +32 -6
  160. data/config/locales/en.yml +33 -7
  161. data/config/locales/es.yml +33 -7
  162. data/config/locales/fr.yml +33 -7
  163. data/config/locales/it.yml +33 -7
  164. data/config/locales/ja.yml +33 -7
  165. data/config/locales/nb.yml +33 -7
  166. data/config/locales/nl.yml +33 -7
  167. data/config/locales/pl.yml +33 -7
  168. data/config/locales/pt-BR.yml +33 -7
  169. data/config/locales/ru.yml +33 -7
  170. data/config/locales/sk.yml +33 -7
  171. data/config/locales/sv.yml +33 -7
  172. data/config/locales/tr.yml +33 -7
  173. data/config/locales/uk.yml +33 -7
  174. data/config/locales/zh-CN.yml +33 -7
  175. data/config/locales/zh-TW.yml +33 -7
  176. data/config/storage.yml +35 -0
  177. data/db/cms_seeds/sample-site/files/_default.jpg.yml +5 -0
  178. data/db/{cms_fixtures/sample-site/files/sample.jpg → cms_seeds/sample-site/files/default.jpg} +0 -0
  179. data/db/cms_seeds/sample-site/layouts/default/content.html +16 -0
  180. data/db/cms_seeds/sample-site/layouts/default/nested/content.html +14 -0
  181. data/db/cms_seeds/sample-site/pages/index/child_a/content.html +7 -0
  182. data/db/cms_seeds/sample-site/pages/index/child_b/content.html +6 -0
  183. data/db/cms_seeds/sample-site/pages/index/content.es.html +6 -0
  184. data/db/cms_seeds/sample-site/pages/index/content.fr.html +6 -0
  185. data/db/cms_seeds/sample-site/pages/index/content.html +24 -0
  186. data/db/{cms_fixtures/sample-site/pages/index/child/thumbnail.png → cms_seeds/sample-site/pages/index/footer.png} +0 -0
  187. data/db/cms_seeds/sample-site/pages/index/header.png +0 -0
  188. data/db/cms_seeds/sample-site/snippets/default.html +8 -0
  189. data/db/migrate/00_create_active_storage_tables.active_storage.rb +26 -0
  190. data/db/migrate/01_create_cms.rb +113 -104
  191. data/doc/preview.jpg +0 -0
  192. data/lib/comfortable_mexican_sofa.rb +10 -14
  193. data/lib/comfortable_mexican_sofa/configuration.rb +9 -13
  194. data/lib/comfortable_mexican_sofa/content.rb +28 -0
  195. data/lib/comfortable_mexican_sofa/content/block.rb +11 -0
  196. data/lib/comfortable_mexican_sofa/content/params_parser.rb +80 -0
  197. data/lib/comfortable_mexican_sofa/content/renderer.rb +125 -0
  198. data/lib/comfortable_mexican_sofa/content/tag.rb +37 -0
  199. data/lib/comfortable_mexican_sofa/content/tags/asset.rb +56 -0
  200. data/lib/comfortable_mexican_sofa/content/tags/checkbox.rb +21 -0
  201. data/lib/comfortable_mexican_sofa/content/tags/date.rb +22 -0
  202. data/lib/comfortable_mexican_sofa/content/tags/datetime.rb +22 -0
  203. data/lib/comfortable_mexican_sofa/content/tags/file.rb +77 -0
  204. data/lib/comfortable_mexican_sofa/content/tags/file_link.rb +66 -0
  205. data/lib/comfortable_mexican_sofa/content/tags/files.rb +39 -0
  206. data/lib/comfortable_mexican_sofa/content/tags/fragment.rb +54 -0
  207. data/lib/comfortable_mexican_sofa/content/tags/helper.rb +52 -0
  208. data/lib/comfortable_mexican_sofa/content/tags/markdown.rb +21 -0
  209. data/lib/comfortable_mexican_sofa/content/tags/number.rb +17 -0
  210. data/lib/comfortable_mexican_sofa/content/tags/partial.rb +42 -0
  211. data/lib/comfortable_mexican_sofa/content/tags/snippet.rb +31 -0
  212. data/lib/comfortable_mexican_sofa/content/tags/template.rb +41 -0
  213. data/lib/comfortable_mexican_sofa/content/tags/text.rb +17 -0
  214. data/lib/comfortable_mexican_sofa/content/tags/textarea.rb +17 -0
  215. data/lib/comfortable_mexican_sofa/content/tags/wysiwyg.rb +18 -0
  216. data/lib/comfortable_mexican_sofa/engine.rb +3 -2
  217. data/lib/comfortable_mexican_sofa/extensions/acts_as_tree.rb +33 -30
  218. data/lib/comfortable_mexican_sofa/extensions/has_revisions.rb +27 -23
  219. data/lib/comfortable_mexican_sofa/form_builder.rb +32 -104
  220. data/lib/comfortable_mexican_sofa/render_methods.rb +24 -21
  221. data/lib/comfortable_mexican_sofa/routes/cms.rb +6 -14
  222. data/lib/comfortable_mexican_sofa/routes/cms_admin.rb +39 -29
  223. data/lib/comfortable_mexican_sofa/routing.rb +1 -1
  224. data/lib/comfortable_mexican_sofa/seeds.rb +102 -0
  225. data/lib/comfortable_mexican_sofa/seeds/file/exporter.rb +40 -0
  226. data/lib/comfortable_mexican_sofa/seeds/file/importer.rb +61 -0
  227. data/lib/comfortable_mexican_sofa/seeds/layout/exporter.rb +37 -0
  228. data/lib/comfortable_mexican_sofa/seeds/layout/importer.rb +59 -0
  229. data/lib/comfortable_mexican_sofa/seeds/page/exporter.rb +88 -0
  230. data/lib/comfortable_mexican_sofa/seeds/page/importer.rb +213 -0
  231. data/lib/comfortable_mexican_sofa/seeds/snippet/exporter.rb +31 -0
  232. data/lib/comfortable_mexican_sofa/seeds/snippet/importer.rb +48 -0
  233. data/lib/comfortable_mexican_sofa/version.rb +1 -1
  234. data/lib/comfortable_mexican_sofa/view_hooks.rb +0 -1
  235. data/lib/generators/comfy/cms/assets_generator.rb +0 -1
  236. data/lib/generators/comfy/cms/cms_generator.rb +15 -5
  237. data/lib/generators/comfy/scaffold/scaffold_generator.rb +26 -20
  238. data/lib/generators/comfy/scaffold/templates/{controller.rb → controller.rb.tt} +10 -10
  239. data/lib/generators/comfy/scaffold/templates/{migration.rb → migration.rb.tt} +2 -3
  240. data/lib/generators/comfy/scaffold/templates/{model.rb → model.rb.tt} +7 -7
  241. data/lib/generators/comfy/scaffold/templates/tests/{controller.rb → controller.rb.tt} +37 -24
  242. data/lib/generators/comfy/scaffold/templates/tests/{fixture.yml → fixture.yml.tt} +0 -0
  243. data/lib/generators/comfy/scaffold/templates/tests/{model.rb → model.rb.tt} +3 -4
  244. data/lib/generators/comfy/scaffold/templates/views/_form.haml.tt +7 -0
  245. data/lib/generators/comfy/scaffold/templates/views/{edit.haml → edit.haml.tt} +1 -1
  246. data/lib/generators/comfy/scaffold/templates/views/index.haml.tt +21 -0
  247. data/lib/generators/comfy/scaffold/templates/views/{new.haml → new.haml.tt} +1 -1
  248. data/lib/generators/comfy/scaffold/templates/views/{show.haml → show.haml.tt} +2 -2
  249. data/lib/tasks/cms_seeds.rake +37 -0
  250. data/test/controllers/comfy/admin/cms/base_controller_test.rb +5 -6
  251. data/test/controllers/comfy/admin/cms/categories_controller_test.rb +27 -24
  252. data/test/controllers/comfy/admin/cms/files_controller_test.rb +97 -97
  253. data/test/controllers/comfy/admin/cms/layouts_controller_test.rb +32 -31
  254. data/test/controllers/comfy/admin/cms/pages_controller_test.rb +317 -263
  255. data/test/controllers/comfy/admin/cms/revisions_controller_test.rb +175 -65
  256. data/test/controllers/comfy/admin/cms/sites_controller_test.rb +27 -29
  257. data/test/controllers/comfy/admin/cms/snippets_controller_test.rb +54 -51
  258. data/test/controllers/comfy/admin/cms/translations_controller_test.rb +181 -0
  259. data/test/controllers/comfy/cms/assets_controller_test.rb +24 -22
  260. data/test/controllers/comfy/cms/content_controller_test.rb +126 -140
  261. data/test/fixtures/active_storage/attachments.yml +9 -0
  262. data/test/fixtures/active_storage/blobs.yml +13 -0
  263. data/test/fixtures/comfy/cms/files.yml +2 -6
  264. data/test/fixtures/comfy/cms/fragments.yml +25 -0
  265. data/test/fixtures/comfy/cms/layouts.yml +7 -13
  266. data/test/fixtures/comfy/cms/pages.yml +2 -17
  267. data/test/fixtures/comfy/cms/revisions.yml +16 -8
  268. data/test/fixtures/comfy/cms/sites.yml +0 -1
  269. data/test/fixtures/comfy/cms/snippets.yml +1 -1
  270. data/test/fixtures/comfy/cms/translations.yml +7 -0
  271. data/test/fixtures/generators/cms/application.rb +7 -0
  272. data/test/fixtures/generators/cms/routes.rb +4 -7
  273. data/test/fixtures/generators/scaffold/controller.rb +10 -10
  274. data/test/fixtures/generators/scaffold/migration.rb +2 -3
  275. data/test/fixtures/generators/scaffold/model.rb +7 -7
  276. data/test/fixtures/generators/scaffold/routes.rb +1 -2
  277. data/test/fixtures/generators/scaffold/tests/controller.rb +37 -24
  278. data/test/fixtures/generators/scaffold/tests/model.rb +3 -4
  279. data/test/fixtures/generators/scaffold/views/_form.haml +3 -2
  280. data/test/fixtures/generators/scaffold/views/edit.haml +1 -1
  281. data/test/fixtures/generators/scaffold/views/index.haml +15 -13
  282. data/test/fixtures/generators/scaffold/views/new.haml +1 -1
  283. data/test/fixtures/generators/scaffold/views/show.haml +2 -2
  284. data/test/gemfiles/Gemfile.rails.5.2 +32 -0
  285. data/test/generators/cms_assets_generator_test.rb +1 -2
  286. data/test/generators/cms_generator_test.rb +3 -1
  287. data/test/generators/cms_views_generator_test.rb +1 -1
  288. data/test/generators/scaffold_generator_test.rb +2 -2
  289. data/test/helpers/cms_helper_test.rb +52 -73
  290. data/test/integration/access_control_test.rb +35 -28
  291. data/test/integration/js_variables_test.rb +1 -2
  292. data/test/integration/render_cms_test.rb +37 -37
  293. data/test/integration/routing_test.rb +4 -5
  294. data/test/integration/seeds_test.rb +76 -0
  295. data/test/integration/sites_test.rb +35 -49
  296. data/test/integration/view_hooks_test.rb +12 -13
  297. data/test/lib/configuration_test.rb +3 -4
  298. data/test/lib/content/block_test.rb +26 -0
  299. data/test/lib/content/params_parser_test.rb +125 -0
  300. data/test/lib/content/renderer_test.rb +240 -0
  301. data/test/lib/content/tag_test.rb +48 -0
  302. data/test/lib/content/tags/asset_test.rb +79 -0
  303. data/test/lib/content/tags/checkbox_test.rb +20 -0
  304. data/test/lib/content/tags/date_test.rb +20 -0
  305. data/test/lib/content/tags/datetime_test.rb +20 -0
  306. data/test/lib/content/tags/file_link_test.rb +78 -0
  307. data/test/lib/content/tags/file_test.rb +60 -0
  308. data/test/lib/content/tags/files_test.rb +49 -0
  309. data/test/lib/content/tags/fragment_test.rb +63 -0
  310. data/test/lib/content/tags/helper_test.rb +52 -0
  311. data/test/lib/content/tags/markdown_test.rb +33 -0
  312. data/test/lib/content/tags/number_test.rb +13 -0
  313. data/test/lib/content/tags/partial_test.rb +43 -0
  314. data/test/lib/content/tags/snippet_test.rb +36 -0
  315. data/test/lib/content/tags/template_test.rb +35 -0
  316. data/test/lib/content/tags/text_test.rb +13 -0
  317. data/test/lib/content/tags/textarea_test.rb +13 -0
  318. data/test/lib/content/tags/wysiwyg_test.rb +13 -0
  319. data/test/lib/revisions_test.rb +146 -111
  320. data/test/lib/seeds/files_test.rb +96 -0
  321. data/test/lib/seeds/layouts_test.rb +155 -0
  322. data/test/lib/seeds/pages_test.rb +227 -0
  323. data/test/lib/seeds/snippets_test.rb +98 -0
  324. data/test/lib/seeds_test.rb +50 -0
  325. data/test/models/categorization_test.rb +37 -38
  326. data/test/models/category_test.rb +14 -14
  327. data/test/models/file_test.rb +23 -96
  328. data/test/models/fragment_test.rb +131 -0
  329. data/test/models/layout_test.rb +105 -74
  330. data/test/models/page_test.rb +352 -97
  331. data/test/models/site_test.rb +101 -90
  332. data/test/models/snippet_test.rb +29 -23
  333. data/test/models/translation_test.rb +60 -0
  334. data/test/tasks/cms_seeds_test.rb +33 -0
  335. data/test/test_helper.rb +49 -32
  336. metadata +235 -210
  337. data/_config.yml +0 -1
  338. data/app/assets/images/comfy/admin/cms/arrow_bottom.gif +0 -0
  339. data/app/assets/images/comfy/admin/cms/arrow_right.gif +0 -0
  340. data/app/assets/images/comfy/admin/cms/checkerboard.gif +0 -0
  341. data/app/assets/images/comfy/admin/cms/icon_draft.gif +0 -0
  342. data/app/assets/images/comfy/admin/cms/icon_file.gif +0 -0
  343. data/app/assets/images/comfy/admin/cms/icon_layout.gif +0 -0
  344. data/app/assets/images/comfy/admin/cms/icon_move.gif +0 -0
  345. data/app/assets/images/comfy/admin/cms/icon_page.gif +0 -0
  346. data/app/assets/images/comfy/admin/cms/icon_site.gif +0 -0
  347. data/app/assets/images/comfy/admin/cms/icon_snippet.gif +0 -0
  348. data/app/assets/javascripts/comfy/admin/cms/lib/bootstrap-datetimepicker.js +0 -29
  349. data/app/assets/javascripts/comfy/admin/cms/lib/diff.js.coffee +0 -9
  350. data/app/assets/javascripts/comfy/admin/cms/lib/diff/pretty_text_diff.min.js +0 -5
  351. data/app/assets/stylesheets/comfy/admin/cms/bootstrap_overrides.sass +0 -32
  352. data/app/assets/stylesheets/comfy/admin/cms/lib/bootstrap-datetimepicker.css +0 -9
  353. data/app/models/comfy/cms/block.rb +0 -63
  354. data/app/views/comfy/admin/cms/files/_page_form.html.haml +0 -10
  355. data/app/views/comfy/admin/cms/pages/_form_blocks.html.haml +0 -32
  356. data/app/views/comfy/admin/cms/pages/form_blocks.js.erb +0 -1
  357. data/app/views/comfy/admin/cms/partials/_body_before.html.haml +0 -3
  358. data/app/views/comfy/admin/cms/partials/_file_form_after.html.haml +0 -3
  359. data/app/views/comfy/admin/cms/partials/_file_form_before.html.haml +0 -3
  360. data/app/views/comfy/admin/cms/partials/_files_after.html.haml +0 -3
  361. data/app/views/comfy/admin/cms/partials/_files_before.html.haml +0 -3
  362. data/app/views/comfy/admin/cms/partials/_html_footer.html.haml +0 -2
  363. data/app/views/comfy/admin/cms/partials/_html_head.html.haml +0 -2
  364. data/app/views/comfy/admin/cms/partials/_layout_form_after.html.haml +0 -3
  365. data/app/views/comfy/admin/cms/partials/_layout_form_before.html.haml +0 -3
  366. data/app/views/comfy/admin/cms/partials/_layouts_after.html.haml +0 -3
  367. data/app/views/comfy/admin/cms/partials/_layouts_before.html.haml +0 -3
  368. data/app/views/comfy/admin/cms/partials/_navigation_after.html.haml +0 -3
  369. data/app/views/comfy/admin/cms/partials/_navigation_before.html.haml +0 -3
  370. data/app/views/comfy/admin/cms/partials/_navigation_inner.html.haml +0 -3
  371. data/app/views/comfy/admin/cms/partials/_page_form_after.html.haml +0 -3
  372. data/app/views/comfy/admin/cms/partials/_page_form_before.html.haml +0 -3
  373. data/app/views/comfy/admin/cms/partials/_page_form_inner.html.haml +0 -3
  374. data/app/views/comfy/admin/cms/partials/_pages_after.html.haml +0 -3
  375. data/app/views/comfy/admin/cms/partials/_pages_before.html.haml +0 -3
  376. data/app/views/comfy/admin/cms/partials/_right_column_after.html.haml +0 -3
  377. data/app/views/comfy/admin/cms/partials/_right_column_before.html.haml +0 -3
  378. data/app/views/comfy/admin/cms/partials/_site_form_after.html.haml +0 -3
  379. data/app/views/comfy/admin/cms/partials/_site_form_before.html.haml +0 -3
  380. data/app/views/comfy/admin/cms/partials/_sites_after.html.haml +0 -3
  381. data/app/views/comfy/admin/cms/partials/_sites_before.html.haml +0 -3
  382. data/app/views/comfy/admin/cms/partials/_snippet_form_after.html.haml +0 -3
  383. data/app/views/comfy/admin/cms/partials/_snippet_form_before.html.haml +0 -3
  384. data/app/views/comfy/admin/cms/partials/_snippets_after.html.haml +0 -3
  385. data/app/views/comfy/admin/cms/partials/_snippets_before.html.haml +0 -3
  386. data/app/views/comfy/admin/cms/sites/_mirrors.html.haml +0 -18
  387. data/app/views/comfy/cms/content/render_sitemap.xml.builder +0 -14
  388. data/app/views/layouts/comfy/admin/cms/_footer.html.haml +0 -3
  389. data/config/initializers/paperclip.rb +0 -3
  390. data/config/initializers/secret_token.rb +0 -15
  391. data/db/cms_fixtures/sample-site/categories/files.yml +0 -1
  392. data/db/cms_fixtures/sample-site/categories/pages.yml +0 -1
  393. data/db/cms_fixtures/sample-site/categories/snippets.yml +0 -1
  394. data/db/cms_fixtures/sample-site/files/_sample.jpg.yml +0 -5
  395. data/db/cms_fixtures/sample-site/layouts/default/attributes.yml +0 -1
  396. data/db/cms_fixtures/sample-site/layouts/default/content.html +0 -5
  397. data/db/cms_fixtures/sample-site/layouts/default/javascript.js +0 -1
  398. data/db/cms_fixtures/sample-site/layouts/default/nested/attributes.yml +0 -2
  399. data/db/cms_fixtures/sample-site/layouts/default/nested/content.haml +0 -3
  400. data/db/cms_fixtures/sample-site/layouts/default/nested/javascript.js +0 -1
  401. data/db/cms_fixtures/sample-site/layouts/default/nested/stylesheet.css +0 -1
  402. data/db/cms_fixtures/sample-site/layouts/default/stylesheet.css +0 -1
  403. data/db/cms_fixtures/sample-site/pages/index/attributes.yml +0 -6
  404. data/db/cms_fixtures/sample-site/pages/index/child/attributes.yml +0 -3
  405. data/db/cms_fixtures/sample-site/pages/index/child/left.haml +0 -1
  406. data/db/cms_fixtures/sample-site/pages/index/child/right.html +0 -1
  407. data/db/cms_fixtures/sample-site/pages/index/content.html +0 -2
  408. data/db/cms_fixtures/sample-site/snippets/default/attributes.yml +0 -4
  409. data/db/cms_fixtures/sample-site/snippets/default/content.html +0 -1
  410. data/db/seeds.rb +0 -7
  411. data/db/upgrade_migrations/02_upgrade_to_1_1_0.rb +0 -19
  412. data/db/upgrade_migrations/03_upgrade_to_1_2_0.rb +0 -15
  413. data/db/upgrade_migrations/04_upgrade_to_1_3_0.rb +0 -23
  414. data/db/upgrade_migrations/05_upgrade_to_1_4_0.rb +0 -33
  415. data/db/upgrade_migrations/06_upgrade_to_1_5_0.rb +0 -21
  416. data/db/upgrade_migrations/07_upgrade_to_1_6_0.rb +0 -25
  417. data/db/upgrade_migrations/08_upgrade_to_1_12_0.rb +0 -83
  418. data/doc/preview.png +0 -0
  419. data/lib/comfortable_mexican_sofa/extensions/cms_manageable.rb +0 -106
  420. data/lib/comfortable_mexican_sofa/extensions/is_categorized.rb +0 -49
  421. data/lib/comfortable_mexican_sofa/extensions/is_mirrored.rb +0 -86
  422. data/lib/comfortable_mexican_sofa/extensions/rails.rb +0 -17
  423. data/lib/comfortable_mexican_sofa/fixture.rb +0 -82
  424. data/lib/comfortable_mexican_sofa/fixture/category.rb +0 -42
  425. data/lib/comfortable_mexican_sofa/fixture/file.rb +0 -85
  426. data/lib/comfortable_mexican_sofa/fixture/layout.rb +0 -95
  427. data/lib/comfortable_mexican_sofa/fixture/page.rb +0 -129
  428. data/lib/comfortable_mexican_sofa/fixture/snippet.rb +0 -75
  429. data/lib/comfortable_mexican_sofa/tag.rb +0 -154
  430. data/lib/comfortable_mexican_sofa/tags/asset.rb +0 -30
  431. data/lib/comfortable_mexican_sofa/tags/collection.rb +0 -64
  432. data/lib/comfortable_mexican_sofa/tags/field_boolean.rb +0 -17
  433. data/lib/comfortable_mexican_sofa/tags/field_datetime.rb +0 -17
  434. data/lib/comfortable_mexican_sofa/tags/field_integer.rb +0 -17
  435. data/lib/comfortable_mexican_sofa/tags/field_rich_text.rb +0 -17
  436. data/lib/comfortable_mexican_sofa/tags/field_string.rb +0 -17
  437. data/lib/comfortable_mexican_sofa/tags/field_text.rb +0 -17
  438. data/lib/comfortable_mexican_sofa/tags/file.rb +0 -29
  439. data/lib/comfortable_mexican_sofa/tags/helper.rb +0 -24
  440. data/lib/comfortable_mexican_sofa/tags/page_datetime.rb +0 -13
  441. data/lib/comfortable_mexican_sofa/tags/page_file.rb +0 -62
  442. data/lib/comfortable_mexican_sofa/tags/page_files.rb +0 -51
  443. data/lib/comfortable_mexican_sofa/tags/page_integer.rb +0 -13
  444. data/lib/comfortable_mexican_sofa/tags/page_markdown.rb +0 -16
  445. data/lib/comfortable_mexican_sofa/tags/page_rich_text.rb +0 -13
  446. data/lib/comfortable_mexican_sofa/tags/page_string.rb +0 -13
  447. data/lib/comfortable_mexican_sofa/tags/page_text.rb +0 -13
  448. data/lib/comfortable_mexican_sofa/tags/partial.rb +0 -23
  449. data/lib/comfortable_mexican_sofa/tags/snippet.rb +0 -19
  450. data/lib/comfortable_mexican_sofa/tags/template.rb +0 -22
  451. data/lib/generators/comfy/scaffold/templates/views/_form.haml +0 -6
  452. data/lib/generators/comfy/scaffold/templates/views/index.haml +0 -23
  453. data/lib/tasks/comfortable_mexican_sofa.rake +0 -37
  454. data/test/fixtures/comfy/cms/blocks.yml +0 -12
  455. data/test/gemfiles/Gemfile.rails.4.1 +0 -22
  456. data/test/gemfiles/Gemfile.rails.4.2 +0 -22
  457. data/test/gemfiles/Gemfile.rails.5.0 +0 -23
  458. data/test/gemfiles/Gemfile.rails.master +0 -23
  459. data/test/integration/fixtures_test.rb +0 -65
  460. data/test/integration/mirrors_test.rb +0 -72
  461. data/test/lib/fixtures/categories_test.rb +0 -36
  462. data/test/lib/fixtures/files_test.rb +0 -109
  463. data/test/lib/fixtures/layouts_test.rb +0 -135
  464. data/test/lib/fixtures/pages_test.rb +0 -168
  465. data/test/lib/fixtures/snippets_test.rb +0 -106
  466. data/test/lib/fixtures_test.rb +0 -43
  467. data/test/lib/mirrors_test.rb +0 -254
  468. data/test/lib/tag_test.rb +0 -309
  469. data/test/lib/tags/asset_test.rb +0 -95
  470. data/test/lib/tags/collection_test.rb +0 -117
  471. data/test/lib/tags/field_boolean_test.rb +0 -49
  472. data/test/lib/tags/field_datetime_test.rb +0 -50
  473. data/test/lib/tags/field_integer_test.rb +0 -49
  474. data/test/lib/tags/field_rich_text_test.rb +0 -49
  475. data/test/lib/tags/field_string_test.rb +0 -52
  476. data/test/lib/tags/field_text_test.rb +0 -48
  477. data/test/lib/tags/file_test.rb +0 -67
  478. data/test/lib/tags/helper_test.rb +0 -86
  479. data/test/lib/tags/page_datetime_test.rb +0 -50
  480. data/test/lib/tags/page_file_test.rb +0 -119
  481. data/test/lib/tags/page_files_test.rb +0 -117
  482. data/test/lib/tags/page_integer_test.rb +0 -49
  483. data/test/lib/tags/page_markdown_test.rb +0 -48
  484. data/test/lib/tags/page_rich_text_test.rb +0 -49
  485. data/test/lib/tags/page_string_test.rb +0 -49
  486. data/test/lib/tags/page_text_test.rb +0 -52
  487. data/test/lib/tags/partial_test.rb +0 -76
  488. data/test/lib/tags/snippet_test.rb +0 -45
  489. data/test/lib/tags/template_test.rb +0 -56
  490. data/test/models/block_test.rb +0 -233
@@ -0,0 +1,131 @@
1
+ require_relative '../test_helper'
2
+
3
+ class CmsFragmentTest < ActiveSupport::TestCase
4
+
5
+ setup do
6
+ @site = comfy_cms_sites(:default)
7
+ @layout = comfy_cms_layouts(:default)
8
+ @page = comfy_cms_pages(:default)
9
+
10
+ @upload_doc = fixture_file_upload("files/document.pdf", "application/pdf")
11
+ @upload_img = fixture_file_upload("files/image.jpg", "image/jpeg")
12
+ end
13
+
14
+ def page_params(frag_params = [])
15
+ {
16
+ layout: @layout,
17
+ label: 'test page',
18
+ slug: 'test_page',
19
+ parent_id: @page.id,
20
+ fragments_attributes: frag_params
21
+ }
22
+ end
23
+
24
+ # -- Tests -------------------------------------------------------------------
25
+
26
+ def test_initialization
27
+ frag = Comfy::Cms::Fragment.new
28
+ assert_equal "text", frag.tag
29
+ end
30
+
31
+ def test_fixtures_validity
32
+ Comfy::Cms::Fragment.all.each do |frag|
33
+ assert frag.valid?, frag.errors.full_messages.to_s
34
+ end
35
+ end
36
+
37
+ def test_validation
38
+ frag = Comfy::Cms::Fragment.new
39
+ refute frag.valid?
40
+ assert_has_errors_on frag, :identifier, :record
41
+ end
42
+
43
+ def test_content_serialization
44
+ fragment = Comfy::Cms::Fragment.new
45
+
46
+ fragment.content = 'test'
47
+ assert_equal 'test', fragment.content
48
+
49
+ fragment.content = 12345
50
+ assert_equal 12345, fragment.content
51
+
52
+ fragment.content = [1, 2, 3]
53
+ assert_equal [1, 2, 3], fragment.content
54
+ end
55
+
56
+ def test_creation
57
+ assert_difference "Comfy::Cms::Fragment.count" do
58
+ @page.fragments.create!(
59
+ identifier: "test",
60
+ content: "test content"
61
+ )
62
+ end
63
+ end
64
+
65
+ def test_creation_with_files
66
+ assert_count_difference [Comfy::Cms::Fragment] do
67
+ assert_count_difference [ActiveStorage::Attachment], 2 do
68
+ frag = @page.fragments.create!(
69
+ identifier: "test",
70
+ tag: "files",
71
+ files: [@upload_doc, @upload_img]
72
+ )
73
+ assert_equal 2, frag.attachments.count
74
+ end
75
+ end
76
+ end
77
+
78
+ def test_creation_with_file
79
+ assert_count_difference [Comfy::Cms::Fragment, ActiveStorage::Attachment] do
80
+ frag = @page.fragments.create!(
81
+ identifier: "test",
82
+ tag: "file",
83
+ files: [@upload_doc, @upload_img]
84
+ )
85
+ assert_equal 1, frag.attachments.count
86
+ end
87
+ end
88
+
89
+ def test_update_with_files
90
+ frag = comfy_cms_fragments(:file)
91
+ assert_equal 1, frag.attachments.count
92
+ assert_equal "fragment.jpg", frag.attachments.first.filename.to_s
93
+ assert_difference -> {frag.attachments.count} do
94
+ frag.update_attributes(
95
+ tag: "files",
96
+ files: [@upload_doc]
97
+ )
98
+ end
99
+ end
100
+
101
+ def test_update_with_file
102
+ frag = comfy_cms_fragments(:file)
103
+ assert_equal 1, frag.attachments.count
104
+ assert_equal "fragment.jpg", frag.attachments.first.filename.to_s
105
+ assert_no_difference -> {frag.attachments.count} do
106
+ frag.update_attributes(
107
+ tag: "file",
108
+ files: [@upload_doc]
109
+ )
110
+ end
111
+ frag.reload
112
+ assert_equal "document.pdf", frag.attachments.first.filename.to_s
113
+ end
114
+
115
+ def test_update_with_file_removal
116
+ frag = comfy_cms_fragments(:file)
117
+ assert_difference -> {frag.attachments.count}, -1 do
118
+ frag.update_attributes(
119
+ file_ids_destroy: frag.attachments.pluck(:id)
120
+ )
121
+ end
122
+ end
123
+
124
+ def test_touch
125
+ timestamp = 2.days.ago
126
+ @page.update_column(:updated_at, timestamp)
127
+ comfy_cms_fragments(:default).update_attributes(content: "updated")
128
+ @page.reload
129
+ refute_equal timestamp, @page.updated_at
130
+ end
131
+ end
@@ -1,62 +1,112 @@
1
1
  require_relative '../test_helper'
2
2
 
3
3
  class CmsLayoutTest < ActiveSupport::TestCase
4
-
4
+
5
+ setup do
6
+ @site = comfy_cms_sites(:default)
7
+ @layout = comfy_cms_layouts(:default)
8
+ @page = comfy_cms_pages(:default)
9
+ end
10
+
5
11
  def test_fixtures_validity
6
12
  Comfy::Cms::Layout.all.each do |layout|
7
13
  assert layout.valid?, layout.errors.full_messages.to_s
8
14
  end
9
15
  end
10
-
16
+
11
17
  def test_validations
12
- layout = comfy_cms_sites(:default).layouts.create
18
+ layout = @site.layouts.create
13
19
  assert layout.errors.present?
14
20
  assert_has_errors_on layout, [:label, :identifier]
15
21
  end
16
-
22
+
23
+ def test_content_tokens
24
+ layout = Comfy::Cms::Layout.new(content: "a {{cms:text content}} b")
25
+ assert_equal ["a ", {tag_class: "text", tag_params: "content"}, " b"],
26
+ layout.content_tokens
27
+ end
28
+
29
+ def test_content_tokens_nested
30
+ layout_a = Comfy::Cms::Layout.new(content: "a {{cms:text content}} {{cms:text footer}} b")
31
+ layout_b = Comfy::Cms::Layout.new(content: "c {{cms:text content}} d")
32
+ layout_b.parent = layout_a
33
+ assert_equal [
34
+ "a ", "c ", {tag_class: "text", tag_params: "content"}, " d", " ",
35
+ {tag_class: "text", tag_params: "footer"}, " b"
36
+ ], layout_b.content_tokens
37
+ end
38
+
39
+ def test_content_tokens_nested_with_fragment_subclass_tag
40
+ layout_a = Comfy::Cms::Layout.new(content: "a {{cms:markdown content}} b")
41
+ layout_b = Comfy::Cms::Layout.new(content: "c {{cms:text content}} d")
42
+ layout_b.parent = layout_a
43
+ assert_equal [
44
+ "a ", "c ", {tag_class: "text", tag_params: "content"}, " d", " b"
45
+ ], layout_b.content_tokens
46
+ end
47
+
48
+ def test_content_tokens_nested_with_non_fragment_subclass_tag
49
+ layout_a = Comfy::Cms::Layout.new(content: "a {{cms:snippet content}} b")
50
+ layout_b = Comfy::Cms::Layout.new(content: "c {{cms:text content}} d")
51
+ layout_b.parent = layout_a
52
+ assert_equal [
53
+ "c ", {tag_class: "text", tag_params: "content"}, " d"
54
+ ], layout_b.content_tokens
55
+ end
56
+
57
+ def test_content_tokens_nested_without_content_tag
58
+ layout_a = Comfy::Cms::Layout.new(content: "a {{cms:text footer}} b")
59
+ layout_b = Comfy::Cms::Layout.new(content: "c {{cms:text content}} d")
60
+ layout_b.parent = layout_a
61
+ assert_equal ["c ", {tag_class: "text", tag_params: "content"}, " d"],
62
+ layout_b.content_tokens
63
+ end
64
+
17
65
  def test_label_assignment
18
- layout = comfy_cms_sites(:default).layouts.new(
19
- :identifier => 'test',
20
- :content => '{{cms:page:content}}'
66
+ layout = @site.layouts.new(
67
+ identifier: 'test',
68
+ content: 'content'
21
69
  )
22
70
  assert layout.valid?
23
71
  assert_equal 'Test', layout.label
24
72
  end
25
-
73
+
26
74
  def test_creation
27
75
  assert_difference 'Comfy::Cms::Layout.count' do
28
- layout = comfy_cms_sites(:default).layouts.create(
29
- :label => 'New Layout',
30
- :identifier => 'new-layout',
31
- :content => '{{cms:page:content}}',
32
- :css => 'css',
33
- :js => 'js'
76
+ layout = @site.layouts.create(
77
+ label: 'New Layout',
78
+ identifier: 'new-layout',
79
+ content: '{{cms:text default}}',
80
+ css: 'css',
81
+ js: 'js'
34
82
  )
35
- assert_equal 'New Layout', layout.label
36
- assert_equal 'new-layout', layout.identifier
37
- assert_equal '{{cms:page:content}}', layout.content
38
- assert_equal 'css', layout.css
39
- assert_equal 'js', layout.js
40
- assert_equal 1, layout.position
83
+ assert_equal 'New Layout', layout.label
84
+ assert_equal 'new-layout', layout.identifier
85
+ assert_equal '{{cms:text default}}', layout.content
86
+ assert_equal 'css', layout.css
87
+ assert_equal 'js', layout.js
88
+ assert_equal 1, layout.position
41
89
  end
42
90
  end
43
-
91
+
44
92
  def test_options_for_select
45
93
  assert_equal ['Default Layout', 'Nested Layout', '. . Child Layout'],
46
- Comfy::Cms::Layout.options_for_select(comfy_cms_sites(:default)).collect{|t| t.first}
94
+ Comfy::Cms::Layout.options_for_select(@site).collect{|t| t.first}
47
95
  assert_equal ['Default Layout', 'Nested Layout'],
48
- Comfy::Cms::Layout.options_for_select(comfy_cms_sites(:default), comfy_cms_layouts(:child)).collect{|t| t.first}
96
+ Comfy::Cms::Layout.options_for_select(@site, comfy_cms_layouts(:child)).collect{|t| t.first}
49
97
  assert_equal ['Default Layout'],
50
- Comfy::Cms::Layout.options_for_select(comfy_cms_sites(:default), comfy_cms_layouts(:nested)).collect{|t| t.first}
98
+ Comfy::Cms::Layout.options_for_select(@site, comfy_cms_layouts(:nested)).collect{|t| t.first}
51
99
  end
52
-
100
+
53
101
  def test_app_layouts_for_select
54
102
  FileUtils.touch(File.expand_path('app/views/layouts/comfy/admin/cms/nested.html.erb', Rails.root))
55
103
  FileUtils.touch(File.expand_path('app/views/layouts/comfy/_partial.html.erb', Rails.root))
56
104
  FileUtils.touch(File.expand_path('app/views/layouts/comfy/not_a_layout.erb', Rails.root))
57
105
 
58
106
  view_paths = [File.expand_path('app/views/', Rails.root)]
59
- assert_equal ['comfy/admin/cms', 'comfy/admin/cms/nested'], Comfy::Cms::Layout.app_layouts_for_select(view_paths)
107
+ assert_equal ['comfy/admin/cms', 'comfy/admin/cms/nested'],
108
+ Comfy::Cms::Layout.app_layouts_for_select(view_paths)
109
+
60
110
  ensure
61
111
  FileUtils.rm(File.expand_path('app/views/layouts/comfy/admin/cms/nested.html.erb', Rails.root))
62
112
  FileUtils.rm(File.expand_path('app/views/layouts/comfy/_partial.html.erb', Rails.root))
@@ -72,71 +122,52 @@ class CmsLayoutTest < ActiveSupport::TestCase
72
122
  ensure
73
123
  FileUtils.rm_r(File.expand_path('app/additional_views', Rails.root))
74
124
  end
75
-
76
- def test_merged_content_with_same_child_content
77
- parent_layout = comfy_cms_layouts(:nested)
78
- assert_equal "{{cms:page:header}}\n{{cms:page:content}}", parent_layout.content
79
- assert_equal "{{cms:page:header}}\n{{cms:page:content}}", parent_layout.merged_content
80
-
81
- child_layout = comfy_cms_layouts(:child)
82
- assert_equal parent_layout, child_layout.parent
83
- assert_equal "{{cms:page:left_column}}\n{{cms:page:right_column}}", child_layout.content
84
- assert_equal "{{cms:page:header}}\n{{cms:page:left_column}}\n{{cms:page:right_column}}", child_layout.merged_content
85
-
86
- child_layout.update_columns(:content => '{{cms:page:content}}')
87
- assert_equal "{{cms:page:header}}\n{{cms:page:content}}", child_layout.merged_content
88
-
89
- parent_layout.update_columns(:content => '{{cms:page:whatever}}')
90
- child_layout.reload
91
- assert_equal '{{cms:page:content}}', child_layout.merged_content
92
- end
93
-
125
+
94
126
  def test_update_forces_page_content_reload
95
127
  layout_1 = comfy_cms_layouts(:nested)
96
128
  layout_2 = comfy_cms_layouts(:child)
97
- page_1 = comfy_cms_sites(:default).pages.create!(
98
- :label => 'page_1',
99
- :slug => 'page-1',
100
- :parent_id => comfy_cms_pages(:default).id,
101
- :layout_id => layout_1.id,
102
- :is_published => '1',
103
- :blocks_attributes => [
104
- { :identifier => 'header',
105
- :content => 'header_content' },
106
- { :identifier => 'content',
107
- :content => 'content_content' }
129
+ page_1 = @site.pages.create!(
130
+ label: 'page_1',
131
+ slug: 'page-1',
132
+ parent_id: @page.id,
133
+ layout_id: layout_1.id,
134
+ is_published: '1',
135
+ fragments_attributes: [
136
+ { identifier: 'header',
137
+ content: 'header_content' },
138
+ { identifier: 'content',
139
+ content: 'content_content' }
108
140
  ]
109
141
  )
110
- page_2 = comfy_cms_sites(:default).pages.create!(
111
- :label => 'page_2',
112
- :slug => 'page-2',
113
- :parent_id => comfy_cms_pages(:default).id,
114
- :layout_id => layout_2.id,
115
- :is_published => '1',
116
- :blocks_attributes => [
117
- { :identifier => 'header',
118
- :content => 'header_content' },
119
- { :identifier => 'left_column',
120
- :content => 'left_column_content' },
121
- { :identifier => 'right_column',
122
- :content => 'left_column_content' }
142
+ page_2 = @site.pages.create!(
143
+ label: 'page_2',
144
+ slug: 'page-2',
145
+ parent_id: @page.id,
146
+ layout_id: layout_2.id,
147
+ is_published: '1',
148
+ fragments_attributes: [
149
+ { identifier: 'header',
150
+ content: 'header_content' },
151
+ { identifier: 'left_column',
152
+ content: 'left_column_content' },
153
+ { identifier: 'right_column',
154
+ content: 'left_column_content' }
123
155
  ]
124
156
  )
125
157
  assert_equal "header_content\ncontent_content", page_1.content_cache
126
158
  assert_equal "header_content\nleft_column_content\nleft_column_content", page_2.content_cache
127
-
128
- layout_1.update_attributes(:content => "Updated {{cms:page:content}}")
159
+
160
+ layout_1.update_attributes(content: "Updated {{cms:text content}}")
129
161
  page_1.reload
130
162
  page_2.reload
131
-
163
+
132
164
  assert_equal "Updated content_content", page_1.content_cache
133
165
  assert_equal "Updated left_column_content\nleft_column_content", page_2.content_cache
134
166
  end
135
167
 
136
168
  def test_cache_buster
137
169
  timestamp = Time.current
138
- layout = comfy_cms_sites(:default).layouts.create(updated_at: timestamp)
139
-
170
+ layout = @site.layouts.create(updated_at: timestamp)
140
171
  assert_equal timestamp.to_i, layout.cache_buster
141
172
  end
142
173
  end
@@ -1,9 +1,22 @@
1
- # encoding: utf-8
2
-
3
1
  require_relative '../test_helper'
4
2
 
5
3
  class CmsPageTest < ActiveSupport::TestCase
6
4
 
5
+ setup do
6
+ @site = comfy_cms_sites(:default)
7
+ @layout = comfy_cms_layouts(:default)
8
+ @page = comfy_cms_pages(:default)
9
+ end
10
+
11
+ def new_params(options = {})
12
+ { label: "Test Page",
13
+ slug: "test-page",
14
+ layout: @layout
15
+ }.merge(options)
16
+ end
17
+
18
+ # -- Tests -------------------------------------------------------------------
19
+
7
20
  def test_fixtures_validity
8
21
  Comfy::Cms::Page.all.each do |page|
9
22
  assert page.valid?, page.errors.full_messages.to_s
@@ -15,32 +28,32 @@ class CmsPageTest < ActiveSupport::TestCase
15
28
  page = Comfy::Cms::Page.new
16
29
  page.save
17
30
  assert page.invalid?
18
- assert_has_errors_on page, :site_id, :layout, :slug, :label
31
+ assert_has_errors_on page, :site, :layout, :slug, :label
19
32
  end
20
33
 
21
34
  def test_validation_of_parent_presence
22
- page = comfy_cms_sites(:default).pages.new(new_params)
35
+ page = @site.pages.new(new_params)
23
36
  assert !page.parent
24
37
  assert page.valid?, page.errors.full_messages.to_s
25
- assert_equal comfy_cms_pages(:default), page.parent
38
+ assert_equal @page, page.parent
26
39
  end
27
40
 
28
41
  def test_validation_of_parent_relationship
29
- page = comfy_cms_pages(:default)
30
- assert !page.parent
31
- page.parent = page
32
- assert page.invalid?
33
- assert_has_errors_on page, :parent_id
34
- page.parent = comfy_cms_pages(:child)
35
- assert page.invalid?
36
- assert_has_errors_on page, :parent_id
42
+ assert !@page.parent
43
+ @page.parent = @page
44
+ assert @page.invalid?
45
+ assert_has_errors_on @page, :parent_id
46
+
47
+ @page.parent = comfy_cms_pages(:child)
48
+ assert @page.invalid?
49
+ assert_has_errors_on @page, :parent_id
37
50
  end
38
51
 
39
52
  def test_validation_of_target_page
40
53
  page = comfy_cms_pages(:child)
41
- page.target_page = comfy_cms_pages(:default)
54
+ page.target_page = @page
42
55
  page.save!
43
- assert_equal comfy_cms_pages(:default), page.target_page
56
+ assert_equal @page, page.target_page
44
57
  page.target_page = page
45
58
  assert page.invalid?
46
59
  assert_has_errors_on page, :target_page_id
@@ -60,73 +73,225 @@ class CmsPageTest < ActiveSupport::TestCase
60
73
 
61
74
  def test_validation_of_slug_allows_unicode_accent_characters
62
75
  page = comfy_cms_pages(:child)
63
- thai_character_ko_kai = "\u0e01"
64
- thai_character_mai_tho = "\u0E49"
76
+ thai_character_ko_kai = "\u0e01"
77
+ thai_character_mai_tho = "\u0E49"
65
78
  page.slug = thai_character_ko_kai + thai_character_mai_tho
66
79
  assert page.valid?
67
80
  end
68
81
 
69
82
  def test_label_assignment
70
- page = comfy_cms_sites(:default).pages.new(
71
- :slug => 'test',
72
- :parent => comfy_cms_pages(:default),
73
- :layout => comfy_cms_layouts(:default)
83
+ page = @site.pages.new(
84
+ slug: 'test',
85
+ parent: @page,
86
+ layout: @layout
74
87
  )
75
88
  assert page.valid?
76
89
  assert_equal 'Test', page.label
77
90
  end
78
91
 
79
- def test_creation
80
- assert_difference ['Comfy::Cms::Page.count', 'Comfy::Cms::Block.count'] do
81
- page = comfy_cms_sites(:default).pages.create!(
82
- :label => 'test',
83
- :slug => 'test',
84
- :parent => comfy_cms_pages(:default),
85
- :layout => comfy_cms_layouts(:default),
86
- :blocks_attributes => [
87
- { :identifier => 'default_page_text',
88
- :content => 'test' }
92
+ def test_create
93
+ assert_count_difference [Comfy::Cms::Page, Comfy::Cms::Fragment] do
94
+ page = @site.pages.create!(new_params(
95
+ parent: @page,
96
+ fragments_attributes: [
97
+ { identifier: "content",
98
+ tag: "text",
99
+ content: "test" }
89
100
  ]
90
- )
101
+ ))
91
102
  assert page.is_published?
92
103
  assert_equal 1, page.position
93
104
  end
94
105
  end
95
106
 
107
+ def test_create_with_file
108
+ assert_count_difference [Comfy::Cms::Page, Comfy::Cms::Fragment, ActiveStorage::Attachment] do
109
+ page = @site.pages.create!(new_params(
110
+ parent: @page,
111
+ fragments_attributes: [{
112
+ identifier: "test",
113
+ tag: "file",
114
+ files: [fixture_file_upload("files/image.jpg", "image/jpeg")]
115
+ }]
116
+ ))
117
+ assert_equal 1, page.fragments.count
118
+ assert page.fragments.first.attachments.attached?
119
+ end
120
+ end
121
+
122
+ def test_create_with_files
123
+ assert_count_difference [Comfy::Cms::Page, Comfy::Cms::Fragment] do
124
+ assert_count_difference [ActiveStorage::Attachment], 2 do
125
+ page = @site.pages.create!(new_params(
126
+ parent: @page,
127
+ fragments_attributes: [{
128
+ identifier: "test",
129
+ tag: "files",
130
+ files: [
131
+ fixture_file_upload("files/image.jpg", "image/jpeg"),
132
+ fixture_file_upload("files/document.pdf", "application/pdf")
133
+ ]
134
+ }]
135
+ ))
136
+ assert_equal 1, page.fragments.count
137
+ assert page.fragments.first.attachments.attached?
138
+ end
139
+ end
140
+ end
141
+
142
+ def test_create_with_date
143
+ string = "1981-10-04 12:34:56"
144
+ datetime = DateTime.parse(string)
145
+ assert_count_difference [Comfy::Cms::Page, Comfy::Cms::Fragment] do
146
+ page = @site.pages.create!(new_params(
147
+ parent: @page,
148
+ fragments_attributes: [{
149
+ identifier: "test",
150
+ tag: "date_time",
151
+ datetime: string
152
+ }]
153
+ ))
154
+ frag = page.fragments.first
155
+ assert_equal datetime, frag.datetime
156
+ end
157
+ end
158
+
159
+ def test_create_with_boolean
160
+ assert_count_difference [Comfy::Cms::Page, Comfy::Cms::Fragment] do
161
+ page = @site.pages.create!(new_params(
162
+ parent: @page,
163
+ fragments_attributes: [{
164
+ identifier: "test",
165
+ tag: "checkbox",
166
+ boolean: "1"
167
+ }]
168
+ ))
169
+ frag = page.fragments.first
170
+ assert frag.boolean
171
+ end
172
+ end
173
+
174
+ def test_update
175
+ frag = comfy_cms_fragments(:default)
176
+ assert_count_no_difference [Comfy::Cms::Page, Comfy::Cms::Fragment] do
177
+ @page.update_attributes!(fragments_attributes: [{
178
+ identifier: frag.identifier,
179
+ content: "updated content"
180
+ }])
181
+ end
182
+ frag.reload
183
+ assert_equal "updated content", frag.content
184
+ end
185
+
186
+ def test_update_with_file
187
+ assert_count_no_difference [ActiveStorage::Attachment] do
188
+ @page.update_attributes!(
189
+ fragments_attributes: [{
190
+ identifier: "file",
191
+ tag: "file",
192
+ files: fixture_file_upload("files/document.pdf", "application/pdf")
193
+ }]
194
+ )
195
+ assert_equal "document.pdf", comfy_cms_fragments(:file).attachments.first.filename.to_s
196
+ end
197
+ end
198
+
199
+ def test_update_with_file_removal
200
+ id = comfy_cms_fragments(:file).attachments.first.id
201
+ assert_count_difference [ActiveStorage::Attachment], -1 do
202
+ @page.update_attributes!(
203
+ fragments_attributes: [{
204
+ identifier: "file",
205
+ file_ids_destroy: [id]
206
+ }]
207
+ )
208
+ end
209
+ end
210
+
211
+ def test_update_with_date
212
+ frag = comfy_cms_fragments(:datetime)
213
+ string = "2020-01-01"
214
+ date = DateTime.parse(string)
215
+ assert_count_no_difference [Comfy::Cms::Page, Comfy::Cms::Fragment] do
216
+ @page.update_attributes!(fragments_attributes: [{
217
+ identifier: frag.identifier,
218
+ datetime: string
219
+ }])
220
+ end
221
+ frag.reload
222
+ assert_equal date, frag.datetime
223
+ end
224
+
225
+ def test_update_with_boolean
226
+ frag = comfy_cms_fragments(:boolean)
227
+ assert frag.boolean
228
+ assert_count_no_difference [Comfy::Cms::Page, Comfy::Cms::Fragment] do
229
+ @page.update_attributes!(fragments_attributes: [{
230
+ identifier: frag.identifier,
231
+ boolean: "0"
232
+ }])
233
+ end
234
+ frag.reload
235
+ refute frag.boolean
236
+ end
237
+
238
+ def test_update_with_parent_id_change
239
+ page_a = @page
240
+ page_b = comfy_cms_pages(:child)
241
+ page_c = @site.pages.create!(
242
+ label: 'Test Page',
243
+ slug: 'test-page',
244
+ layout: @layout,
245
+ parent: page_a
246
+ )
247
+
248
+ assert_equal 2, page_a.children_count
249
+ assert_equal 0, page_b.children_count
250
+ assert_equal 0, page_c.children_count
251
+
252
+ page_c.update_attributes!(parent_id: page_b)
253
+
254
+ page_a.reload; page_b.reload; page_c.reload
255
+ assert_equal 1, page_a.children_count
256
+ assert_equal 1, page_b.children_count
257
+ assert_equal 0, page_c.children_count
258
+ end
259
+
96
260
  def test_initialization_of_full_path
97
261
  page = Comfy::Cms::Page.new
98
262
  assert_equal '/', page.full_path
99
263
 
100
264
  page = Comfy::Cms::Page.new(new_params)
101
265
  assert page.invalid?
102
- assert_has_errors_on page, :site_id
266
+ assert_has_errors_on page, :site
103
267
 
104
- page = comfy_cms_sites(:default).pages.new(new_params(:parent => comfy_cms_pages(:default)))
268
+ page = @site.pages.new(new_params(parent: @page))
105
269
  assert page.valid?
106
270
  assert_equal '/test-page', page.full_path
107
271
 
108
- page = comfy_cms_sites(:default).pages.new(new_params(:parent => comfy_cms_pages(:child)))
272
+ page = @site.pages.new(new_params(parent: comfy_cms_pages(:child)))
109
273
  assert page.valid?
110
274
  assert_equal '/child-page/test-page', page.full_path
111
275
 
112
276
  Comfy::Cms::Page.destroy_all
113
- page = comfy_cms_sites(:default).pages.new(new_params)
277
+ page = @site.pages.new(new_params)
114
278
  assert page.valid?
115
279
  assert_equal '/', page.full_path
116
280
  end
117
281
 
118
282
  def test_sync_child_pages
119
283
  page = comfy_cms_pages(:child)
120
- page_1 = comfy_cms_sites(:default).pages.create!(new_params(:parent => page, :slug => 'test-page-1'))
121
- page_2 = comfy_cms_sites(:default).pages.create!(new_params(:parent => page, :slug => 'test-page-2'))
122
- page_3 = comfy_cms_sites(:default).pages.create!(new_params(:parent => page_2, :slug => 'test-page-3'))
123
- page_4 = comfy_cms_sites(:default).pages.create!(new_params(:parent => page_1, :slug => 'test-page-4'))
284
+ page_1 = @site.pages.create!(new_params(parent: page, slug: 'test-page-1'))
285
+ page_2 = @site.pages.create!(new_params(parent: page, slug: 'test-page-2'))
286
+ page_3 = @site.pages.create!(new_params(parent: page_2, slug: 'test-page-3'))
287
+ page_4 = @site.pages.create!(new_params(parent: page_1, slug: 'test-page-4'))
288
+
124
289
  assert_equal '/child-page/test-page-1', page_1.full_path
125
290
  assert_equal '/child-page/test-page-2', page_2.full_path
126
291
  assert_equal '/child-page/test-page-2/test-page-3', page_3.full_path
127
292
  assert_equal '/child-page/test-page-1/test-page-4', page_4.full_path
128
293
 
129
- page.update_attributes!(:slug => 'updated-page')
294
+ page.update_attributes!(slug: 'updated-page')
130
295
  assert_equal '/updated-page', page.full_path
131
296
  page_1.reload; page_2.reload; page_3.reload; page_4.reload
132
297
  assert_equal '/updated-page/test-page-1', page_1.full_path
@@ -134,7 +299,7 @@ class CmsPageTest < ActiveSupport::TestCase
134
299
  assert_equal '/updated-page/test-page-2/test-page-3', page_3.full_path
135
300
  assert_equal '/updated-page/test-page-1/test-page-4', page_4.full_path
136
301
 
137
- page_2.update_attributes!(:parent => page_1)
302
+ page_2.update_attributes!(parent: page_1)
138
303
  page_1.reload; page_2.reload; page_3.reload; page_4.reload
139
304
  assert_equal '/updated-page/test-page-1', page_1.full_path
140
305
  assert_equal '/updated-page/test-page-1/test-page-2', page_2.full_path
@@ -143,12 +308,12 @@ class CmsPageTest < ActiveSupport::TestCase
143
308
  end
144
309
 
145
310
  def test_children_count_updating
146
- page_1 = comfy_cms_pages(:default)
311
+ page_1 = @page
147
312
  page_2 = comfy_cms_pages(:child)
148
313
  assert_equal 1, page_1.children_count
149
314
  assert_equal 0, page_2.children_count
150
315
 
151
- page_3 = comfy_cms_sites(:default).pages.create!(new_params(:parent => page_2))
316
+ page_3 = @site.pages.create!(new_params(parent: page_2))
152
317
  page_1.reload; page_2.reload
153
318
  assert_equal 1, page_1.children_count
154
319
  assert_equal 1, page_2.children_count
@@ -166,120 +331,195 @@ class CmsPageTest < ActiveSupport::TestCase
166
331
  end
167
332
 
168
333
  def test_cascading_destroy
169
- assert_difference 'Comfy::Cms::Page.count', -2 do
170
- assert_difference 'Comfy::Cms::Block.count', -2 do
171
- comfy_cms_pages(:default).destroy
334
+ assert_count_difference [Comfy::Cms::Page], -2 do
335
+ assert_count_difference [Comfy::Cms::Fragment], -4 do
336
+ assert_count_difference [Comfy::Cms::Translation], -1 do
337
+ @page.destroy
338
+ end
172
339
  end
173
340
  end
174
341
  end
175
342
 
176
343
  def test_options_for_select
177
344
  assert_equal ['Default Page', '. . Child Page'],
178
- Comfy::Cms::Page.options_for_select(comfy_cms_sites(:default)).collect{|t| t.first }
345
+ Comfy::Cms::Page.options_for_select(@site).collect{|t| t.first }
179
346
  assert_equal ['Default Page'],
180
- Comfy::Cms::Page.options_for_select(comfy_cms_sites(:default), comfy_cms_pages(:child)).collect{|t| t.first }
347
+ Comfy::Cms::Page.options_for_select(@site, comfy_cms_pages(:child)).collect{|t| t.first }
181
348
  assert_equal [],
182
- Comfy::Cms::Page.options_for_select(comfy_cms_sites(:default), comfy_cms_pages(:default))
349
+ Comfy::Cms::Page.options_for_select(@site, @page)
183
350
 
184
- page = Comfy::Cms::Page.new(new_params(:parent => comfy_cms_pages(:default)))
351
+ page = Comfy::Cms::Page.new(new_params(parent: @page))
185
352
  assert_equal ['Default Page', '. . Child Page'],
186
- Comfy::Cms::Page.options_for_select(comfy_cms_sites(:default), page).collect{|t| t.first }
353
+ Comfy::Cms::Page.options_for_select(@site, page).collect{|t| t.first }
354
+ end
355
+
356
+ def test_fragments_attributes
357
+ assert_equal @page.fragments.count, @page.fragments_attributes.size
358
+
359
+ @page.fragments_attributes = [
360
+ { identifier: "content",
361
+ content: "updated content"
362
+ }
363
+ ]
364
+
365
+ assert_equal [
366
+ { identifier: "boolean",
367
+ tag: "checkbox",
368
+ content: nil,
369
+ datetime: nil,
370
+ boolean: true },
371
+ { identifier: "file",
372
+ tag: "file",
373
+ content: nil,
374
+ datetime: nil,
375
+ boolean: false },
376
+ { identifier: "datetime",
377
+ tag: "datetime",
378
+ content: nil,
379
+ datetime: comfy_cms_fragments(:datetime).datetime,
380
+ boolean: false },
381
+ { identifier: "content",
382
+ tag: "text",
383
+ content: "updated content",
384
+ datetime: nil,
385
+ boolean: false }
386
+ ], @page.fragments_attributes
387
+
388
+ assert_equal [
389
+ { identifier: "boolean",
390
+ tag: "checkbox",
391
+ content: nil,
392
+ datetime: nil,
393
+ boolean: true },
394
+ { identifier: "file",
395
+ tag: "file",
396
+ content: nil,
397
+ datetime: nil,
398
+ boolean: false },
399
+ { identifier: "datetime",
400
+ tag: "datetime",
401
+ content: nil,
402
+ datetime: comfy_cms_fragments(:datetime).datetime,
403
+ boolean: false },
404
+ { identifier: "content",
405
+ tag: "text",
406
+ content: "content",
407
+ datetime: nil,
408
+ boolean: false }
409
+ ], @page.fragments_attributes_was
187
410
  end
188
411
 
189
- def test_comfy_cms_blocks_attributes_accessor
190
- page = comfy_cms_pages(:default)
191
- assert_equal page.blocks.count, page.blocks_attributes.size
192
- assert_equal 'default_field_text', page.blocks_attributes.first[:identifier]
193
- assert_equal 'default_field_text_content', page.blocks_attributes.first[:content]
412
+ def test_render
413
+ expected = @page.render
414
+ assert_equal "content", expected
415
+ end
416
+
417
+ def test_fragment_nodes
418
+ content = "a {{cms:text a}} b {{cms:snippet b}} c {{cms:text c}}"
419
+ @page.layout.update_column(:content, content)
420
+ nodes = @page.fragment_nodes
421
+ assert_equal 2, nodes.count
422
+ assert_equal "a", nodes[0].identifier
423
+ assert_equal "c", nodes[1].identifier
424
+ end
425
+
426
+ def test_fragment_nodes_with_duplicates
427
+ content = "{{cms:wysiwyg test}} {{cms:markdown test}}"
428
+ @page.layout.update_column(:content, content)
429
+ nodes = @page.fragment_nodes
430
+ assert_equal 1, nodes.count
431
+ assert_equal ComfortableMexicanSofa::Content::Tag::Wysiwyg, nodes[0].class
432
+ assert_equal "test", nodes[0].identifier
433
+ end
434
+
435
+ def test_fragment_nodes_with_no_layout
436
+ @page.update_column(:layout_id, nil)
437
+ assert_equal [], @page.fragment_nodes
194
438
  end
195
439
 
196
440
  def test_content_caching
197
- page = comfy_cms_pages(:default)
198
- assert_equal page.content_cache, page.render
441
+ assert_equal @page.content_cache, @page.render
199
442
 
200
- page.update_columns(:content_cache => 'Old Content')
201
- refute_equal page.content_cache, page.render
443
+ @page.update_columns(content_cache: 'Old Content')
444
+ refute_equal @page.content_cache, @page.render
202
445
 
203
- page.clear_content_cache!
204
- assert_equal page.content_cache, page.render
446
+ @page.clear_content_cache!
447
+ assert_equal @page.content_cache, @page.render
205
448
  end
206
449
 
207
450
  def test_content_cache_clear_on_save
208
- page = comfy_cms_pages(:default)
209
451
  old_content = 'Old Content'
210
- page.update_columns(:content_cache => old_content)
452
+ @page.update_columns(content_cache: old_content)
211
453
 
212
- page.save!
213
- refute_equal old_content, page.content_cache
454
+ @page.save!
455
+ refute_equal old_content, @page.content_cache
214
456
  end
215
457
 
216
458
  def test_scope_published
217
459
  assert_equal 2, Comfy::Cms::Page.published.count
218
- comfy_cms_pages(:child).update_columns(:is_published => false)
460
+ comfy_cms_pages(:child).update_columns(is_published: false)
219
461
  assert_equal 1, Comfy::Cms::Page.published.count
220
462
  end
221
463
 
222
464
  def test_root?
223
- assert comfy_cms_pages(:default).root?
224
- assert !comfy_cms_pages(:child).root?
465
+ assert @page.root?
466
+ refute comfy_cms_pages(:child).root?
225
467
  end
226
468
 
227
469
  def test_url
228
- site = comfy_cms_sites(:default)
229
-
230
- assert_equal '//test.host/', comfy_cms_pages(:default).url
470
+ assert_equal '//test.host/', @page.url
231
471
  assert_equal '//test.host/child-page', comfy_cms_pages(:child).url
232
472
 
233
- assert_equal '/', comfy_cms_pages(:default).url(:relative)
234
- assert_equal '/child-page', comfy_cms_pages(:child).url(:relative)
473
+ assert_equal '/', @page.url(relative: true)
474
+ assert_equal '/child-page', comfy_cms_pages(:child).url(relative: true)
235
475
 
236
- site.update_columns(:path => '/en/site')
237
- comfy_cms_pages(:default).reload
476
+ @site.update_columns(path: '/en/site')
477
+ @page.reload
238
478
  comfy_cms_pages(:child).reload
239
479
 
240
- assert_equal '//test.host/en/site/', comfy_cms_pages(:default).url
480
+ assert_equal '//test.host/en/site/', @page.url
241
481
  assert_equal '//test.host/en/site/child-page', comfy_cms_pages(:child).url
242
482
 
243
- assert_equal '/en/site/', comfy_cms_pages(:default).url(:relative)
244
- assert_equal '/en/site/child-page', comfy_cms_pages(:child).url(:relative)
483
+ assert_equal '/en/site/', @page.url(relative: true)
484
+ assert_equal '/en/site/child-page', comfy_cms_pages(:child).url(relative: true)
245
485
  end
246
486
 
247
487
  def test_url_with_public_cms_path
248
488
  ComfortableMexicanSofa.config.public_cms_path = '/custom'
249
- assert_equal '//test.host/custom/', comfy_cms_pages(:default).url
489
+ assert_equal '//test.host/custom/', @page.url
250
490
  assert_equal '//test.host/custom/child-page', comfy_cms_pages(:child).url
251
491
 
252
- assert_equal '/custom/', comfy_cms_pages(:default).url(:relative)
253
- assert_equal '/custom/child-page', comfy_cms_pages(:child).url(:relative)
492
+ assert_equal '/custom/', @page.url(relative: true)
493
+ assert_equal '/custom/child-page', comfy_cms_pages(:child).url(relative: true)
254
494
  end
255
495
 
256
496
  def test_unicode_slug_escaping
257
497
  page = comfy_cms_pages(:child)
258
- page_1 = comfy_cms_sites(:default).pages.create!(new_params(:parent => page, :slug => 'tést-ünicode-slug'))
498
+ page_1 = @site.pages.create!(new_params(parent: page, slug: 'tést-ünicode-slug'))
259
499
  assert_equal CGI::escape('tést-ünicode-slug'), page_1.slug
260
500
  assert_equal CGI::escape('/child-page/tést-ünicode-slug').gsub('%2F', '/'), page_1.full_path
261
501
  end
262
502
 
263
503
  def test_unicode_slug_unescaping
264
504
  page = comfy_cms_pages(:child)
265
- page_1 = comfy_cms_sites(:default).pages.create!(new_params(:parent => page, :slug => 'tést-ünicode-slug'))
266
- found_page = comfy_cms_sites(:default).pages.where(:slug => CGI::escape('tést-ünicode-slug')).first
505
+ page_1 = @site.pages.create!(new_params(parent: page, slug: 'tést-ünicode-slug'))
506
+ found_page = @site.pages.where(slug: CGI::escape('tést-ünicode-slug')).first
267
507
  assert_equal 'tést-ünicode-slug', found_page.slug
268
508
  assert_equal '/child-page/tést-ünicode-slug', found_page.full_path
269
509
  end
270
510
 
271
511
  def test_identifier
272
- assert_equal 'index', comfy_cms_pages(:default).identifier
512
+ assert_equal 'index', @page.identifier
273
513
  assert_equal 'child-page', comfy_cms_pages(:child).identifier
274
514
 
275
- comfy_cms_pages(:default).update_column(:slug, 'index')
515
+ @page.update_column(:slug, 'index')
276
516
  assert_equal 'index', comfy_cms_pages(:default).identifier
277
517
  end
278
518
 
279
519
  def test_children_count_updating_on_move
280
- page_1 = comfy_cms_pages(:default)
520
+ page_1 = @page
281
521
  page_2 = comfy_cms_pages(:child)
282
- page_3 = comfy_cms_sites(:default).pages.create!(new_params(:parent => page_2))
522
+ page_3 = @site.pages.create!(new_params(parent: page_2))
283
523
 
284
524
  page_2.reload
285
525
 
@@ -297,13 +537,28 @@ class CmsPageTest < ActiveSupport::TestCase
297
537
  assert_equal 0, page_3.children_count
298
538
  end
299
539
 
300
- protected
540
+ def test_translate
541
+ translation = comfy_cms_translations(:default)
542
+ translation.update_columns(layout_id: comfy_cms_layouts(:nested).id)
301
543
 
302
- def new_params(options = {})
303
- {
304
- :label => 'Test Page',
305
- :slug => 'test-page',
306
- :layout => comfy_cms_layouts(:default)
307
- }.merge(options)
544
+ @page.translate!(:fr)
545
+ assert @page.readonly?
546
+
547
+ assert_equal comfy_cms_layouts(:nested), @page.layout
548
+ assert_equal 'Default Translation', @page.label
549
+ assert_equal 'Translation Content', @page.content_cache
550
+ end
551
+
552
+ def test_translate_with_unpublished
553
+ comfy_cms_translations(:default).update_column(:is_published, false)
554
+ assert_exception_raised ActiveRecord::RecordNotFound do
555
+ @page.translate!(:fr)
556
+ end
557
+ end
558
+
559
+ def test_translate_with_invalid_locale
560
+ assert_exception_raised ActiveRecord::RecordNotFound do
561
+ @page.translate!(:es)
562
+ end
308
563
  end
309
564
  end