- docker & docker compose
- tmux (installation instructions)
- overmind (installed automatically via bundler)
Spin up containers and the app, and then set up the application and solid-* databases:
docker compose up -d
bin/rails db:prepare db:seed
bin/dev
Then browse to http://localhost:3000 to see the running application.
A dashboard for Solid Queue background jobs is available at http://localhost:3000/jobs
.
- Add a
debugger
statement in the code. - Connect to the process (for example,
bin/overmind connect web
orbin/overmind connect jobs
).
See overmind documentation for more about how to control processes.
accessionWF steps can be completed with:
bin/rake "development:accession[druid:dh414dd1590]"
By default, system tests will use headless Chrome, which supports javascript.
If your test doesn't use javascript, consider using Rack, as it is much faster:
RSpec.describe 'Create a work draft', :rack_test do
Cyperful is a visual debugger for system tests. To run a system test, prepend CYPERFUL=1
. For example:
CYPERFUL=1 bin/rspec spec/system/create_work_draft_spec.rb
In cases in which Cyperful doesn't work, temporarily using a headed test might be useful for development. For example:
RSpec.describe 'Manage files for a work', :headed_test do
To run all configured linters, run bin/rake lint
.
To run linters individually, run which ones you need:
- Ruby code:
bin/rubocop
(add-a
flag to autocorrect violations) - ERB templates:
bin/erb_lint --lint-all --format compact
(add-a
flag to autocorrect violations) - JavaScript code:
yarn run lint
(add--fix
flag to autocorrect violations) - SCSS stylesheets:
yarn run stylelint
(add--fix
flag to autocorrect violations)
A "simple" field is a single, non-repeatable value, such as a title (string) or a version number (integer). If the field you're adding is repeatable or more complex, such as one that has structure (e.g., a related link or work), see the following section.
- Add the field to the appropriate form object (e.g.,
app/forms/work_form.rb
), including validation. - Add the field to the form view (e.g.,
app/views/works/form.html.erb
), including adding strings toconfig/locales/en.yml
. - Permit the parameters in
app/controllers/works_controller
. - Map the field from cocina to work form in
app/services/to_work_form/mapper.rb
. - Map the field from work form to cocina in
app/services/to_cocina/work/mapper.rb
(or sub-mapper). - Add the field to the work form and cocina fixtures in
spec/support/work_mapping_fixtures.rb
. - Test serialization of the field in
spec/serializers/work_form_serializer_spec.rb
. - Test adding the field in
spec/system/create_work_deposit_spec.rb
. - Test editing the field in
spec/system/edit_work_spec.rb
. - Add the field to the work show (
app/views/works/show.html.erb
). - Test display of the field in
spec/system/show_work_spec.rb
.
A "nested" field is one that is not "simple" (see prior section).
- Create a new form object for the nested field (e.g.,
app/forms/related_link_form.rb
), defining attributes and validations.- NOTE: Make sure the name of your field is in the name of your form, e.g., for a field name of
creation_date
, name the formCreationDateForm
.
- NOTE: Make sure the name of your field is in the name of your form, e.g., for a field name of
- Add the new form to the
accepts_nested_attributes_for
list for the appropriate form object (e.g.,app/forms/work_form.rb
). - Create a new view component for editing the nested field (e.g.,
app/components/related_links/edit_component.rb
&app/components/related_links/edit_component.html.erb
), including adding strings toconfig/locales/en.yml
. - Add the nested field to the form view (e.g.,
app/views/works/form.html.erb
) - (OPTIONAL) Add a new Stimulus controller if any special interactions are needed for the new field
- Map the field from cocina to the work and/or collection form (e.g.,
app/services/to_work_form/mapper.rb
). - Map the field from the work and/or collection form to cocina in
app/services/to_cocina/work/mapper.rb
(or sub-mapper). - Add the field to the work form and cocina fixtures in
spec/support/work_mapping_fixtures.rb
. - Test serialization of the field in
spec/serializers/work_form_serializer_spec.rb
. - Test adding the field in
spec/system/create_work_deposit_spec.rb
. - Test editing the field in
spec/system/edit_work_spec.rb
. - Add the field to the work show (
app/views/works/show.html.erb
). - Test display of the field in
spec/system/show_work_spec.rb
.