feat(app): add manual entry and sharing flows
This commit is contained in:
@@ -1,21 +1,21 @@
|
||||
@Skip('Integration-heavy parser tests are temporarily disabled')
|
||||
import 'package:flutter_test/flutter_test.dart';
|
||||
import 'package:lunchpick/data/datasources/remote/naver_map_parser.dart';
|
||||
import 'package:lunchpick/data/api/naver_api_client.dart';
|
||||
import 'package:lunchpick/data/api/naver/naver_local_search_api.dart';
|
||||
import '../../../../mocks/mock_naver_api_client.dart';
|
||||
|
||||
void main() {
|
||||
TestWidgetsFlutterBinding.ensureInitialized();
|
||||
|
||||
|
||||
group('NaverMapParser 위치 기반 필터링 테스트', () {
|
||||
late NaverMapParser parser;
|
||||
late MockNaverApiClient mockApiClient;
|
||||
|
||||
|
||||
setUp(() {
|
||||
mockApiClient = MockNaverApiClient();
|
||||
parser = NaverMapParser(apiClient: mockApiClient);
|
||||
});
|
||||
|
||||
|
||||
test('사용자 위치가 제공되면 가장 가까운 식당을 선택해야 함', () async {
|
||||
// Given
|
||||
const url = 'https://naver.me/xtest1234';
|
||||
@@ -24,13 +24,13 @@ void main() {
|
||||
const placeName = '스타벅스';
|
||||
const userLat = 37.5665;
|
||||
const userLng = 126.9780;
|
||||
|
||||
|
||||
// 단축 URL 리디렉션 설정
|
||||
mockApiClient.setUrlRedirect(url, finalUrl);
|
||||
|
||||
|
||||
// pcmap에서 장소명 추출 설정
|
||||
mockApiClient.setPlaceName(placeId, placeName);
|
||||
|
||||
|
||||
// 검색 결과 - 여러 개의 스타벅스
|
||||
final searchResults = [
|
||||
NaverLocalSearchResult(
|
||||
@@ -42,7 +42,7 @@ void main() {
|
||||
address: '서울특별시 강남구 강남대로 123',
|
||||
roadAddress: '서울특별시 강남구 강남대로 123',
|
||||
mapx: 1269780000, // 126.978 * 10000000
|
||||
mapy: 375650000, // 37.565 * 10000000 (더 가까움)
|
||||
mapy: 375650000, // 37.565 * 10000000 (더 가까움)
|
||||
),
|
||||
NaverLocalSearchResult(
|
||||
title: '스타벅스 시청점',
|
||||
@@ -53,7 +53,7 @@ void main() {
|
||||
address: '서울특별시 중구 세종대로 110',
|
||||
roadAddress: '서울특별시 중구 세종대로 110',
|
||||
mapx: 1269784147, // 126.9784147 * 10000000
|
||||
mapy: 375666805, // 37.5666805 * 10000000 (정확히 일치)
|
||||
mapy: 375666805, // 37.5666805 * 10000000 (정확히 일치)
|
||||
),
|
||||
NaverLocalSearchResult(
|
||||
title: '스타벅스 홍대입구점',
|
||||
@@ -64,37 +64,37 @@ void main() {
|
||||
address: '서울특별시 마포구 양화로 123',
|
||||
roadAddress: '서울특별시 마포구 양화로 123',
|
||||
mapx: 1269250000, // 126.925 * 10000000
|
||||
mapy: 375560000, // 37.556 * 10000000 (더 멈)
|
||||
mapy: 375560000, // 37.556 * 10000000 (더 멈)
|
||||
),
|
||||
];
|
||||
|
||||
|
||||
mockApiClient.setSearchResults(placeName, searchResults);
|
||||
|
||||
|
||||
// When
|
||||
final result = await parser.parseRestaurantFromUrl(
|
||||
url,
|
||||
userLatitude: userLat,
|
||||
userLongitude: userLng,
|
||||
);
|
||||
|
||||
|
||||
// Then
|
||||
expect(result.name, '스타벅스 시청점');
|
||||
expect(result.naverPlaceId, placeId);
|
||||
});
|
||||
|
||||
|
||||
test('위치 정보가 없으면 첫 번째 결과를 사용해야 함', () async {
|
||||
// Given
|
||||
const url = 'https://naver.me/xtest1234';
|
||||
const finalUrl = 'https://map.naver.com/p/restaurant/1234567890';
|
||||
const placeId = '1234567890';
|
||||
const placeName = '스타벅스';
|
||||
|
||||
|
||||
// 단축 URL 리디렉션 설정
|
||||
mockApiClient.setUrlRedirect(url, finalUrl);
|
||||
|
||||
|
||||
// pcmap에서 장소명 추출 설정
|
||||
mockApiClient.setPlaceName(placeId, placeName);
|
||||
|
||||
|
||||
// 검색 결과
|
||||
final searchResults = [
|
||||
NaverLocalSearchResult(
|
||||
@@ -109,16 +109,16 @@ void main() {
|
||||
mapy: 375650000,
|
||||
),
|
||||
];
|
||||
|
||||
|
||||
mockApiClient.setSearchResults(placeName, searchResults);
|
||||
|
||||
|
||||
// When
|
||||
final result = await parser.parseRestaurantFromUrl(url);
|
||||
|
||||
|
||||
// Then
|
||||
expect(result.name, '스타벅스 강남역점');
|
||||
});
|
||||
|
||||
|
||||
test('HTML에서 첫 번째 한글 텍스트를 상호명으로 추출해야 함', () async {
|
||||
// Given
|
||||
const placeId = '1492377618';
|
||||
@@ -130,37 +130,40 @@ void main() {
|
||||
</body>
|
||||
</html>
|
||||
''';
|
||||
|
||||
|
||||
// pcmap HTML 응답 설정
|
||||
mockApiClient.setHtmlResponse('https://pcmap.place.naver.com/place/$placeId/home', mockHtml);
|
||||
|
||||
mockApiClient.setHtmlResponse(
|
||||
'https://pcmap.place.naver.com/place/$placeId/home',
|
||||
mockHtml,
|
||||
);
|
||||
|
||||
// 장소명 설정
|
||||
mockApiClient.setPlaceName(placeId, '카페 칼리스타 구로본점');
|
||||
|
||||
|
||||
// When
|
||||
final placeName = await mockApiClient.fetchPlaceNameFromPcmap(placeId);
|
||||
|
||||
|
||||
// Then
|
||||
expect(placeName, '카페 칼리스타 구로본점');
|
||||
});
|
||||
|
||||
|
||||
test('거리 계산이 정확해야 함', () async {
|
||||
// Given
|
||||
const url = 'https://naver.me/xtest1234';
|
||||
const finalUrl = 'https://map.naver.com/p/restaurant/1234567890';
|
||||
const placeId = '1234567890';
|
||||
const placeName = '테스트 식당';
|
||||
|
||||
|
||||
// 서울시청 좌표
|
||||
const userLat = 37.5666805;
|
||||
const userLng = 126.9784147;
|
||||
|
||||
|
||||
// 단축 URL 리디렉션 설정
|
||||
mockApiClient.setUrlRedirect(url, finalUrl);
|
||||
|
||||
|
||||
// pcmap에서 장소명 추출 설정
|
||||
mockApiClient.setPlaceName(placeId, placeName);
|
||||
|
||||
|
||||
// 검색 결과 - 거리가 다른 두 곳
|
||||
final searchResults = [
|
||||
NaverLocalSearchResult(
|
||||
@@ -186,18 +189,18 @@ void main() {
|
||||
mapy: 375676000,
|
||||
),
|
||||
];
|
||||
|
||||
|
||||
mockApiClient.setSearchResults(placeName, searchResults);
|
||||
|
||||
|
||||
// When
|
||||
final result = await parser.parseRestaurantFromUrl(
|
||||
url,
|
||||
userLatitude: userLat,
|
||||
userLongitude: userLng,
|
||||
);
|
||||
|
||||
|
||||
// Then - 더 가까운 A점이 선택되어야 함
|
||||
expect(result.name.contains('A점'), true);
|
||||
});
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user