You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							579 lines
						
					
					
						
							21 KiB
						
					
					
				
			
		
		
	
	
							579 lines
						
					
					
						
							21 KiB
						
					
					
				require "rails_helper" | 
						|
require "rake" | 
						|
 | 
						|
RSpec.describe Csv::LettingsLogCsvService do | 
						|
  subject(:task) { Rake::Task["data_import:add_variable_definitions"] } | 
						|
 | 
						|
  before do | 
						|
    Rake.application.rake_require("tasks/log_variable_definitions") | 
						|
    Rake::Task.define_task(:environment) | 
						|
    task.reenable | 
						|
    task.invoke("spec/fixtures/variable_definitions") | 
						|
  end | 
						|
 | 
						|
  context "when downloading a csv" do | 
						|
    let(:log) { create(:lettings_log) } | 
						|
    let(:user) { create(:user, :support, email: "s.port@jeemayle.com") } | 
						|
    let(:service) { described_class.new(user:, export_type:, year:) } | 
						|
    let(:export_type) { "labels" } | 
						|
    let(:year) { 2024 } | 
						|
    let(:csv) { CSV.parse(service.prepare_csv(LettingsLog.where(id: logs.map(&:id)))) } | 
						|
    let(:logs) { [log] } | 
						|
    let(:definition_line) { csv.first } | 
						|
    let(:attribute_line) { csv.second } | 
						|
    let(:content_line) { csv.third } | 
						|
 | 
						|
    it "returns a string" do | 
						|
      result = service.prepare_csv(LettingsLog.all) | 
						|
      expect(result).to be_a String | 
						|
    end | 
						|
 | 
						|
    it "returns a csv with definition headers on the first line" do | 
						|
      expect(definition_line.first).to eq "Log ID" | 
						|
    end | 
						|
 | 
						|
    it "returns a csv with attribute headers on the second line" do | 
						|
      expect(attribute_line.first).to eq "id" | 
						|
    end | 
						|
 | 
						|
    context "when stubbing :ordered_questions_for_year" do | 
						|
      let(:form_handler_mock) { instance_double(FormHandler) } | 
						|
      let(:lettings_form) do | 
						|
        FormFactory.new(year: 2050, type: "lettings") | 
						|
                   .with_sections([build(:section, :with_questions, question_ids:, questions:)]) | 
						|
                   .build | 
						|
      end | 
						|
      let(:question_ids) { [] } | 
						|
      let(:questions) { nil } | 
						|
      let(:year) { 2050 } | 
						|
 | 
						|
      before do | 
						|
        allow(FormHandler).to receive(:instance).and_return(form_handler_mock) | 
						|
        allow(form_handler_mock).to receive(:form_name_from_start_year) | 
						|
        allow(form_handler_mock).to receive(:get_form).and_return(lettings_form) | 
						|
        allow(form_handler_mock).to receive(:ordered_questions_for_year).and_return(lettings_form.questions) | 
						|
        allow(form_handler_mock).to receive(:lettings_in_crossover_period?).and_return(true) | 
						|
      end | 
						|
 | 
						|
      it "calls the form handler to get all questions for the specified year" do | 
						|
        allow(FormHandler).to receive(:instance).and_return(form_handler_mock) | 
						|
        allow(form_handler_mock).to receive(:ordered_questions_for_year).and_return([]) | 
						|
        service.prepare_csv(LettingsLog.all) | 
						|
        expect(form_handler_mock).to have_received(:ordered_questions_for_year).with(2050, "lettings") | 
						|
      end | 
						|
 | 
						|
      context "when it returns questions with particular ids" do | 
						|
        let(:question_ids) { %w[prevten startdate brent rent_type] } | 
						|
 | 
						|
        it "includes log attributes related to questions to the headers" do | 
						|
          expect(attribute_line).to include(*question_ids.first(3)) | 
						|
        end | 
						|
 | 
						|
        it "removes some log attributes related to questions from the headers and replaces them with their derived values in the correct order" do | 
						|
          expect(attribute_line).not_to include "rent_type" | 
						|
          expect(attribute_line).to include(*%w[wrent renttype renttype_detail]) | 
						|
          expect(attribute_line).not_to include("rent_type_detail") | 
						|
        end | 
						|
      end | 
						|
 | 
						|
      context "when it returns checkbox questions" do | 
						|
        let(:questions) do | 
						|
          [ | 
						|
            build(:question, id: "condition_effects", type: "checkbox", answer_options: { "illness_type_1" => {}, "illness_type_2" => {}, "illness_type_3" => {} }), | 
						|
            build(:question, id: "letting_allocation", type: "checkbox", answer_options: { "cbl" => {}, "cap" => {}, "chr" => {}, "accessible_register" => {} }), | 
						|
          ] | 
						|
        end | 
						|
 | 
						|
        it "does not add the id of the checkbox question to the headers" do | 
						|
          question_ids = questions.map(&:id) | 
						|
          expect(attribute_line).not_to include(*question_ids) | 
						|
        end | 
						|
 | 
						|
        it "adds the related log attributes from the answer options to the headers" do | 
						|
          log_attributes = questions.flat_map { |q| q.answer_options.keys } | 
						|
          expect(attribute_line).to include(*log_attributes) | 
						|
        end | 
						|
      end | 
						|
    end | 
						|
 | 
						|
    it "adds log attributes not related to questions to the headers" do | 
						|
      expect(attribute_line.first(5)).to eq %w[id status duplicate_set_id created_by assigned_to] | 
						|
    end | 
						|
 | 
						|
    it "adds attributes related to associated schemes and locations to the headers" do | 
						|
      expect(attribute_line).to include(*%w[scheme_service_name scheme_confidential SCHTYPE scheme_registered_under_care_act]) | 
						|
      expect(attribute_line.last(5)).to eq %w[location_units location_type_of_unit location_mobility_type location_local_authority location_startdate] | 
						|
    end | 
						|
 | 
						|
    context "when there are many logs" do | 
						|
      let(:logs) { create_list(:lettings_log, log_count) } | 
						|
      let(:log_count) { 30 } | 
						|
 | 
						|
      it "creates a CSV with the correct number of logs" do | 
						|
        expected_row_count_with_headers = log_count + 2 | 
						|
        expect(csv.size).to be expected_row_count_with_headers | 
						|
      end | 
						|
    end | 
						|
 | 
						|
    context "when exporting with human readable labels" do | 
						|
      let(:export_type) { "labels" } | 
						|
      let(:log) { create(:lettings_log, :setup_completed, hhmemb: 2, details_known_2: 0, relat2: "P", age1: 35, la: "E09000003", duplicate_set_id: 12_312) } | 
						|
 | 
						|
      it "gives answer to radio questions as labels" do | 
						|
        relat2_column_index = attribute_line.index("relat2") | 
						|
        relat2_value = content_line[relat2_column_index] | 
						|
        expect(relat2_value).to eq "Partner" | 
						|
      end | 
						|
 | 
						|
      it "gives answers to free input questions as the user input" do | 
						|
        age1_column_index = attribute_line.index("age1") | 
						|
        age1_value = content_line[age1_column_index] | 
						|
        expect(age1_value).to eq 35.to_s | 
						|
      end | 
						|
 | 
						|
      it "exports the code for the local authority under the heading 'la'" do | 
						|
        la_column_index = attribute_line.index("la") | 
						|
        la_value = content_line[la_column_index] | 
						|
        expect(la_value).to eq "E09000003" | 
						|
      end | 
						|
 | 
						|
      it "exports the label for the local authority under the heading 'la_label'" do | 
						|
        la_label_column_index = attribute_line.index("la_label") | 
						|
        la_label_value = content_line[la_label_column_index] | 
						|
        expect(la_label_value).to eq "Barnet" | 
						|
      end | 
						|
 | 
						|
      it "exports the id for under the heading 'duplicate_set_id'" do | 
						|
        duplicate_set_id_column_index = attribute_line.index("duplicate_set_id") | 
						|
        duplicate_set_id_value = content_line[duplicate_set_id_column_index] | 
						|
        expect(duplicate_set_id_value).to eq "12312" | 
						|
      end | 
						|
    end | 
						|
 | 
						|
    context "when exporting as codes" do | 
						|
      let(:export_type) { "codes" } | 
						|
      let(:log) { create(:lettings_log, :setup_completed, hhmemb: 2, details_known_2: 0, relat2: "P", age1: 35, la: "E09000003", duplicate_set_id: 12_312) } | 
						|
 | 
						|
      it "gives answer to radio questions as labels" do | 
						|
        relat2_column_index = attribute_line.index("relat2") | 
						|
        relat2_value = content_line[relat2_column_index] | 
						|
        expect(relat2_value).to eq "P" | 
						|
      end | 
						|
 | 
						|
      it "gives answers to free input questions as the user input" do | 
						|
        age1_column_index = attribute_line.index("age1") | 
						|
        age1_value = content_line[age1_column_index] | 
						|
        expect(age1_value).to eq 35.to_s | 
						|
      end | 
						|
 | 
						|
      it "exports the code for the local authority under the heading 'la'" do | 
						|
        la_column_index = attribute_line.index("la") | 
						|
        la_value = content_line[la_column_index] | 
						|
        expect(la_value).to eq "E09000003" | 
						|
      end | 
						|
 | 
						|
      it "exports the label for the local authority under the heading 'la_label'" do | 
						|
        la_label_column_index = attribute_line.index("la_label") | 
						|
        la_label_value = content_line[la_label_column_index] | 
						|
        expect(la_label_value).to eq "Barnet" | 
						|
      end | 
						|
 | 
						|
      it "exports the duplicate log reference under the heading 'duplicate_set_id'" do | 
						|
        duplicate_set_id_column_index = attribute_line.index("duplicate_set_id") | 
						|
        duplicate_set_id_value = content_line[duplicate_set_id_column_index] | 
						|
        expect(duplicate_set_id_value).to eq "12312" | 
						|
      end | 
						|
    end | 
						|
 | 
						|
    context "when the user is not a support user" do | 
						|
      let(:user) { create(:user, :data_coordinator, email: "choreographer@owtluk.com") } | 
						|
 | 
						|
      it "does not include certain attributes in the headers" do | 
						|
        expect(attribute_line).not_to include(*%w[wrent wscharge wpschrge wsupchrg wtcharge]) | 
						|
      end | 
						|
    end | 
						|
 | 
						|
    describe "the full CSV output" do | 
						|
      context "when the requested log year is 2024" do | 
						|
        let(:year) { 2024 } | 
						|
        let(:organisation) { create(:organisation, provider_type: "LA", name: "MHCLG") } | 
						|
        let(:log) do | 
						|
          create( | 
						|
            :lettings_log, | 
						|
            :ignore_validation_errors, | 
						|
            created_by: user, | 
						|
            assigned_to: user, | 
						|
            created_at: Time.zone.local(2024, 4, 1), | 
						|
            updated_at: Time.zone.local(2024, 4, 1), | 
						|
            owning_organisation: organisation, | 
						|
            managing_organisation: organisation, | 
						|
            needstype: 1, | 
						|
            renewal: 0, | 
						|
            startdate: Time.zone.local(2024, 4, 1), | 
						|
            rent_type: 1, | 
						|
            tenancycode: "HIJKLMN", | 
						|
            propcode: "ABCDEFG", | 
						|
            declaration: 1, | 
						|
            address_line1: "Address line 1", | 
						|
            town_or_city: "London", | 
						|
            postcode_full: "NW9 5LL", | 
						|
            la: "E09000003", | 
						|
            is_la_inferred: false, | 
						|
            address_line1_as_entered: "address line 1 as entered", | 
						|
            address_line2_as_entered: "address line 2 as entered", | 
						|
            town_or_city_as_entered: "town or city as entered", | 
						|
            county_as_entered: "county as entered", | 
						|
            postcode_full_as_entered: "AB1 2CD", | 
						|
            la_as_entered: "la as entered", | 
						|
            first_time_property_let_as_social_housing: 0, | 
						|
            unitletas: 2, | 
						|
            rsnvac: 6, | 
						|
            unittype_gn: 7, | 
						|
            builtype: 1, | 
						|
            wchair: 1, | 
						|
            beds: 3, | 
						|
            voiddate: Time.zone.local(2024, 3, 30), | 
						|
            majorrepairs: 1, | 
						|
            mrcdate: Time.zone.local(2024, 3, 31), | 
						|
            joint: 3, | 
						|
            startertenancy: 1, | 
						|
            tenancy: 4, | 
						|
            tenancylength: 2, | 
						|
            hhmemb: 4, | 
						|
            age1_known: 0, | 
						|
            age1: 35, | 
						|
            sex1: "F", | 
						|
            ethnic_group: 0, | 
						|
            ethnic: 2, | 
						|
            nationality_all: 36, | 
						|
            ecstat1: 0, | 
						|
            details_known_2: 0, | 
						|
            relat2: "P", | 
						|
            age2_known: 0, | 
						|
            age2: 32, | 
						|
            sex2: "M", | 
						|
            ecstat2: 6, | 
						|
            details_known_3: 1, | 
						|
            details_known_4: 0, | 
						|
            relat4: "R", | 
						|
            age4_known: 1, | 
						|
            sex4: "R", | 
						|
            ecstat4: 10, | 
						|
            armedforces: 1, | 
						|
            leftreg: 4, | 
						|
            reservist: 1, | 
						|
            preg_occ: 2, | 
						|
            housingneeds: 1, | 
						|
            housingneeds_type: 0, | 
						|
            housingneeds_a: 1, | 
						|
            housingneeds_b: 0, | 
						|
            housingneeds_c: 0, | 
						|
            housingneeds_f: 0, | 
						|
            housingneeds_g: 0, | 
						|
            housingneeds_h: 0, | 
						|
            housingneeds_other: 0, | 
						|
            illness: 1, | 
						|
            illness_type_1: 0, | 
						|
            illness_type_2: 1, | 
						|
            illness_type_3: 0, | 
						|
            illness_type_4: 0, | 
						|
            illness_type_5: 0, | 
						|
            illness_type_6: 0, | 
						|
            illness_type_7: 0, | 
						|
            illness_type_8: 0, | 
						|
            illness_type_9: 0, | 
						|
            illness_type_10: 0, | 
						|
            layear: 2, | 
						|
            waityear: 7, | 
						|
            reason: 4, | 
						|
            prevten: 6, | 
						|
            homeless: 1, | 
						|
            ppcodenk: 1, | 
						|
            ppostcode_full: "TN23 6LZ", | 
						|
            previous_la_known: 1, | 
						|
            prevloc: "E07000105", | 
						|
            reasonpref: 1, | 
						|
            rp_homeless: 0, | 
						|
            rp_insan_unsat: 1, | 
						|
            rp_medwel: 0, | 
						|
            rp_hardship: 0, | 
						|
            rp_dontknow: 0, | 
						|
            cbl: 0, | 
						|
            chr: 1, | 
						|
            cap: 0, | 
						|
            accessible_register: 0, | 
						|
            referral: 2, | 
						|
            net_income_known: 0, | 
						|
            incref: 0, | 
						|
            incfreq: 1, | 
						|
            earnings: 268, | 
						|
            hb: 6, | 
						|
            has_benefits: 1, | 
						|
            benefits: 1, | 
						|
            period: 2, | 
						|
            brent: 200, | 
						|
            scharge: 50, | 
						|
            pscharge: 40, | 
						|
            supcharg: 35, | 
						|
            tcharge: 325, | 
						|
            hbrentshortfall: 1, | 
						|
            tshortfall_known: 1, | 
						|
            tshortfall: 12, | 
						|
          ) | 
						|
        end | 
						|
 | 
						|
        context "when exporting with human readable labels" do | 
						|
          let(:export_type) { "labels" } | 
						|
 | 
						|
          context "when the current user is a support user" do | 
						|
            let(:user) { create(:user, :support, organisation:, email: "s.port@jeemayle.com") } | 
						|
 | 
						|
            it "exports the CSV with 2024 ordering and all values correct" do | 
						|
              expected_content = CSV.read("spec/fixtures/files/lettings_log_csv_export_labels_24.csv") | 
						|
              values_to_delete = %w[id] | 
						|
              values_to_delete.each do |attribute| | 
						|
                index = attribute_line.index(attribute) | 
						|
                content_line[index] = nil | 
						|
              end | 
						|
              expect(csv).to eq expected_content | 
						|
            end | 
						|
          end | 
						|
 | 
						|
          context "when the current user is not a support user" do | 
						|
            let(:user) { create(:user, :data_provider, organisation:, email: "choreographer@owtluk.com") } | 
						|
 | 
						|
            it "exports the CSV with all values correct" do | 
						|
              expected_content = CSV.read("spec/fixtures/files/lettings_log_csv_export_non_support_labels_24.csv") | 
						|
              values_to_delete = %w[id] | 
						|
              values_to_delete.each do |attribute| | 
						|
                index = attribute_line.index(attribute) | 
						|
                content_line[index] = nil | 
						|
              end | 
						|
              expect(csv).to eq expected_content | 
						|
            end | 
						|
          end | 
						|
        end | 
						|
 | 
						|
        context "when exporting values as codes" do | 
						|
          let(:export_type) { "codes" } | 
						|
 | 
						|
          context "when the current user is a support user" do | 
						|
            let(:user) { create(:user, :support, organisation:, email: "s.port@jeemayle.com") } | 
						|
 | 
						|
            it "exports the CSV with all values correct" do | 
						|
              expected_content = CSV.read("spec/fixtures/files/lettings_log_csv_export_codes_24.csv") | 
						|
              values_to_delete = %w[id] | 
						|
              values_to_delete.each do |attribute| | 
						|
                index = attribute_line.index(attribute) | 
						|
                content_line[index] = nil | 
						|
              end | 
						|
              expect(csv).to eq expected_content | 
						|
            end | 
						|
          end | 
						|
 | 
						|
          context "when the current user is not a support user" do | 
						|
            let(:user) { create(:user, :data_provider, organisation:, email: "choreographer@owtluk.com") } | 
						|
 | 
						|
            it "exports the CSV with all values correct" do | 
						|
              expected_content = CSV.read("spec/fixtures/files/lettings_log_csv_export_non_support_codes_24.csv") | 
						|
              values_to_delete = %w[id] | 
						|
              values_to_delete.each do |attribute| | 
						|
                index = attribute_line.index(attribute) | 
						|
                content_line[index] = nil | 
						|
              end | 
						|
              expect(csv).to eq expected_content | 
						|
            end | 
						|
          end | 
						|
        end | 
						|
      end | 
						|
 | 
						|
      context "when the requested log year is 2023" do | 
						|
        let(:year) { 2023 } | 
						|
        let(:organisation) { create(:organisation, provider_type: "LA", name: "MHCLG") } | 
						|
        let(:log) do | 
						|
          create( | 
						|
            :lettings_log, | 
						|
            :ignore_validation_errors, | 
						|
            created_by: user, | 
						|
            assigned_to: user, | 
						|
            created_at: Time.zone.local(2023, 11, 26), | 
						|
            updated_at: Time.zone.local(2023, 11, 26), | 
						|
            owning_organisation: organisation, | 
						|
            managing_organisation: organisation, | 
						|
            needstype: 1, | 
						|
            renewal: 0, | 
						|
            startdate: Time.zone.local(2023, 11, 26), | 
						|
            rent_type: 1, | 
						|
            tenancycode: "HIJKLMN", | 
						|
            propcode: "ABCDEFG", | 
						|
            declaration: 1, | 
						|
            address_line1: "Address line 1", | 
						|
            town_or_city: "London", | 
						|
            postcode_full: "NW9 5LL", | 
						|
            la: "E09000003", | 
						|
            is_la_inferred: false, | 
						|
            first_time_property_let_as_social_housing: 0, | 
						|
            unitletas: 2, | 
						|
            rsnvac: 6, | 
						|
            offered: 2, | 
						|
            unittype_gn: 7, | 
						|
            builtype: 1, | 
						|
            wchair: 1, | 
						|
            beds: 3, | 
						|
            voiddate: Time.zone.local(2023, 11, 24), | 
						|
            majorrepairs: 1, | 
						|
            mrcdate: Time.zone.local(2023, 11, 25), | 
						|
            joint: 3, | 
						|
            startertenancy: 1, | 
						|
            tenancy: 4, | 
						|
            tenancylength: 2, | 
						|
            hhmemb: 4, | 
						|
            age1_known: 0, | 
						|
            age1: 35, | 
						|
            sex1: "F", | 
						|
            ethnic_group: 0, | 
						|
            ethnic: 2, | 
						|
            national: 13, | 
						|
            ecstat1: 0, | 
						|
            details_known_2: 0, | 
						|
            relat2: "P", | 
						|
            age2_known: 0, | 
						|
            age2: 32, | 
						|
            sex2: "M", | 
						|
            ecstat2: 6, | 
						|
            details_known_3: 1, | 
						|
            details_known_4: 0, | 
						|
            relat4: "R", | 
						|
            age4_known: 1, | 
						|
            sex4: "R", | 
						|
            ecstat4: 10, | 
						|
            armedforces: 1, | 
						|
            leftreg: 4, | 
						|
            reservist: 1, | 
						|
            preg_occ: 2, | 
						|
            housingneeds: 1, | 
						|
            housingneeds_type: 0, | 
						|
            housingneeds_a: 1, | 
						|
            housingneeds_b: 0, | 
						|
            housingneeds_c: 0, | 
						|
            housingneeds_f: 0, | 
						|
            housingneeds_g: 0, | 
						|
            housingneeds_h: 0, | 
						|
            housingneeds_other: 0, | 
						|
            illness: 1, | 
						|
            illness_type_1: 0, | 
						|
            illness_type_2: 1, | 
						|
            illness_type_3: 0, | 
						|
            illness_type_4: 0, | 
						|
            illness_type_5: 0, | 
						|
            illness_type_6: 0, | 
						|
            illness_type_7: 0, | 
						|
            illness_type_8: 0, | 
						|
            illness_type_9: 0, | 
						|
            illness_type_10: 0, | 
						|
            layear: 2, | 
						|
            waityear: 7, | 
						|
            reason: 4, | 
						|
            prevten: 6, | 
						|
            homeless: 1, | 
						|
            ppcodenk: 1, | 
						|
            ppostcode_full: "TN23 6LZ", | 
						|
            previous_la_known: 1, | 
						|
            prevloc: "E07000105", | 
						|
            reasonpref: 1, | 
						|
            rp_homeless: 0, | 
						|
            rp_insan_unsat: 1, | 
						|
            rp_medwel: 0, | 
						|
            rp_hardship: 0, | 
						|
            rp_dontknow: 0, | 
						|
            cbl: 0, | 
						|
            chr: 1, | 
						|
            cap: 0, | 
						|
            accessible_register: 0, | 
						|
            referral: 2, | 
						|
            net_income_known: 0, | 
						|
            incref: 0, | 
						|
            incfreq: 1, | 
						|
            earnings: 268, | 
						|
            hb: 6, | 
						|
            has_benefits: 1, | 
						|
            benefits: 1, | 
						|
            period: 2, | 
						|
            brent: 200, | 
						|
            scharge: 50, | 
						|
            pscharge: 40, | 
						|
            supcharg: 35, | 
						|
            tcharge: 325, | 
						|
            hbrentshortfall: 1, | 
						|
            tshortfall_known: 1, | 
						|
            tshortfall: 12, | 
						|
          ) | 
						|
        end | 
						|
 | 
						|
        context "when exporting with human readable labels" do | 
						|
          let(:export_type) { "labels" } | 
						|
 | 
						|
          context "when the current user is a support user" do | 
						|
            let(:user) { create(:user, :support, organisation:, email: "s.port@jeemayle.com") } | 
						|
 | 
						|
            it "exports the CSV with all values correct" do | 
						|
              expected_content = CSV.read("spec/fixtures/files/lettings_log_csv_export_labels_23.csv") | 
						|
              values_to_delete = %w[id] | 
						|
              values_to_delete.each do |attribute| | 
						|
                index = attribute_line.index(attribute) | 
						|
                content_line[index] = nil | 
						|
              end | 
						|
              expect(csv).to eq expected_content | 
						|
            end | 
						|
          end | 
						|
 | 
						|
          context "when the current user is not a support user" do | 
						|
            let(:user) { create(:user, :data_provider, organisation:, email: "choreographer@owtluk.com") } | 
						|
 | 
						|
            it "exports the CSV with all values correct" do | 
						|
              expected_content = CSV.read("spec/fixtures/files/lettings_log_csv_export_non_support_labels_23.csv") | 
						|
              values_to_delete = %w[id] | 
						|
              values_to_delete.each do |attribute| | 
						|
                index = attribute_line.index(attribute) | 
						|
                content_line[index] = nil | 
						|
              end | 
						|
              expect(csv).to eq expected_content | 
						|
            end | 
						|
          end | 
						|
        end | 
						|
 | 
						|
        context "when exporting values as codes" do | 
						|
          let(:export_type) { "codes" } | 
						|
 | 
						|
          context "when the current user is a support user" do | 
						|
            let(:user) { create(:user, :support, organisation:, email: "s.port@jeemayle.com") } | 
						|
 | 
						|
            it "exports the CSV with all values correct" do | 
						|
              expected_content = CSV.read("spec/fixtures/files/lettings_log_csv_export_codes_23.csv") | 
						|
              values_to_delete = %w[id] | 
						|
              values_to_delete.each do |attribute| | 
						|
                index = attribute_line.index(attribute) | 
						|
                content_line[index] = nil | 
						|
              end | 
						|
              expect(csv).to eq expected_content | 
						|
            end | 
						|
          end | 
						|
 | 
						|
          context "when the current user is not a support user" do | 
						|
            let(:user) { create(:user, :data_provider, organisation:, email: "choreographer@owtluk.com") } | 
						|
 | 
						|
            it "exports the CSV with all values correct" do | 
						|
              expected_content = CSV.read("spec/fixtures/files/lettings_log_csv_export_non_support_codes_23.csv") | 
						|
              values_to_delete = %w[id] | 
						|
              values_to_delete.each do |attribute| | 
						|
                index = attribute_line.index(attribute) | 
						|
                content_line[index] = nil | 
						|
              end | 
						|
              expect(csv).to eq expected_content | 
						|
            end | 
						|
          end | 
						|
        end | 
						|
      end | 
						|
    end | 
						|
  end | 
						|
end
 | 
						|
 |