TF-3235 Create SeachSnippets for presentation emails and update at interactors
This commit is contained in:
+93
@@ -0,0 +1,93 @@
|
||||
import 'package:dartz/dartz.dart';
|
||||
import 'package:flutter_test/flutter_test.dart';
|
||||
import 'package:jmap_dart_client/jmap/core/id.dart';
|
||||
import 'package:jmap_dart_client/jmap/mail/email/email.dart';
|
||||
import 'package:jmap_dart_client/jmap/mail/email/email_filter_condition.dart';
|
||||
import 'package:mockito/annotations.dart';
|
||||
import 'package:mockito/mockito.dart';
|
||||
import 'package:model/extensions/email_extension.dart';
|
||||
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/state/quick_search_email_state.dart';
|
||||
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/usecases/quick_search_email_interactor.dart';
|
||||
import 'package:tmail_ui_user/features/thread/domain/model/search_email.dart';
|
||||
import 'package:tmail_ui_user/features/thread/domain/repository/thread_repository.dart';
|
||||
|
||||
import '../../../../fixtures/account_fixtures.dart';
|
||||
import '../../../../fixtures/session_fixtures.dart';
|
||||
import 'quick_search_email_interactor_test.mocks.dart';
|
||||
|
||||
@GenerateNiceMocks([MockSpec<ThreadRepository>()])
|
||||
void main() {
|
||||
final threadRepository = MockThreadRepository();
|
||||
final quickSearchEmailInteractor = QuickSearchEmailInteractor(threadRepository);
|
||||
|
||||
group('quick search email interactor test:', () {
|
||||
test(
|
||||
'should return list of presentation emails '
|
||||
'when threadRepository.searchEmails returns list of emails',
|
||||
() async {
|
||||
// arrange
|
||||
final searchEmail = SearchEmail(
|
||||
id: EmailId(Id('someId')),
|
||||
searchSnippetSubject: 'searchSnippetSubject',
|
||||
searchSnippetPreview: 'searchSnippetPreview',
|
||||
);
|
||||
when(
|
||||
threadRepository.searchEmails(
|
||||
any,
|
||||
any,
|
||||
limit: anyNamed('limit'),
|
||||
sort: anyNamed('sort'),
|
||||
filter: anyNamed('filter'),
|
||||
properties: anyNamed('properties'),
|
||||
),
|
||||
).thenAnswer((_) async => [searchEmail]);
|
||||
|
||||
// act
|
||||
final result = await quickSearchEmailInteractor.execute(
|
||||
SessionFixtures.aliceSession,
|
||||
AccountFixtures.aliceAccountId,
|
||||
filter: EmailFilterCondition(text: 'test'),
|
||||
);
|
||||
|
||||
// assert
|
||||
expect(
|
||||
result,
|
||||
equals(Right(QuickSearchEmailSuccess([searchEmail.toPresentationEmail(
|
||||
searchSnippetSubject: searchEmail.searchSnippetSubject,
|
||||
searchSnippetPreview: searchEmail.searchSnippetPreview,
|
||||
)]))),
|
||||
);
|
||||
});
|
||||
|
||||
test(
|
||||
'should return failure '
|
||||
'when threadRepository.searchEmails throws exception',
|
||||
() async {
|
||||
// arrange
|
||||
final exception = Exception();
|
||||
when(
|
||||
threadRepository.searchEmails(
|
||||
any,
|
||||
any,
|
||||
limit: anyNamed('limit'),
|
||||
sort: anyNamed('sort'),
|
||||
filter: anyNamed('filter'),
|
||||
properties: anyNamed('properties'),
|
||||
),
|
||||
).thenThrow(exception);
|
||||
|
||||
// act
|
||||
final result = await quickSearchEmailInteractor.execute(
|
||||
SessionFixtures.aliceSession,
|
||||
AccountFixtures.aliceAccountId,
|
||||
filter: EmailFilterCondition(text: 'test'),
|
||||
);
|
||||
|
||||
// assert
|
||||
expect(
|
||||
result,
|
||||
equals(Left(QuickSearchEmailFailure(exception))),
|
||||
);
|
||||
});
|
||||
});
|
||||
}
|
||||
+98
@@ -0,0 +1,98 @@
|
||||
import 'package:dartz/dartz.dart';
|
||||
import 'package:flutter_test/flutter_test.dart';
|
||||
import 'package:jmap_dart_client/jmap/mail/email/email_filter_condition.dart';
|
||||
import 'package:mockito/annotations.dart';
|
||||
import 'package:mockito/mockito.dart';
|
||||
import 'package:model/extensions/email_extension.dart';
|
||||
import 'package:tmail_ui_user/features/search/email/domain/state/refresh_changes_search_email_state.dart';
|
||||
import 'package:tmail_ui_user/features/search/email/domain/usecases/refresh_changes_search_email_interactor.dart';
|
||||
import 'package:tmail_ui_user/features/thread/domain/model/search_email.dart';
|
||||
import 'package:tmail_ui_user/features/thread/domain/repository/thread_repository.dart';
|
||||
|
||||
import '../../../../../fixtures/account_fixtures.dart';
|
||||
import '../../../../../fixtures/session_fixtures.dart';
|
||||
import 'refresh_changes_search_email_interactor_test.mocks.dart';
|
||||
|
||||
@GenerateNiceMocks([MockSpec<ThreadRepository>()])
|
||||
void main() {
|
||||
final threadRepository = MockThreadRepository();
|
||||
final refreshChangesSearchEmailInteractor = RefreshChangesSearchEmailInteractor(
|
||||
threadRepository);
|
||||
|
||||
group('refresh changes search email interactor test:', () {
|
||||
test(
|
||||
'should return list of presentation emails '
|
||||
'when threadRepository.searchEmails returns list of emails',
|
||||
() {
|
||||
// arrange
|
||||
final searchEmail = SearchEmail(
|
||||
searchSnippetSubject: 'searchSnippetSubject',
|
||||
searchSnippetPreview: 'searchSnippetPreview',
|
||||
);
|
||||
when(
|
||||
threadRepository.searchEmails(
|
||||
any,
|
||||
any,
|
||||
limit: anyNamed('limit'),
|
||||
sort: anyNamed('sort'),
|
||||
filter: anyNamed('filter'),
|
||||
properties: anyNamed('properties'),
|
||||
),
|
||||
).thenAnswer((_) async => [searchEmail]);
|
||||
|
||||
// act
|
||||
final result = refreshChangesSearchEmailInteractor.execute(
|
||||
SessionFixtures.aliceSession,
|
||||
AccountFixtures.aliceAccountId,
|
||||
filter: EmailFilterCondition(text: 'test'),
|
||||
);
|
||||
|
||||
// assert
|
||||
expect(
|
||||
result,
|
||||
emitsInOrder([
|
||||
Right(RefreshingChangeSearchEmailState()),
|
||||
Right(RefreshChangesSearchEmailSuccess([searchEmail.toPresentationEmail(
|
||||
searchSnippetSubject: searchEmail.searchSnippetSubject,
|
||||
searchSnippetPreview: searchEmail.searchSnippetPreview,
|
||||
)])),
|
||||
])
|
||||
);
|
||||
});
|
||||
|
||||
test(
|
||||
'should return failure '
|
||||
'when threadRepository.searchEmails throw exception',
|
||||
() {
|
||||
// arrange
|
||||
final exception = Exception();
|
||||
when(
|
||||
threadRepository.searchEmails(
|
||||
any,
|
||||
any,
|
||||
limit: anyNamed('limit'),
|
||||
sort: anyNamed('sort'),
|
||||
filter: anyNamed('filter'),
|
||||
properties: anyNamed('properties'),
|
||||
),
|
||||
).thenThrow(exception);
|
||||
|
||||
// act
|
||||
final result = refreshChangesSearchEmailInteractor.execute(
|
||||
SessionFixtures.aliceSession,
|
||||
AccountFixtures.aliceAccountId,
|
||||
filter: EmailFilterCondition(text: 'test'),
|
||||
);
|
||||
|
||||
// assert
|
||||
expect(
|
||||
result,
|
||||
emitsInOrder([
|
||||
Right(RefreshingChangeSearchEmailState()),
|
||||
Left(RefreshChangesSearchEmailFailure(exception)),
|
||||
])
|
||||
);
|
||||
},
|
||||
);
|
||||
});
|
||||
}
|
||||
@@ -0,0 +1,135 @@
|
||||
import 'package:dartz/dartz.dart';
|
||||
import 'package:flutter_test/flutter_test.dart';
|
||||
import 'package:jmap_dart_client/jmap/mail/email/email_filter_condition.dart';
|
||||
import 'package:mockito/annotations.dart';
|
||||
import 'package:mockito/mockito.dart';
|
||||
import 'package:model/model.dart';
|
||||
import 'package:tmail_ui_user/features/thread/domain/model/search_email.dart';
|
||||
import 'package:tmail_ui_user/features/thread/domain/repository/thread_repository.dart';
|
||||
import 'package:tmail_ui_user/features/thread/domain/state/search_email_state.dart';
|
||||
import 'package:tmail_ui_user/features/thread/domain/usecases/search_email_interactor.dart';
|
||||
|
||||
import '../../../../fixtures/account_fixtures.dart';
|
||||
import '../../../../fixtures/session_fixtures.dart';
|
||||
import 'search_email_interactor_test.mocks.dart';
|
||||
|
||||
@GenerateNiceMocks([MockSpec<ThreadRepository>()])
|
||||
void main() {
|
||||
final threadRepository = MockThreadRepository();
|
||||
final searchEmailInteractor = SearchEmailInteractor(threadRepository);
|
||||
|
||||
group('search email interactor test:', () {
|
||||
test(
|
||||
'should return list of presentation emails '
|
||||
'when threadRepository.searchEmails returns list of emails with search snippets',
|
||||
() {
|
||||
// arrange
|
||||
final searchEmail = SearchEmail(
|
||||
searchSnippetSubject: 'searchSnippetSubject',
|
||||
searchSnippetPreview: 'searchSnippetPreview',
|
||||
);
|
||||
when(
|
||||
threadRepository.searchEmails(
|
||||
any,
|
||||
any,
|
||||
limit: anyNamed('limit'),
|
||||
sort: anyNamed('sort'),
|
||||
filter: anyNamed('filter'),
|
||||
properties: anyNamed('properties'),
|
||||
),
|
||||
).thenAnswer((_) async => [searchEmail]);
|
||||
|
||||
// act
|
||||
final result = searchEmailInteractor.execute(
|
||||
SessionFixtures.aliceSession,
|
||||
AccountFixtures.aliceAccountId,
|
||||
filter: EmailFilterCondition(text: 'test'),
|
||||
);
|
||||
|
||||
// assert
|
||||
expect(
|
||||
result,
|
||||
emitsInOrder([
|
||||
Right(SearchingState()),
|
||||
Right(SearchEmailSuccess(
|
||||
[searchEmail.toPresentationEmail(
|
||||
searchSnippetSubject: searchEmail.searchSnippetSubject,
|
||||
searchSnippetPreview: searchEmail.searchSnippetPreview,
|
||||
)],
|
||||
))
|
||||
]),
|
||||
);
|
||||
});
|
||||
|
||||
test(
|
||||
'should return list of presentation emails '
|
||||
'when threadRepository.searchEmails returns list of emails without search snippets',
|
||||
() {
|
||||
// arrange
|
||||
final searchEmail = SearchEmail(
|
||||
searchSnippetSubject: null,
|
||||
searchSnippetPreview: null,
|
||||
);
|
||||
when(
|
||||
threadRepository.searchEmails(
|
||||
any,
|
||||
any,
|
||||
limit: anyNamed('limit'),
|
||||
sort: anyNamed('sort'),
|
||||
filter: anyNamed('filter'),
|
||||
properties: anyNamed('properties'),
|
||||
),
|
||||
).thenAnswer((_) async => [searchEmail]);
|
||||
|
||||
// act
|
||||
final result = searchEmailInteractor.execute(
|
||||
SessionFixtures.aliceSession,
|
||||
AccountFixtures.aliceAccountId,
|
||||
filter: EmailFilterCondition(text: 'test'),
|
||||
);
|
||||
|
||||
// assert
|
||||
expect(
|
||||
result,
|
||||
emitsInOrder([
|
||||
Right(SearchingState()),
|
||||
Right(SearchEmailSuccess([searchEmail.toPresentationEmail()]))
|
||||
]),
|
||||
);
|
||||
});
|
||||
|
||||
test(
|
||||
'should return Failure when threadRepository.searchEmails returns Failure',
|
||||
() {
|
||||
// arrange
|
||||
final exception = Exception();
|
||||
when(
|
||||
threadRepository.searchEmails(
|
||||
any,
|
||||
any,
|
||||
limit: anyNamed('limit'),
|
||||
sort: anyNamed('sort'),
|
||||
filter: anyNamed('filter'),
|
||||
properties: anyNamed('properties'),
|
||||
),
|
||||
).thenThrow(exception);
|
||||
|
||||
// act
|
||||
final result = searchEmailInteractor.execute(
|
||||
SessionFixtures.aliceSession,
|
||||
AccountFixtures.aliceAccountId,
|
||||
filter: EmailFilterCondition(text: 'test'),
|
||||
);
|
||||
|
||||
// assert
|
||||
expect(
|
||||
result,
|
||||
emitsInOrder([
|
||||
Right(SearchingState()),
|
||||
Left(SearchEmailFailure(exception)),
|
||||
]),
|
||||
);
|
||||
},
|
||||
);
|
||||
});
|
||||
}
|
||||
@@ -0,0 +1,100 @@
|
||||
import 'package:dartz/dartz.dart';
|
||||
import 'package:flutter_test/flutter_test.dart';
|
||||
import 'package:jmap_dart_client/jmap/core/id.dart';
|
||||
import 'package:jmap_dart_client/jmap/mail/email/email.dart';
|
||||
import 'package:jmap_dart_client/jmap/mail/email/email_filter_condition.dart';
|
||||
import 'package:mockito/annotations.dart';
|
||||
import 'package:mockito/mockito.dart';
|
||||
import 'package:model/model.dart';
|
||||
import 'package:tmail_ui_user/features/thread/domain/model/search_email.dart';
|
||||
import 'package:tmail_ui_user/features/thread/domain/repository/thread_repository.dart';
|
||||
import 'package:tmail_ui_user/features/thread/domain/state/search_more_email_state.dart';
|
||||
import 'package:tmail_ui_user/features/thread/domain/usecases/search_more_email_interactor.dart';
|
||||
|
||||
import '../../../../fixtures/account_fixtures.dart';
|
||||
import '../../../../fixtures/session_fixtures.dart';
|
||||
import 'search_more_email_interactor_test.mocks.dart';
|
||||
|
||||
@GenerateNiceMocks([MockSpec<ThreadRepository>()])
|
||||
void main() {
|
||||
final threadRepository = MockThreadRepository();
|
||||
final searchMoreEmailInteractor = SearchMoreEmailInteractor(threadRepository);
|
||||
group('search more email interactor test:', () {
|
||||
test(
|
||||
'should return list of presentation emails '
|
||||
'when threadRepository.searchEmails returns list of emails',
|
||||
() {
|
||||
// arrange
|
||||
final searchEmail = SearchEmail(
|
||||
id: EmailId(Id('someId')),
|
||||
searchSnippetSubject: 'searchSnippetSubject',
|
||||
searchSnippetPreview: 'searchSnippetPreview',
|
||||
);
|
||||
when(
|
||||
threadRepository.searchEmails(
|
||||
any,
|
||||
any,
|
||||
limit: anyNamed('limit'),
|
||||
sort: anyNamed('sort'),
|
||||
filter: anyNamed('filter'),
|
||||
properties: anyNamed('properties'),
|
||||
),
|
||||
).thenAnswer((_) async => [searchEmail]);
|
||||
|
||||
// act
|
||||
final result = searchMoreEmailInteractor.execute(
|
||||
SessionFixtures.aliceSession,
|
||||
AccountFixtures.aliceAccountId,
|
||||
filter: EmailFilterCondition(text: 'test'),
|
||||
);
|
||||
|
||||
// assert
|
||||
expect(
|
||||
result,
|
||||
emitsInOrder([
|
||||
Right(SearchingMoreState()),
|
||||
Right(SearchMoreEmailSuccess(
|
||||
[searchEmail.toPresentationEmail(
|
||||
searchSnippetSubject: searchEmail.searchSnippetSubject,
|
||||
searchSnippetPreview: searchEmail.searchSnippetPreview,
|
||||
)]
|
||||
)),
|
||||
]),
|
||||
);
|
||||
});
|
||||
|
||||
test(
|
||||
'should return failure '
|
||||
'when threadRepository.searchEmails throw exception',
|
||||
() {
|
||||
// arrange
|
||||
final exception = Exception();
|
||||
when(
|
||||
threadRepository.searchEmails(
|
||||
any,
|
||||
any,
|
||||
limit: anyNamed('limit'),
|
||||
sort: anyNamed('sort'),
|
||||
filter: anyNamed('filter'),
|
||||
properties: anyNamed('properties'),
|
||||
),
|
||||
).thenThrow(exception);
|
||||
|
||||
// act
|
||||
final result = searchMoreEmailInteractor.execute(
|
||||
SessionFixtures.aliceSession,
|
||||
AccountFixtures.aliceAccountId,
|
||||
filter: EmailFilterCondition(text: 'test'),
|
||||
);
|
||||
|
||||
// assert
|
||||
expect(
|
||||
result,
|
||||
emitsInOrder([
|
||||
Right(SearchingMoreState()),
|
||||
Left(SearchMoreEmailFailure(exception)),
|
||||
]),
|
||||
);
|
||||
});
|
||||
});
|
||||
}
|
||||
Reference in New Issue
Block a user