Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
47 changes: 47 additions & 0 deletions test/notifications/notification_card_test.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
import 'package:flutter/material.dart';
import 'package:flutter_svg/svg.dart';

import 'package:flutter_test/flutter_test.dart';
import 'package:stackwallet/models/notification_model.dart';
import 'package:stackwallet/notifications/notification_card.dart';
import 'package:stackwallet/utilities/assets.dart';
import 'package:stackwallet/utilities/enums/coin_enum.dart';
import 'package:stackwallet/utilities/theme/light_colors.dart';
import 'package:stackwallet/utilities/theme/stack_colors.dart';

void main() {
testWidgets("test notification card", (widgetTester) async {
final key = UniqueKey();
final notificationCard = NotificationCard(
key: key,
notification: NotificationModel(
id: 1,
title: "notification title",
description: "notification description",
iconAssetName: Assets.svg.iconFor(coin: Coin.bitcoin),
date: DateTime.parse("1662544771"),
walletId: "wallet id",
read: true,
shouldWatchForUpdates: true,
coinName: "Bitcoin"),
);

await widgetTester.pumpWidget(
MaterialApp(
theme: ThemeData(
extensions: [
StackColors.fromStackColorTheme(LightColors()),
],
),
home: Material(
child: notificationCard,
),
),
);

expect(find.byWidget(notificationCard), findsOneWidget);
expect(find.text("notification title"), findsOneWidget);
expect(find.text("notification description"), findsOneWidget);
expect(find.byType(SvgPicture), findsOneWidget);
});
}
157 changes: 157 additions & 0 deletions test/pages/send_view/send_view_test.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,157 @@
import 'package:flutter/material.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:mockito/annotations.dart';
import 'package:mockito/mockito.dart';
import 'package:stackwallet/models/send_view_auto_fill_data.dart';
import 'package:stackwallet/pages/send_view/send_view.dart';
import 'package:stackwallet/providers/providers.dart';
import 'package:stackwallet/services/coins/bitcoin/bitcoin_wallet.dart';
import 'package:stackwallet/services/coins/coin_service.dart';
import 'package:stackwallet/services/coins/manager.dart';
import 'package:stackwallet/services/locale_service.dart';
import 'package:stackwallet/services/node_service.dart';
import 'package:stackwallet/services/wallets.dart';
import 'package:stackwallet/services/wallets_service.dart';
import 'package:stackwallet/utilities/enums/coin_enum.dart';
import 'package:stackwallet/utilities/prefs.dart';
import 'package:stackwallet/utilities/theme/light_colors.dart';
import 'package:stackwallet/utilities/theme/stack_colors.dart';
import 'send_view_test.mocks.dart';

@GenerateMocks([
Wallets,
WalletsService,
NodeService,
BitcoinWallet,
LocaleService,
Prefs,
], customMocks: [
MockSpec<Manager>(returnNullOnMissingStub: true),
MockSpec<CoinServiceAPI>(returnNullOnMissingStub: true),
])
void main() {
testWidgets("Send to valid address", (widgetTester) async {
final mockWallets = MockWallets();
final mockWalletsService = MockWalletsService();
final mockNodeService = MockNodeService();
final CoinServiceAPI wallet = MockBitcoinWallet();
final mockLocaleService = MockLocaleService();
final mockPrefs = MockPrefs();

when(wallet.coin).thenAnswer((_) => Coin.bitcoin);
when(wallet.walletName).thenAnswer((_) => "some wallet");
when(wallet.walletId).thenAnswer((_) => "wallet id");

final manager = Manager(wallet);
when(mockWallets.getManagerProvider("wallet id")).thenAnswer(
(realInvocation) => ChangeNotifierProvider((ref) => manager));
when(mockWallets.getManager("wallet id"))
.thenAnswer((realInvocation) => manager);

when(mockLocaleService.locale).thenAnswer((_) => "en_US");
when(mockPrefs.currency).thenAnswer((_) => "USD");
when(wallet.validateAddress("send to address"))
.thenAnswer((realInvocation) => true);

await widgetTester.pumpWidget(
ProviderScope(
overrides: [
walletsChangeNotifierProvider.overrideWithValue(mockWallets),
walletsServiceChangeNotifierProvider
.overrideWithValue(mockWalletsService),
nodeServiceChangeNotifierProvider.overrideWithValue(mockNodeService),
localeServiceChangeNotifierProvider
.overrideWithValue(mockLocaleService),
prefsChangeNotifierProvider.overrideWithValue(mockPrefs),
// previewTxButtonStateProvider
],
child: MaterialApp(
theme: ThemeData(
extensions: [
StackColors.fromStackColorTheme(
LightColors(),
),
],
),
home: SendView(
walletId: "wallet id",
coin: Coin.bitcoin,
autoFillData: SendViewAutoFillData(
address: "send to address", contactLabel: "contact label"),
),
),
),
);

expect(find.text("Send to"), findsOneWidget);
expect(find.text("Amount"), findsOneWidget);
expect(find.text("Note (optional)"), findsOneWidget);
expect(find.text("Transaction fee (estimated)"), findsOneWidget);
verify(manager.validateAddress("send to address")).called(1);
});

testWidgets("Send to invalid address", (widgetTester) async {
final mockWallets = MockWallets();
final mockWalletsService = MockWalletsService();
final mockNodeService = MockNodeService();
final CoinServiceAPI wallet = MockBitcoinWallet();
final mockLocaleService = MockLocaleService();
final mockPrefs = MockPrefs();

when(wallet.coin).thenAnswer((_) => Coin.bitcoin);
when(wallet.walletName).thenAnswer((_) => "some wallet");
when(wallet.walletId).thenAnswer((_) => "wallet id");

final manager = Manager(wallet);
when(mockWallets.getManagerProvider("wallet id")).thenAnswer(
(realInvocation) => ChangeNotifierProvider((ref) => manager));
when(mockWallets.getManager("wallet id"))
.thenAnswer((realInvocation) => manager);

when(mockLocaleService.locale).thenAnswer((_) => "en_US");
when(mockPrefs.currency).thenAnswer((_) => "USD");
when(wallet.validateAddress("send to address"))
.thenAnswer((realInvocation) => false);

// when(manager.isOwnAddress("send to address"))
// .thenAnswer((realInvocation) => Future(() => true));

await widgetTester.pumpWidget(
ProviderScope(
overrides: [
walletsChangeNotifierProvider.overrideWithValue(mockWallets),
walletsServiceChangeNotifierProvider
.overrideWithValue(mockWalletsService),
nodeServiceChangeNotifierProvider.overrideWithValue(mockNodeService),
localeServiceChangeNotifierProvider
.overrideWithValue(mockLocaleService),
prefsChangeNotifierProvider.overrideWithValue(mockPrefs),
// previewTxButtonStateProvider
],
child: MaterialApp(
theme: ThemeData(
extensions: [
StackColors.fromStackColorTheme(
LightColors(),
),
],
),
home: SendView(
walletId: "wallet id",
coin: Coin.bitcoin,
autoFillData: SendViewAutoFillData(
address: "send to address", contactLabel: "contact label"),
),
),
),
);

expect(find.text("Send to"), findsOneWidget);
expect(find.text("Amount"), findsOneWidget);
expect(find.text("Note (optional)"), findsOneWidget);
expect(find.text("Transaction fee (estimated)"), findsOneWidget);
expect(find.text("Invalid address"), findsOneWidget);
verify(manager.validateAddress("send to address")).called(1);
});
}
Loading