lcms-engine 0.3.0 → 0.4.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.codeclimate.yml +1 -1
- data/.dockerignore +25 -0
- data/.env.docker +1 -1
- data/.eslintignore +2 -1
- data/.eslintrc +23 -73
- data/.nvmrc +1 -1
- data/.overcommit.yml +8 -2
- data/.prettierrc +7 -0
- data/.rubocop.yml +12 -8
- data/.ruby-version +1 -1
- data/.stylelintignore +9 -0
- data/.stylelintrc +8 -0
- data/CHANGELOG.md +50 -1
- data/Dockerfile +3 -3
- data/Gemfile.lock +408 -322
- data/README.md +20 -17
- data/app/assets/config/lcms_engine_manifest.js +4 -2
- data/app/assets/javascripts/lcms/engine/admin/{application.js → lcms_engine_application.js} +1 -3
- data/app/assets/javascripts/lcms/engine/initializers/foundation.js +1 -1
- data/app/assets/javascripts/lcms/engine/{application.js → lcms_engine_application.js} +0 -0
- data/app/assets/stylesheets/lcms/engine/admin/collections.scss +2 -1
- data/app/assets/stylesheets/lcms/engine/admin/components.scss +60 -19
- data/app/assets/stylesheets/lcms/engine/admin/curriculums.scss +12 -10
- data/app/assets/stylesheets/lcms/engine/admin/lessons.scss +21 -15
- data/app/assets/stylesheets/lcms/engine/admin/materials.scss +25 -17
- data/app/assets/stylesheets/lcms/engine/admin/resources.scss +8 -7
- data/app/assets/stylesheets/lcms/engine/admin/standards.scss +4 -1
- data/app/assets/stylesheets/lcms/engine/admin/users.scss +1 -1
- data/app/assets/stylesheets/lcms/engine/base/_colors.scss +8 -10
- data/app/assets/stylesheets/lcms/engine/base/_ld-colors.scss +10 -10
- data/app/assets/stylesheets/lcms/engine/components/_assoc-picker.scss +4 -5
- data/app/assets/stylesheets/lcms/engine/components/lesson/_activity.scss +6 -2
- data/app/assets/stylesheets/lcms/engine/components/lesson/_callout.scss +19 -5
- data/app/assets/stylesheets/lcms/engine/components/lesson/_columns.scss +4 -3
- data/app/assets/stylesheets/lcms/engine/components/lesson/_curriculum-map.scss +16 -7
- data/app/assets/stylesheets/lcms/engine/components/lesson/_def.scss +2 -2
- data/app/assets/stylesheets/lcms/engine/components/lesson/_expand.scss +9 -9
- data/app/assets/stylesheets/lcms/engine/components/lesson/_foundational-divider.scss +0 -1
- data/app/assets/stylesheets/lcms/engine/components/lesson/_group.scss +3 -1
- data/app/assets/stylesheets/lcms/engine/components/lesson/_icons.scss +1 -1
- data/app/assets/stylesheets/lcms/engine/components/lesson/_image-wrap.scss +2 -2
- data/app/assets/stylesheets/lcms/engine/components/lesson/_inset.scss +7 -2
- data/app/assets/stylesheets/lcms/engine/components/lesson/_materials.scss +1 -1
- data/app/assets/stylesheets/lcms/engine/components/lesson/_multiple-choice.scss +4 -1
- data/app/assets/stylesheets/lcms/engine/components/lesson/_override.scss +28 -9
- data/app/assets/stylesheets/lcms/engine/components/lesson/_pd.scss +7 -7
- data/app/assets/stylesheets/lcms/engine/components/lesson/_pv.scss +5 -4
- data/app/assets/stylesheets/lcms/engine/components/lesson/_section.scss +10 -3
- data/app/assets/stylesheets/lcms/engine/components/lesson/_selection-control.scss +14 -8
- data/app/assets/stylesheets/lcms/engine/components/lesson/_sidebar.scss +25 -10
- data/app/assets/stylesheets/lcms/engine/components/lesson/_title.scss +3 -1
- data/app/assets/stylesheets/lcms/engine/components/lesson/_unit-map.scss +1 -1
- data/app/assets/stylesheets/lcms/engine/components/material/_material.scss +3 -3
- data/app/assets/stylesheets/lcms/engine/components/material/_overlay.scss +12 -4
- data/app/assets/stylesheets/lcms/engine/components/material/_preview.scss +1 -1
- data/app/assets/stylesheets/lcms/engine/components/support/_survey.scss +3 -1
- data/app/assets/stylesheets/lcms/engine/layout/_footer.scss +29 -11
- data/app/assets/stylesheets/lcms/engine/layout/_header.scss +5 -5
- data/app/assets/stylesheets/lcms/engine/layout/_navigation.scss +4 -6
- data/app/assets/stylesheets/lcms/engine/layout/_page.scss +2 -2
- data/app/assets/stylesheets/lcms/engine/{admin.scss → lcms_engine_admin.scss} +26 -15
- data/app/assets/stylesheets/lcms/engine/lcms_engine_application.scss +9 -0
- data/app/assets/stylesheets/lcms/engine/pdf.scss +5 -26
- data/app/assets/stylesheets/lcms/engine/pdf_plain.scss +5 -23
- data/app/assets/stylesheets/lcms/engine/print/_base.scss +41 -12
- data/app/assets/stylesheets/lcms/engine/print/_cover.scss +12 -12
- data/app/assets/stylesheets/lcms/engine/print/_footer.scss +8 -3
- data/app/assets/stylesheets/lcms/engine/print/_gdoc-base.scss +10 -37
- data/app/assets/stylesheets/lcms/engine/print/_helpers.scss +5 -2
- data/app/assets/stylesheets/lcms/engine/print/_lesson-base.scss +2 -14
- data/app/assets/stylesheets/lcms/engine/print/_material-base.scss +1 -3
- data/app/assets/stylesheets/lcms/engine/print/_print.scss +15 -8
- data/app/assets/stylesheets/lcms/engine/print/_toc.scss +24 -9
- data/app/assets/stylesheets/lcms/engine/print/gdoc/_base-typography.scss +24 -6
- data/app/assets/stylesheets/lcms/engine/print/gdoc/_base.scss +10 -3
- data/app/assets/stylesheets/lcms/engine/print/gdoc/_colors.scss +3 -3
- data/app/assets/stylesheets/lcms/engine/print/gdoc/_header.scss +2 -2
- data/app/assets/stylesheets/lcms/engine/print/gdoc/_helpers.scss +1 -0
- data/app/assets/stylesheets/lcms/engine/print/gdoc/lesson/_activity.scss +1 -1
- data/app/assets/stylesheets/lcms/engine/print/gdoc/lesson/_agenda.scss +8 -2
- data/app/assets/stylesheets/lcms/engine/print/gdoc/lesson/_callout.scss +16 -6
- data/app/assets/stylesheets/lcms/engine/print/gdoc/lesson/_def.scss +1 -1
- data/app/assets/stylesheets/lcms/engine/print/gdoc/lesson/_dialogue.scss +3 -1
- data/app/assets/stylesheets/lcms/engine/print/gdoc/lesson/_expand.scss +5 -2
- data/app/assets/stylesheets/lcms/engine/print/gdoc/lesson/_image-wrap.scss +5 -3
- data/app/assets/stylesheets/lcms/engine/print/gdoc/lesson/_image.scss +1 -1
- data/app/assets/stylesheets/lcms/engine/print/gdoc/lesson/_optbreak.scss +1 -0
- data/app/assets/stylesheets/lcms/engine/print/gdoc/lesson/_section.scss +4 -1
- data/app/assets/stylesheets/lcms/engine/print/gdoc/lesson/_smp.scss +1 -0
- data/app/assets/stylesheets/lcms/engine/print/gdoc/lesson/_tables.scss +11 -3
- data/app/assets/stylesheets/lcms/engine/print/gdoc/material/_header.scss +5 -2
- data/app/assets/stylesheets/lcms/engine/print/lesson/_base-typography.scss +33 -9
- data/app/assets/stylesheets/lcms/engine/print/lesson/_group.scss +3 -1
- data/app/assets/stylesheets/lcms/engine/print/lesson/_image.scss +3 -1
- data/app/assets/stylesheets/lcms/engine/print/lesson/_materials.scss +1 -1
- data/app/assets/stylesheets/lcms/engine/print/lesson/_pd.scss +8 -4
- data/app/assets/stylesheets/lcms/engine/print/lesson/_section.scss +1 -1
- data/app/assets/stylesheets/lcms/engine/print/material/_header.scss +4 -1
- data/app/assets/stylesheets/lcms/engine/themes/_material.scss +11 -11
- data/app/assets/stylesheets/lcms/engine/utils/_colorcodes.scss +15 -5
- data/app/assets/stylesheets/lcms/engine/utils/_functions.scss +1 -1
- data/app/assets/stylesheets/lcms/engine/utils/_helpers.scss +23 -11
- data/app/assets/stylesheets/lcms/engine/utils/_placeholders.scss +1 -1
- data/app/assets/stylesheets/lcms/engine/utils/_variables.scss +11 -11
- data/app/assets/stylesheets/lcms/engine/vendors/{mathjax.css → mathjax.scss} +0 -0
- data/app/assets/stylesheets/lcms/engine/vendors/react-tagsinput.css +48 -0
- data/app/controllers/concerns/lcms/engine/reimportable.rb +12 -2
- data/app/controllers/lcms/engine/admin/access_codes_controller.rb +8 -3
- data/app/controllers/lcms/engine/admin/admin_controller.rb +6 -40
- data/app/controllers/lcms/engine/admin/association_picker_controller.rb +4 -1
- data/app/controllers/lcms/engine/admin/batch_reimports_controller.rb +2 -2
- data/app/controllers/lcms/engine/admin/curriculums_controller.rb +21 -2
- data/app/controllers/lcms/engine/admin/documents_controller.rb +41 -14
- data/app/controllers/lcms/engine/admin/materials_controller.rb +32 -13
- data/app/controllers/lcms/engine/admin/resource_bulk_edits_controller.rb +2 -2
- data/app/controllers/lcms/engine/admin/resources_controller.rb +9 -7
- data/app/controllers/lcms/engine/admin/settings_controller.rb +1 -1
- data/app/controllers/lcms/engine/admin/standards_controller.rb +7 -2
- data/app/controllers/lcms/engine/admin/users_controller.rb +15 -7
- data/app/controllers/lcms/engine/application_controller.rb +1 -1
- data/app/controllers/lcms/engine/resources_controller.rb +5 -5
- data/app/controllers/lcms/engine/welcome_controller.rb +11 -0
- data/app/entities/lcms/engine/grades.rb +17 -6
- data/app/entities/lcms/engine/hierarchical_position.rb +1 -2
- data/app/entities/lcms/engine/media_embed.rb +2 -2
- data/app/entities/lcms/engine/pagination.rb +14 -10
- data/app/entities/lcms/engine/roman_numerals.rb +2 -2
- data/app/exceptions/lcms/engine/document_error.rb +8 -0
- data/app/exceptions/lcms/engine/material_error.rb +8 -0
- data/app/forms/lcms/engine/document_form.rb +19 -14
- data/app/forms/lcms/engine/material_form.rb +3 -2
- data/app/helpers/admin/components_helper.rb +3 -3
- data/app/helpers/lcms/engine/path_helper.rb +32 -0
- data/app/helpers/lcms/engine/resource_helper.rb +1 -1
- data/app/helpers/lcms/engine/view_helper.rb +1 -9
- data/app/interactors/lcms/engine/explore_curriculum_interactor.rb +2 -2
- data/app/javascript/components/admin/ImportStatus.jsx +90 -56
- data/app/javascript/components/admin/Initializer.jsx +33 -35
- data/app/javascript/components/admin/MultiSelectedOperation.jsx +43 -18
- data/app/javascript/components/admin/association-picker/AssociationPicker.jsx +68 -47
- data/app/javascript/components/admin/association-picker/AssociationPickerItem.jsx +18 -7
- data/app/javascript/components/admin/association-picker/AssociationPickerResults.jsx +42 -17
- data/app/javascript/components/admin/association-picker/AssociationPickerWindow.jsx +47 -27
- data/app/javascript/components/admin/curriculum/CurriculumEditor.jsx +54 -32
- data/app/javascript/components/admin/curriculum/DirectoryPicker.jsx +80 -53
- data/app/javascript/components/admin/picker/PickerButton.jsx +16 -11
- data/app/javascript/components/admin/picker/pickerModal.jsx +6 -6
- data/app/javascript/components/admin/picker/pickerWindowWrapper.jsx +61 -40
- data/app/javascript/components/admin/resource-picker/ResourcePicker.jsx +54 -39
- data/app/javascript/components/admin/resource-picker/ResourcePickerResource.jsx +14 -3
- data/app/javascript/components/admin/resource-picker/ResourcePickerWindow.jsx +50 -21
- data/app/javascript/components/paginate/PageView.jsx +20 -8
- data/app/javascript/components/paginate/PaginationBoxView.jsx +78 -66
- data/app/javascript/components/paginate/PaginationListView.jsx +59 -45
- data/app/javascript/packs/lcms_engine_admin.js +15 -0
- data/app/javascript/packs/{application.js → lcms_engine_application.js} +5 -4
- data/app/javascript/packs/server_rendering.js +1 -0
- data/app/javascript/vendor/jstree/jstree.min.js +6 -0
- data/app/javascript/vendor/jstree/themes/default/32px.png +0 -0
- data/app/javascript/vendor/jstree/themes/default/40px.png +0 -0
- data/app/javascript/vendor/jstree/themes/default/style.css +1106 -0
- data/app/javascript/vendor/jstree/themes/default/style.min.css +1 -0
- data/app/javascript/vendor/jstree/themes/default/throbber.gif +0 -0
- data/app/javascript/vendor/jstree/themes/default-dark/32px.png +0 -0
- data/app/javascript/vendor/jstree/themes/default-dark/40px.png +0 -0
- data/app/javascript/vendor/jstree/themes/default-dark/style.css +1150 -0
- data/app/javascript/vendor/jstree/themes/default-dark/style.min.css +1 -0
- data/app/javascript/vendor/jstree/themes/default-dark/throbber.gif +0 -0
- data/app/jobs/concerns/lcms/engine/nested_resque_job.rb +1 -4
- data/app/jobs/lcms/engine/document_generate_gdoc_job.rb +2 -2
- data/app/jobs/lcms/engine/document_generate_job.rb +2 -2
- data/app/jobs/lcms/engine/document_generate_pdf_job.rb +5 -5
- data/app/jobs/lcms/engine/document_parse_job.rb +1 -1
- data/app/jobs/lcms/engine/material_generate_pdf_job.rb +4 -4
- data/app/models/concerns/lcms/engine/navigable.rb +6 -10
- data/app/models/concerns/lcms/engine/searchable.rb +7 -0
- data/app/models/lcms/engine/document.rb +1 -1
- data/app/models/lcms/engine/download.rb +1 -1
- data/app/models/lcms/engine/resource.rb +1 -1
- data/app/models/lcms/engine/search/document.rb +4 -3
- data/app/models/lcms/engine/search/repository.rb +1 -1
- data/app/presenters/lcms/engine/content_presenter.rb +1 -1
- data/app/presenters/lcms/engine/curriculum_presenter.rb +21 -18
- data/app/presenters/lcms/engine/document_presenter.rb +5 -3
- data/app/presenters/lcms/engine/resource_presenter.rb +6 -3
- data/app/queries/lcms/engine/admin_documents_query.rb +2 -2
- data/app/queries/lcms/engine/admin_materials_query.rb +11 -2
- data/app/queries/lcms/engine/base_query.rb +1 -1
- data/app/serializers/lcms/engine/previews_material_serializer.rb +1 -0
- data/app/services/lcms/engine/document_build_service.rb +6 -0
- data/app/services/lcms/engine/document_generator.rb +2 -2
- data/app/services/lcms/engine/google/drive_service.rb +7 -15
- data/app/services/lcms/engine/google/script_service.rb +7 -3
- data/app/services/lcms/engine/html_sanitizer.rb +6 -6
- data/app/services/lcms/engine/lessons_gdoc_bundler.rb +1 -1
- data/app/services/lcms/engine/lti_exporter.rb +1 -1
- data/app/services/lcms/engine/material_build_service.rb +6 -2
- data/app/services/lcms/engine/material_preview_generator.rb +3 -3
- data/app/services/lcms/engine/react_materials_resolver.rb +3 -2
- data/app/services/lcms/engine/s3_service.rb +14 -2
- data/app/tasks/resource_tasks.rb +2 -2
- data/app/views/layouts/lcms/engine/admin.html.erb +3 -3
- data/app/views/layouts/lcms/engine/application.html.erb +2 -2
- data/app/views/layouts/lcms/engine/lti.html.erb +1 -1
- data/app/views/lcms/engine/admin/access_codes/_form.html.erb +1 -1
- data/app/views/lcms/engine/admin/access_codes/index.html.erb +3 -3
- data/app/views/lcms/engine/admin/batch_reimports/_search_form.html.erb +2 -2
- data/app/views/lcms/engine/admin/curriculums/edit.html.erb +5 -5
- data/app/views/lcms/engine/admin/documents/_materials_links.html.erb +2 -2
- data/app/views/lcms/engine/admin/documents/_reimport.html.erb +1 -1
- data/app/views/lcms/engine/admin/documents/_search_form.html.erb +2 -2
- data/app/views/lcms/engine/admin/documents/import.html.erb +1 -1
- data/app/views/lcms/engine/admin/documents/index.html.erb +7 -5
- data/app/views/lcms/engine/admin/documents/new.html.erb +6 -2
- data/app/views/lcms/engine/admin/materials/_reimport.html.erb +1 -1
- data/app/views/lcms/engine/admin/materials/_search_form.html.erb +2 -2
- data/app/views/lcms/engine/admin/materials/import.html.erb +1 -1
- data/app/views/lcms/engine/admin/materials/index.html.erb +26 -22
- data/app/views/lcms/engine/admin/materials/new.html.erb +5 -1
- data/app/views/lcms/engine/admin/resource_bulk_edits/new.html.erb +2 -2
- data/app/views/lcms/engine/admin/resources/_fields.html.erb +4 -0
- data/app/views/lcms/engine/admin/resources/_form.html.erb +1 -1
- data/app/views/lcms/engine/admin/resources/_search_form.html.erb +2 -2
- data/app/views/lcms/engine/admin/resources/index.html.erb +7 -5
- data/app/views/lcms/engine/admin/shared/_header.html.erb +12 -12
- data/app/views/lcms/engine/admin/standards/_form.html.erb +3 -1
- data/app/views/lcms/engine/admin/standards/_search_form.html.erb +1 -1
- data/app/views/lcms/engine/admin/users/_form.html.erb +1 -1
- data/app/views/lcms/engine/admin/users/_search_form.html.erb +1 -1
- data/app/views/lcms/engine/admin/users/index.html.erb +6 -6
- data/app/views/lcms/engine/documents/gdoc/_agenda.html.erb +1 -1
- data/app/views/lcms/engine/documents/show.html.erb +1 -1
- data/app/views/lcms/engine/materials/show.html.erb +1 -1
- data/app/views/lcms/engine/pages/not_found.html.erb +5 -0
- data/app/views/lcms/engine/resources/_download.html.erb +2 -2
- data/app/views/lcms/engine/resources/_unit_bundles.html.erb +2 -2
- data/app/views/lcms/engine/resources/generic.html.erb +0 -4
- data/app/views/lcms/engine/resources/media.html.erb +0 -4
- data/app/views/lcms/engine/resources/show.html.erb +0 -2
- data/config/initializers/airbrake.rb +62 -10
- data/config/initializers/bitly.rb +1 -1
- data/config/initializers/carrier_wave.rb +6 -4
- data/config/initializers/ckeditor.rb +6 -0
- data/config/initializers/elasticsearch.rb +1 -1
- data/config/initializers/resque.rb +2 -2
- data/config/locales/admin/en.yml +1 -2
- data/config/locales/ui/en.yml +1 -0
- data/config/routes.rb +5 -2
- data/db/migrate/.keep +0 -0
- data/db/schema.rb +280 -312
- data/db/seeds.rb +0 -1
- data/docker-compose.ror4.yml +32 -0
- data/docker-compose.yml +6 -3
- data/docs/env-variables.md +40 -40
- data/docs/google-cloud-platform-setup.md +45 -17
- data/docs/how-to-build-and-publish.md +1 -0
- data/lcms-engine.gemspec +28 -20
- data/lib/doc_template/document.rb +3 -4
- data/lib/doc_template/document_toc.rb +2 -2
- data/lib/doc_template/objects/activity_metadata.rb +1 -1
- data/lib/doc_template/objects/agenda_metadata.rb +1 -1
- data/lib/doc_template/objects/metadata_helpers.rb +1 -1
- data/lib/doc_template/objects/toc_helpers.rb +4 -4
- data/lib/doc_template/objects/toc_metadata.rb +4 -6
- data/lib/doc_template/tables/base.rb +3 -2
- data/lib/doc_template/tags/activity_metadata_type_tag.rb +1 -1
- data/lib/doc_template/tags/answer_space_tag.rb +2 -2
- data/lib/doc_template/tags/base_tag.rb +5 -5
- data/lib/doc_template/tags/block_tag.rb +1 -1
- data/lib/doc_template/tags/columns_tag.rb +1 -1
- data/lib/doc_template/tags/def_tag.rb +1 -1
- data/lib/doc_template/tags/expand_tag.rb +1 -0
- data/lib/doc_template/tags/heading_tag.rb +1 -1
- data/lib/doc_template/tags/inset_tag.rb +2 -2
- data/lib/doc_template/tags/latex_tag.rb +1 -1
- data/lib/doc_template/tags/page_break_tag.rb +1 -1
- data/lib/doc_template/tags/pd_tag.rb +4 -4
- data/lib/doc_template/tags/section_tag.rb +2 -2
- data/lib/doc_template/tags/standard_tag.rb +3 -3
- data/lib/doc_template/tags/table_preserve_alignment_tag.rb +1 -1
- data/lib/doc_template/tags/table_tag.rb +1 -1
- data/lib/doc_template/template.rb +1 -1
- data/lib/doc_template.rb +9 -9
- data/lib/document_exporter/gdoc/base.rb +6 -3
- data/lib/document_exporter/pdf/base.rb +1 -1
- data/lib/document_exporter/pdf/document.rb +2 -2
- data/lib/document_exporter/pdf/material.rb +2 -2
- data/lib/document_exporter/pdf/student_material.rb +2 -2
- data/lib/document_exporter/pdf/teacher_material.rb +2 -2
- data/lib/document_renderer/part.rb +4 -6
- data/lib/elasticsearch/persistence/repository/response/results.rb +1 -1
- data/lib/lcms/engine/engine.rb +10 -9
- data/lib/lcms/engine/version.rb +1 -1
- data/lib/lcms/engine.rb +0 -1
- data/lib/lt/lcms/metadata/base_service.rb +2 -1
- data/lib/lt/lcms/metadata/context.rb +58 -54
- data/lib/lt/lcms/metadata/service.rb +6 -3
- data/lib/resque_job.rb +3 -6
- data/lib/standard_importer.rb +4 -4
- data/lib/tasks/cloud66.rake +8 -6
- data/lib/tasks/document.rake +7 -7
- data/lib/tasks/google.rake +29 -14
- data/lib/tasks/lcms/engine_tasks.rake +1 -1
- data/package.json +31 -9
- data/postcss.config.js +12 -0
- data/spec/controllers/admin/association_picker_controller_spec.rb +6 -8
- data/spec/controllers/admin/curriculums_controller_spec.rb +23 -0
- data/spec/controllers/admin/documents_controller_spec.rb +25 -3
- data/spec/controllers/admin/materials_controller_spec.rb +17 -4
- data/spec/controllers/admin/resource_bulk_edit_controller_spec.rb +1 -1
- data/spec/controllers/admin/resources_controller_spec.rb +3 -3
- data/spec/controllers/admin/settings_controller_spec.rb +1 -1
- data/spec/controllers/admin/standards_controller_spec.rb +1 -1
- data/spec/controllers/admin/welcome_controller_spec.rb +12 -10
- data/spec/controllers/resources_controller_spec.rb +3 -3
- data/spec/controllers/welcome_controller_spec.rb +38 -0
- data/spec/dummy/.env.docker +5 -0
- data/spec/dummy/.traceroute.yaml +0 -2
- data/spec/dummy/bin/webpack +18 -0
- data/spec/dummy/bin/webpack-dev-server +18 -0
- data/spec/dummy/config/application.rb +1 -1
- data/spec/dummy/config/environments/production.rb +1 -1
- data/spec/dummy/config/environments/test.rb +1 -1
- data/spec/dummy/config/initializers/assets.rb +6 -0
- data/spec/dummy/config/lcms-admin.yml +3 -7
- data/spec/dummy/config/puma.rb +3 -3
- data/spec/dummy/config/routes.rb +6 -0
- data/spec/dummy/db/schema.rb +5 -5
- data/spec/entities/grades_spec.rb +12 -0
- data/spec/factories/documents.rb +1 -0
- data/spec/factories/downloads.rb +1 -1
- data/spec/factories/resources.rb +2 -2
- data/spec/features/admin/lessons/add_lesson_spec.rb +3 -3
- data/spec/features/admin/materials/add_material_spec.rb +5 -3
- data/spec/features/admin/users_spec.rb +2 -2
- data/spec/forms/document_form_spec.rb +11 -1
- data/spec/{controllers/admin/admin_controller_spec.rb → helpers/path_helper_spec.rb} +6 -6
- data/spec/lib/doc_template/objects/activity_metadata_spec.rb +1 -1
- data/spec/lib/doc_template/objects/agenda_metadata_spec.rb +2 -0
- data/spec/lib/doc_template/objects/toc_metadata_spec.rb +1 -1
- data/spec/lib/doc_template/tables/shared_examples/remove_table.rb +1 -1
- data/spec/lib/doc_template/tags/page_break_tag_spec.rb +1 -1
- data/spec/lib/doc_template/tags/pd_tag_spec.rb +1 -1
- data/spec/models/document_spec.rb +1 -1
- data/spec/models/standard_spec.rb +2 -0
- data/spec/queries/lcms/engine/admin_materials_query_spec.rb +34 -0
- data/spec/rails_helper.rb +8 -2
- data/spec/services/document_build_service_spec.rb +4 -11
- data/spec/services/s3_service_spec.rb +31 -0
- data/spec/support/concerns/navigable.rb +2 -0
- data/spec/support/routes.rb +4 -0
- data/spec/support/shared_examples/content_tag.rb +4 -4
- data/templates/routes.rb +0 -1
- data/yarn.lock +3447 -2993
- metadata +208 -303
- data/app/assets/stylesheets/lcms/engine/application.scss +0 -36
- data/app/assets/stylesheets/lcms/engine/vendors/jquery.tagsinput.css +0 -1
- data/app/exceptions/components_api_error.rb +0 -4
- data/app/exceptions/document_error.rb +0 -4
- data/app/exceptions/material_error.rb +0 -4
- data/app/javascript/packs/admin.js +0 -14
- data/app/models/lcms/engine/component.rb +0 -88
- data/app/presenters/lcms/engine/social_media_presenter.rb +0 -83
- data/app/views/lcms/engine/shared/_social_sharing.html.erb +0 -22
- data/db/migrate/20200217160930_change_document_parts_to_polymorphic.rb +0 -36
- data/db/migrate/20200218144849_drop_material_parts_table.rb +0 -7
- data/db/migrate/20200422130652_add_reimported_at_to_documents.rb +0 -7
- data/db/migrate/20200429130353_drop_pages.rb +0 -13
- data/db/seeds/pages.seeds.rb +0 -26
- data/lib/document_exporter.rb +0 -6
- data/lib/lcms/engine/migration.rb +0 -16
- data/spec/models/component_spec.rb +0 -60
- data/vendor/assets/javascripts/jquery.tagsinput.js +0 -1
@@ -2,17 +2,13 @@
|
|
2
2
|
# Admin layout
|
3
3
|
layout: 'lcms/engine/admin'
|
4
4
|
|
5
|
-
# TODO: Check the default values handling
|
6
|
-
# Engine
|
7
|
-
engine: 'Lcms::Engine::Engine'
|
8
|
-
|
9
5
|
# TODO: Check the default values handling
|
10
6
|
# Redirects
|
11
7
|
redirect:
|
12
8
|
host:
|
13
|
-
|
14
|
-
|
15
|
-
|
9
|
+
root_path: 'admin_path'
|
10
|
+
document_path: 'document_path'
|
11
|
+
material_path: 'material_path'
|
16
12
|
engine:
|
17
13
|
root_path: 'admin_path'
|
18
14
|
document_path: 'document_path'
|
data/spec/dummy/config/puma.rb
CHANGED
@@ -6,16 +6,16 @@
|
|
6
6
|
# the maximum value specified for Puma. Default is set to 5 threads for minimum
|
7
7
|
# and maximum; this matches the default thread size of Active Record.
|
8
8
|
#
|
9
|
-
threads_count = ENV.fetch('RAILS_MAX_THREADS'
|
9
|
+
threads_count = ENV.fetch('RAILS_MAX_THREADS', 5)
|
10
10
|
threads threads_count, threads_count
|
11
11
|
|
12
12
|
# Specifies the `port` that Puma will listen on to receive requests; default is 3000.
|
13
13
|
#
|
14
|
-
port ENV.fetch('PORT'
|
14
|
+
port ENV.fetch('PORT', 3000)
|
15
15
|
|
16
16
|
# Specifies the `environment` that Puma will run in.
|
17
17
|
#
|
18
|
-
environment ENV.fetch('RAILS_ENV'
|
18
|
+
environment ENV.fetch('RAILS_ENV', 'development')
|
19
19
|
|
20
20
|
# Specifies the number of `workers` to boot in clustered mode.
|
21
21
|
# Workers are forked webserver processes. If using threads and workers together
|
data/spec/dummy/config/routes.rb
CHANGED
@@ -4,5 +4,11 @@ Rails.application.routes.draw do
|
|
4
4
|
mount Lcms::Engine::Engine => '/lcms-engine'
|
5
5
|
root to: redirect('/lcms-engine/')
|
6
6
|
|
7
|
+
get '/oauth2callback', to: redirect(path: '/lcms-engine/oauth2callback')
|
8
|
+
|
9
|
+
# Used for testing only
|
10
|
+
direct(:document) { '/' }
|
11
|
+
direct(:material) { '/' }
|
12
|
+
|
7
13
|
get '/admin', to: 'welcome#index', as: :admin
|
8
14
|
end
|
data/spec/dummy/db/schema.rb
CHANGED
@@ -2,11 +2,11 @@
|
|
2
2
|
# of editing this file, please use the migrations feature of Active Record to
|
3
3
|
# incrementally modify your database, and then regenerate this schema definition.
|
4
4
|
#
|
5
|
-
#
|
6
|
-
#
|
7
|
-
#
|
8
|
-
# from scratch.
|
9
|
-
#
|
5
|
+
# This file is the source Rails uses to define your schema when running `bin/rails
|
6
|
+
# db:schema:load`. When creating a new database, `bin/rails db:schema:load` tends to
|
7
|
+
# be faster and is potentially less error prone than running all of your
|
8
|
+
# migrations from scratch. Old migrations may fail to apply correctly if those
|
9
|
+
# migrations use external dependencies or application code.
|
10
10
|
#
|
11
11
|
# It's strongly recommended that you check this file into your version control system.
|
12
12
|
|
@@ -8,6 +8,18 @@ describe Lcms::Engine::Grades do
|
|
8
8
|
let(:dir) { [] }
|
9
9
|
let(:resource) { create :resource, metadata: { grade: dir.uniq } }
|
10
10
|
|
11
|
+
describe 'grades' do
|
12
|
+
it 'returns GRADES constant' do
|
13
|
+
expect(described_class.grades).to eq Lcms::Engine::Grades::GRADES
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
describe 'gardes_abbrevs' do
|
18
|
+
it 'returns GRADES_ABBR constant' do
|
19
|
+
expect(described_class.grades_abbrevs).to eq Lcms::Engine::Grades::GRADES_ABBR
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
11
23
|
describe 'list' do
|
12
24
|
let(:dir) { ['grade 2'] }
|
13
25
|
let(:search_doc) { Lcms::Engine::Search::Document.new(grade: ['kindergarten']) }
|
data/spec/factories/documents.rb
CHANGED
data/spec/factories/downloads.rb
CHANGED
data/spec/factories/resources.rb
CHANGED
@@ -5,7 +5,7 @@ FactoryBot.define do
|
|
5
5
|
curriculum { ::Lcms::Engine::Curriculum.default || create(:curriculum) }
|
6
6
|
curriculum_type { 'lesson' }
|
7
7
|
metadata do
|
8
|
-
{ subject: 'ela', grade: 'grade 2',
|
8
|
+
{ subject: 'ela', grade: 'grade 2', module: 'module 1',
|
9
9
|
unit: 'unit 1', lesson: 'lesson 1' }
|
10
10
|
end
|
11
11
|
resource_type { ::Lcms::Engine::Resource.resource_types[:resource] }
|
@@ -20,7 +20,7 @@ FactoryBot.define do
|
|
20
20
|
|
21
21
|
trait :module do
|
22
22
|
curriculum_type { 'module' }
|
23
|
-
metadata { { subject: 'ela', grade: 'grade 2',
|
23
|
+
metadata { { subject: 'ela', grade: 'grade 2', module: 'module 1' } }
|
24
24
|
end
|
25
25
|
end
|
26
26
|
end
|
@@ -3,9 +3,9 @@
|
|
3
3
|
require 'rails_helper'
|
4
4
|
|
5
5
|
feature 'Admin adds a lesson' do
|
6
|
-
|
6
|
+
given(:sample_lesson_path) { 'spec/features/admin/lessons/sample-lessons' }
|
7
7
|
|
8
|
-
|
8
|
+
given(:downloaded_file) { Struct.new :last_modifying_user, :modified_time, :name, :version }
|
9
9
|
|
10
10
|
given(:sample_lessons) do
|
11
11
|
[
|
@@ -43,7 +43,7 @@ feature 'Admin adds a lesson' do
|
|
43
43
|
|
44
44
|
# stub GDoc download
|
45
45
|
file_content = File.read File.join(SAMPLE_LESSON_PATH, data[:file_name])
|
46
|
-
allow_any_instance_of(DocumentDownloader::Gdoc).to receive(:file).and_return(
|
46
|
+
allow_any_instance_of(DocumentDownloader::Gdoc).to receive(:file).and_return(downloaded_file.new(nil, nil, idx))
|
47
47
|
allow_any_instance_of(DocumentDownloader::Gdoc).to receive(:content).and_return(file_content)
|
48
48
|
|
49
49
|
fill_in :document_form_link, with: data[:url]
|
@@ -6,7 +6,7 @@ require 'lt/lcms/lesson/downloader/gdoc'
|
|
6
6
|
require 'lt/lcms/lesson/downloader/pdf'
|
7
7
|
|
8
8
|
feature 'Admin adds a material' do
|
9
|
-
|
9
|
+
given(:sample_path) { 'spec/features/admin/materials/sample-materials' }
|
10
10
|
|
11
11
|
given(:downloaded_file) { Struct.new :last_modifying_user, :modified_time, :name, :version }
|
12
12
|
|
@@ -34,7 +34,7 @@ feature 'Admin adds a material' do
|
|
34
34
|
data = samples[:gdoc]
|
35
35
|
|
36
36
|
# stub GDoc download
|
37
|
-
file_content = File.read File.join(
|
37
|
+
file_content = File.read File.join(sample_path, data[:file_name])
|
38
38
|
base_klass = ::Lt::Lcms::Lesson::Downloader::Base
|
39
39
|
gdoc_klass = ::Lt::Lcms::Lesson::Downloader::Gdoc
|
40
40
|
allow_any_instance_of(base_klass).to receive(:file).and_return(downloaded_file.new(nil, nil, data[:file_name]))
|
@@ -44,6 +44,7 @@ feature 'Admin adds a material' do
|
|
44
44
|
expect(page).to have_field :material_form_link
|
45
45
|
|
46
46
|
fill_in :material_form_link, with: data[:url]
|
47
|
+
find('#material_form_async').uncheck
|
47
48
|
click_button 'Parse'
|
48
49
|
|
49
50
|
expect(Lcms::Engine::Material.last.name).to eql(data[:file_name])
|
@@ -59,13 +60,14 @@ feature 'Admin adds a material' do
|
|
59
60
|
base_klass = ::Lt::Lcms::Lesson::Downloader::Base
|
60
61
|
allow_any_instance_of(base_klass).to receive(:file).and_return(downloaded_file.new(nil, nil, data[:file_name]))
|
61
62
|
|
62
|
-
file_content = File.read File.join(
|
63
|
+
file_content = File.read File.join(sample_path, data[:file_name])
|
63
64
|
allow_any_instance_of(Lt::Lcms::Lesson::Downloader::PDF).to receive(:pdf_content).and_return(file_content)
|
64
65
|
allow_any_instance_of(DocumentExporter::Thumbnail).to receive(:export)
|
65
66
|
allow_any_instance_of(DocumentExporter::Thumbnail).to receive(:orientation)
|
66
67
|
allow(Lcms::Engine::S3Service).to receive(:upload)
|
67
68
|
|
68
69
|
fill_in :material_form_link, with: data[:url]
|
70
|
+
find('#material_form_async').uncheck
|
69
71
|
click_button 'Parse'
|
70
72
|
|
71
73
|
expect(Lcms::Engine::Material.last.name).to eql(data[:file_name])
|
@@ -7,7 +7,7 @@ feature 'Admin users' do
|
|
7
7
|
|
8
8
|
given(:access_code) { create(:access_code).code }
|
9
9
|
given(:admin) { create :admin }
|
10
|
-
given(:domain) { ENV
|
10
|
+
given(:domain) { ENV.fetch('APPLICATION_DOMAIN', nil) }
|
11
11
|
given!(:user) { create :user, email: "unbounded@#{domain}" }
|
12
12
|
given(:name) { Faker::Lorem.name }
|
13
13
|
given(:email) { Faker::Internet.email }
|
@@ -57,7 +57,7 @@ feature 'Admin users' do
|
|
57
57
|
click_button 'Save'
|
58
58
|
|
59
59
|
user.reload
|
60
|
-
expect(current_path).to eq lcms_engine.
|
60
|
+
expect(current_path).to eq lcms_engine.admin_users_path
|
61
61
|
expect(page.find('.callout.success').text).to include('saved successfully')
|
62
62
|
expect(user.email).to eq "unbounded@#{domain}"
|
63
63
|
expect(user.unconfirmed_email).to eq "joe@#{domain}"
|
@@ -10,7 +10,7 @@ describe Lcms::Engine::DocumentForm do
|
|
10
10
|
|
11
11
|
describe '#save' do
|
12
12
|
let(:document) { create :document }
|
13
|
-
let(:service) { instance_double('DocumentBuildService', build_for: document) }
|
13
|
+
let(:service) { instance_double('DocumentBuildService', build_for: document, errors: []) }
|
14
14
|
|
15
15
|
subject { form.save }
|
16
16
|
|
@@ -64,6 +64,16 @@ describe Lcms::Engine::DocumentForm do
|
|
64
64
|
subject
|
65
65
|
end
|
66
66
|
end
|
67
|
+
|
68
|
+
context 'when there are non-critical errors' do
|
69
|
+
let(:errors) { %w(error-1 error-2 error-3) }
|
70
|
+
let(:service) { instance_double('DocumentBuildService', build_for: document, errors: errors) }
|
71
|
+
|
72
|
+
it 'store service errors' do
|
73
|
+
subject
|
74
|
+
expect(form.service_errors).to eq errors
|
75
|
+
end
|
76
|
+
end
|
67
77
|
end
|
68
78
|
|
69
79
|
context 'when is invalid' do
|
@@ -2,26 +2,26 @@
|
|
2
2
|
|
3
3
|
require 'rails_helper'
|
4
4
|
|
5
|
-
describe Lcms::Engine::
|
6
|
-
describe '
|
5
|
+
describe Lcms::Engine::PathHelper do
|
6
|
+
describe '#dynamic_path' do
|
7
7
|
let(:args) { { query: 'test', filter: '1' } }
|
8
8
|
|
9
|
-
subject {
|
9
|
+
subject { helper.dynamic_path(:root_path, args) }
|
10
10
|
|
11
11
|
context 'with host redirect' do
|
12
12
|
it 'builds correct path' do
|
13
|
-
expect(subject).to eq "/
|
13
|
+
expect(subject).to eq "/admin?#{args.to_param}"
|
14
14
|
end
|
15
15
|
end
|
16
16
|
|
17
17
|
context 'with engine redirect' do
|
18
18
|
let(:settings) do
|
19
|
-
settings =
|
19
|
+
settings = Lcms::Engine::Admin::AdminController.settings
|
20
20
|
settings[:redirect].delete(:host)
|
21
21
|
settings
|
22
22
|
end
|
23
23
|
|
24
|
-
before { allow(
|
24
|
+
before { allow(Lcms::Engine::Admin::AdminController).to receive(:settings).and_return(settings) }
|
25
25
|
|
26
26
|
it 'builds correct path' do
|
27
27
|
expect(subject).to eq "/lcms-engine/admin?#{args.to_param}"
|
@@ -15,6 +15,7 @@ describe DocTemplate::Objects::AgendaMetadata do
|
|
15
15
|
end
|
16
16
|
end
|
17
17
|
|
18
|
+
# rubocop:disable Naming/VariableNumber
|
18
19
|
describe 'correct data' do
|
19
20
|
describe 'calculates time hierarchily' do
|
20
21
|
let(:agenda_table) do
|
@@ -116,5 +117,6 @@ describe DocTemplate::Objects::AgendaMetadata do
|
|
116
117
|
end
|
117
118
|
end
|
118
119
|
end
|
120
|
+
# rubocop:enable Naming/VariableNumber
|
119
121
|
end
|
120
122
|
end
|
@@ -4,7 +4,7 @@ require 'rails_helper'
|
|
4
4
|
|
5
5
|
shared_examples 'removes metadata table' do
|
6
6
|
it 'removes original table' do
|
7
|
-
table_html = %r{<span\s+[^.]*>\[?#{described_class::HEADER_LABEL}\]
|
7
|
+
table_html = %r{<span\s+[^.]*>\[?#{described_class::HEADER_LABEL}\]?</span>}im
|
8
8
|
subject
|
9
9
|
expect(fragment.to_html).to_not match(table_html)
|
10
10
|
end
|
@@ -28,6 +28,6 @@ describe DocTemplate::Tags::PageBreakTag do
|
|
28
28
|
context 'with soft returns on tag' do
|
29
29
|
let(:original_content) { '<p><span>[page-break]</span>some content</p>' }
|
30
30
|
|
31
|
-
it { expect { subject }.to raise_error(DocumentError) }
|
31
|
+
it { expect { subject }.to raise_error(Lcms::Engine::DocumentError) }
|
32
32
|
end
|
33
33
|
end
|
@@ -9,7 +9,7 @@ describe DocTemplate::Tags::PdTag do
|
|
9
9
|
let(:original_content) { "<p><span>[PD: #{url}; #{title}; </span><span>#{description}]</span></p><p><span>" }
|
10
10
|
let(:params) do
|
11
11
|
{
|
12
|
-
metadata:
|
12
|
+
metadata: double('metadata', resource_subject: 'ela'),
|
13
13
|
value: [url, title, description].join('; ')
|
14
14
|
}
|
15
15
|
end
|
@@ -111,7 +111,7 @@ describe Lcms::Engine::Document do
|
|
111
111
|
subject { document.ordered_material_ids }
|
112
112
|
|
113
113
|
it 'proxies the call to the TOC' do
|
114
|
-
expect_any_instance_of(DocTemplate::Objects::
|
114
|
+
expect_any_instance_of(DocTemplate::Objects::TocMetadata).to receive(:ordered_material_ids)
|
115
115
|
subject
|
116
116
|
end
|
117
117
|
end
|
@@ -8,6 +8,7 @@ describe Lcms::Engine::Standard do
|
|
8
8
|
expect(obj).to be_valid
|
9
9
|
end
|
10
10
|
|
11
|
+
# rubocop:disable Naming/VariableNumber
|
11
12
|
describe '.search_by_name' do
|
12
13
|
let(:alt_name) { 'a-synonym' }
|
13
14
|
let(:name) { 'test-std' }
|
@@ -26,4 +27,5 @@ describe Lcms::Engine::Standard do
|
|
26
27
|
expect(described_class.search_by_name(name).first).to eq standard_2
|
27
28
|
end
|
28
29
|
end
|
30
|
+
# rubocop:enable Naming/VariableNumber
|
29
31
|
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'rails_helper'
|
4
|
+
|
5
|
+
describe Lcms::Engine::AdminMaterialsQuery do
|
6
|
+
describe 'filter by metadata' do
|
7
|
+
let(:query) { { lesson: 1, name_date: true } }
|
8
|
+
let(:scope) { double ActiveRecord::Relation }
|
9
|
+
|
10
|
+
before do
|
11
|
+
allow(Lcms::Engine::Material).to receive(:all).and_return(scope)
|
12
|
+
allow(scope).to receive_message_chain(:reorder, :distinct).and_return(scope)
|
13
|
+
end
|
14
|
+
|
15
|
+
subject { described_class.call query }
|
16
|
+
|
17
|
+
it 'filters by metadata using ILIKE' do
|
18
|
+
expect(scope).to receive(:where_metadata_like).with(:lesson, 1).and_return(scope)
|
19
|
+
expect(scope).to receive(:where_metadata_like).with(:name_date, true).and_return(scope)
|
20
|
+
subject
|
21
|
+
end
|
22
|
+
|
23
|
+
context 'strict metadata fields' do
|
24
|
+
let(:query) { { lesson: 1, grade: 'grade 1', subject: Faker::Lorem.word } }
|
25
|
+
|
26
|
+
it 'filters by metadata using explicit comparison' do
|
27
|
+
expect(scope).to receive(:where_metadata_like).with(:lesson, 1).and_return(scope)
|
28
|
+
expect(scope).to receive(:where_metadata).with(query.slice(:grade)).and_return(scope)
|
29
|
+
expect(scope).to receive(:where_metadata).with(query.slice(:subject)).and_return(scope)
|
30
|
+
subject
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
data/spec/rails_helper.rb
CHANGED
@@ -1,6 +1,9 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
# This file is copied to spec/ when you run 'rails generate rspec:install'
|
4
|
+
require 'simplecov'
|
5
|
+
SimpleCov.start 'rails'
|
6
|
+
|
4
7
|
require 'spec_helper'
|
5
8
|
|
6
9
|
ENV['RAILS_ENV'] ||= 'test'
|
@@ -16,8 +19,11 @@ require 'email_spec'
|
|
16
19
|
require 'email_spec/rspec'
|
17
20
|
require 'faker'
|
18
21
|
|
19
|
-
|
20
|
-
|
22
|
+
Warning[:deprecated] = true
|
23
|
+
Warning[:experimental] = true
|
24
|
+
|
25
|
+
Dir[File.expand_path('support/**/*.rb', __dir__)].sort.each(&method(:require))
|
26
|
+
Dir[File.expand_path('**/shared_examples/*.rb')].sort.each(&method(:require))
|
21
27
|
|
22
28
|
# Checks for pending migrations and applies them before tests are run.
|
23
29
|
# If you are not using ActiveRecord, you can remove these lines.
|
@@ -10,29 +10,22 @@ describe Lcms::Engine::DocumentBuildService do
|
|
10
10
|
let(:downloader) { double }
|
11
11
|
let(:downloaded_document) { 'html-here' }
|
12
12
|
let(:file) do
|
13
|
-
|
14
|
-
name: 'file name',
|
15
|
-
modified_time: Time.current - 1.day
|
16
|
-
)
|
13
|
+
double('file', name: 'file name', modified_time: Time.current - 1.day, last_modifying_user: 'User', version: '42')
|
17
14
|
end
|
18
15
|
let(:file_id) { 'Google Document file id' }
|
19
16
|
let(:parsed_document) do
|
20
|
-
|
21
|
-
activity_metadata: [{ 'material_ids' => [] }],
|
22
|
-
agenda: [],
|
23
|
-
parts: []
|
24
|
-
)
|
17
|
+
double('parsed_document', activity_metadata: [{ 'material_ids' => [] }], agenda: [], parts: [])
|
25
18
|
end
|
26
19
|
let(:template) do
|
27
20
|
stubs = {
|
28
21
|
css_styles: '',
|
29
22
|
metadata: {},
|
30
|
-
metadata_service:
|
23
|
+
metadata_service: double('service', errors: []),
|
31
24
|
parse: parsed_document,
|
32
25
|
parts: [],
|
33
26
|
'prereq?' => false,
|
34
27
|
render: '',
|
35
|
-
toc:
|
28
|
+
toc: double('toc', collect_material_ids: [])
|
36
29
|
}
|
37
30
|
instance_double DocTemplate::Template, stubs
|
38
31
|
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'rails_helper'
|
4
|
+
|
5
|
+
describe Lcms::Engine::S3Service do
|
6
|
+
describe '.upload' do
|
7
|
+
let(:data) { StringIO.new('data to be uploaded') }
|
8
|
+
let(:full_options) { options.merge(body: data) }
|
9
|
+
let(:key) { 'path/to/file' }
|
10
|
+
let(:object) do
|
11
|
+
params = {
|
12
|
+
put: 'true',
|
13
|
+
public_url: url
|
14
|
+
}
|
15
|
+
double(::Aws::S3::Resource, **params)
|
16
|
+
end
|
17
|
+
let(:options) { { content_type: 'image/png' } }
|
18
|
+
let(:url) { Faker::Internet.url }
|
19
|
+
|
20
|
+
before { allow(described_class).to receive(:create_object).with(key).and_return(object) }
|
21
|
+
|
22
|
+
subject { described_class.upload(key, data, options) }
|
23
|
+
|
24
|
+
it 'uploads data with passed params' do
|
25
|
+
expect(object).to receive(:put).with(full_options)
|
26
|
+
subject
|
27
|
+
end
|
28
|
+
|
29
|
+
it 'returns URL of the uploaded object'
|
30
|
+
end
|
31
|
+
end
|
@@ -2,6 +2,7 @@
|
|
2
2
|
|
3
3
|
require 'rails_helper'
|
4
4
|
|
5
|
+
# rubocop:disable Naming/VariableNumber
|
5
6
|
shared_examples_for 'navigable' do # rubocop:disable Metrics/BlockLength
|
6
7
|
let(:another_grandchild) { create factory }
|
7
8
|
let(:child) { create factory }
|
@@ -71,3 +72,4 @@ shared_examples_for 'navigable' do # rubocop:disable Metrics/BlockLength
|
|
71
72
|
end
|
72
73
|
end
|
73
74
|
end
|
75
|
+
# rubocop:enable Naming/VariableNumber
|
data/spec/support/routes.rb
CHANGED
@@ -11,7 +11,7 @@ shared_examples 'content_tag' do # rubocop:disable Metrics/BlockLength
|
|
11
11
|
HTML
|
12
12
|
end
|
13
13
|
|
14
|
-
it { expect { subject }.to raise_error(DocumentError) }
|
14
|
+
it { expect { subject }.to raise_error(Lcms::Engine::DocumentError) }
|
15
15
|
end
|
16
16
|
|
17
17
|
context 'with soft return before start tag' do
|
@@ -22,7 +22,7 @@ shared_examples 'content_tag' do # rubocop:disable Metrics/BlockLength
|
|
22
22
|
HTML
|
23
23
|
end
|
24
24
|
|
25
|
-
it { expect { subject }.to raise_error(DocumentError) }
|
25
|
+
it { expect { subject }.to raise_error(Lcms::Engine::DocumentError) }
|
26
26
|
end
|
27
27
|
|
28
28
|
context 'with soft return before stop tag' do
|
@@ -34,7 +34,7 @@ shared_examples 'content_tag' do # rubocop:disable Metrics/BlockLength
|
|
34
34
|
HTML
|
35
35
|
end
|
36
36
|
|
37
|
-
it { expect { subject }.to raise_error(DocumentError) }
|
37
|
+
it { expect { subject }.to raise_error(Lcms::Engine::DocumentError) }
|
38
38
|
end
|
39
39
|
|
40
40
|
context 'with soft return after stop tag' do
|
@@ -46,6 +46,6 @@ shared_examples 'content_tag' do # rubocop:disable Metrics/BlockLength
|
|
46
46
|
HTML
|
47
47
|
end
|
48
48
|
|
49
|
-
it { expect { subject }.to raise_error(DocumentError) }
|
49
|
+
it { expect { subject }.to raise_error(Lcms::Engine::DocumentError) }
|
50
50
|
end
|
51
51
|
end
|
data/templates/routes.rb
CHANGED
@@ -54,7 +54,6 @@ Rails.application.routes.draw do
|
|
54
54
|
|
55
55
|
namespace :admin do
|
56
56
|
get '/' => 'welcome#index'
|
57
|
-
get '/whoami' => 'admin#whoami'
|
58
57
|
get 'google_oauth2_callback' => 'google_oauth2#callback'
|
59
58
|
get '/association_picker' => 'association_picker#index'
|
60
59
|
resources :reading_assignment_texts
|