feat: add ApiService for HTTP POST
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
31
lib/services/api_service.dart
Normal file
31
lib/services/api_service.dart
Normal file
@@ -0,0 +1,31 @@
|
||||
import 'dart:convert';
|
||||
import 'package:http/http.dart' as http;
|
||||
|
||||
class ApiService {
|
||||
final http.Client _client;
|
||||
|
||||
ApiService({http.Client? client}) : _client = client ?? http.Client();
|
||||
|
||||
Future<bool> sendScanData(
|
||||
String url, {
|
||||
required String barcode,
|
||||
required String codeType,
|
||||
}) async {
|
||||
try {
|
||||
final response = await _client
|
||||
.post(
|
||||
Uri.parse(url),
|
||||
headers: {'Content-Type': 'application/json'},
|
||||
body: jsonEncode({
|
||||
'barcode': barcode,
|
||||
'code_type': codeType,
|
||||
'timestamp': DateTime.now().toUtc().toIso8601String(),
|
||||
}),
|
||||
)
|
||||
.timeout(const Duration(seconds: 5));
|
||||
return response.statusCode >= 200 && response.statusCode < 300;
|
||||
} catch (_) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
34
test/services/api_service_test.dart
Normal file
34
test/services/api_service_test.dart
Normal file
@@ -0,0 +1,34 @@
|
||||
import 'package:flutter_test/flutter_test.dart';
|
||||
import 'package:http/http.dart' as http;
|
||||
import 'package:http/testing.dart';
|
||||
import 'package:pad_scanner/services/api_service.dart';
|
||||
|
||||
void main() {
|
||||
group('ApiService', () {
|
||||
test('sendScanData returns true on 200', () async {
|
||||
final client = MockClient((request) async {
|
||||
return http.Response('{"status":"ok"}', 200);
|
||||
});
|
||||
final service = ApiService(client: client);
|
||||
final result = await service.sendScanData(
|
||||
'http://localhost:8000/scan',
|
||||
barcode: '123456',
|
||||
codeType: 'CODE128',
|
||||
);
|
||||
expect(result, isTrue);
|
||||
});
|
||||
|
||||
test('sendScanData returns false on error', () async {
|
||||
final client = MockClient((request) async {
|
||||
return http.Response('error', 500);
|
||||
});
|
||||
final service = ApiService(client: client);
|
||||
final result = await service.sendScanData(
|
||||
'http://localhost:8000/scan',
|
||||
barcode: '123456',
|
||||
codeType: 'CODE128',
|
||||
);
|
||||
expect(result, isFalse);
|
||||
});
|
||||
});
|
||||
}
|
||||
Reference in New Issue
Block a user