git / moonbite-network / mobile/test/chain_models_test.dart · raw

import 'package:flutter_test/flutter_test.dart';import 'package:moonbite_mobile/models/chain_models.dart';void main() {  group('ChainStatus', () {    test('parses a demo /api/status payload', () {      final s = ChainStatus.fromJson({        'chain': 'main',        'blocks': 11,        'headers': 11,        'bestblockhash': 'd9cb...22fb',        'difficulty': 1.0033,        'verificationprogress': 1.0,        'mempool_txs': 2,        'connections': 8,        'subversion': '/MoonBite:2.5.0/',        'demo': true,      });      expect(s.chain, 'main');      expect(s.blocks, 11);      expect(s.demo, isTrue);      expect(s.isSynced, isTrue);    });    test('reports not-synced while headers exceed blocks', () {      final s = ChainStatus.fromJson({'blocks': 100, 'headers': 500});      expect(s.isSynced, isFalse);    });  });  group('Utxo', () {    test('parses and converts amount to sats', () {      final u = Utxo.fromJson({        'txid': 'aa',        'vout': 1,        'amount': 12.5,        'scriptPubKey': '0014abcd',        'height': 90,        'confirmations': 12,      });      expect(u.vout, 1);      expect(u.amountSats, 1250000000);      expect(u.confirmations, 12);    });  });  group('WalletBalance', () {    test('parses a zero demo balance', () {      final b = WalletBalance.fromJson({        'address': 'tmoon1qxyz',        'confirmed': 0,        'unconfirmed': 0,        'total': 0,        'utxo_count': 0,        'demo': true,      });      expect(b.total, 0);      expect(b.utxoCount, 0);      expect(b.demo, isTrue);    });  });}