Skip to content
This repository has been archived by the owner on Dec 12, 2024. It is now read-only.

Commit

Permalink
feat: update rfq/quote (#47)
Browse files Browse the repository at this point in the history
  • Loading branch information
ethanwlee authored Jul 12, 2024
1 parent a8c4796 commit ae4c59d
Show file tree
Hide file tree
Showing 6 changed files with 37 additions and 22 deletions.
2 changes: 1 addition & 1 deletion lib/src/http_client/models/create_exchange_request.dart
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ class CreateExchangeRequest {

Map<String, dynamic> toJson() {
return {
'rfq': rfq.toJson(),
'message': rfq.toJson(),
if (replyTo != null) 'replyTo': replyTo,
};
}
Expand Down
30 changes: 21 additions & 9 deletions lib/src/protocol/models/message_data.dart
Original file line number Diff line number Diff line change
Expand Up @@ -31,11 +31,15 @@ class RfqPrivateData {
factory RfqPrivateData.fromJson(Map<String, dynamic> json) {
return RfqPrivateData(
salt: json['salt'],
payin: json['payin'] != null ? PrivatePaymentDetails.fromJson(json['payin']) : null,
payout: json['payout'] != null ? PrivatePaymentDetails.fromJson(json['payout']) : null,
claims: json['claims'] != null ?
(json['claims'] as List).map((claim) => claim as String).toList() :
null,
payin: json['payin'] != null
? PrivatePaymentDetails.fromJson(json['payin'])
: null,
payout: json['payout'] != null
? PrivatePaymentDetails.fromJson(json['payout'])
: null,
claims: json['claims'] != null
? (json['claims'] as List).map((claim) => claim as String).toList()
: null,
);
}

Expand Down Expand Up @@ -169,18 +173,21 @@ class SelectedPayoutMethod {

class QuoteData extends MessageData {
final String expiresAt;
final String payoutUnitsPerPayinUnit;
final QuoteDetails payin;
final QuoteDetails payout;

QuoteData({
required this.expiresAt,
required this.payoutUnitsPerPayinUnit,
required this.payin,
required this.payout,
});

factory QuoteData.fromJson(Map<String, dynamic> json) {
return QuoteData(
expiresAt: json['expiresAt'],
payoutUnitsPerPayinUnit: json['payoutUnitsPerPayinUnit'],
payin: QuoteDetails.fromJson(json['payin']),
payout: QuoteDetails.fromJson(json['payout']),
);
Expand All @@ -190,6 +197,7 @@ class QuoteData extends MessageData {
Map<String, dynamic> toJson() {
return {
'expiresAt': expiresAt,
'payoutUnitsPerPayinUnit': payoutUnitsPerPayinUnit,
'payin': payin.toJson(),
'payout': payout.toJson(),
};
Expand All @@ -198,21 +206,24 @@ class QuoteData extends MessageData {

class QuoteDetails {
final String currencyCode;
final String amount;
final String subtotal;
final String total;
final String? fee;
final PaymentInstruction? paymentInstruction;

QuoteDetails({
required this.currencyCode,
required this.amount,
required this.subtotal,
required this.total,
this.fee,
this.paymentInstruction,
});

factory QuoteDetails.fromJson(Map<String, dynamic> json) {
return QuoteDetails(
currencyCode: json['currencyCode'],
amount: json['amount'],
subtotal: json['subtotal'],
total: json['total'],
fee: json['fee'],
paymentInstruction: json['paymentInstruction'] != null
? PaymentInstruction.fromJson(json['paymentInstruction'])
Expand All @@ -223,7 +234,8 @@ class QuoteDetails {
Map<String, dynamic> toJson() {
return {
'currencyCode': currencyCode,
'amount': amount,
'subtotal': subtotal,
'total': total,
if (fee != null) 'fee': fee,
if (paymentInstruction != null)
'paymentInstruction': paymentInstruction?.toJson(),
Expand Down
4 changes: 0 additions & 4 deletions lib/src/protocol/models/rfq.dart
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,6 @@ import 'dart:convert';
import 'package:decimal/decimal.dart';
import 'package:tbdex/src/protocol/crypto.dart';
import 'package:tbdex/src/protocol/exceptions.dart';
import 'package:tbdex/src/protocol/models/message.dart';
import 'package:tbdex/src/protocol/models/message_data.dart';
import 'package:tbdex/src/protocol/models/offering.dart';
import 'package:tbdex/src/protocol/validator.dart';
import 'package:tbdex/tbdex.dart';
import 'package:web5/web5.dart';

Expand Down
7 changes: 5 additions & 2 deletions test/helpers/test_data.dart
Original file line number Diff line number Diff line change
Expand Up @@ -149,9 +149,11 @@ class TestData {
TypeId.generate(MessageKind.rfq.name),
QuoteData(
expiresAt: '2022-01-01T00:00:00Z',
payoutUnitsPerPayinUnit: '1',
payin: QuoteDetails(
currencyCode: 'AUD',
amount: '100',
subtotal: '100',
total: '100.01',
fee: '0.01',
paymentInstruction: PaymentInstruction(
link: 'https://block.xyz',
Expand All @@ -160,7 +162,8 @@ class TestData {
),
payout: QuoteDetails(
currencyCode: 'BTC',
amount: '0.12',
subtotal: '0.10',
total: '0.12',
fee: '0.02',
paymentInstruction: PaymentInstruction(
link: 'https://block.xyz',
Expand Down
1 change: 0 additions & 1 deletion test/protocol/models/balance_test.dart
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
import 'dart:convert';

import 'package:tbdex/src/protocol/models/balance.dart';
import 'package:tbdex/tbdex.dart';
import 'package:test/test.dart';

Expand Down
15 changes: 10 additions & 5 deletions test/protocol/models/quote_test.dart
Original file line number Diff line number Diff line change
Expand Up @@ -19,23 +19,28 @@ void main() async {
TypeId.generate(MessageKind.rfq.name),
QuoteData(
expiresAt: '2022-01-01T00:00:00Z',
payoutUnitsPerPayinUnit: '1',
payin: QuoteDetails(
currencyCode: 'AUD',
amount: '100',
fee: '0.00',
subtotal: '100',
total: '100.01',
fee: '0.01',
),
payout: QuoteDetails(
currencyCode: 'BTC',
amount: '0.12',
fee: '0.00',
subtotal: '0.10',
total: '0.12',
fee: '0.02',
),
),
);

expect(quote.metadata.id, startsWith(MessageKind.quote.name));
expect(quote.metadata.kind, equals(MessageKind.quote));
expect(quote.metadata.protocol, equals('1.0'));
expect(quote.data.payin.amount, equals('100'));
expect(quote.data.payin.subtotal, equals('100'));
expect(quote.data.payin.total, equals('100.01'));
expect(quote.data.payin.fee, equals('0.01'));
});

test('can parse and verify quote from a json string', () async {
Expand Down

0 comments on commit ae4c59d

Please sign in to comment.