-
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 6 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 |
|---|---|---|
| @@ -1,4 +1,8 @@ | ||
| class ReportsController < ApplicationController | ||
| def index | ||
| @reports = Report.all | ||
| end | ||
|
|
||
| def show | ||
| @report = Report.find(params[:id]) | ||
| end | ||
|
|
@@ -11,30 +15,6 @@ def edit | |
| render :show | ||
| end | ||
|
|
||
| def filter | ||
| start_date = parse_date(params[:start_date]) | ||
| end_date = parse_date(params[:end_date]) | ||
|
|
||
| if start_date && end_date && start_date <= end_date | ||
| @start_date = params[:start_date] | ||
| @end_date = params[:end_date] | ||
|
|
||
| result = ReportFilterService.new.filter( | ||
| start_date: start_date, | ||
| end_date: end_date, | ||
| project_ids: Array(params[:project_ids]), | ||
| subproject_ids: Array(params[:subproject_ids]) | ||
| ) | ||
|
|
||
| @projects = result.projects | ||
| @selected_project_ids = result.selected_project_ids | ||
| @subprojects = result.subprojects | ||
| @selected_subproject_ids = result.selected_subproject_ids | ||
| end | ||
|
|
||
| render :new | ||
| end | ||
|
|
||
| def create | ||
| start_date = parse_date(params[:start_date]) | ||
| end_date = parse_date(params[:end_date]) | ||
|
|
@@ -71,6 +51,40 @@ def create | |
| redirect_to edit_report_path(report), flash: { success: t(".success") } | ||
| end | ||
AliK070 marked this conversation as resolved.
Show resolved
Hide resolved
|
||
|
|
||
| def destroy | ||
| @report = Report.find(params[:id]) | ||
|
|
||
| if @report.destroy | ||
| redirect_to reports_path, flash: { success: t(".success") } | ||
| else | ||
| redirect_to reports_path, flash: { error: @report.errors.full_messages.to_sentence } | ||
| end | ||
| end | ||
|
|
||
| def filter | ||
| start_date = parse_date(params[:start_date]) | ||
| end_date = parse_date(params[:end_date]) | ||
|
|
||
| if start_date && end_date && start_date <= end_date | ||
| @start_date = params[:start_date] | ||
| @end_date = params[:end_date] | ||
|
|
||
| result = ReportFilterService.new.filter( | ||
| start_date: start_date, | ||
| end_date: end_date, | ||
| project_ids: Array(params[:project_ids]), | ||
| subproject_ids: Array(params[:subproject_ids]) | ||
| ) | ||
|
|
||
| @projects = result.projects | ||
| @selected_project_ids = result.selected_project_ids | ||
| @subprojects = result.subprojects | ||
| @selected_subproject_ids = result.selected_subproject_ids | ||
| end | ||
|
|
||
| render :new | ||
| end | ||
|
||
|
|
||
| private | ||
|
|
||
| def parse_date(value) | ||
|
|
||
| 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,17 @@ 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. | ||||||||||||||
| index: | ||||||||||||||
| actions: | ||||||||||||||
| create: Create Report | ||||||||||||||
| columns: | ||||||||||||||
| created_at: Created At | ||||||||||||||
| end_date: End Date | ||||||||||||||
| start_date: Start Date | ||||||||||||||
| 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,17 @@ 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. | ||||||||||||||
| 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 | ||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
|
@@ -6,6 +6,7 @@ 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 }, | ||||||||||||||||||
|
|
@@ -57,6 +58,15 @@ class ReportsControllerTest < ActionDispatch::IntegrationTest | |||||||||||||||||
| assert_match aggregated_datum.additional_text, response.body | ||||||||||||||||||
| end | ||||||||||||||||||
|
|
||||||||||||||||||
| 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 "#filter displays projects when valid dates are provided" do | ||||||||||||||||||
| subproject = create(:subproject) | ||||||||||||||||||
| create(:log_entry, subproject: subproject, created_at: 1.day.ago) | ||||||||||||||||||
|
|
@@ -160,4 +170,46 @@ class ReportsControllerTest < ActionDispatch::IntegrationTest | |||||||||||||||||
| assert_redirected_to new_report_path | ||||||||||||||||||
| 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.