// ignore_for_file: unnecessary_library_name @Skip('Requires live Naver API responses') library naver_integration_test; import 'package:flutter_test/flutter_test.dart'; import 'package:lunchpick/data/api/naver_api_client.dart'; import 'package:lunchpick/data/datasources/remote/naver_map_parser.dart'; import 'package:lunchpick/data/datasources/remote/naver_html_extractor.dart'; void main() { late NaverApiClient apiClient; late NaverMapParser parser; setUp(() { apiClient = NaverApiClient(); parser = NaverMapParser(apiClient: apiClient); }); tearDown(() { apiClient.dispose(); parser.dispose(); }); group('네이버 통합 테스트', () { test('단축 URL 자동 처리 테스트', () async { // 실제 단축 URL로 테스트 const shortUrl = 'https://naver.me/example'; // 실제 URL로 교체 필요 try { print('========== 단축 URL 자동 처리 테스트 =========='); print('입력 URL: $shortUrl'); // NaverMapParser를 통한 자동 처리 final restaurant = await parser.parseRestaurantFromUrl(shortUrl); print('\n【파싱 결과】'); print('상호명: ${restaurant.name}'); print('카테고리: ${restaurant.category} > ${restaurant.subCategory}'); print('주소: ${restaurant.roadAddress}'); print('전화: ${restaurant.phoneNumber ?? "없음"}'); print('설명: ${restaurant.description ?? "없음"}'); print('좌표: ${restaurant.latitude}, ${restaurant.longitude}'); print('Place ID: ${restaurant.naverPlaceId}'); print('URL: ${restaurant.naverUrl}'); // 검증 expect(restaurant.name, isNotEmpty); expect(restaurant.category, isNotEmpty); expect(restaurant.roadAddress, isNotEmpty); expect(restaurant.naverPlaceId, isNotEmpty); expect(restaurant.source.name, equals('NAVER')); print('\n✓ 테스트 성공'); } catch (e) { print('\n❌ 테스트 실패: $e'); rethrow; } }); test('HTML 추출기 테스트', () async { const testHtml = '''
서울특별시 강남구 테헤란로 123
한식 '''; print('\n========== HTML 추출기 테스트 =========='); // 한글 텍스트 추출 final koreanTexts = NaverHtmlExtractor.extractAllValidKoreanTexts( testHtml, ); print('추출된 한글 텍스트: $koreanTexts'); expect(koreanTexts, isNotEmpty); // JSON-LD 추출 final jsonLdName = NaverHtmlExtractor.extractPlaceNameFromJsonLd( testHtml, ); print('JSON-LD 상호명: $jsonLdName'); expect(jsonLdName, equals('테스트 식당')); print('\n✓ 테스트 성공'); }); test('로컬 검색 API 테스트', () async { print('\n========== 로컬 검색 API 테스트 =========='); const query = '스타벅스 강남역점'; try { final results = await apiClient.searchLocal(query: query, display: 5); print('검색어: "$query"'); print('결과 수: ${results.length}개\n'); for (int i = 0; i < results.length; i++) { final result = results[i]; print('${i + 1}. ${result.title}'); print(' 카테고리: ${result.category}'); print(' 주소: ${result.roadAddress}'); print(' 좌표: ${result.mapx}, ${result.mapy}'); } expect(results, isNotEmpty); print('\n✓ 테스트 성공'); } catch (e) { print('\n❌ 테스트 실패: $e'); rethrow; } }); test('성능 테스트 - 단축 URL 처리 시간', () async { const shortUrl = 'https://naver.me/example'; // 실제 URL로 교체 필요 print('\n========== 성능 테스트 =========='); final stopwatch = Stopwatch()..start(); try { final restaurant = await parser.parseRestaurantFromUrl(shortUrl); stopwatch.stop(); print('처리 완료: ${restaurant.name}'); print('소요 시간: ${stopwatch.elapsedMilliseconds}ms'); // 5초 이내 처리 확인 expect(stopwatch.elapsedMilliseconds, lessThan(5000)); print('\n✓ 테스트 성공'); } catch (e) { stopwatch.stop(); print('처리 실패 (${stopwatch.elapsedMilliseconds}ms)'); print('오류: $e'); rethrow; } }); }); }