TF-4282 Fix sort of web search suggestion (#4289)

This commit is contained in:
Dat Dang
2026-01-30 11:19:27 +07:00
committed by GitHub
parent 88d217f787
commit 342d2f295a
8 changed files with 561 additions and 72 deletions
@@ -57,9 +57,9 @@ void main() {
final dioAdapterHeaders = <String, dynamic>{
'accept': 'application/json;jmapVersion=rfc-8621',
};
final dioAdapter = DioAdapter(dio: dio);
final httpClient = HttpClient(dio);
final threadApi = ThreadAPI(httpClient);
late DioAdapter dioAdapter;
late HttpClient httpClient;
late ThreadAPI threadApi;
final sessionState = State('some-session-state');
final state = State('some-state');
@@ -68,9 +68,15 @@ void main() {
final filter = EmailFilterCondition(text: 'some-text');
final queryState = State('some-query-state');
setUp(() {
dioAdapter = DioAdapter(dio: dio);
httpClient = HttpClient(dio);
threadApi = ThreadAPI(httpClient);
});
group('thread api test:', () {
group('searchEmails:', () {
Map<String, dynamic> generateRequest({required Filter filter}) => {
Map<String, dynamic> generateRequest({required Filter filter, int? position}) => {
"using": [
"urn:ietf:params:jmap:core",
"urn:ietf:params:jmap:mail",
@@ -81,6 +87,7 @@ void main() {
"Email/query",
{
"accountId": AccountFixtures.aliceAccountId.id.value,
if (position != null) "position": position,
"filter": filter.toJson(),
},
"c0"
@@ -267,6 +274,128 @@ void main() {
),
);
});
test(
'should not add position to request '
'when position is null',
() async {
// arrange
final searchEmail = SearchEmail(
id: EmailId(Id('someEmailId')),
searchSnippetSubject: 'searchSnippetSubject',
searchSnippetPreview: 'searchSnippetPreview',
);
dioAdapter.onPost(
'',
(server) => server.reply(
200,
generateResponse(
foundSearchEmails: [searchEmail],
notFoundEmailIds: [],
searchSnippetError: UnknownMethodResponse(),
),
),
data: generateRequest(filter: filter),
);
// act
final result = await threadApi.searchEmails(
SessionFixtures.aliceSession,
AccountFixtures.aliceAccountId,
filter: filter,
);
// assert
expect(
result,
equals(
SearchEmailsResponse(
searchSnippets: null,
emailList: [Email(id: searchEmail.id)],
state: state
),
),
);
});
test(
'should not add position to request '
'when position is 0',
() async {
// arrange
final searchEmail = SearchEmail(
id: EmailId(Id('someEmailId')),
searchSnippetSubject: 'searchSnippetSubject',
searchSnippetPreview: 'searchSnippetPreview',
);
dioAdapter.onPost(
'',
(server) => server.reply(
403,
generateResponse(
foundSearchEmails: [searchEmail],
notFoundEmailIds: [],
searchSnippetError: UnknownMethodResponse(),
),
),
data: generateRequest(filter: filter, position: 0),
);
// act & assert
expect(
() => threadApi.searchEmails(
SessionFixtures.aliceSession,
AccountFixtures.aliceAccountId,
filter: filter,
position: 0,
),
throwsA(isA<DioException>()),
);
});
test(
'should add position to request '
'when position > 0',
() async {
// arrange
final searchEmail = SearchEmail(
id: EmailId(Id('someEmailId')),
searchSnippetSubject: 'searchSnippetSubject',
searchSnippetPreview: 'searchSnippetPreview',
);
dioAdapter.onPost(
'',
(server) => server.reply(
200,
generateResponse(
foundSearchEmails: [searchEmail],
notFoundEmailIds: [],
searchSnippetError: UnknownMethodResponse(),
),
),
data: generateRequest(filter: filter, position: 1),
);
// act
final result = await threadApi.searchEmails(
SessionFixtures.aliceSession,
AccountFixtures.aliceAccountId,
filter: filter,
position: 1,
);
// assert
expect(
result,
equals(
SearchEmailsResponse(
searchSnippets: null,
emailList: [Email(id: searchEmail.id)],
state: state
),
),
);
});
});
group('sortEmails::test', () {