158 lines
5.5 KiB
Dart
158 lines
5.5 KiB
Dart
import 'dart:io';
|
|
import 'dart:convert';
|
|
import 'package:http/http.dart' as http;
|
|
|
|
/// Script untuk menguji integrasi dengan Firefly III API
|
|
/// Menjalankan beberapa operasi dasar:
|
|
/// 1. Menguji koneksi ke instance Firefly III
|
|
/// 2. Menguji autentikasi dengan token
|
|
/// 3. Mengambil daftar akun
|
|
/// 4. Mengirim transaksi dummy
|
|
|
|
void main() async {
|
|
// Konfigurasi - Ganti dengan nilai yang sesuai untuk instance Firefly III Anda
|
|
const String baseUrl = 'http://192.168.1.100:8080'; // Contoh URL
|
|
const String accessToken = 'your_access_token_here'; // Contoh token
|
|
const String sourceAccountId = '1'; // ID akun sumber (revenue)
|
|
const String destinationAccountId = '2'; // ID akun tujuan (asset)
|
|
|
|
print('=== MENGUJI INTEGRASI FIREFLY III ===\n');
|
|
|
|
// 1. Menguji koneksi
|
|
print('1. Menguji koneksi ke Firefly III...');
|
|
try {
|
|
final connectivityResponse = await http.get(Uri.parse('$baseUrl/api/v1/about'));
|
|
if (connectivityResponse.statusCode == 200) {
|
|
print(' ✓ Koneksi berhasil');
|
|
} else {
|
|
print(' ✗ Koneksi gagal (Status code: ${connectivityResponse.statusCode})');
|
|
return;
|
|
}
|
|
} catch (e) {
|
|
print(' ✗ Koneksi gagal dengan error: $e');
|
|
return;
|
|
}
|
|
|
|
// 2. Menguji autentikasi
|
|
print('\n2. Menguji autentikasi dengan token...');
|
|
try {
|
|
final authResponse = await http.get(
|
|
Uri.parse('$baseUrl/api/v1/about/user'),
|
|
headers: {
|
|
'Authorization': 'Bearer $accessToken',
|
|
'Accept': 'application/json',
|
|
},
|
|
);
|
|
if (authResponse.statusCode == 200) {
|
|
print(' ✓ Autentikasi berhasil');
|
|
} else {
|
|
print(' ✗ Autentikasi gagal (Status code: ${authResponse.statusCode})');
|
|
print(' Response body: ${authResponse.body}');
|
|
return;
|
|
}
|
|
} catch (e) {
|
|
print(' ✗ Autentikasi gagal dengan error: $e');
|
|
return;
|
|
}
|
|
|
|
// 3. Mengambil daftar akun
|
|
print('\n3. Mengambil daftar akun...');
|
|
try {
|
|
final accountsResponse = await http.get(
|
|
Uri.parse('$baseUrl/api/v1/accounts'),
|
|
headers: {
|
|
'Authorization': 'Bearer $accessToken',
|
|
'Accept': 'application/json',
|
|
},
|
|
);
|
|
if (accountsResponse.statusCode == 200) {
|
|
final accountsData = json.decode(accountsResponse.body);
|
|
if (accountsData is Map<String, dynamic> && accountsData.containsKey('data')) {
|
|
final accounts = accountsData['data'] as List;
|
|
print(' ✓ Berhasil mengambil ${accounts.length} akun');
|
|
|
|
// Tampilkan 3 akun pertama
|
|
print(' Contoh akun:');
|
|
for (int i = 0; i < accounts.length && i < 3; i++) {
|
|
final account = accounts[i];
|
|
if (account is Map<String, dynamic> && account.containsKey('id') && account.containsKey('attributes')) {
|
|
final attributes = account['attributes'];
|
|
if (attributes is Map<String, dynamic> && attributes.containsKey('name') && attributes.containsKey('type')) {
|
|
print(' - ID: ${account['id']}, Nama: ${attributes['name']}, Tipe: ${attributes['type']}');
|
|
}
|
|
}
|
|
}
|
|
} else {
|
|
print(' ✗ Format respons akun tidak sesuai harapan');
|
|
return;
|
|
}
|
|
} else {
|
|
print(' ✗ Gagal mengambil akun (Status code: ${accountsResponse.statusCode})');
|
|
print(' Response body: ${accountsResponse.body}');
|
|
return;
|
|
}
|
|
} catch (e) {
|
|
print(' ✗ Gagal mengambil akun dengan error: $e');
|
|
return;
|
|
}
|
|
|
|
// 4. Mengirim transaksi dummy
|
|
print('\n4. Mengirim transaksi dummy...');
|
|
try {
|
|
final transactionPayload = jsonEncode({
|
|
"transactions": [
|
|
{
|
|
"type": "deposit",
|
|
"date": "2025-08-21",
|
|
"amount": "50.00",
|
|
"description": "Transaksi Dummy via Test Script",
|
|
"source_id": sourceAccountId,
|
|
"destination_id": destinationAccountId,
|
|
}
|
|
]
|
|
});
|
|
|
|
final transactionResponse = await http.post(
|
|
Uri.parse('$baseUrl/api/v1/transactions'),
|
|
headers: {
|
|
'Authorization': 'Bearer $accessToken',
|
|
'Accept': 'application/json',
|
|
'Content-Type': 'application/json',
|
|
},
|
|
body: transactionPayload,
|
|
);
|
|
|
|
if (transactionResponse.statusCode == 200 || transactionResponse.statusCode == 201) {
|
|
print(' ✓ Transaksi berhasil dikirim');
|
|
|
|
// Coba parse transaction ID
|
|
try {
|
|
final transactionData = json.decode(transactionResponse.body);
|
|
if (transactionData is Map<String, dynamic> &&
|
|
transactionData.containsKey('data') &&
|
|
transactionData['data'] is List &&
|
|
transactionData['data'].isNotEmpty) {
|
|
|
|
final firstTransaction = transactionData['data'][0];
|
|
if (firstTransaction is Map<String, dynamic> && firstTransaction.containsKey('transaction_id')) {
|
|
print(' Transaction ID: ${firstTransaction['transaction_id']}');
|
|
} else if (firstTransaction is Map<String, dynamic> && firstTransaction.containsKey('id')) {
|
|
print(' Transaction ID: ${firstTransaction['id']}');
|
|
}
|
|
}
|
|
} catch (e) {
|
|
print(' Tidak dapat mem-parsing transaction ID: $e');
|
|
}
|
|
} else {
|
|
print(' ✗ Gagal mengirim transaksi (Status code: ${transactionResponse.statusCode})');
|
|
print(' Response body: ${transactionResponse.body}');
|
|
return;
|
|
}
|
|
} catch (e) {
|
|
print(' ✗ Gagal mengirim transaksi dengan error: $e');
|
|
return;
|
|
}
|
|
|
|
print('\n=== PENGUJIAN SELESAI ===');
|
|
print('Semua pengujian berhasil! Integrasi dengan Firefly III berfungsi dengan baik.');
|
|
} |