-
Notifications
You must be signed in to change notification settings - Fork 0
feat: added controller, views, tests for reports #240
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Changes from 7 commits
09fb22a
8f8abeb
ee29de6
18fc9ae
dd5ef7e
8cac48f
485e52c
f9a275f
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
AliK070 marked this conversation as resolved.
Show resolved
Hide resolved
|
| Original file line number | Diff line number | Diff line change | ||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| @@ -0,0 +1,28 @@ | ||||||||||||||||||||||||||||||
| <div class="mx-8 my-10"> | ||||||||||||||||||||||||||||||
| <div class="flex items-center justify-between mb-4"> | ||||||||||||||||||||||||||||||
| <h1 class="text-4xl font-bold"><%= t(".title") %></h1> | ||||||||||||||||||||||||||||||
| <%= render ActionButtonComponent.new(to: new_report_path, icon: "add", colour: :primary, size: :large) do %> | ||||||||||||||||||||||||||||||
| <%= t(".actions.create") %> | ||||||||||||||||||||||||||||||
| <% end %> | ||||||||||||||||||||||||||||||
| </div> | ||||||||||||||||||||||||||||||
| <%= render ContentCardComponent.new do %> | ||||||||||||||||||||||||||||||
| <%= render Shared::IndexTableComponent.new(records: @reports) do |table| %> | ||||||||||||||||||||||||||||||
| <% table.column :start_date, header: t(".columns.start_date") do |report| %> | ||||||||||||||||||||||||||||||
| <%= l(report.start_date) if report.start_date %> | ||||||||||||||||||||||||||||||
| <% end %> | ||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||
| <% table.column :end_date, header: t(".columns.end_date") do |report| %> | ||||||||||||||||||||||||||||||
| <%= l(report.end_date) if report.end_date %> | ||||||||||||||||||||||||||||||
| <% end %> | ||||||||||||||||||||||||||||||
| <% table.column :created_at, header: t(".columns.created_at") do |report| %> | ||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||
| <% table.column :start_date, header: t(".columns.start_date") do |report| %> | |
| <%= l(report.start_date) if report.start_date %> | |
| <% end %> | |
| <% table.column :end_date, header: t(".columns.end_date") do |report| %> | |
| <%= l(report.end_date) if report.end_date %> | |
| <% end %> | |
| <% table.column :created_at, header: t(".columns.created_at") do |report| %> | |
| <% table.column :start_date do |report| %> | |
| <%= l(report.start_date) if report.start_date %> | |
| <% end %> | |
| <% table.column :end_date do |report| %> | |
| <%= l(report.end_date) if report.end_date %> | |
| <% end %> | |
| <% table.column :created_at do |report| %> |
| Original file line number | Diff line number | Diff line change | ||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
|
@@ -4,6 +4,9 @@ en: | |||||||||||||
| create: | ||||||||||||||
| invalid: Please provide valid dates and select at least one subproject. | ||||||||||||||
| success: Report was successfully generated. | ||||||||||||||
| destroy: | ||||||||||||||
| confirm: Are you sure you want to delete this report? | ||||||||||||||
| success: Report deleted successfully. | ||||||||||||||
| edit: | ||||||||||||||
| add_aggregated_datum: Add Aggregated Data Box | ||||||||||||||
| add_journal: Add Journal | ||||||||||||||
|
|
@@ -18,6 +21,10 @@ en: | |||||||||||||
| save: Save Changes | ||||||||||||||
| selected_journals: Selected Journals | ||||||||||||||
| title: Edit Report | ||||||||||||||
| index: | ||||||||||||||
| actions: | ||||||||||||||
| create: Create Report | ||||||||||||||
| title: Reports | ||||||||||||||
|
||||||||||||||
| title: Reports | |
| title: Reports | |
| columns: | |
| start_date: Start Date | |
| end_date: End Date | |
| created_at: Created At |
| Original file line number | Diff line number | Diff line change | ||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
|
@@ -4,6 +4,9 @@ es: | |||||||||||||
| create: | ||||||||||||||
| invalid: Por favor proporcione fechas válidas y seleccione al menos un subproyecto. | ||||||||||||||
| success: El reporte fue generado exitosamente. | ||||||||||||||
| destroy: | ||||||||||||||
| confirm: "¿Está seguro de que desea eliminar este informe?" | ||||||||||||||
| success: Informe eliminado exitosamente. | ||||||||||||||
| edit: | ||||||||||||||
| add_aggregated_datum: Agregar Caja de Datos Agregados | ||||||||||||||
| add_journal: Agregar Diario | ||||||||||||||
|
|
@@ -18,6 +21,10 @@ es: | |||||||||||||
| save: Guardar Cambios | ||||||||||||||
| selected_journals: Diarios Seleccionados | ||||||||||||||
| title: Editar Reporte | ||||||||||||||
| index: | ||||||||||||||
| actions: | ||||||||||||||
| create: Crear informe | ||||||||||||||
|
||||||||||||||
| create: Crear informe | |
| create: Crear informe | |
| columns: | |
| start_date: Fecha de inicio | |
| end_date: Fecha de fin | |
| created_at: Fecha de creación |
| Original file line number | Diff line number | Diff line change | ||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
|
@@ -40,10 +40,6 @@ | |||||||||||||
| delete "/logout", to: "sessions#destroy" | ||||||||||||||
|
|
||||||||||||||
| # Report routes | ||||||||||||||
| resources :reports, only: %i[show new create edit update] do | ||||||||||||||
| collection do | ||||||||||||||
| get :filter | ||||||||||||||
| end | ||||||||||||||
| end | ||||||||||||||
| resources :reports, only: %i[index show new create edit update destroy] | ||||||||||||||
|
||||||||||||||
| resources :reports, only: %i[index show new create edit update destroy] | |
| resources :reports, only: %i[index show new create edit update destroy] do | |
| collection do | |
| get :filter | |
| end | |
| end |
| Original file line number | Diff line number | Diff line change | ||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
|
@@ -6,11 +6,12 @@ class ReportsControllerTest < ActionDispatch::IntegrationTest | |||||||||||||||||
| end | ||||||||||||||||||
|
|
||||||||||||||||||
| [ | ||||||||||||||||||
| { route: "index", method: :get, url_helper: :reports_url, needs_report: false }, | ||||||||||||||||||
| { route: "show", method: :get, url_helper: :report_url, needs_report: true }, | ||||||||||||||||||
| { route: "new", method: :get, url_helper: :new_report_url, needs_report: false }, | ||||||||||||||||||
| { route: "edit", method: :get, url_helper: :edit_report_url, needs_report: true }, | ||||||||||||||||||
| { route: "filter", method: :get, url_helper: :filter_reports_url, needs_report: false }, | ||||||||||||||||||
| { route: "update", method: :patch, url_helper: :report_url, needs_report: true } | ||||||||||||||||||
| { route: "update", method: :patch, url_helper: :report_url, needs_report: true }, | ||||||||||||||||||
| { route: "destroy", method: :delete, url_helper: :report_url, needs_report: true } | ||||||||||||||||||
| ].each do |hash| | ||||||||||||||||||
| test "##{hash[:route]} redirects to login route when a user is not authenticated" do | ||||||||||||||||||
| log_out_user | ||||||||||||||||||
|
|
@@ -64,20 +65,29 @@ class ReportsControllerTest < ActionDispatch::IntegrationTest | |||||||||||||||||
| assert_match aggregated_datum.additional_text, response.body | ||||||||||||||||||
| end | ||||||||||||||||||
|
|
||||||||||||||||||
| test "#filter displays projects when valid dates are provided" do | ||||||||||||||||||
| test "#index displays reports" do | ||||||||||||||||||
| report = create(:report) | ||||||||||||||||||
|
|
||||||||||||||||||
| get reports_path | ||||||||||||||||||
| assert_response :success | ||||||||||||||||||
| assert_match I18n.l(report.start_date.to_date), response.body | ||||||||||||||||||
| assert_match I18n.l(report.end_date.to_date), response.body | ||||||||||||||||||
| end | ||||||||||||||||||
|
|
||||||||||||||||||
| test "#new displays projects when valid dates are provided" do | ||||||||||||||||||
| subproject = create(:subproject) | ||||||||||||||||||
| create(:log_entry, subproject: subproject, created_at: 1.day.ago) | ||||||||||||||||||
|
|
||||||||||||||||||
| get filter_reports_path, params: { start_date: 2.days.ago.to_date.to_s, end_date: Time.zone.today.to_s } | ||||||||||||||||||
| get new_report_path, params: { start_date: 2.days.ago.to_date.to_s, end_date: Time.zone.today.to_s } | ||||||||||||||||||
| assert_response :success | ||||||||||||||||||
| assert_match subproject.project.name, response.body | ||||||||||||||||||
| end | ||||||||||||||||||
|
|
||||||||||||||||||
| test "#filter displays subprojects when projects are selected" do | ||||||||||||||||||
| test "#new displays subprojects when projects are selected" do | ||||||||||||||||||
| subproject = create(:subproject) | ||||||||||||||||||
| create(:log_entry, subproject: subproject, created_at: 1.day.ago) | ||||||||||||||||||
|
|
||||||||||||||||||
| get filter_reports_path, params: { | ||||||||||||||||||
| get new_report_path, params: { | ||||||||||||||||||
| start_date: 2.days.ago.to_date.to_s, | ||||||||||||||||||
| end_date: Time.zone.today.to_s, | ||||||||||||||||||
| project_ids: [subproject.project.id] | ||||||||||||||||||
|
|
@@ -86,16 +96,16 @@ class ReportsControllerTest < ActionDispatch::IntegrationTest | |||||||||||||||||
| assert_match subproject.name, response.body | ||||||||||||||||||
| end | ||||||||||||||||||
|
|
||||||||||||||||||
| test "#filter handles invalid dates gracefully" do | ||||||||||||||||||
| get filter_reports_path, params: { start_date: "invalid", end_date: "also-invalid" } | ||||||||||||||||||
| test "#new handles invalid dates gracefully" do | ||||||||||||||||||
| get new_report_path, params: { start_date: "invalid", end_date: "also-invalid" } | ||||||||||||||||||
| assert_response :success | ||||||||||||||||||
| end | ||||||||||||||||||
|
|
||||||||||||||||||
| test "#filter includes log entries from end date" do | ||||||||||||||||||
| test "#new includes log entries from end date" do | ||||||||||||||||||
| subproject = create(:subproject) | ||||||||||||||||||
| create(:log_entry, subproject: subproject, created_at: Time.zone.today.noon) | ||||||||||||||||||
|
|
||||||||||||||||||
| get filter_reports_path, params: { | ||||||||||||||||||
| get new_report_path, params: { | ||||||||||||||||||
| start_date: 2.days.ago.to_date.to_s, | ||||||||||||||||||
| end_date: Time.zone.today.to_s, | ||||||||||||||||||
| project_ids: [subproject.project.id] | ||||||||||||||||||
|
|
@@ -168,6 +178,48 @@ class ReportsControllerTest < ActionDispatch::IntegrationTest | |||||||||||||||||
| assert_equal I18n.t("reports.create.invalid"), flash[:error] | ||||||||||||||||||
| end | ||||||||||||||||||
|
|
||||||||||||||||||
| test "#create redirects with error when subproject_ids do not exist" do | ||||||||||||||||||
| assert_no_difference("Report.count") do | ||||||||||||||||||
| post reports_path, params: { | ||||||||||||||||||
| start_date: Time.zone.yesterday.to_s, | ||||||||||||||||||
| end_date: Time.zone.today.to_s, | ||||||||||||||||||
| subproject_ids: [0] | ||||||||||||||||||
| } | ||||||||||||||||||
| end | ||||||||||||||||||
|
|
||||||||||||||||||
| assert_redirected_to new_report_path | ||||||||||||||||||
| assert_equal I18n.t("reports.create.invalid"), flash[:error] | ||||||||||||||||||
| end | ||||||||||||||||||
|
|
||||||||||||||||||
| test "#destroy redirects to login route when a user is not authenticated" do | ||||||||||||||||||
| report = create(:report) | ||||||||||||||||||
| log_out_user | ||||||||||||||||||
|
|
||||||||||||||||||
| delete report_path(report) | ||||||||||||||||||
| assert_response :redirect | ||||||||||||||||||
| assert_redirected_to login_path | ||||||||||||||||||
| end | ||||||||||||||||||
|
|
||||||||||||||||||
|
Comment on lines
+193
to
+201
|
||||||||||||||||||
| test "#destroy redirects to login route when a user is not authenticated" do | |
| report = create(:report) | |
| log_out_user | |
| delete report_path(report) | |
| assert_response :redirect | |
| assert_redirected_to login_path | |
| end |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This icon is not used throughout this PR.