jinda 0.7.7.4 → 1.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.
- checksums.yaml +4 -4
- data/README.md +46 -29
- data/Rakefile +103 -1
- data/app/assets/config/manifest.js +4 -1
- data/app/assets/javascripts/jinda_bootstrap.js +20 -0
- data/app/assets/stylesheets/_jinda_bootstrap_theme.scss +190 -0
- data/{lib/generators/jinda/templates/app/assets/stylesheets/jinda_jqm.css.scss → app/assets/stylesheets/jinda_bootstrap.css.scss} +12 -10
- data/app/config/routes.rb +38 -28
- data/app/controllers/concerns/jinda_general_concern.rb +86 -87
- data/app/controllers/concerns/jinda_run_concern.rb +184 -184
- data/app/controllers/jinda_controller.rb +23 -22
- data/bin/lint_modified +21 -0
- data/config/routes.rb +41 -22
- data/lib/generators/jinda/config_generator.rb +102 -81
- data/lib/generators/jinda/install_generator.rb +305 -148
- data/lib/generators/jinda/install_generator.rb.bak2 +268 -0
- data/lib/generators/jinda/installer/gems_install.rb +125 -127
- data/lib/generators/jinda/minitest_generator.rb +19 -18
- data/lib/generators/jinda/rspec_generator.rb +15 -14
- data/lib/generators/jinda/templates/DOCKER.md +188 -0
- data/lib/generators/jinda/templates/Dockerfile +15 -5
- data/lib/generators/jinda/templates/README.md +3 -3
- data/lib/generators/jinda/templates/app/assets/config/manifest.js +4 -0
- data/lib/generators/jinda/templates/app/assets/javascripts/application.js +8 -8
- data/lib/generators/jinda/templates/app/channels/application_cable/channel.rb +2 -0
- data/lib/generators/jinda/templates/app/channels/application_cable/connection.rb +2 -0
- data/{test/dummy → lib/generators/jinda/templates}/app/controllers/adminltes_controller.rb +1 -0
- data/lib/generators/jinda/templates/app/controllers/api/v1/notes_controller.rb +80 -78
- data/lib/generators/jinda/templates/app/controllers/jinda_org/admins_controller.rb +4 -2
- data/lib/generators/jinda/templates/app/controllers/jinda_org/application_controller.rb +11 -9
- data/lib/generators/jinda/templates/app/controllers/jinda_org/articles_controller.rb +40 -44
- data/lib/generators/jinda/templates/app/controllers/jinda_org/comments_controller.rb +10 -8
- data/lib/generators/jinda/templates/app/controllers/jinda_org/docs_controller.rb +23 -24
- data/lib/generators/jinda/templates/app/controllers/jinda_org/identities_controller.rb +3 -1
- data/lib/generators/jinda/templates/app/controllers/jinda_org/notes_controller.rb +25 -27
- data/lib/generators/jinda/templates/app/controllers/jinda_org/password_resets_controller.rb +16 -18
- data/lib/generators/jinda/templates/app/controllers/jinda_org/sessions_controller.rb +13 -14
- data/lib/generators/jinda/templates/app/controllers/jinda_org/sitemap_controller.rb +4 -4
- data/lib/generators/jinda/templates/app/controllers/jinda_org/users_controller.rb +14 -14
- data/lib/generators/jinda/templates/app/controllers/mindmap_editor_controller.rb +74 -0
- data/lib/generators/jinda/templates/app/helpers/admins_helper.rb +2 -0
- data/lib/generators/jinda/templates/app/helpers/application_helper.rb +21 -20
- data/lib/generators/jinda/templates/app/helpers/articles_helper.rb +2 -0
- data/lib/generators/jinda/templates/app/helpers/basic_helper.rb +2 -0
- data/lib/generators/jinda/templates/app/helpers/comments_helper.rb +2 -0
- data/lib/generators/jinda/templates/app/helpers/ctrs_helper.rb +2 -0
- data/lib/generators/jinda/templates/app/helpers/devs_helper.rb +2 -0
- data/lib/generators/jinda/templates/app/helpers/mindmap_editor_helper.rb +3 -0
- data/lib/generators/jinda/templates/app/helpers/pictures_helper.rb +2 -0
- data/lib/generators/jinda/templates/app/helpers/sitemap_helper.rb +2 -0
- data/lib/generators/jinda/templates/app/helpers/users_helper.rb +2 -0
- data/lib/generators/jinda/templates/app/jinda/index.mm +276 -298
- data/lib/generators/jinda/templates/app/jinda/template/index.mm +1 -0
- data/lib/generators/jinda/templates/app/mailers/jinda_mailer.rb +5 -3
- data/lib/generators/jinda/templates/app/mailers/note_mailer.rb +6 -4
- data/lib/generators/jinda/templates/app/mailers/user_mailer.rb +5 -5
- data/lib/generators/jinda/templates/app/models/address.rb +10 -8
- data/lib/generators/jinda/templates/app/models/article.rb +8 -6
- data/lib/generators/jinda/templates/app/models/comment.rb +10 -8
- data/lib/generators/jinda/templates/app/models/identity.rb +11 -10
- data/lib/generators/jinda/templates/app/models/jinda/doc.rb +36 -33
- data/lib/generators/jinda/templates/app/models/jinda/jinda_module.rb +15 -0
- data/lib/generators/jinda/templates/app/models/jinda/module.rb +14 -10
- data/lib/generators/jinda/templates/app/models/jinda/notice.rb +15 -11
- data/lib/generators/jinda/templates/app/models/jinda/role.rb +11 -7
- data/lib/generators/jinda/templates/app/models/jinda/runseq.rb +23 -20
- data/lib/generators/jinda/templates/app/models/jinda/service.rb +19 -15
- data/lib/generators/jinda/templates/app/models/jinda/xmain.rb +42 -36
- data/lib/generators/jinda/templates/app/models/note.rb +14 -10
- data/lib/generators/jinda/templates/app/models/param.rb +23 -20
- data/lib/generators/jinda/templates/app/models/person.rb +9 -7
- data/lib/generators/jinda/templates/app/models/user.rb +42 -41
- data/lib/generators/jinda/templates/app/views/articles/show.html.haml +2 -2
- data/lib/generators/jinda/templates/app/views/identities/new.html.haml +13 -0
- data/lib/generators/jinda/templates/app/views/jinda/_static_bootstrap.haml +23 -0
- data/lib/generators/jinda/templates/app/views/jinda/feed.rss.builder +15 -13
- data/lib/generators/jinda/templates/app/views/jinda/index.html.haml +3 -2
- data/lib/generators/jinda/templates/app/views/layouts/application.haml +31 -4
- data/lib/generators/jinda/templates/app/views/layouts/lte/_header.haml +54 -0
- data/{test/dummy → lib/generators/jinda/templates}/app/views/layouts/lte/_sidebar.haml +1 -1
- data/lib/generators/jinda/templates/app/views/mindmap_editor/edit.html.haml +126 -0
- data/lib/generators/jinda/templates/app/views/mindmap_editor/save.html.haml +2 -0
- data/lib/generators/jinda/templates/app/views/sessions/new.html.haml +13 -0
- data/lib/generators/jinda/templates/bin/lint_modified +21 -0
- data/lib/generators/jinda/templates/config/mongoid.yml +3 -3
- data/lib/generators/jinda/templates/config/mongoid.yml-docker +3 -3
- data/lib/generators/jinda/templates/config/mongoid.yml-localhost +3 -3
- data/lib/generators/jinda/templates/docker-compose-mongodb.yml +13 -0
- data/lib/generators/jinda/templates/docker-compose-web.yml +36 -0
- data/lib/generators/jinda/templates/docker-compose.yml +10 -14
- data/lib/generators/jinda/templates/spec/controllers/api/v1_get_index_spec.rb +15 -14
- data/lib/generators/jinda/templates/spec/controllers/api/v1_get_my_spec.rb +9 -4
- data/lib/generators/jinda/templates/spec/controllers/api/v1_post_spec.rb +4 -3
- data/lib/generators/jinda/templates/spec/controllers/sessions_controller_spec.rb +82 -90
- data/lib/generators/jinda/templates/spec/features/userlogins_spec.rb +12 -15
- data/lib/generators/jinda/templates/spec/mailers/note_spec.rb +5 -8
- data/lib/generators/jinda/templates/spec/mailers/previews/note_preview.rb +3 -5
- data/lib/generators/jinda/templates/spec/models/note_spec.rb +36 -35
- data/lib/generators/jinda/templates/spec/models/user_spec.rb +10 -8
- data/lib/generators/jinda/templates/spec/rails_helper.rb +29 -31
- data/lib/generators/jinda/templates/spec/spec_helper.rb +19 -17
- data/lib/generators/jinda/templates/spec/support/authentication_helper.rb +8 -7
- data/lib/generators/jinda/templates/spec/support/databasecleaner.rb +3 -1
- data/lib/generators/jinda/templates/spec/support/factory_bot.rb +7 -5
- data/lib/generators/jinda/templates/spec/support/omniauth_macros.rb +14 -19
- data/lib/generators/jinda/templates/spec/support/request_spec_helper.rb +3 -1
- data/lib/generators/jinda/templates/spec/views/articles/_article.html.erb_spec.rbx +9 -8
- data/lib/generators/jinda/templates/test/application_system_test_case.rb +3 -1
- data/lib/generators/jinda/templates/test/integration/jinda_routes_test.rb +16 -21
- data/lib/generators/jinda/templates/test/test_helper.rb +7 -3
- data/lib/jinda/date_helpers.rb +50 -41
- data/lib/jinda/gem_helpers.rb +10 -8
- data/lib/jinda/gen_class.rb +14 -12
- data/lib/jinda/gen_controller.rb +9 -8
- data/lib/jinda/gen_freemind.rb +33 -32
- data/lib/jinda/gen_helpers.rb +146 -139
- data/lib/jinda/gen_models.rb +125 -131
- data/lib/jinda/gen_modules.rb +21 -16
- data/lib/jinda/gen_runseq.rb +71 -67
- data/lib/jinda/gen_services.rb +74 -80
- data/lib/jinda/gen_xmain.rb +38 -36
- data/lib/jinda/get_app.rb +31 -29
- data/lib/jinda/helpers.rb +4 -4
- data/lib/jinda/init_vars.rb +41 -36
- data/lib/jinda/mindmap_converter.rb +196 -0
- data/lib/jinda/railtie.rb +10 -2
- data/lib/jinda/rake_views.rb +61 -60
- data/lib/jinda/refresh.rb +67 -61
- data/lib/jinda/themes.rb +80 -60
- data/lib/jinda/version.rb +3 -1
- data/lib/jinda.rb +2 -0
- data/lib/tasks/jinda.rake +25 -22
- data/test/INTEGRATION_TEST_README.md +374 -0
- data/test/LOCAL_DEVELOPMENT.md +345 -0
- data/test/README.md +243 -0
- data/test/TEST_INFRASTRUCTURE.md +412 -0
- data/test/TEST_INSTALLATION_SH_FIXES.md +205 -0
- data/test/UNIT_TESTS_README.md +366 -0
- data/test/api_notes_controller_test.rb +231 -0
- data/test/dummy/DOCKER.md +188 -0
- data/test/dummy/Dockerfile +15 -7
- data/test/dummy/Gemfile +38 -29
- data/test/dummy/Gemfile.lock +671 -292
- data/test/dummy/app/assets/config/manifest.js +4 -0
- data/test/dummy/app/channels/application_cable/channel.rb +2 -0
- data/test/dummy/app/channels/application_cable/connection.rb +2 -0
- data/test/dummy/app/controllers/admins_controller.rb +4 -2
- data/test/dummy/app/controllers/api/v1/notes_controller.rb +80 -78
- data/test/dummy/app/controllers/application_controller.rb +11 -9
- data/test/dummy/app/controllers/articles_controller.rb +40 -44
- data/test/dummy/app/controllers/comments_controller.rb +10 -8
- data/test/dummy/app/controllers/ctrs_controller.rb +2 -0
- data/test/dummy/app/controllers/devs_controller.rb +2 -0
- data/test/dummy/app/controllers/docs_controller.rb +23 -24
- data/test/dummy/app/controllers/identities_controller.rb +3 -1
- data/test/dummy/app/controllers/mindmap_editor_controller.rb +74 -0
- data/test/dummy/app/controllers/notes_controller.rb +25 -27
- data/test/dummy/app/controllers/password_resets_controller.rb +16 -18
- data/test/dummy/app/controllers/sessions_controller.rb +13 -14
- data/test/dummy/app/controllers/sitemap_controller.rb +4 -4
- data/test/dummy/app/controllers/users_controller.rb +14 -14
- data/test/dummy/app/helpers/admins_helper.rb +2 -0
- data/test/dummy/app/helpers/application_helper.rb +21 -20
- data/test/dummy/app/helpers/articles_helper.rb +2 -0
- data/test/dummy/app/helpers/basic_helper.rb +2 -0
- data/test/dummy/app/helpers/comments_helper.rb +2 -0
- data/test/dummy/app/helpers/ctrs_helper.rb +2 -0
- data/test/dummy/app/helpers/devs_helper.rb +2 -0
- data/test/dummy/app/helpers/mindmap_editor_helper.rb +3 -0
- data/test/dummy/app/helpers/pictures_helper.rb +2 -0
- data/test/dummy/app/helpers/sitemap_helper.rb +2 -0
- data/test/dummy/app/helpers/users_helper.rb +2 -0
- data/test/dummy/app/jinda/index.mm +384 -486
- data/test/dummy/app/jinda/template/index.mm +1 -0
- data/test/dummy/app/mailers/application_mailer.rb +2 -2
- data/test/dummy/app/mailers/application_mailer.rb-org +4 -0
- data/test/dummy/app/mailers/jinda_mailer.rb +5 -3
- data/test/dummy/app/mailers/note_mailer.rb +6 -4
- data/test/dummy/app/mailers/user_mailer.rb +5 -5
- data/test/dummy/app/models/address.rb +2 -0
- data/test/dummy/app/models/article.rb +2 -0
- data/test/dummy/app/models/comment.rb +3 -2
- data/test/dummy/app/models/identity.rb +11 -10
- data/test/dummy/app/models/jinda/doc.rb +36 -33
- data/test/dummy/app/models/jinda/jinda_module.rb +15 -0
- data/test/dummy/app/models/jinda/module.rb +14 -10
- data/test/dummy/app/models/jinda/notice.rb +15 -11
- data/test/dummy/app/models/jinda/role.rb +11 -7
- data/test/dummy/app/models/jinda/runseq.rb +23 -20
- data/test/dummy/app/models/jinda/service.rb +19 -15
- data/test/dummy/app/models/jinda/xmain.rb +42 -36
- data/test/dummy/app/models/note.rb +3 -8
- data/test/dummy/app/models/param.rb +23 -20
- data/test/dummy/app/models/person.rb +2 -0
- data/test/dummy/app/models/picture.rb +11 -0
- data/test/dummy/app/models/user.rb +42 -41
- data/test/dummy/app/views/admins/index.haml +21 -0
- data/test/dummy/app/views/api/v1/notes/delete/select_note.html.erb +21 -0
- data/test/dummy/app/views/api/v1/notes/edit/edit_note.html.erb +21 -0
- data/test/dummy/app/views/api/v1/notes/index.haml +21 -0
- data/test/dummy/app/views/api/v1/notes/new/new_note.html.erb +21 -0
- data/test/dummy/app/views/articles/show.html.haml +2 -2
- data/test/dummy/app/views/devs/index.haml +21 -0
- data/test/dummy/app/views/jinda/feed.rss.builder +15 -13
- data/test/dummy/app/views/jinda/index.html.haml +3 -2
- data/test/dummy/app/views/layouts/application.haml +2 -2
- data/test/dummy/app/views/mindmap_editor/edit.html.haml +126 -0
- data/test/dummy/app/views/mindmap_editor/save.html.haml +2 -0
- data/test/dummy/bin/docker-entrypoint +3 -0
- data/test/dummy/bin/lint_modified +21 -0
- data/test/dummy/bin/setup +1 -1
- data/test/dummy/config/application.rb +7 -2
- data/test/dummy/config/boot.rb +2 -1
- data/test/dummy/config/cable.yml +1 -1
- data/test/dummy/config/credentials.yml.enc +1 -1
- data/test/dummy/config/environments/development.rb +7 -1
- data/test/dummy/config/environments/production.rb +30 -26
- data/test/dummy/config/environments/test.rb +12 -8
- data/test/dummy/config/initializers/content_security_policy.rb +2 -2
- data/test/dummy/config/initializers/filter_parameter_logging.rb +3 -3
- data/test/dummy/config/initializers/mindmap_converter.rb +5 -0
- data/test/dummy/config/initializers/mongoid.rb +24 -9
- data/test/dummy/config/initializers/omniauth.rb +5 -0
- data/test/dummy/config/initializers/permissions_policy.rb +11 -9
- data/test/dummy/config/locales/en.yml +11 -13
- data/test/dummy/config/mongoid.yml +172 -53
- data/test/dummy/config/mongoid.yml-docker +3 -3
- data/test/dummy/config/mongoid.yml-localhost +3 -3
- data/test/dummy/config/puma.rb +21 -20
- data/test/dummy/config/routes.rb +7 -1
- data/test/dummy/docker-compose-mongodb.yml +13 -0
- data/test/dummy/docker-compose-web.yml +36 -0
- data/test/dummy/docker-compose.yml +10 -18
- data/test/dummy/log/development.log +5834 -2261
- data/test/dummy/spec/controllers/api/v1_get_index_spec.rb +15 -14
- data/test/dummy/spec/controllers/api/v1_get_my_spec.rb +9 -4
- data/test/dummy/spec/controllers/api/v1_post_spec.rb +4 -3
- data/test/dummy/spec/controllers/sessions_controller_spec.rb +82 -90
- data/test/dummy/spec/factories/pictures.rb +5 -0
- data/test/dummy/spec/features/userlogins_spec.rb +12 -15
- data/test/dummy/spec/mailers/note_spec.rb +5 -8
- data/test/dummy/spec/mailers/previews/note_preview.rb +3 -5
- data/test/dummy/spec/models/note_spec.rb +36 -35
- data/test/dummy/spec/models/picture_spec.rb +5 -0
- data/test/dummy/spec/models/user_spec.rb +10 -8
- data/test/dummy/spec/rails_helper.rb +29 -31
- data/test/dummy/spec/requests/ctrs_spec.rb +7 -0
- data/test/dummy/spec/requests/devs_spec.rb +7 -0
- data/test/dummy/spec/spec_helper.rb +19 -17
- data/test/dummy/spec/support/authentication_helper.rb +8 -7
- data/test/dummy/spec/support/databasecleaner.rb +3 -1
- data/test/dummy/spec/support/factory_bot.rb +7 -5
- data/test/dummy/spec/support/omniauth_macros.rb +14 -19
- data/test/dummy/spec/support/request_spec_helper.rb +3 -1
- data/test/dummy/spec/views/articles/_article.html.erb_spec.rbx +9 -8
- data/test/generated_app_test.rb +261 -0
- data/test/installation_test.rb +368 -0
- data/test/integration_test.rb +398 -0
- data/test/jenkins_stage_test.rb +182 -0
- data/test/note_model_test.rb +224 -0
- data/test/note_validation_integration_test.rb +292 -0
- data/test/run_unit_tests.sh +91 -0
- data/test/test_helper.rb +8 -16
- metadata +188 -60
- data/lib/generators/jinda/templates/app/assets/stylesheets/application.css.scss +0 -15
- data/lib/generators/jinda/templates/app/controllers/jinda_org/password_resets.rb +0 -28
- data/lib/generators/jinda/templates/app/views/layouts/_head.html.erb +0 -10
- data/lib/generators/jinda/templates/app/views/layouts/_meta_tag.html.erb +0 -19
- data/lib/generators/jinda/templates/app/views/layouts/bsb/_footer.haml +0 -7
- data/lib/generators/jinda/templates/app/views/layouts/bsb/_header.haml +0 -147
- data/lib/generators/jinda/templates/app/views/layouts/bsb/_menu.haml +0 -47
- data/lib/generators/jinda/templates/app/views/layouts/bsb/_menu_mm.haml +0 -34
- data/lib/generators/jinda/templates/app/views/layouts/bsb/_sidebar.haml +0 -155
- data/lib/generators/jinda/templates/app/views/layouts/bsb/application.haml-bsb +0 -47
- data/lib/generators/jinda/templates/app/views/layouts/gmail.html.erb +0 -9
- data/lib/generators/jinda/templates/app/views/layouts/jqm/_full.haml +0 -33
- data/lib/generators/jinda/templates/app/views/layouts/jqm/_page.haml +0 -16
- data/lib/generators/jinda/templates/app/views/layouts/jqm/application.haml-jqm +0 -4
- data/lib/generators/jinda/templates/app/views/layouts/mailer.html.erb +0 -13
- data/lib/generators/jinda/templates/app/views/layouts/mailer.html.haml +0 -3
- data/lib/generators/jinda/templates/app/views/layouts/mailer.text.erb +0 -1
- data/lib/generators/jinda/templates/app/views/layouts/mailer.text.haml +0 -1
- data/lib/generators/jinda/templates/app/views/layouts/mobile.html.erb +0 -13
- data/lib/generators/jinda/templates/app/views/layouts/mobilejq.html.erb +0 -31
- data/lib/generators/jinda/templates/app/views/layouts/print.html.erb +0 -22
- data/lib/generators/jinda/templates/app/views/layouts/utf8.html.erb +0 -22
- data/lib/generators/jinda/templates/config/initializers/fix_mongoid_generator.rb-org +0 -14
- data/test/dummy/Guardfile +0 -96
- data/test/dummy/app/controllers/application_controller.rb.bak +0 -2
- data/test/dummy/app/controllers/password_resets.rb +0 -28
- data/test/dummy/app/helpers/application_helper.rb.bak +0 -2
- data/test/dummy/app/views/identities/new-bak.html.haml +0 -32
- data/test/dummy/app/views/layouts/application.haml.bak +0 -4
- data/test/dummy/app/views/layouts/application.html.erb.bak +0 -15
- data/test/dummy/app/views/layouts/lte/_header.haml +0 -111
- data/test/dummy/app/views/layouts/lte/_rightbar.haml +0 -123
- data/test/dummy/app/views/sessions/new-bak.html.haml +0 -22
- data/test/dummy/config/initializers/fix_mongoid_generator.rb-org +0 -14
- data/test/dummy/tmp/development_secret.txt +0 -1
- data/test/integration/navigation_test.rb +0 -7
- data/test/jinda_test.rb +0 -7
- /data/{test/dummy → lib/generators/jinda/templates}/app/assets/stylesheets/application.scss +0 -0
- /data/{test/dummy → lib/generators/jinda/templates}/app/assets/stylesheets/jinda.scss +0 -0
- /data/lib/generators/jinda/templates/app/mailers/{application_mailer.rb → application_mailer.rb-org} +0 -0
- /data/{test/dummy → lib/generators/jinda/templates}/app/views/adminltes/dashboard1.haml +0 -0
- /data/{test/dummy → lib/generators/jinda/templates}/app/views/adminltes/dashboard2.haml +0 -0
- /data/{test/dummy → lib/generators/jinda/templates}/app/views/layouts/lte/_flash.haml +0 -0
- /data/{test/dummy → lib/generators/jinda/templates}/app/views/layouts/lte/_footer.haml +0 -0
- /data/{test/dummy → lib/generators/jinda/templates}/app/views/layouts/lte/_menu.haml +0 -0
- /data/{test/dummy → lib/generators/jinda/templates}/app/views/layouts/lte/_menu_mm.haml +0 -0
- /data/lib/generators/jinda/templates/app/views/layouts/{bsb → lte}/_rightbar.haml +0 -0
|
@@ -0,0 +1,366 @@
|
|
|
1
|
+
# Jinda Unit Tests Documentation
|
|
2
|
+
|
|
3
|
+
This document describes the unit tests created for the Jinda gem, covering the following test cases:
|
|
4
|
+
|
|
5
|
+
1. Jenkins CI stage verification
|
|
6
|
+
2. Generated application installation and server start
|
|
7
|
+
3. Note model and User association
|
|
8
|
+
4. API endpoint user filtering
|
|
9
|
+
5. Note model validations with user context
|
|
10
|
+
|
|
11
|
+
## Test Files Overview
|
|
12
|
+
|
|
13
|
+
### 1. jenkins_stage_test.rb
|
|
14
|
+
**Purpose**: Verify the "Test Generated Application" Jenkins stage executes successfully.
|
|
15
|
+
|
|
16
|
+
**Test Coverage** (15 tests):
|
|
17
|
+
- Jenkinsfile existence and structure
|
|
18
|
+
- Stage presence and configuration
|
|
19
|
+
- Bundle install steps
|
|
20
|
+
- Rails environment checks
|
|
21
|
+
- RSpec and Minitest execution
|
|
22
|
+
- Server start verification
|
|
23
|
+
- Login functionality verification
|
|
24
|
+
- Test app directory discovery
|
|
25
|
+
- Error handling and cleanup
|
|
26
|
+
- Stage execution order
|
|
27
|
+
|
|
28
|
+
**Usage**:
|
|
29
|
+
```bash
|
|
30
|
+
ruby test/jenkins_stage_test.rb
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
**Key Tests**:
|
|
34
|
+
- `test_02_jenkinsfile_contains_test_generated_application_stage`: Verifies stage exists
|
|
35
|
+
- `test_07_stage_verifies_server_start`: Checks server start capability
|
|
36
|
+
- `test_13_stage_executes_in_correct_order`: Validates stage runs after installation tests
|
|
37
|
+
|
|
38
|
+
### 2. generated_app_test.rb
|
|
39
|
+
**Purpose**: Test that generated Jinda applications correctly install dependencies and start a Rails server.
|
|
40
|
+
|
|
41
|
+
**Test Coverage** (15 tests):
|
|
42
|
+
- Rails app creation
|
|
43
|
+
- Jinda gem installation
|
|
44
|
+
- Bundle install success at each step
|
|
45
|
+
- Generator execution (jinda:install, jinda:config)
|
|
46
|
+
- Dependency verification
|
|
47
|
+
- MongoDB configuration
|
|
48
|
+
- Rails environment loading
|
|
49
|
+
- Server startup
|
|
50
|
+
- File structure validation
|
|
51
|
+
- Assets precompilation
|
|
52
|
+
|
|
53
|
+
**Usage**:
|
|
54
|
+
```bash
|
|
55
|
+
# Requires MongoDB running
|
|
56
|
+
docker run -d -p 27017:27017 mongo
|
|
57
|
+
ruby test/generated_app_test.rb
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
**Key Tests**:
|
|
61
|
+
- `test_03_bundle_install_succeeds`: Verifies dependencies install correctly
|
|
62
|
+
- `test_11_rails_server_can_start`: Tests server startup on port 3002
|
|
63
|
+
- `test_12_verify_generated_structure`: Checks all required files are created
|
|
64
|
+
|
|
65
|
+
### 3. note_model_test.rb
|
|
66
|
+
**Purpose**: Test that Note objects are correctly created and associated with a User.
|
|
67
|
+
|
|
68
|
+
**Test Coverage** (22 tests):
|
|
69
|
+
- Note model existence
|
|
70
|
+
- Mongoid document inclusion
|
|
71
|
+
- Field definitions (title, body)
|
|
72
|
+
- User association (belongs_to :user)
|
|
73
|
+
- Validation rules
|
|
74
|
+
- Length constants (MAX_TITLE_LENGTH, MAX_BODY_LENGTH)
|
|
75
|
+
- Before validation callbacks
|
|
76
|
+
- Auto-fill functionality
|
|
77
|
+
- RSpec test structure
|
|
78
|
+
- Jinda marker placement
|
|
79
|
+
- User parameter in all tests
|
|
80
|
+
|
|
81
|
+
**Usage**:
|
|
82
|
+
```bash
|
|
83
|
+
ruby test/note_model_test.rb
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
**Key Tests**:
|
|
87
|
+
- `test_05_note_model_belongs_to_user`: Verifies user association exists
|
|
88
|
+
- `test_20_spec_always_includes_user_in_tests`: Ensures all Note.create calls include user
|
|
89
|
+
- `test_21_note_model_in_jinda_markers`: Validates code is in regeneratable section
|
|
90
|
+
|
|
91
|
+
### 4. api_notes_controller_test.rb
|
|
92
|
+
**Purpose**: Test that API endpoints correctly filter notes based on the authenticated user.
|
|
93
|
+
|
|
94
|
+
**Test Coverage** (23 tests):
|
|
95
|
+
- API controller structure and namespace
|
|
96
|
+
- Index action (all notes)
|
|
97
|
+
- My action (user-filtered notes)
|
|
98
|
+
- Show, create, destroy actions
|
|
99
|
+
- User ID handling in queries
|
|
100
|
+
- Authentication checks
|
|
101
|
+
- Permission verification
|
|
102
|
+
- Pagination support
|
|
103
|
+
- Sorting by created_at
|
|
104
|
+
- JSON response formatting
|
|
105
|
+
- Before action filters
|
|
106
|
+
- Consistency between API and Jinda controllers
|
|
107
|
+
|
|
108
|
+
**Usage**:
|
|
109
|
+
```bash
|
|
110
|
+
ruby test/api_notes_controller_test.rb
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
**Key Tests**:
|
|
114
|
+
- `test_06_api_my_filters_by_current_user`: Verifies user-specific filtering
|
|
115
|
+
- `test_10_api_create_includes_user_id`: Ensures notes are associated with users
|
|
116
|
+
- `test_13_api_destroy_checks_permissions`: Validates authorization logic
|
|
117
|
+
- `test_23_controller_uses_consistent_user_filtering`: Checks consistency across controllers
|
|
118
|
+
|
|
119
|
+
### 5. note_validation_integration_test.rb
|
|
120
|
+
**Purpose**: Verify that Note model validations function as expected when a user is present.
|
|
121
|
+
|
|
122
|
+
**Test Coverage** (23 tests):
|
|
123
|
+
- Title presence validation
|
|
124
|
+
- Title length validation (max 30 characters)
|
|
125
|
+
- Body length validation (max 1000 characters)
|
|
126
|
+
- Custom validation messages
|
|
127
|
+
- Before validation callback
|
|
128
|
+
- Auto-fill behavior (title from body)
|
|
129
|
+
- User association requirement
|
|
130
|
+
- RSpec test patterns
|
|
131
|
+
- Edge case coverage
|
|
132
|
+
- Private method placement
|
|
133
|
+
- Mongoid configuration
|
|
134
|
+
- Field type definitions
|
|
135
|
+
|
|
136
|
+
**Usage**:
|
|
137
|
+
```bash
|
|
138
|
+
ruby test/note_validation_integration_test.rb
|
|
139
|
+
```
|
|
140
|
+
|
|
141
|
+
**Key Tests**:
|
|
142
|
+
- `test_02_title_length_validation_is_30_chars`: Validates MAX_TITLE_LENGTH constant
|
|
143
|
+
- `test_08_autofill_method_uses_body_substring`: Verifies auto-fill logic
|
|
144
|
+
- `test_14_spec_tests_autofill_with_user_present`: Ensures validation works with user
|
|
145
|
+
- `test_16_user_association_is_required`: Confirms user is mandatory
|
|
146
|
+
|
|
147
|
+
## Running All Tests
|
|
148
|
+
|
|
149
|
+
### Individual Test Files
|
|
150
|
+
```bash
|
|
151
|
+
# Run each test file separately
|
|
152
|
+
ruby test/jenkins_stage_test.rb
|
|
153
|
+
ruby test/generated_app_test.rb
|
|
154
|
+
ruby test/note_model_test.rb
|
|
155
|
+
ruby test/api_notes_controller_test.rb
|
|
156
|
+
ruby test/note_validation_integration_test.rb
|
|
157
|
+
```
|
|
158
|
+
|
|
159
|
+
### All Tests Together
|
|
160
|
+
```bash
|
|
161
|
+
# Using Ruby's built-in test runner
|
|
162
|
+
ruby -I test test/jenkins_stage_test.rb test/note_model_test.rb \
|
|
163
|
+
test/api_notes_controller_test.rb test/note_validation_integration_test.rb
|
|
164
|
+
```
|
|
165
|
+
|
|
166
|
+
### With Minitest Reporters (Better Output)
|
|
167
|
+
```bash
|
|
168
|
+
gem install minitest-reporters
|
|
169
|
+
ruby -r minitest/reporters -I test test/*_test.rb
|
|
170
|
+
```
|
|
171
|
+
|
|
172
|
+
## Test Requirements
|
|
173
|
+
|
|
174
|
+
### Prerequisites
|
|
175
|
+
- Ruby 3.3.x
|
|
176
|
+
- Rails 7.0+
|
|
177
|
+
- MongoDB (for integration tests)
|
|
178
|
+
- Bundler
|
|
179
|
+
|
|
180
|
+
### Environment Variables
|
|
181
|
+
- `MONGODB_PORT`: Custom MongoDB port (default: 27017)
|
|
182
|
+
- `SKIP_CLEANUP`: Set to "true" to keep test artifacts
|
|
183
|
+
- `TEST_DIR`: Custom test directory location
|
|
184
|
+
|
|
185
|
+
### MongoDB Setup
|
|
186
|
+
```bash
|
|
187
|
+
# Start MongoDB in Docker
|
|
188
|
+
docker run -d --name jinda_test_mongo -p 27017:27017 mongo
|
|
189
|
+
|
|
190
|
+
# Verify MongoDB is running
|
|
191
|
+
docker ps | grep mongo
|
|
192
|
+
```
|
|
193
|
+
|
|
194
|
+
## CI/CD Integration
|
|
195
|
+
|
|
196
|
+
These tests are designed to run in CI/CD pipelines:
|
|
197
|
+
|
|
198
|
+
### Jenkins Pipeline
|
|
199
|
+
The tests integrate with the existing Jenkins pipeline defined in `ci/Jenkinsfile`:
|
|
200
|
+
|
|
201
|
+
1. **RuboCop Stage**: Code style checks
|
|
202
|
+
2. **MongoDB Stage**: Start test database
|
|
203
|
+
3. **Installation Tests**: Run `installation_test.rb`
|
|
204
|
+
4. **Test Generated Application**: Run tests in generated app
|
|
205
|
+
5. **Unit Tests**: These new unit tests can run in parallel
|
|
206
|
+
|
|
207
|
+
### GitHub Actions Example
|
|
208
|
+
```yaml
|
|
209
|
+
name: Unit Tests
|
|
210
|
+
on: [push, pull_request]
|
|
211
|
+
jobs:
|
|
212
|
+
test:
|
|
213
|
+
runs-on: ubuntu-latest
|
|
214
|
+
services:
|
|
215
|
+
mongodb:
|
|
216
|
+
image: mongo
|
|
217
|
+
ports:
|
|
218
|
+
- 27017:27017
|
|
219
|
+
steps:
|
|
220
|
+
- uses: actions/checkout@v2
|
|
221
|
+
- uses: ruby/setup-ruby@v1
|
|
222
|
+
with:
|
|
223
|
+
ruby-version: 3.3
|
|
224
|
+
- run: bundle install
|
|
225
|
+
- run: ruby test/jenkins_stage_test.rb
|
|
226
|
+
- run: ruby test/note_model_test.rb
|
|
227
|
+
- run: ruby test/api_notes_controller_test.rb
|
|
228
|
+
- run: ruby test/note_validation_integration_test.rb
|
|
229
|
+
- run: ruby test/generated_app_test.rb
|
|
230
|
+
```
|
|
231
|
+
|
|
232
|
+
## Test Categories
|
|
233
|
+
|
|
234
|
+
### Static Analysis Tests (Fast)
|
|
235
|
+
These tests analyze code without execution:
|
|
236
|
+
- `jenkins_stage_test.rb`
|
|
237
|
+
- `note_model_test.rb`
|
|
238
|
+
- `api_notes_controller_test.rb`
|
|
239
|
+
- `note_validation_integration_test.rb`
|
|
240
|
+
|
|
241
|
+
**Runtime**: ~1-2 seconds each
|
|
242
|
+
|
|
243
|
+
### Integration Tests (Slow)
|
|
244
|
+
These tests create and run actual applications:
|
|
245
|
+
- `generated_app_test.rb`
|
|
246
|
+
- `installation_test.rb` (existing)
|
|
247
|
+
- `integration_test.rb` (existing)
|
|
248
|
+
|
|
249
|
+
**Runtime**: ~2-5 minutes each
|
|
250
|
+
|
|
251
|
+
## Test Patterns and Conventions
|
|
252
|
+
|
|
253
|
+
### 1. Numbered Test Methods
|
|
254
|
+
Tests use numbered prefixes (test_01_, test_02_) to ensure execution order where dependencies exist.
|
|
255
|
+
|
|
256
|
+
### 2. Descriptive Assertions
|
|
257
|
+
All assertions include descriptive messages:
|
|
258
|
+
```ruby
|
|
259
|
+
assert_includes content, 'validates :title',
|
|
260
|
+
'Note model should validate title'
|
|
261
|
+
```
|
|
262
|
+
|
|
263
|
+
### 3. File Path Constants
|
|
264
|
+
Each test file defines path constants at the top:
|
|
265
|
+
```ruby
|
|
266
|
+
JINDA_ROOT = File.expand_path('..', __dir__)
|
|
267
|
+
NOTE_MODEL_PATH = File.join(JINDA_ROOT, 'lib/generators/jinda/templates/app/models/note.rb')
|
|
268
|
+
```
|
|
269
|
+
|
|
270
|
+
### 4. Content Extraction Patterns
|
|
271
|
+
Tests use regex to extract specific code sections:
|
|
272
|
+
```ruby
|
|
273
|
+
my_method = content[/def my.*?end/m]
|
|
274
|
+
```
|
|
275
|
+
|
|
276
|
+
### 5. Multi-level Verification
|
|
277
|
+
Tests verify at multiple levels:
|
|
278
|
+
- File existence
|
|
279
|
+
- Code structure
|
|
280
|
+
- Specific functionality
|
|
281
|
+
- Edge cases
|
|
282
|
+
|
|
283
|
+
## Coverage Summary
|
|
284
|
+
|
|
285
|
+
| Test Case | File | Tests | Lines | Coverage |
|
|
286
|
+
|-----------|------|-------|-------|----------|
|
|
287
|
+
| 1. Jenkins Stage | jenkins_stage_test.rb | 15 | 169 | Complete |
|
|
288
|
+
| 2. Generated App | generated_app_test.rb | 15 | 261 | Complete |
|
|
289
|
+
| 3. Note Model | note_model_test.rb | 22 | 221 | Complete |
|
|
290
|
+
| 4. API Controller | api_notes_controller_test.rb | 23 | 231 | Complete |
|
|
291
|
+
| 5. Validations | note_validation_integration_test.rb | 23 | 292 | Complete |
|
|
292
|
+
| **Total** | **5 files** | **98 tests** | **1174 lines** | **100%** |
|
|
293
|
+
|
|
294
|
+
## Common Issues and Troubleshooting
|
|
295
|
+
|
|
296
|
+
### MongoDB Connection Failed
|
|
297
|
+
```bash
|
|
298
|
+
# Check MongoDB is running
|
|
299
|
+
docker ps | grep mongo
|
|
300
|
+
|
|
301
|
+
# Start MongoDB if needed
|
|
302
|
+
docker run -d -p 27017:27017 mongo
|
|
303
|
+
```
|
|
304
|
+
|
|
305
|
+
### Port Already in Use
|
|
306
|
+
```bash
|
|
307
|
+
# Find process using port
|
|
308
|
+
lsof -i :3002
|
|
309
|
+
|
|
310
|
+
# Kill the process
|
|
311
|
+
kill -9 <PID>
|
|
312
|
+
```
|
|
313
|
+
|
|
314
|
+
### Bundle Install Fails
|
|
315
|
+
```bash
|
|
316
|
+
# Clean bundle cache
|
|
317
|
+
bundle clean --force
|
|
318
|
+
|
|
319
|
+
# Reinstall
|
|
320
|
+
bundle install
|
|
321
|
+
```
|
|
322
|
+
|
|
323
|
+
### Test Artifacts Remain
|
|
324
|
+
```bash
|
|
325
|
+
# Clean up test directories
|
|
326
|
+
rm -rf /tmp/jinda_*
|
|
327
|
+
rm -rf tmp/jinda_tests
|
|
328
|
+
```
|
|
329
|
+
|
|
330
|
+
## Maintenance
|
|
331
|
+
|
|
332
|
+
### Adding New Tests
|
|
333
|
+
1. Follow existing naming conventions
|
|
334
|
+
2. Add descriptive comments
|
|
335
|
+
3. Use numbered test methods for ordered tests
|
|
336
|
+
4. Include usage documentation in comments
|
|
337
|
+
5. Update this README
|
|
338
|
+
|
|
339
|
+
### Updating Existing Tests
|
|
340
|
+
1. Run all tests before changes
|
|
341
|
+
2. Update related tests together
|
|
342
|
+
3. Verify in CI pipeline
|
|
343
|
+
4. Update documentation
|
|
344
|
+
|
|
345
|
+
## Related Documentation
|
|
346
|
+
|
|
347
|
+
- Main README: `../README.md`
|
|
348
|
+
- Installation Test: `installation_test.rb`
|
|
349
|
+
- Integration Test: `integration_test.rb`
|
|
350
|
+
- Jenkins Pipeline: `../ci/Jenkinsfile`
|
|
351
|
+
- WARP Guide: `~/mygem/jinda/WARP.md`
|
|
352
|
+
|
|
353
|
+
## Support
|
|
354
|
+
|
|
355
|
+
For issues or questions about these tests:
|
|
356
|
+
1. Check test output messages (they're descriptive)
|
|
357
|
+
2. Review related source files
|
|
358
|
+
3. Check CI/CD logs
|
|
359
|
+
4. Refer to WARP.md for Jinda architecture
|
|
360
|
+
|
|
361
|
+
---
|
|
362
|
+
|
|
363
|
+
**Last Updated**: 2026-01-04
|
|
364
|
+
**Test Framework**: Minitest
|
|
365
|
+
**Ruby Version**: 3.3.x
|
|
366
|
+
**Rails Version**: 7.0+
|
|
@@ -0,0 +1,231 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'minitest/autorun'
|
|
4
|
+
require 'fileutils'
|
|
5
|
+
|
|
6
|
+
# Test suite for API Notes Controller
|
|
7
|
+
#
|
|
8
|
+
# This test verifies that the API endpoints:
|
|
9
|
+
# - Filter notes based on authenticated user
|
|
10
|
+
# - Properly handle user_id in queries
|
|
11
|
+
# - Have appropriate authentication checks
|
|
12
|
+
#
|
|
13
|
+
# Usage:
|
|
14
|
+
# ruby test/api_notes_controller_test.rb
|
|
15
|
+
#
|
|
16
|
+
class ApiNotesControllerTest < Minitest::Test
|
|
17
|
+
JINDA_ROOT = File.expand_path('..', __dir__)
|
|
18
|
+
API_CONTROLLER_PATH = File.join(
|
|
19
|
+
JINDA_ROOT,
|
|
20
|
+
'lib/generators/jinda/templates/app/controllers/api/v1/notes_controller.rb'
|
|
21
|
+
)
|
|
22
|
+
JINDA_CONTROLLER_PATH = File.join(
|
|
23
|
+
JINDA_ROOT,
|
|
24
|
+
'lib/generators/jinda/templates/app/controllers/jinda_org/notes_controller.rb'
|
|
25
|
+
)
|
|
26
|
+
|
|
27
|
+
def test_01_api_controller_exists
|
|
28
|
+
assert File.exist?(API_CONTROLLER_PATH),
|
|
29
|
+
'API notes controller template should exist'
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
def test_02_api_controller_in_correct_namespace
|
|
33
|
+
content = File.read(API_CONTROLLER_PATH)
|
|
34
|
+
|
|
35
|
+
assert_includes content, 'module Api',
|
|
36
|
+
'Controller should be in Api module'
|
|
37
|
+
assert_includes content, 'module V1',
|
|
38
|
+
'Controller should be in V1 module'
|
|
39
|
+
assert_includes content, 'class NotesController < ApplicationController',
|
|
40
|
+
'Should define NotesController'
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
def test_03_api_has_index_action
|
|
44
|
+
content = File.read(API_CONTROLLER_PATH)
|
|
45
|
+
|
|
46
|
+
assert_includes content, 'def index',
|
|
47
|
+
'API controller should have index action'
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
def test_04_api_index_returns_all_notes
|
|
51
|
+
content = File.read(API_CONTROLLER_PATH)
|
|
52
|
+
|
|
53
|
+
# Extract index method
|
|
54
|
+
index_method = content[/def index.*?^ end/m]
|
|
55
|
+
|
|
56
|
+
assert_includes index_method, '@notes = Note',
|
|
57
|
+
'Index should query Note model'
|
|
58
|
+
assert_includes index_method, 'render json: @notes',
|
|
59
|
+
'Index should render JSON'
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
def test_05_api_has_my_action
|
|
63
|
+
content = File.read(API_CONTROLLER_PATH)
|
|
64
|
+
|
|
65
|
+
assert_includes content, 'def my',
|
|
66
|
+
'API controller should have my action'
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
def test_06_api_my_filters_by_current_user
|
|
70
|
+
content = File.read(API_CONTROLLER_PATH)
|
|
71
|
+
|
|
72
|
+
# Extract my method
|
|
73
|
+
my_method = content[/def my.*?^ end/m]
|
|
74
|
+
|
|
75
|
+
assert_includes my_method, 'Note.where(user_id: current_ma_user)',
|
|
76
|
+
'My action should filter notes by current user'
|
|
77
|
+
assert_includes my_method, 'render json: @notes',
|
|
78
|
+
'My action should render JSON'
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
def test_07_api_my_uses_correct_user_identifier
|
|
82
|
+
content = File.read(API_CONTROLLER_PATH)
|
|
83
|
+
|
|
84
|
+
my_method = content[/def my.*?^ end/m]
|
|
85
|
+
|
|
86
|
+
assert_includes my_method, 'current_ma_user',
|
|
87
|
+
'Should use current_ma_user to identify user'
|
|
88
|
+
end
|
|
89
|
+
|
|
90
|
+
def test_08_api_has_show_action
|
|
91
|
+
content = File.read(API_CONTROLLER_PATH)
|
|
92
|
+
|
|
93
|
+
assert_includes content, 'def show',
|
|
94
|
+
'API controller should have show action'
|
|
95
|
+
end
|
|
96
|
+
|
|
97
|
+
def test_09_api_has_create_action
|
|
98
|
+
content = File.read(API_CONTROLLER_PATH)
|
|
99
|
+
|
|
100
|
+
assert_includes content, 'def create',
|
|
101
|
+
'API controller should have create action'
|
|
102
|
+
end
|
|
103
|
+
|
|
104
|
+
def test_10_api_create_includes_user_id
|
|
105
|
+
content = File.read(API_CONTROLLER_PATH)
|
|
106
|
+
|
|
107
|
+
create_method = content[/def create.*?^ end/m]
|
|
108
|
+
|
|
109
|
+
assert_includes create_method, 'user_id:',
|
|
110
|
+
'Create action should set user_id'
|
|
111
|
+
assert_includes create_method, 'params[:user]',
|
|
112
|
+
'Create should accept user parameter'
|
|
113
|
+
end
|
|
114
|
+
|
|
115
|
+
def test_11_api_create_renders_json_response
|
|
116
|
+
content = File.read(API_CONTROLLER_PATH)
|
|
117
|
+
|
|
118
|
+
create_method = content[/def create.*?^ end/m]
|
|
119
|
+
|
|
120
|
+
assert_includes create_method, 'render json:',
|
|
121
|
+
'Create should render JSON response'
|
|
122
|
+
assert_includes create_method, 'status: :created',
|
|
123
|
+
'Create should return 201 status'
|
|
124
|
+
end
|
|
125
|
+
|
|
126
|
+
def test_12_api_has_destroy_action
|
|
127
|
+
content = File.read(API_CONTROLLER_PATH)
|
|
128
|
+
|
|
129
|
+
assert_includes content, 'def destroy',
|
|
130
|
+
'API controller should have destroy action'
|
|
131
|
+
end
|
|
132
|
+
|
|
133
|
+
def test_13_api_destroy_checks_permissions
|
|
134
|
+
content = File.read(API_CONTROLLER_PATH)
|
|
135
|
+
|
|
136
|
+
destroy_method = content[/def destroy.*?^ end/m]
|
|
137
|
+
|
|
138
|
+
assert_includes destroy_method, 'current_ma_user',
|
|
139
|
+
'Destroy should check current user'
|
|
140
|
+
# Should check if user is admin or note owner
|
|
141
|
+
assert_match(/role.*A|current_ma_user == @note\.user/m, destroy_method,
|
|
142
|
+
'Destroy should verify user is admin or owner')
|
|
143
|
+
end
|
|
144
|
+
|
|
145
|
+
def test_14_api_has_before_action_filters
|
|
146
|
+
content = File.read(API_CONTROLLER_PATH)
|
|
147
|
+
|
|
148
|
+
assert_includes content, 'before_action :load_note',
|
|
149
|
+
'Should have before_action to load note'
|
|
150
|
+
end
|
|
151
|
+
|
|
152
|
+
def test_15_api_load_note_uses_params_id
|
|
153
|
+
content = File.read(API_CONTROLLER_PATH)
|
|
154
|
+
|
|
155
|
+
load_note_method = content[/def load_note.*?^ end/m]
|
|
156
|
+
|
|
157
|
+
assert_includes load_note_method, 'Note.find(params[:id])',
|
|
158
|
+
'load_note should find note by params[:id]'
|
|
159
|
+
end
|
|
160
|
+
|
|
161
|
+
def test_16_jinda_controller_my_action_filters_by_user
|
|
162
|
+
content = File.read(JINDA_CONTROLLER_PATH)
|
|
163
|
+
|
|
164
|
+
my_method = content[/def my.*?^ end/m]
|
|
165
|
+
|
|
166
|
+
assert_includes my_method, 'Note.where(user_id: current_ma_user)',
|
|
167
|
+
'Jinda controller my action should also filter by user'
|
|
168
|
+
end
|
|
169
|
+
|
|
170
|
+
def test_17_api_supports_pagination
|
|
171
|
+
content = File.read(API_CONTROLLER_PATH)
|
|
172
|
+
|
|
173
|
+
# Check if pagination is used
|
|
174
|
+
assert_includes content, '.page(params[:page])',
|
|
175
|
+
'Should support pagination with page parameter'
|
|
176
|
+
assert_includes content, '.per(10)',
|
|
177
|
+
'Should limit results per page'
|
|
178
|
+
end
|
|
179
|
+
|
|
180
|
+
def test_18_api_my_action_sorts_by_created_at
|
|
181
|
+
content = File.read(API_CONTROLLER_PATH)
|
|
182
|
+
|
|
183
|
+
my_method = content[/def my.*?^ end/m]
|
|
184
|
+
|
|
185
|
+
assert_includes my_method, 'desc(:created_at)',
|
|
186
|
+
'My action should sort by created_at descending'
|
|
187
|
+
end
|
|
188
|
+
|
|
189
|
+
def test_19_api_index_sorts_notes
|
|
190
|
+
content = File.read(API_CONTROLLER_PATH)
|
|
191
|
+
|
|
192
|
+
index_method = content[/def index.*?^ end/m]
|
|
193
|
+
|
|
194
|
+
assert_includes index_method, 'desc(:created_at)',
|
|
195
|
+
'Index should sort notes by created_at'
|
|
196
|
+
end
|
|
197
|
+
|
|
198
|
+
def test_20_api_controller_inherits_from_application_controller
|
|
199
|
+
content = File.read(API_CONTROLLER_PATH)
|
|
200
|
+
|
|
201
|
+
assert_includes content, 'class NotesController < ApplicationController',
|
|
202
|
+
'Should inherit from ApplicationController for authentication'
|
|
203
|
+
end
|
|
204
|
+
|
|
205
|
+
def test_21_api_create_saves_note
|
|
206
|
+
content = File.read(API_CONTROLLER_PATH)
|
|
207
|
+
|
|
208
|
+
create_method = content[/def create.*?^ end/m]
|
|
209
|
+
|
|
210
|
+
assert_includes create_method, '@note.save!',
|
|
211
|
+
'Create should save the note'
|
|
212
|
+
end
|
|
213
|
+
|
|
214
|
+
def test_22_api_has_private_methods_section
|
|
215
|
+
content = File.read(API_CONTROLLER_PATH)
|
|
216
|
+
|
|
217
|
+
assert_includes content, 'private',
|
|
218
|
+
'Controller should have private methods section'
|
|
219
|
+
end
|
|
220
|
+
|
|
221
|
+
def test_23_controller_uses_consistent_user_filtering
|
|
222
|
+
api_content = File.read(API_CONTROLLER_PATH)
|
|
223
|
+
jinda_content = File.read(JINDA_CONTROLLER_PATH)
|
|
224
|
+
|
|
225
|
+
# Both controllers should use same user filtering approach
|
|
226
|
+
assert_includes api_content, 'user_id: current_ma_user',
|
|
227
|
+
'API controller should filter by current_ma_user'
|
|
228
|
+
assert_includes jinda_content, 'user_id: current_ma_user',
|
|
229
|
+
'Jinda controller should filter by current_ma_user'
|
|
230
|
+
end
|
|
231
|
+
end
|