#encoding: utf-8 require 'spec_helper' describe Webmoney, "class" do before(:each) do @wm = TestWM.new end it "should be classic" do @wm.should be_classic # @wm.classic? == true end it "should return reqn" do t1 = @wm.send(:reqn) sleep(0.1) t2 = @wm.send(:reqn) t1.should match(/^\d{16}$/) (t2 > t1).should be_true end it "should correct prepare interfaces urls" do wm = TestWM.new :wmid => WmConfig.first['wmid'], :key => nil wm.should_not be_classic wm.interfaces[:balance].class.should == URI::HTTPS # converted to light-auth version wm.interfaces[:balance].to_s.should == 'https://w3s.wmtransfer.com/asp/XMLPursesCert.asp' # non-converted to light-auth version wm.interfaces[:get_passport].to_s.should == 'https://passport.webmoney.ru/asp/XMLGetWMPassport.asp' end it "should correct reqn" do Time.stub!(:now).and_return(Time.at(1244704683.69677)) @wm.send(:reqn).should == '2009061111180369' end it "should correct reqn with zero microsec" do Time.stub!(:now).and_return(Time.at(1244704683)) @wm.send(:reqn).should == '2009061111180300' end it "should raise error on incorrect arg" do lambda { @wm.send(:request, :check_sign, 1) }. should raise_error(ArgumentError) end it "should send request" do doc = Nokogiri.XML(@wm.send(:https_request, :check_sign, '')) doc.root.should_not be_nil end it"should raise error on bad response" do lambda { @wm.send(:https_request, 'https://w3s.wmtransfer.com/asp/XMLUnexistantIface.asp', '')}. should raise_error(Webmoney::RequestError) @wm.error.should == '404' @wm.errormsg.should match(/^ '')}.should raise_error(Webmoney::ResultError) @wm.error.should == -2 @wm.errormsg.should match(%r{value of w3s.request/message/receiverwmid is incorrect}) end it "should sign string" do @wm.send(:sign, 'Test123').should match(/^[0-9a-f]{132}$/) end it "should return nil on sign empty string" do @wm.send(:sign, '').should be_nil end it "should check_sign" do plan = 'test123' @wm.request(:check_sign, :wmid => @wm.wmid, :plan => plan, :sign => @wm.send(:sign, plan)). should be_true end it "should check_sign broken" do plan = 'test123' @wm.request(:check_sign, :wmid => @wm.wmid, :plan => plan, :sign => 'abcd'). should be_false end it "should check_sign with specials" do plan = 'текст' real_plan = Iconv.conv('CP1251', 'UTF-8', plan) begin @wm.request(:check_sign, :wmid => @wm.wmid, :plan => plan, :sign => @wm.send(:sign, real_plan ) ).should be_true end end it "should parse retval and raise error on broken get_passport" do lambda { @wm.request(:get_passport, :wmid => '') }.should raise_error(Webmoney::ResultError) @wm.error.should == 2 @wm.errormsg.should match(%r{неверно указан проверяемый WMID}) end it "should raise exception on bad WMID" do lambda {@wm.request(:get_passport, :wmid => '111')}.should raise_error(Webmoney::ResultError) end it "should raise exception on non existent WMID" do lambda {@wm.request(:get_passport, :wmid => '012345678901')}.should raise_error(Webmoney::NonExistentWmidError) end it "should create transaction" do # TODO @wm.request( :create_transaction, ...) end it "should return correct BL" do wmid = '370860915669' @wm.request(:bussines_level, :wmid => wmid).should == 0 wmid = Webmoney::Wmid.new '000000000007' bl = @wm.request(:bussines_level, :wmid => wmid) (bl > 1000).should be_true end it "should send message" do result = @wm.request( :send_message, :wmid => @wm.wmid, :subj => 'Текст', :text => 'Тело сообщения') result.should be_kind_of(Hash) result[:id].should match(/^\d*$/) ((result[:date] + 60) > Time.now).should be_true end it "should create invoice" do # TODO #@wm.request( # :create_invoice, # :orderid => 3, # :amount => 10.0, # :customerwmid => "TEST_WMID", # :storepurse => "Z161888783954", # :desc => "Test invoice", # :address => "Address" #) end it "should return operation history" do # TODO #@mywm.request(:operation_history, # :purse => "Z161888783954", # :tranid => 148696631, # :wminvid => 148613215, # :orderid => 1, # :datestart => Date.today() - 1, # :datefinish => Date.today() + 1 #) end it "should create transaction" do # TODO @wm.request( :create_transaction, ...) end it "should raise error on undefined xml func" do lambda { @wm.request(:unexistent_interface) }.should raise_error(::NoMethodError) end describe "invoice" do before(:each) do @wm = webmoney() @ca = contragent() # create invoice @invoice = @ca.request(:create_invoice, :orderid => 1, :amount => 1, :customerwmid => @wm.wmid, :storepurse => WmConfig.second['wmz'], :desc => "Test invoice", :address => "Address" ) end it "should be created" do @invoice[:retval].should == 0 @invoice[:state].should == 0 @invoice[:orderid].should == 1 @invoice[:ts].should > 0 @invoice[:id].should > 0 end it "should be in state 0 (not paid)" do res = @ca.request(:outgoing_invoices, :purse => WmConfig.second['wmz'], :wminvid => @invoice[:id], :orderid => @invoice[:orderid], :customerwmid => @wm.wmid, :datestart => @invoice[:created_at], :datefinish => @invoice[:created_at] ) res[:retval].should == 0 res[:invoices].length.should == 1 res[:invoices][0][:state].should == 0 res[:invoices][0][:amount].should == 1 end end end