添加单元测试

对接月度日收益接口
master
laiiihz 5 years ago
parent 9ccc349b01
commit ab14b46f30

@ -32,4 +32,9 @@ class UserAPI {
///
String get platformIncome => '/v2/app/user/income/reward_income';
///
///
///````
String get monthDetail => '/v2/app/user/income/day_income';
}

@ -1,7 +1,9 @@
import 'package:common_utils/common_utils.dart';
import 'package:recook/constants/api_v2.dart';
import 'package:recook/manager/http_manager.dart';
import 'package:recook/pages/user/model/user_accumulate_model.dart';
import 'package:recook/pages/user/model/user_benefit_model.dart';
import 'package:recook/pages/user/model/user_benefit_month_detail_model.dart';
import 'package:recook/pages/user/model/user_benefit_sub_model.dart';
import 'package:recook/pages/user/model/user_month_income_model.dart';
import 'package:recook/pages/user/user_benefit_sub_page.dart';
@ -49,4 +51,18 @@ class UserBenefitFunc {
ResultData result = await HttpManager.post(path, {});
return UserBenefitSubModel.fromJson(result.data, type);
}
static Future<List<UserBenefitMonthDetailModel>> monthDetail(
DateTime date) async {
ResultData result = await HttpManager.post(
APIV2.userAPI.monthDetail,
{'month': DateUtil.formatDate(date, format: 'yyyy-MM')},
);
if (result.data['data'] == null)
return [];
else
return (result.data['data'] as List)
.map((e) => UserBenefitMonthDetailModel.fromJson(e))
.toList();
}
}

@ -0,0 +1,49 @@
class UserBenefitMonthDetailModel {
int id;
int userId;
DateTime day;
num purchaseAmount;
num purchaseCount;
num purchaseSalesVolume;
num guideAmount;
int guideCount;
num guideSalesVolume;
UserBenefitMonthDetailModel(
{this.id,
this.userId,
this.day,
this.purchaseAmount,
this.purchaseCount,
this.purchaseSalesVolume,
this.guideAmount,
this.guideCount,
this.guideSalesVolume});
UserBenefitMonthDetailModel.fromJson(Map<String, dynamic> json) {
id = json['id'];
userId = json['userId'];
int dayRaw = json['day'];
day = DateTime(dayRaw ~/ 10000, dayRaw % 10000 ~/ 100, dayRaw % 100);
purchaseAmount = json['purchaseAmount'];
purchaseCount = json['purchaseCount'];
purchaseSalesVolume = json['purchaseSalesVolume'];
guideAmount = json['guideAmount'];
guideCount = json['guideCount'];
guideSalesVolume = json['guideSalesVolume'];
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['id'] = this.id;
data['userId'] = this.userId;
data['day'] = this.day;
data['purchaseAmount'] = this.purchaseAmount;
data['purchaseCount'] = this.purchaseCount;
data['purchaseSalesVolume'] = this.purchaseSalesVolume;
data['guideAmount'] = this.guideAmount;
data['guideCount'] = this.guideCount;
data['guideSalesVolume'] = this.guideSalesVolume;
return data;
}
}

