public void BitcoinUrlKeepUnknowParameter() { BitcoinUrlBuilder url = new BitcoinUrlBuilder("bitcoin:?r=https://merchant.com/pay.php?h%3D2a8628fc2fbe&idontknow=test"); Assert.Equal("test", url.UnknowParameters["idontknow"]); Assert.Equal(1, url.UnknowParameters.Count); }
private BitcoinUrlBuilder CreateBuilder(string uri) { var builder = new BitcoinUrlBuilder(uri); Assert.Equal(builder.Uri.ToString(), uri); builder = new BitcoinUrlBuilder(new Uri(uri, UriKind.Absolute)); Assert.Equal(builder.ToString(), uri); return builder; }
public void CanParsePaymentUrl() { Assert.Equal("bitcoin:", new BitcoinUrlBuilder().Uri.ToString()); var url = CreateBuilder("bitcoin:129mVqKUmJ9uwPxKJBnNdABbuaaNfho4Ha"); Assert.Equal("129mVqKUmJ9uwPxKJBnNdABbuaaNfho4Ha", url.Address.ToString()); url = CreateBuilder("bitcoin:129mVqKUmJ9uwPxKJBnNdABbuaaNfho4Ha?amount=0.06"); Assert.Equal("129mVqKUmJ9uwPxKJBnNdABbuaaNfho4Ha", url.Address.ToString()); Assert.Equal(Money.Parse("0.06"), url.Amount); url = new BitcoinUrlBuilder("bitcoin:129mVqKUmJ9uwPxKJBnNdABbuaaNfho4Ha?amount=0.06&label=Tom%20%26%20Jerry"); Assert.Equal("129mVqKUmJ9uwPxKJBnNdABbuaaNfho4Ha", url.Address.ToString()); Assert.Equal(Money.Parse("0.06"), url.Amount); Assert.Equal("Tom & Jerry", url.Label); Assert.Equal(url.ToString(), new BitcoinUrlBuilder(url.ToString()).ToString()); //Request 50 BTC with message: url = new BitcoinUrlBuilder("bitcoin:129mVqKUmJ9uwPxKJBnNdABbuaaNfho4Ha?amount=50&label=Luke-Jr&message=Donation%20for%20project%20xyz"); Assert.Equal(Money.Parse("50"), url.Amount); Assert.Equal("Luke-Jr", url.Label); Assert.Equal("Donation for project xyz", url.Message); Assert.Equal(url.ToString(), new BitcoinUrlBuilder(url.ToString()).ToString()); //Some future version that has variables which are (currently) not understood and required and thus invalid: url = new BitcoinUrlBuilder("bitcoin:129mVqKUmJ9uwPxKJBnNdABbuaaNfho4Ha?amount=50&label=Luke-Jr&message=Donation%20for%20project%20xyz&unknownparam=lol"); //Some future version that has variables which are (currently) not understood but not required and thus valid: Assert.Throws<FormatException>(() => new BitcoinUrlBuilder("bitcoin:129mVqKUmJ9uwPxKJBnNdABbuaaNfho4Ha?amount=50&label=Luke-Jr&message=Donation%20for%20project%20xyz&req-unknownparam=lol")); Assert.Throws<FormatException>(() => new BitcoinUrlBuilder("bitcoin:129mVqKUmJ9uwPxKJBnNdABbuaaNfho4Ha?amount=50&amount=50")); url = new BitcoinUrlBuilder("bitcoin:mq7se9wy2egettFxPbmn99cK8v5AFq55Lx?amount=0.11&r=https://merchant.com/pay.php?h%3D2a8628fc2fbe"); Assert.Equal("bitcoin:mq7se9wy2egettFxPbmn99cK8v5AFq55Lx?amount=0.11&r=https://merchant.com/pay.php?h%3d2a8628fc2fbe", url.ToString()); Assert.Equal("https://merchant.com/pay.php?h=2a8628fc2fbe", url.PaymentRequestUrl.ToString()); Assert.Equal(url.ToString(), new BitcoinUrlBuilder(url.ToString()).ToString()); //Support no address url = new BitcoinUrlBuilder("bitcoin:?r=https://merchant.com/pay.php?h%3D2a8628fc2fbe"); Assert.Equal("https://merchant.com/pay.php?h=2a8628fc2fbe", url.PaymentRequestUrl.ToString()); Assert.Equal(url.ToString(), new BitcoinUrlBuilder(url.ToString()).ToString()); }
public Uri GetPaymentRequestUri(int businessId) { BitcoinUrlBuilder builder = new BitcoinUrlBuilder() { PaymentRequestUrl = new Uri(_Prefix + "?id=" + businessId + "&type=Request") }; return builder.Uri; }
public void CanTalkToPaymentServer() { using(var server = new PaymentServerTester()) { var uri = server.GetPaymentRequestUri(2); BitcoinUrlBuilder btcUri = new BitcoinUrlBuilder(uri); var request = btcUri.GetPaymentRequest(); Assert.True(request.VerifySignature()); Assert.Equal(2, BitConverter.ToInt32(request.Details.MerchantData, 0)); var ack = request.CreatePayment().SubmitPayment(); Assert.NotNull(ack); } }