PageRenderTime 39ms CodeModel.GetById 18ms RepoModel.GetById 1ms app.codeStats 0ms

/fontes/tests/CommonsTest/Pattern/Dto/DtoTest.php

https://gitlab.com/cezar.zaleski/commonsphp
PHP | 328 lines | 220 code | 42 blank | 66 comment | 0 complexity | d1bfbb8eb758561e8728d4c364025b48 MD5 | raw file
  1. <?php
  2. namespace CommonsTest\Pattern\Dto;
  3. // Necessário para simular o DtoInvalido com namespace Commons/Dto
  4. require_once __DIR__ . '/Mock/Escola.php';
  5. require_once __DIR__ . '/Mock/Aluno.php';
  6. require_once __DIR__ . '/Mock/Matricula.php';
  7. use CommonsTest\Pattern\Dto\Mock\EmailVazio;
  8. use Commons\Pattern\Dto\Escola;
  9. use Commons\Pattern\Dto\Aluno;
  10. /**
  11. * Classe responsável por realizar testes para classe Dto.
  12. */
  13. class DtoTest extends \PHPUnit_Framework_TestCase
  14. {
  15. /**
  16. * Método responsável por testar argumento nulo no construtor.
  17. */
  18. public function testConstrutor_sucessoArgumentoNulo()
  19. {
  20. $escola = new Escola();
  21. self::assertNull($escola->getId());
  22. self::assertNull($escola->getEmail());
  23. self::assertNull($escola->getEndereco());
  24. self::assertNull($escola->getNome());
  25. self::assertNull($escola->getNumeroTelefone());
  26. }
  27. /**
  28. * Método responável por testar argumentos incompatíveis no construtor
  29. * do Dto.
  30. *
  31. * @dataProvider argumentosInvalidos
  32. * @expectedException Commons\Exception\InvalidArgumentException
  33. * @expectedExceptionMessage Dados de inicialização de Dto inválidos.
  34. */
  35. public function testConstrutor_falhaArgumentoIncompativel($arg)
  36. {
  37. new Escola($arg);
  38. }
  39. /**
  40. * Retorna parâmetros inválidos para criação de dtos.
  41. *
  42. * @return mixed parâmetros inválidos.
  43. */
  44. public function argumentosInvalidos()
  45. {
  46. return array(
  47. array(
  48. fopen(__DIR__ . '/DtoTest.php', 'r')
  49. ),
  50. array(
  51. function ()
  52. {}
  53. )
  54. );
  55. }
  56. /**
  57. * Método responável por testar argumentos ignorados no construtor
  58. * do Dto.
  59. *
  60. * @dataProvider argumentosIgnorados
  61. */
  62. public function testConstrutor_sucessoArgumentoIgnorados($arg)
  63. {
  64. $instance = new Escola($arg);
  65. self::assertNotNull($instance);
  66. }
  67. /**
  68. * Retorna parâmetros escalares que devem ser ignorados na criação dos dtos.
  69. *
  70. * @return mixed parâmetros ignorados
  71. */
  72. public function argumentosIgnorados()
  73. {
  74. return array(
  75. array(
  76. 'Hogwarts'
  77. ),
  78. array(
  79. 123
  80. ),
  81. array(
  82. 123.123
  83. ),
  84. array(
  85. true
  86. ),
  87. array(
  88. false
  89. )
  90. );
  91. }
  92. /**
  93. * Método responsável por testar a construção de Dtos com dados incompletos.
  94. */
  95. public function testConstrutor_sucessoDadosIncompletos()
  96. {
  97. $escolaDados = new \stdClass();
  98. $escolaDados->id = 1;
  99. $escolaDados->email = 'escolinha@mec.gov.br';
  100. $escolaDados->nome = 'Escolinha Trololo';
  101. $escola = new Escola($escolaDados);
  102. self::assertEquals(1, $escola->getId());
  103. self::assertEquals('escolinha@mec.gov.br', $escola->getEmail());
  104. self::assertEquals('Escolinha Trololo', $escola->getNome());
  105. self::assertNull($escola->getEndereco());
  106. self::assertNull($escola->getNumeroTelefone());
  107. }
  108. /**
  109. * Método responsável por testar a criação de um Dto a partir de dados avulsos
  110. * em \stdClass.
  111. */
  112. public function testConstrutor_sucessoDadosCompletos()
  113. {
  114. $escolaDados = new \stdClass();
  115. $escolaDados->id = 1;
  116. $escolaDados->email = 'escolinha@mec.gov.br';
  117. $escolaDados->nome = 'Escolinha Trololo';
  118. $escolaDados->endereco = 'Ed. Trololo, Rua Bla, Lote. 0, Trololo City';
  119. $escolaDados->numeroTelefone = '1234-4321';
  120. $escola = new Escola($escolaDados);
  121. self::assertEquals(1, $escola->getId());
  122. self::assertEquals('escolinha@mec.gov.br', $escola->getEmail());
  123. self::assertEquals('Escolinha Trololo', $escola->getNome());
  124. self::assertEquals('Ed. Trololo, Rua Bla, Lote. 0, Trololo City', $escola->getEndereco());
  125. self::assertEquals('1234-4321', $escola->getNumeroTelefone());
  126. }
  127. /**
  128. * Método responsável por testar a criação de Dtos através de dados
  129. * em array associativo.
  130. */
  131. public function testConstrutor_sucessoDadosArrayAssociativo()
  132. {
  133. $escolaDados = array(
  134. "id" => 1,
  135. "email" => 'escolinha@mec.gov.br',
  136. "nome" => 'Escolinha Trololo',
  137. "endereco" => 'Ed. Trololo, Rua Bla, Lote. 0, Trololo City',
  138. "numeroTelefone" => '1234-4321'
  139. );
  140. $escola = new Escola($escolaDados);
  141. self::assertEquals(1, $escola->getId());
  142. self::assertEquals('escolinha@mec.gov.br', $escola->getEmail());
  143. self::assertEquals('Escolinha Trololo', $escola->getNome());
  144. self::assertEquals('Ed. Trololo, Rua Bla, Lote. 0, Trololo City', $escola->getEndereco());
  145. self::assertEquals('1234-4321', $escola->getNumeroTelefone());
  146. }
  147. /**
  148. * Método responsável por testar a criação de um Dto a partir de
  149. * dados existentes em outro objeto.
  150. */
  151. public function testConstrutor_sucessoDadosObjeto()
  152. {
  153. $escolaDados = new Escola();
  154. $escolaDados->setId(1);
  155. $escola = new Escola($escolaDados);
  156. self::assertEquals(1, $escola->getId());
  157. self::assertNull($escola->getEmail());
  158. self::assertNull($escola->getNome());
  159. self::assertNull($escola->getEndereco());
  160. self::assertNull($escola->getNumeroTelefone());
  161. }
  162. /**
  163. * Método responsável por testar a criação de um Dto complexo
  164. */
  165. public function testConstrutor_sucessoTipoComplexoECiclico()
  166. {
  167. $escolaDados = new \stdClass();
  168. $escolaDados->id = 1;
  169. $escolaDados->email = 'escolinha@mec.gov.br';
  170. $escolaDados->nome = 'Escolinha Trololo';
  171. $escolaDados->endereco = 'Ed. Trololo, Rua Bla, Lote. 0, Trololo City';
  172. $escolaDados->numeroTelefone = '1234-4321';
  173. $matriculaDados = new \stdClass();
  174. $matriculaDados->id = 1;
  175. $matriculaDados->dataEntrada = '01/08/2012';
  176. $matriculaDados->escola = $escolaDados;
  177. $alunoDados = new \stdClass();
  178. $alunoDados->id = 1;
  179. $alunoDados->nome = 'Fulano';
  180. $alunoDados->cpf = 99999999999;
  181. $alunoDados->escola = $escolaDados;
  182. $alunoDados->matricula = $matriculaDados;
  183. // fecha ciclo
  184. $matriculaDados->aluno = $alunoDados;
  185. $aluno = new Aluno($alunoDados);
  186. self::assertInstanceOf('Commons\Pattern\Dto\Aluno', $aluno);
  187. self::assertInstanceOf('Commons\Pattern\Dto\Escola', $aluno->getEscola());
  188. self::assertInstanceOf('Commons\Pattern\Dto\Matricula', $aluno->getMatricula());
  189. self::assertInstanceOf('Commons\Pattern\Dto\Aluno', $aluno->getMatricula()->getAluno());
  190. self::assertInstanceOf('Commons\Pattern\Dto\Escola', $aluno->getMatricula()->getEscola());
  191. self::assertEquals($aluno, $aluno->getMatricula()->getAluno());
  192. self::assertEquals($aluno->getEscola(), $aluno->getMatricula()->getEscola());
  193. }
  194. /**
  195. * Método responsável por testar a criação de um Dto por dados avulsos
  196. * por aliases.
  197. */
  198. public function testConstrutor_sucessoTipoComplexoAliases()
  199. {
  200. $alunoDados = new \stdClass();
  201. $alunoDados->id_aluno = 2000;
  202. $alunoDados->nome_aluno = 'Sicrano';
  203. $alunoDados->cpf_aluno = 88888888888;
  204. $aluno = new Aluno($alunoDados);
  205. self::assertInstanceOf('Commons\Pattern\Dto\Aluno', $aluno);
  206. self::assertEquals(2000, $aluno->getId());
  207. self::assertEquals('Sicrano', $aluno->getNome());
  208. self::assertEquals(88888888888, $aluno->getCpf());
  209. }
  210. /**
  211. * Método responsável por testar a criação de um Dto a partir de um dado
  212. * com objeto que pode ser convertido em string.
  213. */
  214. public function testConstrutor_sucessoDadoObjetoConvertidoEmString()
  215. {
  216. $escolaDados = new \stdClass();
  217. $escolaDados->id = 1;
  218. $escolaDados->email = new EmailVazio();
  219. $escola = new Escola($escolaDados);
  220. self::assertEquals(1, $escola->getId());
  221. self::assertEmpty($escola->getEmail());
  222. }
  223. public function testImport()
  224. {
  225. $alunoDados = array(
  226. 'idAluno' => 1,
  227. 'nomeAluno' => 'Beltrano'
  228. );
  229. $aluno = new Aluno();
  230. $aluno->import($alunoDados, array(
  231. 'id' => 'idAluno',
  232. 'nome' => 'nomeAluno'
  233. ));
  234. self::assertEquals(1, $aluno->getId());
  235. self::assertEquals('Beltrano', $aluno->getNome());
  236. }
  237. public function testToArray()
  238. {
  239. $alunoDados = new \stdClass();
  240. $alunoDados->id_aluno = 2000;
  241. $alunoDados->nome_aluno = 'Sicrano';
  242. $alunoDados->cpf_aluno = 88888888888;
  243. $aluno = new Aluno($alunoDados);
  244. $arr = $aluno->toArray();
  245. self::assertEquals(2000, $arr['id']);
  246. self::assertEquals('Sicrano', $arr['nome']);
  247. self::assertEquals(88888888888, $arr['cpf']);
  248. }
  249. public function testImportFromArray()
  250. {
  251. $alunoDados = array(
  252. 'idAluno' => 1,
  253. 'nomeAluno' => 'Beltrano'
  254. );
  255. $aluno = new Aluno();
  256. $aluno->fromArray(
  257. array(
  258. 'data' => $alunoDados,
  259. 'aliases' => array(
  260. 'id' => 'idAluno',
  261. 'nome' => 'nomeAluno'
  262. )
  263. )
  264. );
  265. self::assertEquals(1, $aluno->getId());
  266. self::assertEquals('Beltrano', $aluno->getNome());
  267. }
  268. /**
  269. * @expectedException Commons\Exception\InvalidArgumentException
  270. * @expectedExceptionMessage O formato das opções está incorreto, o campo 'data' não é um array.
  271. */
  272. public function testImportFromArrayInvalidFormat()
  273. {
  274. $aluno = new Aluno();
  275. $aluno->fromArray(array('data' => null));
  276. }
  277. /**
  278. * @expectedException Commons\Exception\InvalidArgumentException
  279. * @expectedExceptionMessage O formato das opções está incorreto, o campo 'data' não é um array.
  280. */
  281. public function testImportFromArrayUnsettedProperty()
  282. {
  283. $aluno = new Aluno();
  284. $aluno->fromArray(array());
  285. }
  286. }