@ -2,6 +2,8 @@ import 'package:common_utils/common_utils.dart';
import 'package:flutter/material.dart';
import 'package:recook/constants/header.dart';
import 'package:recook/pages/user/functions/user_benefit_func.dart';
import 'package:recook/pages/user/model/user_benefit_month_detail_model.dart';
import 'package:recook/pages/user/model/user_benefit_sub_model.dart';
import 'package:recook/utils/user_level_tool.dart';
import 'package:recook/widgets/bottom_time_picker.dart';
import 'package:recook/widgets/custom_app_bar.dart';
@ -56,6 +58,9 @@ class _UserBenefitSubPageState extends State<UserBenefitSubPage> {
GSRefreshController _refreshController = GSRefreshController();
///
List<UserBenefitMonthDetailModel> _models = [];
///
Widget _buildCard() {
return Container(
@ -212,21 +217,24 @@ class _UserBenefitSubPageState extends State<UserBenefitSubPage> {
TableRow _buildTableRow({
DateTime date,
double volume,
int amount,
int count,
double benefit,
}) {
return TableRow(
children: [
_buildTableItem(DateUtil.formatDate(date, format: 'M月dd日')),
_buildTableItem(volume.toStringAsFixed(2)),
_buildTableItem(amount.toString()),
_buildTableItem(count.toString()),
_buildTableItem(benefit.toStringAsFixed(2), true),
],
);
}
///
///
///
_buildTable() {
if (_models.isEmpty) return SizedBox();
return Table(
border: TableBorder(
horizontalInside: BorderSide(color: Color(0xFFEEEEEE), width: 1.w),
@ -240,12 +248,28 @@ class _UserBenefitSubPageState extends State<UserBenefitSubPage> {
_buildTableTitle('结算收益'),
],
),
_buildTableRow(
date: DateTime.now(),
volume: 100,
amount: 1,
benefit: 40,
),
..._models.map((e) {
double amount = 0;
double salesVolume = 0;
int count = 0;
if (widget.type == UserBenefitPageType.SELF) {
amount = e.purchaseAmount;
salesVolume = e.purchaseSalesVolume;
count = e.purchaseCount;
}
if (widget.type == UserBenefitPageType.GUIDE) {
amount = e.guideAmount;
salesVolume = e.guideSalesVolume;
count = e.guideCount;
}
return _buildTableRow(
date: e.day,
volume: salesVolume,
count: count,
benefit: amount,
);
}).toList(),
],
).material(color: Colors.white).pSymmetric(v: 10.w);
}
@ -330,6 +354,21 @@ class _UserBenefitSubPageState extends State<UserBenefitSubPage> {
);
}
Widget _buildTag() {
// if(_models.isEmpty)return SizedBox()
double benefitValue = 0;
if (widget.type == UserBenefitPageType.SELF) {
_models.forEach((element) => benefitValue += element.purchaseAmount);
}
if (widget.type == UserBenefitPageType.GUIDE)
_models.forEach((element) => benefitValue += element.guideAmount);
return '当月收益(瑞币)${benefitValue.toStringAsFixed(2)}'
.text
.color(Color(0xFF999999))
.size(16.sp)
.make();
}
@override
void initState() {
super.initState();
@ -364,13 +403,16 @@ class _UserBenefitSubPageState extends State<UserBenefitSubPage> {
body: RefreshWidget(
controller: _refreshController,
color: Colors.white,
onRefresh: () {
UserBenefitFunc.subInfo(widget.type).then((model) {
onRefresh: () async {
UserBenefitSubModel model =
await UserBenefitFunc.subInfo(widget.type);
_amount = model.data.amount.toStringAsFixed(2);
_salesVolume = model.data.salesVolume.toStringAsFixed(2);
_count = model.data.count.toStringAsFixed(2);
if (!_notSelfNotGUide) {
_models = await UserBenefitFunc.monthDetail(_date);
}
setState(() {});
});
_refreshController.refreshCompleted();
},
body: ListView(
@ -398,6 +440,7 @@ class _UserBenefitSubPageState extends State<UserBenefitSubPage> {
submit: (time, type) {
Navigator.maybePop(context);
_date = time;
_refreshController.requestRefresh();
setState(() {});
},
timePickerTypes: [
@ -421,6 +464,8 @@ class _UserBenefitSubPageState extends State<UserBenefitSubPage> {
materialTapTargetSize: MaterialTapTargetSize.shrinkWrap,
),
Spacer(),
_notSelfNotGUide ? SizedBox() : _buildTag(),
15.wb,
],
),
_notSelfNotGUide ? _buildMidCard() : SizedBox(),

@ -0,0 +1,30 @@
import 'package:flutter_test/flutter_test.dart';
import 'package:recook/pages/user/model/user_benefit_month_detail_model.dart';
class UserBenefitModelsTest {
static runTest() {
test('test userBenefit', () {
UserBenefitMonthDetailModel userBenefitModel =
UserBenefitMonthDetailModel.fromJson({
"id": 2,
"userId": 6,
"day": 20201201, //
"purchaseAmount": 0, //
"purchaseCount": 0, //
"purchaseSalesVolume": 0, //
"guideAmount": 0, //
"guideCount": 0, //
"guideSalesVolume": 0 //
});
expect(userBenefitModel.day, DateTime(2020, 12, 1));
expect(userBenefitModel.id, 2);
expect(userBenefitModel.userId, 6);
expect(userBenefitModel.purchaseAmount, 0);
expect(userBenefitModel.purchaseCount, 0);
expect(userBenefitModel.purchaseSalesVolume, 0);
expect(userBenefitModel.guideAmount, 0);
expect(userBenefitModel.guideCount, 0);
expect(userBenefitModel.guideSalesVolume, 0);
});
}
}

@ -0,0 +1,7 @@
import 'model_test/user_benefit_models_test.dart';
void main() {
UserBenefitModelsTest.runTest();
}

@ -1,30 +0,0 @@
// This is a basic Flutter widget test.
//
// To perform an interaction with a widget in your test, use the WidgetTester
// utility that Flutter provides. For example, you can send tap and scroll
// gestures. You can also use WidgetTester to find child widgets in the widget
// tree, read text, and verify that the values of widget properties are correct.
import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:recook/main.dart';
void main() {
testWidgets('Counter increments smoke test', (WidgetTester tester) async {
// Build our app and trigger a frame.
await tester.pumpWidget(MyApp(null));
// Verify that our counter starts at 0.
expect(find.text('0'), findsOneWidget);
expect(find.text('1'), findsNothing);
// Tap the '+' icon and trigger a frame.
await tester.tap(find.byIcon(Icons.add));
await tester.pump();
// Verify that our counter has incremented.
expect(find.text('0'), findsNothing);
expect(find.text('1'), findsOneWidget);
});
}
Loading…
Cancel
Save