summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFrederic Guillot <fred@kanboard.net>2016-01-14 20:40:31 -0500
committerFrederic Guillot <fred@kanboard.net>2016-01-14 20:40:31 -0500
commita8f404421f3e404ccd285da861a8cb25f3642f31 (patch)
tree0af51bfb56546d393ecb1b63be20ab348fd519d6
parent805be7d33155478ef32c4bd3643dcf4025d85a05 (diff)
Fix bug: unable to set currency rate with Postgres
-rw-r--r--ChangeLog1
-rw-r--r--app/Model/Currency.php4
-rw-r--r--app/Validator/CurrencyValidator.php1
-rw-r--r--tests/units/Model/CurrencyTest.php46
-rw-r--r--tests/units/Validator/CurrencyValidatorTest.php27
5 files changed, 77 insertions, 2 deletions
diff --git a/ChangeLog b/ChangeLog
index e068703f..e03819e5 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -15,6 +15,7 @@ Bug fixes:
* Automatic action listeners were using the same instance
* Fix wrong link for category in task footer
+* Unable to set currency rate with Postgres database
Version 1.0.23
--------------
diff --git a/app/Model/Currency.php b/app/Model/Currency.php
index 316a0141..4351d2aa 100644
--- a/app/Model/Currency.php
+++ b/app/Model/Currency.php
@@ -42,7 +42,7 @@ class Currency extends Base
$reference = $this->config->get('application_currency', 'USD');
if ($reference !== $currency) {
- $rates = $rates === null ? $this->db->hashtable(self::TABLE)->getAll('currency', 'rate') : array();
+ $rates = $rates === null ? $this->db->hashtable(self::TABLE)->getAll('currency', 'rate') : $rates;
$rate = isset($rates[$currency]) ? $rates[$currency] : 1;
return $rate * $price;
@@ -65,7 +65,7 @@ class Currency extends Base
return $this->update($currency, $rate);
}
- return $this->persist(self::TABLE, compact('currency', 'rate'));
+ return $this->db->table(self::TABLE)->insert(array('currency' => $currency, 'rate' => $rate));
}
/**
diff --git a/app/Validator/CurrencyValidator.php b/app/Validator/CurrencyValidator.php
index a00af738..ee191523 100644
--- a/app/Validator/CurrencyValidator.php
+++ b/app/Validator/CurrencyValidator.php
@@ -25,6 +25,7 @@ class CurrencyValidator extends Base
$v = new Validator($values, array(
new Validators\Required('currency', t('Field required')),
new Validators\Required('rate', t('Field required')),
+ new Validators\Numeric('rate', t('This value must be numeric')),
));
return array(
diff --git a/tests/units/Model/CurrencyTest.php b/tests/units/Model/CurrencyTest.php
new file mode 100644
index 00000000..ee11c0fb
--- /dev/null
+++ b/tests/units/Model/CurrencyTest.php
@@ -0,0 +1,46 @@
+<?php
+
+require_once __DIR__.'/../Base.php';
+
+use Kanboard\Model\Currency;
+
+class CurrencyTest extends Base
+{
+ public function testGetAll()
+ {
+ $currencyModel = new Currency($this->container);
+ $currencies = $currencyModel->getAll();
+ $this->assertCount(0, $currencies);
+
+ $this->assertNotFalse($currencyModel->create('USD', 9.9));
+ $currencies = $currencyModel->getAll();
+ $this->assertCount(1, $currencies);
+ $this->assertEquals('USD', $currencies[0]['currency']);
+ $this->assertEquals(9.9, $currencies[0]['rate']);
+ }
+
+ public function testCreate()
+ {
+ $currencyModel = new Currency($this->container);
+ $this->assertNotFalse($currencyModel->create('EUR', 1.2));
+ $this->assertNotFalse($currencyModel->create('EUR', 1.5));
+ }
+
+ public function testUpdate()
+ {
+ $currencyModel = new Currency($this->container);
+ $this->assertNotFalse($currencyModel->create('EUR', 1.1));
+ $this->assertNotFalse($currencyModel->update('EUR', 2.2));
+ }
+
+ public function testGetPrice()
+ {
+ $currencyModel = new Currency($this->container);
+
+ $this->assertEquals(123, $currencyModel->getPrice('USD', 123));
+
+ $this->assertNotFalse($currencyModel->create('EUR', 0.5));
+ $this->assertEquals(50.0, $currencyModel->getPrice('EUR', 100));
+ $this->assertEquals(50.0, $currencyModel->getPrice('EUR', 100)); // test with cached result
+ }
+}
diff --git a/tests/units/Validator/CurrencyValidatorTest.php b/tests/units/Validator/CurrencyValidatorTest.php
new file mode 100644
index 00000000..39c06d44
--- /dev/null
+++ b/tests/units/Validator/CurrencyValidatorTest.php
@@ -0,0 +1,27 @@
+<?php
+
+require_once __DIR__.'/../Base.php';
+
+use Kanboard\Validator\CurrencyValidator;
+
+class CurrencyValidatorTest extends Base
+{
+ public function testValidation()
+ {
+ $validator = new CurrencyValidator($this->container);
+ $result = $validator->validateCreation(array());
+ $this->assertFalse($result[0]);
+
+ $result = $validator->validateCreation(array('currency' => 'EUR'));
+ $this->assertFalse($result[0]);
+
+ $result = $validator->validateCreation(array('rate' => 1.9));
+ $this->assertFalse($result[0]);
+
+ $result = $validator->validateCreation(array('currency' => 'EUR', 'rate' => 'foobar'));
+ $this->assertFalse($result[0]);
+
+ $result = $validator->validateCreation(array('currency' => 'EUR', 'rate' => 1.25));
+ $this->assertTrue($result[0]);
+ }
+}