Fakultas Ilmu Komputer UI

Commit a179ac62 authored by Manuel Yoseph Ray's avatar Manuel Yoseph Ray
Browse files

[REFACTOR] benerin test habel

parent b1cb6c91
Pipeline #81938 passed with stages
in 7 minutes and 18 seconds
{"info":"This is a generated file; do not edit or check into version control.","plugins":{"ios":[{"name":"flutter_keyboard_visibility","path":"C:\\\\src\\\\flutter\\\\.pub-cache\\\\hosted\\\\pub.dartlang.org\\\\flutter_keyboard_visibility-5.0.0\\\\","dependencies":[]},{"name":"flutter_secure_storage","path":"C:\\\\src\\\\flutter\\\\.pub-cache\\\\hosted\\\\pub.dartlang.org\\\\flutter_secure_storage-3.3.5\\\\","dependencies":[]},{"name":"image_picker","path":"C:\\\\src\\\\flutter\\\\.pub-cache\\\\hosted\\\\pub.dartlang.org\\\\image_picker-0.7.4\\\\","dependencies":[]},{"name":"path_provider","path":"C:\\\\src\\\\flutter\\\\.pub-cache\\\\hosted\\\\pub.dartlang.org\\\\path_provider-2.0.1\\\\","dependencies":[]}],"android":[{"name":"flutter_keyboard_visibility","path":"C:\\\\src\\\\flutter\\\\.pub-cache\\\\hosted\\\\pub.dartlang.org\\\\flutter_keyboard_visibility-5.0.0\\\\","dependencies":[]},{"name":"flutter_plugin_android_lifecycle","path":"C:\\\\src\\\\flutter\\\\.pub-cache\\\\hosted\\\\pub.dartlang.org\\\\flutter_plugin_android_lifecycle-2.0.1\\\\","dependencies":[]},{"name":"flutter_secure_storage","path":"C:\\\\src\\\\flutter\\\\.pub-cache\\\\hosted\\\\pub.dartlang.org\\\\flutter_secure_storage-3.3.5\\\\","dependencies":[]},{"name":"image_picker","path":"C:\\\\src\\\\flutter\\\\.pub-cache\\\\hosted\\\\pub.dartlang.org\\\\image_picker-0.7.4\\\\","dependencies":["flutter_plugin_android_lifecycle"]},{"name":"path_provider","path":"C:\\\\src\\\\flutter\\\\.pub-cache\\\\hosted\\\\pub.dartlang.org\\\\path_provider-2.0.1\\\\","dependencies":[]}],"macos":[{"name":"path_provider_macos","path":"C:\\\\src\\\\flutter\\\\.pub-cache\\\\hosted\\\\pub.dartlang.org\\\\path_provider_macos-2.0.0\\\\","dependencies":[]}],"linux":[{"name":"path_provider_linux","path":"C:\\\\src\\\\flutter\\\\.pub-cache\\\\hosted\\\\pub.dartlang.org\\\\path_provider_linux-2.0.0\\\\","dependencies":[]}],"windows":[{"name":"path_provider_windows","path":"C:\\\\src\\\\flutter\\\\.pub-cache\\\\hosted\\\\pub.dartlang.org\\\\path_provider_windows-2.0.0\\\\","dependencies":[]}],"web":[{"name":"flutter_keyboard_visibility_web","path":"C:\\\\src\\\\flutter\\\\.pub-cache\\\\hosted\\\\pub.dartlang.org\\\\flutter_keyboard_visibility_web-2.0.0\\\\","dependencies":[]},{"name":"image_picker_for_web","path":"C:\\\\src\\\\flutter\\\\.pub-cache\\\\hosted\\\\pub.dartlang.org\\\\image_picker_for_web-2.0.0\\\\","dependencies":[]}]},"dependencyGraph":[{"name":"flutter_keyboard_visibility","dependencies":["flutter_keyboard_visibility_web"]},{"name":"flutter_keyboard_visibility_web","dependencies":[]},{"name":"flutter_plugin_android_lifecycle","dependencies":[]},{"name":"flutter_secure_storage","dependencies":[]},{"name":"image_picker","dependencies":["flutter_plugin_android_lifecycle","image_picker_for_web"]},{"name":"image_picker_for_web","dependencies":[]},{"name":"path_provider","dependencies":["path_provider_macos","path_provider_linux","path_provider_windows"]},{"name":"path_provider_linux","dependencies":[]},{"name":"path_provider_macos","dependencies":[]},{"name":"path_provider_windows","dependencies":[]}],"date_created":"2021-06-07 05:10:51.694683","version":"2.0.1"}
\ No newline at end of file
{"info":"This is a generated file; do not edit or check into version control.","plugins":{"ios":[{"name":"flutter_keyboard_visibility","path":"C:\\\\src\\\\flutter\\\\.pub-cache\\\\hosted\\\\pub.dartlang.org\\\\flutter_keyboard_visibility-5.0.0\\\\","dependencies":[]},{"name":"flutter_secure_storage","path":"C:\\\\src\\\\flutter\\\\.pub-cache\\\\hosted\\\\pub.dartlang.org\\\\flutter_secure_storage-3.3.5\\\\","dependencies":[]},{"name":"image_picker","path":"C:\\\\src\\\\flutter\\\\.pub-cache\\\\hosted\\\\pub.dartlang.org\\\\image_picker-0.7.4\\\\","dependencies":[]},{"name":"path_provider","path":"C:\\\\src\\\\flutter\\\\.pub-cache\\\\hosted\\\\pub.dartlang.org\\\\path_provider-2.0.1\\\\","dependencies":[]}],"android":[{"name":"flutter_keyboard_visibility","path":"C:\\\\src\\\\flutter\\\\.pub-cache\\\\hosted\\\\pub.dartlang.org\\\\flutter_keyboard_visibility-5.0.0\\\\","dependencies":[]},{"name":"flutter_plugin_android_lifecycle","path":"C:\\\\src\\\\flutter\\\\.pub-cache\\\\hosted\\\\pub.dartlang.org\\\\flutter_plugin_android_lifecycle-2.0.1\\\\","dependencies":[]},{"name":"flutter_secure_storage","path":"C:\\\\src\\\\flutter\\\\.pub-cache\\\\hosted\\\\pub.dartlang.org\\\\flutter_secure_storage-3.3.5\\\\","dependencies":[]},{"name":"image_picker","path":"C:\\\\src\\\\flutter\\\\.pub-cache\\\\hosted\\\\pub.dartlang.org\\\\image_picker-0.7.4\\\\","dependencies":["flutter_plugin_android_lifecycle"]},{"name":"path_provider","path":"C:\\\\src\\\\flutter\\\\.pub-cache\\\\hosted\\\\pub.dartlang.org\\\\path_provider-2.0.1\\\\","dependencies":[]}],"macos":[{"name":"path_provider_macos","path":"C:\\\\src\\\\flutter\\\\.pub-cache\\\\hosted\\\\pub.dartlang.org\\\\path_provider_macos-2.0.0\\\\","dependencies":[]}],"linux":[{"name":"path_provider_linux","path":"C:\\\\src\\\\flutter\\\\.pub-cache\\\\hosted\\\\pub.dartlang.org\\\\path_provider_linux-2.0.0\\\\","dependencies":[]}],"windows":[{"name":"path_provider_windows","path":"C:\\\\src\\\\flutter\\\\.pub-cache\\\\hosted\\\\pub.dartlang.org\\\\path_provider_windows-2.0.0\\\\","dependencies":[]}],"web":[{"name":"flutter_keyboard_visibility_web","path":"C:\\\\src\\\\flutter\\\\.pub-cache\\\\hosted\\\\pub.dartlang.org\\\\flutter_keyboard_visibility_web-2.0.0\\\\","dependencies":[]},{"name":"image_picker_for_web","path":"C:\\\\src\\\\flutter\\\\.pub-cache\\\\hosted\\\\pub.dartlang.org\\\\image_picker_for_web-2.0.0\\\\","dependencies":[]}]},"dependencyGraph":[{"name":"flutter_keyboard_visibility","dependencies":["flutter_keyboard_visibility_web"]},{"name":"flutter_keyboard_visibility_web","dependencies":[]},{"name":"flutter_plugin_android_lifecycle","dependencies":[]},{"name":"flutter_secure_storage","dependencies":[]},{"name":"image_picker","dependencies":["flutter_plugin_android_lifecycle","image_picker_for_web"]},{"name":"image_picker_for_web","dependencies":[]},{"name":"path_provider","dependencies":["path_provider_macos","path_provider_linux","path_provider_windows"]},{"name":"path_provider_linux","dependencies":[]},{"name":"path_provider_macos","dependencies":[]},{"name":"path_provider_windows","dependencies":[]}],"date_created":"2021-06-07 05:20:09.262005","version":"2.0.1"}
\ No newline at end of file
import 'dart:convert';
import 'dart:io';
import 'package:fundex_app/pages/business/EquityOfferings.dart';
import 'package:fundex_app/storage/storage.dart';
import 'package:http/http.dart' show Client;
......@@ -479,54 +479,4 @@ class Api {
var equityOfferingDetails = jsonData['equity'];
return equityOfferingDetails;
}
Future<EquityOfferings> getSortedEquities(
String statusOffering, String businessField, String sortBy) async {
final apiURL = Uri.parse(
'https://canary.fundex.id/api/v1.1/public/equity-offerings/explore?status_offering=' +
statusOffering +
'&business_field=' +
businessField +
'&sort_by=' +
sortBy);
var token = await secureStorage.readSecureData('accessToken');
var headers = {
'Content-type': 'application/json',
HttpHeaders.authorizationHeader: 'Bearer $token',
};
var apiResult = await client.get(apiURL, headers: headers);
print(await secureStorage.readSecureData('accessToken'));
print(apiResult.reasonPhrase);
print(apiResult.request);
print("get equities: " + (apiResult.statusCode).toString());
if (apiResult.statusCode == 200) {
var jsonObject = json.decode(apiResult.body);
var jsonData = (jsonObject as Map<String, dynamic>)['data'];
return EquityOfferings.fromJson(jsonData);
} else {
throw Exception('Get Failed');
}
}
Future<EquityOfferings> getEquities() async {
final apiURL = Uri.parse(
'https://canary.fundex.id/api/v1.1/public/equity-offerings/explore?status_offering=&business_field=&sort_by=');
var token = await secureStorage.readSecureData('accessToken');
var headers = {
'Content-type': 'application/json',
HttpHeaders.authorizationHeader: 'Bearer $token',
};
var apiResult = await client.get(apiURL, headers: headers);
print(await secureStorage.readSecureData('accessToken'));
print(apiResult.reasonPhrase);
print(apiResult.request);
print("get equities: " + (apiResult.statusCode).toString());
if (apiResult.statusCode == 200) {
var jsonObject = json.decode(apiResult.body);
var jsonData = (jsonObject as Map<String, dynamic>)['data'];
return EquityOfferings.fromJson(jsonData);
} else {
throw Exception('Get Failed');
}
}
}
import 'package:flutter/material.dart';
import 'package:fundex_app/my_flutter_app_icons.dart';
import 'package:fundex_app/pages/business/homekyc.dart';
import 'package:fundex_app/pages/profile/profile_base_page.dart';
import 'package:fundex_app/pages/transaction/Transaction.dart';
import 'package:google_fonts/google_fonts.dart';
......@@ -14,10 +14,10 @@ class _MainScreenState extends State<MainScreen> {
int _selectedIndex = 0;
List<Widget> _widgetOptions = <Widget>[
HomeKYC(),
HomeKYC(),
Transaction(),
HomeKYC(),
Transaction(),
Transaction(),
Transaction(),
ProfilBasePage(),
];
......
import 'Ukm.dart';
class EquityOfferings {
List<Ukm> ukmList;
EquityOfferings({this.ukmList});
factory EquityOfferings.fromJson(Map<String, dynamic> jsonData) {
var list = jsonData['equity_offerings'] as List;
print(list.runtimeType);
List<Ukm> ukmLists = list.map((i) => Ukm.fromJson(i)).toList();
return EquityOfferings(ukmList: ukmLists);
}
List<Ukm> getUkmList() {
return this.ukmList;
}
}
import 'package:intl/intl.dart';
import 'package:time_formatter/time_formatter.dart';
class Ukm {
int id;
String bannerImg;
String equityName;
int remainingTime;
String descriptionId;
String descriptionEn;
String price;
String fundingTarget;
String minInvest;
int totalInvestor;
String totalRaised;
int statusOffering;
String progress;
String logoUrl;
Ukm({
this.id,
this.bannerImg,
this.equityName,
this.remainingTime,
this.descriptionId,
this.descriptionEn,
this.price,
this.fundingTarget,
this.minInvest,
this.totalInvestor,
this.totalRaised,
this.statusOffering,
this.progress,
this.logoUrl,
});
factory Ukm.fromJson(Map<String, dynamic> jsonData) {
return Ukm(
id: jsonData['id'],
bannerImg: jsonData['banner_img'],
equityName: jsonData['equity_name'],
remainingTime: jsonData['remaining_time'],
descriptionId: jsonData['description_id'],
descriptionEn: jsonData['description_en'],
price: jsonData['price'],
fundingTarget: jsonData['funding_target'],
minInvest: jsonData['min_invest'],
totalInvestor: jsonData['total_investor'],
totalRaised: jsonData['total_raised'],
statusOffering: jsonData['status_offering'],
progress: jsonData['progress'],
logoUrl: jsonData['logo_url']);
}
String get beautifyPrice {
final currencyFormatter = NumberFormat('#,##0.00', 'ID');
return "Rp " + currencyFormatter.format(int.parse(this.price));
}
String get beautifyMinInvest {
if (int.parse(this.minInvest) >= 1000000.00 &&
int.parse(this.minInvest) < 999999999.99) {
double result = int.parse(this.minInvest) / 1000000;
return "Rp " + result.toInt().toString() + " Juta";
} else if (int.parse(this.minInvest) >= 1000000000.00 &&
int.parse(this.minInvest) < 999999999999.99) {
double result = int.parse(this.minInvest) / 1000000000;
return "Rp " + result.toInt().toString() + " Milyar";
} else {
final currencyFormatter = NumberFormat('#,##0.00', 'ID');
return "Rp " + currencyFormatter.format(double.parse(this.minInvest));
}
// final currencyFormatter = NumberFormat.currency(locale: 'ID');
// return currencyFormatter.format(this.minInvest);
}
String get beautifyProgress {
double progress = double.parse(this.progress);
double result = double.parse(progress.toStringAsFixed(2));
return result.toString();
}
String get beautifyFundTarget {
if (int.parse(this.fundingTarget) >= 1000000.00 &&
int.parse(this.fundingTarget) < 999999999.99) {
double result = int.parse(this.fundingTarget) / 1000000;
return "Rp " + result.toInt().toString() + " Juta";
} else if (int.parse(this.fundingTarget) >= 1000000000.00 &&
int.parse(this.fundingTarget) < 999999999999.99) {
double result = int.parse(this.fundingTarget) / 1000000000;
return "Rp " + result.toInt().toString() + " Milyar";
} else {
final currencyFormatter = NumberFormat('#,##0.00', 'ID');
return "Rp " + currencyFormatter.format(double.parse(this.fundingTarget));
}
}
String get beautifyDate {
var date = DateTime.fromMillisecondsSinceEpoch(this.remainingTime);
return DateFormat.yMMMd().format(date);
}
String get beautifyTime {
return formatTime(remainingTime);
}
}
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:fundex_app/pages/transaction/Transaction.dart';
import 'package:google_fonts/google_fonts.dart';
Widget unregisteredUser(BuildContext context) {
return Container(
alignment: Alignment.center,
margin: EdgeInsets.all(16.0),
height: 150,
width: double.infinity,
key: Key('cardContainer'),
child: GestureDetector(
onTap: () {
Navigator.push(context, MaterialPageRoute(builder: (context) {
return MaterialApp(home: Transaction());
}));
},
child: Card(
key: Key('statusCard'),
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(8.0),
side: BorderSide(
color: Colors.grey.withOpacity(0.4),
width: 1,
),
),
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
crossAxisAlignment: CrossAxisAlignment.center,
key: Key('rowStatusCard'),
children: <Widget>[
Expanded(
flex: 2,
child: Container(
height: double.infinity,
margin: EdgeInsets.all(16),
child: Image.asset(
'assets/images/unregisteredUser.png',
height: double.infinity,
width: double.infinity,
key: Key(
'statusLogo',
),
),
),
),
Expanded(
flex: 4,
child: Container(
margin: EdgeInsets.fromLTRB(0, 16, 16, 16),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text(
'Selamat Datang!',
key: Key('stringStatus'),
style: GoogleFonts.inter(
color: Color.fromRGBO(18, 40, 75, 1.0),
fontWeight: FontWeight.bold,
fontSize: 18.0),
),
SizedBox(
height: 4.0,
),
Text(
'Selesaikan pendaftaran e-KYC',
style: GoogleFonts.notoSans(
color: Color.fromRGBO(18, 40, 75, 1.0),
fontWeight: FontWeight.bold,
fontSize: 12.0),
),
Text(
'(Know Your Customer) untuk dapat memulai pengajuan dana',
style: GoogleFonts.notoSans(
color: Color.fromRGBO(18, 40, 75, 1.0),
fontWeight: FontWeight.w500,
fontSize: 12.0),
),
SizedBox(
key: Key(
'spaceBetweenFundTargetValueAndMinInvestString'),
height: 4.0,
),
Text(
'Ketuk kartu ini untuk menyelesaikan pendaftaran',
style: GoogleFonts.notoSans(
color: Color.fromRGBO(18, 40, 75, 1.0),
fontWeight: FontWeight.bold,
fontSize: 12.0),
),
]),
))
],
),
),
),
);
}
Widget waitingUser(BuildContext context) {
return Container(
alignment: Alignment.center,
margin: EdgeInsets.all(16.0),
key: Key('cardContainer'),
child: Card(
key: Key('statusCard'),
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(8.0),
side: BorderSide(
color: Colors.grey.withOpacity(0.4),
width: 1,
),
),
child: Padding(
key: Key('paddingStatusCard'),
padding: const EdgeInsets.fromLTRB(24.0, 32.0, 24.0, 32.0),
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
key: Key('rowStatusCard'),
children: <Widget>[
Image.asset(
'assets/images/cardLogo.png',
key: Key('statusLogo'),
),
Text(
'Pendaftaran E-KYC berhasil \ndisetujui',
key: Key('stringStatus'),
style: GoogleFonts.inter(
color: Color.fromRGBO(18, 40, 75, 1.0),
fontWeight: FontWeight.bold,
fontSize: 14.0),
),
],
),
),
),
);
}
Widget registeredUser(BuildContext context) {
return Container(
alignment: Alignment.center,
margin: EdgeInsets.all(16.0),
height: 150,
width: double.infinity,
key: Key('cardContainer'),
child: Card(
key: Key('statusCard'),
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(8.0),
side: BorderSide(
color: Colors.grey.withOpacity(0.4),
width: 1,
),
),
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
crossAxisAlignment: CrossAxisAlignment.center,
key: Key('rowStatusCard'),
children: <Widget>[
Expanded(
flex: 2,
child: Container(
height: double.infinity,
margin: EdgeInsets.all(16),
child: Image.asset(
'assets/images/registeredUser.png',
height: double.infinity,
width: double.infinity,
key: Key(
'statusLogo',
),
),
),
),
Expanded(
flex: 4,
child: Container(
margin: EdgeInsets.fromLTRB(0, 16, 16, 16),
child: Text(
'Pendaftaran E-KYC berhasil \ndisetujui',
key: Key('stringStatus'),
style: GoogleFonts.inter(
color: Color.fromRGBO(18, 40, 75, 1.0),
fontWeight: FontWeight.bold,
fontSize: 14.0),
),
))
],
),
),
);
}
Widget errorUser(BuildContext context) {
return Container(
alignment: Alignment.center,
margin: EdgeInsets.all(16.0),
key: Key('cardContainer'),
child: Card(
key: Key('statusCard'),
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(8.0),
side: BorderSide(
color: Colors.grey.withOpacity(0.4),
width: 1,
),
),
child: Padding(
key: Key('paddingStatusCard'),
padding: const EdgeInsets.fromLTRB(24.0, 32.0, 24.0, 32.0),
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
key: Key('rowStatusCard'),
children: <Widget>[
Image.asset(
'assets/images/cardLogo.png',
key: Key('statusLogo'),
),
Text(
'Pendaftaran E-KYC berhasil \ndisetujui',
key: Key('stringStatus'),
style: GoogleFonts.inter(
color: Color.fromRGBO(18, 40, 75, 1.0),
fontWeight: FontWeight.bold,
fontSize: 14.0),
),
],
),
),
),
);
}
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:fundex_app/pages/business/exploreBusiness.dart';
void main() {
testWidgets('Back Icon navigate into Dashboard when pressed',
(WidgetTester tester) async {
// initialize
final backIcon = find.byKey(Key('backIcon'));
final penawaranString = find.byKey(Key('stringPenawaran'));
// execute
await tester.pumpWidget(MaterialApp(
home: ExploreBusiness(),
));
await tester.tap(backIcon);
await tester.pumpAndSettle();
// check outputs
expect(penawaranString, findsOneWidget);
});
}
import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:fundex_app/pages/business/homekyc.dart';
void main() {
Widget createWidgetForTesting({Widget child}) {
return MaterialApp(
home: child,
);
}
testWidgets('Testing appBar', (WidgetTester tester) async {
await tester.pumpWidget(createWidgetForTesting(child: HomeKYC()));
expect(find.byKey(Key('logoFundex')), findsOneWidget);
});
testWidgets('Testing column for whole body', (WidgetTester tester) async {
await tester.pumpWidget(createWidgetForTesting(child: HomeKYC()));
expect(find.byKey(Key('wholePageColumn')), findsOneWidget);
});
testWidgets('Testing card container', (WidgetTester tester) async {
await tester.pumpWidget(createWidgetForTesting(child: HomeKYC()));
expect(find.byKey(Key('cardContainer')), findsOneWidget);
});
testWidgets('Testing status card', (WidgetTester tester) async {
await tester.pumpWidget(createWidgetForTesting(child: HomeKYC()));
expect(find.byKey(Key('statusCard')), findsOneWidget);
});
testWidgets('Testing row for status card', (WidgetTester tester) async {
await tester.pumpWidget(createWidgetForTesting(child: HomeKYC()));
expect(find.byKey(Key('rowStatusCard')), findsOneWidget);
});
testWidgets('Testing image on card', (WidgetTester tester) async {
await tester.pumpWidget(createWidgetForTesting(child: HomeKYC()));
expect(find.byKey(Key('statusLogo')), findsOneWidget);
});
testWidgets('Testing text status on card', (WidgetTester tester) async {
await tester.pumpWidget(createWidgetForTesting(child: HomeKYC()));
expect(find.byKey(Key('stringStatus')), findsOneWidget);
});
testWidgets('Testing container for penawaran and lihat semua',
(WidgetTester tester) async {
await tester.pumpWidget(createWidgetForTesting(child: HomeKYC()));
expect(find.byKey(Key('containerPenawaranAndLihatSemua')), findsOneWidget);
});
testWidgets('Testing row for penawaran and lihat semua string',
(WidgetTester tester) async {
await tester.pumpWidget(createWidgetForTesting(child: HomeKYC()));
expect(find.byKey(Key('rowPenawaranAndLihatSemua')), findsOneWidget);
});
testWidgets('Testing string penawaran', (WidgetTester tester) async {
await tester.pumpWidget(createWidgetForTesting(child: HomeKYC()));
expect(find.byKey(Key('stringPenawaran')), findsOneWidget);
});
testWidgets('Testing string lihat semua', (WidgetTester tester) async {
await tester.pumpWidget(createWidgetForTesting(child: HomeKYC()));
expect(find.byKey(Key('stringLihatSemua')), findsOneWidget);
});
}
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment