From 936e8c450f1e4c6658b2b0c2776037b3b39530f6 Mon Sep 17 00:00:00 2001 From: Luca Fluri Date: Tue, 14 Jul 2020 21:46:39 +0200 Subject: [PATCH] fix: round targetPrice to 2 digits --- lib/models/product.dart | 8 +------- lib/screens/product_detail/product_detail.dart | 9 ++++++--- lib/services/product_utils.dart | 7 +++++++ test/product_test.dart | 9 +++++---- 4 files changed, 19 insertions(+), 14 deletions(-) diff --git a/lib/models/product.dart b/lib/models/product.dart index 4b3d1be..e01ae49 100644 --- a/lib/models/product.dart +++ b/lib/models/product.dart @@ -1,8 +1,7 @@ -import 'dart:math'; - import 'package:flutter/material.dart'; import 'package:intl/intl.dart'; import 'package:price_tracker/services/parsers/abstract_parser.dart'; +import 'package:price_tracker/services/product_utils.dart'; import 'package:price_tracker/services/scraper.dart'; import 'package:string_validator/string_validator.dart'; @@ -136,11 +135,6 @@ class Product { : this.name; } - double roundToPlace(double d, int places) { - double mod = pow(10.0, places); - return ((d * mod).round().toDouble() / mod); - } - bool priceFall() { int length = prices.length; diff --git a/lib/screens/product_detail/product_detail.dart b/lib/screens/product_detail/product_detail.dart index b5b76cc..d7f95ad 100644 --- a/lib/screens/product_detail/product_detail.dart +++ b/lib/screens/product_detail/product_detail.dart @@ -3,6 +3,7 @@ import 'package:cached_network_image/cached_network_image.dart'; import 'package:flutter/material.dart'; import 'package:price_tracker/models/product.dart'; import 'package:price_tracker/screens/home/home.dart'; +import 'package:price_tracker/services/product_utils.dart'; import 'package:url_launcher/url_launcher.dart'; import 'package:timeago/timeago.dart' as timeago; @@ -32,7 +33,7 @@ class _ProductDetailState extends State { Product p = await _db.getProduct(widget.product.id); setTarget = p.targetPrice >= 0; - canSetTarget = p.prices[p.prices.length - 1] > 0; + canSetTarget = p.latestPrice > 0; if (setTarget) { _targetInputController.text = p.targetPrice.toString(); validTarget = true; @@ -212,8 +213,10 @@ class _ProductDetailState extends State { await DatabaseService.getInstance(); if (validTarget) { - product.targetPrice = - double.parse(value).abs(); + product.targetPrice = roundToPlace( + double.parse(value).abs(), 2); + _targetInputController.text = + product.targetPrice.toString(); await _db.update(product); } else { _targetInputController.text = diff --git a/lib/services/product_utils.dart b/lib/services/product_utils.dart index 38edacb..16a760a 100644 --- a/lib/services/product_utils.dart +++ b/lib/services/product_utils.dart @@ -1,3 +1,5 @@ +import 'dart:math'; + import 'package:price_tracker/models/product.dart'; import 'package:price_tracker/screens/product_detail/product_detail.dart'; import 'package:price_tracker/services/database.dart'; @@ -7,6 +9,11 @@ import 'package:price_tracker/services/notifications.dart'; double reloadProgress; +double roundToPlace(double d, int places) { + double mod = pow(10.0, places); + return ((d * mod).round().toDouble() / mod); +} + //Returns number of products that fell under the set target Future countFailedParsing() async { final _db = await DatabaseService.getInstance(); diff --git a/test/product_test.dart b/test/product_test.dart index 06889de..c882349 100644 --- a/test/product_test.dart +++ b/test/product_test.dart @@ -1,5 +1,6 @@ import 'package:flutter_test/flutter_test.dart'; import 'package:price_tracker/models/product.dart'; +import 'package:price_tracker/services/product_utils.dart'; // Product Class Unit Tests void main() { @@ -150,16 +151,16 @@ void main() { group('roundToPlace', () { test('round int', () { - expect(p.roundToPlace(1, 2), 1); + expect(roundToPlace(1, 2), 1); }); test('round double down', () { - expect(p.roundToPlace(1.1234, 2), 1.12); + expect(roundToPlace(1.1234, 2), 1.12); }); test('round double ', () { - expect(p.roundToPlace(1.255, 2), 1.25); + expect(roundToPlace(1.255, 2), 1.25); }); test('round double up', () { - expect(p.roundToPlace(1.256, 2), 1.26); + expect(roundToPlace(1.256, 2), 1.26); }); });