feat(app): add manual entry and sharing flows
This commit is contained in:
@@ -10,7 +10,7 @@ import 'package:lunchpick/core/errors/network_exceptions.dart';
|
||||
class MockNaverApiClient extends NaverApiClient {
|
||||
final Map<String, dynamic> _mockResponses = {};
|
||||
final Map<String, Exception> _mockExceptions = {};
|
||||
|
||||
|
||||
// Mock 설정 메서드들
|
||||
void setSearchResponse({
|
||||
required String query,
|
||||
@@ -21,7 +21,7 @@ class MockNaverApiClient extends NaverApiClient {
|
||||
final key = _generateKey(query, latitude, longitude);
|
||||
_mockResponses[key] = results;
|
||||
}
|
||||
|
||||
|
||||
void setSearchException({
|
||||
required String query,
|
||||
double? latitude,
|
||||
@@ -31,15 +31,15 @@ class MockNaverApiClient extends NaverApiClient {
|
||||
final key = _generateKey(query, latitude, longitude);
|
||||
_mockExceptions[key] = exception;
|
||||
}
|
||||
|
||||
|
||||
String _generateKey(String query, double? latitude, double? longitude) {
|
||||
return '$query-$latitude-$longitude';
|
||||
}
|
||||
|
||||
|
||||
// 호출 추적
|
||||
final List<Map<String, dynamic>> callHistory = [];
|
||||
bool disposeCalled = false;
|
||||
|
||||
|
||||
@override
|
||||
Future<List<NaverLocalSearchResult>> searchLocal({
|
||||
required String query,
|
||||
@@ -57,20 +57,20 @@ class MockNaverApiClient extends NaverApiClient {
|
||||
'display': display,
|
||||
'sort': sort,
|
||||
});
|
||||
|
||||
|
||||
final key = _generateKey(query, latitude, longitude);
|
||||
|
||||
|
||||
if (_mockExceptions.containsKey(key)) {
|
||||
throw _mockExceptions[key]!;
|
||||
}
|
||||
|
||||
|
||||
if (_mockResponses.containsKey(key)) {
|
||||
return _mockResponses[key] as List<NaverLocalSearchResult>;
|
||||
}
|
||||
|
||||
|
||||
return [];
|
||||
}
|
||||
|
||||
|
||||
@override
|
||||
void dispose() {
|
||||
disposeCalled = true;
|
||||
@@ -80,19 +80,19 @@ class MockNaverApiClient extends NaverApiClient {
|
||||
class MockNaverMapParser extends NaverMapParser {
|
||||
final Map<String, Restaurant> _mockResponses = {};
|
||||
final Map<String, Exception> _mockExceptions = {};
|
||||
|
||||
|
||||
void setParseResponse(String url, Restaurant restaurant) {
|
||||
_mockResponses[url] = restaurant;
|
||||
}
|
||||
|
||||
|
||||
void setParseException(String url, Exception exception) {
|
||||
_mockExceptions[url] = exception;
|
||||
}
|
||||
|
||||
|
||||
// 호출 추적
|
||||
bool disposeCalled = false;
|
||||
final List<String> parseCallHistory = [];
|
||||
|
||||
|
||||
@override
|
||||
Future<Restaurant> parseRestaurantFromUrl(
|
||||
String url, {
|
||||
@@ -100,18 +100,18 @@ class MockNaverMapParser extends NaverMapParser {
|
||||
double? userLongitude,
|
||||
}) async {
|
||||
parseCallHistory.add(url);
|
||||
|
||||
|
||||
if (_mockExceptions.containsKey(url)) {
|
||||
throw _mockExceptions[url]!;
|
||||
}
|
||||
|
||||
|
||||
if (_mockResponses.containsKey(url)) {
|
||||
return _mockResponses[url]!;
|
||||
}
|
||||
|
||||
|
||||
throw NaverMapParseException('No mock response set for URL: $url');
|
||||
}
|
||||
|
||||
|
||||
@override
|
||||
void dispose() {
|
||||
disposeCalled = true;
|
||||
@@ -196,9 +196,10 @@ void main() {
|
||||
throwsA(
|
||||
allOf(
|
||||
isA<ParseException>(),
|
||||
predicate<ParseException>((e) =>
|
||||
e.message.contains('식당 정보를 가져올 수 없습니다') &&
|
||||
e.originalError.toString() == exception.toString()
|
||||
predicate<ParseException>(
|
||||
(e) =>
|
||||
e.message.contains('식당 정보를 가져올 수 없습니다') &&
|
||||
e.originalError.toString() == exception.toString(),
|
||||
),
|
||||
),
|
||||
),
|
||||
@@ -210,7 +211,7 @@ void main() {
|
||||
const testQuery = '김치찌개';
|
||||
const testLatitude = 37.123456;
|
||||
const testLongitude = 127.123456;
|
||||
|
||||
|
||||
final testSearchResults = [
|
||||
NaverLocalSearchResult.fromJson({
|
||||
'title': '김치찌개 맛집',
|
||||
@@ -246,7 +247,7 @@ void main() {
|
||||
expect(results.first.name, equals('김치찌개 맛집'));
|
||||
expect(results.first.category, equals('한식'));
|
||||
expect(results.first.subCategory, equals('찌개'));
|
||||
|
||||
|
||||
// API 호출 확인
|
||||
expect(mockApiClient.callHistory.length, equals(1));
|
||||
expect(mockApiClient.callHistory.first['query'], equals(testQuery));
|
||||
@@ -302,9 +303,10 @@ void main() {
|
||||
throwsA(
|
||||
allOf(
|
||||
isA<ParseException>(),
|
||||
predicate<ParseException>((e) =>
|
||||
e.message.contains('식당 검색에 실패했습니다') &&
|
||||
e.originalError.toString() == exception.toString()
|
||||
predicate<ParseException>(
|
||||
(e) =>
|
||||
e.message.contains('식당 검색에 실패했습니다') &&
|
||||
e.originalError.toString() == exception.toString(),
|
||||
),
|
||||
),
|
||||
),
|
||||
@@ -317,7 +319,7 @@ void main() {
|
||||
const testAddress = '서울시 강남구 역삼동';
|
||||
const testLatitude = 37.123456;
|
||||
const testLongitude = 127.123456;
|
||||
|
||||
|
||||
final testSearchResults = [
|
||||
NaverLocalSearchResult.fromJson({
|
||||
'title': testName,
|
||||
@@ -364,9 +366,7 @@ void main() {
|
||||
);
|
||||
|
||||
// Act
|
||||
final result = await service.searchRestaurantDetails(
|
||||
name: testName,
|
||||
);
|
||||
final result = await service.searchRestaurantDetails(name: testName);
|
||||
|
||||
// Assert
|
||||
expect(result, isNull);
|
||||
@@ -396,9 +396,7 @@ void main() {
|
||||
);
|
||||
|
||||
// Act
|
||||
final result = await service.searchRestaurantDetails(
|
||||
name: testName,
|
||||
);
|
||||
final result = await service.searchRestaurantDetails(name: testName);
|
||||
|
||||
// Assert
|
||||
expect(result, isNull);
|
||||
@@ -573,4 +571,4 @@ void main() {
|
||||
});
|
||||
});
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user