FieldsTest.php 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143
  1. <?php
  2. namespace lithium\tests\integration\data;
  3. use lithium\data\Connections;
  4. use lithium\data\Entity;
  5. use lithium\data\source\Database;
  6. use lithium\tests\mocks\data\MockEmployees;
  7. use lithium\tests\mocks\data\MockCompanies;
  8. class FieldsTest extends \lithium\test\Integration {
  9. public $db = null;
  10. protected $_dbConfig = null;
  11. public function setUp() {
  12. $mockBase = LITHIUM_LIBRARY_PATH . '/lithium/tests/mocks/data/source/database/adapter/';
  13. $files = array('companies' => '_companies.sql', 'employees' => '_employees.sql');
  14. $files = array_diff_key($files, array_flip($this->db->sources()));
  15. foreach ($files as $file) {
  16. $sqlFile = $mockBase . strtolower($this->_dbConfig['adapter']) . $file;
  17. $this->skipIf(!file_exists($sqlFile), "SQL file $sqlFile does not exist.");
  18. $sql = file_get_contents($sqlFile);
  19. $this->db->read($sql, array('return' => 'resource'));
  20. }
  21. }
  22. public function tearDown() {
  23. $this->db->read('DROP TABLE IF EXISTS `employees`;');
  24. $this->db->read('DROP TABLE IF EXISTS `companies`;');
  25. }
  26. public function skip() {
  27. $connection = 'lithium_mysql_test';
  28. $this->_dbConfig = Connections::get($connection, array(
  29. 'config' => true
  30. ));
  31. $isConnected = $this->_dbConfig && Connections::get($connection)->isConnected(array(
  32. 'autoConnect' => true
  33. ));
  34. $isAvailable = $this->_dbConfig && $isConnected;
  35. $this->skipIf(!$isAvailable, "No {$connection} connection available.");
  36. $this->db = Connections::get($connection);
  37. $this->skipIf(
  38. !($this->db instanceof Database),
  39. "The {$connection} connection is not a relational database."
  40. );
  41. }
  42. public function testSingleField() {
  43. $new = MockCompanies::create(array('name' => 'Acme, Inc.'));
  44. $key = MockCompanies::meta('key');
  45. $new->save();
  46. $id = is_object($new->{$key}) ? (string) $new->{$key} : $new->{$key};
  47. $entity = MockCompanies::first($id);
  48. $this->assertTrue($entity instanceof Entity);
  49. $this->skipIf(!$entity instanceof Entity, 'Queried object is not an entity.');
  50. $expected = array(
  51. $key => $id, 'name' => 'Acme, Inc.', 'active' => null,
  52. 'created' => null, 'modified' => null
  53. );
  54. $result = $entity->data();
  55. $this->assertEqual($expected, $result);
  56. $entity = MockCompanies::first(array(
  57. 'conditions' => array($key => $id),
  58. 'fields' => array($key)
  59. ));
  60. $this->assertTrue($entity instanceof Entity);
  61. $this->skipIf(!$entity instanceof Entity, 'Queried object is not an entity.');
  62. $expected = array($key => $id);
  63. $result = $entity->data();
  64. $this->assertEqual($expected, $result);
  65. $entity = MockCompanies::find('first',array(
  66. 'conditions' => array($key => $id),
  67. 'fields' => array($key, 'name')
  68. ));
  69. $this->assertTrue($entity instanceof Entity);
  70. $this->skipIf(!$entity instanceof Entity, 'Queried object is not an entity.');
  71. $entity->name = 'Acme, Incorporated';
  72. $result = $entity->save();
  73. $this->assertTrue($result);
  74. $entity = MockCompanies::find('first',array(
  75. 'conditions' => array($key => $id),
  76. 'fields' => array($key, 'name')
  77. ));
  78. $this->assertEqual($entity->name, 'Acme, Incorporated');
  79. $new->delete();
  80. }
  81. public function testFieldsWithJoins() {
  82. $new = MockCompanies::create(array('name' => 'Acme, Inc.'));
  83. $cKey = MockCompanies::meta('key');
  84. $result = $new->save();
  85. $cId = (string) $new->{$cKey};
  86. $this->skipIf(!$result, 'Could not save MockCompanies');
  87. $new = MockEmployees::create(array(
  88. 'company_id' => $cId,
  89. 'name' => 'John Doe'
  90. ));
  91. $eKey = MockEmployees::meta('key');
  92. $result = $new->save();
  93. $this->skipIf(!$result, 'Could not save MockEmployee');
  94. $eId = (string) $new->{$eKey};
  95. $entity = MockCompanies::first(array(
  96. 'with' => 'Employees',
  97. 'conditions' => array(
  98. 'MockCompanies.id' => $cId
  99. ),
  100. 'fields' => array(
  101. 'MockCompanies' => array('id', 'name'),
  102. 'Employees' => array('id', 'name')
  103. )
  104. ));
  105. $expected = array(
  106. 'id' => $cId,
  107. 'name' => 'Acme, Inc.',
  108. 'employees' => array (
  109. $eId => array (
  110. 'id' => $eId,
  111. 'name' => 'John Doe'
  112. )
  113. )
  114. );
  115. $this->assertEqual($expected, $entity->data());
  116. }
  117. }
  118. ?>