require File.expand_path(File.dirname(__FILE__) + "/../spec_helper") describe Braintree::DocumentUploadGateway do describe "create" do it "returns successful with valid request" do file = File.new("#{File.dirname(__FILE__)}/../../fixtures/files/bt_logo.png", "r") response = Braintree::DocumentUpload.create({:kind => Braintree::DocumentUpload::Kind::EvidenceDocument, :file => file}) document_upload = response.document_upload expect(response.success?).to eq(true) expect(document_upload.id).not_to be_nil expect(document_upload.content_type).to eq("image/png") expect(document_upload.kind).to eq(Braintree::DocumentUpload::Kind::EvidenceDocument) expect(document_upload.name).to eq("bt_logo.png") expect(document_upload.size).to eq(2443) end it "returns file type error with unsupported file type" do file = File.new("#{File.dirname(__FILE__)}/../../fixtures/files/gif_extension_bt_logo.gif", "r") response = Braintree::DocumentUpload.create({:kind => Braintree::DocumentUpload::Kind::EvidenceDocument, :file => file}) expect(response.errors.for(:document_upload).first.code).to eq(Braintree::ErrorCodes::DocumentUpload::FileTypeIsInvalid) end it "returns malformed error with malformed file" do file = File.new("#{File.dirname(__FILE__)}/../../fixtures/files/malformed_pdf.pdf", "r") response = Braintree::DocumentUpload.create({:kind => Braintree::DocumentUpload::Kind::EvidenceDocument, :file => file}) expect(response.errors.for(:document_upload).first.code).to eq(Braintree::ErrorCodes::DocumentUpload::FileIsMalformedOrEncrypted) end it "returns invalid kind error with invalid kind" do file = File.new("#{File.dirname(__FILE__)}/../../fixtures/files/bt_logo.png", "r") response = Braintree::DocumentUpload.create({:kind => "invalid_kind", :file => file}) expect(response.errors.for(:document_upload).first.code).to eq(Braintree::ErrorCodes::DocumentUpload::KindIsInvalid) end it "returns file too large error with file over 4mb" do filename = "#{File.dirname(__FILE__)}/../../fixtures/files/large_file.png" begin write_times = 1048577 * 4 File.open(filename, "w+") { |f| write_times.times { f.write "a" } } file = File.new(filename, "r") response = Braintree::DocumentUpload.create({:kind => Braintree::DocumentUpload::Kind::EvidenceDocument, :file => file}) expect(response.errors.for(:document_upload).first.code).to eq(Braintree::ErrorCodes::DocumentUpload::FileIsTooLarge) ensure File.delete(filename) end end it "returns file is empty error with empty file" do filename = "#{File.dirname(__FILE__)}/../../fixtures/files/empty_file.png" begin File.open(filename, "w+") {} file = File.new(filename, "r") response = Braintree::DocumentUpload.create({:kind => Braintree::DocumentUpload::Kind::EvidenceDocument, :file => file}) expect(response.errors.for(:document_upload).first.code).to eq(Braintree::ErrorCodes::DocumentUpload::FileIsEmpty) ensure File.delete(filename) end end it "returns file too long error with file over 50 pages" do filename = "#{File.dirname(__FILE__)}/../../fixtures/files/too_long.pdf" file = File.new(filename, "r") response = Braintree::DocumentUpload.create({:kind => Braintree::DocumentUpload::Kind::EvidenceDocument, :file => file}) expect(response.errors.for(:document_upload).first.code).to eq(Braintree::ErrorCodes::DocumentUpload::FileIsTooLong) end it "returns invalid keys error if signature is invalid" do expect do response = Braintree::DocumentUpload.create({:invalid_key => "do not add", :kind => Braintree::DocumentUpload::Kind::EvidenceDocument}) end.to raise_error(ArgumentError, "invalid keys: invalid_key") end end describe "create!" do it "returns successful with valid request" do file = File.new("#{File.dirname(__FILE__)}/../../fixtures/files/bt_logo.png", "r") document_upload = Braintree::DocumentUpload.create!({:kind => Braintree::DocumentUpload::Kind::EvidenceDocument, :file => file}) expect(document_upload.id).not_to be_nil expect(document_upload.content_type).to eq("image/png") expect(document_upload.kind).to eq(Braintree::DocumentUpload::Kind::EvidenceDocument) expect(document_upload.name).to eq("bt_logo.png") expect(document_upload.size).to eq(2443) end end end