PageRenderTime 44ms CodeModel.GetById 17ms RepoModel.GetById 1ms app.codeStats 0ms

/app/tests/cases/models/criterias_document.test.php

https://github.com/cgajardo/repositorium
PHP | 238 lines | 162 code | 41 blank | 35 comment | 4 complexity | 1a59af6c4c4f20099e9fa5a11cf42948 MD5 | raw file
  1. <?php
  2. /* CriteriasDocument Test cases generated on: 2011-08-06 19:00:58 : 1312671658*/
  3. App::import('Model', 'CriteriasDocument');
  4. class CriteriasDocumentTestCase extends CakeTestCase {
  5. var $fixtures = array('app.criterias_document', 'app.document', 'app.criteria', 'app.repository', 'app.user', 'app.criterias_user', 'app.tag', 'app.expert', 'app.repositories_user');
  6. var $criteria_qty = 5;
  7. function startTest() {
  8. $this->CriteriasDocument =& ClassRegistry::init('CriteriasDocument');
  9. }
  10. function testMassCreateAfterCriteria() {
  11. $id_criterio = 42;
  12. $repo_id = 42;
  13. $this->CriteriasDocument->massCreateAfterCriteria($id_criterio, $repo_id);
  14. $documents = $this->CriteriasDocument->Document->find('all', array(
  15. 'fields' => array('Document.id', 'Document.user_id'),
  16. 'recursive' => -1,
  17. 'order' => 'Document.id',
  18. 'conditions' => array('repository_id' => $repo_id),
  19. )
  20. );
  21. $ids = $this->CriteriasDocument->find('all', array(
  22. 'conditions' => array('CriteriasDocument.criteria_id' => $id_criterio, 'Criteria.repository_id' => $repo_id),
  23. 'fields' => array('Document.id', 'Document.user_id'),
  24. 'order' => 'Document.id',
  25. )
  26. );
  27. // pr($documents); pr($ids); exit;
  28. $this->assertEqual($ids, $documents);
  29. }
  30. function testMassCreateAfterDocument() {
  31. $id_documento = 42;
  32. $repo_id = 42;
  33. $this->CriteriasDocument->massCreateAfterDocument($id_documento, $repo_id);
  34. $crs = $this->CriteriasDocument->Criteria->find('all', array(
  35. 'fields' => array('Criteria.id'),
  36. 'recursive' => -1,
  37. 'order' => 'Criteria.id',
  38. 'conditions' => array('repository_id' => $repo_id),
  39. )
  40. );
  41. $ids = $this->CriteriasDocument->find('all', array(
  42. 'conditions' => array('CriteriasDocument.document_id' => $id_documento, 'Criteria.repository_id' => $repo_id),
  43. 'fields' => array('Criteria.id'),
  44. 'order' => 'Criteria.id'
  45. )
  46. );
  47. $this->assertEqual($ids, $crs);
  48. }
  49. function testGetRandomDocumentsValidated() {
  50. $criteria_id = mt_rand(1,$this->criteria_qty);
  51. $confirmado = true;
  52. $preguntable = true;
  53. $quantity = 5;
  54. $repository_id = 42;
  55. $this->_generateRecords($repository_id);
  56. $ides = $this->CriteriasDocument->getRandomDocuments(compact('criteria_id', 'confirmado', 'preguntable', 'quantity', 'repository_id'));
  57. $this->assertTrue($quantity >= count($ides));
  58. foreach($ides as $k=>$v) {
  59. $this->assertTrue($v['CriteriasDocument']['validated']);
  60. $this->assertTrue($v['CriteriasDocument']['challengeable']);
  61. $this->assertEqual($v['CriteriasDocument']['criteria_id'], $criteria_id);
  62. $this->assertNotNull($v['Document']);
  63. $this->assertFalse(empty($v['Document']));
  64. }
  65. }
  66. function testGetRandomDocumentsNonValidated() {
  67. $criteria_id = mt_rand(1,$this->criteria_qty);
  68. $confirmado = false;
  69. $preguntable = true;
  70. $quantity = 5;
  71. $repository_id = 42;
  72. $this->_generateRecords($repository_id);
  73. $ides = $this->CriteriasDocument->getRandomDocuments(compact('criteria_id', 'confirmado', 'preguntable', 'quantity', 'repository_id'));
  74. $this->assertTrue($quantity >= count($ides));
  75. foreach($ides as $k=>$v) {
  76. $this->assertTrue(!$v['CriteriasDocument']['validated']);
  77. $this->assertTrue($v['CriteriasDocument']['challengeable']);
  78. $this->assertEqual($v['CriteriasDocument']['criteria_id'], $criteria_id);
  79. $this->assertNotNull($v['Document']);
  80. $this->assertFalse(empty($v['Document']));
  81. }
  82. }
  83. /*
  84. * Genera $docs documentos en la tabla test, 1/$cri de cada uno de $cri criterios
  85. * la mitad de ellos está validado, y la otra no
  86. */
  87. function _generateRecords($repo_id) {
  88. $docs = 10;
  89. $cri = $this->criteria_qty;
  90. $ds = $this->CriteriasDocument->getDataSource();
  91. $ds->begin($this->CriteriasDocument);
  92. for($c = 1; $c <= $cri; $c++) {
  93. for($d = 1; $d <= $docs; $d++) {
  94. $this->CriteriasDocument->create();
  95. $this->CriteriasDocument->set(
  96. array(
  97. 'document_id' => $d,
  98. 'repository_id' => $repo_id,
  99. 'criteria_id' => $c,
  100. 'total_answers_1' => 0,
  101. 'total_answers_2' => 0,
  102. 'official_answer' => ($d % 2 == 0 ? null : 1),
  103. 'validated' => ($d % 2 == 0 ? false : true),
  104. 'challengeable' => true,
  105. )
  106. );
  107. $this->CriteriasDocument->save();
  108. }
  109. }
  110. $ds->commit($this->CriteriasDocument);
  111. }
  112. function testValidateChallenge() {
  113. /*
  114. * challenge correct
  115. */
  116. $data = array(
  117. array('respuesta' => 2, 'criteria_id' => 1, 'document_id' => 1),
  118. array('respuesta' => 1, 'criteria_id' => 1, 'document_id' => 2)
  119. );
  120. $this->assertTrue($this->CriteriasDocument->validateChallenge($data));
  121. /*
  122. * challenge incorrect
  123. */
  124. $data = array(
  125. array('respuesta' => 1, 'criteria_id' => 1, 'document_id' => 3),
  126. array('respuesta' => 1, 'criteria_id' => 1, 'document_id' => 4)
  127. );
  128. $this->assertFalse($this->CriteriasDocument->validateChallenge($data));
  129. /*
  130. * challenge with no official answer
  131. */
  132. $data = array(
  133. array('respuesta' => 2, 'criteria_id' => 2, 'document_id' => 1),
  134. array('respuesta' => 1, 'criteria_id' => 2, 'document_id' => 2)
  135. );
  136. $this->assertTrue($this->CriteriasDocument->validateChallenge($data));
  137. }
  138. function testSaveStatisticsCorrect() {
  139. /*
  140. * challenge correct
  141. * id 1,2
  142. */
  143. $data = array(
  144. array('respuesta' => 2, 'criteria_id' => 1, 'document_id' => 1), //valid
  145. array('respuesta' => 1, 'criteria_id' => 1, 'document_id' => 2) //nonvalid
  146. );
  147. $this->CriteriasDocument->saveStatistics($data, true);
  148. $info1 = $this->CriteriasDocument->find('first', array('conditions' => array('CriteriasDocument.id' => 1)));
  149. $info2 = $this->CriteriasDocument->find('first', array('conditions' => array('CriteriasDocument.id' => 2)));
  150. /*
  151. * yes +1
  152. */
  153. $this->assertTrue($info1['CriteriasDocument']['total_answers_1'] === '1');
  154. $this->assertTrue($info1['CriteriasDocument']['total_answers_2'] === '2');
  155. /*
  156. * no +1
  157. */
  158. $this->assertTrue($info2['CriteriasDocument']['total_answers_1'] === '2');
  159. $this->assertTrue($info2['CriteriasDocument']['total_answers_2'] === '1');
  160. }
  161. function testSaveStatisticIncorrect() {
  162. /*
  163. * challenge incorrect
  164. * id 3,4
  165. */
  166. $data = array(
  167. array('respuesta' => 1, 'criteria_id' => 1, 'document_id' => 3), // validated
  168. array('respuesta' => 1, 'criteria_id' => 1, 'document_id' => 4) // non-valid
  169. );
  170. $this->CriteriasDocument->saveStatistics($data, false);
  171. $info1 = $this->CriteriasDocument->find('first', array('conditions' => array('CriteriasDocument.id' => 3)));
  172. $info2 = $this->CriteriasDocument->find('first', array('conditions' => array('CriteriasDocument.id' => 4)));
  173. /*
  174. * no +1
  175. */
  176. $this->assertTrue($info1['CriteriasDocument']['total_answers_1'] === '2');
  177. $this->assertTrue($info1['CriteriasDocument']['total_answers_2'] === '1');
  178. /*
  179. * no changes
  180. */
  181. $this->assertTrue($info2['CriteriasDocument']['total_answers_1'] === '1');
  182. $this->assertTrue($info2['CriteriasDocument']['total_answers_2'] === '1');
  183. }
  184. function testEntry() {
  185. $data = array(
  186. 'criteria_id' => 100,
  187. 'document_id' => 100
  188. );
  189. $info = $this->CriteriasDocument->entry($data);
  190. $this->assertFalse($info);
  191. }
  192. function endTest() {
  193. unset($this->CriteriasDocument);
  194. ClassRegistry::flush();
  195. }
  196. }
  197. ?>