From e0ff9ca6bdebb4091add7f13cade0b76a2c1c9f7 Mon Sep 17 00:00:00 2001 From: Christopher Jeffrey Date: Tue, 29 Jul 2014 11:14:07 -0700 Subject: [PATCH] paypro: fix parseBitcoinURI. start using bitcoin uris in tests. --- js/controllers/send.js | 6 ++++-- js/models/core/Wallet.js | 8 ++++++++ test/test.PayPro.js | 11 +++++++++-- 3 files changed, 21 insertions(+), 4 deletions(-) diff --git a/js/controllers/send.js b/js/controllers/send.js index 05d6e3596..31877c2da 100644 --- a/js/controllers/send.js +++ b/js/controllers/send.js @@ -86,8 +86,10 @@ angular.module('copayApp.controllers').controller('SendController', $rootScope.pendingPayment = null; } - if (~address.indexOf('://')) { - w.createTx(address, commentText, done); + var uri = address.indexOf('bitcoin:') === 0 + && copay.Structure.parseBitcoinURI(address); + if (uri && uri.merchant) { + w.createTx(uri.merchant, commentText, done); } else { w.createTx(address, amount, commentText, done); } diff --git a/js/models/core/Wallet.js b/js/models/core/Wallet.js index f5b33ca77..88e816b45 100644 --- a/js/models/core/Wallet.js +++ b/js/models/core/Wallet.js @@ -5,6 +5,7 @@ var http = require('http'); var EventEmitter = imports.EventEmitter || require('events').EventEmitter; var async = require('async'); var preconditions = require('preconditions').singleton(); +var parseBitcoinURI = require('./Structure').parseBitcoinURI; var bitcore = require('bitcore'); var bignum = bitcore.Bignum; @@ -774,6 +775,13 @@ Wallet.prototype.createPaymentTx = function(options, cb) { options = { uri: options }; } + if (options.uri.indexOf('bitcoin:') === 0) { + options.uri = parseBitcoinURI(options.uri).merchant; + if (!options.uri) { + return cb(new Error('No URI.')); + } + } + return $http({ method: options.method || 'POST', url: options.uri || options.url, diff --git a/test/test.PayPro.js b/test/test.PayPro.js index 56a226a1e..04ac728da 100644 --- a/test/test.PayPro.js +++ b/test/test.PayPro.js @@ -37,6 +37,12 @@ if (!is_browser) { error: function(cb) { this._error = cb; return this; + }, + _success: function() { + ; + }, + _error: function(_, err) { + throw err; } }; if (options.responseType === 'arraybuffer') { @@ -44,7 +50,7 @@ if (!is_browser) { options.encoding = null; } _request(options, function(err, res, body) { - if (err) return ret._error(null, null, null, options); + if (err) return ret._error(null, err, null, options); return ret._success(body, res.statusCode, res.headers, options); }); return ret; @@ -62,6 +68,7 @@ function startServer(cb) { var path = require('path'); var bc = path.dirname(require.resolve(__dirname + '/../../bitcore/package.json')); + //var bc = path.dirname(require.resolve('bitcore/package.json')); var example = bc + '/examples/PayPro/server.js'; var server = require(example); @@ -206,7 +213,7 @@ describe('PayPro (in Wallet) model', function() { return cb(null, unspentTest, []); }, 1); }; - var address = server.uri + '/request'; + var address = 'bitcoin:mq7se9wy2egettFxPbmn99cK8v5AFq55Lx?amount=0.11&r=' + server.uri + '/request'; var commentText = 'Hello, server. I\'d like to make a payment.'; w.createTx(address, commentText, function(ntxid, ca) { if (w.totalCopayers > 1) {