require "rails_helper" RSpec.describe Forms::DeleteLogsForm do let(:delete_logs_form) { described_class.new(attributes) } let(:attributes) do { log_type:, search_term:, current_user:, log_filters:, selected_ids:, delete_confirmation_path:, back_to_logs_path:, delete_path:, } end let(:log_type) { :lettings } let(:search_term) { "meaning" } let(:current_user) { create(:user) } let(:log_filters) do { "years" => [""], "status" => ["", "completed"], "user" => "yours", } end let(:selected_ids) { [visible_logs.first.id] } let(:delete_confirmation_path) { "/lettings-logs/delete-logs-confirmation" } let(:back_to_logs_path) { "/lettings-logs?search=meaning" } let(:delete_path) { "/lettings-logs/delete-logs" } let(:visible_logs) { create_list(:lettings_log, 3, created_by: current_user) } before do allow(FilterManager).to receive(:filter_logs).and_return visible_logs end it "exposes the log type" do expect(delete_logs_form.log_type).to be log_type end it "exposes the search term" do expect(delete_logs_form.search_term).to be search_term end it "exposes the paths" do expect(delete_logs_form.delete_confirmation_path).to be delete_confirmation_path expect(delete_logs_form.back_to_logs_path).to be back_to_logs_path expect(delete_logs_form.delete_path).to be delete_path end it "exposes the logs returned by the filter manager" do expect(delete_logs_form.logs).to be visible_logs end it "exposes the selected ids" do expect(delete_logs_form.selected_ids).to be selected_ids end context "when selected ids are not provided to the initializer" do let(:selected_ids) { nil } it "sets the selected ids to be all logs" do expect(delete_logs_form.selected_ids).to match_array visible_logs.map(&:id) end end it "calls the filter manager with the correct arguments" do create(:lettings_log) expect(FilterManager).to receive(:filter_logs) { |arg1, arg2, arg3, arg4, arg5| expect(arg1).to contain_exactly(*visible_logs) expect(arg2).to eq search_term expect(arg3).to eq log_filters expect(arg4).to be nil expect(arg5).to be current_user }.and_return visible_logs delete_logs_form end it "exposes the number of logs" do expect(delete_logs_form.log_count).to be visible_logs.count end it "provides the name of the table partial relevant to the log type" do expect(delete_logs_form.table_partial_name).to eq "logs/delete_logs_table_lettings" end end