Blame view

framework/tests/forms/MoneyFieldTest.php 2.4 KB
0084d336   Administrator   Importers CRUD
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
  <?php
  /**
   * @package framework
   * @subpackage tests
   */
  class MoneyFieldTest extends SapphireTest {
  	
  	protected $extraDataObjects = array(
  		'MoneyFieldTest_Object',
  		'MoneyFieldTest_CustomSetter_Object',
  	);
  
  	public function testSaveInto() {
  		$o = new MoneyFieldTest_Object();
  		
  		$m = new Money();
  		$m->setAmount(1.23);
  		$m->setCurrency('EUR');
  		$f = new MoneyField('MyMoney', 'MyMoney', $m);
  		
  		$f->saveInto($o);
  		$this->assertEquals($o->MyMoney->getAmount(), 1.23);
  		$this->assertEquals($o->MyMoney->getCurrency(), 'EUR');
  	}
  	
  	public function testSetValueAsMoney() {
  		$o = new MoneyFieldTest_Object();
  		
  		$f = new MoneyField('MyMoney', 'MyMoney');
  		
  		$m = new Money();
  		$m->setAmount(1.23);
  		$m->setCurrency('EUR');
  		$f->setValue($m);
  		
  		$f->saveInto($o);
  		$this->assertEquals($o->MyMoney->getAmount(), 1.23);
  		$this->assertEquals($o->MyMoney->getCurrency(), 'EUR');
  	}
  	
  	public function testSetValueAsArray() {
  		$o = new MoneyFieldTest_Object();
  		
  		$f = new MoneyField('MyMoney', 'MyMoney');
  		
  		$f->setValue(array('Currency'=>'EUR','Amount'=>1.23));
  		
  		$f->saveInto($o);
  		$this->assertEquals($o->MyMoney->getAmount(), 1.23);
  		$this->assertEquals($o->MyMoney->getCurrency(), 'EUR');
  	}
  
  	/**
  	 * This UT tests if saveInto used customised getters/setters correctly.
  	 * Saving values for CustomMoney shall go through the setCustomMoney_Test
  	 * setter method and double the value. 
  	 */
  	public function testSetValueViaSetter() {
  		$o = new MoneyFieldTest_CustomSetter_Object();
  		
  		$f = new MoneyField('CustomMoney', 'Test Money Field');
  		$f->setValue(array('Currency'=>'EUR','Amount'=>1.23));
  		
  		$f->saveInto($o);
  		$this->assertEquals($o->MyMoney->getAmount(), (2 * 1.23) );
  		$this->assertEquals($o->MyMoney->getCurrency(), 'EUR');
  	}
  }
  
  class MoneyFieldTest_Object extends DataObject implements TestOnly {
  	private static $db = array(
  		'MyMoney' => 'Money', 
  	);
  }
  
  /**
   * Customised class, implementing custom getter and setter methods for
   * MyMoney.
   */
  class MoneyFieldTest_CustomSetter_Object extends DataObject implements TestOnly {
  	private static $db = array(
  		'MyMoney' => 'Money', 
  	);
  	
  	public function getCustomMoney() {
  		return $this->MyMoney->getValue();
  	}
  	
  	public function setCustomMoney($value) {
  		
  		$newAmount = $value->getAmount() * 2;
  		$this->MyMoney->setAmount($newAmount);
  
  		$newAmount = $value->getAmount() * 2;
  		$this->MyMoney->setCurrency($value->getCurrency());
  
  	}
  }