# License: AGPL-3.0-or-later WITH Web-Template-Output-Additional-Permission-3.0-or-later
require 'rspec'
require 'rails_helper'

describe ChunkedUploader::S3 do
  context '.upload' do
    skip 'Only run this if you are okay getting billed on s3' do
      before(:each) do
        WebMock.disable!
        @s3 = AWS::S3.new
        @bucket = @s3.buckets[ENV['S3_BUCKET_NAME']]
        @path = 'tmp/export/1000000000.csv'
        @object = @bucket.objects[@path]
      end
      after(:each) do
        @object.delete
        WebMock.enable!
      end
      it 'uploads empty properly' do
        ChunkedUploader::S3.upload(@path, [], content_type: 'text/csv')

        info = @object.read.to_s

        expect(info).to eq('')
      end

      it 'uploads very small properly' do
        input = 'row11,row12\nrow21,row22\n'
        ChunkedUploader::S3.upload(@path, [input], content_type: 'text/csv')

        info = @object.read.to_s

        expect(info).to eq(input)

        pending('NOTE: METADATA CHECKING ISNT WORKING SO WE SKIP IT FOR NOW')
        metadata = @object.metadata

        puts metadata
        expect(metadata['Content-Type']).to eq('text/csv')
      end

      it 'uploads very large single properly' do
        temp = StringIO.new
        500_000.times { temp << 'row11,row12\n' }
        ChunkedUploader::S3.upload(@path, [temp.string])

        info = @object.read.to_s

        expect(info).to eq(temp.string)

        pending('NOTE: METADATA CHECKING ISNT WORKING SO WE SKIP IT FOR NOW')
        metadata = @object.metadata
        expect(metadata['Content-Type']).to eq('text/csv')
      end

      it 'uploads properly' do
        input_item = StringIO.new
        input = Enumerator.new do |y|
          temp = StringIO.new
          300_000.times { temp << 'row11,row12\n' }
          input_item.write(temp.string)
          y << temp.string
          temp = StringIO.new
          300_000.times { temp << 'row21,row22\n' }
          input_item.write(temp.string)
          y << temp.string
          temp = StringIO.new
          300_000.times { temp << 'row31,row32\n' }
          input_item.write(temp.string)
          y << temp.string
        end.lazy
        ChunkedUploader::S3.upload(@path, input, content_type: 'text/csv')

        info = @object.read.to_s

        expect(info).to eq(input_item.string)
        pending('NOTE: METADATA CHECKING ISNT WORKING SO WE SKIP IT FOR NOW')
        metadata = @object.metadata
        expect(metadata['Content-Type']).to eq('text/csv')
      end
    end
  end
end