|
15 | 15 | let(:args) { { directory:, '982__a': 'test' } } |
16 | 16 | let(:tind_batch) { described_class.new(args, xlsx, extension, email) } |
17 | 17 | let(:spread_tool) { instance_double(TindSpread::SpreadTool) } |
18 | | - let(:all_rows) { [{ 'Header1' => 'Data1', 'Header2' => 'Data2' }, { 'Header1' => 'Data3', 'Header2' => 'Data4' }] } |
| 18 | + let(:all_rows) { [{ '001__a' => 'Data1', '245__a' => 'Data2' }, { '001__a' => 'Data3', '245__a' => 'Data4' }] } |
19 | 19 |
|
20 | 20 | before do |
21 | 21 | allow(TindSpread::SpreadTool).to receive(:new).with(xlsx, extension, directory).and_return(spread_tool) |
22 | 22 | allow(spread_tool).to receive(:spread).and_return(all_rows) |
23 | | - allow(spread_tool).to receive(:header).with(any_args).and_return(%w[Header1 Header2]) |
24 | | - allow(TindSpread::MakeBatch).to receive(:make_header).with(any_args).and_return("Header1,Header2\n") |
| 23 | + allow(spread_tool).to receive(:header).with(any_args).and_return(%w[001__a 245__a]) |
| 24 | + allow(TindSpread::MakeBatch).to receive(:make_header).with(any_args).and_return("001__a,245__a\n") |
25 | 25 | allow(TindSpread::MakeBatch).to receive(:add_row).with(any_args).and_return("Data1,Data2\n") |
26 | 26 | allow(TindSpread::TindValidation).to receive(:validate_row).with(any_args).and_return([]) |
27 | 27 | # rubocop:disable RSpec/MessageChain |
|
49 | 49 | describe '#send_email' do |
50 | 50 | it 'sends an email with the correct attachments' do |
51 | 51 | tind_batch.instance_variable_set(:@all_errors, {}) |
52 | | - tind_batch.instance_variable_set(:@csv, "Header1,Header2\nData1,Data2\n") |
53 | | - tind_batch.instance_variable_set(:@errors_csv, "Header1,Header2\n") |
| 52 | + tind_batch.instance_variable_set(:@csv, "001__a,245__a\nData1,Data2\n") |
| 53 | + tind_batch.instance_variable_set(:@errors_csv, "001__a,245__a\n") |
54 | 54 | allow(Time).to receive(:current).and_return(Time.parse('2023-10-01 12:00:00 UTC')) |
55 | 55 | attachment_name = 'test_2023-10-01' |
56 | 56 | expect(RequestMailer).to receive(:tind_spread_email).with( |
57 | 57 | email, |
58 | 58 | 'Tind batch load for test', |
59 | 59 | 'No errors found', |
60 | | - { "#{attachment_name}.csv" => "Header1,Header2\nData1,Data2\n" } |
| 60 | + { "#{attachment_name}.csv" => "001__a,245__a\nData1,Data2\n" } |
61 | 61 | ).and_return(double(deliver_now: true)) |
62 | 62 | tind_batch.send_email |
63 | 63 | end |
|
74 | 74 | end |
75 | 75 | end |
76 | 76 |
|
| 77 | + describe '#validate_header_row' do |
| 78 | + it 'returns an empty array for valid headers' do |
| 79 | + headers = ['001__a', '245__a', '500__3'] |
| 80 | + errors = tind_batch.validate_header_row(headers) |
| 81 | + expect(errors).to be_empty |
| 82 | + end |
| 83 | + |
| 84 | + it 'returns error messages for invalid headers' do |
| 85 | + headers = ['Header1', 'Header2'] |
| 86 | + errors = tind_batch.validate_header_row(headers) |
| 87 | + expect(errors).to include('Invalid header name: Header1') |
| 88 | + expect(errors).to include('Invalid header name: Header2') |
| 89 | + end |
| 90 | + |
| 91 | + it 'returns errors only for invalid headers in a mixed list' do |
| 92 | + headers = ['001__a', 'InvalidHeader', '245__a'] |
| 93 | + errors = tind_batch.validate_header_row(headers) |
| 94 | + expect(errors).to include('Invalid header name: InvalidHeader') |
| 95 | + expect(errors.length).to eq(1) |
| 96 | + end |
| 97 | + end |
| 98 | + |
77 | 99 | describe '#run' do |
78 | 100 | it 'runs the batch process' do |
79 | 101 | allow(tind_batch).to receive(:send_email) |
80 | 102 | tind_batch.run |
81 | | - expect(tind_batch.instance_variable_get(:@csv)).to eq("Header1,Header2\nData1,Data2\nData1,Data2\n") |
82 | | - expect(tind_batch.instance_variable_get(:@errors_csv)).to eq("Header1,Header2\n") |
| 103 | + expect(tind_batch.instance_variable_get(:@csv)).to eq("001__a,245__a\nData1,Data2\nData1,Data2\n") |
| 104 | + expect(tind_batch.instance_variable_get(:@errors_csv)).to eq("001__a,245__a\n") |
83 | 105 | end |
84 | 106 | end |
85 | 107 | end |
0 commit comments