scriptorium 0.6.1 → 0.7.2
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.
- checksums.yaml +4 -4
- data/assets/icons/social/reddit.png +0 -0
- data/assets/icons/social/x-logo.png +0 -0
- data/assets/imagenotfound.jpg +0 -0
- data/bin/sblog +84 -5
- data/bin/scriptorium +1 -0
- data/doc/anti-amnesia/20250727-054000-scriptorium-overview.md +0 -1
- data/doc/anti-amnesia/20250727-123000-anti-amnesia-conventions.md +0 -29
- data/doc/anti-amnesia/20250727-172600-cursor-rbenv-ruby-version-mystery.md +0 -19
- data/doc/anti-amnesia/20250727-172900-ai-cognitive-assessment-capabilities.md +1 -1
- data/doc/anti-amnesia/20250728-124243-aaa-syntax-clarification.md +1 -1
- data/doc/anti-amnesia/20250729-210000-reddit-autopost-integration-complete.md +1 -1
- data/doc/anti-amnesia/20250804-190500-cognitive-loop-bug.md +0 -10
- data/doc/anti-amnesia/20250804-190700-anti-amnesia-timestamping-fix.md +1 -4
- data/doc/anti-amnesia/20250901-211714-codemirror-integration-and-web-tests.md +172 -0
- data/doc/anti-amnesia/20250902-002402-backup-restore-system.md +126 -0
- data/doc/anti-amnesia/20250907-203339-backup-metadata-implementation.md +66 -0
- data/doc/imported/0001-elixir-conf-2014/metadata.txt +7 -0
- data/doc/imported/0001-elixir-conf-2014/post.html +37 -0
- data/doc/imported/0001-elixir-conf-2014/source.lt3 +22 -0
- data/doc/imported/0002-programmers-and-word-processing/metadata.txt +7 -0
- data/doc/imported/0002-programmers-and-word-processing/post.html +192 -0
- data/doc/imported/0002-programmers-and-word-processing/source.lt3 +146 -0
- data/doc/imported/0003-how-to-turn-your-brain-sideways/metadata.txt +7 -0
- data/doc/imported/0003-how-to-turn-your-brain-sideways/post.html +60 -0
- data/doc/imported/0003-how-to-turn-your-brain-sideways/source.lt3 +40 -0
- data/doc/imported/0004-upcoming-lone-star-ruby-conference/metadata.txt +7 -0
- data/doc/imported/0004-upcoming-lone-star-ruby-conference/post.html +42 -0
- data/doc/imported/0004-upcoming-lone-star-ruby-conference/source.lt3 +24 -0
- data/doc/imported/0005-elixir-conf-2015-announced/metadata.txt +7 -0
- data/doc/imported/0005-elixir-conf-2015-announced/post.html +30 -0
- data/doc/imported/0005-elixir-conf-2015-announced/source.lt3 +16 -0
- data/doc/imported/0006-ruby-for-dinosaurs/metadata.txt +7 -0
- data/doc/imported/0006-ruby-for-dinosaurs/post.html +43 -0
- data/doc/imported/0006-ruby-for-dinosaurs/source.lt3 +27 -0
- data/doc/imported/0007-phoenix-isnt-rails/metadata.txt +7 -0
- data/doc/imported/0007-phoenix-isnt-rails/post.html +116 -0
- data/doc/imported/0007-phoenix-isnt-rails/source.lt3 +87 -0
- data/doc/imported/0008-concerning-the-term-monkeypatching/metadata.txt +7 -0
- data/doc/imported/0008-concerning-the-term-monkeypatching/post.html +129 -0
- data/doc/imported/0008-concerning-the-term-monkeypatching/source.lt3 +92 -0
- data/doc/imported/0009-announcement-coming-soon/metadata.txt +7 -0
- data/doc/imported/0009-announcement-coming-soon/post.html +33 -0
- data/doc/imported/0009-announcement-coming-soon/source.lt3 +19 -0
- data/doc/imported/0010-immutable-data-ditching-the-wax-tablet/metadata.txt +7 -0
- data/doc/imported/0010-immutable-data-ditching-the-wax-tablet/post.html +175 -0
- data/doc/imported/0010-immutable-data-ditching-the-wax-tablet/source.lt3 +139 -0
- data/doc/imported/0011-computer-science-as-a-lost-art/metadata.txt +7 -0
- data/doc/imported/0011-computer-science-as-a-lost-art/post.html +139 -0
- data/doc/imported/0011-computer-science-as-a-lost-art/source.lt3 +104 -0
- data/doc/imported/0012-ruby-day-in-turin-italy/metadata.txt +7 -0
- data/doc/imported/0012-ruby-day-in-turin-italy/post.html +42 -0
- data/doc/imported/0012-ruby-day-in-turin-italy/source.lt3 +24 -0
- data/doc/imported/0013-rubyday-was-a-success/metadata.txt +7 -0
- data/doc/imported/0013-rubyday-was-a-success/post.html +44 -0
- data/doc/imported/0013-rubyday-was-a-success/source.lt3 +27 -0
- data/doc/imported/0014-working-on-the-blogging-software/metadata.txt +7 -0
- data/doc/imported/0014-working-on-the-blogging-software/post.html +63 -0
- data/doc/imported/0014-working-on-the-blogging-software/source.lt3 +41 -0
- data/doc/imported/0015-ok-its-not-really-a-lost-art/metadata.txt +7 -0
- data/doc/imported/0015-ok-its-not-really-a-lost-art/post.html +172 -0
- data/doc/imported/0015-ok-its-not-really-a-lost-art/source.lt3 +134 -0
- data/doc/imported/0016-an-in-operator-for-ruby/metadata.txt +7 -0
- data/doc/imported/0016-an-in-operator-for-ruby/post.html +155 -0
- data/doc/imported/0016-an-in-operator-for-ruby/source.lt3 +106 -0
- data/doc/imported/0017-the-forgotten-mathematician/metadata.txt +7 -0
- data/doc/imported/0017-the-forgotten-mathematician/post.html +161 -0
- data/doc/imported/0017-the-forgotten-mathematician/source.lt3 +119 -0
- data/doc/imported/0018-ruby-puns/metadata.txt +7 -0
- data/doc/imported/0018-ruby-puns/post.html +46 -0
- data/doc/imported/0018-ruby-puns/source.lt3 +28 -0
- data/doc/imported/0019-custom-exceptions-via-metaprogramming/metadata.txt +7 -0
- data/doc/imported/0019-custom-exceptions-via-metaprogramming/post.html +138 -0
- data/doc/imported/0019-custom-exceptions-via-metaprogramming/source.lt3 +101 -0
- data/doc/imported/0020-fffff/metadata.txt +7 -0
- data/doc/imported/0020-fffff/post.html +24 -0
- data/doc/imported/0020-fffff/source.lt3 +12 -0
- data/doc/imported/0021-trying-ror-yet-again/metadata.txt +7 -0
- data/doc/imported/0021-trying-ror-yet-again/post.html +26 -0
- data/doc/imported/0021-trying-ror-yet-again/source.lt3 +12 -0
- data/doc/imported/0023-doctor-sleep/metadata.txt +7 -0
- data/doc/imported/0023-doctor-sleep/post.html +63 -0
- data/doc/imported/0023-doctor-sleep/source.lt3 +44 -0
- data/doc/imported/0024-just-a-test/metadata.txt +7 -0
- data/doc/imported/0024-just-a-test/post.html +24 -0
- data/doc/imported/0024-just-a-test/source.lt3 +12 -0
- data/doc/imported/import_summary.txt +98 -0
- data/doc/livetext-informal-spec.txt +65 -0
- data/doc/myuserdoc/ch-0.lt3 +31 -0
- data/doc/myuserdoc/ch-1.lt3 +37 -0
- data/doc/myuserdoc/ch-10.lt3 +22 -0
- data/doc/myuserdoc/ch-2.lt3 +37 -0
- data/doc/myuserdoc/ch-3.lt3 +19 -0
- data/doc/myuserdoc/ch-4.lt3 +43 -0
- data/doc/myuserdoc/ch-5.lt3 +22 -0
- data/doc/myuserdoc/ch-6.lt3 +19 -0
- data/doc/myuserdoc/ch-7.lt3 +16 -0
- data/doc/myuserdoc/ch-8.lt3 +13 -0
- data/doc/myuserdoc/ch-9.lt3 +19 -0
- data/doc/myuserdoc/tweak.rb +18 -0
- data/doc/{userdoc-toc.txt → myuserdoc/userdoc-toc.txt} +27 -27
- data/doc/old-posts/0001-elixir-conf-2014.lt3 +24 -0
- data/doc/old-posts/0002-programmers-and-word-processing.lt3 +150 -0
- data/doc/old-posts/0003-how-to-turn-your-brain-sideways.lt3 +43 -0
- data/doc/old-posts/0004-upcoming-lone-star-ruby-conference.lt3 +26 -0
- data/doc/old-posts/0005-elixir-conf-2015-announced.lt3 +17 -0
- data/doc/old-posts/0006-ruby-for-dinosaurs.lt3 +30 -0
- data/doc/old-posts/0007-phoenix-isnt-rails.lt3 +90 -0
- data/doc/old-posts/0008-concerning-the-term-monkeypatching.lt3 +105 -0
- data/doc/old-posts/0009-announcement-coming-soon.lt3 +20 -0
- data/doc/old-posts/0010-immutable-data-ditching-the-wax-tablet.lt3 +142 -0
- data/doc/old-posts/0011-computer-science-as-a-lost-art.lt3 +117 -0
- data/doc/old-posts/0012-ruby-day-in-turin-italy.lt3 +26 -0
- data/doc/old-posts/0013-rubyday-was-a-success.lt3 +28 -0
- data/doc/old-posts/0014-working-on-the-blogging-software.lt3 +42 -0
- data/doc/old-posts/0015-ok-its-not-really-a-lost-art.lt3 +137 -0
- data/doc/old-posts/0016-an-in-operator-for-ruby.lt3 +142 -0
- data/doc/old-posts/0017-the-forgotten-mathematician.lt3 +129 -0
- data/doc/old-posts/0018-ruby-puns.lt3 +31 -0
- data/doc/old-posts/0019-custom-exceptions-via-metaprogramming.lt3 +116 -0
- data/doc/old-posts/0021-trying-ror-yet-again.lt3 +35 -0
- data/doc/old-posts/0023-doctor-sleep.lt3 +43 -0
- data/doc/old-posts/0024-just-a-test.lt3 +12 -0
- data/doc/old-posts/0025-trying-another-post.lt3 +12 -0
- data/doc/old-repo +1 -0
- data/doc/reddit_integration.md +2 -2
- data/doc/user.lt3 +0 -3
- data/lib/scriptorium/api.rb +1811 -78
- data/lib/scriptorium/banner_svg.rb +55 -68
- data/lib/scriptorium/contract.rb +3 -2
- data/lib/scriptorium/exceptions.rb +133 -102
- data/lib/scriptorium/helpers.rb +282 -82
- data/lib/scriptorium/post.rb +81 -17
- data/lib/scriptorium/reddit.rb +1 -1
- data/lib/scriptorium/repo.rb +478 -164
- data/lib/scriptorium/standard_files.rb +30 -396
- data/lib/scriptorium/support/common_js/clipboard.js +35 -0
- data/lib/scriptorium/support/common_js/content-loader.js +187 -0
- data/lib/scriptorium/support/common_js/navigation.js +52 -0
- data/lib/scriptorium/support/common_js/syntax-highlighting.js +27 -0
- data/lib/scriptorium/support/config/reddit_template.txt +17 -0
- data/{test/scriptorium-TEST-1754622690-146/views/sample → lib/scriptorium/support}/config/social.txt +1 -0
- data/lib/scriptorium/support/highlight/css.txt +2 -0
- data/lib/scriptorium/support/highlight/custom.css +119 -0
- data/lib/scriptorium/support/highlight/js.txt +1 -0
- data/lib/scriptorium/support/post_index/config.txt +15 -0
- data/lib/scriptorium/support/post_index/style.css +55 -0
- data/lib/scriptorium/support/templates/index_entry.lt3 +16 -0
- data/{test/scriptorium-TEST-1754622690-146/themes/standard/initial/post.lt3 → lib/scriptorium/support/templates/initial_post.lt3} +5 -5
- data/lib/scriptorium/support/templates/post.lt3 +104 -0
- data/{test/scriptorium-TEST-1754622690-146/themes/standard/layout/config/header.txt → lib/scriptorium/support/theme/header.lt3} +1 -1
- data/lib/scriptorium/theme.rb +83 -70
- data/lib/scriptorium/version.rb +2 -2
- data/lib/scriptorium/view.rb +194 -149
- data/lib/scriptorium.rb +24 -1
- data/lib/skeleton.rb +4 -1
- data/scriptorium.gemspec +2 -1
- data/test/WEB_INTEGRATION_README.md +196 -0
- data/test/all +40 -0
- data/test/banner_svg/unit.rb +267 -35
- data/test/config/deployment.txt +5 -0
- data/test/integration/integration_test.rb +7 -7
- data/test/integration/preview_flow_test.rb +94 -0
- data/test/livetext_plugin_test.rb +453 -182
- data/test/manual/banner-tests/test01.html +82 -18
- data/test/manual/banner-tests/test02.html +82 -18
- data/test/manual/banner-tests/test03.html +82 -18
- data/test/manual/banner-tests/test04.html +89 -25
- data/test/manual/banner-tests/test05.html +89 -25
- data/test/manual/banner-tests/test06.html +89 -25
- data/test/manual/banner-tests/test07.html +89 -25
- data/test/manual/banner-tests/test08.html +82 -18
- data/test/manual/banner-tests/test09.html +82 -18
- data/test/manual/banner-tests/test10.html +82 -18
- data/test/manual/banner-tests/test11.html +82 -18
- data/test/manual/banner-tests/test12.html +82 -18
- data/test/manual/banner-tests/test13.html +82 -18
- data/test/manual/banner-tests/test14.html +82 -18
- data/test/manual/banner-tests/test15.html +82 -18
- data/test/manual/banner-tests/test16.html +82 -18
- data/test/manual/banner-tests/test17.html +82 -18
- data/test/manual/banner-tests/test18.html +90 -26
- data/test/manual/banner-tests/test19.html +90 -26
- data/test/manual/banner-tests/test20.html +90 -26
- data/test/manual/banner-tests/test21.html +90 -26
- data/test/manual/banner-tests/test22.html +90 -26
- data/test/manual/banner-tests/test23.html +90 -26
- data/test/manual/banner-tests/test24.html +90 -26
- data/test/manual/banner-tests/test25.html +89 -25
- data/test/manual/banner_environment.rb +15 -2
- data/test/manual/codemirror_demo.html +773 -0
- data/test/manual/create_posts_for_web.rb +114 -0
- data/test/manual/preview_manual_test.rb +129 -0
- data/test/manual/test_banner_features.rb +14 -14
- data/test/manual/test_banner_integration.rb +115 -0
- data/test/manual/test_banner_radial.rb +87 -0
- data/test/manual/test_syntax_highlighting.rb +60 -40
- data/test/support/preview_utils.rb +88 -0
- data/test/test_gem_assets.rb +48 -0
- data/test/test_helpers.rb +10 -0
- data/test/tui_editor_integration_test.rb +15 -15
- data/test/tui_integration_test.rb +687 -441
- data/test/unit/api.rb +757 -37
- data/test/unit/asset_management.rb +195 -221
- data/test/unit/backup_test.rb +451 -0
- data/test/unit/contract_test.rb +1 -23
- data/test/unit/core.rb +415 -61
- data/test/unit/deploy_config_test.rb +248 -0
- data/test/unit/deploy_test.rb +312 -21
- data/test/unit/edit_post_test.rb +168 -0
- data/test/unit/gem_asset_management.rb +36 -42
- data/test/unit/livetext_basic.rb +23 -35
- data/test/unit/livetext_compatibility.rb +7 -14
- data/test/unit/parse_cmd_test.rb +260 -0
- data/test/unit/{symlink_test.rb → permalink_copy_test.rb} +47 -49
- data/test/unit/post.rb +91 -26
- data/test/unit/post_index_config_test.rb +258 -0
- data/test/unit/post_state_helpers_test.rb +137 -0
- data/test/unit/read_commented_file_test.rb +8 -6
- data/test/unit/repo.rb +75 -54
- data/test/unit/social_test.rb +41 -44
- data/test/unit/syntax_highlighting.rb +70 -0
- data/test/unit/theme_management_test.rb +91 -0
- data/test/unit/view.rb +79 -12
- data/test/unit/widgets.rb +8 -8
- data/test/web_integration_test.rb +231 -0
- data/test/web_test_helper.rb +218 -0
- data/test/web_workflow_test.rb +527 -0
- data/ui/tui/bin/scriptorium +885 -415
- data/ui/web/app/app.rb +1398 -176
- data/ui/web/app/assets/livetext_mode.js +244 -0
- data/ui/web/app/error_helpers.rb +16 -16
- data/ui/web/app/views/advanced_config.erb +8 -2
- data/ui/web/app/views/asset_management.erb +56 -0
- data/ui/web/app/views/backup_management.erb +238 -0
- data/ui/web/app/views/config_widget.erb +232 -0
- data/ui/web/app/views/dashboard.erb +64 -72
- data/ui/web/app/views/deploy_config.erb +3 -0
- data/ui/web/app/views/edit_pages.erb +170 -2
- data/ui/web/app/views/edit_post.erb +130 -9
- data/ui/web/app/views/edit_theme.erb +73 -0
- data/ui/web/app/views/edit_theme_file.erb +74 -0
- data/ui/web/app/views/theme_management.erb +130 -0
- data/ui/web/app/views/view_dashboard.erb +666 -25
- data/ui/web/app/views/widgets.erb +249 -0
- data/ui/web/bin/scriptorium-web +35 -24
- data/ui/web/tmp/timing.log +17 -0
- data/ui/web/tmp/web_server.log +0 -5
- metadata +190 -116
- data/assets/back-icon.png +0 -0
- data/assets/icons/facebook.svg +0 -1
- data/assets/icons/github.svg +0 -1
- data/assets/icons/instagram.svg +0 -1
- data/assets/icons/reddit.svg +0 -1
- data/assets/icons/x.svg +0 -1
- data/assets/icons/youtube.svg +0 -1
- data/bin/scriptorium +0 -1511
- data/doc/anti-amnesia/20250727-060000-api-design-tui-planning.md +0 -34
- data/doc/anti-amnesia/20250727-061000-runeblog-tui-analysis.md +0 -50
- data/doc/anti-amnesia/20250727-154000-livetext-plugin-file-stats.md +0 -73
- data/doc/anti-amnesia/20250727-172600-unified-minitest-framework.md +0 -70
- data/doc/anti-amnesia/20250727-173000-widget-testing-achievement.md +0 -110
- data/doc/anti-amnesia/20250727-180000-post-id-num-refactoring.md +0 -73
- data/doc/anti-amnesia/20250728-124421-conversation-summary-concise.md +0 -124
- data/doc/anti-amnesia/20250729-190000-scriptorium-tui-testing-complete.md +0 -46
- data/doc/anti-amnesia/20250729-200000-scriptorium-tui-testing-edit-file-workflow.md +0 -97
- data/doc/anti-amnesia/20250729-211500-dependency-management-system.md +0 -211
- data/doc/anti-amnesia/20250729-213000-python-virtual-environment-setup.md +0 -141
- data/doc/anti-amnesia/20250729-214500-theme-management-commands.md +0 -211
- data/doc/anti-amnesia/20250729-215000-version-update-to-0.6.0.md +0 -134
- data/doc/anti-amnesia/20250729-220000-user-guide-complete.md +0 -41
- data/doc/anti-amnesia/20250804-213700-publishing-test-fix.md +0 -49
- data/doc/anti-amnesia/20250804-214400-additional-test-fixes.md +0 -46
- data/doc/anti-amnesia/20250804-220000-asset-function-logic-clarification.md +0 -41
- data/doc/anti-amnesia/20250806-202032-asset-function-logic-clarification.md +0 -41
- data/doc/anti-amnesia/20250813-082428-syntax-highlighting-and-navigation-improvements.md +0 -256
- data/lib/scriptorium/syntax_highlighter.rb +0 -234
- data/test/manual/deploy_symlink_demo.rb +0 -142
- data/test/manual/symlink_demo.rb +0 -117
- data/test/manual/test2.rb +0 -12
- data/test/manual/test_banner_from_file.rb +0 -150
- data/test/manual/test_banner_in_header.rb +0 -35
- data/test/manual/test_code_highlighting.rb +0 -68
- data/test/manual/test_complex_header.rb +0 -74
- data/test/manual/test_empty_header.rb +0 -32
- data/test/manual/test_radial_custom.rb +0 -58
- data/test/manual/test_radial_large_radius.rb +0 -52
- data/test/manual/test_svg_debug.rb +0 -47
- data/test/pages-demo/config/currentview.txt +0 -1
- data/test/pages-demo/views/demo/config/common.js +0 -57
- data/test/pages-demo/views/demo/config/footer.txt +0 -1
- data/test/pages-demo/views/demo/config/global-head.txt +0 -8
- data/test/pages-demo/views/demo/config/header.txt +0 -1
- data/test/pages-demo/views/demo/config/layout.txt +0 -1
- data/test/pages-demo/views/demo/config/left.txt +0 -1
- data/test/pages-demo/views/demo/config/main.txt +0 -1
- data/test/pages-demo/views/demo/config/right.txt +0 -1
- data/test/pages-demo/views/demo/config.txt +0 -3
- data/test/pages-demo/views/demo/output/panes/footer.html +0 -1
- data/test/pages-demo/views/demo/output/panes/header.html +0 -1
- data/test/pages-demo/views/demo/output/panes/left.html +0 -1
- data/test/pages-demo/views/demo/output/panes/main.html +0 -1
- data/test/pages-demo/views/demo/output/panes/right.html +0 -1
- data/test/scriptorium-TEST-1754622690-146/config/bootstrap_css.txt +0 -5
- data/test/scriptorium-TEST-1754622690-146/config/bootstrap_js.txt +0 -4
- data/test/scriptorium-TEST-1754622690-146/config/common.js +0 -57
- data/test/scriptorium-TEST-1754622690-146/config/currentview.txt +0 -1
- data/test/scriptorium-TEST-1754622690-146/config/global-head.txt +0 -9
- data/test/scriptorium-TEST-1754622690-146/config/last_post_num.txt +0 -1
- data/test/scriptorium-TEST-1754622690-146/config/os_helpers.rb +0 -4
- data/test/scriptorium-TEST-1754622690-146/config/widgets.txt +0 -3
- data/test/scriptorium-TEST-1754622690-146/posts/0001/meta.txt +0 -8
- data/test/scriptorium-TEST-1754622690-146/posts/0001/source.lt3 +0 -6
- data/test/scriptorium-TEST-1754622690-146/themes/standard/README.txt +0 -1
- data/test/scriptorium-TEST-1754622690-146/themes/standard/config.txt +0 -1
- data/test/scriptorium-TEST-1754622690-146/themes/standard/layout/gen/text.css +0 -1
- data/test/scriptorium-TEST-1754622690-146/themes/standard/templates/index.lt3 +0 -1
- data/test/scriptorium-TEST-1754622690-146/themes/standard/templates/index_entry.lt3 +0 -14
- data/test/scriptorium-TEST-1754622690-146/themes/standard/templates/post.lt3 +0 -13
- data/test/scriptorium-TEST-1754622690-146/themes/standard/templates/widget.lt3 +0 -1
- data/test/scriptorium-TEST-1754622690-146/views/sample/config/bootstrap_css.txt +0 -5
- data/test/scriptorium-TEST-1754622690-146/views/sample/config/bootstrap_js.txt +0 -4
- data/test/scriptorium-TEST-1754622690-146/views/sample/config/common.js +0 -57
- data/test/scriptorium-TEST-1754622690-146/views/sample/config/deploy.txt +0 -5
- data/test/scriptorium-TEST-1754622690-146/views/sample/config/footer.txt +0 -2
- data/test/scriptorium-TEST-1754622690-146/views/sample/config/global-head.txt +0 -9
- data/test/scriptorium-TEST-1754622690-146/views/sample/config/header.txt +0 -4
- data/test/scriptorium-TEST-1754622690-146/views/sample/config/layout.txt +0 -5
- data/test/scriptorium-TEST-1754622690-146/views/sample/config/left.txt +0 -3
- data/test/scriptorium-TEST-1754622690-146/views/sample/config/main.txt +0 -5
- data/test/scriptorium-TEST-1754622690-146/views/sample/config/right.txt +0 -3
- data/test/scriptorium-TEST-1754622690-146/views/sample/config/status.txt +0 -7
- data/test/scriptorium-TEST-1754622690-146/views/sample/config.txt +0 -3
- data/test/scriptorium-TEST-1754622690-146/views/sample/layout/footer.html +0 -3
- data/test/scriptorium-TEST-1754622690-146/views/sample/layout/header.html +0 -3
- data/test/scriptorium-TEST-1754622690-146/views/sample/layout/left.html +0 -3
- data/test/scriptorium-TEST-1754622690-146/views/sample/layout/main.html +0 -3
- data/test/scriptorium-TEST-1754622690-146/views/sample/layout/right.html +0 -3
- data/test/scriptorium-TEST-1754622690-146/views/sample/output/panes/footer.html +0 -1
- data/test/scriptorium-TEST-1754622690-146/views/sample/output/panes/header.html +0 -1
- data/test/scriptorium-TEST-1754622690-146/views/sample/output/panes/left.html +0 -1
- data/test/scriptorium-TEST-1754622690-146/views/sample/output/panes/main.html +0 -1
- data/test/scriptorium-TEST-1754622690-146/views/sample/output/panes/right.html +0 -1
- data/ui/web/tmp/web_server.pid +0 -1
- /data/{test/pages-demo/views/demo/config/bootstrap_css.txt → lib/scriptorium/support/bootstrap/css.txt} +0 -0
- /data/{test/pages-demo/views/demo/config/bootstrap_js.txt → lib/scriptorium/support/bootstrap/js.txt} +0 -0
- /data/{test/scriptorium-TEST-1754622690-146/views/sample → lib/scriptorium/support}/config/reddit.txt +0 -0
- /data/{test/scriptorium-TEST-1754622690-146/themes/standard/layout → lib/scriptorium/support/templates}/layout.txt +0 -0
- /data/{test/scriptorium-TEST-1754622690-146/themes/standard/layout/config/footer.txt → lib/scriptorium/support/theme/footer.lt3} +0 -0
- /data/{test/scriptorium-TEST-1754622690-146/themes/standard/layout/config/left.txt → lib/scriptorium/support/theme/left.lt3} +0 -0
- /data/{test/scriptorium-TEST-1754622690-146/themes/standard/layout/config/main.txt → lib/scriptorium/support/theme/main.lt3} +0 -0
- /data/{test/scriptorium-TEST-1754622690-146/themes/standard/layout/config/right.txt → lib/scriptorium/support/theme/right.lt3} +0 -0
- /data/test/manual/banner-tests/{config.txt → svg.txt} +0 -0
- /data/test/manual/{test6.rb → test_advanced_widgets.rb} +0 -0
- /data/test/manual/{test1.rb → test_basic_posts.rb} +0 -0
- /data/test/manual/{test4.rb → test_layout_widgets.rb} +0 -0
- /data/test/manual/{test5.rb → test_pagination.rb} +0 -0
- /data/test/manual/{test3.rb → test_random_posts.rb} +0 -0
@@ -0,0 +1,196 @@
|
|
1
|
+
# Web Integration Test Framework
|
2
|
+
|
3
|
+
This directory contains a comprehensive web integration testing framework for the Scriptorium web application, based on the existing TUI integration test patterns.
|
4
|
+
|
5
|
+
## Overview
|
6
|
+
|
7
|
+
The web integration tests verify that the web application works correctly in test mode, including:
|
8
|
+
- Server startup/shutdown in test mode
|
9
|
+
- HTTP endpoint functionality
|
10
|
+
- Form submission and redirects
|
11
|
+
- Test repository isolation
|
12
|
+
- Complete workflow testing
|
13
|
+
|
14
|
+
## Test Files
|
15
|
+
|
16
|
+
### 1. `web_test_helper.rb`
|
17
|
+
**Shared helper module** containing common web testing functionality:
|
18
|
+
- Web server management (start/stop)
|
19
|
+
- HTTP request methods (GET, POST, PUT, DELETE)
|
20
|
+
- Response assertions (success, redirect, not found)
|
21
|
+
- Test environment setup
|
22
|
+
- Repository cleanup
|
23
|
+
|
24
|
+
### 2. `web_integration_test.rb`
|
25
|
+
**Basic integration tests** for core web functionality:
|
26
|
+
- `test_001_basic_web_interaction` - Verifies web app starts and responds
|
27
|
+
- `test_002_view_creation_workflow` - Tests dashboard and repository creation
|
28
|
+
- `test_003_asset_management_web` - Tests asset management access
|
29
|
+
- `test_004_view_configuration_web` - Tests view configuration access
|
30
|
+
- `test_005_deployment_configuration_web` - Tests deployment configuration access
|
31
|
+
|
32
|
+
### 3. `web_workflow_test.rb`
|
33
|
+
**Comprehensive workflow tests** that mirror TUI functionality:
|
34
|
+
- `test_001_complete_repository_setup` - Full repository creation workflow
|
35
|
+
- `test_002_view_creation_workflow` - View creation via web forms
|
36
|
+
- `test_003_post_creation_workflow` - Post creation via web forms
|
37
|
+
- `test_004_asset_management_workflow` - Asset management workflow
|
38
|
+
- `test_005_view_configuration_workflow` - View configuration workflow
|
39
|
+
- `test_006_deployment_workflow` - Deployment configuration workflow
|
40
|
+
- `test_007_error_handling` - Error handling and edge cases
|
41
|
+
|
42
|
+
## Key Features
|
43
|
+
|
44
|
+
### Test Mode Support
|
45
|
+
- All tests run with `--test` flag
|
46
|
+
- Uses `ui/web/scriptorium-TEST` repository
|
47
|
+
- Completely isolated from production data
|
48
|
+
- Verifies test mode is active
|
49
|
+
|
50
|
+
### HTTP Testing
|
51
|
+
- Tests actual HTTP requests/responses
|
52
|
+
- Handles redirects (302/303) properly
|
53
|
+
- Tests form submissions and validations
|
54
|
+
- Verifies response codes and content
|
55
|
+
|
56
|
+
### Workflow Testing
|
57
|
+
- Tests complete user workflows
|
58
|
+
- Sets up test environment (repo + view) as needed
|
59
|
+
- Verifies state changes after operations
|
60
|
+
- Tests error conditions and edge cases
|
61
|
+
|
62
|
+
### Server Management
|
63
|
+
- Automatic web server startup/shutdown
|
64
|
+
- Waits for server to be ready
|
65
|
+
- Cleans up test repositories
|
66
|
+
- Handles server process management
|
67
|
+
|
68
|
+
## Usage
|
69
|
+
|
70
|
+
### Running Individual Tests
|
71
|
+
```bash
|
72
|
+
# Run basic integration tests
|
73
|
+
ruby test/web_integration_test.rb
|
74
|
+
|
75
|
+
# Run workflow tests
|
76
|
+
ruby test/web_workflow_test.rb
|
77
|
+
|
78
|
+
# Run specific test
|
79
|
+
ruby test/web_integration_test.rb -n test_001_basic_web_interaction
|
80
|
+
```
|
81
|
+
|
82
|
+
### Running All Web Tests
|
83
|
+
```bash
|
84
|
+
# Run all web-related tests
|
85
|
+
ruby test/web_integration_test.rb
|
86
|
+
ruby test/web_workflow_test.rb
|
87
|
+
```
|
88
|
+
|
89
|
+
## Test Patterns
|
90
|
+
|
91
|
+
### Setup/Teardown
|
92
|
+
```ruby
|
93
|
+
def setup
|
94
|
+
cleanup_test_repo
|
95
|
+
ENV['DBC_DISABLED'] = 'true'
|
96
|
+
# rbenv hack for correct Ruby version
|
97
|
+
end
|
98
|
+
|
99
|
+
def teardown
|
100
|
+
cleanup_test_repo
|
101
|
+
stop_web_server
|
102
|
+
end
|
103
|
+
```
|
104
|
+
|
105
|
+
### HTTP Requests
|
106
|
+
```ruby
|
107
|
+
# GET request
|
108
|
+
response = get("/status")
|
109
|
+
|
110
|
+
# POST request with form data
|
111
|
+
response = post("/create_view", {
|
112
|
+
name: "test-view",
|
113
|
+
title: "Test View"
|
114
|
+
})
|
115
|
+
```
|
116
|
+
|
117
|
+
### Assertions
|
118
|
+
```ruby
|
119
|
+
# Success response
|
120
|
+
assert_response_success(response, "Should succeed")
|
121
|
+
|
122
|
+
# Redirect response
|
123
|
+
assert_response_redirect(response, "Should redirect")
|
124
|
+
|
125
|
+
# Content verification
|
126
|
+
assert_includes response.body, "Expected text"
|
127
|
+
```
|
128
|
+
|
129
|
+
### Test Environment Setup
|
130
|
+
```ruby
|
131
|
+
# Setup basic test environment (repo + view)
|
132
|
+
setup_test_environment
|
133
|
+
|
134
|
+
# Or manually
|
135
|
+
post("/create_repo", {})
|
136
|
+
post("/create_view", { name: "test-view", title: "Test" })
|
137
|
+
```
|
138
|
+
|
139
|
+
## Architecture
|
140
|
+
|
141
|
+
### Helper Module Design
|
142
|
+
- **WebTestHelper** - Shared functionality across all web tests
|
143
|
+
- **HTTP Methods** - GET, POST, PUT, DELETE with error handling
|
144
|
+
- **Assertions** - Response code and content verification
|
145
|
+
- **Server Management** - Start, stop, wait, cleanup
|
146
|
+
|
147
|
+
### Test Class Structure
|
148
|
+
- **Include Helpers** - `Scriptorium::Helpers` and `WebTestHelper`
|
149
|
+
- **Setup/Teardown** - Repository cleanup and server management
|
150
|
+
- **Test Methods** - Individual workflow tests
|
151
|
+
- **Private Methods** - Test-specific helper methods
|
152
|
+
|
153
|
+
### Test Isolation
|
154
|
+
- Each test starts with clean state
|
155
|
+
- Test repository is created/destroyed per test
|
156
|
+
- Web server is started/stopped per test
|
157
|
+
- No cross-test contamination
|
158
|
+
|
159
|
+
## Comparison with TUI Tests
|
160
|
+
|
161
|
+
| Aspect | TUI Tests | Web Tests |
|
162
|
+
|--------|-----------|-----------|
|
163
|
+
| **Interface** | PTY/terminal | HTTP endpoints |
|
164
|
+
| **Input** | `send_and_expect` | HTTP requests |
|
165
|
+
| **Output** | Terminal output | HTTP responses |
|
166
|
+
| **Setup** | Create test repo | Create test repo + start web server |
|
167
|
+
| **Isolation** | `--test` flag | `--test` flag |
|
168
|
+
| **Speed** | Fast | Medium (HTTP overhead) |
|
169
|
+
| **Realism** | Terminal interaction | Web browser interaction |
|
170
|
+
|
171
|
+
## Benefits
|
172
|
+
|
173
|
+
1. **Real HTTP Testing** - Tests actual web requests/responses
|
174
|
+
2. **End-to-End Validation** - Tests complete web stack
|
175
|
+
3. **Browser-Like Behavior** - Simulates real user interactions
|
176
|
+
4. **Test Mode Verification** - Ensures test isolation works
|
177
|
+
5. **Workflow Coverage** - Tests complete user journeys
|
178
|
+
6. **Error Handling** - Verifies proper error responses
|
179
|
+
7. **Integration Testing** - Tests web app + API working together
|
180
|
+
|
181
|
+
## Future Enhancements
|
182
|
+
|
183
|
+
- **File Upload Testing** - Test asset upload functionality
|
184
|
+
- **Session Management** - Test user sessions and authentication
|
185
|
+
- **AJAX Testing** - Test dynamic content loading
|
186
|
+
- **Performance Testing** - Response time and load testing
|
187
|
+
- **Browser Testing** - Integration with headless browsers
|
188
|
+
- **API Testing** - Direct API endpoint testing
|
189
|
+
|
190
|
+
## Dependencies
|
191
|
+
|
192
|
+
- **Minitest** - Testing framework
|
193
|
+
- **Net::HTTP** - HTTP client for testing
|
194
|
+
- **JSON** - Response parsing
|
195
|
+
- **FileUtils** - File system operations
|
196
|
+
- **Scriptorium::Helpers** - Project helper functions
|
data/test/all
CHANGED
@@ -3,6 +3,29 @@
|
|
3
3
|
# Set up environment
|
4
4
|
ENV['PATH'] = "#{ENV['HOME']}/.rbenv/shims:#{ENV['PATH']}"
|
5
5
|
|
6
|
+
def delete(path)
|
7
|
+
if Dir.exist?(path)
|
8
|
+
puts "Deleting: #{path}"
|
9
|
+
system("rm -rf #{path}")
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
t0 = Time.now
|
14
|
+
puts "Starting at: #{t0}"
|
15
|
+
t1 = t0 + 500
|
16
|
+
puts "Finish ETA : #{t1}"
|
17
|
+
|
18
|
+
puts
|
19
|
+
puts "Killing server..."
|
20
|
+
|
21
|
+
system("lsof -ti:4567 | xargs kill -9")
|
22
|
+
|
23
|
+
puts
|
24
|
+
|
25
|
+
test_repos = %w[scriptorium-TEST test/scriptorium-TEST ui/web/scriptorium-TEST]
|
26
|
+
|
27
|
+
test_repos.each {|repo| delete(repo) }
|
28
|
+
|
6
29
|
require 'minitest/autorun'
|
7
30
|
|
8
31
|
puts "\n" + "="*60
|
@@ -24,14 +47,31 @@ test_files = %w[
|
|
24
47
|
unit/gem_asset_management.rb
|
25
48
|
unit/reddit_test.rb
|
26
49
|
unit/clipboard_test.rb
|
50
|
+
unit/deploy_test.rb
|
51
|
+
unit/deploy_config_test.rb
|
52
|
+
unit/permalink_copy_test.rb
|
53
|
+
unit/post_state_helpers_test.rb
|
54
|
+
unit/edit_post_test.rb
|
55
|
+
unit/contract_test.rb
|
56
|
+
unit/social_test.rb
|
57
|
+
unit/livetext_compatibility.rb
|
58
|
+
unit/livetext_basic.rb
|
59
|
+
unit/syntax_highlighting.rb
|
27
60
|
banner_svg/simple_helpers.rb
|
28
61
|
banner_svg/unit.rb
|
29
62
|
integration/integration_test.rb
|
63
|
+
integration/preview_flow_test.rb
|
30
64
|
livetext_plugin_test.rb
|
31
65
|
unit/core.rb
|
66
|
+
unit/post_index_config_test.rb
|
67
|
+
unit/parse_cmd_test.rb
|
68
|
+
unit/backup_test.rb
|
69
|
+
unit/theme_management_test.rb
|
32
70
|
ed_test.rb
|
33
71
|
tui_integration_test.rb
|
34
72
|
tui_editor_integration_test.rb
|
73
|
+
web_integration_test.rb
|
74
|
+
web_workflow_test.rb
|
35
75
|
]
|
36
76
|
|
37
77
|
|