122 lines
4.4 KiB
Dart
122 lines
4.4 KiB
Dart
import 'package:dio/dio.dart';
|
|
import 'package:flutter_test/flutter_test.dart';
|
|
import 'package:superport/data/datasources/remote/api_client.dart';
|
|
import 'package:superport/data/models/vendor_dto.dart';
|
|
import 'package:superport/data/repositories/vendor_repository.dart';
|
|
|
|
void main() {
|
|
late Dio dio;
|
|
late VendorRepository vendorRepository;
|
|
String? authToken;
|
|
|
|
setUpAll(() async {
|
|
// 직접 Dio 인스턴스 생성 (테스트용)
|
|
dio = Dio(BaseOptions(
|
|
baseUrl: 'http://43.201.34.104:8080/api/v1',
|
|
connectTimeout: const Duration(seconds: 30),
|
|
receiveTimeout: const Duration(seconds: 30),
|
|
));
|
|
|
|
// 로그인하여 토큰 획득
|
|
try {
|
|
final loginResponse = await dio.post('/auth/login', data: {
|
|
'email': 'admin@example.com',
|
|
'password': 'password123',
|
|
});
|
|
|
|
authToken = loginResponse.data['access_token'];
|
|
dio.options.headers['Authorization'] = 'Bearer $authToken';
|
|
|
|
print('✅ 로그인 성공! 토큰 획득됨');
|
|
} catch (e) {
|
|
print('❌ 로그인 실패: $e');
|
|
fail('로그인에 실패했습니다');
|
|
}
|
|
});
|
|
|
|
group('Vendor API Tests', () {
|
|
test('Vendors 목록 조회 테스트', () async {
|
|
try {
|
|
// 직접 API 호출 테스트
|
|
final response = await dio.get('/vendors', queryParameters: {
|
|
'page': 1,
|
|
'limit': 5,
|
|
});
|
|
|
|
print('\n========== 원본 API 응답 ==========');
|
|
print('Status Code: ${response.statusCode}');
|
|
print('응답 데이터: ${response.data}');
|
|
|
|
expect(response.statusCode, 200);
|
|
expect(response.data, isA<Map<String, dynamic>>());
|
|
expect(response.data['data'], isA<List>());
|
|
expect(response.data['total'], isA<int>());
|
|
expect(response.data['page'], isA<int>());
|
|
expect(response.data['total_pages'], isA<int>());
|
|
|
|
print('\n========== JSON 파싱 테스트 ==========');
|
|
|
|
// VendorListResponse로 파싱 테스트
|
|
try {
|
|
final vendorListResponse = VendorListResponse.fromJson(response.data);
|
|
print('✅ VendorListResponse 파싱 성공');
|
|
print('Items 개수: ${vendorListResponse.items.length}');
|
|
print('총 개수: ${vendorListResponse.totalCount}');
|
|
print('현재 페이지: ${vendorListResponse.currentPage}');
|
|
print('총 페이지: ${vendorListResponse.totalPages}');
|
|
|
|
expect(vendorListResponse.items.length, greaterThan(0));
|
|
expect(vendorListResponse.totalCount, greaterThan(0));
|
|
|
|
// 첫 번째 Vendor 데이터 확인
|
|
final firstVendor = vendorListResponse.items.first;
|
|
print('\n첫 번째 벤더 정보:');
|
|
print('ID: ${firstVendor.id}');
|
|
print('이름: ${firstVendor.name}');
|
|
print('삭제됨: ${firstVendor.isDeleted}');
|
|
print('활성화: ${firstVendor.isActive}');
|
|
|
|
expect(firstVendor.id, isNotNull);
|
|
expect(firstVendor.name.isNotEmpty, true);
|
|
|
|
} catch (e, stackTrace) {
|
|
print('❌ VendorListResponse 파싱 실패: $e');
|
|
print('Stack trace: $stackTrace');
|
|
fail('JSON 파싱에 실패했습니다: $e');
|
|
}
|
|
|
|
} catch (e, stackTrace) {
|
|
print('❌ API 호출 실패: $e');
|
|
print('Stack trace: $stackTrace');
|
|
fail('API 호출에 실패했습니다: $e');
|
|
}
|
|
});
|
|
|
|
test('단일 Vendor 조회 테스트', () async {
|
|
try {
|
|
// 먼저 목록에서 첫 번째 벤더 ID 가져오기
|
|
final listResponse = await dio.get('/vendors', queryParameters: {'limit': 1});
|
|
final firstVendorId = listResponse.data['data'][0]['id'];
|
|
|
|
// 단일 벤더 조회
|
|
final response = await dio.get('/vendors/$firstVendorId');
|
|
|
|
print('\n========== 단일 벤더 조회 ==========');
|
|
print('Status Code: ${response.statusCode}');
|
|
print('응답 데이터: ${response.data}');
|
|
|
|
expect(response.statusCode, 200);
|
|
expect(response.data, isA<Map<String, dynamic>>());
|
|
|
|
// VendorDto로 파싱 테스트
|
|
final vendor = VendorDto.fromJson(response.data);
|
|
print('✅ VendorDto 파싱 성공');
|
|
print('벤더 정보: ${vendor.name}');
|
|
|
|
} catch (e) {
|
|
print('❌ 단일 벤더 조회 실패: $e');
|
|
fail('단일 벤더 조회에 실패했습니다: $e');
|
|
}
|
|
});
|
|
});
|
|
} |