bitcore-wallet-client
Version:
Client for bitcore-wallet-service
316 lines (300 loc) • 8.87 kB
JavaScript
;
const { PayProV2: payProV2 } = require('../ts_build/lib/payproV2');
const TestData = require('./testdata');
describe('payproV2', () => {
var oldreq;
var header = {};
var mockRequest = (bodyBuf, headers) => {
payProV2.request = {
'get': (_url) => {
return {
set: (_k, _v) => {
if (_k && _v) {
header[_k] = _v;
}
},
query: (_opts) => { },
agent: (_opts) => { },
end: (cb) => {
return cb(null, {
headers: headers || {},
statusCode: 200,
statusMessage: 'OK',
text: bodyBuf
});
}
}
},
'post': (_url) => {
return {
set: (_k, _v) => {
if (_k && _v) {
header[_k] = _v;
}
},
send: (opts) => {
var _opts = JSON.parse(opts);
if (_opts.transactions) {
postArgs = _opts;
}
},
agent: (_opts) => { },
end: (cb) => {
return cb(null, {
headers: headers || {},
statusCode: 200,
statusMessage: 'OK',
text: bodyBuf
});
}
}
}
};
};
beforeEach(() => {
oldreq = payProV2.request;
});
afterEach(() => {
payProV2.request = oldreq;
});
describe('_asyncRequest', () => {
it('Should handle a failed (404) request', (done) => {
var header = {};
payProV2.request = {
'post': (_url) => {
return {
set: (_k, _v) => {
if (_k && _v) {
header[_k] = _v;
}
},
send: (opts) => {
var _opts = JSON.parse(opts);
if (_opts.transactions) {
postArgs = _opts;
}
},
query: (_opts) => { },
agent: (_opts) => { },
end: (cb) => {
return cb('error', {
headers: TestData.payProJsonV2.btc.headers,
statusCode: 404,
statusMessage: 'Not Found',
text: null,
body: {
msg: 'This invoice was not found or has been archived'
}
});
}
}
}
}
payProV2._asyncRequest({
url: 'https://bitpay.com/i/LanynqCPoL2JQb8z8s5Z3X',
method: 'post',
headers: {
'Content-Type': 'application/payment-request',
'x-paypro-version': 2
},
args: JSON.stringify({
chain: 'livenet',
currency: 'btc'
})
}).then(res => {
res.should.not.exist;
}).catch(err => {
err.toString().should.contain('The invoice is no available.');
done();
});
});
it('Should handle a failed (400) request', (done) => {
var header = {};
payProV2.request = {
'post': (_url) => {
return {
set: (_k, _v) => {
if (_k && _v) {
header[_k] = _v;
}
},
send: (opts) => {
var _opts = JSON.parse(opts);
if (_opts.transactions) {
postArgs = _opts;
}
},
query: (_opts) => { },
agent: (_opts) => { },
end: (cb) => {
return cb('error', {
headers: TestData.payProJsonV2.btc.headers,
statusCode: 400,
statusMessage: 'Not Found',
text: null,
body: {
msg: 'Invoice no longer accepting payments'
}
});
}
}
}
}
payProV2._asyncRequest({
url: 'https://bitpay.com/i/LanynqCPoL2JQb8z8s5Z3X',
method: 'post',
headers: {
'Content-Type': 'application/payment-request',
'x-paypro-version': 2
},
args: JSON.stringify({
chain: 'livenet',
currency: 'btc'
})
}).then(res => {
res.should.not.exist;
}).catch(err => {
err.toString().should.contain('The invoice is no longer receiving payments.');
done();
});
});
it('Should handle a failed (500) request', (done) => {
var header = {};
payProV2.request = {
'post': (_url) => {
return {
set: (_k, _v) => {
if (_k && _v) {
header[_k] = _v;
}
},
send: (opts) => {
var _opts = JSON.parse(opts);
if (_opts.transactions) {
postArgs = _opts;
}
},
query: (_opts) => { },
agent: (_opts) => { },
end: (cb) => {
return cb('error', {
headers: TestData.payProJsonV2.btc.headers,
statusCode: 500,
statusMessage: 'Not Found',
text: null,
body: {
msg: 'Error broadcasting payment to network'
}
});
}
}
}
}
payProV2._asyncRequest({
url: 'https://bitpay.com/i/LanynqCPoL2JQb8z8s5Z3X',
method: 'post',
headers: {
'Content-Type': 'application/payment-request',
'x-paypro-version': 2
},
args: JSON.stringify({
chain: 'livenet',
currency: 'btc'
})
}).then(res => {
res.should.not.exist;
}).catch(err => {
err.toString().should.exist;
done();
});
});
it('should return rawBody and headers', (done) => {
mockRequest(Buffer.from(TestData.payProJson.btc.body, 'hex'), TestData.payProJson.btc.headers);
payProV2._asyncRequest({
url: 'https://bitpay.com/i/LanynqCPoL2JQb8z8s5Z3X',
method: 'post',
headers: {
'Content-Type': 'application/payment-request',
'x-paypro-version': 2
},
args: JSON.stringify({
chain: 'livenet',
currency: 'btc'
})
}).then(res => {
res.rawBody.should.exist;
res.headers.should.exist;
done();
}).catch(err => {
err.should.not.exist;
});
});
});
describe('getPaymentOptions', () => {
it('should get payment options if everthing is ok', (done) => {
mockRequest(Buffer.from(TestData.payProJsonV2.btc.body, 'hex'), TestData.payProJsonV2.btc.headers);
var opts = {
paymentUrl: 'https://bitpay.com/i/LanynqCPoL2JQb8z8s5Z3X'
};
payProV2.getPaymentOptions(opts).then((res) => {
res.should.exist;
done();
}).catch(err => {
err.should.not.exist;
});
});
it('should fail if the protocol is invalid', (done) => {
mockRequest(Buffer.from(TestData.payProJsonV2.btc.body, 'hex'), TestData.payProJsonV2.btc.headers);
var opts = {
paymentUrl: 'bitpay.com/i/LanynqCPoL2JQb8z8s5Z3X'
};
payProV2.getPaymentOptions(opts).then((res) => {
res.should.not.exist;
}).catch(err => {
err.toString().should.contain('Invalid payment protocol url');
done();
});
});
});
describe('selectPaymentOption', () => {
it('should work if the params passed are correct', (done) => {
mockRequest(Buffer.from(TestData.payProJsonV2.btc.body, 'hex'), TestData.payProJsonV2.btc.headers);
var opts = {
paymentUrl: 'https://bitpay.com/i/LanynqCPoL2JQb8z8s5Z3X'
};
payProV2.selectPaymentOption(opts).then((res) => {
res.should.exist;
done();
}).catch(err => {
err.should.not.exist;
});
});
it('should fail if the url is not provided', (done) => {
mockRequest(Buffer.from(TestData.payProJsonV2.btc.body, 'hex'), TestData.payProJsonV2.btc.headers);
var opts = {};
payProV2.selectPaymentOption(opts).then((res) => {
res.should.not.exist;
}).catch(err => {
err.toString().should.contain('Parameter requestUrl is required');
done();
});
});
});
describe('verifyUnsignedPayment', () => {
it('should verify fails if the params are incomplete', (done) => {
mockRequest(Buffer.from(TestData.payProJsonV2.btc.body, 'hex'), TestData.payProJsonV2.btc.headers);
var opts = {
paymentUrl: 'https://bitpay.com/i/LanynqCPoL2JQb8z8s5Z3X',
chain: 'BTC',
currency: '',
unsignedTransactions: [],
};
payProV2.verifyUnsignedPayment(opts).then((res) => {
res.should.not.exist;
}).catch(err => {
err.should.exist;
done();
});
});
});
});