diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000000..f741806cf5 --- /dev/null +++ b/.dockerignore @@ -0,0 +1,11 @@ +.git +log/ +tmp/ +storage/ +coverage/ +node_modules/ +.bundle/ +.env +config/master.key +config/credentials/*.enc +features/reports diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000000..28e8f6325b --- /dev/null +++ b/.gitignore @@ -0,0 +1,43 @@ +# See https://help.github.com/articles/ignoring-files/ for more about ignoring files. + +# Ignore bundler config. +/.bundle + +# Ignore the default SQLite database. +db/*.sqlite3 +db/*.sqlite3-journal + +# Ignore all logfiles and tempfiles. +/log/* +/tmp/* +!/log/.keep +!/tmp/.keep +/tmp/pids/* +!/tmp/pids/.keep +/tmp/cache/* +!/tmp/cache/ +!/tmp/cache/assets/ +!/tmp/cache/assets/sprockets/.keep +/storage/* +!/storage/.keep +/.byebug_history + +# Ignore master key for decrypting credentials and more. +/config/master.key +/config/credentials/*.key +/config/credentials/*.enc + +# Ignore dotenv environment variable files. +.env +.env.* + +# Ignore node/yarn artifacts. +/node_modules +/yarn-error.log + +# Ignore coverage files +/coverage + +# Ignore uploaded files in development +/storage/development +/storage/test diff --git a/.ruby-version b/.ruby-version new file mode 100644 index 0000000000..15a2799817 --- /dev/null +++ b/.ruby-version @@ -0,0 +1 @@ +3.3.0 diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000000..563a8d21df --- /dev/null +++ b/Dockerfile @@ -0,0 +1,22 @@ +FROM ruby:3.3.0 + +RUN apt-get update -qq \ + && apt-get install -y --no-install-recommends build-essential libpq-dev nodejs \ + && rm -rf /var/lib/apt/lists/* + +ENV BUNDLE_PATH=/bundle \ + BUNDLE_BIN=/bundle/bin \ + GEM_HOME=/bundle +ENV PATH="${BUNDLE_BIN}:${PATH}" + +WORKDIR /app + +COPY Gemfile ./ +RUN bundle config set --local path "$BUNDLE_PATH" \ + && bundle install + +COPY . . + +EXPOSE 3000 + +CMD ["./bin/rails", "server", "-b", "0.0.0.0"] diff --git a/Gemfile b/Gemfile new file mode 100644 index 0000000000..823ba5392a --- /dev/null +++ b/Gemfile @@ -0,0 +1,39 @@ +source "https://rubygems.org" + +git_source(:github) { |repo| "https://github.com/#{repo}.git" } + +ruby "3.3.0" + +gem "rails", "~> 7.1.3", ">= 7.1.3.2" +gem "pg", "~> 1.5" +gem "puma", "~> 6.4" +gem "turbo-rails" +gem "stimulus-rails" +gem "importmap-rails" +gem "jbuilder" +gem "sprockets-rails" +gem "bootsnap", ">= 1.16.0", require: false +gem "redis", "~> 5.0" + +group :development, :test do + gem "debug", ">= 1.0.0", "< 2.0.0" + gem "cucumber-rails", require: false + gem "database_cleaner-active_record" + gem "capybara" + gem "selenium-webdriver" + gem "webdrivers" + gem "rspec-expectations" +end + +group :development do + gem "web-console" + gem "listen", "~> 3.7" + gem "spring" + gem "spring-watcher-listen", "~> 2.0.0" +end + +group :test do + gem "simplecov", require: false +end + +gem "tzinfo-data", platforms: %i[ mingw mswin x64_mingw jruby ] diff --git a/Gemfile.lock b/Gemfile.lock new file mode 100644 index 0000000000..f80b115adb --- /dev/null +++ b/Gemfile.lock @@ -0,0 +1,355 @@ +GEM + remote: https://rubygems.org/ + specs: + actioncable (7.1.6) + actionpack (= 7.1.6) + activesupport (= 7.1.6) + nio4r (~> 2.0) + websocket-driver (>= 0.6.1) + zeitwerk (~> 2.6) + actionmailbox (7.1.6) + actionpack (= 7.1.6) + activejob (= 7.1.6) + activerecord (= 7.1.6) + activestorage (= 7.1.6) + activesupport (= 7.1.6) + mail (>= 2.7.1) + net-imap + net-pop + net-smtp + actionmailer (7.1.6) + actionpack (= 7.1.6) + actionview (= 7.1.6) + activejob (= 7.1.6) + activesupport (= 7.1.6) + mail (~> 2.5, >= 2.5.4) + net-imap + net-pop + net-smtp + rails-dom-testing (~> 2.2) + actionpack (7.1.6) + actionview (= 7.1.6) + activesupport (= 7.1.6) + cgi + nokogiri (>= 1.8.5) + racc + rack (>= 2.2.4) + rack-session (>= 1.0.1) + rack-test (>= 0.6.3) + rails-dom-testing (~> 2.2) + rails-html-sanitizer (~> 1.6) + actiontext (7.1.6) + actionpack (= 7.1.6) + activerecord (= 7.1.6) + activestorage (= 7.1.6) + activesupport (= 7.1.6) + globalid (>= 0.6.0) + nokogiri (>= 1.8.5) + actionview (7.1.6) + activesupport (= 7.1.6) + builder (~> 3.1) + cgi + erubi (~> 1.11) + rails-dom-testing (~> 2.2) + rails-html-sanitizer (~> 1.6) + activejob (7.1.6) + activesupport (= 7.1.6) + globalid (>= 0.3.6) + activemodel (7.1.6) + activesupport (= 7.1.6) + activerecord (7.1.6) + activemodel (= 7.1.6) + activesupport (= 7.1.6) + timeout (>= 0.4.0) + activestorage (7.1.6) + actionpack (= 7.1.6) + activejob (= 7.1.6) + activerecord (= 7.1.6) + activesupport (= 7.1.6) + marcel (~> 1.0) + activesupport (7.1.6) + base64 + benchmark (>= 0.3) + bigdecimal + concurrent-ruby (~> 1.0, >= 1.0.2) + connection_pool (>= 2.2.5) + drb + i18n (>= 1.6, < 2) + logger (>= 1.4.2) + minitest (>= 5.1) + mutex_m + securerandom (>= 0.3) + tzinfo (~> 2.0) + addressable (2.8.7) + public_suffix (>= 2.0.2, < 7.0) + base64 (0.3.0) + benchmark (0.5.0) + bigdecimal (3.3.1) + bindex (0.8.1) + bootsnap (1.19.0) + msgpack (~> 1.2) + builder (3.3.0) + capybara (3.40.0) + addressable + matrix + mini_mime (>= 0.1.3) + nokogiri (~> 1.11) + rack (>= 1.6.0) + rack-test (>= 0.6.3) + regexp_parser (>= 1.5, < 3.0) + xpath (~> 3.2) + cgi (0.5.0) + childprocess (4.1.0) + concurrent-ruby (1.3.5) + connection_pool (2.5.4) + crass (1.0.6) + cucumber (10.1.1) + base64 (~> 0.2) + builder (~> 3.2) + cucumber-ci-environment (> 9, < 11) + cucumber-core (> 15, < 17) + cucumber-cucumber-expressions (> 17, < 19) + cucumber-html-formatter (> 20.3, < 22) + diff-lcs (~> 1.5) + logger (~> 1.6) + mini_mime (~> 1.1) + multi_test (~> 1.1) + sys-uname (~> 1.3) + cucumber-ci-environment (10.0.1) + cucumber-core (15.3.0) + cucumber-gherkin (> 27, < 35) + cucumber-messages (> 26, < 30) + cucumber-tag-expressions (> 5, < 9) + cucumber-cucumber-expressions (18.0.1) + bigdecimal + cucumber-gherkin (34.0.0) + cucumber-messages (> 25, < 29) + cucumber-html-formatter (21.15.1) + cucumber-messages (> 19, < 28) + cucumber-messages (27.2.0) + cucumber-rails (4.0.0) + capybara (>= 3.25, < 4) + cucumber (>= 7, < 11) + railties (>= 6.1, < 9) + cucumber-tag-expressions (8.0.0) + database_cleaner-active_record (2.2.2) + activerecord (>= 5.a) + database_cleaner-core (~> 2.0) + database_cleaner-core (2.0.1) + date (3.5.0) + debug (1.11.0) + irb (~> 1.10) + reline (>= 0.3.8) + diff-lcs (1.6.2) + docile (1.4.1) + drb (2.2.3) + erb (6.0.0) + erubi (1.13.1) + ffi (1.17.2-x86_64-linux-gnu) + globalid (1.3.0) + activesupport (>= 6.1) + i18n (1.14.7) + concurrent-ruby (~> 1.0) + importmap-rails (2.2.2) + actionpack (>= 6.0.0) + activesupport (>= 6.0.0) + railties (>= 6.0.0) + io-console (0.8.1) + irb (1.15.3) + pp (>= 0.6.0) + rdoc (>= 4.0.0) + reline (>= 0.4.2) + jbuilder (2.14.1) + actionview (>= 7.0.0) + activesupport (>= 7.0.0) + listen (3.9.0) + rb-fsevent (~> 0.10, >= 0.10.3) + rb-inotify (~> 0.9, >= 0.9.10) + logger (1.7.0) + loofah (2.24.1) + crass (~> 1.0.2) + nokogiri (>= 1.12.0) + mail (2.9.0) + logger + mini_mime (>= 0.1.1) + net-imap + net-pop + net-smtp + marcel (1.1.0) + matrix (0.4.3) + memoist3 (1.0.0) + mini_mime (1.1.5) + minitest (5.26.1) + msgpack (1.8.0) + multi_test (1.1.0) + mutex_m (0.3.0) + net-imap (0.5.12) + date + net-protocol + net-pop (0.1.2) + net-protocol + net-protocol (0.2.2) + timeout + net-smtp (0.5.1) + net-protocol + nio4r (2.7.5) + nokogiri (1.18.10-x86_64-linux-gnu) + racc (~> 1.4) + pg (1.6.2-x86_64-linux) + pp (0.6.3) + prettyprint + prettyprint (0.2.0) + psych (5.2.6) + date + stringio + public_suffix (6.0.2) + puma (6.6.1) + nio4r (~> 2.0) + racc (1.8.1) + rack (3.2.4) + rack-session (2.1.1) + base64 (>= 0.1.0) + rack (>= 3.0.0) + rack-test (2.2.0) + rack (>= 1.3) + rackup (2.2.1) + rack (>= 3) + rails (7.1.6) + actioncable (= 7.1.6) + actionmailbox (= 7.1.6) + actionmailer (= 7.1.6) + actionpack (= 7.1.6) + actiontext (= 7.1.6) + actionview (= 7.1.6) + activejob (= 7.1.6) + activemodel (= 7.1.6) + activerecord (= 7.1.6) + activestorage (= 7.1.6) + activesupport (= 7.1.6) + bundler (>= 1.15.0) + railties (= 7.1.6) + rails-dom-testing (2.3.0) + activesupport (>= 5.0.0) + minitest + nokogiri (>= 1.6) + rails-html-sanitizer (1.6.2) + loofah (~> 2.21) + nokogiri (>= 1.15.7, != 1.16.7, != 1.16.6, != 1.16.5, != 1.16.4, != 1.16.3, != 1.16.2, != 1.16.1, != 1.16.0.rc1, != 1.16.0) + railties (7.1.6) + actionpack (= 7.1.6) + activesupport (= 7.1.6) + cgi + irb + rackup (>= 1.0.0) + rake (>= 12.2) + thor (~> 1.0, >= 1.2.2) + tsort (>= 0.2) + zeitwerk (~> 2.6) + rake (13.3.1) + rb-fsevent (0.11.2) + rb-inotify (0.11.1) + ffi (~> 1.0) + rdoc (6.15.1) + erb + psych (>= 4.0.0) + tsort + redis (5.4.1) + redis-client (>= 0.22.0) + redis-client (0.26.1) + connection_pool + regexp_parser (2.11.3) + reline (0.6.3) + io-console (~> 0.5) + rexml (3.4.4) + rspec-expectations (3.13.5) + diff-lcs (>= 1.2.0, < 2.0) + rspec-support (~> 3.13.0) + rspec-support (3.13.6) + rubyzip (3.2.2) + securerandom (0.4.1) + selenium-webdriver (4.1.0) + childprocess (>= 0.5, < 5.0) + rexml (~> 3.2, >= 3.2.5) + rubyzip (>= 1.2.2) + simplecov (0.22.0) + docile (~> 1.1) + simplecov-html (~> 0.11) + simplecov_json_formatter (~> 0.1) + simplecov-html (0.13.2) + simplecov_json_formatter (0.1.4) + spring (2.1.1) + spring-watcher-listen (2.0.1) + listen (>= 2.7, < 4.0) + spring (>= 1.2, < 3.0) + sprockets (4.2.2) + concurrent-ruby (~> 1.0) + logger + rack (>= 2.2.4, < 4) + sprockets-rails (3.5.2) + actionpack (>= 6.1) + activesupport (>= 6.1) + sprockets (>= 3.0.0) + stimulus-rails (1.3.4) + railties (>= 6.0.0) + stringio (3.1.8) + sys-uname (1.4.1) + ffi (~> 1.1) + memoist3 (~> 1.0.0) + thor (1.4.0) + timeout (0.4.4) + tsort (0.2.0) + turbo-rails (2.0.20) + actionpack (>= 7.1.0) + railties (>= 7.1.0) + tzinfo (2.0.6) + concurrent-ruby (~> 1.0) + web-console (4.2.1) + actionview (>= 6.0.0) + activemodel (>= 6.0.0) + bindex (>= 0.4.0) + railties (>= 6.0.0) + webdrivers (5.3.1) + nokogiri (~> 1.6) + rubyzip (>= 1.3.0) + selenium-webdriver (~> 4.0, < 4.11) + websocket-driver (0.8.0) + base64 + websocket-extensions (>= 0.1.0) + websocket-extensions (0.1.5) + xpath (3.2.0) + nokogiri (~> 1.8) + zeitwerk (2.7.3) + +PLATFORMS + x86_64-linux-gnu + +DEPENDENCIES + bootsnap (>= 1.16.0) + capybara + cucumber-rails + database_cleaner-active_record + debug (>= 1.0.0, < 2.0.0) + importmap-rails + jbuilder + listen (~> 3.7) + pg (~> 1.5) + puma (~> 6.4) + rails (~> 7.1.3, >= 7.1.3.2) + redis (~> 5.0) + rspec-expectations + selenium-webdriver + simplecov + spring + spring-watcher-listen (~> 2.0.0) + sprockets-rails + stimulus-rails + turbo-rails + tzinfo-data + web-console + webdrivers + +RUBY VERSION + ruby 3.3.0p0 + +BUNDLED WITH + 2.5.3 diff --git a/README.md b/README.md index 9d7fe1bf53..70430368e5 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,30 @@ # CAMAAR -Sistema para avaliação de atividades acadêmicas remotas do CIC + +## Requisitos +- Docker e Docker Compose + +## Como executar +1. Construa os containers e suba o servidor Rails: + ```bash + docker compose up --build + ``` + Isso instala as gems, prepara o banco Postgres (`camaar_development`) e expõe a aplicação em `http://localhost:3000`. + +2. No primeiro carregamento execute as migrations e seeds dentro do container caso você adicione novas estruturas: + ```bash + docker compose run --rm web bundle exec rails db:create db:migrate db:seed + ``` + +## Testes BDD com Cucumber +Execute os cenários de aceitação com: +```bash +docker compose run --rm web bundle exec cucumber +``` +Os arquivos de teste ficam em `features/` + +## Estrutura principal +- `app/` — código Rails (controllers, modelos, views e assets). +- `features/` — especificações Cucumber e passos (`step_definitions`). +- `Dockerfile` / `docker-compose.yml` — infraestrutura para desenvolvimento. +- `config/` — configurações do framework, banco de dados e inicializadores. + diff --git a/Rakefile b/Rakefile new file mode 100644 index 0000000000..c4f9523878 --- /dev/null +++ b/Rakefile @@ -0,0 +1,5 @@ +# frozen_string_literal: true + +require_relative "config/application" + +Rails.application.load_tasks diff --git a/app/assets/builds/.keep b/app/assets/builds/.keep new file mode 100644 index 0000000000..e69de29bb2 diff --git a/app/assets/config/manifest.js b/app/assets/config/manifest.js new file mode 100644 index 0000000000..59abd7bd30 --- /dev/null +++ b/app/assets/config/manifest.js @@ -0,0 +1,3 @@ +//= link_tree ../images +//= link_tree ../builds +//= link_tree ../stylesheets .css diff --git a/app/assets/images/.keep b/app/assets/images/.keep new file mode 100644 index 0000000000..e69de29bb2 diff --git a/app/assets/stylesheets/application.css b/app/assets/stylesheets/application.css new file mode 100644 index 0000000000..0f1dd3304d --- /dev/null +++ b/app/assets/stylesheets/application.css @@ -0,0 +1,67 @@ +/* + *= require_tree . + *= require_self + */ + +:root { + font-family: "Inter", system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif; +} + +body { + margin: 0; + background: #f8fafc; + color: #0f172a; +} + +code { + background: #e2e8f0; + padding: 0.1rem 0.4rem; + border-radius: 0.25rem; +} + +.hero { + margin: 4rem auto; + max-width: 720px; + padding: 0 1rem; +} + +.card { + background: #fff; + border-radius: 1rem; + padding: 2.5rem; + box-shadow: 0 25px 50px -12px rgba(15, 23, 42, 0.25); +} + +.card h1 { + margin-top: 0; + font-size: 2.5rem; +} + +.lead { + font-size: 1.25rem; + color: #475569; +} + +.top-nav { + max-width: 960px; + margin: 0 auto; + padding: 1rem; + display: flex; + justify-content: space-between; + align-items: center; +} + +.brand { + font-weight: 700; +} + +.tagline { + font-size: 0.9rem; + color: #475569; +} + +.content { + max-width: 960px; + margin: 0 auto; + padding: 0 1rem 4rem; +} diff --git a/app/channels/application_cable/channel.rb b/app/channels/application_cable/channel.rb new file mode 100644 index 0000000000..9aec230539 --- /dev/null +++ b/app/channels/application_cable/channel.rb @@ -0,0 +1,6 @@ +# frozen_string_literal: true + +module ApplicationCable + class Channel < ActionCable::Channel::Base + end +end diff --git a/app/channels/application_cable/connection.rb b/app/channels/application_cable/connection.rb new file mode 100644 index 0000000000..8d6c2a1bf4 --- /dev/null +++ b/app/channels/application_cable/connection.rb @@ -0,0 +1,6 @@ +# frozen_string_literal: true + +module ApplicationCable + class Connection < ActionCable::Connection::Base + end +end diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb new file mode 100644 index 0000000000..280cc28ce2 --- /dev/null +++ b/app/controllers/application_controller.rb @@ -0,0 +1,5 @@ +# frozen_string_literal: true + +class ApplicationController < ActionController::Base + protect_from_forgery with: :exception +end diff --git a/app/controllers/concerns/.keep b/app/controllers/concerns/.keep new file mode 100644 index 0000000000..e69de29bb2 diff --git a/app/controllers/pages_controller.rb b/app/controllers/pages_controller.rb new file mode 100644 index 0000000000..9c2647f8b8 --- /dev/null +++ b/app/controllers/pages_controller.rb @@ -0,0 +1,7 @@ +# frozen_string_literal: true + +class PagesController < ApplicationController + def home + @message = "Este é o seu ambiente Ruby on Rails com BDD pronto para uso." + end +end diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb new file mode 100644 index 0000000000..15b06f0f67 --- /dev/null +++ b/app/helpers/application_helper.rb @@ -0,0 +1,4 @@ +# frozen_string_literal: true + +module ApplicationHelper +end diff --git a/app/javascript/application.js b/app/javascript/application.js new file mode 100644 index 0000000000..76c8ec2ef8 --- /dev/null +++ b/app/javascript/application.js @@ -0,0 +1,2 @@ +import "@hotwired/turbo-rails" +import "controllers" diff --git a/app/javascript/controllers/application.js b/app/javascript/controllers/application.js new file mode 100644 index 0000000000..38c9def376 --- /dev/null +++ b/app/javascript/controllers/application.js @@ -0,0 +1,7 @@ +import { Application } from "@hotwired/stimulus" + +const application = Application.start() +application.debug = false +window.Stimulus = application + +export { application } diff --git a/app/javascript/controllers/hello_controller.js b/app/javascript/controllers/hello_controller.js new file mode 100644 index 0000000000..f8c1582834 --- /dev/null +++ b/app/javascript/controllers/hello_controller.js @@ -0,0 +1,11 @@ +import { Controller } from "@hotwired/stimulus" + +export default class extends Controller { + static targets = ["name"] + + connect() { + if (this.hasNameTarget) { + this.nameTarget.textContent = this.nameTarget.textContent || "CAMAAR" + } + } +} diff --git a/app/javascript/controllers/index.js b/app/javascript/controllers/index.js new file mode 100644 index 0000000000..56fff851c6 --- /dev/null +++ b/app/javascript/controllers/index.js @@ -0,0 +1,4 @@ +import { application } from "./application" + +import HelloController from "./hello_controller" +application.register("hello", HelloController) diff --git a/app/jobs/application_job.rb b/app/jobs/application_job.rb new file mode 100644 index 0000000000..2e500d7d50 --- /dev/null +++ b/app/jobs/application_job.rb @@ -0,0 +1,9 @@ +# frozen_string_literal: true + +class ApplicationJob < ActiveJob::Base + # Automatically retry jobs that encountered a deadlock. + # retry_on ActiveRecord::Deadlocked + + # Most jobs are safe to ignore if the underlying records are no longer available. + # discard_on ActiveJob::DeserializationError +end diff --git a/app/mailers/application_mailer.rb b/app/mailers/application_mailer.rb new file mode 100644 index 0000000000..3f12d9b8de --- /dev/null +++ b/app/mailers/application_mailer.rb @@ -0,0 +1,6 @@ +# frozen_string_literal: true + +class ApplicationMailer < ActionMailer::Base + default from: "no-reply@camaar.local" + layout "mailer" +end diff --git a/app/models/application_record.rb b/app/models/application_record.rb new file mode 100644 index 0000000000..08dc537989 --- /dev/null +++ b/app/models/application_record.rb @@ -0,0 +1,5 @@ +# frozen_string_literal: true + +class ApplicationRecord < ActiveRecord::Base + primary_abstract_class +end diff --git a/app/models/concerns/.keep b/app/models/concerns/.keep new file mode 100644 index 0000000000..e69de29bb2 diff --git a/app/views/layouts/application.html.erb b/app/views/layouts/application.html.erb new file mode 100644 index 0000000000..043bf6d69c --- /dev/null +++ b/app/views/layouts/application.html.erb @@ -0,0 +1,24 @@ + + + + CAMAAR + + <%= csrf_meta_tags %> + <%= csp_meta_tag %> + + <%= stylesheet_link_tag "application", "data-turbo-track": "reload" %> + <%= javascript_importmap_tags %> + + + +
+ +
+
+ <%= yield %> +
+ + diff --git a/app/views/layouts/mailer.html.erb b/app/views/layouts/mailer.html.erb new file mode 100644 index 0000000000..c984b8e72b --- /dev/null +++ b/app/views/layouts/mailer.html.erb @@ -0,0 +1,10 @@ + + + + + + + + <%= yield %> + + diff --git a/app/views/layouts/mailer.text.erb b/app/views/layouts/mailer.text.erb new file mode 100644 index 0000000000..37f0bddbd7 --- /dev/null +++ b/app/views/layouts/mailer.text.erb @@ -0,0 +1 @@ +<%= yield %> diff --git a/app/views/pages/home.html.erb b/app/views/pages/home.html.erb new file mode 100644 index 0000000000..847bc35f2b --- /dev/null +++ b/app/views/pages/home.html.erb @@ -0,0 +1,10 @@ +
+
+

<%= t("pages.home.hero_title") %>

+

<%= @message %>

+

+ Execute docker compose up --build para inicializar o servidor Rails e depois execute + docker compose run --rm web bundle exec cucumber para rodar os cenários de BDD. +

+
+
diff --git a/bin/importmap b/bin/importmap new file mode 100755 index 0000000000..ccc74d841f --- /dev/null +++ b/bin/importmap @@ -0,0 +1,7 @@ +#!/usr/bin/env ruby +# frozen_string_literal: true + +require "bundler/setup" +require "importmap/commands" + +Importmap::Commands::CLI.start(ARGV) diff --git a/bin/rails b/bin/rails new file mode 100755 index 0000000000..22f2d8deee --- /dev/null +++ b/bin/rails @@ -0,0 +1,6 @@ +#!/usr/bin/env ruby +# frozen_string_literal: true + +APP_PATH = File.expand_path("../config/application", __dir__) +require_relative "../config/boot" +require "rails/commands" diff --git a/bin/rake b/bin/rake new file mode 100755 index 0000000000..e436ea54a1 --- /dev/null +++ b/bin/rake @@ -0,0 +1,6 @@ +#!/usr/bin/env ruby +# frozen_string_literal: true + +require_relative "../config/boot" +require "rake" +Rake.application.run diff --git a/bin/setup b/bin/setup new file mode 100755 index 0000000000..a387698dd4 --- /dev/null +++ b/bin/setup @@ -0,0 +1,25 @@ +#!/usr/bin/env ruby +# frozen_string_literal: true + +require "fileutils" +include FileUtils + +ROOT = File.expand_path("..", __dir__) + +def system!(*args) + system(*args, exception: true) +end + +chdir ROOT do + puts "== Installing dependencies ==" + system!("bundle", "install") + + puts "== Preparing database ==" + system!("bundle", "exec", "rails", "db:prepare") + + puts "== Removing old logs and tempfiles ==" + system!("bin/rails", "log:clear", "tmp:clear") + + puts "== Seeding database ==" + system!("bundle", "exec", "rails", "db:seed") +end diff --git a/config.ru b/config.ru new file mode 100644 index 0000000000..27970959d6 --- /dev/null +++ b/config.ru @@ -0,0 +1,6 @@ +# frozen_string_literal: true + +require_relative "config/environment" + +run Rails.application +Rails.application.load_server diff --git a/config/application.rb b/config/application.rb new file mode 100644 index 0000000000..4536ab43d0 --- /dev/null +++ b/config/application.rb @@ -0,0 +1,16 @@ +# frozen_string_literal: true + +require_relative "boot" + +require "rails/all" + +Bundler.require(*Rails.groups) + +module Camaar + class Application < Rails::Application + config.load_defaults 7.1 + + # Configuration for the application, engines, and railties goes here. + config.generators.system_tests = nil + end +end diff --git a/config/boot.rb b/config/boot.rb new file mode 100644 index 0000000000..8843fe6160 --- /dev/null +++ b/config/boot.rb @@ -0,0 +1,6 @@ +# frozen_string_literal: true + +ENV["BUNDLE_GEMFILE"] ||= File.expand_path("../Gemfile", __dir__) + +require "bundler/setup" +require "bootsnap/setup" if ENV.fetch("ENABLE_BOOTSNAP", "1") == "1" diff --git a/config/cable.yml b/config/cable.yml new file mode 100644 index 0000000000..51a965e1a4 --- /dev/null +++ b/config/cable.yml @@ -0,0 +1,10 @@ +development: + adapter: async + +test: + adapter: async + +production: + adapter: redis + url: <%= ENV.fetch("REDIS_URL", "redis://localhost:6379/1") %> + channel_prefix: camaar_production diff --git a/config/credentials/.keep b/config/credentials/.keep new file mode 100644 index 0000000000..e69de29bb2 diff --git a/config/cucumber.yml b/config/cucumber.yml new file mode 100644 index 0000000000..d4117ad10f --- /dev/null +++ b/config/cucumber.yml @@ -0,0 +1,5 @@ +# frozen_string_literal: true + +default: --publish-quiet --format pretty --strict-undefined --tags "not @wip" +wip: --tags @wip --wip --strict-undefined +rerun: --format rerun --out tmp/cucumber-rerun.txt --strict-undefined diff --git a/config/database.yml b/config/database.yml new file mode 100644 index 0000000000..75a07726fa --- /dev/null +++ b/config/database.yml @@ -0,0 +1,27 @@ +# PostgreSQL. Versions 9.3 and up are supported. +# +# Ensure the pg gem is defined in your Gemfile +# gem "pg" +# +default: &default + adapter: postgresql + encoding: unicode + host: <%= ENV.fetch("DATABASE_HOST", "db") %> + port: <%= ENV.fetch("DATABASE_PORT", 5432) %> + username: <%= ENV.fetch("DATABASE_USER", "postgres") %> + password: <%= ENV.fetch("DATABASE_PASSWORD", "postgres") %> + pool: <%= ENV.fetch("RAILS_MAX_THREADS", 5) %> + +development: + <<: *default + database: <%= ENV.fetch("DATABASE_NAME", "camaar_development") %> + +test: + <<: *default + database: <%= ENV.fetch("DATABASE_NAME_TEST", "camaar_test") %> + +production: + <<: *default + database: <%= ENV.fetch("DATABASE_NAME", "camaar_production") %> + username: <%= ENV["DATABASE_USER"] %> + password: <%= ENV["DATABASE_PASSWORD"] %> diff --git a/config/environment.rb b/config/environment.rb new file mode 100644 index 0000000000..e8173e052e --- /dev/null +++ b/config/environment.rb @@ -0,0 +1,5 @@ +# frozen_string_literal: true + +require_relative "application" + +Rails.application.initialize! diff --git a/config/environments/development.rb b/config/environments/development.rb new file mode 100644 index 0000000000..e1ae2b1d08 --- /dev/null +++ b/config/environments/development.rb @@ -0,0 +1,43 @@ +# frozen_string_literal: true + +require "active_support/core_ext/integer/time" + +Rails.application.configure do + config.enable_reloading = true + config.eager_load = false + config.consider_all_requests_local = true + config.server_timing = true + + if Rails.root.join("tmp/caching-dev.txt").exist? + config.action_controller.perform_caching = true + config.action_controller.enable_fragment_cache_logging = true + + config.cache_store = :memory_store + config.public_file_server.headers = { + "Cache-Control" => "public, max-age=#{2.days.to_i}" + } + else + config.action_controller.perform_caching = false + + config.cache_store = :null_store + end + + config.active_storage.service = :local + + config.action_mailer.raise_delivery_errors = false + config.action_mailer.perform_caching = false + + config.active_support.deprecation = :log + config.active_support.disallowed_deprecation = :raise + config.active_support.disallowed_deprecation_warnings = [] + + config.action_controller.raise_on_missing_callback_actions = true + config.action_controller.raise_on_open_redirects = true + + config.active_record.migration_error = :page_load + config.active_record.verbose_query_logs = true + + config.assets.quiet = true + + config.file_watcher = ActiveSupport::EventedFileUpdateChecker +end diff --git a/config/environments/production.rb b/config/environments/production.rb new file mode 100644 index 0000000000..4c2c0346a3 --- /dev/null +++ b/config/environments/production.rb @@ -0,0 +1,34 @@ +# frozen_string_literal: true + +require "active_support/core_ext/integer/time" + +Rails.application.configure do + config.enable_reloading = false + config.eager_load = true + config.consider_all_requests_local = false + config.action_controller.perform_caching = true + + config.public_file_server.enabled = ENV["RAILS_SERVE_STATIC_FILES"].present? + config.assets.compile = false + + config.log_level = ENV.fetch("RAILS_LOG_LEVEL", "info").to_sym + config.log_tags = [:request_id] + + config.active_storage.service = :local + + config.force_ssl = ActiveModel::Type::Boolean.new.cast(ENV["FORCE_SSL"]) + + config.action_mailer.perform_caching = false + + config.i18n.fallbacks = true + + config.active_support.report_deprecations = false + + if ENV["RAILS_LOG_TO_STDOUT"].present? + logger = ActiveSupport::Logger.new($stdout) + logger.formatter = Logger::Formatter.new + config.logger = ActiveSupport::TaggedLogging.new(logger) + end + + config.active_record.dump_schema_after_migration = false +end diff --git a/config/environments/test.rb b/config/environments/test.rb new file mode 100644 index 0000000000..44371ca203 --- /dev/null +++ b/config/environments/test.rb @@ -0,0 +1,28 @@ +# frozen_string_literal: true + +require "active_support/core_ext/integer/time" + +Rails.application.configure do + config.enable_reloading = false + config.eager_load = ENV["CI"].present? + + config.consider_all_requests_local = true + config.action_controller.perform_caching = false + config.cache_store = :null_store + config.public_file_server.enabled = true + config.public_file_server.headers = { + "Cache-Control" => "public, max-age=#{1.hour.to_i}" + } + + config.active_storage.service = :test + + config.action_mailer.perform_caching = false + config.action_mailer.delivery_method = :test + + config.active_support.deprecation = :stderr + config.active_support.disallowed_deprecation = :raise + config.active_support.disallowed_deprecation_warnings = [] + + config.action_controller.raise_on_missing_callback_actions = true + config.active_support.report_deprecations = false if ENV["CI"].present? +end diff --git a/config/importmap.rb b/config/importmap.rb new file mode 100644 index 0000000000..19de63842e --- /dev/null +++ b/config/importmap.rb @@ -0,0 +1,7 @@ +# frozen_string_literal: true + +pin "application", preload: true +pin "@hotwired/turbo-rails", to: "turbo.min.js", preload: true +pin "@hotwired/stimulus", to: "stimulus.min.js", preload: true +pin "@hotwired/stimulus-loading", to: "stimulus-loading.js", preload: true +pin_all_from "app/javascript/controllers", under: "controllers" diff --git a/config/initializers/assets.rb b/config/initializers/assets.rb new file mode 100644 index 0000000000..905ebbac46 --- /dev/null +++ b/config/initializers/assets.rb @@ -0,0 +1,6 @@ +# frozen_string_literal: true + +Rails.application.config.assets.version = "1.0" +Rails.application.config.assets.paths << Rails.root.join("vendor", "javascript") +# Precompile additional assets. +# Rails.application.config.assets.precompile += %w( admin.js admin.css ) diff --git a/config/initializers/content_security_policy.rb b/config/initializers/content_security_policy.rb new file mode 100644 index 0000000000..483edfc1fe --- /dev/null +++ b/config/initializers/content_security_policy.rb @@ -0,0 +1,31 @@ +# frozen_string_literal: true + +# Be sure to restart your server when you modify this file. + +# Define an application-wide content security policy. +# See the Securing Rails Applications Guide for more information: +# https://guides.rubyonrails.org/security.html#content-security-policy +# +# Rails.application.configure do +# config.content_security_policy do |policy| +# policy.default_src :self, :https +# policy.font_src :self, :https, :data +# policy.img_src :self, :https, :data +# policy.object_src :none +# policy.script_src :self, :https +# policy.style_src :self, :https +# # Specifies whether inline scripts are allowed if they have a nonce. +# policy.script_src :self, :https, :unsafe_inline +# +# # Specify URI for violation reports +# # policy.report_uri "/csp-violation-report-endpoint" +# end +# +# # If you are using UJS then enable automatic nonce generation +# # config.content_security_policy_nonce_generator = -> request { SecureRandom.base64(16) } +# # config.content_security_policy_nonce_directives = %w(script-src) +# +# # Report CSP violations to a specified URI. Note: This relies on +# # an additional CSP header. +# # config.content_security_policy_report_only = true +# end diff --git a/config/initializers/cors.rb b/config/initializers/cors.rb new file mode 100644 index 0000000000..0b12a2c20d --- /dev/null +++ b/config/initializers/cors.rb @@ -0,0 +1,13 @@ +# frozen_string_literal: true + +# Be sure to restart your server when you modify this file. + +# Handling Cross-Origin Resource Sharing (CORS) so that API calls can be made from the frontend. +# Rails.application.config.middleware.insert_before 0, Rack::Cors do +# allow do +# origins "example.com" +# resource "*", +# headers: :any, +# methods: %i[get post put patch delete options head] +# end +# end diff --git a/config/initializers/filter_parameter_logging.rb b/config/initializers/filter_parameter_logging.rb new file mode 100644 index 0000000000..991d4a81bc --- /dev/null +++ b/config/initializers/filter_parameter_logging.rb @@ -0,0 +1,8 @@ +# frozen_string_literal: true + +# Configure parameters to be filtered from the log files. +Rails.application.config.filter_parameters += %i[ + password + password_confirmation + credit_card +] diff --git a/config/initializers/inflections.rb b/config/initializers/inflections.rb new file mode 100644 index 0000000000..b50e623f7d --- /dev/null +++ b/config/initializers/inflections.rb @@ -0,0 +1,18 @@ +# frozen_string_literal: true + +# Be sure to restart your server when you modify this file. + +# Add new inflection rules using the following format. Inflections +# are locale specific, and you may define rules for as many different +# locales as you wish. All of these examples are active by default: +# ActiveSupport::Inflector.inflections(:en) do |inflect| +# inflect.plural /^(ox)$/i, "\1en" +# inflect.singular /^(ox)en/i, "\1" +# inflect.irregular "person", "people" +# inflect.uncountable %w( fish sheep ) +# end +# +# These inflection rules are supported but not enabled by default: +# ActiveSupport::Inflector.inflections(:en) do |inflect| +# inflect.acronym "RESTful" +# end diff --git a/config/initializers/mime_types.rb b/config/initializers/mime_types.rb new file mode 100644 index 0000000000..3c5b882efd --- /dev/null +++ b/config/initializers/mime_types.rb @@ -0,0 +1,4 @@ +# frozen_string_literal: true + +# Add new mime types for use in respond_to blocks: +# Mime::Type.register "text/richtext", :rtf diff --git a/config/initializers/new_framework_defaults_7_1.rb b/config/initializers/new_framework_defaults_7_1.rb new file mode 100644 index 0000000000..cd13acf9b7 --- /dev/null +++ b/config/initializers/new_framework_defaults_7_1.rb @@ -0,0 +1,16 @@ +# frozen_string_literal: true + +# Be sure to restart your server when you modify this file. +# +# This file eases your Rails 7.1 framework defaults upgrade. +# +# Uncomment each configuration one by one to switch to the new default. +# Once your application is ready to run with all new defaults, you can +# remove this file and set the `config.load_defaults` to `7.1`. + +# Rails.application.config.active_record.belongs_to_required_by_default = true +# Rails.application.config.active_record.partial_inserts = true +# Rails.application.config.action_controller.raise_on_open_redirects = true +# Rails.application.config.action_controller.raise_on_missing_callback_actions = true +# Rails.application.config.action_view.default_enforce_utf8 = true +# Rails.application.config.active_support.hash_digest_class = OpenSSL::Digest::SHA256 diff --git a/config/initializers/permissions_policy.rb b/config/initializers/permissions_policy.rb new file mode 100644 index 0000000000..cec68d38c4 --- /dev/null +++ b/config/initializers/permissions_policy.rb @@ -0,0 +1,13 @@ +# frozen_string_literal: true + +# Define an application-wide HTTP permissions policy. For further +# information see https://developers.google.com/web/updates/2018/06/feature-policy +# +# Rails.application.config.permissions_policy do |policy| +# policy.camera :none +# policy.gyroscope :none +# policy.microphone :none +# policy.usb :none +# policy.fullscreen :self +# policy.payment :self, "https://secure.example.com" +# end diff --git a/config/initializers/wrap_parameters.rb b/config/initializers/wrap_parameters.rb new file mode 100644 index 0000000000..649c4a744a --- /dev/null +++ b/config/initializers/wrap_parameters.rb @@ -0,0 +1,16 @@ +# frozen_string_literal: true + +# Be sure to restart your server when you modify this file. + +# This file contains settings for ActionController::ParamsWrapper which +# is enabled by default. + +# Enable parameter wrapping for JSON. You can disable this by setting :format to an empty array. +ActiveSupport.on_load(:action_controller) do + wrap_parameters format: [] +end + +# To enable root element in JSON for ActiveRecord objects. +# ActiveSupport.on_load(:active_record) do +# self.include_root_in_json = true +# end diff --git a/config/locales/en.yml b/config/locales/en.yml new file mode 100644 index 0000000000..1db67b947d --- /dev/null +++ b/config/locales/en.yml @@ -0,0 +1,9 @@ +en: + hello: "Hello world" + layouts: + application: + navigation: "Navigation" + pages: + home: + hero_title: "Bem-vindo ao CAMAAR" + hero_body: "Comece a construir seu sistema de avaliação com BDD." diff --git a/config/puma.rb b/config/puma.rb new file mode 100644 index 0000000000..ac6cd37f22 --- /dev/null +++ b/config/puma.rb @@ -0,0 +1,14 @@ +# frozen_string_literal: true + +max_threads_count = ENV.fetch("RAILS_MAX_THREADS", 5).to_i +min_threads_count = ENV.fetch("RAILS_MIN_THREADS", max_threads_count).to_i +threads min_threads_count, max_threads_count + +port ENV.fetch("PORT", 3000) +environment ENV.fetch("RAILS_ENV", "development") +pidfile ENV.fetch("PIDFILE", "tmp/pids/server.pid") +workers ENV.fetch("WEB_CONCURRENCY", 0).to_i + +preload_app! + +plugin :tmp_restart diff --git a/config/routes.rb b/config/routes.rb new file mode 100644 index 0000000000..a988ad07a1 --- /dev/null +++ b/config/routes.rb @@ -0,0 +1,5 @@ +# frozen_string_literal: true + +Rails.application.routes.draw do + root "pages#home" +end diff --git a/config/storage.yml b/config/storage.yml new file mode 100644 index 0000000000..9409889862 --- /dev/null +++ b/config/storage.yml @@ -0,0 +1,11 @@ +local: + service: Disk + root: <%= Rails.root.join("storage") %> + +test: + service: Disk + root: <%= Rails.root.join("storage", "test") %> + +production: + service: Disk + root: <%= ENV.fetch("RAILS_STORAGE_PATH", Rails.root.join("storage", "production")) %> diff --git a/db/migrate/.keep b/db/migrate/.keep new file mode 100644 index 0000000000..e69de29bb2 diff --git a/db/schema.rb b/db/schema.rb new file mode 100644 index 0000000000..f9139984dc --- /dev/null +++ b/db/schema.rb @@ -0,0 +1,17 @@ +# This file is auto-generated from the current state of the database. Instead +# of editing this file, please use the migrations feature of Active Record to +# incrementally modify your database, and then regenerate this schema definition. +# +# This file is the source Rails uses to define your schema when running `bin/rails +# db:schema:load`. When creating a new database, `bin/rails db:schema:load` tends to +# be faster and is potentially less error prone than running all of your +# migrations from scratch. Old migrations may fail to apply correctly if those +# migrations use external dependencies or application code. +# +# It's strongly recommended that you check this file into your version control system. + +ActiveRecord::Schema[7.1].define(version: 0) do + # These are extensions that must be enabled in order to support this database + enable_extension "plpgsql" + +end diff --git a/db/seeds.rb b/db/seeds.rb new file mode 100644 index 0000000000..7ad8956eb1 --- /dev/null +++ b/db/seeds.rb @@ -0,0 +1,5 @@ +# frozen_string_literal: true + +# Use this file to seed the database with its default values. +# Example: +# User.create!(name: "Maria", email: "maria@example.org") diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000000..b5d72903eb --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,35 @@ +version: "3.9" + +services: + web: + build: + context: . + command: ./bin/rails server -b 0.0.0.0 -p 3000 + volumes: + - .:/app:cached + - bundle:/bundle + ports: + - "11112:3000" + environment: + DATABASE_HOST: db + DATABASE_USER: postgres + DATABASE_PASSWORD: postgres + DATABASE_NAME: camaar_development + RAILS_ENV: development + BUNDLE_PATH: /bundle + depends_on: + - db + + db: + image: postgres:15 + environment: + POSTGRES_USER: postgres + POSTGRES_PASSWORD: postgres + volumes: + - postgres-data:/var/lib/postgresql/data + ports: + - "11113:5432" + +volumes: + postgres-data: + bundle: diff --git a/features/atualizar_base_sigaa.feature b/features/atualizar_base_sigaa.feature new file mode 100644 index 0000000000..ca40d6dcee --- /dev/null +++ b/features/atualizar_base_sigaa.feature @@ -0,0 +1,33 @@ +Feature: Atualizar base de dados com dados do SIGAA + Para manter os cadastros corretos + Como administrador + Quero sincronizar a base existente com os dados atuais do SIGAA + + Background: + Given o administrador "Ana" está autenticado + And existe uma base local previamente carregada + And Ana possui credenciais válidas para acessar o SIGAA + + @happy_path + Scenario: Atualização parcial com resumo de mudanças + Given Ana inicia a atualização do SIGAA + When alguns registros são atualizados e outros mantidos + Then o processo termina com status “Concluído” + And o resumo mostra inserções, alterações e itens sem mudanças + And Ana pode baixar o relatório detalhado + + @sad_path + Scenario: Falha de autenticação no SIGAA + Given Ana inicia a atualização + When informa credenciais inválidas + Then o sistema interrompe o processo + And exibe “Usuário ou senha do SIGAA inválidos” + And nenhuma alteração é aplicada na base local + + @sad_path + Scenario: Erro durante importação de dados + Given Ana inicia a atualização e a conexão com o SIGAA ocorre normalmente + When ocorre erro ao processar os registros + Then o sistema sinaliza “Falha ao atualizar a base. Tente novamente.” + And oferece a opção de baixar o log de erro + And a base permanece no estado anterior diff --git a/features/cadastrar_usuarios.feature b/features/cadastrar_usuarios.feature new file mode 100644 index 0000000000..f21b33bfde --- /dev/null +++ b/features/cadastrar_usuarios.feature @@ -0,0 +1,38 @@ +Feature: Importar novos participantes do SIGAA + Para garantir acesso ao CAMAAR + Como administrador + Quero importar participantes de turmas e enviar solicitação de definição de senha + + Background: + Given o administrador "Ana" está autenticado + And possui credenciais válidas para consultar o SIGAA + And há novos participantes na turma "Metodologias Ativas 2024" ainda sem acesso ao CAMAAR + + @happy_path + Scenario: Administrador importa participantes e dispara solicitação de senha + Given Ana acessa o menu "Importar usuários do SIGAA" + When seleciona a turma "Metodologias Ativas 2024" e inicia a importação + Then o sistema lista os novos participantes encontrados + And ao confirmar, envia e-mails com link para definição de senha + And registra o status “Solicitação enviada” para cada participante + + @sad_path + Scenario: Falha ao acessar dados do SIGAA + Given Ana tenta importar participantes + When ocorre erro de autenticação ou comunicação com o SIGAA + Then o sistema exibe “Não foi possível acessar o SIGAA. Verifique credenciais ou tente mais tarde.” + And nenhuma solicitação de senha é disparada + + @sad_path + Scenario: Erro ao enviar e-mail de definição de senha + Given a importação retornou usuários válidos + When o envio de e-mail falha para alguns participantes + Then o sistema informa quais usuários não receberam a solicitação + And oferece ação “Reenviar” para tentar novamente + + @sad_path + Scenario: Administrador cancela importação antes de confirmar + Given Ana visualiza a prévia de participantes importados + When decide cancelar a operação + Then a importação é abortada + And nenhuma solicitação de senha é enviada diff --git a/features/definicao_senha.feature b/features/definicao_senha.feature new file mode 100644 index 0000000000..30f7199931 --- /dev/null +++ b/features/definicao_senha.feature @@ -0,0 +1,30 @@ +Feature: Definição de senha a partir do e-mail de cadastro + Para acessar o sistema + Como usuário + Quero definir minha senha usando o link recebido no e-mail de solicitação de cadastro + + Background: + Given o usuário "Marina" recebeu um e-mail com link de definição de senha válido por 24 horas + And seu cadastro está ativo mas sem senha definida + + @happy_path + Scenario: Usuário define senha pela primeira vez via link válido + Given Marina acessa o link recebido no e-mail + When informa a nova senha e confirma com a mesma combinação + Then o sistema salva a senha com sucesso + And apresenta a mensagem "Senha definida. Você já pode acessar o sistema" + And a usuária é direcionada para a tela de login + + @happy_path + Scenario: Usuário volta depois e utiliza o mesmo link ainda válido + Given Marina definiu a senha corretamente há poucos minutos + When acessa novamente o link + Then o sistema informa que a senha já foi definida + And oferece o acesso direto à tela de login + + @sad_path + Scenario: Senhas não coincidem + Given Marina acessa o link válido + When informa “NovaSenha123” e confirma com “NovaSenha321” + Then a senha não é salva + And surge o aviso “A confirmação precisa ser igual à nova senha.” diff --git a/features/edicao_delecao_templates.feature b/features/edicao_delecao_templates.feature new file mode 100644 index 0000000000..f615d709f5 --- /dev/null +++ b/features/edicao_delecao_templates.feature @@ -0,0 +1,47 @@ +Feature: Manutenção de templates próprios + Para organizar melhor os modelos + Como administrador + Quero editar ou deletar templates que criei sem impactar formulários existentes + + Background: + Given que o administrador "Ana" está autenticado + And que existe o template "Pesquisa Satisfação 2024" criado por Ana + And existem formulários publicados baseados nesse template + And existe também o template "Comunicado Financeiro" criado por outro administrador + + @happy_path + Scenario: Administrador edita um template criado por ele sem afetar formulários + Given Ana acessa a lista de templates + When ela seleciona "Pesquisa Satisfação 2024" e altera campos permitidos + And salva o template atualizado + Then a nova versão do template fica disponível para futuros formulários + And os formulários já publicados permanecem inalterados + + @happy_path + Scenario: Administrador remove um template criado por ele + Given Ana acessa a lista de templates + When ela solicita a exclusão do template "Pesquisa Satisfação 2024" + And confirma a operação + Then o template deixa de aparecer para novos formulários + And os formulários existentes criados a partir dele continuam disponíveis + + @sad_path + Scenario: Administrador tenta editar template que não criou + Given Ana acessa os detalhes do template "Comunicado Financeiro" + When tenta alterar qualquer campo + Then o sistema bloqueia a ação + And exibe mensagem informando que apenas o criador original pode editar + + @sad_path + Scenario: Exclusão cancelada por existência de formulários em andamento + Given Ana solicita excluir "Pesquisa Satisfação 2024" + And o sistema detecta formulários em andamento usando esse template + Then a exclusão é impedida + And Ana recebe orientação para arquivar ou migrar os formulários antes de remover o template + + @sad_path + Scenario: Falha por perda de conexão ao salvar alterações + Given Ana está editando "Pesquisa Satisfação 2024" + When ocorre uma falha de conexão ao confirmar as mudanças + Then o sistema informa o erro + And mantém o template na última versão válida sem alterações parciais diff --git a/features/importar_dados_sigaa.feature b/features/importar_dados_sigaa.feature new file mode 100644 index 0000000000..005332cbc7 --- /dev/null +++ b/features/importar_dados_sigaa.feature @@ -0,0 +1,47 @@ +Feature: Importar dados do SIGAA usando JSONs do repositório + Para manter a base completa + Como administrador + Quero importar turmas, disciplinas e participantes do SIGAA apenas quando não existirem localmente + + Background: + Given o administrador "Ana" está autenticado + And os JSONs de turmas, matérias e participantes exportados do SIGAA estão disponíveis no repositório + And a base atual pode conter registros parciais + + @happy_path + Scenario: Importação inclui apenas registros inexistentes + Given Ana acessa o menu "Integrações > SIGAA" + When seleciona os arquivos JSON fornecidos no repositório + And inicia a importação + Then o sistema valida os dados + And insere novas turmas, matérias e participantes que ainda não existem + And apresenta resumo com quantos itens foram adicionados e ignorados por já existirem + + @happy_path + Scenario: Importação contempla dependências entre entidades + Given Ana carrega o JSON de participantes que referenciam turmas e matérias + When essas turmas e matérias não existem na base + Then o processo cria primeiro as turmas e matérias correspondentes + And só então cadastra cada participante vinculado + + @sad_path + Scenario: Falha na validação do JSON + Given Ana tenta importar um arquivo JSON ausente de campos obrigatórios + When o processo detecta inconsistências + Then a importação é abortada + And o sistema informa quais arquivos ou registros estão inválidos + And nenhum dado parcial é aplicado à base + + @sad_path + Scenario: Erro de comunicação ou leitura dos arquivos + Given Ana seleciona os JSONs para importação + When ocorre falha ao ler um dos arquivos (permissão/corrupção) + Then o sistema exibe “Não foi possível carregar o arquivo . Verifique e tente novamente.” + And a importação completa não é iniciada + + @sad_path + Scenario: Administrador cancela o processo antes de confirmar + Given Ana analisou o resumo de registros a importar + When decide cancelar + Then nenhum dado do SIGAA é gravado na base + And o sistema registra o cancelamento e mantém a base sem alterações diff --git a/features/login.feature b/features/login.feature new file mode 100644 index 0000000000..200ebeb247 --- /dev/null +++ b/features/login.feature @@ -0,0 +1,50 @@ +Feature: Autenticação por e-mail ou matrícula + Para responder formulários ou administrar o sistema + Como usuário cadastrado + Quero acessar com e-mail ou matrícula e senha + + Background: + Given que os seguintes usuários já existem: + | perfil | nome | email | matricula | senha | + | usuario_padrao | João | joao@unb.br | UNB123456 | Senha#123 | + | administrador | Ana | ana.admin@unb.br | UNB654321 | Admin#321 | + + @happy_path + Scenario Outline: Usuário acessa o sistema com credencial válida + Given que "" deseja acessar o sistema + When informa "" "" e a senha correta + Then o login é autorizado + And o usuário visualiza a tela principal para responder formulários + And o menu lateral não exibe opções extras além das permitidas ao perfil + Examples: + | perfil | tipo_login | credencial | + | usuario_padrao | e-mail | joao@unb.br | + | usuario_padrao | matrícula | UNB123456 | + + @happy_path @admin + Scenario: Administrador visualiza a opção de gerenciamento após autenticar + Given que "administrador" deseja acessar o sistema + When informa o e-mail "ana.admin@unb.br" e a senha correta + Then o login é autorizado + And o menu lateral exibe a opção "Gerenciamento" + And o administrador pode acessar as funcionalidades de gestão do sistema + + @sad_path + Scenario Outline: Autenticação bloqueada por credenciais inválidas + Given que "" deseja acessar o sistema + When informa "" "" com a senha "" + Then o sistema nega o acesso + And uma mensagem informa que e-mail/matrícula ou senha estão incorretos + And nenhuma funcionalidade do sistema é carregada + Examples: + | perfil | tipo_login | credencial | senha_tentada | + | usuario_padrao | e-mail | joao@unb.br | SenhaErrada1 | + | usuario_padrao | matrícula | UNB123456 | SenhaErrada1 | + | administrador | e-mail | ana.admin@unb.br | AdminErrada | + + @sad_path + Scenario: Autenticação falha quando um dos campos não é informado + Given que qualquer usuário tenta acessar o sistema + When submete o formulário com e-mail/matrícula ou senha em branco + Then o sistema impede o envio + And uma mensagem orienta a preencher todos os campos obrigatórios diff --git a/features/responder_formulario.feature b/features/responder_formulario.feature new file mode 100644 index 0000000000..22185fb22c --- /dev/null +++ b/features/responder_formulario.feature @@ -0,0 +1,46 @@ +Feature: Responder formulário da turma + Para avaliar minha turma + Como participante matriculado + Quero preencher e enviar o questionário correspondente + + Background: + Given o participante "Lucas" está autenticado + And Lucas está matriculado na turma "CIC0197" + And o formulário "Avaliação da Turma CIC0197" está disponível para resposta + + @happy_path + Scenario: Participante preenche e envia avaliação com sucesso + Given Lucas acessa o menu "Formulários" + When seleciona "Avaliação da Turma CIC0197" + And responde todas as perguntas obrigatórias + And envia o formulário + Then o sistema confirma “Avaliação enviada com sucesso” + And o formulário passa a constar como respondido para Lucas + + @happy_path + Scenario: Participante salva rascunho e retoma mais tarde + Given Lucas abriu o formulário + When responde parcialmente e escolhe “Salvar rascunho” + Then o sistema armazena as respostas parciais + And ao voltar ao formulário, as respostas preenchidas permanecem lá + + @sad_path + Scenario: Participante tenta enviar sem completar perguntas obrigatórias + Given Lucas está respondendo o formulário + When deixa campos obrigatórios em branco e clica em “Enviar” + Then o sistema bloqueia o envio + And destaca os campos faltantes com a mensagem “Preencha este campo” + + @sad_path + Scenario: Participante tenta responder formulário fora do prazo + Given o prazo do formulário expirou + When Lucas tenta acessá-lo + Then o sistema informa “Formulário indisponível, prazo encerrado” + And impede o início da resposta + + @sad_path + Scenario: Falha de conexão ao enviar o formulário + Given Lucas completou todas as respostas + When clica em “Enviar” e ocorre falha de rede + Then o sistema mostra “Não foi possível enviar. Verifique sua conexão e tente novamente” + And o questionário permanece como não enviado até nova tentativa diff --git a/features/resultados_admin.feature b/features/resultados_admin.feature new file mode 100644 index 0000000000..8c58576cbd --- /dev/null +++ b/features/resultados_admin.feature @@ -0,0 +1,35 @@ +Feature: Gerar relatório do administrador + Eu como Administrador + Quero baixar um arquivo csv contendo os resultados de um formulário + A fim de avaliar o desempenho das turmas + + Background: + Given estou autenticado como "admin" + And acesso o painel de resultados + + @happy_path + Scenario: Admin baixa o resultado de uma disciplina específica + When clico no card "Arquitetura de Computadores" do semestre "2024/1" + Then devo ver o download do arquivo "arquitetura-2024-1.csv" iniciado + And devo ver a mensagem "Download iniciado" + + @sad_path + Scenario: Admin tenta baixar resultado e serviço está indisponível + When clico no card "Arquitetura de Computadores" do semestre "2024/1" + And ocorre um erro na geração do CSV + Then devo ver a mensagem "Não foi possível gerar o CSV" + And o download não deve ser iniciado + + @sad_path + Scenario: Painel sem resultados disponíveis + Given não existem resultados cadastrados + When acesso o painel de resultados + Then devo ver a mensagem "Nenhum resultado disponível" + And nenhum card deve ser exibido + + @sad_path + Scenario: Usuário não admin tenta acessar resultados + Given estou autenticado como "aluno" + When acesso o painel de resultados + Then devo ver a mensagem "Acesso restrito a administradores" + And devo ser redirecionado para o painel inicial diff --git a/features/step_definitions/atualizar_base_sigaa_steps.rb b/features/step_definitions/atualizar_base_sigaa_steps.rb new file mode 100644 index 0000000000..3d9171f886 --- /dev/null +++ b/features/step_definitions/atualizar_base_sigaa_steps.rb @@ -0,0 +1,75 @@ +# frozen_string_literal: true + +# Passos gerados a partir de atualizar_base_sigaa.feature. Substitua os pendings pela automação real. + +Given('o administrador {string} está autenticado') do |ana| + pending('TODO: implementar passo: Given o administrador "Ana" está autenticado') +end + +And('existe uma base local previamente carregada') do + pending('TODO: implementar passo: And existe uma base local previamente carregada') +end + +And('Ana possui credenciais válidas para acessar o SIGAA') do + pending('TODO: implementar passo: And Ana possui credenciais válidas para acessar o SIGAA') +end + +Given('Ana inicia a atualização do SIGAA') do + pending('TODO: implementar passo: Given Ana inicia a atualização do SIGAA') +end + +When('alguns registros são atualizados e outros mantidos') do + pending('TODO: implementar passo: When alguns registros são atualizados e outros mantidos') +end + +Then('o processo termina com status “Concluído”') do + pending('TODO: implementar passo: Then o processo termina com status “Concluído”') +end + +And('o resumo mostra inserções, alterações e itens sem mudanças') do + pending('TODO: implementar passo: And o resumo mostra inserções, alterações e itens sem mudanças') +end + +And('Ana pode baixar o relatório detalhado') do + pending('TODO: implementar passo: And Ana pode baixar o relatório detalhado') +end + +Given('Ana inicia a atualização') do + pending('TODO: implementar passo: Given Ana inicia a atualização') +end + +When('informa credenciais inválidas') do + pending('TODO: implementar passo: When informa credenciais inválidas') +end + +Then('o sistema interrompe o processo') do + pending('TODO: implementar passo: Then o sistema interrompe o processo') +end + +And('exibe “Usuário ou senha do SIGAA inválidos”') do + pending('TODO: implementar passo: And exibe “Usuário ou senha do SIGAA inválidos”') +end + +And('nenhuma alteração é aplicada na base local') do + pending('TODO: implementar passo: And nenhuma alteração é aplicada na base local') +end + +Given('Ana inicia a atualização e a conexão com o SIGAA ocorre normalmente') do + pending('TODO: implementar passo: Given Ana inicia a atualização e a conexão com o SIGAA ocorre normalmente') +end + +When('ocorre erro ao processar os registros') do + pending('TODO: implementar passo: When ocorre erro ao processar os registros') +end + +Then('o sistema sinaliza “Falha ao atualizar a base. Tente novamente.”') do + pending('TODO: implementar passo: Then o sistema sinaliza “Falha ao atualizar a base. Tente novamente.”') +end + +And('oferece a opção de baixar o log de erro') do + pending('TODO: implementar passo: And oferece a opção de baixar o log de erro') +end + +And('a base permanece no estado anterior') do + pending('TODO: implementar passo: And a base permanece no estado anterior') +end diff --git a/features/step_definitions/cadastrar_usuarios_steps.rb b/features/step_definitions/cadastrar_usuarios_steps.rb new file mode 100644 index 0000000000..0c870f5f39 --- /dev/null +++ b/features/step_definitions/cadastrar_usuarios_steps.rb @@ -0,0 +1,83 @@ +# frozen_string_literal: true + +# Passos gerados a partir de cadastrar_usuarios.feature. Substitua os pendings pela automação real. + +Given('o administrador {string} está autenticado') do |ana| + pending('TODO: implementar passo: Given o administrador "Ana" está autenticado') +end + +And('possui credenciais válidas para consultar o SIGAA') do + pending('TODO: implementar passo: And possui credenciais válidas para consultar o SIGAA') +end + +And('há novos participantes na turma {string} ainda sem acesso ao CAMAAR') do |metodologias_ativas_2024| + pending('TODO: implementar passo: And há novos participantes na turma "Metodologias Ativas 2024" ainda sem acesso ao CAMAAR') +end + +Given('Ana acessa o menu {string}') do |importar_usu_rios_do_sigaa| + pending('TODO: implementar passo: Given Ana acessa o menu "Importar usuários do SIGAA"') +end + +When('seleciona a turma {string} e inicia a importação') do |metodologias_ativas_2024| + pending('TODO: implementar passo: When seleciona a turma "Metodologias Ativas 2024" e inicia a importação') +end + +Then('o sistema lista os novos participantes encontrados') do + pending('TODO: implementar passo: Then o sistema lista os novos participantes encontrados') +end + +And('ao confirmar, envia e-mails com link para definição de senha') do + pending('TODO: implementar passo: And ao confirmar, envia e-mails com link para definição de senha') +end + +And('registra o status “Solicitação enviada” para cada participante') do + pending('TODO: implementar passo: And registra o status “Solicitação enviada” para cada participante') +end + +Given('Ana tenta importar participantes') do + pending('TODO: implementar passo: Given Ana tenta importar participantes') +end + +When('ocorre erro de autenticação ou comunicação com o SIGAA') do + pending('TODO: implementar passo: When ocorre erro de autenticação ou comunicação com o SIGAA') +end + +Then('o sistema exibe “Não foi possível acessar o SIGAA. Verifique credenciais ou tente mais tarde.”') do + pending('TODO: implementar passo: Then o sistema exibe “Não foi possível acessar o SIGAA. Verifique credenciais ou tente mais tarde.”') +end + +And('nenhuma solicitação de senha é disparada') do + pending('TODO: implementar passo: And nenhuma solicitação de senha é disparada') +end + +Given('a importação retornou usuários válidos') do + pending('TODO: implementar passo: Given a importação retornou usuários válidos') +end + +When('o envio de e-mail falha para alguns participantes') do + pending('TODO: implementar passo: When o envio de e-mail falha para alguns participantes') +end + +Then('o sistema informa quais usuários não receberam a solicitação') do + pending('TODO: implementar passo: Then o sistema informa quais usuários não receberam a solicitação') +end + +And('oferece ação “Reenviar” para tentar novamente') do + pending('TODO: implementar passo: And oferece ação “Reenviar” para tentar novamente') +end + +Given('Ana visualiza a prévia de participantes importados') do + pending('TODO: implementar passo: Given Ana visualiza a prévia de participantes importados') +end + +When('decide cancelar a operação') do + pending('TODO: implementar passo: When decide cancelar a operação') +end + +Then('a importação é abortada') do + pending('TODO: implementar passo: Then a importação é abortada') +end + +And('nenhuma solicitação de senha é enviada') do + pending('TODO: implementar passo: And nenhuma solicitação de senha é enviada') +end diff --git a/features/step_definitions/definicao_senha_steps.rb b/features/step_definitions/definicao_senha_steps.rb new file mode 100644 index 0000000000..ce7ff1e24f --- /dev/null +++ b/features/step_definitions/definicao_senha_steps.rb @@ -0,0 +1,63 @@ +# frozen_string_literal: true + +# Passos gerados a partir de definicao_senha.feature. Substitua os pendings pela automação real. + +Given('o usuário {string} recebeu um e-mail com link de definição de senha válido por 24 horas') do |marina| + pending('TODO: implementar passo: Given o usuário "Marina" recebeu um e-mail com link de definição de senha válido por 24 horas') +end + +And('seu cadastro está ativo mas sem senha definida') do + pending('TODO: implementar passo: And seu cadastro está ativo mas sem senha definida') +end + +Given('Marina acessa o link recebido no e-mail') do + pending('TODO: implementar passo: Given Marina acessa o link recebido no e-mail') +end + +When('informa a nova senha e confirma com a mesma combinação') do + pending('TODO: implementar passo: When informa a nova senha e confirma com a mesma combinação') +end + +Then('o sistema salva a senha com sucesso') do + pending('TODO: implementar passo: Then o sistema salva a senha com sucesso') +end + +And('apresenta a mensagem {string}') do |senha_definida_voc_j_pode_acessar_o_sistema| + pending('TODO: implementar passo: And apresenta a mensagem "Senha definida. Você já pode acessar o sistema"') +end + +And('a usuária é direcionada para a tela de login') do + pending('TODO: implementar passo: And a usuária é direcionada para a tela de login') +end + +Given('Marina definiu a senha corretamente há poucos minutos') do + pending('TODO: implementar passo: Given Marina definiu a senha corretamente há poucos minutos') +end + +When('acessa novamente o link') do + pending('TODO: implementar passo: When acessa novamente o link') +end + +Then('o sistema informa que a senha já foi definida') do + pending('TODO: implementar passo: Then o sistema informa que a senha já foi definida') +end + +And('oferece o acesso direto à tela de login') do + pending('TODO: implementar passo: And oferece o acesso direto à tela de login') +end + +Given('Marina acessa o link válido') do + pending('TODO: implementar passo: Given Marina acessa o link válido') +end + +When('informa “NovaSenha123” e confirma com “NovaSenha321”') do + pending('TODO: implementar passo: When informa “NovaSenha123” e confirma com “NovaSenha321”') +end + +Then('a senha não é salva') do + pending('TODO: implementar passo: Then a senha não é salva') +end + +And('surge o aviso “A confirmação precisa ser igual à nova senha.”') do + pending('TODO: implementar passo: And surge o aviso “A confirmação precisa ser igual à nova senha.”') +end diff --git a/features/step_definitions/edicao_delecao_templates_steps.rb b/features/step_definitions/edicao_delecao_templates_steps.rb new file mode 100644 index 0000000000..dcec52806f --- /dev/null +++ b/features/step_definitions/edicao_delecao_templates_steps.rb @@ -0,0 +1,103 @@ +# frozen_string_literal: true + +# Passos gerados a partir de edicao_delecao_templates.feature. Substitua os pendings pela automação real. + +Given('que o administrador {string} está autenticado') do |ana| + pending('TODO: implementar passo: Given que o administrador "Ana" está autenticado') +end + +And('que existe o template {string} criado por Ana') do |pesquisa_satisfa_o_2024| + pending('TODO: implementar passo: And que existe o template "Pesquisa Satisfação 2024" criado por Ana') +end + +And('existem formulários publicados baseados nesse template') do + pending('TODO: implementar passo: And existem formulários publicados baseados nesse template') +end + +And('existe também o template {string} criado por outro administrador') do |comunicado_financeiro| + pending('TODO: implementar passo: And existe também o template "Comunicado Financeiro" criado por outro administrador') +end + +Given('Ana acessa a lista de templates') do + pending('TODO: implementar passo: Given Ana acessa a lista de templates') +end + +When('ela seleciona {string} e altera campos permitidos') do |pesquisa_satisfa_o_2024| + pending('TODO: implementar passo: When ela seleciona "Pesquisa Satisfação 2024" e altera campos permitidos') +end + +And('salva o template atualizado') do + pending('TODO: implementar passo: And salva o template atualizado') +end + +Then('a nova versão do template fica disponível para futuros formulários') do + pending('TODO: implementar passo: Then a nova versão do template fica disponível para futuros formulários') +end + +And('os formulários já publicados permanecem inalterados') do + pending('TODO: implementar passo: And os formulários já publicados permanecem inalterados') +end + +When('ela solicita a exclusão do template {string}') do |pesquisa_satisfa_o_2024| + pending('TODO: implementar passo: When ela solicita a exclusão do template "Pesquisa Satisfação 2024"') +end + +And('confirma a operação') do + pending('TODO: implementar passo: And confirma a operação') +end + +Then('o template deixa de aparecer para novos formulários') do + pending('TODO: implementar passo: Then o template deixa de aparecer para novos formulários') +end + +And('os formulários existentes criados a partir dele continuam disponíveis') do + pending('TODO: implementar passo: And os formulários existentes criados a partir dele continuam disponíveis') +end + +Given('Ana acessa os detalhes do template {string}') do |comunicado_financeiro| + pending('TODO: implementar passo: Given Ana acessa os detalhes do template "Comunicado Financeiro"') +end + +When('tenta alterar qualquer campo') do + pending('TODO: implementar passo: When tenta alterar qualquer campo') +end + +Then('o sistema bloqueia a ação') do + pending('TODO: implementar passo: Then o sistema bloqueia a ação') +end + +And('exibe mensagem informando que apenas o criador original pode editar') do + pending('TODO: implementar passo: And exibe mensagem informando que apenas o criador original pode editar') +end + +Given('Ana solicita excluir {string}') do |pesquisa_satisfa_o_2024| + pending('TODO: implementar passo: Given Ana solicita excluir "Pesquisa Satisfação 2024"') +end + +And('o sistema detecta formulários em andamento usando esse template') do + pending('TODO: implementar passo: And o sistema detecta formulários em andamento usando esse template') +end + +Then('a exclusão é impedida') do + pending('TODO: implementar passo: Then a exclusão é impedida') +end + +And('Ana recebe orientação para arquivar ou migrar os formulários antes de remover o template') do + pending('TODO: implementar passo: And Ana recebe orientação para arquivar ou migrar os formulários antes de remover o template') +end + +Given('Ana está editando {string}') do |pesquisa_satisfa_o_2024| + pending('TODO: implementar passo: Given Ana está editando "Pesquisa Satisfação 2024"') +end + +When('ocorre uma falha de conexão ao confirmar as mudanças') do + pending('TODO: implementar passo: When ocorre uma falha de conexão ao confirmar as mudanças') +end + +Then('o sistema informa o erro') do + pending('TODO: implementar passo: Then o sistema informa o erro') +end + +And('mantém o template na última versão válida sem alterações parciais') do + pending('TODO: implementar passo: And mantém o template na última versão válida sem alterações parciais') +end diff --git a/features/step_definitions/importar_dados_sigaa_steps.rb b/features/step_definitions/importar_dados_sigaa_steps.rb new file mode 100644 index 0000000000..a10a155afe --- /dev/null +++ b/features/step_definitions/importar_dados_sigaa_steps.rb @@ -0,0 +1,107 @@ +# frozen_string_literal: true + +# Passos gerados a partir de importar_dados_sigaa.feature. Substitua os pendings pela automação real. + +Given('o administrador {string} está autenticado') do |ana| + pending('TODO: implementar passo: Given o administrador "Ana" está autenticado') +end + +And('os JSONs de turmas, matérias e participantes exportados do SIGAA estão disponíveis no repositório') do + pending('TODO: implementar passo: And os JSONs de turmas, matérias e participantes exportados do SIGAA estão disponíveis no repositório') +end + +And('a base atual pode conter registros parciais') do + pending('TODO: implementar passo: And a base atual pode conter registros parciais') +end + +Given('Ana acessa o menu {string}') do |integra_es_sigaa| + pending('TODO: implementar passo: Given Ana acessa o menu "Integrações > SIGAA"') +end + +When('seleciona os arquivos JSON fornecidos no repositório') do + pending('TODO: implementar passo: When seleciona os arquivos JSON fornecidos no repositório') +end + +And('inicia a importação') do + pending('TODO: implementar passo: And inicia a importação') +end + +Then('o sistema valida os dados') do + pending('TODO: implementar passo: Then o sistema valida os dados') +end + +And('insere novas turmas, matérias e participantes que ainda não existem') do + pending('TODO: implementar passo: And insere novas turmas, matérias e participantes que ainda não existem') +end + +And('apresenta resumo com quantos itens foram adicionados e ignorados por já existirem') do + pending('TODO: implementar passo: And apresenta resumo com quantos itens foram adicionados e ignorados por já existirem') +end + +Given('Ana carrega o JSON de participantes que referenciam turmas e matérias') do + pending('TODO: implementar passo: Given Ana carrega o JSON de participantes que referenciam turmas e matérias') +end + +When('essas turmas e matérias não existem na base') do + pending('TODO: implementar passo: When essas turmas e matérias não existem na base') +end + +Then('o processo cria primeiro as turmas e matérias correspondentes') do + pending('TODO: implementar passo: Then o processo cria primeiro as turmas e matérias correspondentes') +end + +And('só então cadastra cada participante vinculado') do + pending('TODO: implementar passo: And só então cadastra cada participante vinculado') +end + +Given('Ana tenta importar um arquivo JSON ausente de campos obrigatórios') do + pending('TODO: implementar passo: Given Ana tenta importar um arquivo JSON ausente de campos obrigatórios') +end + +When('o processo detecta inconsistências') do + pending('TODO: implementar passo: When o processo detecta inconsistências') +end + +Then('a importação é abortada') do + pending('TODO: implementar passo: Then a importação é abortada') +end + +And('o sistema informa quais arquivos ou registros estão inválidos') do + pending('TODO: implementar passo: And o sistema informa quais arquivos ou registros estão inválidos') +end + +And('nenhum dado parcial é aplicado à base') do + pending('TODO: implementar passo: And nenhum dado parcial é aplicado à base') +end + +Given('Ana seleciona os JSONs para importação') do + pending('TODO: implementar passo: Given Ana seleciona os JSONs para importação') +end + +When('ocorre falha ao ler um dos arquivos (permissão/corrupção)') do + pending('TODO: implementar passo: When ocorre falha ao ler um dos arquivos (permissão/corrupção)') +end + +Then('o sistema exibe “Não foi possível carregar o arquivo . Verifique e tente novamente.”') do + pending('TODO: implementar passo: Then o sistema exibe “Não foi possível carregar o arquivo . Verifique e tente novamente.”') +end + +And('a importação completa não é iniciada') do + pending('TODO: implementar passo: And a importação completa não é iniciada') +end + +Given('Ana analisou o resumo de registros a importar') do + pending('TODO: implementar passo: Given Ana analisou o resumo de registros a importar') +end + +When('decide cancelar') do + pending('TODO: implementar passo: When decide cancelar') +end + +Then('nenhum dado do SIGAA é gravado na base') do + pending('TODO: implementar passo: Then nenhum dado do SIGAA é gravado na base') +end + +And('o sistema registra o cancelamento e mantém a base sem alterações') do + pending('TODO: implementar passo: And o sistema registra o cancelamento e mantém a base sem alterações') +end diff --git a/features/step_definitions/login_steps.rb b/features/step_definitions/login_steps.rb new file mode 100644 index 0000000000..aa3e5585ca --- /dev/null +++ b/features/step_definitions/login_steps.rb @@ -0,0 +1,71 @@ +# frozen_string_literal: true + +# Passos gerados a partir de login.feature. Substitua os pendings pela automação real. + +Given('que os seguintes usuários já existem:') do |table| + pending('TODO: implementar passo: Given que os seguintes usuários já existem:') +end + +Given('que {string} deseja acessar o sistema') do |perfil| + pending('TODO: implementar passo: Given que "" deseja acessar o sistema') +end + +When('informa {string} {string} e a senha correta') do |tipo_login, credencial| + pending('TODO: implementar passo: When informa "" "" e a senha correta') +end + +Then('o login é autorizado') do + pending('TODO: implementar passo: Then o login é autorizado') +end + +And('o usuário visualiza a tela principal para responder formulários') do + pending('TODO: implementar passo: And o usuário visualiza a tela principal para responder formulários') +end + +And('o menu lateral não exibe opções extras além das permitidas ao perfil') do + pending('TODO: implementar passo: And o menu lateral não exibe opções extras além das permitidas ao perfil') +end + +When('informa o e-mail {string} e a senha correta') do |ana_admin_unb_br| + pending('TODO: implementar passo: When informa o e-mail "ana.admin@unb.br" e a senha correta') +end + +And('o menu lateral exibe a opção {string}') do |gerenciamento| + pending('TODO: implementar passo: And o menu lateral exibe a opção "Gerenciamento"') +end + +And('o administrador pode acessar as funcionalidades de gestão do sistema') do + pending('TODO: implementar passo: And o administrador pode acessar as funcionalidades de gestão do sistema') +end + +When('informa {string} {string} com a senha {string}') do |tipo_login, credencial, senha_tentada| + pending('TODO: implementar passo: When informa "" "" com a senha ""') +end + +Then('o sistema nega o acesso') do + pending('TODO: implementar passo: Then o sistema nega o acesso') +end + +And('uma mensagem informa que e-mail/matrícula ou senha estão incorretos') do + pending('TODO: implementar passo: And uma mensagem informa que e-mail/matrícula ou senha estão incorretos') +end + +And('nenhuma funcionalidade do sistema é carregada') do + pending('TODO: implementar passo: And nenhuma funcionalidade do sistema é carregada') +end + +Given('que qualquer usuário tenta acessar o sistema') do + pending('TODO: implementar passo: Given que qualquer usuário tenta acessar o sistema') +end + +When('submete o formulário com e-mail/matrícula ou senha em branco') do + pending('TODO: implementar passo: When submete o formulário com e-mail/matrícula ou senha em branco') +end + +Then('o sistema impede o envio') do + pending('TODO: implementar passo: Then o sistema impede o envio') +end + +And('uma mensagem orienta a preencher todos os campos obrigatórios') do + pending('TODO: implementar passo: And uma mensagem orienta a preencher todos os campos obrigatórios') +end diff --git a/features/step_definitions/responder_formulario_steps.rb b/features/step_definitions/responder_formulario_steps.rb new file mode 100644 index 0000000000..5e678a066d --- /dev/null +++ b/features/step_definitions/responder_formulario_steps.rb @@ -0,0 +1,103 @@ +# frozen_string_literal: true + +# Passos gerados a partir de responder_formulario.feature. Substitua os pendings pela automação real. + +Given('o participante {string} está autenticado') do |lucas| + pending('TODO: implementar passo: Given o participante "Lucas" está autenticado') +end + +And('Lucas está matriculado na turma {string}') do |cic0197| + pending('TODO: implementar passo: And Lucas está matriculado na turma "CIC0197"') +end + +And('o formulário {string} está disponível para resposta') do |avalia_o_da_turma_cic0197| + pending('TODO: implementar passo: And o formulário "Avaliação da Turma CIC0197" está disponível para resposta') +end + +Given('Lucas acessa o menu {string}') do |formul_rios| + pending('TODO: implementar passo: Given Lucas acessa o menu "Formulários"') +end + +When('seleciona {string}') do |avalia_o_da_turma_cic0197| + pending('TODO: implementar passo: When seleciona "Avaliação da Turma CIC0197"') +end + +And('responde todas as perguntas obrigatórias') do + pending('TODO: implementar passo: And responde todas as perguntas obrigatórias') +end + +And('envia o formulário') do + pending('TODO: implementar passo: And envia o formulário') +end + +Then('o sistema confirma “Avaliação enviada com sucesso”') do + pending('TODO: implementar passo: Then o sistema confirma “Avaliação enviada com sucesso”') +end + +And('o formulário passa a constar como respondido para Lucas') do + pending('TODO: implementar passo: And o formulário passa a constar como respondido para Lucas') +end + +Given('Lucas abriu o formulário') do + pending('TODO: implementar passo: Given Lucas abriu o formulário') +end + +When('responde parcialmente e escolhe “Salvar rascunho”') do + pending('TODO: implementar passo: When responde parcialmente e escolhe “Salvar rascunho”') +end + +Then('o sistema armazena as respostas parciais') do + pending('TODO: implementar passo: Then o sistema armazena as respostas parciais') +end + +And('ao voltar ao formulário, as respostas preenchidas permanecem lá') do + pending('TODO: implementar passo: And ao voltar ao formulário, as respostas preenchidas permanecem lá') +end + +Given('Lucas está respondendo o formulário') do + pending('TODO: implementar passo: Given Lucas está respondendo o formulário') +end + +When('deixa campos obrigatórios em branco e clica em “Enviar”') do + pending('TODO: implementar passo: When deixa campos obrigatórios em branco e clica em “Enviar”') +end + +Then('o sistema bloqueia o envio') do + pending('TODO: implementar passo: Then o sistema bloqueia o envio') +end + +And('destaca os campos faltantes com a mensagem “Preencha este campo”') do + pending('TODO: implementar passo: And destaca os campos faltantes com a mensagem “Preencha este campo”') +end + +Given('o prazo do formulário expirou') do + pending('TODO: implementar passo: Given o prazo do formulário expirou') +end + +When('Lucas tenta acessá-lo') do + pending('TODO: implementar passo: When Lucas tenta acessá-lo') +end + +Then('o sistema informa “Formulário indisponível, prazo encerrado”') do + pending('TODO: implementar passo: Then o sistema informa “Formulário indisponível, prazo encerrado”') +end + +And('impede o início da resposta') do + pending('TODO: implementar passo: And impede o início da resposta') +end + +Given('Lucas completou todas as respostas') do + pending('TODO: implementar passo: Given Lucas completou todas as respostas') +end + +When('clica em “Enviar” e ocorre falha de rede') do + pending('TODO: implementar passo: When clica em “Enviar” e ocorre falha de rede') +end + +Then('o sistema mostra “Não foi possível enviar. Verifique sua conexão e tente novamente”') do + pending('TODO: implementar passo: Then o sistema mostra “Não foi possível enviar. Verifique sua conexão e tente novamente”') +end + +And('o questionário permanece como não enviado até nova tentativa') do + pending('TODO: implementar passo: And o questionário permanece como não enviado até nova tentativa') +end diff --git a/features/step_definitions/resultados_admin_steps.rb b/features/step_definitions/resultados_admin_steps.rb new file mode 100644 index 0000000000..035b190d5b --- /dev/null +++ b/features/step_definitions/resultados_admin_steps.rb @@ -0,0 +1,63 @@ +# frozen_string_literal: true + +# Passos gerados a partir de resultados_admin.feature. Substitua os pendings pela automação real. + +Given('estou autenticado como {string}') do |admin| + pending('TODO: implementar passo: Given estou autenticado como "admin"') +end + +And('acesso o painel de resultados') do + pending('TODO: implementar passo: And acesso o painel de resultados') +end + +When('clico no card {string} do semestre {string}') do |arquitetura_de_computadores, texto2| + pending('TODO: implementar passo: When clico no card "Arquitetura de Computadores" do semestre "2024/1"') +end + +Then('devo ver o download do arquivo {string} iniciado') do |arquitetura_2024_1_csv| + pending('TODO: implementar passo: Then devo ver o download do arquivo "arquitetura-2024-1.csv" iniciado') +end + +And('devo ver a mensagem {string}') do |download_iniciado| + pending('TODO: implementar passo: And devo ver a mensagem "Download iniciado"') +end + +And('ocorre um erro na geração do CSV') do + pending('TODO: implementar passo: And ocorre um erro na geração do CSV') +end + +Then('devo ver a mensagem {string}') do |n_o_foi_poss_vel_gerar_o_csv| + pending('TODO: implementar passo: Then devo ver a mensagem "Não foi possível gerar o CSV"') +end + +And('o download não deve ser iniciado') do + pending('TODO: implementar passo: And o download não deve ser iniciado') +end + +Given('não existem resultados cadastrados') do + pending('TODO: implementar passo: Given não existem resultados cadastrados') +end + +When('acesso o painel de resultados') do + pending('TODO: implementar passo: When acesso o painel de resultados') +end + +Then('devo ver a mensagem {string}') do |nenhum_resultado_dispon_vel| + pending('TODO: implementar passo: Then devo ver a mensagem "Nenhum resultado disponível"') +end + +And('nenhum card deve ser exibido') do + pending('TODO: implementar passo: And nenhum card deve ser exibido') +end + +Given('estou autenticado como {string}') do |aluno| + pending('TODO: implementar passo: Given estou autenticado como "aluno"') +end + +Then('devo ver a mensagem {string}') do |acesso_restrito_a_administradores| + pending('TODO: implementar passo: Then devo ver a mensagem "Acesso restrito a administradores"') +end + +And('devo ser redirecionado para o painel inicial') do + pending('TODO: implementar passo: And devo ser redirecionado para o painel inicial') +end diff --git a/features/step_definitions/template_modal_steps.rb b/features/step_definitions/template_modal_steps.rb new file mode 100644 index 0000000000..72c00f463a --- /dev/null +++ b/features/step_definitions/template_modal_steps.rb @@ -0,0 +1,83 @@ +# frozen_string_literal: true + +# Passos gerados a partir de template_modal.feature. Substitua os pendings pela automação real. + +Given('estou autenticado como {string}') do |admin| + pending('TODO: implementar passo: Given estou autenticado como "admin"') +end + +And('estou com o modal de template aberto') do + pending('TODO: implementar passo: And estou com o modal de template aberto') +end + +When('defino o nome do template como {string}') do |feedback_2024| + pending('TODO: implementar passo: When defino o nome do template como "Feedback 2024"') +end + +And('adiciono a questão 1 com:') do |table| + pending('TODO: implementar passo: And adiciono a questão 1 com:') +end + +And('adiciono a questão 2 com:') do |table| + pending('TODO: implementar passo: And adiciono a questão 2 com:') +end + +And('salvo o template pelo modal') do + pending('TODO: implementar passo: And salvo o template pelo modal') +end + +Then('devo ver a mensagem {string}') do |template_salvo| + pending('TODO: implementar passo: Then devo ver a mensagem "Template salvo"') +end + +And('devo ver duas questões listadas no preview') do + pending('TODO: implementar passo: And devo ver duas questões listadas no preview') +end + +When('adiciono a questão 1 com:') do |table| + pending('TODO: implementar passo: When adiciono a questão 1 com:') +end + +And('clico para adicionar nova questão') do + pending('TODO: implementar passo: And clico para adicionar nova questão') +end + +Then('devo ver duas questões listadas no preview') do + pending('TODO: implementar passo: Then devo ver duas questões listadas no preview') +end + +Then('devo ver a mensagem {string}') do |informe_o_nome_do_template| + pending('TODO: implementar passo: Then devo ver a mensagem "Informe o nome do template"') +end + +And('o modal deve permanecer aberto') do + pending('TODO: implementar passo: And o modal deve permanecer aberto') +end + +When('defino o nome do template como {string}') do |avalia_o| + pending('TODO: implementar passo: When defino o nome do template como "Avaliação"') +end + +Then('devo ver a mensagem {string}') do |inclua_op_es_para_perguntas_objetivas| + pending('TODO: implementar passo: Then devo ver a mensagem "Inclua opções para perguntas objetivas"') +end + +And('nenhuma questão deve ser adicionada') do + pending('TODO: implementar passo: And nenhuma questão deve ser adicionada') +end + +Given('estou autenticado como {string}') do |aluno| + pending('TODO: implementar passo: Given estou autenticado como "aluno"') +end + +When('estou com o modal de template aberto') do + pending('TODO: implementar passo: When estou com o modal de template aberto') +end + +Then('devo ver a mensagem {string}') do |acesso_restrito| + pending('TODO: implementar passo: Then devo ver a mensagem "Acesso restrito"') +end + +And('o modal deve ser fechado automaticamente') do + pending('TODO: implementar passo: And o modal deve ser fechado automaticamente') +end diff --git a/features/step_definitions/visualizacao_formularios_steps.rb b/features/step_definitions/visualizacao_formularios_steps.rb new file mode 100644 index 0000000000..dde911bf77 --- /dev/null +++ b/features/step_definitions/visualizacao_formularios_steps.rb @@ -0,0 +1,83 @@ +# frozen_string_literal: true + +# Passos gerados a partir de visualizacao_formularios.feature. Substitua os pendings pela automação real. + +Given('o participante {string} está autenticado') do |lucas| + pending('TODO: implementar passo: Given o participante "Lucas" está autenticado') +end + +And('Lucas está matriculado nas turmas:') do |table| + pending('TODO: implementar passo: And Lucas está matriculado nas turmas:') +end + +Given('Lucas acessa o menu {string}') do |formul_rios_para_responder| + pending('TODO: implementar passo: Given Lucas acessa o menu "Formulários para responder"') +end + +When('solicita visualizar os formulários pendentes') do + pending('TODO: implementar passo: When solicita visualizar os formulários pendentes') +end + +Then('a lista exibe {string} e {string} com suas respectivas turmas e prazos') do |avalia_o_final_1, feedback_1| + pending('TODO: implementar passo: Then a lista exibe "Avaliação Final 1" e "Feedback 1" com suas respectivas turmas e prazos') +end + +And('o formulário {string} não aparece por já estar respondido') do |avalia_o_final_2| + pending('TODO: implementar passo: And o formulário "Avaliação Final 2" não aparece por já estar respondido') +end + +Given('Lucas está na lista de formulários pendentes') do + pending('TODO: implementar passo: Given Lucas está na lista de formulários pendentes') +end + +When('seleciona {string} e clica em {string}') do |avalia_o_final_1, responder| + pending('TODO: implementar passo: When seleciona "Avaliação Final 1" e clica em "Responder"') +end + +Then('o sistema abre o formulário correspondente para preenchimento') do + pending('TODO: implementar passo: Then o sistema abre o formulário correspondente para preenchimento') +end + +Given('a participante {string} está autenticada e já respondeu todos os formulários de suas turmas') do |marina| + pending('TODO: implementar passo: Given a participante "Marina" está autenticada e já respondeu todos os formulários de suas turmas') +end + +When('ela acessa o menu {string}') do |formul_rios_para_responder| + pending('TODO: implementar passo: When ela acessa o menu "Formulários para responder"') +end + +Then('a lista aparece vazia') do + pending('TODO: implementar passo: Then a lista aparece vazia') +end + +And('o sistema exibe a mensagem {string}') do |voc_est_em_dia_aguarde_novos_formul_rios_das_suas_turmas_| + pending('TODO: implementar passo: And o sistema exibe a mensagem "Você está em dia! Aguarde novos formulários das suas turmas."') +end + +When('ocorre um erro de comunicação com o servidor') do + pending('TODO: implementar passo: When ocorre um erro de comunicação com o servidor') +end + +Then('o sistema informa {string}') do |n_o_foi_poss_vel_carregar_os_formul_rios_pendentes_tente_novamente_| + pending('TODO: implementar passo: Then o sistema informa "Não foi possível carregar os formulários pendentes. Tente novamente."') +end + +And('exibe o botão {string}') do |recarregar| + pending('TODO: implementar passo: And exibe o botão "Recarregar"') +end + +Given('Lucas vê o formulário {string} com prazo expirado') do |avalia_o_final_1| + pending('TODO: implementar passo: Given Lucas vê o formulário "Avaliação Final 1" com prazo expirado') +end + +When('tenta abrir o formulário') do + pending('TODO: implementar passo: When tenta abrir o formulário') +end + +Then('o sistema bloqueia o acesso') do + pending('TODO: implementar passo: Then o sistema bloqueia o acesso') +end + +And('mostra a mensagem {string}') do |este_formul_rio_n_o_est_mais_dispon_vel_para_resposta_| + pending('TODO: implementar passo: And mostra a mensagem "Este formulário não está mais disponível para resposta."') +end diff --git a/features/step_definitions/visualizacao_resultados_steps.rb b/features/step_definitions/visualizacao_resultados_steps.rb new file mode 100644 index 0000000000..af4aa4bcf7 --- /dev/null +++ b/features/step_definitions/visualizacao_resultados_steps.rb @@ -0,0 +1,59 @@ +# frozen_string_literal: true + +# Passos gerados a partir de visualizacao_resultados.feature. Substitua os pendings pela automação real. + +Given('o administrador {string} está autenticado') do |ana| + pending('TODO: implementar passo: Given o administrador "Ana" está autenticado') +end + +And('existem formulários criados por ela com indicadores:') do |table| + pending('TODO: implementar passo: And existem formulários criados por ela com indicadores:') +end + +Given('Ana acessa o menu {string}') do |resultados_dos_formul_rios| + pending('TODO: implementar passo: Given Ana acessa o menu "Resultados dos Formulários"') +end + +When('solicita visualizar os formulários criados') do + pending('TODO: implementar passo: When solicita visualizar os formulários criados') +end + +Then('a lista mostra cada formulário com título, status e número de respostas acumuladas') do + pending('TODO: implementar passo: Then a lista mostra cada formulário com título, status e número de respostas acumuladas') +end + +And('o botão {string} fica disponível para cada item') do |gerar_relat_rio| + pending('TODO: implementar passo: And o botão "Gerar relatório" fica disponível para cada item') +end + +Given('Ana está na tela de resultados') do + pending('TODO: implementar passo: Given Ana está na tela de resultados') +end + +When('aplica filtro por status {string}') do |ativo| + pending('TODO: implementar passo: When aplica filtro por status "Ativo"') +end + +Then('apenas formulários ativos permanecem na lista com suas contagens de respostas') do + pending('TODO: implementar passo: Then apenas formulários ativos permanecem na lista com suas contagens de respostas') +end + +And('ao clicar em {string} o sistema abre o fluxo de exportação correspondente') do |gerar_relat_rio| + pending('TODO: implementar passo: And ao clicar em "Gerar relatório" o sistema abre o fluxo de exportação correspondente') +end + +Given('o administrador {string} não criou formulários ainda') do |carlos| + pending('TODO: implementar passo: Given o administrador "Carlos" não criou formulários ainda') +end + +When('ele acessa o menu {string}') do |resultados_dos_formul_rios| + pending('TODO: implementar passo: When ele acessa o menu "Resultados dos Formulários"') +end + +Then('a lista aparece vazia') do + pending('TODO: implementar passo: Then a lista aparece vazia') +end + +And('o sistema exibe {string}') do |voc_ainda_n_o_tem_formul_rios_clique_em_novo_formul_rio_para_come_ar_| + pending('TODO: implementar passo: And o sistema exibe "Você ainda não tem formulários. Clique em \'Novo Formulário\' para começar."') +end diff --git a/features/step_definitions/visualizacao_templates_steps.rb b/features/step_definitions/visualizacao_templates_steps.rb new file mode 100644 index 0000000000..e576da4217 --- /dev/null +++ b/features/step_definitions/visualizacao_templates_steps.rb @@ -0,0 +1,79 @@ +# frozen_string_literal: true + +# Passos gerados a partir de visualizacao_templates.feature. Substitua os pendings pela automação real. + +Given('o administrador {string} está autenticado') do |ana| + pending('TODO: implementar passo: Given o administrador "Ana" está autenticado') +end + +And('existem os templates abaixo no sistema:') do |table| + pending('TODO: implementar passo: And existem os templates abaixo no sistema:') +end + +Given('Ana acessa o menu {string}') do |templates| + pending('TODO: implementar passo: Given Ana acessa o menu "Templates"') +end + +When('solicita visualizar seus modelos') do + pending('TODO: implementar passo: When solicita visualizar seus modelos') +end + +Then('a lista exibe {string} e {string}') do |cic0197, cic0200| + pending('TODO: implementar passo: Then a lista exibe "CIC0197" e "CIC0200"') +end + +And('templates criados por outros administradores não são mostrados') do + pending('TODO: implementar passo: And templates criados por outros administradores não são mostrados') +end + +Given('Ana está na lista de templates') do + pending('TODO: implementar passo: Given Ana está na lista de templates') +end + +When('seleciona {string} e clica em Editar') do |cic0197| + pending('TODO: implementar passo: When seleciona "CIC0197" e clica em Editar') +end + +Then('o sistema abre a tela de edição correspondendo ao template escolhido') do + pending('TODO: implementar passo: Then o sistema abre a tela de edição correspondendo ao template escolhido') +end + +When('expande as ações do template {string}') do |cic0200| + pending('TODO: implementar passo: When expande as ações do template "CIC0200"') +end + +Then('visualiza o botão de excluir disponível para modelos próprios') do + pending('TODO: implementar passo: Then visualiza o botão de excluir disponível para modelos próprios') +end + +Given('{string} está autenticado e não possui templates criados') do |carlos| + pending('TODO: implementar passo: Given "Carlos" está autenticado e não possui templates criados') +end + +When('acessa o menu {string}') do |templates| + pending('TODO: implementar passo: When acessa o menu "Templates"') +end + +Then('a lista aparece vazia') do + pending('TODO: implementar passo: Then a lista aparece vazia') +end + +And('o sistema exibe mensagem “Você ainda não criou templates. Clique em ‘Novo Template’ para começar.”') do + pending('TODO: implementar passo: And o sistema exibe mensagem “Você ainda não criou templates. Clique em ‘Novo Template’ para começar.”') +end + +When('ocorre erro de comunicação com o servidor') do + pending('TODO: implementar passo: When ocorre erro de comunicação com o servidor') +end + +Then('a lista não é carregada') do + pending('TODO: implementar passo: Then a lista não é carregada') +end + +And('uma mensagem informa “Não foi possível carregar seus templates, tente novamente mais tarde.”') do + pending('TODO: implementar passo: And uma mensagem informa “Não foi possível carregar seus templates, tente novamente mais tarde.”') +end + +And('o botão “Tentar novamente” fica disponível') do + pending('TODO: implementar passo: And o botão “Tentar novamente” fica disponível') +end diff --git a/features/support/env.rb b/features/support/env.rb new file mode 100644 index 0000000000..6e585a6ed0 --- /dev/null +++ b/features/support/env.rb @@ -0,0 +1,31 @@ +# frozen_string_literal: true + +ENV["RAILS_ENV"] ||= "test" + +require "simplecov" if ENV["COVERAGE"] +require File.expand_path("../../config/environment", __dir__) +abort("The Rails environment is running in production mode!") if Rails.env.production? + +require "cucumber/rails" +require "rspec/expectations" +require "database_cleaner/active_record" + +ActionController::Base.allow_rescue = false + +DatabaseCleaner.strategy = :transaction +Cucumber::Rails::Database.autorun_database_cleaner = false +Cucumber::Rails::Database.javascript_strategy = :truncation + +Before do + DatabaseCleaner.start +end + +After do + DatabaseCleaner.clean +end + +World(RSpec::Matchers) + +Capybara.default_driver = :rack_test +Capybara.javascript_driver = :selenium_chrome_headless +Capybara.server = :puma, { Silent: true } diff --git a/features/template_modal.feature b/features/template_modal.feature new file mode 100644 index 0000000000..43a784c288 --- /dev/null +++ b/features/template_modal.feature @@ -0,0 +1,61 @@ +Feature: Criar template de formulário + Eu como Administrador + Quero criar um template de formulário contendo as questões do formulário + A fim de gerar formulários de avaliações para avaliar o desempenho das turmas + + Background: + Given estou autenticado como "admin" + And estou com o modal de template aberto + + @happy_path + Scenario: Admin adiciona questão objetiva e questão aberta + When defino o nome do template como "Feedback 2024" + And adiciono a questão 1 com: + | tipo | Radio | + | texto | Como avalia o professor? | + | opcoes | Muito bom,Bom,Razoável,Ruim | + And adiciono a questão 2 com: + | tipo | Texto | + | texto | Sugestões para a disciplina | + And salvo o template pelo modal + Then devo ver a mensagem "Template salvo" + And devo ver duas questões listadas no preview + + @happy_path + Scenario: Admin adiciona nova questão através do botão + + When adiciono a questão 1 com: + | tipo | Texto | + | texto | Feedback geral | + And clico para adicionar nova questão + And adiciono a questão 2 com: + | tipo | Radio | + | texto | Qualidade do material | + | opcoes | Excelente,Boa,Ruim | + And salvo o template pelo modal + Then devo ver duas questões listadas no preview + + @sad_path + Scenario: Admin tenta salvar sem nome do template + When adiciono a questão 1 com: + | tipo | Texto | + | texto | Feedback geral | + And salvo o template pelo modal + Then devo ver a mensagem "Informe o nome do template" + And o modal deve permanecer aberto + + @sad_path + Scenario: Admin tenta salvar questão do tipo radio sem opções + When defino o nome do template como "Avaliação" + And adiciono a questão 1 com: + | tipo | Radio | + | texto | Qual sua satisfação? | + And salvo o template pelo modal + Then devo ver a mensagem "Inclua opções para perguntas objetivas" + And nenhuma questão deve ser adicionada + + @sad_path + Scenario: Usuário não admin abre o modal diretamente + Given estou autenticado como "aluno" + When estou com o modal de template aberto + Then devo ver a mensagem "Acesso restrito" + And o modal deve ser fechado automaticamente diff --git a/features/visualizacao_formularios.feature b/features/visualizacao_formularios.feature new file mode 100644 index 0000000000..ffa7eed1c4 --- /dev/null +++ b/features/visualizacao_formularios.feature @@ -0,0 +1,46 @@ +Feature: Visualizar formulários pendentes para responder + Para escolher qual questionário completar + Como participante de uma turma + Quero ver os formulários ainda não respondidos nas turmas em que estou matriculado + + Background: + Given o participante "Lucas" está autenticado + And Lucas está matriculado nas turmas: + | turma | formulário | status_resposta | + | CIC0197 | Avaliação Final 1 | não respondido | + | CIC0197 | Avaliação Final 2 | respondido | + | CIC0200 | Feedback 1 | não respondido | + + @happy_path + Scenario: Participante lista apenas formulários não respondidos + Given Lucas acessa o menu "Formulários para responder" + When solicita visualizar os formulários pendentes + Then a lista exibe "Avaliação Final 1" e "Feedback 1" com suas respectivas turmas e prazos + And o formulário "Avaliação Final 2" não aparece por já estar respondido + + @happy_path + Scenario: Participante inicia o preenchimento a partir da lista + Given Lucas está na lista de formulários pendentes + When seleciona "Avaliação Final 1" e clica em "Responder" + Then o sistema abre o formulário correspondente para preenchimento + + @sad_path + Scenario: Participante não possui formulários pendentes + Given a participante "Marina" está autenticada e já respondeu todos os formulários de suas turmas + When ela acessa o menu "Formulários para responder" + Then a lista aparece vazia + And o sistema exibe a mensagem "Você está em dia! Aguarde novos formulários das suas turmas." + + @sad_path + Scenario: Falha ao carregar formulários pendentes + Given Lucas acessa o menu "Formulários para responder" + When ocorre um erro de comunicação com o servidor + Then o sistema informa "Não foi possível carregar os formulários pendentes. Tente novamente." + And exibe o botão "Recarregar" + + @sad_path + Scenario: Participante tenta responder formulário que já venceu + Given Lucas vê o formulário "Avaliação Final 1" com prazo expirado + When tenta abrir o formulário + Then o sistema bloqueia o acesso + And mostra a mensagem "Este formulário não está mais disponível para resposta." diff --git a/features/visualizacao_resultados.feature b/features/visualizacao_resultados.feature new file mode 100644 index 0000000000..3407db9ffe --- /dev/null +++ b/features/visualizacao_resultados.feature @@ -0,0 +1,32 @@ +Feature: Visualização de resultados dos formulários + Para gerar relatórios com base nas respostas + Como administrador + Quero visualizar quantas respostas cada formulário já recebeu + + Background: + Given o administrador "Ana" está autenticado + And existem formulários criados por ela com indicadores: + | título | status | respostas | + | CIC0197 | ativo | 150 | + | CIC0200 | encerrado| 80 | + + @happy_path + Scenario: Administrador consulta resultados e vê contagem de respostas + Given Ana acessa o menu "Resultados dos Formulários" + When solicita visualizar os formulários criados + Then a lista mostra cada formulário com título, status e número de respostas acumuladas + And o botão "Gerar relatório" fica disponível para cada item + + @happy_path + Scenario: Administrador filtra resultados antes de gerar relatório + Given Ana está na tela de resultados + When aplica filtro por status "Ativo" + Then apenas formulários ativos permanecem na lista com suas contagens de respostas + And ao clicar em "Gerar relatório" o sistema abre o fluxo de exportação correspondente + + @sad_path + Scenario: Administrador não possui formulários + Given o administrador "Carlos" não criou formulários ainda + When ele acessa o menu "Resultados dos Formulários" + Then a lista aparece vazia + And o sistema exibe "Você ainda não tem formulários. Clique em 'Novo Formulário' para começar." diff --git a/features/visualizacao_templates.feature b/features/visualizacao_templates.feature new file mode 100644 index 0000000000..5fa2a3c26e --- /dev/null +++ b/features/visualizacao_templates.feature @@ -0,0 +1,46 @@ +Feature: Visualizar templates criados + Para gerenciar modelos próprios + Como administrador + Quero visualizar os templates que criei para poder editá-los ou removê-los + + Background: + Given o administrador "Ana" está autenticado + And existem os templates abaixo no sistema: + | título | criado_por | + | CIC0197 | Ana | + | CIC0200 | Ana | + | CIC0197 | Bruno | + + @happy_path + Scenario: Administrador lista apenas os templates que criou + Given Ana acessa o menu "Templates" + When solicita visualizar seus modelos + Then a lista exibe "CIC0197" e "CIC0200" + And templates criados por outros administradores não são mostrados + + @happy_path + Scenario: Administrador navega até a edição a partir da lista + Given Ana está na lista de templates + When seleciona "CIC0197" e clica em Editar + Then o sistema abre a tela de edição correspondendo ao template escolhido + + @happy_path + Scenario: Administrador acessa opção de exclusão a partir da lista + Given Ana está na lista de templates + When expande as ações do template "CIC0200" + Then visualiza o botão de excluir disponível para modelos próprios + + @sad_path + Scenario: Administrador sem templates vê mensagem orientativa + Given "Carlos" está autenticado e não possui templates criados + When acessa o menu "Templates" + Then a lista aparece vazia + And o sistema exibe mensagem “Você ainda não criou templates. Clique em ‘Novo Template’ para começar.” + + @sad_path + Scenario: Falha ao carregar lista de templates + Given Ana acessa o menu "Templates" + When ocorre erro de comunicação com o servidor + Then a lista não é carregada + And uma mensagem informa “Não foi possível carregar seus templates, tente novamente mais tarde.” + And o botão “Tentar novamente” fica disponível diff --git a/lib/assets/.keep b/lib/assets/.keep new file mode 100644 index 0000000000..e69de29bb2 diff --git a/lib/tasks/.keep b/lib/tasks/.keep new file mode 100644 index 0000000000..e69de29bb2 diff --git a/lib/tasks/cucumber.rake b/lib/tasks/cucumber.rake new file mode 100644 index 0000000000..4bee10a56e --- /dev/null +++ b/lib/tasks/cucumber.rake @@ -0,0 +1,19 @@ +# frozen_string_literal: true + +begin + require "cucumber/rake/task" + + namespace :cucumber do + Cucumber::Rake::Task.new(:ok) do |t| + t.cucumber_opts = ["--publish-quiet", "--format", "pretty"].join(" ") + end + + Cucumber::Rake::Task.new(:wip) do |t| + t.cucumber_opts = ["--tags", "@wip", "--wip"].join(" ") + end + end + + task default: "cucumber:ok" +rescue LoadError => e + warn "Cucumber is not available: #{e.message}" +end diff --git a/log/.keep b/log/.keep new file mode 100644 index 0000000000..e69de29bb2 diff --git a/public/404.html b/public/404.html new file mode 100644 index 0000000000..c5cb97f4e5 --- /dev/null +++ b/public/404.html @@ -0,0 +1,16 @@ + + + + Página não encontrada + + + + +

404

+

A página solicitada não existe.

+ Voltar para a aplicação + + diff --git a/public/422.html b/public/422.html new file mode 100644 index 0000000000..851047796c --- /dev/null +++ b/public/422.html @@ -0,0 +1,14 @@ + + + + Erro de processamento + + + + +

422

+

Não foi possível processar a solicitação.

+ + diff --git a/public/500.html b/public/500.html new file mode 100644 index 0000000000..2dd90b32f6 --- /dev/null +++ b/public/500.html @@ -0,0 +1,14 @@ + + + + Erro interno + + + + +

500

+

Algo inesperado aconteceu. Tente novamente em instantes.

+ + diff --git a/public/robots.txt b/public/robots.txt new file mode 100644 index 0000000000..b6789723c7 --- /dev/null +++ b/public/robots.txt @@ -0,0 +1,4 @@ +# See https://www.robotstxt.org/robotstxt.html for documentation on how to use the robots.txt file +# To ban all spiders from the site, uncomment the next two lines: +# User-agent: * +# Disallow: / diff --git a/storage/.keep b/storage/.keep new file mode 100644 index 0000000000..e69de29bb2 diff --git a/test/channels/application_cable/connection_test.rb b/test/channels/application_cable/connection_test.rb new file mode 100644 index 0000000000..cae4c1e5cc --- /dev/null +++ b/test/channels/application_cable/connection_test.rb @@ -0,0 +1,9 @@ +require "test_helper" + +class ApplicationCable::ConnectionTest < ActionCable::Connection::TestCase + # test "connects with cookies" do + # cookies.signed[:user_id] = 42 + # connect + # assert_equal connection.user_id, "42" + # end +end diff --git a/test/controllers/.keep b/test/controllers/.keep new file mode 100644 index 0000000000..e69de29bb2 diff --git a/test/mailers/.keep b/test/mailers/.keep new file mode 100644 index 0000000000..e69de29bb2 diff --git a/test/models/.keep b/test/models/.keep new file mode 100644 index 0000000000..e69de29bb2 diff --git a/test/system/.keep b/test/system/.keep new file mode 100644 index 0000000000..e69de29bb2 diff --git a/test/test_helper.rb b/test/test_helper.rb new file mode 100644 index 0000000000..0d27aa6a4b --- /dev/null +++ b/test/test_helper.rb @@ -0,0 +1,9 @@ +ENV["RAILS_ENV"] ||= "test" +require_relative "../config/environment" +require "rails/test_help" + +class ActiveSupport::TestCase + parallelize(workers: :number_of_processors, with: :threads) + # Setup all fixtures in test/fixtures/*.yml for all tests in alphabetical order. + fixtures :all if Dir.exist?(Rails.root.join("test", "fixtures")) +end diff --git a/tmp/.keep b/tmp/.keep new file mode 100644 index 0000000000..e69de29bb2 diff --git a/tmp/cache/assets/sprockets/.keep b/tmp/cache/assets/sprockets/.keep new file mode 100644 index 0000000000..e69de29bb2 diff --git a/tmp/cache/assets/sprockets/v4.0.0/-K/-Km-HFTLqFNM9xWQCjJE6vORN17CEjSZqpsHqWektuk.cache b/tmp/cache/assets/sprockets/v4.0.0/-K/-Km-HFTLqFNM9xWQCjJE6vORN17CEjSZqpsHqWektuk.cache new file mode 100644 index 0000000000..6eb3acf626 --- /dev/null +++ b/tmp/cache/assets/sprockets/v4.0.0/-K/-Km-HFTLqFNM9xWQCjJE6vORN17CEjSZqpsHqWektuk.cache @@ -0,0 +1 @@ +I"/bundle/ruby/3.3.0/gems/stimulus-rails-1.3.4/app/assets/javascripts/stimulus-loading.js?type=application/javascript&pipeline=self&id=a1240e12c1902d21e5b11a16269d64e6960c6963f370078959a2f51396947bfb:ET \ No newline at end of file diff --git a/tmp/cache/assets/sprockets/v4.0.0/-M/-Ma6pMbPtMHULXOZtuyg-zOIyFrBcH3ewzuIu2-Gvvg.cache b/tmp/cache/assets/sprockets/v4.0.0/-M/-Ma6pMbPtMHULXOZtuyg-zOIyFrBcH3ewzuIu2-Gvvg.cache new file mode 100644 index 0000000000..54c289dd70 Binary files /dev/null and b/tmp/cache/assets/sprockets/v4.0.0/-M/-Ma6pMbPtMHULXOZtuyg-zOIyFrBcH3ewzuIu2-Gvvg.cache differ diff --git a/tmp/cache/assets/sprockets/v4.0.0/-b/-bPc_t5VoAYKs6_fDhQ8EM0HM3dq1DrYWkZtPDuTtK0.cache b/tmp/cache/assets/sprockets/v4.0.0/-b/-bPc_t5VoAYKs6_fDhQ8EM0HM3dq1DrYWkZtPDuTtK0.cache new file mode 100644 index 0000000000..c4557ca474 Binary files /dev/null and b/tmp/cache/assets/sprockets/v4.0.0/-b/-bPc_t5VoAYKs6_fDhQ8EM0HM3dq1DrYWkZtPDuTtK0.cache differ diff --git a/tmp/cache/assets/sprockets/v4.0.0/-g/-gGRAhGvcpBO56hGpsztiNa9QxlpTJa-pD2Huu-psN8.cache b/tmp/cache/assets/sprockets/v4.0.0/-g/-gGRAhGvcpBO56hGpsztiNa9QxlpTJa-pD2Huu-psN8.cache new file mode 100644 index 0000000000..d49419c1e3 --- /dev/null +++ b/tmp/cache/assets/sprockets/v4.0.0/-g/-gGRAhGvcpBO56hGpsztiNa9QxlpTJa-pD2Huu-psN8.cache @@ -0,0 +1 @@ +I"/bundle/ruby/3.3.0/gems/activestorage-7.1.6/app/assets/javascripts/activestorage.esm.js?type=application/javascript&pipeline=self&id=7fca3b64029110fe5a1a570eee3ca4b71c1bfae668329a8e34e69665e33d8aae:ET \ No newline at end of file diff --git a/tmp/cache/assets/sprockets/v4.0.0/0Y/0YRhKTRIKVBVnlu3XMiuSPtqnWyqEoHa2XSeXT4Nh3A.cache b/tmp/cache/assets/sprockets/v4.0.0/0Y/0YRhKTRIKVBVnlu3XMiuSPtqnWyqEoHa2XSeXT4Nh3A.cache new file mode 100644 index 0000000000..a55b15bbfa Binary files /dev/null and b/tmp/cache/assets/sprockets/v4.0.0/0Y/0YRhKTRIKVBVnlu3XMiuSPtqnWyqEoHa2XSeXT4Nh3A.cache differ diff --git a/tmp/cache/assets/sprockets/v4.0.0/2G/2GCtXo5OClxZZbaNyNAfsBhRMxG-7xVx0eTrxGtZTsk.cache b/tmp/cache/assets/sprockets/v4.0.0/2G/2GCtXo5OClxZZbaNyNAfsBhRMxG-7xVx0eTrxGtZTsk.cache new file mode 100644 index 0000000000..dd21d90eeb --- /dev/null +++ b/tmp/cache/assets/sprockets/v4.0.0/2G/2GCtXo5OClxZZbaNyNAfsBhRMxG-7xVx0eTrxGtZTsk.cache @@ -0,0 +1,3 @@ +[o:Set: +@hash} +I"environment-version:ETTI"environment-paths;TTI"rails-env;TTI"Zprocessors:type=application/javascript&file_type=application/javascript&pipeline=self;TTI"]file-digest:///bundle/ruby/3.3.0/gems/turbo-rails-2.0.20/app/assets/javascripts/turbo.js;TTF \ No newline at end of file diff --git a/tmp/cache/assets/sprockets/v4.0.0/3v/3vxjWvNYEdOy4REKip4ASvnz6_o3t05URk5I1PwzERU.cache b/tmp/cache/assets/sprockets/v4.0.0/3v/3vxjWvNYEdOy4REKip4ASvnz6_o3t05URk5I1PwzERU.cache new file mode 100644 index 0000000000..48d839a74b Binary files /dev/null and b/tmp/cache/assets/sprockets/v4.0.0/3v/3vxjWvNYEdOy4REKip4ASvnz6_o3t05URk5I1PwzERU.cache differ diff --git a/tmp/cache/assets/sprockets/v4.0.0/4-/4-QzxRgzg_WtUZrgo2SDFHcBZu5KZDe0bUTF4r5cXsU.cache b/tmp/cache/assets/sprockets/v4.0.0/4-/4-QzxRgzg_WtUZrgo2SDFHcBZu5KZDe0bUTF4r5cXsU.cache new file mode 100644 index 0000000000..419da84a5b --- /dev/null +++ b/tmp/cache/assets/sprockets/v4.0.0/4-/4-QzxRgzg_WtUZrgo2SDFHcBZu5KZDe0bUTF4r5cXsU.cache @@ -0,0 +1,2 @@ +[o:Set: +@hash} I"environment-version:ETTI"environment-paths;TTI"rails-env;TTI"0processors:type=text/css&file_type=text/css;TTI"9file-digest://app/assets/stylesheets/application.css;TTI">processors:type=text/css&file_type=text/css&pipeline=self;TTI")file-digest://app/assets/stylesheets;TTF \ No newline at end of file diff --git a/tmp/cache/assets/sprockets/v4.0.0/42/42GHdzgGBkINBCqrEShG6mKYE44nIZXXB03I6csC11o.cache b/tmp/cache/assets/sprockets/v4.0.0/42/42GHdzgGBkINBCqrEShG6mKYE44nIZXXB03I6csC11o.cache new file mode 100644 index 0000000000..f006175c80 Binary files /dev/null and b/tmp/cache/assets/sprockets/v4.0.0/42/42GHdzgGBkINBCqrEShG6mKYE44nIZXXB03I6csC11o.cache differ diff --git a/tmp/cache/assets/sprockets/v4.0.0/4G/4GbwSqFyKfJH-17oI2W_KbR90Db531LRaBLSuSEeQ0E.cache b/tmp/cache/assets/sprockets/v4.0.0/4G/4GbwSqFyKfJH-17oI2W_KbR90Db531LRaBLSuSEeQ0E.cache new file mode 100644 index 0000000000..bfbbfc15c3 Binary files /dev/null and b/tmp/cache/assets/sprockets/v4.0.0/4G/4GbwSqFyKfJH-17oI2W_KbR90Db531LRaBLSuSEeQ0E.cache differ diff --git a/tmp/cache/assets/sprockets/v4.0.0/4N/4NopJuW8KRYFXAP6UkxI49kaeA06hz_wwgTGb-SRN5o.cache b/tmp/cache/assets/sprockets/v4.0.0/4N/4NopJuW8KRYFXAP6UkxI49kaeA06hz_wwgTGb-SRN5o.cache new file mode 100644 index 0000000000..2800ad3b2e --- /dev/null +++ b/tmp/cache/assets/sprockets/v4.0.0/4N/4NopJuW8KRYFXAP6UkxI49kaeA06hz_wwgTGb-SRN5o.cache @@ -0,0 +1 @@ +"%Bșo$'AdLxRU \ No newline at end of file diff --git a/tmp/cache/assets/sprockets/v4.0.0/5V/5V2VtAh7h1pS9frjk7XNNAHyhcPRD2BXYjmhgjAR-hw.cache b/tmp/cache/assets/sprockets/v4.0.0/5V/5V2VtAh7h1pS9frjk7XNNAHyhcPRD2BXYjmhgjAR-hw.cache new file mode 100644 index 0000000000..555587cb3f --- /dev/null +++ b/tmp/cache/assets/sprockets/v4.0.0/5V/5V2VtAh7h1pS9frjk7XNNAHyhcPRD2BXYjmhgjAR-hw.cache @@ -0,0 +1 @@ +I"/bundle/ruby/3.3.0/gems/actioncable-7.1.6/app/assets/javascripts/actioncable.esm.js?type=application/javascript&id=4bfdc33fa00ce45a605d382480889df5ca5f3193aeaa1afc1cb4ae3ea0802d48:ET \ No newline at end of file diff --git a/tmp/cache/assets/sprockets/v4.0.0/69/69SEK282hfIMx0hJ5wnH7Sj_PL1NohKV2tTzeDRkUcQ.cache b/tmp/cache/assets/sprockets/v4.0.0/69/69SEK282hfIMx0hJ5wnH7Sj_PL1NohKV2tTzeDRkUcQ.cache new file mode 100644 index 0000000000..532448b7d4 --- /dev/null +++ b/tmp/cache/assets/sprockets/v4.0.0/69/69SEK282hfIMx0hJ5wnH7Sj_PL1NohKV2tTzeDRkUcQ.cache @@ -0,0 +1 @@ +"%6՞~4_P q6t4Y \ No newline at end of file diff --git a/tmp/cache/assets/sprockets/v4.0.0/6P/6P_UYZrKxzbldQqgoDgtosx5hFERwAbCkW1Ed0f_P_g.cache b/tmp/cache/assets/sprockets/v4.0.0/6P/6P_UYZrKxzbldQqgoDgtosx5hFERwAbCkW1Ed0f_P_g.cache new file mode 100644 index 0000000000..e174eec2f1 Binary files /dev/null and b/tmp/cache/assets/sprockets/v4.0.0/6P/6P_UYZrKxzbldQqgoDgtosx5hFERwAbCkW1Ed0f_P_g.cache differ diff --git a/tmp/cache/assets/sprockets/v4.0.0/6T/6TesX44NpGh_-ngdsuXtN_oK1EQqtLnJ9vGYyOj-QfA.cache b/tmp/cache/assets/sprockets/v4.0.0/6T/6TesX44NpGh_-ngdsuXtN_oK1EQqtLnJ9vGYyOj-QfA.cache new file mode 100644 index 0000000000..b43cc2c3ca --- /dev/null +++ b/tmp/cache/assets/sprockets/v4.0.0/6T/6TesX44NpGh_-ngdsuXtN_oK1EQqtLnJ9vGYyOj-QfA.cache @@ -0,0 +1 @@ +I"}app/assets/config/manifest.js?type=application/javascript&id=0d2db8c040c1545a61d027a55f3a0fdde8e671877745e7f2fea0206f800fc8d5:ET \ No newline at end of file diff --git a/tmp/cache/assets/sprockets/v4.0.0/6Y/6Y6HeqP93KJAbFvcjOB4aoQ2HqVY_erHdWH2jIQDRyk.cache b/tmp/cache/assets/sprockets/v4.0.0/6Y/6Y6HeqP93KJAbFvcjOB4aoQ2HqVY_erHdWH2jIQDRyk.cache new file mode 100644 index 0000000000..5da7bf2619 --- /dev/null +++ b/tmp/cache/assets/sprockets/v4.0.0/6Y/6Y6HeqP93KJAbFvcjOB4aoQ2HqVY_erHdWH2jIQDRyk.cache @@ -0,0 +1,2 @@ +[o:Set: +@hash} I"environment-version:ETTI"environment-paths;TTI"rails-env;TTI"Lprocessors:type=application/javascript&file_type=application/javascript;TTI"dfile-digest:///bundle/ruby/3.3.0/gems/actiontext-7.1.6/app/assets/javascripts/actiontext.esm.js;TTI"Zprocessors:type=application/javascript&file_type=application/javascript&pipeline=self;TTF \ No newline at end of file diff --git a/tmp/cache/assets/sprockets/v4.0.0/7u/7u2FFzonwq2a0NeOUd3gi_OiwYci6Fa0ewo9QyutGBg.cache b/tmp/cache/assets/sprockets/v4.0.0/7u/7u2FFzonwq2a0NeOUd3gi_OiwYci6Fa0ewo9QyutGBg.cache new file mode 100644 index 0000000000..07bccb6d61 Binary files /dev/null and b/tmp/cache/assets/sprockets/v4.0.0/7u/7u2FFzonwq2a0NeOUd3gi_OiwYci6Fa0ewo9QyutGBg.cache differ diff --git a/tmp/cache/assets/sprockets/v4.0.0/89/89FbIkWz-vXo2XfpLcpBGz8KRRDs12VOFjyZpJ7ERnw.cache b/tmp/cache/assets/sprockets/v4.0.0/89/89FbIkWz-vXo2XfpLcpBGz8KRRDs12VOFjyZpJ7ERnw.cache new file mode 100644 index 0000000000..99c1ed4d7f --- /dev/null +++ b/tmp/cache/assets/sprockets/v4.0.0/89/89FbIkWz-vXo2XfpLcpBGz8KRRDs12VOFjyZpJ7ERnw.cache @@ -0,0 +1,2 @@ +[o:Set: +@hash} I"environment-version:ETTI"environment-paths;TTI"rails-env;TTI">processors:type=text/css&file_type=text/css&pipeline=self;TTI"9file-digest://app/assets/stylesheets/application.css;TTI")file-digest://app/assets/stylesheets;TTF \ No newline at end of file diff --git a/tmp/cache/assets/sprockets/v4.0.0/8W/8W4gWjFb_TOpmmlBaJtJK5RbUSUbxaYNbzK-kDAE9zM.cache b/tmp/cache/assets/sprockets/v4.0.0/8W/8W4gWjFb_TOpmmlBaJtJK5RbUSUbxaYNbzK-kDAE9zM.cache new file mode 100644 index 0000000000..eee471bea5 Binary files /dev/null and b/tmp/cache/assets/sprockets/v4.0.0/8W/8W4gWjFb_TOpmmlBaJtJK5RbUSUbxaYNbzK-kDAE9zM.cache differ diff --git a/tmp/cache/assets/sprockets/v4.0.0/8v/8vP2RnuSND0tk5lOhoCMCy_NFjmA5G7GNt8CeR2IIZY.cache b/tmp/cache/assets/sprockets/v4.0.0/8v/8vP2RnuSND0tk5lOhoCMCy_NFjmA5G7GNt8CeR2IIZY.cache new file mode 100644 index 0000000000..0dd098fe1a --- /dev/null +++ b/tmp/cache/assets/sprockets/v4.0.0/8v/8vP2RnuSND0tk5lOhoCMCy_NFjmA5G7GNt8CeR2IIZY.cache @@ -0,0 +1 @@ +I"/bundle/ruby/3.3.0/gems/turbo-rails-2.0.20/app/assets/javascripts/turbo.min.js.map?type=application/js-sourcemap+json&id=b80a5361933ede26fca6da68d551e80e9dea970b8d97c8c2fce39b90c46a8f4f:ET \ No newline at end of file diff --git a/tmp/cache/assets/sprockets/v4.0.0/9P/9PWUnS9Xwvkv3hpL3oOpmg_adbfvvzaLDskGl7TZHXY.cache b/tmp/cache/assets/sprockets/v4.0.0/9P/9PWUnS9Xwvkv3hpL3oOpmg_adbfvvzaLDskGl7TZHXY.cache new file mode 100644 index 0000000000..979e913a78 Binary files /dev/null and b/tmp/cache/assets/sprockets/v4.0.0/9P/9PWUnS9Xwvkv3hpL3oOpmg_adbfvvzaLDskGl7TZHXY.cache differ diff --git a/tmp/cache/assets/sprockets/v4.0.0/AY/AYUeC3RQLA5qzhOewHBGLm3I2AQlK6pI1vzaa9BigME.cache b/tmp/cache/assets/sprockets/v4.0.0/AY/AYUeC3RQLA5qzhOewHBGLm3I2AQlK6pI1vzaa9BigME.cache new file mode 100644 index 0000000000..dc0393bf69 Binary files /dev/null and b/tmp/cache/assets/sprockets/v4.0.0/AY/AYUeC3RQLA5qzhOewHBGLm3I2AQlK6pI1vzaa9BigME.cache differ diff --git a/tmp/cache/assets/sprockets/v4.0.0/BR/BRgvb9yOz23W_AOEtxct63m9q5oD0g3O3kSMRVRNGGU.cache b/tmp/cache/assets/sprockets/v4.0.0/BR/BRgvb9yOz23W_AOEtxct63m9q5oD0g3O3kSMRVRNGGU.cache new file mode 100644 index 0000000000..a396ce0650 --- /dev/null +++ b/tmp/cache/assets/sprockets/v4.0.0/BR/BRgvb9yOz23W_AOEtxct63m9q5oD0g3O3kSMRVRNGGU.cache @@ -0,0 +1 @@ +I"/bundle/ruby/3.3.0/gems/activestorage-7.1.6/app/assets/javascripts/activestorage.js?type=application/javascript&pipeline=self&id=8c8282a96273712573930a578d95c1a28e0019f672b7056c7c4f6314690267e1:ET \ No newline at end of file diff --git a/tmp/cache/assets/sprockets/v4.0.0/CE/CEiqfhGLJ5gpOCxxDEL5Mt66smGaHURU06Sp9t1CQhU.cache b/tmp/cache/assets/sprockets/v4.0.0/CE/CEiqfhGLJ5gpOCxxDEL5Mt66smGaHURU06Sp9t1CQhU.cache new file mode 100644 index 0000000000..5af9e721aa --- /dev/null +++ b/tmp/cache/assets/sprockets/v4.0.0/CE/CEiqfhGLJ5gpOCxxDEL5Mt66smGaHURU06Sp9t1CQhU.cache @@ -0,0 +1,2 @@ +[o:Set: +@hash} I"environment-version:ETTI"environment-paths;TTI"rails-env;TTI"Lprocessors:type=application/javascript&file_type=application/javascript;TTI"ffile-digest:///bundle/ruby/3.3.0/gems/activestorage-7.1.6/app/assets/javascripts/activestorage.js;TTI"Zprocessors:type=application/javascript&file_type=application/javascript&pipeline=self;TTF \ No newline at end of file diff --git a/tmp/cache/assets/sprockets/v4.0.0/Cw/CwzylfdYT6HTyq0-a3xgggLk19KuNlXR_feC_ViYwfo.cache b/tmp/cache/assets/sprockets/v4.0.0/Cw/CwzylfdYT6HTyq0-a3xgggLk19KuNlXR_feC_ViYwfo.cache new file mode 100644 index 0000000000..6e25414584 Binary files /dev/null and b/tmp/cache/assets/sprockets/v4.0.0/Cw/CwzylfdYT6HTyq0-a3xgggLk19KuNlXR_feC_ViYwfo.cache differ diff --git a/tmp/cache/assets/sprockets/v4.0.0/DD/DDHUaRqbcslBK5UX33KIW2czkk7S_nrgZrO8k01jYAw.cache b/tmp/cache/assets/sprockets/v4.0.0/DD/DDHUaRqbcslBK5UX33KIW2czkk7S_nrgZrO8k01jYAw.cache new file mode 100644 index 0000000000..c8d7263093 Binary files /dev/null and b/tmp/cache/assets/sprockets/v4.0.0/DD/DDHUaRqbcslBK5UX33KIW2czkk7S_nrgZrO8k01jYAw.cache differ diff --git a/tmp/cache/assets/sprockets/v4.0.0/DX/DXVdQpBgo308M5C1-ps0y-TYMdgO_LNibMbW8gkcLyQ.cache b/tmp/cache/assets/sprockets/v4.0.0/DX/DXVdQpBgo308M5C1-ps0y-TYMdgO_LNibMbW8gkcLyQ.cache new file mode 100644 index 0000000000..aa3cb0de0c --- /dev/null +++ b/tmp/cache/assets/sprockets/v4.0.0/DX/DXVdQpBgo308M5C1-ps0y-TYMdgO_LNibMbW8gkcLyQ.cache @@ -0,0 +1,2 @@ +[o:Set: +@hash} I"environment-version:ETTI"environment-paths;TTI"rails-env;TTI"Lprocessors:type=application/javascript&file_type=application/javascript;TTI"ffile-digest:///bundle/ruby/3.3.0/gems/actioncable-7.1.6/app/assets/javascripts/actioncable.esm.js;TTI"Zprocessors:type=application/javascript&file_type=application/javascript&pipeline=self;TTF \ No newline at end of file diff --git a/tmp/cache/assets/sprockets/v4.0.0/FA/FAe-zAuXzNZ6gL2b4HmzU27K-z0Ue9de8u2O-J5uR-w.cache b/tmp/cache/assets/sprockets/v4.0.0/FA/FAe-zAuXzNZ6gL2b4HmzU27K-z0Ue9de8u2O-J5uR-w.cache new file mode 100644 index 0000000000..09b24ff682 --- /dev/null +++ b/tmp/cache/assets/sprockets/v4.0.0/FA/FAe-zAuXzNZ6gL2b4HmzU27K-z0Ue9de8u2O-J5uR-w.cache @@ -0,0 +1 @@ +I"/bundle/ruby/3.3.0/gems/actiontext-7.1.6/app/assets/javascripts/actiontext.esm.js?type=application/javascript&pipeline=self&id=51b6a3bb813e47b5a9a24f14fcbc4fa27a48ef031656e3913a0108849376272d:ET \ No newline at end of file diff --git a/tmp/cache/assets/sprockets/v4.0.0/F_/F_2vGd0TM5Jt-DeA2tLI3_-ePXpocLT7zeSgVbDmVx8.cache b/tmp/cache/assets/sprockets/v4.0.0/F_/F_2vGd0TM5Jt-DeA2tLI3_-ePXpocLT7zeSgVbDmVx8.cache new file mode 100644 index 0000000000..9d5cf8129e --- /dev/null +++ b/tmp/cache/assets/sprockets/v4.0.0/F_/F_2vGd0TM5Jt-DeA2tLI3_-ePXpocLT7zeSgVbDmVx8.cache @@ -0,0 +1 @@ +I"/bundle/ruby/3.3.0/gems/turbo-rails-2.0.20/app/assets/javascripts/turbo.js?type=application/javascript&pipeline=self&id=08aaa55ae3f47ffb3f8186373458570be24c4fea64d284ada486df56501c5aef:ET \ No newline at end of file diff --git a/tmp/cache/assets/sprockets/v4.0.0/GT/GTihnxIsN8pOEmvsM7qXf5iyItM1hw3rzIzQa356rPE.cache b/tmp/cache/assets/sprockets/v4.0.0/GT/GTihnxIsN8pOEmvsM7qXf5iyItM1hw3rzIzQa356rPE.cache new file mode 100644 index 0000000000..39e90a8b98 --- /dev/null +++ b/tmp/cache/assets/sprockets/v4.0.0/GT/GTihnxIsN8pOEmvsM7qXf5iyItM1hw3rzIzQa356rPE.cache @@ -0,0 +1,3 @@ +[o:Set: +@hash} +I"environment-version:ETTI"environment-paths;TTI"rails-env;TTI"Zprocessors:type=application/javascript&file_type=application/javascript&pipeline=self;TTI"mfile-digest:///bundle/ruby/3.3.0/gems/stimulus-rails-1.3.4/app/assets/javascripts/stimulus-autoloader.js;TTF \ No newline at end of file diff --git a/tmp/cache/assets/sprockets/v4.0.0/HH/HHWZoJqXMDRcS9N7PC_100DQFa0ejHWxi29QqwPZ7rA.cache b/tmp/cache/assets/sprockets/v4.0.0/HH/HHWZoJqXMDRcS9N7PC_100DQFa0ejHWxi29QqwPZ7rA.cache new file mode 100644 index 0000000000..c0a28bd0d7 Binary files /dev/null and b/tmp/cache/assets/sprockets/v4.0.0/HH/HHWZoJqXMDRcS9N7PC_100DQFa0ejHWxi29QqwPZ7rA.cache differ diff --git a/tmp/cache/assets/sprockets/v4.0.0/ID/IDXlUUIDkUc3E1tgOauYggSHmPq3_1cubr-kx7gehvQ.cache b/tmp/cache/assets/sprockets/v4.0.0/ID/IDXlUUIDkUc3E1tgOauYggSHmPq3_1cubr-kx7gehvQ.cache new file mode 100644 index 0000000000..69efe1b287 --- /dev/null +++ b/tmp/cache/assets/sprockets/v4.0.0/ID/IDXlUUIDkUc3E1tgOauYggSHmPq3_1cubr-kx7gehvQ.cache @@ -0,0 +1 @@ +I"/bundle/ruby/3.3.0/gems/actiontext-7.1.6/app/assets/stylesheets/trix.css?type=text/css&pipeline=self&id=8cda936b6342cb73294c589cc9e79dbf9b0581e3eeb5cc5c05564d39c63c43b4:ET \ No newline at end of file diff --git a/tmp/cache/assets/sprockets/v4.0.0/If/IfJtkKxBFbUbkDrgQRvaFlzSsV2WhwznEHaqoKipwqA.cache b/tmp/cache/assets/sprockets/v4.0.0/If/IfJtkKxBFbUbkDrgQRvaFlzSsV2WhwznEHaqoKipwqA.cache new file mode 100644 index 0000000000..bdbf178a39 --- /dev/null +++ b/tmp/cache/assets/sprockets/v4.0.0/If/IfJtkKxBFbUbkDrgQRvaFlzSsV2WhwznEHaqoKipwqA.cache @@ -0,0 +1 @@ +I"/bundle/ruby/3.3.0/gems/stimulus-rails-1.3.4/app/assets/javascripts/stimulus-autoloader.js?type=application/javascript&id=925005be9980664e053419d600ce43f9a9ed644244e83a0e0075d420681bf85d:ET \ No newline at end of file diff --git a/tmp/cache/assets/sprockets/v4.0.0/Ik/Ikhy1ASjfGkPe8svkEUcb3HdX-qofv2SJHJQkIcn9dM.cache b/tmp/cache/assets/sprockets/v4.0.0/Ik/Ikhy1ASjfGkPe8svkEUcb3HdX-qofv2SJHJQkIcn9dM.cache new file mode 100644 index 0000000000..7d9734e72c --- /dev/null +++ b/tmp/cache/assets/sprockets/v4.0.0/Ik/Ikhy1ASjfGkPe8svkEUcb3HdX-qofv2SJHJQkIcn9dM.cache @@ -0,0 +1 @@ +"%>Hs`IA_b5I%&y0/5 \ No newline at end of file diff --git a/tmp/cache/assets/sprockets/v4.0.0/Iy/Iy_D9ZLsrUsGRZLPxdhS3oWlYIiu0QpxpPSwEVfjZek.cache b/tmp/cache/assets/sprockets/v4.0.0/Iy/Iy_D9ZLsrUsGRZLPxdhS3oWlYIiu0QpxpPSwEVfjZek.cache new file mode 100644 index 0000000000..7bba788fcb --- /dev/null +++ b/tmp/cache/assets/sprockets/v4.0.0/Iy/Iy_D9ZLsrUsGRZLPxdhS3oWlYIiu0QpxpPSwEVfjZek.cache @@ -0,0 +1 @@ +I"}app/assets/stylesheets/application.css?type=text/css&id=a1fa8e21c27dc960c6bffbe02b41126bc20de89f9a0de2a6e5915ed35500efc0:ET \ No newline at end of file diff --git a/tmp/cache/assets/sprockets/v4.0.0/J9/J92DDAvcnHGrr5NsleKg6UGAT2aL9a9iZimImK-fJ6k.cache b/tmp/cache/assets/sprockets/v4.0.0/J9/J92DDAvcnHGrr5NsleKg6UGAT2aL9a9iZimImK-fJ6k.cache new file mode 100644 index 0000000000..13fe6076d3 --- /dev/null +++ b/tmp/cache/assets/sprockets/v4.0.0/J9/J92DDAvcnHGrr5NsleKg6UGAT2aL9a9iZimImK-fJ6k.cache @@ -0,0 +1 @@ +"%8Hj~0p%CXZwmD \ No newline at end of file diff --git a/tmp/cache/assets/sprockets/v4.0.0/JU/JUtyUlNEEDLUEE2yjHwesQVFs2vZIjWSQHr4T8GKGcA.cache b/tmp/cache/assets/sprockets/v4.0.0/JU/JUtyUlNEEDLUEE2yjHwesQVFs2vZIjWSQHr4T8GKGcA.cache new file mode 100644 index 0000000000..9968a1a48f --- /dev/null +++ b/tmp/cache/assets/sprockets/v4.0.0/JU/JUtyUlNEEDLUEE2yjHwesQVFs2vZIjWSQHr4T8GKGcA.cache @@ -0,0 +1 @@ +"%3W9d XD,M \ No newline at end of file diff --git a/tmp/cache/assets/sprockets/v4.0.0/K8/K832wQ3uAQI1CVxqoE3xjBbq9Cc4zsicBVYZiluS0xA.cache b/tmp/cache/assets/sprockets/v4.0.0/K8/K832wQ3uAQI1CVxqoE3xjBbq9Cc4zsicBVYZiluS0xA.cache new file mode 100644 index 0000000000..c71386ce77 Binary files /dev/null and b/tmp/cache/assets/sprockets/v4.0.0/K8/K832wQ3uAQI1CVxqoE3xjBbq9Cc4zsicBVYZiluS0xA.cache differ diff --git a/tmp/cache/assets/sprockets/v4.0.0/KA/KAK4-8rKSH6hsy4M_MuL42vWgDzAUBC94feBRgKNrcI.cache b/tmp/cache/assets/sprockets/v4.0.0/KA/KAK4-8rKSH6hsy4M_MuL42vWgDzAUBC94feBRgKNrcI.cache new file mode 100644 index 0000000000..06f7cddf11 Binary files /dev/null and b/tmp/cache/assets/sprockets/v4.0.0/KA/KAK4-8rKSH6hsy4M_MuL42vWgDzAUBC94feBRgKNrcI.cache differ diff --git a/tmp/cache/assets/sprockets/v4.0.0/KC/KCUp0ZeTqGKv5Uwq-KfD5W48FLwKIhcMplxDEDN2bqw.cache b/tmp/cache/assets/sprockets/v4.0.0/KC/KCUp0ZeTqGKv5Uwq-KfD5W48FLwKIhcMplxDEDN2bqw.cache new file mode 100644 index 0000000000..c219941aeb Binary files /dev/null and b/tmp/cache/assets/sprockets/v4.0.0/KC/KCUp0ZeTqGKv5Uwq-KfD5W48FLwKIhcMplxDEDN2bqw.cache differ diff --git a/tmp/cache/assets/sprockets/v4.0.0/Kd/KdgvZQS-RwW_H_8gF_shSvpbpINOW0kNteoY8pacQo8.cache b/tmp/cache/assets/sprockets/v4.0.0/Kd/KdgvZQS-RwW_H_8gF_shSvpbpINOW0kNteoY8pacQo8.cache new file mode 100644 index 0000000000..b05cb2a08b --- /dev/null +++ b/tmp/cache/assets/sprockets/v4.0.0/Kd/KdgvZQS-RwW_H_8gF_shSvpbpINOW0kNteoY8pacQo8.cache @@ -0,0 +1,3 @@ +[o:Set: +@hash} +I"environment-version:ETTI"environment-paths;TTI"rails-env;TTI"Zprocessors:type=application/javascript&file_type=application/javascript&pipeline=self;TTI"bfile-digest:///bundle/ruby/3.3.0/gems/actioncable-7.1.6/app/assets/javascripts/actioncable.js;TTF \ No newline at end of file diff --git a/tmp/cache/assets/sprockets/v4.0.0/Ki/KiInjfk8pMVDU90nWsEM5nnN6Q2JI9GxBbytFQRntFE.cache b/tmp/cache/assets/sprockets/v4.0.0/Ki/KiInjfk8pMVDU90nWsEM5nnN6Q2JI9GxBbytFQRntFE.cache new file mode 100644 index 0000000000..9ed7d64a3e Binary files /dev/null and b/tmp/cache/assets/sprockets/v4.0.0/Ki/KiInjfk8pMVDU90nWsEM5nnN6Q2JI9GxBbytFQRntFE.cache differ diff --git a/tmp/cache/assets/sprockets/v4.0.0/Kz/KzyLvVbcU1p-3LmbQtS2PyaXbSd4aCARXfCtj62ZbBQ.cache b/tmp/cache/assets/sprockets/v4.0.0/Kz/KzyLvVbcU1p-3LmbQtS2PyaXbSd4aCARXfCtj62ZbBQ.cache new file mode 100644 index 0000000000..aa64e02ad0 --- /dev/null +++ b/tmp/cache/assets/sprockets/v4.0.0/Kz/KzyLvVbcU1p-3LmbQtS2PyaXbSd4aCARXfCtj62ZbBQ.cache @@ -0,0 +1 @@ +I"/bundle/ruby/3.3.0/gems/turbo-rails-2.0.20/app/assets/javascripts/turbo.min.js?type=application/javascript&id=802ee059c3f468b4aa96e705947dc7df9ef0ddcc0df63b5d1b298a8e63c298b9:ET \ No newline at end of file diff --git a/tmp/cache/assets/sprockets/v4.0.0/Lc/LcSl40WRW_gj2lDG7dZ27Q-jZ-fCmtn0th0NSBW-bpM.cache b/tmp/cache/assets/sprockets/v4.0.0/Lc/LcSl40WRW_gj2lDG7dZ27Q-jZ-fCmtn0th0NSBW-bpM.cache new file mode 100644 index 0000000000..3cb27d6f08 --- /dev/null +++ b/tmp/cache/assets/sprockets/v4.0.0/Lc/LcSl40WRW_gj2lDG7dZ27Q-jZ-fCmtn0th0NSBW-bpM.cache @@ -0,0 +1,2 @@ +[o:Set: +@hash} I"environment-version:ETTI"environment-paths;TTI"rails-env;TTI"Lprocessors:type=application/javascript&file_type=application/javascript;TTI"Zfile-digest:///bundle/ruby/3.3.0/gems/actiontext-7.1.6/app/assets/javascripts/trix.js;TTI"Zprocessors:type=application/javascript&file_type=application/javascript&pipeline=self;TTF \ No newline at end of file diff --git a/tmp/cache/assets/sprockets/v4.0.0/Lo/LoE5rf9fsplxzBSUM3Xkem1YA1zB8kHQLp0KR0GiEFI.cache b/tmp/cache/assets/sprockets/v4.0.0/Lo/LoE5rf9fsplxzBSUM3Xkem1YA1zB8kHQLp0KR0GiEFI.cache new file mode 100644 index 0000000000..0c3c05a770 Binary files /dev/null and b/tmp/cache/assets/sprockets/v4.0.0/Lo/LoE5rf9fsplxzBSUM3Xkem1YA1zB8kHQLp0KR0GiEFI.cache differ diff --git a/tmp/cache/assets/sprockets/v4.0.0/MA/MAiLAlooEhPEMigzzSSOSj5yHiKMg6cPY1-WAb-XmlY.cache b/tmp/cache/assets/sprockets/v4.0.0/MA/MAiLAlooEhPEMigzzSSOSj5yHiKMg6cPY1-WAb-XmlY.cache new file mode 100644 index 0000000000..a2d79dbc0f --- /dev/null +++ b/tmp/cache/assets/sprockets/v4.0.0/MA/MAiLAlooEhPEMigzzSSOSj5yHiKMg6cPY1-WAb-XmlY.cache @@ -0,0 +1 @@ +I"/bundle/ruby/3.3.0/gems/stimulus-rails-1.3.4/app/assets/javascripts/stimulus-autoloader.js?type=application/javascript&pipeline=self&id=a9b4f3b643838cb011c58a297d3a92057e13f47e4ef0efeb604b80131b6524ff:ET \ No newline at end of file diff --git a/tmp/cache/assets/sprockets/v4.0.0/Mm/MmNQ7TqQnb1OMtdgW8hkh_5L9-CrmE9r5qGsAnf2xS0.cache b/tmp/cache/assets/sprockets/v4.0.0/Mm/MmNQ7TqQnb1OMtdgW8hkh_5L9-CrmE9r5qGsAnf2xS0.cache new file mode 100644 index 0000000000..fdae77f158 --- /dev/null +++ b/tmp/cache/assets/sprockets/v4.0.0/Mm/MmNQ7TqQnb1OMtdgW8hkh_5L9-CrmE9r5qGsAnf2xS0.cache @@ -0,0 +1 @@ +I"/bundle/ruby/3.3.0/gems/turbo-rails-2.0.20/app/assets/javascripts/turbo.js?type=application/javascript&id=f795ea1f0e2587ae4091f0d40c61d356f290ff5e5bd74a3787ea9b9f9b161cb9:ET \ No newline at end of file diff --git a/tmp/cache/assets/sprockets/v4.0.0/Mn/MnO7vsdAs-sy1iEPAz2Kpmqsct0bvD_iSVO1i2Mf384.cache b/tmp/cache/assets/sprockets/v4.0.0/Mn/MnO7vsdAs-sy1iEPAz2Kpmqsct0bvD_iSVO1i2Mf384.cache new file mode 100644 index 0000000000..f46022d296 --- /dev/null +++ b/tmp/cache/assets/sprockets/v4.0.0/Mn/MnO7vsdAs-sy1iEPAz2Kpmqsct0bvD_iSVO1i2Mf384.cache @@ -0,0 +1,3 @@ +[o:Set: +@hash} +I"environment-version:ETTI"environment-paths;TTI"rails-env;TTI"Zprocessors:type=application/javascript&file_type=application/javascript&pipeline=self;TTI"Zfile-digest:///bundle/ruby/3.3.0/gems/actiontext-7.1.6/app/assets/javascripts/trix.js;TTF \ No newline at end of file diff --git a/tmp/cache/assets/sprockets/v4.0.0/N7/N7PFG5INeYjZB395aO0wPcUxiAgThsbMgcNWd2B49p0.cache b/tmp/cache/assets/sprockets/v4.0.0/N7/N7PFG5INeYjZB395aO0wPcUxiAgThsbMgcNWd2B49p0.cache new file mode 100644 index 0000000000..96aa0c6a00 --- /dev/null +++ b/tmp/cache/assets/sprockets/v4.0.0/N7/N7PFG5INeYjZB395aO0wPcUxiAgThsbMgcNWd2B49p0.cache @@ -0,0 +1 @@ +I"/bundle/ruby/3.3.0/gems/actiontext-7.1.6/app/assets/javascripts/actiontext.js?type=application/javascript&id=17b61a2dba832ab6a39f96ea9ab17649d944b2e7f9c370382c1288a14f9cf08a:ET \ No newline at end of file diff --git a/tmp/cache/assets/sprockets/v4.0.0/NN/NNhh0QwJzXQthED2p7rETEGZp6cBKuRQvb7BaISps7w.cache b/tmp/cache/assets/sprockets/v4.0.0/NN/NNhh0QwJzXQthED2p7rETEGZp6cBKuRQvb7BaISps7w.cache new file mode 100644 index 0000000000..ffe44fd400 Binary files /dev/null and b/tmp/cache/assets/sprockets/v4.0.0/NN/NNhh0QwJzXQthED2p7rETEGZp6cBKuRQvb7BaISps7w.cache differ diff --git a/tmp/cache/assets/sprockets/v4.0.0/Nn/NnYdgCIaSk_iZrGzajuvX4Zz8W0GB1wRUi9kltzXjUY.cache b/tmp/cache/assets/sprockets/v4.0.0/Nn/NnYdgCIaSk_iZrGzajuvX4Zz8W0GB1wRUi9kltzXjUY.cache new file mode 100644 index 0000000000..76de77a411 --- /dev/null +++ b/tmp/cache/assets/sprockets/v4.0.0/Nn/NnYdgCIaSk_iZrGzajuvX4Zz8W0GB1wRUi9kltzXjUY.cache @@ -0,0 +1 @@ +I"app/assets/config/manifest.js?type=application/javascript&pipeline=self&id=b6ed3142ed80e343f88a662866bc348c49500239a61151909af6d0aa264e04fa:ET \ No newline at end of file diff --git a/tmp/cache/assets/sprockets/v4.0.0/OW/OWQZ3KrNFRGUGDtBCoe9EapjiUfhQnhH4s9_F-GYSsE.cache b/tmp/cache/assets/sprockets/v4.0.0/OW/OWQZ3KrNFRGUGDtBCoe9EapjiUfhQnhH4s9_F-GYSsE.cache new file mode 100644 index 0000000000..8b253b4f7b --- /dev/null +++ b/tmp/cache/assets/sprockets/v4.0.0/OW/OWQZ3KrNFRGUGDtBCoe9EapjiUfhQnhH4s9_F-GYSsE.cache @@ -0,0 +1 @@ +I"/bundle/ruby/3.3.0/gems/stimulus-rails-1.3.4/app/assets/javascripts/stimulus-importmap-autoloader.js?type=application/javascript&id=64ee12479fbc9e388309d084f8c2292531f014b8fcdc8deffe5d52fb2ac6384d:ET \ No newline at end of file diff --git a/tmp/cache/assets/sprockets/v4.0.0/PO/POC5yBrZ8hJxGtzyXOs19U-YBU85VDBeS-dhblc_5W4.cache b/tmp/cache/assets/sprockets/v4.0.0/PO/POC5yBrZ8hJxGtzyXOs19U-YBU85VDBeS-dhblc_5W4.cache new file mode 100644 index 0000000000..96adcd13b3 --- /dev/null +++ b/tmp/cache/assets/sprockets/v4.0.0/PO/POC5yBrZ8hJxGtzyXOs19U-YBU85VDBeS-dhblc_5W4.cache @@ -0,0 +1,2 @@ +[o:Set: +@hash} I"environment-version:ETTI"environment-paths;TTI"rails-env;TTI"Lprocessors:type=application/javascript&file_type=application/javascript;TTI"]file-digest:///bundle/ruby/3.3.0/gems/turbo-rails-2.0.20/app/assets/javascripts/turbo.js;TTI"Zprocessors:type=application/javascript&file_type=application/javascript&pipeline=self;TTF \ No newline at end of file diff --git a/tmp/cache/assets/sprockets/v4.0.0/QQ/QQLCIDUR1q50lcTucQdR7StaUqYt3ctxDvCfahfrWg4.cache b/tmp/cache/assets/sprockets/v4.0.0/QQ/QQLCIDUR1q50lcTucQdR7StaUqYt3ctxDvCfahfrWg4.cache new file mode 100644 index 0000000000..bc3d4b335a --- /dev/null +++ b/tmp/cache/assets/sprockets/v4.0.0/QQ/QQLCIDUR1q50lcTucQdR7StaUqYt3ctxDvCfahfrWg4.cache @@ -0,0 +1 @@ +I"/bundle/ruby/3.3.0/gems/actiontext-7.1.6/app/assets/javascripts/actiontext.esm.js?type=application/javascript&id=8c8a031879d5caa27ad141aba0a3eaa56eecde56371f1bba18f8702d0e86152e:ET \ No newline at end of file diff --git a/tmp/cache/assets/sprockets/v4.0.0/QZ/QZ5rJr-lXEyMMwg0YrdQE7FYH2hkRwLjH6cF-qLvmtg.cache b/tmp/cache/assets/sprockets/v4.0.0/QZ/QZ5rJr-lXEyMMwg0YrdQE7FYH2hkRwLjH6cF-qLvmtg.cache new file mode 100644 index 0000000000..0443841347 --- /dev/null +++ b/tmp/cache/assets/sprockets/v4.0.0/QZ/QZ5rJr-lXEyMMwg0YrdQE7FYH2hkRwLjH6cF-qLvmtg.cache @@ -0,0 +1 @@ +I"/bundle/ruby/3.3.0/gems/activestorage-7.1.6/app/assets/javascripts/activestorage.esm.js?type=application/javascript&id=f47c3494ab7fea3d66b89700e5f139645f8c174a1fc04e0bc92a03a2848e03d2:ET \ No newline at end of file diff --git a/tmp/cache/assets/sprockets/v4.0.0/Rb/Rb1eFvVvA2CEFj1rn-3Pzpt6AjqE34o0c6glHDJ9nTo.cache b/tmp/cache/assets/sprockets/v4.0.0/Rb/Rb1eFvVvA2CEFj1rn-3Pzpt6AjqE34o0c6glHDJ9nTo.cache new file mode 100644 index 0000000000..50531eca55 Binary files /dev/null and b/tmp/cache/assets/sprockets/v4.0.0/Rb/Rb1eFvVvA2CEFj1rn-3Pzpt6AjqE34o0c6glHDJ9nTo.cache differ diff --git a/tmp/cache/assets/sprockets/v4.0.0/Sh/ShnJms-f5qRMQXCG3ucoyj9CUoqHIObbOGz7RQVLznM.cache b/tmp/cache/assets/sprockets/v4.0.0/Sh/ShnJms-f5qRMQXCG3ucoyj9CUoqHIObbOGz7RQVLznM.cache new file mode 100644 index 0000000000..f666f826b0 --- /dev/null +++ b/tmp/cache/assets/sprockets/v4.0.0/Sh/ShnJms-f5qRMQXCG3ucoyj9CUoqHIObbOGz7RQVLznM.cache @@ -0,0 +1,3 @@ +[o:Set: +@hash} +I"environment-version:ETTI"environment-paths;TTI"rails-env;TTI"Zprocessors:type=application/javascript&file_type=application/javascript&pipeline=self;TTI"jfile-digest:///bundle/ruby/3.3.0/gems/activestorage-7.1.6/app/assets/javascripts/activestorage.esm.js;TTF \ No newline at end of file diff --git a/tmp/cache/assets/sprockets/v4.0.0/Sz/SzRl6FRAv8MTLf5xv8SvS8Injrr7OpikV9xzzlA8m2Y.cache b/tmp/cache/assets/sprockets/v4.0.0/Sz/SzRl6FRAv8MTLf5xv8SvS8Injrr7OpikV9xzzlA8m2Y.cache new file mode 100644 index 0000000000..cab29f317b Binary files /dev/null and b/tmp/cache/assets/sprockets/v4.0.0/Sz/SzRl6FRAv8MTLf5xv8SvS8Injrr7OpikV9xzzlA8m2Y.cache differ diff --git a/tmp/cache/assets/sprockets/v4.0.0/T_/T_SudbZD_5VpLySZo_Eg9llxjY4dNeyMyqLWQ490hMc.cache b/tmp/cache/assets/sprockets/v4.0.0/T_/T_SudbZD_5VpLySZo_Eg9llxjY4dNeyMyqLWQ490hMc.cache new file mode 100644 index 0000000000..8638ec4490 Binary files /dev/null and b/tmp/cache/assets/sprockets/v4.0.0/T_/T_SudbZD_5VpLySZo_Eg9llxjY4dNeyMyqLWQ490hMc.cache differ diff --git a/tmp/cache/assets/sprockets/v4.0.0/Tn/TnT7lRCpsIpNMWbDW0K9hc2THzPVhkjMNd0HUFZjHd4.cache b/tmp/cache/assets/sprockets/v4.0.0/Tn/TnT7lRCpsIpNMWbDW0K9hc2THzPVhkjMNd0HUFZjHd4.cache new file mode 100644 index 0000000000..863ba194be Binary files /dev/null and b/tmp/cache/assets/sprockets/v4.0.0/Tn/TnT7lRCpsIpNMWbDW0K9hc2THzPVhkjMNd0HUFZjHd4.cache differ diff --git a/tmp/cache/assets/sprockets/v4.0.0/Tr/TrQMUcKX5-Pef7vE7SVOUlBulr2YUDVkv3Ggthd25IQ.cache b/tmp/cache/assets/sprockets/v4.0.0/Tr/TrQMUcKX5-Pef7vE7SVOUlBulr2YUDVkv3Ggthd25IQ.cache new file mode 100644 index 0000000000..972b6094f8 Binary files /dev/null and b/tmp/cache/assets/sprockets/v4.0.0/Tr/TrQMUcKX5-Pef7vE7SVOUlBulr2YUDVkv3Ggthd25IQ.cache differ diff --git a/tmp/cache/assets/sprockets/v4.0.0/Ug/UgzRub0cgYmuGMWeVOe8NAj81mhsodI8mD8TK5j6w5k.cache b/tmp/cache/assets/sprockets/v4.0.0/Ug/UgzRub0cgYmuGMWeVOe8NAj81mhsodI8mD8TK5j6w5k.cache new file mode 100644 index 0000000000..e7eb719c37 --- /dev/null +++ b/tmp/cache/assets/sprockets/v4.0.0/Ug/UgzRub0cgYmuGMWeVOe8NAj81mhsodI8mD8TK5j6w5k.cache @@ -0,0 +1,3 @@ +[o:Set: +@hash} +I"environment-version:ETTI"environment-paths;TTI"rails-env;TTI"Zprocessors:type=application/javascript&file_type=application/javascript&pipeline=self;TTI"`file-digest:///bundle/ruby/3.3.0/gems/actiontext-7.1.6/app/assets/javascripts/actiontext.js;TTF \ No newline at end of file diff --git a/tmp/cache/assets/sprockets/v4.0.0/VY/VYrnadHVWhOQOlpEGiKRzzc9tZfdaKWMWW5gfswFRJI.cache b/tmp/cache/assets/sprockets/v4.0.0/VY/VYrnadHVWhOQOlpEGiKRzzc9tZfdaKWMWW5gfswFRJI.cache new file mode 100644 index 0000000000..fc495bfee5 --- /dev/null +++ b/tmp/cache/assets/sprockets/v4.0.0/VY/VYrnadHVWhOQOlpEGiKRzzc9tZfdaKWMWW5gfswFRJI.cache @@ -0,0 +1,2 @@ +[o:Set: +@hash} I"environment-version:ETTI"environment-paths;TTI"rails-env;TTI"Lprocessors:type=application/javascript&file_type=application/javascript;TTI"afile-digest:///bundle/ruby/3.3.0/gems/turbo-rails-2.0.20/app/assets/javascripts/turbo.min.js;TTI"Zprocessors:type=application/javascript&file_type=application/javascript&pipeline=self;TTF \ No newline at end of file diff --git a/tmp/cache/assets/sprockets/v4.0.0/WJ/WJ8_jQwDvuklybmXCQQLzrJ9Tg3iVvXQ3atVjyAUKIQ.cache b/tmp/cache/assets/sprockets/v4.0.0/WJ/WJ8_jQwDvuklybmXCQQLzrJ9Tg3iVvXQ3atVjyAUKIQ.cache new file mode 100644 index 0000000000..59a0d7f346 --- /dev/null +++ b/tmp/cache/assets/sprockets/v4.0.0/WJ/WJ8_jQwDvuklybmXCQQLzrJ9Tg3iVvXQ3atVjyAUKIQ.cache @@ -0,0 +1 @@ +I"app/javascript/application.js?type=application/javascript&pipeline=self&id=16e4f43274b11dbb9aaafe458797b64a6b8668d9cfc5b10e65a64889c0e74620:ET \ No newline at end of file diff --git a/tmp/cache/assets/sprockets/v4.0.0/WS/WSWboVtROPcxDidH_x6C0mpThcY4QVALrYMef2VYIok.cache b/tmp/cache/assets/sprockets/v4.0.0/WS/WSWboVtROPcxDidH_x6C0mpThcY4QVALrYMef2VYIok.cache new file mode 100644 index 0000000000..cc4358a3cd --- /dev/null +++ b/tmp/cache/assets/sprockets/v4.0.0/WS/WSWboVtROPcxDidH_x6C0mpThcY4QVALrYMef2VYIok.cache @@ -0,0 +1,2 @@ +[o:Set: +@hash} I"environment-version:ETTI"environment-paths;TTI"rails-env;TTI"0processors:type=text/css&file_type=text/css;TTI"[file-digest:///bundle/ruby/3.3.0/gems/actiontext-7.1.6/app/assets/stylesheets/trix.css;TTI">processors:type=text/css&file_type=text/css&pipeline=self;TTF \ No newline at end of file diff --git a/tmp/cache/assets/sprockets/v4.0.0/Wi/WiMIylLjSkNx4ceVt_6AKm0O4E4lVOO7emtUvbWLqAo.cache b/tmp/cache/assets/sprockets/v4.0.0/Wi/WiMIylLjSkNx4ceVt_6AKm0O4E4lVOO7emtUvbWLqAo.cache new file mode 100644 index 0000000000..9e5435895f Binary files /dev/null and b/tmp/cache/assets/sprockets/v4.0.0/Wi/WiMIylLjSkNx4ceVt_6AKm0O4E4lVOO7emtUvbWLqAo.cache differ diff --git a/tmp/cache/assets/sprockets/v4.0.0/Wk/Wkf5LNZbFGBQvq8kKn2PW-9Ys3TNFq2XS19hXDnJSxU.cache b/tmp/cache/assets/sprockets/v4.0.0/Wk/Wkf5LNZbFGBQvq8kKn2PW-9Ys3TNFq2XS19hXDnJSxU.cache new file mode 100644 index 0000000000..661c6b176a --- /dev/null +++ b/tmp/cache/assets/sprockets/v4.0.0/Wk/Wkf5LNZbFGBQvq8kKn2PW-9Ys3TNFq2XS19hXDnJSxU.cache @@ -0,0 +1,3 @@ +[o:Set: +@hash} +I"environment-version:ETTI"environment-paths;TTI"rails-env;TTI"Zprocessors:type=application/js-sourcemap+json&file_type=application/js-sourcemap+json;TTI"efile-digest:///bundle/ruby/3.3.0/gems/turbo-rails-2.0.20/app/assets/javascripts/turbo.min.js.map;TTF \ No newline at end of file diff --git a/tmp/cache/assets/sprockets/v4.0.0/XW/XWBlpm3n-FSMq2yXrn2umPVZvCPAFFTOJ__pYjI3WrI.cache b/tmp/cache/assets/sprockets/v4.0.0/XW/XWBlpm3n-FSMq2yXrn2umPVZvCPAFFTOJ__pYjI3WrI.cache new file mode 100644 index 0000000000..81efa1a0cf Binary files /dev/null and b/tmp/cache/assets/sprockets/v4.0.0/XW/XWBlpm3n-FSMq2yXrn2umPVZvCPAFFTOJ__pYjI3WrI.cache differ diff --git a/tmp/cache/assets/sprockets/v4.0.0/XZ/XZmAdwtWAerFEWAjmhumX3b0MTJ59mvLlUUaew1R4vA.cache b/tmp/cache/assets/sprockets/v4.0.0/XZ/XZmAdwtWAerFEWAjmhumX3b0MTJ59mvLlUUaew1R4vA.cache new file mode 100644 index 0000000000..2800ad3b2e --- /dev/null +++ b/tmp/cache/assets/sprockets/v4.0.0/XZ/XZmAdwtWAerFEWAjmhumX3b0MTJ59mvLlUUaew1R4vA.cache @@ -0,0 +1 @@ +"%Bșo$'AdLxRU \ No newline at end of file diff --git a/tmp/cache/assets/sprockets/v4.0.0/Yl/Yl78y5JaADBTdxlpVbgGuWOr7GLW9vFo2rIdqYN0msA.cache b/tmp/cache/assets/sprockets/v4.0.0/Yl/Yl78y5JaADBTdxlpVbgGuWOr7GLW9vFo2rIdqYN0msA.cache new file mode 100644 index 0000000000..14f2b833e4 --- /dev/null +++ b/tmp/cache/assets/sprockets/v4.0.0/Yl/Yl78y5JaADBTdxlpVbgGuWOr7GLW9vFo2rIdqYN0msA.cache @@ -0,0 +1,2 @@ +"%v<.,Yw=''| +E \ No newline at end of file diff --git a/tmp/cache/assets/sprockets/v4.0.0/Yz/YzB5uj_DHtkd079NUuTigNhb0BuOK16SJ1S4rSbBdFI.cache b/tmp/cache/assets/sprockets/v4.0.0/Yz/YzB5uj_DHtkd079NUuTigNhb0BuOK16SJ1S4rSbBdFI.cache new file mode 100644 index 0000000000..bad5c8050e --- /dev/null +++ b/tmp/cache/assets/sprockets/v4.0.0/Yz/YzB5uj_DHtkd079NUuTigNhb0BuOK16SJ1S4rSbBdFI.cache @@ -0,0 +1 @@ +I"/bundle/ruby/3.3.0/gems/stimulus-rails-1.3.4/app/assets/javascripts/stimulus.js?type=application/javascript&pipeline=self&id=5bb8aeb956a9e85f7371373af8d007a3e0143c8341c4f3c11c323966ee9b6984:ET \ No newline at end of file diff --git a/tmp/cache/assets/sprockets/v4.0.0/ZB/ZBXylnK2Qa_a2EGCLwjUkisXJisZL6QCvTD5UwEIzvo.cache b/tmp/cache/assets/sprockets/v4.0.0/ZB/ZBXylnK2Qa_a2EGCLwjUkisXJisZL6QCvTD5UwEIzvo.cache new file mode 100644 index 0000000000..c2e7972884 Binary files /dev/null and b/tmp/cache/assets/sprockets/v4.0.0/ZB/ZBXylnK2Qa_a2EGCLwjUkisXJisZL6QCvTD5UwEIzvo.cache differ diff --git a/tmp/cache/assets/sprockets/v4.0.0/ZG/ZGy6eu2Xs9JtB3aXD2ikilxT0g4XWbPPlF7ePT7M1Y8.cache b/tmp/cache/assets/sprockets/v4.0.0/ZG/ZGy6eu2Xs9JtB3aXD2ikilxT0g4XWbPPlF7ePT7M1Y8.cache new file mode 100644 index 0000000000..d5cd66c7b1 --- /dev/null +++ b/tmp/cache/assets/sprockets/v4.0.0/ZG/ZGy6eu2Xs9JtB3aXD2ikilxT0g4XWbPPlF7ePT7M1Y8.cache @@ -0,0 +1 @@ +I"/bundle/ruby/3.3.0/gems/stimulus-rails-1.3.4/app/assets/javascripts/stimulus.min.js?type=application/javascript&id=4f2f4df52dc4097d9fc83cbbf1d7e51948bfa458a51bfe29ad800b56a52c0af3:ET \ No newline at end of file diff --git a/tmp/cache/assets/sprockets/v4.0.0/ZS/ZShuD54l3ayC9xL8IAGwRIMp5XJ-SYybT_Qfmhueg4w.cache b/tmp/cache/assets/sprockets/v4.0.0/ZS/ZShuD54l3ayC9xL8IAGwRIMp5XJ-SYybT_Qfmhueg4w.cache new file mode 100644 index 0000000000..7aaf37dfd0 --- /dev/null +++ b/tmp/cache/assets/sprockets/v4.0.0/ZS/ZShuD54l3ayC9xL8IAGwRIMp5XJ-SYybT_Qfmhueg4w.cache @@ -0,0 +1 @@ +"%RmvS3.OLڹcƕq=_j \ No newline at end of file diff --git a/tmp/cache/assets/sprockets/v4.0.0/_R/_RbpEZn_qY1gC6od88dduwG5NYuULpzPme5I-wiqMpc.cache b/tmp/cache/assets/sprockets/v4.0.0/_R/_RbpEZn_qY1gC6od88dduwG5NYuULpzPme5I-wiqMpc.cache new file mode 100644 index 0000000000..01f8c4cd8f --- /dev/null +++ b/tmp/cache/assets/sprockets/v4.0.0/_R/_RbpEZn_qY1gC6od88dduwG5NYuULpzPme5I-wiqMpc.cache @@ -0,0 +1 @@ +I"/bundle/ruby/3.3.0/gems/stimulus-rails-1.3.4/app/assets/javascripts/stimulus.js?type=application/javascript&id=ed0583d652582d40e529f128bfbc07b8c22c598172230c94e5d3141f1f5a3f11:ET \ No newline at end of file diff --git a/tmp/cache/assets/sprockets/v4.0.0/aH/aHYmYpCXMLUILv9DefJ9rdRGCW2iuxr-dZ6otSb_W74.cache b/tmp/cache/assets/sprockets/v4.0.0/aH/aHYmYpCXMLUILv9DefJ9rdRGCW2iuxr-dZ6otSb_W74.cache new file mode 100644 index 0000000000..ef4fc86770 --- /dev/null +++ b/tmp/cache/assets/sprockets/v4.0.0/aH/aHYmYpCXMLUILv9DefJ9rdRGCW2iuxr-dZ6otSb_W74.cache @@ -0,0 +1 @@ +"%=|ƕRB"+e//)QU \ No newline at end of file diff --git a/tmp/cache/assets/sprockets/v4.0.0/ak/akz3o4RBCO_fz7CV3-El8GhSEtDnDZcqSQwOuGCk1cg.cache b/tmp/cache/assets/sprockets/v4.0.0/ak/akz3o4RBCO_fz7CV3-El8GhSEtDnDZcqSQwOuGCk1cg.cache new file mode 100644 index 0000000000..9772c6d957 --- /dev/null +++ b/tmp/cache/assets/sprockets/v4.0.0/ak/akz3o4RBCO_fz7CV3-El8GhSEtDnDZcqSQwOuGCk1cg.cache @@ -0,0 +1,2 @@ +[o:Set: +@hash}I"environment-version:ETTI"environment-paths;TTI"rails-env;TTI"Lprocessors:type=application/javascript&file_type=application/javascript;TTI"ffile-digest:///bundle/ruby/3.3.0/gems/stimulus-rails-1.3.4/app/assets/javascripts/stimulus.min.js;TTI"mfile-digest:///bundle/ruby/3.3.0/gems/stimulus-rails-1.3.4/app/assets/javascripts/stimulus-autoloader.js;TTI"Zprocessors:type=application/javascript&file_type=application/javascript&pipeline=self;TTI"wfile-digest:///bundle/ruby/3.3.0/gems/stimulus-rails-1.3.4/app/assets/javascripts/stimulus-importmap-autoloader.js;TTI"jfile-digest:///bundle/ruby/3.3.0/gems/stimulus-rails-1.3.4/app/assets/javascripts/stimulus-loading.js;TTI"Vfile-digest:///bundle/ruby/3.3.0/gems/stimulus-rails-1.3.4/app/assets/javascripts;TTI"jfile-digest:///bundle/ruby/3.3.0/gems/stimulus-rails-1.3.4/app/assets/javascripts/stimulus-autoloader;TTI"tfile-digest:///bundle/ruby/3.3.0/gems/stimulus-rails-1.3.4/app/assets/javascripts/stimulus-importmap-autoloader;TTI"gfile-digest:///bundle/ruby/3.3.0/gems/stimulus-rails-1.3.4/app/assets/javascripts/stimulus-loading;TTF \ No newline at end of file diff --git a/tmp/cache/assets/sprockets/v4.0.0/am/am6ZwO1palXOBmRkB_g53TZed6ZmwUnqE0yoRlweCWk.cache b/tmp/cache/assets/sprockets/v4.0.0/am/am6ZwO1palXOBmRkB_g53TZed6ZmwUnqE0yoRlweCWk.cache new file mode 100644 index 0000000000..d3a99b4b32 --- /dev/null +++ b/tmp/cache/assets/sprockets/v4.0.0/am/am6ZwO1palXOBmRkB_g53TZed6ZmwUnqE0yoRlweCWk.cache @@ -0,0 +1,2 @@ +[o:Set: +@hash}I"environment-version:ETTI"environment-paths;TTI"rails-env;TTI"Zprocessors:type=application/javascript&file_type=application/javascript&pipeline=self;TTI"ffile-digest:///bundle/ruby/3.3.0/gems/stimulus-rails-1.3.4/app/assets/javascripts/stimulus.min.js;TTI"Vfile-digest:///bundle/ruby/3.3.0/gems/stimulus-rails-1.3.4/app/assets/javascripts;TTI"jfile-digest:///bundle/ruby/3.3.0/gems/stimulus-rails-1.3.4/app/assets/javascripts/stimulus-autoloader;TTI"mfile-digest:///bundle/ruby/3.3.0/gems/stimulus-rails-1.3.4/app/assets/javascripts/stimulus-autoloader.js;TTI"tfile-digest:///bundle/ruby/3.3.0/gems/stimulus-rails-1.3.4/app/assets/javascripts/stimulus-importmap-autoloader;TTI"wfile-digest:///bundle/ruby/3.3.0/gems/stimulus-rails-1.3.4/app/assets/javascripts/stimulus-importmap-autoloader.js;TTI"gfile-digest:///bundle/ruby/3.3.0/gems/stimulus-rails-1.3.4/app/assets/javascripts/stimulus-loading;TTI"jfile-digest:///bundle/ruby/3.3.0/gems/stimulus-rails-1.3.4/app/assets/javascripts/stimulus-loading.js;TTF \ No newline at end of file diff --git a/tmp/cache/assets/sprockets/v4.0.0/b-/b-ATk35svJEYGmwU7D8qirB_5vnTvnw3B37JUY82ZUM.cache b/tmp/cache/assets/sprockets/v4.0.0/b-/b-ATk35svJEYGmwU7D8qirB_5vnTvnw3B37JUY82ZUM.cache new file mode 100644 index 0000000000..e4ad75eca3 --- /dev/null +++ b/tmp/cache/assets/sprockets/v4.0.0/b-/b-ATk35svJEYGmwU7D8qirB_5vnTvnw3B37JUY82ZUM.cache @@ -0,0 +1 @@ +I"app/assets/stylesheets/application.css?type=text/css&pipeline=self&id=bb0269a9ece8ae38021e950b0d77f2c2e8e847ffd9fe46ef860a5b0b8467fb57:ET \ No newline at end of file diff --git a/tmp/cache/assets/sprockets/v4.0.0/cg/cg--tQPYzWe39d4rbA8NYH61sVjTXTOYOUmqHMGkUWw.cache b/tmp/cache/assets/sprockets/v4.0.0/cg/cg--tQPYzWe39d4rbA8NYH61sVjTXTOYOUmqHMGkUWw.cache new file mode 100644 index 0000000000..b2223b4359 --- /dev/null +++ b/tmp/cache/assets/sprockets/v4.0.0/cg/cg--tQPYzWe39d4rbA8NYH61sVjTXTOYOUmqHMGkUWw.cache @@ -0,0 +1 @@ +I"}app/javascript/application.js?type=application/javascript&id=1a7fd520a83f2ff554304f8478c23272a229ababf6beff97e2335900ffd1ee46:ET \ No newline at end of file diff --git a/tmp/cache/assets/sprockets/v4.0.0/cp/cpHSbTIbZE7LUGhVYIKERvhYvCZSxvyI1EG-NIIYzIg.cache b/tmp/cache/assets/sprockets/v4.0.0/cp/cpHSbTIbZE7LUGhVYIKERvhYvCZSxvyI1EG-NIIYzIg.cache new file mode 100644 index 0000000000..c0ebe9a21e --- /dev/null +++ b/tmp/cache/assets/sprockets/v4.0.0/cp/cpHSbTIbZE7LUGhVYIKERvhYvCZSxvyI1EG-NIIYzIg.cache @@ -0,0 +1,2 @@ +[o:Set: +@hash} I"environment-version:ETTI"environment-paths;TTI"rails-env;TTI"Lprocessors:type=application/javascript&file_type=application/javascript;TTI"0file-digest://app/javascript/application.js;TTI"Zprocessors:type=application/javascript&file_type=application/javascript&pipeline=self;TTF \ No newline at end of file diff --git a/tmp/cache/assets/sprockets/v4.0.0/df/dfNGBQvzW2aimt_dbgQIjsrUUdt_QcwQbpbJO4j4tl0.cache b/tmp/cache/assets/sprockets/v4.0.0/df/dfNGBQvzW2aimt_dbgQIjsrUUdt_QcwQbpbJO4j4tl0.cache new file mode 100644 index 0000000000..0b5e820aff --- /dev/null +++ b/tmp/cache/assets/sprockets/v4.0.0/df/dfNGBQvzW2aimt_dbgQIjsrUUdt_QcwQbpbJO4j4tl0.cache @@ -0,0 +1 @@ +"%LVvvl#k4E4 \ No newline at end of file diff --git a/tmp/cache/assets/sprockets/v4.0.0/eV/eVUN9YsDmouMTwtcmAk9Yc1bA8E4GZvRfXw0DMTdSVs.cache b/tmp/cache/assets/sprockets/v4.0.0/eV/eVUN9YsDmouMTwtcmAk9Yc1bA8E4GZvRfXw0DMTdSVs.cache new file mode 100644 index 0000000000..ac748edfdc --- /dev/null +++ b/tmp/cache/assets/sprockets/v4.0.0/eV/eVUN9YsDmouMTwtcmAk9Yc1bA8E4GZvRfXw0DMTdSVs.cache @@ -0,0 +1 @@ +I"/bundle/ruby/3.3.0/gems/actiontext-7.1.6/app/assets/stylesheets/trix.css?type=text/css&id=2fe6caa83135751e068621d2a0598c2d2026ecba5dd4cc03cca8b7c907c00b0d:ET \ No newline at end of file diff --git a/tmp/cache/assets/sprockets/v4.0.0/e_/e_YYofnU0GWUs6eoxqjTYfG2PcvQj_R7ze0vR39ob3Y.cache b/tmp/cache/assets/sprockets/v4.0.0/e_/e_YYofnU0GWUs6eoxqjTYfG2PcvQj_R7ze0vR39ob3Y.cache new file mode 100644 index 0000000000..c74e02a583 --- /dev/null +++ b/tmp/cache/assets/sprockets/v4.0.0/e_/e_YYofnU0GWUs6eoxqjTYfG2PcvQj_R7ze0vR39ob3Y.cache @@ -0,0 +1,2 @@ +[o:Set: +@hash}I"environment-version:ETTI"environment-paths;TTI"rails-env;TTI"Lprocessors:type=application/javascript&file_type=application/javascript;TTI"0file-digest://app/assets/config/manifest.js;TTI"0processors:type=text/css&file_type=text/css;TTI"9file-digest://app/assets/stylesheets/application.css;TTI">processors:type=text/css&file_type=text/css&pipeline=self;TTI")file-digest://app/assets/stylesheets;TTI"Zprocessors:type=application/javascript&file_type=application/javascript&pipeline=self;TTI"$file-digest://app/assets/images;TTI"$file-digest://app/assets/builds;TTF \ No newline at end of file diff --git a/tmp/cache/assets/sprockets/v4.0.0/fG/fGJLl3grZlGwNkwJ3MCrFOEzgg5Z8YNaQAvxSd3bYbY.cache b/tmp/cache/assets/sprockets/v4.0.0/fG/fGJLl3grZlGwNkwJ3MCrFOEzgg5Z8YNaQAvxSd3bYbY.cache new file mode 100644 index 0000000000..5ac86d1536 --- /dev/null +++ b/tmp/cache/assets/sprockets/v4.0.0/fG/fGJLl3grZlGwNkwJ3MCrFOEzgg5Z8YNaQAvxSd3bYbY.cache @@ -0,0 +1 @@ +"%(MN:&b 0-H \ No newline at end of file diff --git a/tmp/cache/assets/sprockets/v4.0.0/fV/fVlvKof47H3Aug3OkRLLsDhxYSAEne49nIHXRCREE3I.cache b/tmp/cache/assets/sprockets/v4.0.0/fV/fVlvKof47H3Aug3OkRLLsDhxYSAEne49nIHXRCREE3I.cache new file mode 100644 index 0000000000..5458994536 Binary files /dev/null and b/tmp/cache/assets/sprockets/v4.0.0/fV/fVlvKof47H3Aug3OkRLLsDhxYSAEne49nIHXRCREE3I.cache differ diff --git a/tmp/cache/assets/sprockets/v4.0.0/gF/gFuR91kxhWu2nrjBKX98jT7MUIMXjgrzY5F67Sffy_M.cache b/tmp/cache/assets/sprockets/v4.0.0/gF/gFuR91kxhWu2nrjBKX98jT7MUIMXjgrzY5F67Sffy_M.cache new file mode 100644 index 0000000000..ebc2a3dd64 Binary files /dev/null and b/tmp/cache/assets/sprockets/v4.0.0/gF/gFuR91kxhWu2nrjBKX98jT7MUIMXjgrzY5F67Sffy_M.cache differ diff --git a/tmp/cache/assets/sprockets/v4.0.0/gR/gRjmrDAMvrTS3pPVM20y63ff0iF6ckF9qiJFcDJip1E.cache b/tmp/cache/assets/sprockets/v4.0.0/gR/gRjmrDAMvrTS3pPVM20y63ff0iF6ckF9qiJFcDJip1E.cache new file mode 100644 index 0000000000..8408ea3a2f --- /dev/null +++ b/tmp/cache/assets/sprockets/v4.0.0/gR/gRjmrDAMvrTS3pPVM20y63ff0iF6ckF9qiJFcDJip1E.cache @@ -0,0 +1 @@ +"%}ި$,m/YŃUpbLzą \ No newline at end of file diff --git a/tmp/cache/assets/sprockets/v4.0.0/gY/gYP2YA2nZtgXvHlkOoKWImaSBXZoNDO64k6yiXpm4oY.cache b/tmp/cache/assets/sprockets/v4.0.0/gY/gYP2YA2nZtgXvHlkOoKWImaSBXZoNDO64k6yiXpm4oY.cache new file mode 100644 index 0000000000..9e2cc7b29e --- /dev/null +++ b/tmp/cache/assets/sprockets/v4.0.0/gY/gYP2YA2nZtgXvHlkOoKWImaSBXZoNDO64k6yiXpm4oY.cache @@ -0,0 +1,2 @@ +[o:Set: +@hash} I"environment-version:ETTI"environment-paths;TTI"rails-env;TTI"Lprocessors:type=application/javascript&file_type=application/javascript;TTI"bfile-digest:///bundle/ruby/3.3.0/gems/actioncable-7.1.6/app/assets/javascripts/actioncable.js;TTI"Zprocessors:type=application/javascript&file_type=application/javascript&pipeline=self;TTF \ No newline at end of file diff --git a/tmp/cache/assets/sprockets/v4.0.0/gk/gkgJRE8AlvLnmotsMuC-YRTWz8ei7Cm14o-xkCPX1Cw.cache b/tmp/cache/assets/sprockets/v4.0.0/gk/gkgJRE8AlvLnmotsMuC-YRTWz8ei7Cm14o-xkCPX1Cw.cache new file mode 100644 index 0000000000..0f8443a1dd Binary files /dev/null and b/tmp/cache/assets/sprockets/v4.0.0/gk/gkgJRE8AlvLnmotsMuC-YRTWz8ei7Cm14o-xkCPX1Cw.cache differ diff --git a/tmp/cache/assets/sprockets/v4.0.0/i8/i8_fc5dtblrplkNZynBtpm8IcWYCJF9nw2130F5jJgY.cache b/tmp/cache/assets/sprockets/v4.0.0/i8/i8_fc5dtblrplkNZynBtpm8IcWYCJF9nw2130F5jJgY.cache new file mode 100644 index 0000000000..751e90f825 --- /dev/null +++ b/tmp/cache/assets/sprockets/v4.0.0/i8/i8_fc5dtblrplkNZynBtpm8IcWYCJF9nw2130F5jJgY.cache @@ -0,0 +1 @@ +I"/bundle/ruby/3.3.0/gems/actioncable-7.1.6/app/assets/javascripts/actioncable.esm.js?type=application/javascript&pipeline=self&id=393d28c727cca7940cb79ec76e15eb1e88ec2c5aacbd25faea859eb4faf48c61:ET \ No newline at end of file diff --git a/tmp/cache/assets/sprockets/v4.0.0/ic/icIJLzkUl_A3Lzhx5CzXqyZMjDmKjLLQqZ7q3eKSugM.cache b/tmp/cache/assets/sprockets/v4.0.0/ic/icIJLzkUl_A3Lzhx5CzXqyZMjDmKjLLQqZ7q3eKSugM.cache new file mode 100644 index 0000000000..a6927d4683 --- /dev/null +++ b/tmp/cache/assets/sprockets/v4.0.0/ic/icIJLzkUl_A3Lzhx5CzXqyZMjDmKjLLQqZ7q3eKSugM.cache @@ -0,0 +1,3 @@ +[o:Set: +@hash} +I"environment-version:ETTI"environment-paths;TTI"rails-env;TTI"Zprocessors:type=application/javascript&file_type=application/javascript&pipeline=self;TTI"ffile-digest:///bundle/ruby/3.3.0/gems/activestorage-7.1.6/app/assets/javascripts/activestorage.js;TTF \ No newline at end of file diff --git a/tmp/cache/assets/sprockets/v4.0.0/ig/igrr9-1AJzHdvYC7s2NXP_8wG-ArC4EUjevgkamlFEI.cache b/tmp/cache/assets/sprockets/v4.0.0/ig/igrr9-1AJzHdvYC7s2NXP_8wG-ArC4EUjevgkamlFEI.cache new file mode 100644 index 0000000000..592ff42ab7 Binary files /dev/null and b/tmp/cache/assets/sprockets/v4.0.0/ig/igrr9-1AJzHdvYC7s2NXP_8wG-ArC4EUjevgkamlFEI.cache differ diff --git a/tmp/cache/assets/sprockets/v4.0.0/ii/iilm4p7TjbNulEcuW49MYkuuoVmBANGSjnzQmjUFxgY.cache b/tmp/cache/assets/sprockets/v4.0.0/ii/iilm4p7TjbNulEcuW49MYkuuoVmBANGSjnzQmjUFxgY.cache new file mode 100644 index 0000000000..07a45446be --- /dev/null +++ b/tmp/cache/assets/sprockets/v4.0.0/ii/iilm4p7TjbNulEcuW49MYkuuoVmBANGSjnzQmjUFxgY.cache @@ -0,0 +1 @@ +I"/bundle/ruby/3.3.0/gems/actiontext-7.1.6/app/assets/javascripts/trix.js?type=application/javascript&id=c6e02cce8eb9646b9d3b754461fef090d7420c760abdc3e4d0b7c16e1129d85c:ET \ No newline at end of file diff --git a/tmp/cache/assets/sprockets/v4.0.0/ju/juEF-oEqGulVYAT2r_uU1ukS6ADHwjolEw1kJJ_nu4U.cache b/tmp/cache/assets/sprockets/v4.0.0/ju/juEF-oEqGulVYAT2r_uU1ukS6ADHwjolEw1kJJ_nu4U.cache new file mode 100644 index 0000000000..afff055b04 Binary files /dev/null and b/tmp/cache/assets/sprockets/v4.0.0/ju/juEF-oEqGulVYAT2r_uU1ukS6ADHwjolEw1kJJ_nu4U.cache differ diff --git a/tmp/cache/assets/sprockets/v4.0.0/k3/k3248bia3wiyVXQ3nNjSaDdq4HVffoejVDwbVb0HrNU.cache b/tmp/cache/assets/sprockets/v4.0.0/k3/k3248bia3wiyVXQ3nNjSaDdq4HVffoejVDwbVb0HrNU.cache new file mode 100644 index 0000000000..1a14bcc5eb --- /dev/null +++ b/tmp/cache/assets/sprockets/v4.0.0/k3/k3248bia3wiyVXQ3nNjSaDdq4HVffoejVDwbVb0HrNU.cache @@ -0,0 +1,3 @@ +[o:Set: +@hash} +I"environment-version:ETTI"environment-paths;TTI"rails-env;TTI"Zprocessors:type=application/javascript&file_type=application/javascript&pipeline=self;TTI"wfile-digest:///bundle/ruby/3.3.0/gems/stimulus-rails-1.3.4/app/assets/javascripts/stimulus-importmap-autoloader.js;TTF \ No newline at end of file diff --git a/tmp/cache/assets/sprockets/v4.0.0/k4/k4hhy9hyLdtxRoERkKeJR9HzsoxOCUHHgUqaDBzGFXA.cache b/tmp/cache/assets/sprockets/v4.0.0/k4/k4hhy9hyLdtxRoERkKeJR9HzsoxOCUHHgUqaDBzGFXA.cache new file mode 100644 index 0000000000..36a8171f1e Binary files /dev/null and b/tmp/cache/assets/sprockets/v4.0.0/k4/k4hhy9hyLdtxRoERkKeJR9HzsoxOCUHHgUqaDBzGFXA.cache differ diff --git a/tmp/cache/assets/sprockets/v4.0.0/ls/lsNYhP-pJlEuAUi6C4SfBX782UjLFgruUCGqTkg3yjM.cache b/tmp/cache/assets/sprockets/v4.0.0/ls/lsNYhP-pJlEuAUi6C4SfBX782UjLFgruUCGqTkg3yjM.cache new file mode 100644 index 0000000000..9dfb775ab7 Binary files /dev/null and b/tmp/cache/assets/sprockets/v4.0.0/ls/lsNYhP-pJlEuAUi6C4SfBX782UjLFgruUCGqTkg3yjM.cache differ diff --git a/tmp/cache/assets/sprockets/v4.0.0/m6/m6MFq_6Jb_aoo1PIfYptPR6lwtdoZk4PMDmblpptzbs.cache b/tmp/cache/assets/sprockets/v4.0.0/m6/m6MFq_6Jb_aoo1PIfYptPR6lwtdoZk4PMDmblpptzbs.cache new file mode 100644 index 0000000000..7545c9890f --- /dev/null +++ b/tmp/cache/assets/sprockets/v4.0.0/m6/m6MFq_6Jb_aoo1PIfYptPR6lwtdoZk4PMDmblpptzbs.cache @@ -0,0 +1 @@ +I"/bundle/ruby/3.3.0/gems/actioncable-7.1.6/app/assets/javascripts/actioncable.js?type=application/javascript&id=29574ac4c05bfce14d896a5be820a6244f8fd542578de011fc76072bd7922265:ET \ No newline at end of file diff --git a/tmp/cache/assets/sprockets/v4.0.0/mU/mUAZ0ZXSGizEoW6zd5exymSBk5Y73APlUKVgzJJhHAY.cache b/tmp/cache/assets/sprockets/v4.0.0/mU/mUAZ0ZXSGizEoW6zd5exymSBk5Y73APlUKVgzJJhHAY.cache new file mode 100644 index 0000000000..c7dcbf9288 --- /dev/null +++ b/tmp/cache/assets/sprockets/v4.0.0/mU/mUAZ0ZXSGizEoW6zd5exymSBk5Y73APlUKVgzJJhHAY.cache @@ -0,0 +1,2 @@ +[o:Set: +@hash}I"environment-version:ETTI"environment-paths;TTI"rails-env;TTI"Lprocessors:type=application/javascript&file_type=application/javascript;TTI"bfile-digest:///bundle/ruby/3.3.0/gems/stimulus-rails-1.3.4/app/assets/javascripts/stimulus.js;TTI"mfile-digest:///bundle/ruby/3.3.0/gems/stimulus-rails-1.3.4/app/assets/javascripts/stimulus-autoloader.js;TTI"Zprocessors:type=application/javascript&file_type=application/javascript&pipeline=self;TTI"wfile-digest:///bundle/ruby/3.3.0/gems/stimulus-rails-1.3.4/app/assets/javascripts/stimulus-importmap-autoloader.js;TTI"jfile-digest:///bundle/ruby/3.3.0/gems/stimulus-rails-1.3.4/app/assets/javascripts/stimulus-loading.js;TTI"Vfile-digest:///bundle/ruby/3.3.0/gems/stimulus-rails-1.3.4/app/assets/javascripts;TTI"jfile-digest:///bundle/ruby/3.3.0/gems/stimulus-rails-1.3.4/app/assets/javascripts/stimulus-autoloader;TTI"tfile-digest:///bundle/ruby/3.3.0/gems/stimulus-rails-1.3.4/app/assets/javascripts/stimulus-importmap-autoloader;TTI"gfile-digest:///bundle/ruby/3.3.0/gems/stimulus-rails-1.3.4/app/assets/javascripts/stimulus-loading;TTF \ No newline at end of file diff --git a/tmp/cache/assets/sprockets/v4.0.0/nN/nN0LErmzIpVq1XU4hqy9ZVUJg49pBNaD1O4U4jcrCSg.cache b/tmp/cache/assets/sprockets/v4.0.0/nN/nN0LErmzIpVq1XU4hqy9ZVUJg49pBNaD1O4U4jcrCSg.cache new file mode 100644 index 0000000000..8df2e8d4ac --- /dev/null +++ b/tmp/cache/assets/sprockets/v4.0.0/nN/nN0LErmzIpVq1XU4hqy9ZVUJg49pBNaD1O4U4jcrCSg.cache @@ -0,0 +1 @@ +I"/bundle/ruby/3.3.0/gems/stimulus-rails-1.3.4/app/assets/javascripts/stimulus-loading.js?type=application/javascript&id=51713fd99cb05ed77a2f11fd512812023c939c33458f3169ae6e204a026fd0a5:ET \ No newline at end of file diff --git a/tmp/cache/assets/sprockets/v4.0.0/nZ/nZcD-VgWMzdM9gaO4OdBQvuIRMXm_ZLHSGZx9QqrJ3I.cache b/tmp/cache/assets/sprockets/v4.0.0/nZ/nZcD-VgWMzdM9gaO4OdBQvuIRMXm_ZLHSGZx9QqrJ3I.cache new file mode 100644 index 0000000000..829e762bde --- /dev/null +++ b/tmp/cache/assets/sprockets/v4.0.0/nZ/nZcD-VgWMzdM9gaO4OdBQvuIRMXm_ZLHSGZx9QqrJ3I.cache @@ -0,0 +1,3 @@ +[o:Set: +@hash} +I"environment-version:ETTI"environment-paths;TTI"rails-env;TTI"Zprocessors:type=application/javascript&file_type=application/javascript&pipeline=self;TTI"ffile-digest:///bundle/ruby/3.3.0/gems/actioncable-7.1.6/app/assets/javascripts/actioncable.esm.js;TTF \ No newline at end of file diff --git a/tmp/cache/assets/sprockets/v4.0.0/nb/nbA3R8xgFTZQYYmMNQxD_hQ7y5DA4FDjfLHmJTaE3Hc.cache b/tmp/cache/assets/sprockets/v4.0.0/nb/nbA3R8xgFTZQYYmMNQxD_hQ7y5DA4FDjfLHmJTaE3Hc.cache new file mode 100644 index 0000000000..6ac4db3e31 Binary files /dev/null and b/tmp/cache/assets/sprockets/v4.0.0/nb/nbA3R8xgFTZQYYmMNQxD_hQ7y5DA4FDjfLHmJTaE3Hc.cache differ diff --git a/tmp/cache/assets/sprockets/v4.0.0/nb/nbiXND3GLC4QdnUldd8RbVbLit4gUVj5pYj5PVd7QDg.cache b/tmp/cache/assets/sprockets/v4.0.0/nb/nbiXND3GLC4QdnUldd8RbVbLit4gUVj5pYj5PVd7QDg.cache new file mode 100644 index 0000000000..f6061853b0 Binary files /dev/null and b/tmp/cache/assets/sprockets/v4.0.0/nb/nbiXND3GLC4QdnUldd8RbVbLit4gUVj5pYj5PVd7QDg.cache differ diff --git a/tmp/cache/assets/sprockets/v4.0.0/ni/niuSQiVgdjzQEet6MsToCjvrtNgjFsMKgPIgbIaQSmM.cache b/tmp/cache/assets/sprockets/v4.0.0/ni/niuSQiVgdjzQEet6MsToCjvrtNgjFsMKgPIgbIaQSmM.cache new file mode 100644 index 0000000000..14eab117e8 --- /dev/null +++ b/tmp/cache/assets/sprockets/v4.0.0/ni/niuSQiVgdjzQEet6MsToCjvrtNgjFsMKgPIgbIaQSmM.cache @@ -0,0 +1 @@ +"%dt{^GNMkhO \ No newline at end of file diff --git a/tmp/cache/assets/sprockets/v4.0.0/t4/t4WO5cDF3J91NR9aq6dhDWWS6inGA2C_0e3ArvDlIvY.cache b/tmp/cache/assets/sprockets/v4.0.0/t4/t4WO5cDF3J91NR9aq6dhDWWS6inGA2C_0e3ArvDlIvY.cache new file mode 100644 index 0000000000..d214c07ee1 --- /dev/null +++ b/tmp/cache/assets/sprockets/v4.0.0/t4/t4WO5cDF3J91NR9aq6dhDWWS6inGA2C_0e3ArvDlIvY.cache @@ -0,0 +1 @@ +"%U ~ 咙@qG5,݇1MyTb \ No newline at end of file diff --git a/tmp/cache/assets/sprockets/v4.0.0/u0/u0rgMTbfxHp0gBxaNpwY43auwKL-jCtb1-rBMcBDeGo.cache b/tmp/cache/assets/sprockets/v4.0.0/u0/u0rgMTbfxHp0gBxaNpwY43auwKL-jCtb1-rBMcBDeGo.cache new file mode 100644 index 0000000000..3e71ab0708 Binary files /dev/null and b/tmp/cache/assets/sprockets/v4.0.0/u0/u0rgMTbfxHp0gBxaNpwY43auwKL-jCtb1-rBMcBDeGo.cache differ diff --git a/tmp/cache/assets/sprockets/v4.0.0/u5/u5ffnVkMVbLSuyBwzkQTykF51imlmNTtUm87Jmr114M.cache b/tmp/cache/assets/sprockets/v4.0.0/u5/u5ffnVkMVbLSuyBwzkQTykF51imlmNTtUm87Jmr114M.cache new file mode 100644 index 0000000000..bf452f6c9e --- /dev/null +++ b/tmp/cache/assets/sprockets/v4.0.0/u5/u5ffnVkMVbLSuyBwzkQTykF51imlmNTtUm87Jmr114M.cache @@ -0,0 +1,2 @@ +[o:Set: +@hash}I"environment-version:ETTI"environment-paths;TTI"rails-env;TTI"Zprocessors:type=application/javascript&file_type=application/javascript&pipeline=self;TTI"bfile-digest:///bundle/ruby/3.3.0/gems/stimulus-rails-1.3.4/app/assets/javascripts/stimulus.js;TTI"Vfile-digest:///bundle/ruby/3.3.0/gems/stimulus-rails-1.3.4/app/assets/javascripts;TTI"jfile-digest:///bundle/ruby/3.3.0/gems/stimulus-rails-1.3.4/app/assets/javascripts/stimulus-autoloader;TTI"mfile-digest:///bundle/ruby/3.3.0/gems/stimulus-rails-1.3.4/app/assets/javascripts/stimulus-autoloader.js;TTI"tfile-digest:///bundle/ruby/3.3.0/gems/stimulus-rails-1.3.4/app/assets/javascripts/stimulus-importmap-autoloader;TTI"wfile-digest:///bundle/ruby/3.3.0/gems/stimulus-rails-1.3.4/app/assets/javascripts/stimulus-importmap-autoloader.js;TTI"gfile-digest:///bundle/ruby/3.3.0/gems/stimulus-rails-1.3.4/app/assets/javascripts/stimulus-loading;TTI"jfile-digest:///bundle/ruby/3.3.0/gems/stimulus-rails-1.3.4/app/assets/javascripts/stimulus-loading.js;TTF \ No newline at end of file diff --git a/tmp/cache/assets/sprockets/v4.0.0/uN/uNO7IafHm5NoSX_qFk9aJ0v_HU4eFJFGe7pgKIwJlMM.cache b/tmp/cache/assets/sprockets/v4.0.0/uN/uNO7IafHm5NoSX_qFk9aJ0v_HU4eFJFGe7pgKIwJlMM.cache new file mode 100644 index 0000000000..dd76d0f082 --- /dev/null +++ b/tmp/cache/assets/sprockets/v4.0.0/uN/uNO7IafHm5NoSX_qFk9aJ0v_HU4eFJFGe7pgKIwJlMM.cache @@ -0,0 +1 @@ +I"/bundle/ruby/3.3.0/gems/stimulus-rails-1.3.4/app/assets/javascripts/stimulus.min.js.map?type=application/js-sourcemap+json&id=8d7101940b862837f68c53e4b62c94a79c76326e933014768c061f684d1aee9c:ET \ No newline at end of file diff --git a/tmp/cache/assets/sprockets/v4.0.0/uT/uT1hfufTnCTIwvHfRe-n7a6u369ZSarEpJTXvcCzP6A.cache b/tmp/cache/assets/sprockets/v4.0.0/uT/uT1hfufTnCTIwvHfRe-n7a6u369ZSarEpJTXvcCzP6A.cache new file mode 100644 index 0000000000..02cf00ea38 Binary files /dev/null and b/tmp/cache/assets/sprockets/v4.0.0/uT/uT1hfufTnCTIwvHfRe-n7a6u369ZSarEpJTXvcCzP6A.cache differ diff --git a/tmp/cache/assets/sprockets/v4.0.0/uh/uhppIX5Qqo55PzipQYLYd8LWmxehfuJirUCOywg4QNs.cache b/tmp/cache/assets/sprockets/v4.0.0/uh/uhppIX5Qqo55PzipQYLYd8LWmxehfuJirUCOywg4QNs.cache new file mode 100644 index 0000000000..b73dd88f27 Binary files /dev/null and b/tmp/cache/assets/sprockets/v4.0.0/uh/uhppIX5Qqo55PzipQYLYd8LWmxehfuJirUCOywg4QNs.cache differ diff --git a/tmp/cache/assets/sprockets/v4.0.0/ve/vezC0e3jqBKJ9UhoLRhIUXkWjkRE2y6m-HnyEgA5FR8.cache b/tmp/cache/assets/sprockets/v4.0.0/ve/vezC0e3jqBKJ9UhoLRhIUXkWjkRE2y6m-HnyEgA5FR8.cache new file mode 100644 index 0000000000..4cd55cf59e --- /dev/null +++ b/tmp/cache/assets/sprockets/v4.0.0/ve/vezC0e3jqBKJ9UhoLRhIUXkWjkRE2y6m-HnyEgA5FR8.cache @@ -0,0 +1 @@ +I"/bundle/ruby/3.3.0/gems/actioncable-7.1.6/app/assets/javascripts/actioncable.js?type=application/javascript&pipeline=self&id=1e693a6a7b0eba4067735a021c9d54272a25d4787cbce66359e002b0ce74c3f6:ET \ No newline at end of file diff --git a/tmp/cache/assets/sprockets/v4.0.0/w8/w8P2amuNvaqWixZ_aNruuqy3UpZhBKP1hwY6_NVNSF4.cache b/tmp/cache/assets/sprockets/v4.0.0/w8/w8P2amuNvaqWixZ_aNruuqy3UpZhBKP1hwY6_NVNSF4.cache new file mode 100644 index 0000000000..61a9731be8 --- /dev/null +++ b/tmp/cache/assets/sprockets/v4.0.0/w8/w8P2amuNvaqWixZ_aNruuqy3UpZhBKP1hwY6_NVNSF4.cache @@ -0,0 +1,2 @@ +[o:Set: +@hash}I"environment-version:ETTI"environment-paths;TTI"rails-env;TTI"Zprocessors:type=application/javascript&file_type=application/javascript&pipeline=self;TTI"0file-digest://app/assets/config/manifest.js;TTI"$file-digest://app/assets/images;TTI"$file-digest://app/assets/builds;TTI")file-digest://app/assets/stylesheets;TTI"9file-digest://app/assets/stylesheets/application.css;TTF \ No newline at end of file diff --git a/tmp/cache/assets/sprockets/v4.0.0/wk/wkmGTSlG_XsBahAid8x8D3K9SDABeiZUxVx_xnwwXvk.cache b/tmp/cache/assets/sprockets/v4.0.0/wk/wkmGTSlG_XsBahAid8x8D3K9SDABeiZUxVx_xnwwXvk.cache new file mode 100644 index 0000000000..31d720d366 --- /dev/null +++ b/tmp/cache/assets/sprockets/v4.0.0/wk/wkmGTSlG_XsBahAid8x8D3K9SDABeiZUxVx_xnwwXvk.cache @@ -0,0 +1,3 @@ +[o:Set: +@hash} +I"environment-version:ETTI"environment-paths;TTI"rails-env;TTI"Zprocessors:type=application/javascript&file_type=application/javascript&pipeline=self;TTI"afile-digest:///bundle/ruby/3.3.0/gems/turbo-rails-2.0.20/app/assets/javascripts/turbo.min.js;TTF \ No newline at end of file diff --git a/tmp/cache/assets/sprockets/v4.0.0/wq/wqsb3RVu2bNN6bEgUXIPxgze4Jzu4ti21xgyUyJCQfU.cache b/tmp/cache/assets/sprockets/v4.0.0/wq/wqsb3RVu2bNN6bEgUXIPxgze4Jzu4ti21xgyUyJCQfU.cache new file mode 100644 index 0000000000..11c0f12e35 --- /dev/null +++ b/tmp/cache/assets/sprockets/v4.0.0/wq/wqsb3RVu2bNN6bEgUXIPxgze4Jzu4ti21xgyUyJCQfU.cache @@ -0,0 +1,3 @@ +"%٪ET ~ii + +PeBs}Y13 \ No newline at end of file diff --git a/tmp/cache/assets/sprockets/v4.0.0/wy/wyspiDELXKWqszTARrXwajx7oi8EJinEugoN0YsUny4.cache b/tmp/cache/assets/sprockets/v4.0.0/wy/wyspiDELXKWqszTARrXwajx7oi8EJinEugoN0YsUny4.cache new file mode 100644 index 0000000000..682e9dc4b3 --- /dev/null +++ b/tmp/cache/assets/sprockets/v4.0.0/wy/wyspiDELXKWqszTARrXwajx7oi8EJinEugoN0YsUny4.cache @@ -0,0 +1,3 @@ +[o:Set: +@hash} +I"environment-version:ETTI"environment-paths;TTI"rails-env;TTI"Zprocessors:type=application/javascript&file_type=application/javascript&pipeline=self;TTI"jfile-digest:///bundle/ruby/3.3.0/gems/stimulus-rails-1.3.4/app/assets/javascripts/stimulus-loading.js;TTF \ No newline at end of file diff --git a/tmp/cache/assets/sprockets/v4.0.0/xL/xLgEE40Vm_B2iGSs1CElK6V10hG-hOunL1V_pyAqjeM.cache b/tmp/cache/assets/sprockets/v4.0.0/xL/xLgEE40Vm_B2iGSs1CElK6V10hG-hOunL1V_pyAqjeM.cache new file mode 100644 index 0000000000..459218e959 --- /dev/null +++ b/tmp/cache/assets/sprockets/v4.0.0/xL/xLgEE40Vm_B2iGSs1CElK6V10hG-hOunL1V_pyAqjeM.cache @@ -0,0 +1 @@ +I"/bundle/ruby/3.3.0/gems/actiontext-7.1.6/app/assets/javascripts/actiontext.js?type=application/javascript&pipeline=self&id=c57d3899eed1c356da9477110f396d1ddb4b715cc1a11dfceadaff58f7601c3e:ET \ No newline at end of file diff --git a/tmp/cache/assets/sprockets/v4.0.0/xf/xfDK8vE8CBiR0FJcAMdHpTzdGHVmSOEbvy4jyZZdL6o.cache b/tmp/cache/assets/sprockets/v4.0.0/xf/xfDK8vE8CBiR0FJcAMdHpTzdGHVmSOEbvy4jyZZdL6o.cache new file mode 100644 index 0000000000..39efeac418 --- /dev/null +++ b/tmp/cache/assets/sprockets/v4.0.0/xf/xfDK8vE8CBiR0FJcAMdHpTzdGHVmSOEbvy4jyZZdL6o.cache @@ -0,0 +1 @@ +"%#3s[zFFP} \ No newline at end of file diff --git a/tmp/cache/assets/sprockets/v4.0.0/y6/y616KR98Gt5P41n80jIYnBiyasvFq9yClXLEQBONpRE.cache b/tmp/cache/assets/sprockets/v4.0.0/y6/y616KR98Gt5P41n80jIYnBiyasvFq9yClXLEQBONpRE.cache new file mode 100644 index 0000000000..a65c3229e5 --- /dev/null +++ b/tmp/cache/assets/sprockets/v4.0.0/y6/y616KR98Gt5P41n80jIYnBiyasvFq9yClXLEQBONpRE.cache @@ -0,0 +1,2 @@ +[o:Set: +@hash} I"environment-version:ETTI"environment-paths;TTI"rails-env;TTI"Lprocessors:type=application/javascript&file_type=application/javascript;TTI"jfile-digest:///bundle/ruby/3.3.0/gems/activestorage-7.1.6/app/assets/javascripts/activestorage.esm.js;TTI"Zprocessors:type=application/javascript&file_type=application/javascript&pipeline=self;TTF \ No newline at end of file diff --git a/tmp/cache/assets/sprockets/v4.0.0/yU/yUwd68ZFFT0T53nj0FSGdy4MrA3nSFik_AL9HnwMOsQ.cache b/tmp/cache/assets/sprockets/v4.0.0/yU/yUwd68ZFFT0T53nj0FSGdy4MrA3nSFik_AL9HnwMOsQ.cache new file mode 100644 index 0000000000..6ff8765fc8 --- /dev/null +++ b/tmp/cache/assets/sprockets/v4.0.0/yU/yUwd68ZFFT0T53nj0FSGdy4MrA3nSFik_AL9HnwMOsQ.cache @@ -0,0 +1 @@ +"%p4hDϫO׈iQ56BD!! \ No newline at end of file diff --git a/tmp/cache/assets/sprockets/v4.0.0/yk/ykla-6z6vyreEa4ZLBvLYDIJi2R4S3ZrbQM6fsCn4js.cache b/tmp/cache/assets/sprockets/v4.0.0/yk/ykla-6z6vyreEa4ZLBvLYDIJi2R4S3ZrbQM6fsCn4js.cache new file mode 100644 index 0000000000..65bfafd1ff Binary files /dev/null and b/tmp/cache/assets/sprockets/v4.0.0/yk/ykla-6z6vyreEa4ZLBvLYDIJi2R4S3ZrbQM6fsCn4js.cache differ diff --git a/tmp/cache/assets/sprockets/v4.0.0/zO/zO-wxFI8e3pOdk2NSD4AHBlgpvakmRZPo4DQNkGMzcs.cache b/tmp/cache/assets/sprockets/v4.0.0/zO/zO-wxFI8e3pOdk2NSD4AHBlgpvakmRZPo4DQNkGMzcs.cache new file mode 100644 index 0000000000..a5975eb921 --- /dev/null +++ b/tmp/cache/assets/sprockets/v4.0.0/zO/zO-wxFI8e3pOdk2NSD4AHBlgpvakmRZPo4DQNkGMzcs.cache @@ -0,0 +1 @@ +I"/bundle/ruby/3.3.0/gems/activestorage-7.1.6/app/assets/javascripts/activestorage.js?type=application/javascript&id=24e9a8ca3ccc72ce1d1ea3da0268eaef70fc86ae670a0416af84512670f74036:ET \ No newline at end of file diff --git a/tmp/cache/assets/sprockets/v4.0.0/zk/zkir5GIflpytzQ8o3EiCCjQfhLyespBMZhcak_PHsSk.cache b/tmp/cache/assets/sprockets/v4.0.0/zk/zkir5GIflpytzQ8o3EiCCjQfhLyespBMZhcak_PHsSk.cache new file mode 100644 index 0000000000..38ed963ea9 --- /dev/null +++ b/tmp/cache/assets/sprockets/v4.0.0/zk/zkir5GIflpytzQ8o3EiCCjQfhLyespBMZhcak_PHsSk.cache @@ -0,0 +1,3 @@ +[o:Set: +@hash} +I"environment-version:ETTI"environment-paths;TTI"rails-env;TTI">processors:type=text/css&file_type=text/css&pipeline=self;TTI"[file-digest:///bundle/ruby/3.3.0/gems/actiontext-7.1.6/app/assets/stylesheets/trix.css;TTF \ No newline at end of file diff --git a/tmp/cache/assets/sprockets/v4.0.0/zs/zswEFp6sJP1oGbnsueuGwkj-iyAI5cvs3lYCuxp1kHY.cache b/tmp/cache/assets/sprockets/v4.0.0/zs/zswEFp6sJP1oGbnsueuGwkj-iyAI5cvs3lYCuxp1kHY.cache new file mode 100644 index 0000000000..2bca939c54 --- /dev/null +++ b/tmp/cache/assets/sprockets/v4.0.0/zs/zswEFp6sJP1oGbnsueuGwkj-iyAI5cvs3lYCuxp1kHY.cache @@ -0,0 +1,2 @@ +[o:Set: +@hash} I"environment-version:ETTI"environment-paths;TTI"rails-env;TTI"Lprocessors:type=application/javascript&file_type=application/javascript;TTI"`file-digest:///bundle/ruby/3.3.0/gems/actiontext-7.1.6/app/assets/javascripts/actiontext.js;TTI"Zprocessors:type=application/javascript&file_type=application/javascript&pipeline=self;TTF \ No newline at end of file diff --git a/tmp/cache/assets/sprockets/v4.0.0/zx/zxRky1ef0-qpzKg650XC8I_-GSIRJwCi-Wj6Yr1eiLE.cache b/tmp/cache/assets/sprockets/v4.0.0/zx/zxRky1ef0-qpzKg650XC8I_-GSIRJwCi-Wj6Yr1eiLE.cache new file mode 100644 index 0000000000..f16915b42f --- /dev/null +++ b/tmp/cache/assets/sprockets/v4.0.0/zx/zxRky1ef0-qpzKg650XC8I_-GSIRJwCi-Wj6Yr1eiLE.cache @@ -0,0 +1,3 @@ +[o:Set: +@hash} +I"environment-version:ETTI"environment-paths;TTI"rails-env;TTI"Zprocessors:type=application/javascript&file_type=application/javascript&pipeline=self;TTI"dfile-digest:///bundle/ruby/3.3.0/gems/actiontext-7.1.6/app/assets/javascripts/actiontext.esm.js;TTF \ No newline at end of file diff --git a/vendor/javascript/.keep b/vendor/javascript/.keep new file mode 100644 index 0000000000..e69de29bb2