TF-3985 Write unit test for isPremiumAvailable method
This commit is contained in:
@@ -8,7 +8,7 @@ import 'package:tmail_ui_user/features/base/widget/application_version_widget.da
|
|||||||
import 'package:tmail_ui_user/features/base/widget/premium/increase_space_button_widget.dart';
|
import 'package:tmail_ui_user/features/base/widget/premium/increase_space_button_widget.dart';
|
||||||
import 'package:tmail_ui_user/features/base/widget/scrollbar_list_view.dart';
|
import 'package:tmail_ui_user/features/base/widget/scrollbar_list_view.dart';
|
||||||
import 'package:tmail_ui_user/features/mailbox/presentation/base_mailbox_view.dart';
|
import 'package:tmail_ui_user/features/mailbox/presentation/base_mailbox_view.dart';
|
||||||
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/extensions/validate_saas_premium_available_extension.dart';
|
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/extensions/handle_paywall_extension.dart';
|
||||||
import 'package:tmail_ui_user/features/quotas/presentation/quotas_view.dart';
|
import 'package:tmail_ui_user/features/quotas/presentation/quotas_view.dart';
|
||||||
import 'package:tmail_ui_user/main/localizations/app_localizations.dart';
|
import 'package:tmail_ui_user/main/localizations/app_localizations.dart';
|
||||||
|
|
||||||
@@ -38,8 +38,9 @@ class MailboxView extends BaseMailboxView {
|
|||||||
),
|
),
|
||||||
const QuotasView(),
|
const QuotasView(),
|
||||||
Obx(() {
|
Obx(() {
|
||||||
final isPremiumAvailable =
|
final isPremiumAvailable = controller
|
||||||
controller.mailboxDashBoardController.isPremiumAvailable;
|
.mailboxDashBoardController
|
||||||
|
.validatePremiumIsAvailable();
|
||||||
final isDesktop = controller.responsiveUtils.isDesktop(context);
|
final isDesktop = controller.responsiveUtils.isDesktop(context);
|
||||||
|
|
||||||
if (isPremiumAvailable) {
|
if (isPremiumAvailable) {
|
||||||
|
|||||||
+5
-2
@@ -127,7 +127,7 @@ import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/extensions
|
|||||||
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/extensions/reopen_composer_cache_extension.dart';
|
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/extensions/reopen_composer_cache_extension.dart';
|
||||||
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/extensions/set_error_extension.dart';
|
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/extensions/set_error_extension.dart';
|
||||||
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/extensions/update_current_emails_flags_extension.dart';
|
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/extensions/update_current_emails_flags_extension.dart';
|
||||||
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/extensions/validate_saas_premium_available_extension.dart';
|
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/extensions/handle_paywall_extension.dart';
|
||||||
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/extensions/web_auth_redirect_processor_extension.dart';
|
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/extensions/web_auth_redirect_processor_extension.dart';
|
||||||
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/model/dashboard_routes.dart';
|
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/model/dashboard_routes.dart';
|
||||||
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/model/download/download_task_state.dart';
|
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/model/download/download_task_state.dart';
|
||||||
@@ -155,6 +155,7 @@ import 'package:tmail_ui_user/features/network_connection/presentation/network_c
|
|||||||
if (dart.library.html) 'package:tmail_ui_user/features/network_connection/presentation/web_network_connection_controller.dart';
|
if (dart.library.html) 'package:tmail_ui_user/features/network_connection/presentation/web_network_connection_controller.dart';
|
||||||
import 'package:tmail_ui_user/features/paywall/domain/model/paywall_url_pattern.dart';
|
import 'package:tmail_ui_user/features/paywall/domain/model/paywall_url_pattern.dart';
|
||||||
import 'package:tmail_ui_user/features/paywall/domain/state/get_paywall_url_state.dart';
|
import 'package:tmail_ui_user/features/paywall/domain/state/get_paywall_url_state.dart';
|
||||||
|
import 'package:tmail_ui_user/features/paywall/presentation/saas_premium_mixin.dart';
|
||||||
import 'package:tmail_ui_user/features/push_notification/presentation/controller/web_socket_controller.dart';
|
import 'package:tmail_ui_user/features/push_notification/presentation/controller/web_socket_controller.dart';
|
||||||
import 'package:tmail_ui_user/features/push_notification/presentation/notification/local_notification_manager.dart';
|
import 'package:tmail_ui_user/features/push_notification/presentation/notification/local_notification_manager.dart';
|
||||||
import 'package:tmail_ui_user/features/push_notification/presentation/services/fcm_service.dart';
|
import 'package:tmail_ui_user/features/push_notification/presentation/services/fcm_service.dart';
|
||||||
@@ -206,7 +207,9 @@ import 'package:server_settings/server_settings/tmail_server_settings_extension.
|
|||||||
import 'package:uuid/uuid.dart';
|
import 'package:uuid/uuid.dart';
|
||||||
|
|
||||||
class MailboxDashBoardController extends ReloadableController
|
class MailboxDashBoardController extends ReloadableController
|
||||||
with ContactSupportMixin, OwnEmailAddressMixin {
|
with ContactSupportMixin,
|
||||||
|
OwnEmailAddressMixin,
|
||||||
|
SaaSPremiumMixin {
|
||||||
|
|
||||||
final RemoveEmailDraftsInteractor _removeEmailDraftsInteractor = Get.find<RemoveEmailDraftsInteractor>();
|
final RemoveEmailDraftsInteractor _removeEmailDraftsInteractor = Get.find<RemoveEmailDraftsInteractor>();
|
||||||
final EmailReceiveManager _emailReceiveManager = Get.find<EmailReceiveManager>();
|
final EmailReceiveManager _emailReceiveManager = Get.find<EmailReceiveManager>();
|
||||||
|
|||||||
+4
-7
@@ -1,5 +1,4 @@
|
|||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:tmail_ui_user/features/home/domain/extensions/session_extensions.dart';
|
|
||||||
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/controller/mailbox_dashboard_controller.dart';
|
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/controller/mailbox_dashboard_controller.dart';
|
||||||
import 'package:tmail_ui_user/features/paywall/domain/model/paywall_url_pattern.dart';
|
import 'package:tmail_ui_user/features/paywall/domain/model/paywall_url_pattern.dart';
|
||||||
import 'package:tmail_ui_user/features/paywall/domain/usecases/get_paywall_url_interactor.dart';
|
import 'package:tmail_ui_user/features/paywall/domain/usecases/get_paywall_url_interactor.dart';
|
||||||
@@ -8,16 +7,14 @@ import 'package:tmail_ui_user/main/routes/route_navigation.dart';
|
|||||||
import 'package:tmail_ui_user/main/utils/app_utils.dart';
|
import 'package:tmail_ui_user/main/utils/app_utils.dart';
|
||||||
|
|
||||||
extension ValidateSaasPremiumAvailableExtension on MailboxDashBoardController {
|
extension ValidateSaasPremiumAvailableExtension on MailboxDashBoardController {
|
||||||
bool get isPremiumAvailable {
|
bool validatePremiumIsAvailable() {
|
||||||
if (accountId.value == null || sessionCurrent == null) {
|
if (accountId.value == null || sessionCurrent == null) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
return isPremiumAvailable(
|
||||||
final saasAccount = sessionCurrent?.getSaaSAccountCapability(
|
accountId: accountId.value,
|
||||||
accountId.value!,
|
session: sessionCurrent,
|
||||||
);
|
);
|
||||||
|
|
||||||
return saasAccount?.isPremiumAvailable ?? false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void loadPaywallUrl() {
|
void loadPaywallUrl() {
|
||||||
@@ -0,0 +1,13 @@
|
|||||||
|
import 'package:jmap_dart_client/jmap/account_id.dart';
|
||||||
|
import 'package:jmap_dart_client/jmap/core/session/session.dart';
|
||||||
|
import 'package:tmail_ui_user/features/home/domain/extensions/session_extensions.dart';
|
||||||
|
|
||||||
|
mixin SaaSPremiumMixin {
|
||||||
|
bool isPremiumAvailable({Session? session, AccountId? accountId}) {
|
||||||
|
if (accountId == null || session == null) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
final saasAccount = session.getSaaSAccountCapability(accountId);
|
||||||
|
return saasAccount?.isPremiumAvailable ?? false;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,148 @@
|
|||||||
|
import 'package:flutter_test/flutter_test.dart';
|
||||||
|
import 'package:jmap_dart_client/jmap/core/account/account.dart';
|
||||||
|
import 'package:jmap_dart_client/jmap/core/session/session.dart';
|
||||||
|
import 'package:jmap_dart_client/jmap/core/state.dart';
|
||||||
|
import 'package:jmap_dart_client/jmap/core/user_name.dart';
|
||||||
|
import 'package:model/model.dart';
|
||||||
|
import 'package:tmail_ui_user/features/home/domain/extensions/session_extensions.dart';
|
||||||
|
import 'package:tmail_ui_user/features/paywall/presentation/saas_premium_mixin.dart';
|
||||||
|
|
||||||
|
import '../../fixtures/account_fixtures.dart';
|
||||||
|
|
||||||
|
class TestClass with SaaSPremiumMixin {}
|
||||||
|
|
||||||
|
void main() {
|
||||||
|
late TestClass testClass;
|
||||||
|
|
||||||
|
setUp(() {
|
||||||
|
testClass = TestClass();
|
||||||
|
});
|
||||||
|
|
||||||
|
group('SaaSPremiumMixin.isPremiumAvailable', () {
|
||||||
|
test('should return false when accountId is null', () {
|
||||||
|
final session = Session(
|
||||||
|
{SessionExtensions.linagoraSaaSCapability: SaaSAccountCapability()},
|
||||||
|
{},
|
||||||
|
{},
|
||||||
|
UserName('alice@domain.tld'),
|
||||||
|
Uri.parse('http://domain.com/jmap'),
|
||||||
|
Uri.parse(
|
||||||
|
'http://domain.com/download/{accountId}/{blobId}/?type={type}&name={name}'),
|
||||||
|
Uri.parse('http://domain.com/upload/{accountId}'),
|
||||||
|
Uri.parse(
|
||||||
|
'http://domain.com/eventSource?types={types}&closeAfter={closeafter}&ping={ping}'),
|
||||||
|
State('2c9f1b12-b35a-43e6-9af2-0106fb53a943'),
|
||||||
|
);
|
||||||
|
final result = testClass.isPremiumAvailable(
|
||||||
|
session: session,
|
||||||
|
accountId: null,
|
||||||
|
);
|
||||||
|
expect(result, isFalse);
|
||||||
|
});
|
||||||
|
|
||||||
|
test('should return false when session is null', () {
|
||||||
|
final accountId = AccountFixtures.aliceAccountId;
|
||||||
|
final result = testClass.isPremiumAvailable(accountId: accountId);
|
||||||
|
expect(result, isFalse);
|
||||||
|
});
|
||||||
|
|
||||||
|
test('should return false when session without SaaS capability', () {
|
||||||
|
final accountId = AccountFixtures.aliceAccountId;
|
||||||
|
final session = Session(
|
||||||
|
{},
|
||||||
|
{
|
||||||
|
AccountFixtures.aliceAccountId:
|
||||||
|
Account(AccountName('alice@domain.tld'), true, false, {})
|
||||||
|
},
|
||||||
|
{},
|
||||||
|
UserName('alice@domain.tld'),
|
||||||
|
Uri.parse('http://domain.com/jmap'),
|
||||||
|
Uri.parse(
|
||||||
|
'http://domain.com/download/{accountId}/{blobId}/?type={type}&name={name}'),
|
||||||
|
Uri.parse('http://domain.com/upload/{accountId}'),
|
||||||
|
Uri.parse(
|
||||||
|
'http://domain.com/eventSource?types={types}&closeAfter={closeafter}&ping={ping}'),
|
||||||
|
State('2c9f1b12-b35a-43e6-9af2-0106fb53a943'),
|
||||||
|
);
|
||||||
|
final result = testClass.isPremiumAvailable(
|
||||||
|
session: session,
|
||||||
|
accountId: accountId,
|
||||||
|
);
|
||||||
|
|
||||||
|
expect(result, isFalse);
|
||||||
|
});
|
||||||
|
|
||||||
|
test('should return false when SaaS capability has canUpgrade is false',
|
||||||
|
() {
|
||||||
|
final accountId = AccountFixtures.aliceAccountId;
|
||||||
|
final session = Session(
|
||||||
|
{
|
||||||
|
SessionExtensions.linagoraSaaSCapability:
|
||||||
|
SaaSAccountCapability(canUpgrade: false)
|
||||||
|
},
|
||||||
|
{
|
||||||
|
AccountFixtures.aliceAccountId:
|
||||||
|
Account(AccountName('alice@domain.tld'), true, false, {
|
||||||
|
SessionExtensions.linagoraSaaSCapability:
|
||||||
|
SaaSAccountCapability(canUpgrade: false),
|
||||||
|
})
|
||||||
|
},
|
||||||
|
{
|
||||||
|
SessionExtensions.linagoraSaaSCapability:
|
||||||
|
AccountFixtures.aliceAccountId,
|
||||||
|
},
|
||||||
|
UserName('alice@domain.tld'),
|
||||||
|
Uri.parse('http://domain.com/jmap'),
|
||||||
|
Uri.parse(
|
||||||
|
'http://domain.com/download/{accountId}/{blobId}/?type={type}&name={name}'),
|
||||||
|
Uri.parse('http://domain.com/upload/{accountId}'),
|
||||||
|
Uri.parse(
|
||||||
|
'http://domain.com/eventSource?types={types}&closeAfter={closeafter}&ping={ping}'),
|
||||||
|
State('2c9f1b12-b35a-43e6-9af2-0106fb53a943'),
|
||||||
|
);
|
||||||
|
|
||||||
|
final result = testClass.isPremiumAvailable(
|
||||||
|
session: session,
|
||||||
|
accountId: accountId,
|
||||||
|
);
|
||||||
|
|
||||||
|
expect(result, isFalse);
|
||||||
|
});
|
||||||
|
|
||||||
|
test('should return true when SaaS capability has canUpgrade is true', () {
|
||||||
|
final accountId = AccountFixtures.aliceAccountId;
|
||||||
|
final session = Session(
|
||||||
|
{
|
||||||
|
SessionExtensions.linagoraSaaSCapability:
|
||||||
|
SaaSAccountCapability(canUpgrade: true)
|
||||||
|
},
|
||||||
|
{
|
||||||
|
AccountFixtures.aliceAccountId:
|
||||||
|
Account(AccountName('alice@domain.tld'), true, false, {
|
||||||
|
SessionExtensions.linagoraSaaSCapability:
|
||||||
|
SaaSAccountCapability(canUpgrade: true),
|
||||||
|
})
|
||||||
|
},
|
||||||
|
{
|
||||||
|
SessionExtensions.linagoraSaaSCapability:
|
||||||
|
AccountFixtures.aliceAccountId,
|
||||||
|
},
|
||||||
|
UserName('alice@domain.tld'),
|
||||||
|
Uri.parse('http://domain.com/jmap'),
|
||||||
|
Uri.parse(
|
||||||
|
'http://domain.com/download/{accountId}/{blobId}/?type={type}&name={name}'),
|
||||||
|
Uri.parse('http://domain.com/upload/{accountId}'),
|
||||||
|
Uri.parse(
|
||||||
|
'http://domain.com/eventSource?types={types}&closeAfter={closeafter}&ping={ping}'),
|
||||||
|
State('2c9f1b12-b35a-43e6-9af2-0106fb53a943'),
|
||||||
|
);
|
||||||
|
|
||||||
|
final result = testClass.isPremiumAvailable(
|
||||||
|
session: session,
|
||||||
|
accountId: accountId,
|
||||||
|
);
|
||||||
|
|
||||||
|
expect(result, isTrue);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user