From 7d90c63ded58c184a702c9a859e0fe8fef5522ea Mon Sep 17 00:00:00 2001 From: meyric Date: Wed, 26 Jun 2024 11:26:09 +0100 Subject: [PATCH 1/5] RPA, SUG and FA letters export does not include DAO projects --- CHANGELOG.md | 5 +++++ app/forms/export/new_rpa_sug_and_fa_letters_form.rb | 2 +- spec/forms/export/new_rpa_sug_and_fa_letters_form_spec.rb | 4 ++++ 3 files changed, 10 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index e14f42d76..5cc40cfab 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,6 +11,11 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). - Add the date an academy opened to the Grant management export for conversions - Add the team a project is assigned to to the RPA, SUG and FA letters export +### Changed + +- The RPA, SUG and FA letter export does not include conversion projects with a + revoked DAO. + ## [Release-76][release-76] ### Added diff --git a/app/forms/export/new_rpa_sug_and_fa_letters_form.rb b/app/forms/export/new_rpa_sug_and_fa_letters_form.rb index a652e34da..33eb2f42b 100644 --- a/app/forms/export/new_rpa_sug_and_fa_letters_form.rb +++ b/app/forms/export/new_rpa_sug_and_fa_letters_form.rb @@ -1,6 +1,6 @@ class Export::NewRpaSugAndFaLettersForm < Export::BaseForm def export - projects = Project.conversions.significant_date_in_range(from_date.to_s, to_date.to_s) + projects = Project.active.or(Project.completed).conversions.significant_date_in_range(from_date.to_s, to_date.to_s) pre_fetched_projects = AcademiesApiPreFetcherService.new.call!(projects) Export::Conversions::RpaSugAndFaLettersCsvExportService.new(pre_fetched_projects).call diff --git a/spec/forms/export/new_rpa_sug_and_fa_letters_form_spec.rb b/spec/forms/export/new_rpa_sug_and_fa_letters_form_spec.rb index a879ffdd2..8966d61e8 100644 --- a/spec/forms/export/new_rpa_sug_and_fa_letters_form_spec.rb +++ b/spec/forms/export/new_rpa_sug_and_fa_letters_form_spec.rb @@ -22,11 +22,15 @@ to_date = Date.new(2024, 4, 1) form = described_class.new(from_date: from_date, to_date: to_date) + allow(Project).to receive(:active).and_call_original + allow(Project).to receive(:completed).and_call_original allow(Project).to receive(:conversions).and_call_original allow(Project).to receive(:significant_date_in_range).and_call_original form.export + expect(Project).to have_received(:active) + expect(Project).to have_received(:completed) expect(Project).to have_received(:conversions) expect(Project).to have_received(:significant_date_in_range).with(from_date.to_s, to_date.to_s) end From 2a53f0feebd5ba2e91a335be61949f6071f1dbbe Mon Sep 17 00:00:00 2001 From: meyric Date: Wed, 26 Jun 2024 11:27:01 +0100 Subject: [PATCH 2/5] Use descriptive state Using enums is great for lots of reasons, one of them is we don't have to think about the mapping and what each values means, we can use the words and we should do so whenever we can to make our code more approachable. --- app/models/project.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/models/project.rb b/app/models/project.rb index ed35b8262..3561884eb 100644 --- a/app/models/project.rb +++ b/app/models/project.rb @@ -43,7 +43,7 @@ class Project < ApplicationRecord scope :transfers, -> { where(type: "Transfer::Project") } scope :ordered_by_completed_date, -> { completed.order(completed_at: :desc) } - scope :in_progress, -> { where(state: 0).assigned } + scope :in_progress, -> { where(state: :active).assigned } scope :assigned, -> { where.not(assigned_to: nil) } scope :assigned_to_caseworker, ->(user) { where(assigned_to: user).or(where(caseworker: user)) } From b873401c665537ccb400a297e246040ab5622e4f Mon Sep 17 00:00:00 2001 From: meyric Date: Wed, 26 Jun 2024 13:06:09 +0100 Subject: [PATCH 3/5] Add a DAO Revocation factory --- spec/factories/dao_revocation_factory.rb | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 spec/factories/dao_revocation_factory.rb diff --git a/spec/factories/dao_revocation_factory.rb b/spec/factories/dao_revocation_factory.rb new file mode 100644 index 000000000..e37277bee --- /dev/null +++ b/spec/factories/dao_revocation_factory.rb @@ -0,0 +1,10 @@ +FactoryBot.define do + factory :dao_revocation do + project { association :conversion_project } + decision_makers_name { "Minister Name" } + date_of_decision { Date.today - 1.week } + reason_school_rating_improved { false } + reason_safeguarding_addressed { false } + reason_school_closed { true } + end +end From ba1497f6d116d1533cad472d1c3ec3b5bf614986 Mon Sep 17 00:00:00 2001 From: meyric Date: Wed, 26 Jun 2024 13:22:05 +0100 Subject: [PATCH 4/5] Refactor ByMonthProjectFetcherService These two pairs of methods should return the same set of projects with the same sort order, which means we can DRY this up. We also add a new scope for this service: `active`. This only includes projects that are not completed or have the DAO revoked. A single month can be represented by passing two dates in the same month to the ranged fetcher. Although these dates are always the 1st, we felt the code should handle any case so we take steps to endure the from date is the 1st while the to date is the end of the month. We then have to ensure that even on routes that pass only a single date, we turn that into a from and to date, at the same time we try to ensure we are passing a Date object as much as possible, casting to strings as needed rather than passing strings about. We added the DateRangable controller concern for the common behaviour between the conversion and transfer controllers. --- CHANGELOG.md | 3 + .../conversions/projects_controller.rb | 2 +- .../by_month/transfers/projects_controller.rb | 2 +- .../all_data/projects_controller.rb | 24 ++--- .../transfers/all_data/projects_controller.rb | 17 ++-- app/controllers/concerns/date_rangable.rb | 28 ++++++ .../by_month_project_fetcher_service.rb | 22 +---- .../users_can_view_projects_by_month_spec.rb | 4 +- .../by_month_project_fetcher_service_spec.rb | 93 ++++++++++++------- 9 files changed, 115 insertions(+), 80 deletions(-) create mode 100644 app/controllers/concerns/date_rangable.rb diff --git a/CHANGELOG.md b/CHANGELOG.md index 5cc40cfab..514f57cc0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -15,6 +15,9 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). - The RPA, SUG and FA letter export does not include conversion projects with a revoked DAO. +- The by month exports do not include conversion projects with a revoked DAO. +- The single by month view and export are now sorted by the conversion or + transfer date only. ## [Release-76][release-76] diff --git a/app/controllers/all/by_month/conversions/projects_controller.rb b/app/controllers/all/by_month/conversions/projects_controller.rb index 8d57f986f..43a10fa97 100644 --- a/app/controllers/all/by_month/conversions/projects_controller.rb +++ b/app/controllers/all/by_month/conversions/projects_controller.rb @@ -48,7 +48,7 @@ def single_month @year = year @date = "#{year}-#{month}-1" - @pager, @projects = pagy_array(ByMonthProjectFetcherService.new.conversion_projects_by_date(month, year)) + @pager, @projects = pagy_array(ByMonthProjectFetcherService.new.conversion_projects_by_date_range(@date, @date)) end private def redirect_if_dates_incorrect diff --git a/app/controllers/all/by_month/transfers/projects_controller.rb b/app/controllers/all/by_month/transfers/projects_controller.rb index d350808dc..130d0bac5 100644 --- a/app/controllers/all/by_month/transfers/projects_controller.rb +++ b/app/controllers/all/by_month/transfers/projects_controller.rb @@ -48,7 +48,7 @@ def single_month @year = year @date = "#{year}-#{month}-1" - @pager, @projects = pagy_array(ByMonthProjectFetcherService.new.transfer_projects_by_date(month, year)) + @pager, @projects = pagy_array(ByMonthProjectFetcherService.new.transfer_projects_by_date_range(@date, @date)) end private def redirect_if_dates_incorrect diff --git a/app/controllers/all/export/by_significant_date/conversions/all_data/projects_controller.rb b/app/controllers/all/export/by_significant_date/conversions/all_data/projects_controller.rb index ffbf7b690..b98d68f26 100644 --- a/app/controllers/all/export/by_significant_date/conversions/all_data/projects_controller.rb +++ b/app/controllers/all/export/by_significant_date/conversions/all_data/projects_controller.rb @@ -1,30 +1,30 @@ class All::Export::BySignificantDate::Conversions::AllData::ProjectsController < ApplicationController + include DateRangable + def date_range_csv authorize Project, :index? - from_date = "#{params[:from_year]}-#{params[:from_month]}-1" - to_date = "#{params[:to_year]}-#{params[:to_month]}-1" - return redirect_if_dates_incorrect if Date.parse(to_date) < Date.parse(from_date) + return redirect_if_dates_incorrect if @to_date < @from_date - projects = ByMonthProjectFetcherService.new.conversion_projects_by_date_range(from_date, to_date) - csv = Export::Conversions::AllDataCsvExportService.new(projects).call + csv = create_csv - send_data csv, filename: "#{from_date}-#{to_date}_schools_due_to_convert.csv", type: :csv, disposition: "attachment" + send_data csv, filename: "#{@from_date}-#{@to_date}_schools_due_to_convert.csv", type: :csv, disposition: "attachment" end def single_month_csv authorize Project, :index? - month = params[:month] - year = params[:year] - - projects = ByMonthProjectFetcherService.new.conversion_projects_by_date(month, year) - csv = Export::Conversions::AllDataCsvExportService.new(projects).call + csv = create_csv - send_data csv, filename: "#{month}-#{year}_schools_due_to_convert.csv", type: :csv, disposition: "attachment" + send_data csv, filename: "#{@from_date.month}-#{@from_date.year}_schools_due_to_convert.csv", type: :csv, disposition: "attachment" end private def redirect_if_dates_incorrect redirect_to date_range_this_month_all_by_month_conversions_projects_path, alert: I18n.t("project.date_range.date_form.from_date_before_to_date") end + + private def create_csv + projects = ByMonthProjectFetcherService.new.conversion_projects_by_date_range(@from_date.to_s, @to_date.to_s) + Export::Conversions::AllDataCsvExportService.new(projects).call + end end diff --git a/app/controllers/all/export/by_significant_date/transfers/all_data/projects_controller.rb b/app/controllers/all/export/by_significant_date/transfers/all_data/projects_controller.rb index e4b9abdec..12af5f078 100644 --- a/app/controllers/all/export/by_significant_date/transfers/all_data/projects_controller.rb +++ b/app/controllers/all/export/by_significant_date/transfers/all_data/projects_controller.rb @@ -1,27 +1,24 @@ class All::Export::BySignificantDate::Transfers::AllData::ProjectsController < ApplicationController + include DateRangable + def date_range_csv authorize Project, :index? - from_date = "#{params[:from_year]}-#{params[:from_month]}-1" - to_date = "#{params[:to_year]}-#{params[:to_month]}-1" - return redirect_if_dates_incorrect if Date.parse(to_date) < Date.parse(from_date) + return redirect_if_dates_incorrect if @to_date < @from_date - projects = ByMonthProjectFetcherService.new.transfer_projects_by_date_range(from_date, to_date) + projects = ByMonthProjectFetcherService.new.transfer_projects_by_date_range(@from_date.to_s, @to_date.to_s) csv = Export::Transfers::AllDataCsvExportService.new(projects).call - send_data csv, filename: "#{from_date}-#{to_date}_academies_due_to_transfer.csv", type: :csv, disposition: "attachment" + send_data csv, filename: "#{@from_date}-#{@to_date}_academies_due_to_transfer.csv", type: :csv, disposition: "attachment" end def single_month_csv authorize Project, :index? - month = params[:month] - year = params[:year] - - projects = ByMonthProjectFetcherService.new.transfer_projects_by_date(month, year) + projects = ByMonthProjectFetcherService.new.transfer_projects_by_date_range(@from_date.to_s, @to_date.to_s) csv = Export::Transfers::AllDataCsvExportService.new(projects).call - send_data csv, filename: "#{month}-#{year}_academies_due_to_transfer.csv", type: :csv, disposition: "attachment" + send_data csv, filename: "#{@from_date.month}-#{@from_date.year}_academies_due_to_transfer.csv", type: :csv, disposition: "attachment" end private def redirect_if_dates_incorrect diff --git a/app/controllers/concerns/date_rangable.rb b/app/controllers/concerns/date_rangable.rb new file mode 100644 index 000000000..c67b938c7 --- /dev/null +++ b/app/controllers/concerns/date_rangable.rb @@ -0,0 +1,28 @@ +module DateRangable + extend ActiveSupport::Concern + + included do + before_action :set_from_and_to_date + end + + private def set_from_and_to_date + if ranged_params? + from_year = params[:from_year] + from_month = params[:from_month] + to_year = params[:to_year] + to_month = params[:to_month] + else + from_year = params[:year] + from_month = params[:month] + to_year = params[:year] + to_month = params[:month] + end + + @from_date = Date.new(from_year.to_i, from_month.to_i).at_beginning_of_month + @to_date = Date.new(to_year.to_i, to_month.to_i).at_end_of_month + end + + private def ranged_params? + params[:from_year].present? && params[:from_month].present? && params[:to_year].present? && params[:to_month].present? + end +end diff --git a/app/services/by_month_project_fetcher_service.rb b/app/services/by_month_project_fetcher_service.rb index 6889461f5..b482e6b95 100644 --- a/app/services/by_month_project_fetcher_service.rb +++ b/app/services/by_month_project_fetcher_service.rb @@ -4,32 +4,14 @@ def initialize(pre_fetch_academies_api: true) end def conversion_projects_by_date_range(from_date, to_date) - projects = Project.conversions.in_progress.confirmed.significant_date_in_range(from_date, to_date) + projects = Project.active.conversions.in_progress.confirmed.significant_date_in_range(from_date, to_date) AcademiesApiPreFetcherService.new.call!(projects) if @pre_fetch_academies_api end def transfer_projects_by_date_range(from_date, to_date) - projects = Project.transfers.in_progress.confirmed.significant_date_in_range(from_date, to_date) + projects = Project.active.transfers.in_progress.confirmed.significant_date_in_range(from_date, to_date) AcademiesApiPreFetcherService.new.call!(projects) if @pre_fetch_academies_api end - - def conversion_projects_by_date(month, year) - projects = Project.conversions.confirmed.filtered_by_significant_date(month, year) - - AcademiesApiPreFetcherService.new.call!(projects) if @pre_fetch_academies_api - sort_by_conditions_met_and_name(projects) - end - - def transfer_projects_by_date(month, year) - projects = Project.transfers.confirmed.filtered_by_significant_date(month, year) - - AcademiesApiPreFetcherService.new.call!(projects) if @pre_fetch_academies_api - sort_by_conditions_met_and_name(projects) - end - - private def sort_by_conditions_met_and_name(projects) - projects.sort_by { |p| [p.all_conditions_met? ? 0 : 1, p.establishment.name] } - end end diff --git a/spec/features/all_projects/by_month/users_can_view_projects_by_month_spec.rb b/spec/features/all_projects/by_month/users_can_view_projects_by_month_spec.rb index 2c9ca47ce..dafaf330f 100644 --- a/spec/features/all_projects/by_month/users_can_view_projects_by_month_spec.rb +++ b/spec/features/all_projects/by_month/users_can_view_projects_by_month_spec.rb @@ -20,7 +20,7 @@ click_on "Apply" click_on "download a more detailed version of the data as a CSV file" - expect(page.response_headers["Content-Disposition"]).to include("2023-1-1-2023-12-1_schools_due_to_convert.csv") + expect(page.response_headers["Content-Disposition"]).to include("2023-01-01-2023-12-31_schools_due_to_convert.csv") end scenario "the user can download a CSV of transfer projects" do @@ -33,7 +33,7 @@ click_on "Apply" click_on "download a more detailed version of the data as a CSV file" - expect(page.response_headers["Content-Disposition"]).to include("2023-1-1-2023-12-1_academies_due_to_transfer.csv") + expect(page.response_headers["Content-Disposition"]).to include("2023-01-01-2023-12-31_academies_due_to_transfer.csv") end end diff --git a/spec/services/by_month_project_fetcher_service_spec.rb b/spec/services/by_month_project_fetcher_service_spec.rb index e8c9bfcdf..f9e0cd7cc 100644 --- a/spec/services/by_month_project_fetcher_service_spec.rb +++ b/spec/services/by_month_project_fetcher_service_spec.rb @@ -7,6 +7,40 @@ mock_all_academies_api_responses end + it "only includes active projects that are assigned to a user" do + significant_date = Date.parse("2023-1-1") + user = create(:user) + dao_project = create( + :conversion_project, + significant_date: significant_date, + significant_date_provisional: false, + directive_academy_order: true, + state: :dao_revoked, + assigned_to: user + ) + create(:dao_revocation, project: dao_project) + + _completed_project = create( + :conversion_project, + completed_at: Date.today, + state: :completed, + significant_date: significant_date, + significant_date_provisional: false, + assigned_to: user + ) + + _unassigned_project = create( + :conversion_project, + significant_date: significant_date, + significant_date_provisional: false, + assigned_to: nil + ) + + result = described_class.new.conversion_projects_by_date_range("2023-1-1", "2023-1-1") + + expect(result).to be_empty + end + it "returns all conversion projects with a confirmed date in the desired range, and orders by significant date" do january = Date.parse("2023-1-1") february = Date.parse("2023-2-1") @@ -37,6 +71,31 @@ mock_all_academies_api_responses end + it "only includes active projects that are assigned to a user" do + significant_date = Date.parse("2023-1-1") + user = create(:user) + + _completed_project = create( + :transfer_project, + completed_at: Date.today, + state: :completed, + significant_date: significant_date, + significant_date_provisional: false, + assigned_to: user + ) + + _unassigned_project = create( + :transfer_project, + significant_date: significant_date, + significant_date_provisional: false, + assigned_to: nil + ) + + result = described_class.new.transfer_projects_by_date_range("2023-1-1", "2023-1-1") + + expect(result).to be_empty + end + it "returns all transfer projects with a confirmed date in the desired range, and orders by significant date" do january = Date.parse("2023-1-1") february = Date.parse("2023-2-1") @@ -60,38 +119,4 @@ end end end - - describe "#conversion_projects_by_date" do - context "with prefetching disabled for this test" do - it "returns conversion projects and orders by all conditions met & establishment name" do - project_one = double(Conversion::Project, all_conditions_met?: false, establishment: double("Establishment", name: "Y school")) - project_two = double(Conversion::Project, all_conditions_met?: false, establishment: double("Establishment", name: "B school")) - project_three = double(Conversion::Project, all_conditions_met?: false, establishment: double("Establishment", name: "A school")) - project_four = double(Conversion::Project, all_conditions_met?: true, establishment: double("Establishment", name: "Z school")) - - allow(Project).to receive(:filtered_by_significant_date).and_return([project_one, project_two, project_three, project_four]) - - projects = described_class.new(pre_fetch_academies_api: false).conversion_projects_by_date(1, 2025) - - expect(projects).to eq [project_four, project_three, project_two, project_one] - end - end - end - - describe "#transfer_projects_by_date" do - context "with prefetching disabled for this test" do - it "returns transfer projects and orders by all conditions met & establishment name" do - project_one = double(Transfer::Project, all_conditions_met?: false, establishment: double("Establishment", name: "Y school")) - project_two = double(Transfer::Project, all_conditions_met?: false, establishment: double("Establishment", name: "B school")) - project_three = double(Transfer::Project, all_conditions_met?: false, establishment: double("Establishment", name: "A school")) - project_four = double(Transfer::Project, all_conditions_met?: true, establishment: double("Establishment", name: "Z school")) - - allow(Project).to receive(:filtered_by_significant_date).and_return([project_one, project_two, project_three, project_four]) - - projects = described_class.new(pre_fetch_academies_api: false).transfer_projects_by_date(1, 2025) - - expect(projects).to eq [project_four, project_three, project_two, project_one] - end - end - end end From 4264c90cc61f0811638556f7ea4973415367c0b2 Mon Sep 17 00:00:00 2001 From: meyric Date: Wed, 26 Jun 2024 13:59:09 +0100 Subject: [PATCH 5/5] Include the state of DAO in export We think the users of the pre conversion grant export will want to see DAO projects, but there would be no way to identify them. This work adds a 'Directive academy order revoked' column to this export so that users can identify any that have been revoked. The value will be one of: - Not applicable, when the project has no DAO - 'no', when the project has a DAO but it has not been revoked - date, the date on which the DAO revocation decision was made, this value is capture during the revocation steps --- CHANGELOG.md | 2 ++ .../export/csv/project_presenter.rb | 10 ++++++ ...re_conversion_grants_csv_export_service.rb | 1 + config/locales/export/csv/project.en.yml | 1 + .../export/csv/project_presenter_spec.rb | 33 +++++++++++++++++++ 5 files changed, 47 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 514f57cc0..f81b82597 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -18,6 +18,8 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). - The by month exports do not include conversion projects with a revoked DAO. - The single by month view and export are now sorted by the conversion or transfer date only. +- The pre conversion grants export includes a new column that shows the DAO + revocation state of a project as applicable. ## [Release-76][release-76] diff --git a/app/presenters/export/csv/project_presenter.rb b/app/presenters/export/csv/project_presenter.rb index db33d3cf5..1f0bd8d55 100644 --- a/app/presenters/export/csv/project_presenter.rb +++ b/app/presenters/export/csv/project_presenter.rb @@ -332,6 +332,16 @@ def declaration_of_expenditure_certificate_date_received @project.tasks_data.declaration_of_expenditure_certificate_date_received.to_fs(:csv) end + def dao_revoked + return I18n.t("export.csv.project.values.not_applicable") unless @project.dao_revokable? + + if @project.dao_revoked? + @project.dao_revocation.date_of_decision.to_fs(:csv) + else + I18n.t("export.csv.project.values.no") + end + end + private def other_contact @contacts_fetcher.other_contact end diff --git a/app/services/export/conversions/pre_conversion_grants_csv_export_service.rb b/app/services/export/conversions/pre_conversion_grants_csv_export_service.rb index d0bf22492..e636c5a51 100644 --- a/app/services/export/conversions/pre_conversion_grants_csv_export_service.rb +++ b/app/services/export/conversions/pre_conversion_grants_csv_export_service.rb @@ -14,6 +14,7 @@ class Export::Conversions::PreConversionGrantsCsvExportService < Export::CsvExpo conversion_date date_academy_opened academy_order_type + dao_revoked completed_grant_payment_certificate_received two_requires_improvement sponsored_grant_type diff --git a/config/locales/export/csv/project.en.yml b/config/locales/export/csv/project.en.yml index 33e3f4e1e..a5913ac15 100644 --- a/config/locales/export/csv/project.en.yml +++ b/config/locales/export/csv/project.en.yml @@ -12,6 +12,7 @@ en: risk_protection_arrangement_reason: Reason for commercial insurance advisory_board_date: Advisory board date academy_order_type: Academy order type + dao_revoked: Directive academy order revoked reception_to_six_years: Proposed capacity for pupils in reception to year 6 seven_to_eleven_years: Proposed capacity for pupils in years 7 to 11 twelve_or_above_years: Proposed capacity for students in year 12 or above diff --git a/spec/presenters/export/csv/project_presenter_spec.rb b/spec/presenters/export/csv/project_presenter_spec.rb index abe721d1f..fb068cd7c 100644 --- a/spec/presenters/export/csv/project_presenter_spec.rb +++ b/spec/presenters/export/csv/project_presenter_spec.rb @@ -955,4 +955,37 @@ end end end + + describe "#dao_revoked" do + it "presents not applicable when dao revocation does not apply" do + project = build(:transfer_project) + + presenter = described_class.new(project) + + expect(presenter.dao_revoked).to eql "not applicable" + + project = build(:conversion_project, directive_academy_order: false) + + presenter = described_class.new(project) + + expect(presenter.dao_revoked).to eql "not applicable" + end + + it "presents 'no' when the dao has not be revoked" do + project = build(:conversion_project, directive_academy_order: true) + + presenter = described_class.new(project) + + expect(presenter.dao_revoked).to eql "no" + end + + it "presents the date of the decision to revoke when it has been" do + project = build(:conversion_project, directive_academy_order: true, state: :dao_revoked) + dao_revocation = create(:dao_revocation, project: project) + + presenter = described_class.new(project) + + expect(presenter.dao_revoked).to eql dao_revocation.date_of_decision.to_fs(:csv) + end + end end