Commit c5eab2c1c42f7477f306c3c630706f3bcf0443af

Authored by Eriksen Costa Paixão
1 parent 5823bc31
Exists in master

Atualizado service {{{Avaliacao_Service_Boletim}}} para suportar pareceres descr…

…itivos. Refactoring nos casos de testes para torná-los mais simples e configuráveis para diferentes cenários
Showing 34 changed files with 6639 additions and 2074 deletions   Show diff stats
ieducar/lib/App/Model/Matricula.php
... ... @@ -59,7 +59,9 @@ class App_Model_Matricula
59 59 $instance->cod_matricula = $matricula;
60 60 $instance->ref_usuario_cad = $usuario;
61 61 $instance->ref_usuario_exc = $usuario;
62   - $instance->aprovado = ($aprovado == TRUE) ? 1 : 2;
  62 + $instance->aprovado = ($aprovado == TRUE) ?
  63 + App_Model_MatriculaSituacao::APROVADO :
  64 + App_Model_MatriculaSituacao::REPROVADO;
63 65  
64 66 return $instance->edita();
65 67 }
... ...
ieducar/modules/Avaliacao/Model/ParecerDescritivoAbstract.php
... ... @@ -72,4 +72,14 @@ abstract class Avaliacao_Model_ParecerDescritivoAbstract extends Avaliacao_Model
72 72 'parecer' => new CoreExt_Validate_String()
73 73 );
74 74 }
  75 +
  76 + /**
  77 + * Implementa método mágico __toString().
  78 + * @link http://br.php.net/__toString
  79 + * @return string
  80 + */
  81 + public function __toString()
  82 + {
  83 + return $this->parecer;
  84 + }
75 85 }
76 86 \ No newline at end of file
... ...
ieducar/modules/Avaliacao/Service/Boletim.php
... ... @@ -47,6 +47,8 @@ require_once 'App/Model/MatriculaSituacao.php';
47 47 * @package Avaliacao
48 48 * @subpackage Modules
49 49 * @since Classe disponível desde a versão 1.1.0
  50 + * @todo Substituir todos os usos literais de 'Rc' e 'An' por constantes
  51 + * ou por um novo CoreExt_Enum
50 52 * @version @@package_version@@
51 53 */
52 54 class Avaliacao_Service_Boletim implements CoreExt_Configurable
... ... @@ -89,6 +91,11 @@ class Avaliacao_Service_Boletim implements CoreExt_Configurable
89 91 protected $_faltaAlunoDataMapper = NULL;
90 92  
91 93 /**
  94 + * @var Avaliacao_Model_ParecerDescritivoAlunoDataMapper
  95 + */
  96 + protected $_parecerDescritivoAlunoDataMapper = NULL;
  97 +
  98 + /**
92 99 * @var Avaliacao_Model_NotaComponenteDataMapper
93 100 */
94 101 protected $_notaComponenteDataMapper = NULL;
... ... @@ -104,6 +111,11 @@ class Avaliacao_Service_Boletim implements CoreExt_Configurable
104 111 protected $_notaComponenteMediaDataMapper = NULL;
105 112  
106 113 /**
  114 + * @var Avaliacao_Model_ParecerDescritivoAbstractDataMapper
  115 + */
  116 + protected $_parecerDescritivoAbstractDataMapper = NULL;
  117 +
  118 + /**
107 119 * Uma instância de Avaliacao_Model_NotaAluno, que é a entrada que contém
108 120 * o cruzamento de matrícula com as notas do aluno nos diversos componentes
109 121 * cursados.
... ... @@ -122,6 +134,15 @@ class Avaliacao_Service_Boletim implements CoreExt_Configurable
122 134 protected $_faltaAluno = NULL;
123 135  
124 136 /**
  137 + * Uma instância de Avaliacao_Model_ParecerDescritivoAluno, que é a entrada
  138 + * que contém o cruzamento de matrícula com os pareceres do aluno nos diversos
  139 + * componentes cursados ou no geral.
  140 + *
  141 + * @var Avaliacao_Model_ParecerDescritivoAluno
  142 + */
  143 + protected $_parecerDescritivoAluno = NULL;
  144 +
  145 + /**
125 146 * Componentes que o aluno cursa, indexado pelo id de
126 147 * ComponenteCurricular_Model_Componente.
127 148 * @var array
... ... @@ -165,13 +186,49 @@ class Avaliacao_Service_Boletim implements CoreExt_Configurable
165 186 protected $_faltas = array();
166 187  
167 188 /**
  189 + * Pareceres descritivos adicionados no boletim para inclusão ou edição.
  190 + * @var array
  191 + */
  192 + protected $_pareceres = array();
  193 +
  194 + /**
  195 + * Pareceres descritivos do aluno nos componentes cursados.
  196 + * @var array
  197 + */
  198 + protected $_pareceresComponentes = array();
  199 +
  200 + /**
  201 + * Pareceres descritivos do aluno no geral.
  202 + * @var array
  203 + */
  204 + protected $_pareceresGerais = array();
  205 +
  206 + /**
  207 + * Validadores para instâncias de Avaliacao_Model_FaltaAbstract e
  208 + * Avaliacao_Model_NotaComponente.
  209 + *
  210 + * @see Avaliacao_Service_Boletim#_addValidators()
  211 + * @var array
  212 + */
  213 + protected $_validators = NULL;
  214 +
  215 + /**
  216 + * Validadores para uma instância de Avaliacao_Model_ParecerDescritivoAbstract
  217 + * adicionada no boletim.
  218 + *
  219 + * @see Avaliacao_Service_Boletim#_addParecerValidators()
  220 + * @var array
  221 + */
  222 + protected $_parecerValidators = NULL;
  223 +
  224 + /**
168 225 * Prioridade da situação da matrícula, usado para definir a situação
169 226 * das notas e faltas.
170 227 * @var array
171 228 */
172 229 protected $_situacaoPrioridade = array(
173   - App_Model_MatriculaSituacao::EM_EXAME => 1,
174   - App_Model_MatriculaSituacao::EM_ANDAMENTO => 2,
  230 + App_Model_MatriculaSituacao::EM_ANDAMENTO => 1,
  231 + App_Model_MatriculaSituacao::EM_EXAME => 2,
175 232 App_Model_MatriculaSituacao::REPROVADO => 3,
176 233 App_Model_MatriculaSituacao::APROVADO_APOS_EXAME => 4,
177 234 App_Model_MatriculaSituacao::APROVADO => 5
... ... @@ -193,7 +250,8 @@ class Avaliacao_Service_Boletim implements CoreExt_Configurable
193 250 $this->setOptions($options)
194 251 ->_setMatriculaInfo()
195 252 ->_loadNotaComponenteCurricular()
196   - ->_loadFalta();
  253 + ->_loadFalta()
  254 + ->_loadParecerDescritivo();
197 255 }
198 256  
199 257 /**
... ... @@ -242,6 +300,16 @@ class Avaliacao_Service_Boletim implements CoreExt_Configurable
242 300 unset($options['FaltaAbstractDataMapper']);
243 301 }
244 302  
  303 + if (isset($options['ParecerDescritivoAlunoDataMapper'])) {
  304 + $this->setParecerDescritivoAlunoDataMapper($options['ParecerDescritivoAlunoDataMapper']);
  305 + unset($options['ParecerDescritivoAlunoDataMapper']);
  306 + }
  307 +
  308 + if (isset($options['ParecerDescritivoAbstractDataMapper'])) {
  309 + $this->setParecerDescritivoAbstractDataMapper($options['ParecerDescritivoAbstractDataMapper']);
  310 + unset($options['ParecerDescritivoAbstractDataMapper']);
  311 + }
  312 +
245 313 $defaultOptions = array_keys($this->getOptions());
246 314 $passedOptions = array_keys($options);
247 315  
... ... @@ -465,6 +533,70 @@ class Avaliacao_Service_Boletim implements CoreExt_Configurable
465 533 }
466 534  
467 535 /**
  536 + * Setter.
  537 + * @param Avaliacao_Model_ParecerDescritivoAlunoDataMapper $mapper
  538 + * @return App_Service_Boletim Provê interface fluída
  539 + */
  540 + public function setParecerDescritivoAlunoDataMapper(Avaliacao_Model_ParecerDescritivoAlunoDataMapper $mapper)
  541 + {
  542 + $this->_parecerDescritivoAlunoDataMapper = $mapper;
  543 + return $this;
  544 + }
  545 +
  546 + /**
  547 + * Getter.
  548 + * @return Avaliacao_Model_ParecerDescritivoAlunoDataMapper
  549 + */
  550 + public function getParecerDescritivoAlunoDataMapper()
  551 + {
  552 + if (is_null($this->_parecerDescritivoAlunoDataMapper)) {
  553 + require_once 'Avaliacao/Model/ParecerDescritivoAlunoDataMapper.php';
  554 + $this->setParecerDescritivoAlunoDataMapper(new Avaliacao_Model_ParecerDescritivoAlunoDataMapper());
  555 + }
  556 + return $this->_parecerDescritivoAlunoDataMapper;
  557 + }
  558 +
  559 + /**
  560 + * Setter.
  561 + * @param Avaliacao_Model_ParecerDescritivoAbstractDataMapper $mapper
  562 + * @return App_Service_Boletim Provê interface fluída
  563 + */
  564 + public function setParecerDescritivoAbstractDataMapper(Avaliacao_Model_ParecerDescritivoAbstractDataMapper $mapper)
  565 + {
  566 + $this->_parecerDescritivoAbstractDataMapper = $mapper;
  567 + return $this;
  568 + }
  569 +
  570 + /**
  571 + * Getter.
  572 + * @return Avaliacao_Model_ParecerDescritivoAbstractDataMapper
  573 + */
  574 + public function getParecerDescritivoAbstractDataMapper()
  575 + {
  576 + if (is_null($this->_parecerDescritivoAbstractDataMapper)) {
  577 + $parecerDescritivo = $this->getRegra()->get('parecerDescritivo');
  578 +
  579 + switch($parecerDescritivo) {
  580 + case RegraAvaliacao_Model_TipoParecerDescritivo::ANUAL_GERAL:
  581 + case RegraAvaliacao_Model_TipoParecerDescritivo::ETAPA_GERAL:
  582 + $filename = 'Avaliacao/Model/ParecerDescritivoGeralDataMapper.php';
  583 + $class = 'Avaliacao_Model_ParecerDescritivoGeralDataMapper';
  584 + break;
  585 + case RegraAvaliacao_Model_TipoParecerDescritivo::ANUAL_COMPONENTE:
  586 + case RegraAvaliacao_Model_TipoParecerDescritivo::ETAPA_COMPONENTE:
  587 + $filename = 'Avaliacao/Model/ParecerDescritivoComponenteDataMapper.php';
  588 + $class = 'Avaliacao_Model_ParecerDescritivoComponenteDataMapper';
  589 + break;
  590 + }
  591 +
  592 + require_once $filename;
  593 + $this->setParecerDescritivoAbstractDataMapper(new $class());
  594 + }
  595 +
  596 + return $this->_parecerDescritivoAbstractDataMapper;
  597 + }
  598 +
  599 + /**
468 600 * Retorna as instâncias de Avaliacao_Model_NotaComponente do aluno.
469 601 * @return array
470 602 */
... ... @@ -501,6 +633,25 @@ class Avaliacao_Service_Boletim implements CoreExt_Configurable
501 633 }
502 634  
503 635 /**
  636 + * Retorna as instâncias de Avaliacao_Model_ParecerDescritivoComponente do
  637 + * aluno.
  638 + * @return array
  639 + */
  640 + public function getPareceresComponentes()
  641 + {
  642 + return $this->_pareceresComponentes;
  643 + }
  644 +
  645 + /**
  646 + * Retorna as instâncias de Avaliacao_Model_ParecerDescritivoGeral do aluno.
  647 + * @return array
  648 + */
  649 + public function getPareceresGerais()
  650 + {
  651 + return $this->_pareceresGerais;
  652 + }
  653 +
  654 + /**
504 655 * Retorna uma instância de Avaliacao_Model_NotaComponente.
505 656 *
506 657 * @param int $id O identificador de ComponenteCurricular_Model_Componente
... ... @@ -557,6 +708,49 @@ class Avaliacao_Service_Boletim implements CoreExt_Configurable
557 708 return NULL;
558 709 }
559 710  
  711 + /**
  712 + * Retorna uma instância de Avaliacao_Model_ParecerDescritivoAbstract.
  713 + *
  714 + * @param int $etapa A etapa para o qual o parecer foi lançado
  715 + * @param int $id O identificador de ComponenteCurricular_Model_Componente
  716 + * @return Avaliacao_Model_ParecerAbstract|NULL
  717 + */
  718 + public function getParecerDescritivo($etapa = 1, $id = NULL)
  719 + {
  720 + $parecerDescritivo = $this->getRegra()->get('parecerDescritivo');
  721 +
  722 + $gerais = array(
  723 + RegraAvaliacao_Model_TipoParecerDescritivo::ANUAL_GERAL,
  724 + RegraAvaliacao_Model_TipoParecerDescritivo::ETAPA_GERAL
  725 + );
  726 +
  727 + $componentes = array(
  728 + RegraAvaliacao_Model_TipoParecerDescritivo::ANUAL_COMPONENTE,
  729 + RegraAvaliacao_Model_TipoParecerDescritivo::ETAPA_COMPONENTE
  730 + );
  731 +
  732 + if (in_array($parecerDescritivo, $gerais)) {
  733 + $pareceres = $this->getPareceresGerais();
  734 + }
  735 + elseif (in_array($parecerDescritivo, $componentes)) {
  736 + $pareceres = $this->getPareceresComponentes();
  737 +
  738 + if (!isset($pareceres[$id])) {
  739 + return NULL;
  740 + }
  741 +
  742 + $pareceres = $pareceres[$id];
  743 + }
  744 +
  745 + foreach ($pareceres as $parecer) {
  746 + if ($parecer->etapa == $etapa) {
  747 + return $parecer;
  748 + }
  749 + }
  750 +
  751 + return NULL;
  752 + }
  753 +
560 754  
561 755 /**
562 756 * Setter.
... ... @@ -576,6 +770,7 @@ class Avaliacao_Service_Boletim implements CoreExt_Configurable
576 770  
577 771 // Valores scalar de referência
578 772 $matricula = App_Model_IedFinder::getMatricula($codMatricula);
  773 +
579 774 $etapas = App_Model_IedFinder::getQuantidadeDeEtapasMatricula($codMatricula);
580 775 $this->setOption('matriculaData', $matricula);
581 776 $this->setOption('aprovado', $matricula['aprovado']);
... ... @@ -688,6 +883,55 @@ class Avaliacao_Service_Boletim implements CoreExt_Configurable
688 883 }
689 884  
690 885 /**
  886 + * Carrega os pareceres do aluno, sejam gerais ou por componentes.
  887 + * @return App_Service_Boletim Provê interface fluída
  888 + */
  889 + protected function _loadParecerDescritivo()
  890 + {
  891 + if (!$this->hasParecerDescritivoAluno()) {
  892 + $this->_createParecerDescritivoAluno();
  893 + }
  894 +
  895 + $parecerDescritivoAluno = $this->_getParecerDescritivoAluno();
  896 +
  897 + $pareceres = $this->getParecerDescritivoAbstractDataMapper()->findAll(
  898 + array(), array('parecerDescritivoAluno' => $parecerDescritivoAluno->id), array('etapa' => 'ASC')
  899 + );
  900 +
  901 + $gerais = array(
  902 + RegraAvaliacao_Model_TipoParecerDescritivo::ETAPA_GERAL,
  903 + RegraAvaliacao_Model_TipoParecerDescritivo::ANUAL_GERAL
  904 + );
  905 +
  906 + $componentes = array(
  907 + RegraAvaliacao_Model_TipoParecerDescritivo::ETAPA_COMPONENTE,
  908 + RegraAvaliacao_Model_TipoParecerDescritivo::ANUAL_COMPONENTE
  909 + );
  910 +
  911 + $parecerDescritivo = $this->getRegra()->get('parecerDescritivo');
  912 + if (in_array($parecerDescritivo, $gerais)) {
  913 + $pareceresGerais = array();
  914 +
  915 + foreach ($pareceres as $parecer) {
  916 + $pareceresGerais[$parecer->etapa] = $parecer;
  917 + }
  918 +
  919 + $this->_pareceresGerais = $pareceresGerais;
  920 + }
  921 + elseif (in_array($parecerDescritivo, $componentes)) {
  922 + $pareceresComponentes = array();
  923 +
  924 + foreach ($pareceres as $parecer) {
  925 + $pareceresComponentes[$parecer->get('componenteCurricular')][] = $parecer;
  926 + }
  927 +
  928 + $this->_pareceresComponentes = $pareceresComponentes;
  929 + }
  930 +
  931 + return $this;
  932 + }
  933 +
  934 + /**
691 935 * Setter.
692 936 * @param RegraAvaliacao_Model_Regra $regra
693 937 * @return App_Service_Boletim Provê interface fluída
... ... @@ -811,7 +1055,6 @@ class Avaliacao_Service_Boletim implements CoreExt_Configurable
811 1055 $situacao->recuperacao = TRUE;
812 1056 break;
813 1057 case App_Model_MatriculaSituacao::REPROVADO:
814   - $situacao->recuperacao = TRUE;
815 1058 $situacao->aprovado = FALSE;
816 1059 break;
817 1060 }
... ... @@ -909,7 +1152,8 @@ class Avaliacao_Service_Boletim implements CoreExt_Configurable
909 1152 $this->hasRecuperacao()) {
910 1153 $situacao->componentesCurriculares[$id]->situacao = App_Model_MatriculaSituacao::EM_EXAME;
911 1154 }
912   - elseif ($etapa == 'Rc' && $media < $this->getRegra()->media) {
  1155 + elseif (($etapa == $this->getOption('etapas') || $etapa == 'Rc') &&
  1156 + $media < $this->getRegra()->media) {
913 1157 $situacao->componentesCurriculares[$id]->situacao = App_Model_MatriculaSituacao::REPROVADO;
914 1158 }
915 1159 elseif ($etapa == 'Rc' && $media >= $this->getRegra()->media && $this->hasRecuperacao()) {
... ... @@ -1007,6 +1251,9 @@ class Avaliacao_Service_Boletim implements CoreExt_Configurable
1007 1251 // Faltas
1008 1252 $faltasComponentes = array();
1009 1253  
  1254 + // Etapa padrão
  1255 + $etapa = 0;
  1256 +
1010 1257 // Faltas lançadas (persistidas)
1011 1258 $this->_loadFalta();
1012 1259  
... ... @@ -1026,6 +1273,7 @@ class Avaliacao_Service_Boletim implements CoreExt_Configurable
1026 1273 elseif ($presenca->tipoFalta == RegraAvaliacao_Model_TipoPresenca::POR_COMPONENTE) {
1027 1274 $faltas = $this->_faltasComponentes;
1028 1275 $total = 0;
  1276 + $etapasComponentes = array();
1029 1277 $faltasComponentes = array();
1030 1278  
1031 1279 foreach ($faltas as $key => $falta) {
... ... @@ -1033,11 +1281,14 @@ class Avaliacao_Service_Boletim implements CoreExt_Configurable
1033 1281 $componenteTotal = array_sum(CoreExt_Entity::entityFilterAttr($falta,
1034 1282 'id', 'quantidade'));
1035 1283  
1036   - // Pega o id de ComponenteCurricular_Model_Componente da primeira etapa do array
  1284 + // Pega o id de ComponenteCurricular_Model_Componente da última etapa do array
1037 1285 $componenteEtapa = array_pop($falta);
1038 1286 $id = $componenteEtapa->get('componenteCurricular');
1039 1287 $etapa = $componenteEtapa->etapa;
1040 1288  
  1289 + // Etapas lançadas
  1290 + $etapasComponentes[$etapa] = $etapa;
  1291 +
1041 1292 // Usa stdClass como interface de acesso
1042 1293 $faltasComponentes[$id] = new stdClass();
1043 1294 $faltasComponentes[$id]->situacao = App_Model_MatriculaSituacao::EM_ANDAMENTO;
... ... @@ -1064,13 +1315,17 @@ class Avaliacao_Service_Boletim implements CoreExt_Configurable
1064 1315 App_Model_MatriculaSituacao::APROVADO : App_Model_MatriculaSituacao::REPROVADO;
1065 1316 }
1066 1317  
1067   - if ($this->_situacaoPrioritaria($faltasComponentes[$id]->situacao, $situacaoGeral)) {
1068   - $situacaoGeral = $faltasComponentes[$id]->situacao;
1069   - }
1070   -
1071 1318 // Adiciona a quantidade de falta do componente ao total geral de faltas
1072 1319 $total += $componenteTotal;
1073 1320 }
  1321 +
  1322 + if (0 == count($faltasComponentes) ||
  1323 + count($faltasComponentes) != count($this->getComponentes())) {
  1324 + $etapa = 1;
  1325 + }
  1326 + else {
  1327 + $etapa = min($etapasComponentes);
  1328 + }
1074 1329 }
1075 1330  
1076 1331 // Total de faltas
... ... @@ -1091,7 +1346,7 @@ class Avaliacao_Service_Boletim implements CoreExt_Configurable
1091 1346  
1092 1347 // Situação geral. Última verificação pois somente ao fim é possível saber
1093 1348 // se está em andamento ou se pode estabelecer como aprovado ou reprovado
1094   - if ($etapa == $this->getOption('etapas') || $etapa == 'Rc') {
  1349 + if ($etapa == $this->getOption('etapas') || $etapa === 'Rc') {
1095 1350 $aprovado = ($presenca->porcentagemPresenca >= $this->getRegra()->porcentagemPresenca);
1096 1351 $presenca->situacao = $aprovado ?
1097 1352 App_Model_MatriculaSituacao::APROVADO :
... ... @@ -1270,7 +1525,7 @@ class Avaliacao_Service_Boletim implements CoreExt_Configurable
1270 1525 protected function _hasFaltaGeral()
1271 1526 {
1272 1527 $faltasGerais = $this->getFaltasGerais();
1273   - if (!isset($faltasGerais)) {
  1528 + if (0 == count($faltasGerais)) {
1274 1529 return FALSE;
1275 1530 }
1276 1531 return TRUE;
... ... @@ -1334,6 +1589,63 @@ class Avaliacao_Service_Boletim implements CoreExt_Configurable
1334 1589 }
1335 1590  
1336 1591 /**
  1592 + * Verifica se o aluno tem pareceres lançados.
  1593 + * @return bool
  1594 + */
  1595 + public function hasParecerDescritivoAluno()
  1596 + {
  1597 + if (!is_null($this->_getParecerDescritivoAluno())) {
  1598 + return TRUE;
  1599 + }
  1600 + return FALSE;
  1601 + }
  1602 +
  1603 + /**
  1604 + * Setter.
  1605 + * @param Avaliacao_Model_ParecerDescritivoAluno $parecerDescritivoAluno
  1606 + * @return Avaliacao_Service_Boletim Provê interface fluída
  1607 + */
  1608 + protected function _setParecerDescritivoAluno(Avaliacao_Model_ParecerDescritivoAluno $parecerDescritivoAluno)
  1609 + {
  1610 + $this->_parecerDescritivoAluno = $parecerDescritivoAluno;
  1611 + return $this;
  1612 + }
  1613 +
  1614 + /**
  1615 + * Getter.
  1616 + * @return Avaliacao_Model_ParecerDescritivoAluno|NULL
  1617 + */
  1618 + protected function _getParecerDescritivoAluno()
  1619 + {
  1620 + if (!is_null($this->_parecerDescritivoAluno)) {
  1621 + return $this->_parecerDescritivoAluno;
  1622 + }
  1623 +
  1624 + $parecerDescritivoAluno = $this->getParecerDescritivoAlunoDataMapper()->findAll(
  1625 + array(), array('matricula' => $this->getOption('matricula'))
  1626 + );
  1627 +
  1628 + if (0 == count($parecerDescritivoAluno)) {
  1629 + return NULL;
  1630 + }
  1631 +
  1632 + $this->_setParecerDescritivoAluno($parecerDescritivoAluno[0]);
  1633 + return $this->_parecerDescritivoAluno;
  1634 + }
  1635 +
  1636 + /**
  1637 + * Cria e persiste uma instância de Avaliacao_Model_ParecerDescritivoAluno.
  1638 + * @return bool
  1639 + */
  1640 + protected function _createParecerDescritivoAluno()
  1641 + {
  1642 + $parecerDescritivoAluno = new Avaliacao_Model_ParecerDescritivoAluno();
  1643 + $parecerDescritivoAluno->matricula = $this->getOption('matricula');
  1644 + $parecerDescritivoAluno->parecerDescritivo = $this->getRegra()->get('parecerDescritivo');
  1645 + return $this->getParecerDescritivoAlunoDataMapper()->save($parecerDescritivoAluno);
  1646 + }
  1647 +
  1648 + /**
1337 1649 * Adiciona um array de instâncias Avaliacao_Model_NotaComponente.
1338 1650 *
1339 1651 * @param array $notas
... ... @@ -1348,6 +1660,79 @@ class Avaliacao_Service_Boletim implements CoreExt_Configurable
1348 1660 }
1349 1661  
1350 1662 /**
  1663 + * Verifica se existe alguma instância de Avaliacao_Model_ParecerDescritivoComponente
  1664 + * persistida para o aluno.
  1665 + *
  1666 + * @param int $id Field identity de ComponenteCurricular_Model_Componente
  1667 + * @return bool
  1668 + */
  1669 + protected function _hasParecerComponente($id)
  1670 + {
  1671 + $pareceresComponentes = $this->getPareceresComponentes();
  1672 + if (!isset($pareceresComponentes[$id])) {
  1673 + return FALSE;
  1674 + }
  1675 + return TRUE;
  1676 + }
  1677 +
  1678 + /**
  1679 + * Verifica se existe alguma instância de Avaliacao_Model_ParecerDescritivoGeral
  1680 + * persistida para o aluno.
  1681 + * @return bool
  1682 + */
  1683 + protected function _hasParecerGeral()
  1684 + {
  1685 + if (0 == count($this->getPareceresGerais())) {
  1686 + return FALSE;
  1687 + }
  1688 + return TRUE;
  1689 + }
  1690 +
  1691 + /**
  1692 + * Verifica se existe alguma instância de Avaliacao_Model_ParecerDescritivoAbstract
  1693 + * persistida em uma determinada etapa e retorna o field identity.
  1694 + *
  1695 + * @param Avaliacao_Model_ParecerDescritivoAbstract $instance
  1696 + * @return int|NULL
  1697 + */
  1698 + protected function _getParecerIdEtapa(Avaliacao_Model_ParecerDescritivoAbstract $instance)
  1699 + {
  1700 + $gerais = array(
  1701 + RegraAvaliacao_Model_TipoParecerDescritivo::ANUAL_GERAL,
  1702 + RegraAvaliacao_Model_TipoParecerDescritivo::ETAPA_GERAL
  1703 + );
  1704 +
  1705 + $componentes = array(
  1706 + RegraAvaliacao_Model_TipoParecerDescritivo::ANUAL_COMPONENTE,
  1707 + RegraAvaliacao_Model_TipoParecerDescritivo::ETAPA_COMPONENTE
  1708 + );
  1709 +
  1710 + $parecerDescritivo = $this->getRegra()->get('parecerDescritivo');
  1711 +
  1712 + if (in_array($parecerDescritivo, $gerais)) {
  1713 + if (!$this->_hasParecerGeral()) {
  1714 + return NULL;
  1715 + }
  1716 +
  1717 + $pareceres = $this->getPareceresGerais();
  1718 + }
  1719 + elseif (in_array($parecerDescritivo, $componentes)) {
  1720 + if (!$this->_hasParecerComponente($instance->get('componenteCurricular'))) {
  1721 + return NULL;
  1722 + }
  1723 +
  1724 + $pareceres = $this->getPareceresComponentes();
  1725 + $pareceres = $pareceres[$instance->get('componenteCurricular')];
  1726 + }
  1727 +
  1728 + foreach ($pareceres as $parecer) {
  1729 + if ($instance->etapa == $parecer->etapa) {
  1730 + return $parecer->id;
  1731 + }
  1732 + }
  1733 + }
  1734 +
  1735 + /**
1351 1736 * Adiciona notas no boletim.
1352 1737 * @param Avaliacao_Model_NotaComponente $nota
1353 1738 * @return Avaliacao_Service_Boletim Provê interface fluída
... ... @@ -1414,19 +1799,65 @@ class Avaliacao_Service_Boletim implements CoreExt_Configurable
1414 1799 }
1415 1800  
1416 1801 /**
  1802 + * Adiciona uma array de instâncias de Avaliacao_Model_ParecerDescritivoAbstract
  1803 + * no boletim.
  1804 + *
  1805 + * @param array $pareceres
  1806 + * @return Avaliacao_Service_Boletim Provê interface fluída
  1807 + */
  1808 + public function addPareceres(array $pareceres)
  1809 + {
  1810 + foreach ($pareceres as $parecer) {
  1811 + $this->addParecer($parecer);
  1812 + }
  1813 + return $this;
  1814 + }
  1815 +
  1816 + /**
  1817 + * Adiciona uma instância de Avaliacao_Model_ParecerDescritivoAbstract no
  1818 + * boletim.
  1819 + *
  1820 + * @param Avaliacao_Model_ParecerDescritivoAbstract $parecer
  1821 + * @return Avaliacao_Service_Boletim Provê interface fluída
  1822 + */
  1823 + public function addParecer(Avaliacao_Model_ParecerDescritivoAbstract $parecer)
  1824 + {
  1825 + $key = 'p_' . spl_object_hash($parecer);
  1826 +
  1827 + $this->_pareceres[$key] = $parecer;
  1828 + $this->_updateParecerEtapa($parecer);
  1829 + $this->_addParecerValidators($parecer);
  1830 +
  1831 + return $this;
  1832 + }
  1833 +
  1834 + /**
  1835 + * Getter para as instâncias de Avaliacao_Model_ParecerDescritivoAbstract
  1836 + * adicionadas no boletim (não persistidas).
  1837 + *
  1838 + * @return array
  1839 + */
  1840 + public function getPareceres()
  1841 + {
  1842 + return $this->_pareceres;
  1843 + }
  1844 +
  1845 + /**
1417 1846 * Atualiza as opções de validação de uma instância de
1418 1847 * CoreExt_Validate_Validatable, com os valores permitidos para os atributos
1419 1848 * 'componenteCurricular' e 'etapa'.
1420 1849 *
1421 1850 * @param CoreExt_Validate_Validatable $nota
1422 1851 * @return CoreExt_Validate_Validatable
  1852 + * @todo Substituir variável estática por uma de instância {@see _updateParecerEtapa()}
1423 1853 */
1424 1854 protected function _addValidators(CoreExt_Validate_Validatable $validatable)
1425 1855 {
1426   - static $validators = NULL;
  1856 + $validators = array();
1427 1857  
1428 1858 // Como os componentes serão os mesmos, fazemos cache do validador
1429   - if (is_null($validators)) {
  1859 + if (is_null($this->_validators)) {
  1860 +
1430 1861 $componentes = $this->getComponentes();
1431 1862 $componentes = CoreExt_Entity::entityFilterAttr($componentes, 'id', 'id');
1432 1863  
... ... @@ -1442,9 +1873,13 @@ class Avaliacao_Service_Boletim implements CoreExt_Configurable
1442 1873 $validators['etapa'] = new CoreExt_Validate_Choice(
1443 1874 array('choices' => $etapas
1444 1875 ));
  1876 +
  1877 + $this->_validators = $validators;
1445 1878 }
1446 1879  
1447   - if (!($validatable instanceof Avaliacao_Model_FaltaGeral)) {
  1880 + $validators = $this->_validators;
  1881 +
  1882 + if ($this->getRegra()->get('tipoPresenca') == RegraAvaliacao_Model_TipoPresenca::POR_COMPONENTE) {
1448 1883 $validatable->setValidator('componenteCurricular', $validators['componenteCurricular']);
1449 1884 }
1450 1885 $validatable->setValidator('etapa', $validators['etapa']);
... ... @@ -1453,6 +1888,71 @@ class Avaliacao_Service_Boletim implements CoreExt_Configurable
1453 1888 }
1454 1889  
1455 1890 /**
  1891 + * Atualiza as opções de validação de uma instância de
  1892 + * Avaliacao_Model_ParecerDescritivoAbstract, com os valores permitidos
  1893 + * para os atributos 'componenteCurricular' e 'etapa'.
  1894 + *
  1895 + * @param Avaliacao_Model_ParecerDescritivoAbstract $instance
  1896 + * @return Avaliacao_Model_ParecerDescritivoAbstract
  1897 + */
  1898 + protected function _addParecerValidators(Avaliacao_Model_ParecerDescritivoAbstract $instance)
  1899 + {
  1900 + if (is_null($this->_parecerValidators)) {
  1901 + $validators = array();
  1902 +
  1903 + $anuais = array(
  1904 + RegraAvaliacao_Model_TipoParecerDescritivo::ANUAL_GERAL,
  1905 + RegraAvaliacao_Model_TipoParecerDescritivo::ANUAL_COMPONENTE
  1906 + );
  1907 +
  1908 + $etapas = array(
  1909 + RegraAvaliacao_Model_TipoParecerDescritivo::ETAPA_GERAL,
  1910 + RegraAvaliacao_Model_TipoParecerDescritivo::ETAPA_COMPONENTE
  1911 + );
  1912 +
  1913 + $parecerDescritivo = $this->getRegra()->get('parecerDescritivo');
  1914 +
  1915 + if (in_array($parecerDescritivo, $anuais)) {
  1916 + $validators['etapa'] = new CoreExt_Validate_Choice(array(
  1917 + 'choices' => array('An')
  1918 + ));
  1919 + }
  1920 + elseif (in_array($parecerDescritivo, $etapas)) {
  1921 + $etapas = $this->getOption('etapas');
  1922 + $etapas = array_merge(range(1, $etapas, 1), array('Rc'));
  1923 +
  1924 + $validators['etapa'] = new CoreExt_Validate_Choice(array(
  1925 + 'choices' => $etapas
  1926 + ));
  1927 + }
  1928 +
  1929 + if ($instance instanceof Avaliacao_Model_ParecerDescritivoComponente) {
  1930 + $componentes = $this->getComponentes();
  1931 + $componentes = CoreExt_Entity::entityFilterAttr($componentes, 'id', 'id');
  1932 +
  1933 + $validators['componenteCurricular'] = new CoreExt_Validate_Choice(array(
  1934 + 'choices' => $componentes
  1935 + ));
  1936 + }
  1937 +
  1938 + // Armazena os validadores na instância
  1939 + $this->_parecerValidators = $validators;
  1940 + }
  1941 +
  1942 + $validators = $this->_parecerValidators;
  1943 +
  1944 + // Etapas
  1945 + $instance->setValidator('etapa', $validators['etapa']);
  1946 +
  1947 + // Componentes curriculares
  1948 + if ($instance instanceof Avaliacao_Model_ParecerDescritivoComponente) {
  1949 + $instance->setValidator('componenteCurricular', $validators['componenteCurricular']);
  1950 + }
  1951 +
  1952 + return $instance;
  1953 + }
  1954 +
  1955 + /**
1456 1956 * Atualiza a etapa de uma instância de Avaliacao_Model_Etapa.
1457 1957 *
1458 1958 * @param Avaliacao_Model_Etapa $nota
... ... @@ -1505,17 +2005,91 @@ class Avaliacao_Service_Boletim implements CoreExt_Configurable
1505 2005 }
1506 2006  
1507 2007 /**
  2008 + * Atualiza a etapa de uma instância de Avaliacao_Model_ParecerDescritivoAbstract
  2009 + * para a última etapa possível.
  2010 + *
  2011 + * @param Avaliacao_Model_ParecerDescritivoAbstract $instance
  2012 + * @return Avaliacao_Model_ParecerDescritivoAbstract
  2013 + */
  2014 + protected function _updateParecerEtapa(Avaliacao_Model_ParecerDescritivoAbstract $instance)
  2015 + {
  2016 + if (!is_null($instance->etapa)) {
  2017 + return $instance;
  2018 + }
  2019 +
  2020 + $proximaEtapa = 1;
  2021 +
  2022 + $anuais = array(
  2023 + RegraAvaliacao_Model_TipoParecerDescritivo::ANUAL_GERAL,
  2024 + RegraAvaliacao_Model_TipoParecerDescritivo::ANUAL_COMPONENTE
  2025 + );
  2026 +
  2027 + $etapas = array(
  2028 + RegraAvaliacao_Model_TipoParecerDescritivo::ETAPA_GERAL,
  2029 + RegraAvaliacao_Model_TipoParecerDescritivo::ETAPA_COMPONENTE
  2030 + );
  2031 +
  2032 + $componentes = array(
  2033 + RegraAvaliacao_Model_TipoParecerDescritivo::ANUAL_COMPONENTE,
  2034 + RegraAvaliacao_Model_TipoParecerDescritivo::ETAPA_COMPONENTE
  2035 + );
  2036 +
  2037 + $gerais = array(
  2038 + RegraAvaliacao_Model_TipoParecerDescritivo::ANUAL_GERAL,
  2039 + RegraAvaliacao_Model_TipoParecerDescritivo::ETAPA_GERAL
  2040 + );
  2041 +
  2042 + $parecerDescritivo = $this->getRegra()->get('parecerDescritivo');
  2043 + if (in_array($parecerDescritivo, $anuais)) {
  2044 + $instance->etapa = 'An';
  2045 + return $instance;
  2046 + }
  2047 + elseif (in_array($parecerDescritivo, $etapas)) {
  2048 + $attrValues = array();
  2049 +
  2050 + if (in_array($parecerDescritivo, $gerais)) {
  2051 + $attrValues = $this->getPareceresGerais();
  2052 + }
  2053 + elseif (in_array($parecerDescritivo, $componentes)) {
  2054 + $pareceresComponentes = $this->getPareceresComponentes();
  2055 + if (isset($pareceresComponentes[$instance->get('componenteCurricular')])) {
  2056 + $attrValues = $pareceresComponentes[$instance->get('componenteCurricular')];
  2057 + }
  2058 + }
  2059 +
  2060 + if (0 < count($attrValues)) {
  2061 + $etapas = CoreExt_Entity::entityFilterAttr($attrValues, 'id', 'etapa');
  2062 + $proximaEtapa = max($etapas) + 1;
  2063 + }
  2064 + }
  2065 +
  2066 + if ($proximaEtapa <= $this->getOption('etapas')) {
  2067 + $instance->etapa = $proximaEtapa;
  2068 + }
  2069 + elseif ($this->hasRecuperacao()) {
  2070 + $instance->etapa = 'Rc';
  2071 + }
  2072 +
  2073 + return $instance;
  2074 + }
  2075 +
  2076 + /**
1508 2077 * Arredonda uma nota através da tabela de arredondamento da regra de avaliação.
1509 2078 * @param Avaliacao_Model_NotaComponente|int $nota
1510 2079 * @return mixed
  2080 + * @throws CoreExt_Exception_InvalidArgumentException
1511 2081 */
1512 2082 public function arredondaNota($nota)
1513 2083 {
1514 2084 if ($nota instanceof Avaliacao_Model_NotaComponente) {
1515 2085 $nota = $nota->nota;
1516 2086 }
1517   - elseif (!is_numeric($nota)) {
1518   - // @todo Exception?
  2087 +
  2088 + if (!is_numeric($nota)) {
  2089 + require_once 'CoreExt/Exception/InvalidArgumentException.php';
  2090 + throw new CoreExt_Exception_InvalidArgumentException(sprintf(
  2091 + 'O parâmetro $nota ("%s") não é um valor numérico.', $nota
  2092 + ));
1519 2093 }
1520 2094  
1521 2095 return $this->getRegra()->tabelaArredondamento->round($nota);
... ... @@ -1532,6 +2106,11 @@ class Avaliacao_Service_Boletim implements CoreExt_Configurable
1532 2106 {
1533 2107 $num1 = floatval($num1);
1534 2108 $num2 = floatval($num2);
  2109 +
  2110 + if ($num1 == 0) {
  2111 + return 0;
  2112 + }
  2113 +
1535 2114 $perc = $num2 / $num1;
1536 2115 return ($decimal == TRUE ? $perc : ($perc * 100));
1537 2116 }
... ... @@ -1569,6 +2148,7 @@ class Avaliacao_Service_Boletim implements CoreExt_Configurable
1569 2148 try {
1570 2149 $this->saveNotas()
1571 2150 ->saveFaltas()
  2151 + ->savePareceres()
1572 2152 ->promover();
1573 2153 }
1574 2154 catch (CoreExt_Service_Exception $e) {
... ... @@ -1582,7 +2162,6 @@ class Avaliacao_Service_Boletim implements CoreExt_Configurable
1582 2162 /**
1583 2163 * Insere ou atualiza as notas no boletim do aluno.
1584 2164 * @return Avaliacao_Service_Boletim Provê interface fluída
1585   - * @todo Criar teste para verificar se _getNotaIdEtapa retorna o esperado
1586 2165 */
1587 2166 public function saveNotas()
1588 2167 {
... ... @@ -1602,62 +2181,8 @@ class Avaliacao_Service_Boletim implements CoreExt_Configurable
1602 2181 }
1603 2182  
1604 2183 /**
1605   - * Atualiza a média dos componentes curriculares.
1606   - */
1607   - protected function _updateNotaComponenteMedia()
1608   - {
1609   - require_once 'Avaliacao/Model/NotaComponenteMedia.php';
1610   - $this->_loadNotaComponenteCurricular(FALSE);
1611   -
1612   - foreach ($this->_notasComponentes as $id => $notasComponentes) {
1613   - // Cria um array onde o índice é a etapa
1614   - $etapasNotas = CoreExt_Entity::entityFilterAttr($notasComponentes, 'etapa', 'nota');
1615   - $notas = array('Se' => 0, 'Et' => $this->getOption('etapas'));
1616   -
1617   - // Cria o array formatado para o cálculo da fórmula da média
1618   - foreach ($etapasNotas as $etapa => $nota) {
1619   - if (is_numeric($etapa)) {
1620   - $notas['E' . $etapa] = $nota;
1621   - $notas['Se'] += $nota;
1622   - continue;
1623   - }
1624   - $notas[$etapa] = $nota;
1625   - }
1626   -
1627   - // Calcula a média
1628   - $media = $this->_calculaMedia($notas);
1629   -
1630   - // Cria uma nova instância de média, já com a nota arredondada e a etapa
1631   - $notaComponenteCurricularMedia = new Avaliacao_Model_NotaComponenteMedia(array(
1632   - 'notaAluno' => $this->_getNotaAluno()->id,
1633   - 'componenteCurricular' => $id,
1634   - 'media' => $media,
1635   - 'mediaArredondada' => $this->arredondaNota($media),
1636   - 'etapa' => $etapa
1637   - ));
1638   -
1639   - try {
1640   - // Se existir, marca como "old" para possibilitar a atualização
1641   - $this->getNotaComponenteMediaDataMapper()->find(array(
1642   - $notaComponenteCurricularMedia->get('notaAluno'),
1643   - $notaComponenteCurricularMedia->get('componenteCurricular'),
1644   - ));
1645   -
1646   - $notaComponenteCurricularMedia->markOld();
1647   - }
1648   - catch (Exception $e) {
1649   - // Prossegue, sem problemas.
1650   - }
1651   -
1652   - // Salva a média
1653   - $this->getNotaComponenteMediaDataMapper()->save($notaComponenteCurricularMedia);
1654   - }
1655   - }
1656   -
1657   - /**
1658 2184 * Insere ou atualiza as faltas no boletim.
1659 2185 * @return Avaliacao_Service_Boletim Provê interface fluída
1660   - * @todo Criar teste para verificar se _getFaltaIdEtapa retorna o esperado
1661 2186 */
1662 2187 public function saveFaltas()
1663 2188 {
... ... @@ -1674,6 +2199,24 @@ class Avaliacao_Service_Boletim implements CoreExt_Configurable
1674 2199 }
1675 2200  
1676 2201 /**
  2202 + * Insere ou atualiza os pareceres no boletim.
  2203 + * @return Avaliacao_Service_Boletim Provê interface fluída
  2204 + */
  2205 + public function savePareceres()
  2206 + {
  2207 + $parecerAluno = $this->_getParecerDescritivoAluno();
  2208 + $pareceres = $this->getPareceres();
  2209 +
  2210 + foreach ($pareceres as $parecer) {
  2211 + $parecer->parecerDescritivoAluno = $parecerAluno->id;
  2212 + $parecer->id = $this->_getParecerIdEtapa($parecer);
  2213 + $this->getParecerDescritivoAbstractDataMapper()->save($parecer);
  2214 + }
  2215 +
  2216 + return $this;
  2217 + }
  2218 +
  2219 + /**
1677 2220 * Promove o aluno de etapa escolar caso esteja aprovado de acordo com o
1678 2221 * necessário estabelecido por tipoProgressao de
1679 2222 * RegraAvaliacao_Model_Regra.
... ... @@ -1729,6 +2272,59 @@ class Avaliacao_Service_Boletim implements CoreExt_Configurable
1729 2272 }
1730 2273  
1731 2274 /**
  2275 + * Atualiza a média dos componentes curriculares.
  2276 + */
  2277 + protected function _updateNotaComponenteMedia()
  2278 + {
  2279 + require_once 'Avaliacao/Model/NotaComponenteMedia.php';
  2280 + $this->_loadNotaComponenteCurricular(FALSE);
  2281 +
  2282 + foreach ($this->_notasComponentes as $id => $notasComponentes) {
  2283 + // Cria um array onde o índice é a etapa
  2284 + $etapasNotas = CoreExt_Entity::entityFilterAttr($notasComponentes, 'etapa', 'nota');
  2285 + $notas = array('Se' => 0, 'Et' => $this->getOption('etapas'));
  2286 +
  2287 + // Cria o array formatado para o cálculo da fórmula da média
  2288 + foreach ($etapasNotas as $etapa => $nota) {
  2289 + if (is_numeric($etapa)) {
  2290 + $notas['E' . $etapa] = $nota;
  2291 + $notas['Se'] += $nota;
  2292 + continue;
  2293 + }
  2294 + $notas[$etapa] = $nota;
  2295 + }
  2296 +
  2297 + // Calcula a média
  2298 + $media = $this->_calculaMedia($notas);
  2299 +
  2300 + // Cria uma nova instância de média, já com a nota arredondada e a etapa
  2301 + $notaComponenteCurricularMedia = new Avaliacao_Model_NotaComponenteMedia(array(
  2302 + 'notaAluno' => $this->_getNotaAluno()->id,
  2303 + 'componenteCurricular' => $id,
  2304 + 'media' => $media,
  2305 + 'mediaArredondada' => $this->arredondaNota($media),
  2306 + 'etapa' => $etapa
  2307 + ));
  2308 +
  2309 + try {
  2310 + // Se existir, marca como "old" para possibilitar a atualização
  2311 + $this->getNotaComponenteMediaDataMapper()->find(array(
  2312 + $notaComponenteCurricularMedia->get('notaAluno'),
  2313 + $notaComponenteCurricularMedia->get('componenteCurricular'),
  2314 + ));
  2315 +
  2316 + $notaComponenteCurricularMedia->markOld();
  2317 + }
  2318 + catch (Exception $e) {
  2319 + // Prossegue, sem problemas.
  2320 + }
  2321 +
  2322 + // Salva a média
  2323 + $this->getNotaComponenteMediaDataMapper()->save($notaComponenteCurricularMedia);
  2324 + }
  2325 + }
  2326 +
  2327 + /**
1732 2328 * Atualiza os dados da matrícula do aluno.
1733 2329 *
1734 2330 * @param int $matricula
... ...
ieducar/modules/Avaliacao/Views/BoletimController.php
... ... @@ -81,7 +81,7 @@ class BoletimController extends Core_Controller_Page_ViewController
81 81  
82 82 $this->_service = new Avaliacao_Service_Boletim(array(
83 83 'matricula' => $this->getRequest()->matricula,
84   - 'usuario' => $usuario
  84 + 'usuario' => $usuario
85 85 ));
86 86  
87 87 $this->_situacao = $this->_service->getSituacaoAluno();
... ... @@ -106,6 +106,30 @@ class BoletimController extends Core_Controller_Page_ViewController
106 106 }
107 107  
108 108 /**
  109 + * Verifica um array de situações de componentes curriculares e retorna TRUE
  110 + * quando ao menos um dos componentes estiver encerrado (aprovado ou reprovado).
  111 + *
  112 + * @param array $componentes
  113 + * @return bool
  114 + */
  115 + protected function _componenteEncerrado(array $componentes)
  116 + {
  117 + foreach ($componentes as $situacao) {
  118 + switch ($situacao->situacao) {
  119 + case App_Model_MatriculaSituacao::APROVADO:
  120 + case App_Model_MatriculaSituacao::APROVADO_APOS_EXAME:
  121 + case App_Model_MatriculaSituacao::REPROVADO:
  122 + return TRUE;
  123 + break;
  124 + default:
  125 + break;
  126 + }
  127 + }
  128 +
  129 + return FALSE;
  130 + }
  131 +
  132 + /**
109 133 * @see clsCadastro#Gerar()
110 134 */
111 135 public function Gerar()
... ... @@ -148,13 +172,13 @@ class BoletimController extends Core_Controller_Page_ViewController
148 172 $this->addDetalhe(array('Aluno', $nome));
149 173 $this->addDetalhe(array('Escola', $escola));
150 174 $this->addDetalhe(array('Curso', $curso));
151   - $this->addDetalhe(array('Série', $serie));
152   - $this->addDetalhe(array('Turma', $turma));
  175 + $this->addDetalhe(array('Série/Turma', $serie . ' / ' . $turma));
153 176 $this->addDetalhe(array('Situação', $situacao));
154 177  
155 178 // Dados da regra de avaliação
156 179 $this->addDetalhe(array('Regra avaliação', $this->_service->getRegra()));
157 180 $this->addDetalhe(array('Apuração de falta', $this->_service->getRegra()->tipoPresenca));
  181 + $this->addDetalhe(array('Parecer descritivo', $this->_service->getRegra()->parecerDescritivo));
158 182 $this->addDetalhe(array('Progressão', $this->_service->getRegra()->tipoProgressao));
159 183 $this->addDetalhe(array('Média', $this->_service->getRegra()->media));
160 184  
... ... @@ -199,11 +223,32 @@ class BoletimController extends Core_Controller_Page_ViewController
199 223 $labels[] = $data;
200 224 }
201 225  
202   - $colspan = $porComponente && $sit->recuperacao ? 4 : 3;
  226 + // Flag para auxiliar na composição da tabela em casos onde o parecer
  227 + // descritivo é lançado anualmente e por componente
  228 + $parecerComponenteAnual = FALSE;
  229 + $colspan = 0;
  230 +
  231 + if ($this->_service->getRegra()->get('parecerDescritivo') == RegraAvaliacao_Model_TipoParecerDescritivo::ANUAL_COMPONENTE) {
  232 + if (TRUE == $this->_componenteEncerrado($sit->nota->componentesCurriculares)) {
  233 + $parecerComponenteAnual = TRUE;
  234 + $colspan++;
  235 + }
  236 + }
  237 +
  238 + // Colspan para tabela com labels e sublabels
  239 + $colspan += $porComponente && $sit->recuperacao ? 4 : 3;
203 240 $labels[] = array('data' => $porComponente ? '' : 'Média final', 'attributes' => $attributes, 'colspan' => $porComponente ? $colspan : 1);
204 241  
205 242 // Inclui coluna para % de presença geral
206 243 if (!$porComponente) {
  244 + if ($sit->recuperacao) {
  245 + $labels[] = array('data' => 'Exame', 'attributes' => $attributes);
  246 + }
  247 +
  248 + if ($parecerComponenteAnual) {
  249 + $labels[] = array('data' => 'Parecer', 'attributes' => $attributes);
  250 + }
  251 +
207 252 $labels[] = array('data' => 'Presença', 'attributes' => $attributes);
208 253 $labels[] = array('data' => 'Situação', 'attributes' => $attributes);
209 254 }
... ... @@ -226,6 +271,10 @@ class BoletimController extends Core_Controller_Page_ViewController
226 271 }
227 272  
228 273 if ($porComponente) {
  274 + if ($parecerComponenteAnual) {
  275 + $subLabels[] = array('data' => 'Parecer', 'attributes' => $attributes);
  276 + }
  277 +
229 278 $subLabels[] = array('data' => 'Presença', 'attributes' => $attributes);
230 279 $subLabels[] = array('data' => 'Situação', 'attributes' => $attributes);
231 280 }
... ... @@ -268,6 +317,13 @@ class BoletimController extends Core_Controller_Page_ViewController
268 317 $medias = $mediasComponentes[$id];
269 318 $faltas = $faltasComponentes[$id];
270 319 $faltaStats = $faltasStats->componentesCurriculares[$id];
  320 + $parecer = NULL;
  321 +
  322 + // Caso os pareceres sejam por componente e anuais, recupera a instância
  323 + if ($parecerComponenteAnual) {
  324 + $parecer = $this->_service->getPareceresComponentes();
  325 + $parecer = $parecer[$id];
  326 + }
271 327  
272 328 if ($porComponente == TRUE) {
273 329 $new = $url->l('Lançar nota', 'nota',
... ... @@ -324,6 +380,7 @@ class BoletimController extends Core_Controller_Page_ViewController
324 380 }
325 381 }
326 382  
  383 + // Média no componente curricular
327 384 $media = $medias[0]->mediaArredondada . ($medias[0]->etapa == 'Rc' ? ' (Rc)' : '');
328 385 $data[] = array('data' => $media, 'attributes' => $attributes);
329 386  
... ... @@ -349,6 +406,36 @@ class BoletimController extends Core_Controller_Page_ViewController
349 406 }
350 407 }
351 408  
  409 + // Adiciona uma coluna extra caso o parecer seja por componente ao final do ano
  410 + if ($parecerComponenteAnual) {
  411 + $link = array(
  412 + 'text' => '',
  413 + 'path' => 'parecer',
  414 + 'query' => array('matricula' => $this->getRequest()->matricula)
  415 + );
  416 +
  417 + if (0 == count($parecer)) {
  418 + $text = 'Lançar';
  419 + }
  420 + else {
  421 + $text = 'Editar';
  422 + }
  423 +
  424 + $link['query']['componenteCurricular'] = $id;
  425 +
  426 + // @todo Constante ou CoreExt_Enum
  427 + $link['query']['etapa'] = 'An';
  428 +
  429 + $link = $url->l($text, $link['path'], array('query' => $link['query']));
  430 +
  431 + if (isset($mediaSituacao->situacao) && $mediaSituacao->situacao != App_Model_MatriculaSituacao::EM_ANDAMENTO) {
  432 + $data[] = array('data' => $link, 'attributes' => $attributes);
  433 + }
  434 + else {
  435 + $data[] = array('data' => '', 'attributes' => $attributes);
  436 + }
  437 + }
  438 +
352 439 // Informações extras como porcentagem de presença e situação do aluno
353 440 if ($porComponente) {
354 441 $data[] = array('data' => sprintf('%.2f%%', $faltaStats->porcentagemPresenca), 'attributes' => $attributes);
... ... @@ -406,21 +493,85 @@ class BoletimController extends Core_Controller_Page_ViewController
406 493 $data[] = array('data' => '', 'attributes' => $attributes);
407 494 }
408 495  
  496 + if ($parecerComponenteAnual) {
  497 + $data[] = array('data' => '', 'attributes' => $attributes);
  498 + }
  499 +
409 500 $data[] = array('data' => sprintf('%.2f%%', $faltasStats->porcentagemPresenca), 'attributes' => $attributes);
410 501 $data[] = array('data' => $situacao->getValue($sit->falta->situacao), 'attributes' => $attributes);
411 502  
412 503 $table->addFooterRow($data, $zebra[$class ^ 1]);
413 504  
  505 + // Adiciona linha com links para lançamento de parecer descritivo geral por etapa
  506 + if ($this->_service->getRegra()->get('parecerDescritivo') == RegraAvaliacao_Model_TipoParecerDescritivo::ETAPA_GERAL) {
  507 + $newLink = array(
  508 + 'text' => 'Lançar parecer',
  509 + 'path' => 'parecer',
  510 + 'query' => array('matricula' => $matricula['cod_matricula'])
  511 + );
  512 +
  513 + $data = array(0 => array('data' => 'Pareceres', 'attributes' => array('style' => 'padding: 5px; text-align: left')));
  514 + $pareceres = $this->_service->getPareceresGerais();
  515 +
  516 + for ($i = 1, $loop = count($etapas); $i <= $loop; $i++) {
  517 + if (isset($pareceres[$i])) {
  518 + $link = $newLink;
  519 + $link['text'] = 'Editar parecer';
  520 + $link['query']['etapa'] = $i;
  521 + $data[] = array('data' => $url->l($link['text'], $link['path'], array('query' => $link['query'])), 'attributes' => $attributes);
  522 + }
  523 + else {
  524 + if ('' == $newLink) {
  525 + $link = '';
  526 + }
  527 + else {
  528 + $link = $url->l($newLink['text'], $newLink['path'], array('query' => $newLink['query']));
  529 + }
  530 + $data[] = array('data' => $link, 'attributes' => $attributes);
  531 + $newLink = '';
  532 + }
  533 + }
  534 +
  535 + if ($sit->recuperacao) {
  536 + $data[] = array('data' => '', 'attributes' => $attributes);
  537 + }
  538 +
  539 + $data[] = array('data' => '', 'attributes' => $attributes);
  540 + $data[] = array('data' => '', 'attributes' => $attributes);
  541 +
  542 + $table->addFooterRow($data);
  543 + }
  544 +
414 545 // Adiciona tabela na página
415 546 $this->addDetalhe(array('Disciplinas', '<div id="disciplinas">' . $table . '</div>'));
416 547  
  548 + // Adiciona link para lançamento de parecer descritivo anual geral
  549 + if (
  550 + FALSE == $sit->andamento &&
  551 + $this->_service->getRegra()->get('parecerDescritivo') == RegraAvaliacao_Model_TipoParecerDescritivo::ANUAL_GERAL
  552 + ) {
  553 + if (0 == count($this->_service->getPareceresGerais())) {
  554 + $label = 'Lançar';
  555 + }
  556 + else {
  557 + $label = 'Editar';
  558 + }
  559 +
  560 + $link = array(
  561 + 'text' => $label . ' parecer descritivo do aluno',
  562 + 'path' => 'parecer',
  563 + 'query' => array('matricula' => $this->getRequest()->matricula)
  564 + );
  565 + $this->addDetalhe(array('Parecer descritivo anual', $url->l($link['text'], $link['path'], array('query' => $link['query']))));
  566 + }
  567 +
417 568 // Caso o tipo de progressão seja manual, a situação das notas/faltas não
418 569 // esteja mais em "andamento" e a matrícula esteja em andamento, exibe
419 570 // botões de ação
420 571 if (
421 572 $this->_service->getRegra()->get('tipoProgressao') ==
422 573 RegraAvaliacao_Model_TipoProgressao::NAO_CONTINUADA_MANUAL &&
423   - FALSE == $sit->andamento && $matricula['aprovado'] == 3
  574 + FALSE == $sit->andamento && $matricula['aprovado'] == App_Model_MatriculaSituacao::EM_ANDAMENTO
424 575 ) {
425 576 $link = array(
426 577 'text' => 'sim',
... ...
ieducar/modules/Avaliacao/Views/NotaController.php
... ... @@ -91,6 +91,11 @@ class NotaController extends Core_Controller_Page_EditController
91 91 protected $_falta = NULL;
92 92  
93 93 /**
  94 + * @var Avaliacao_Model_ParecerDescritivoAbstract
  95 + */
  96 + protected $_parecer = NULL;
  97 +
  98 + /**
94 99 * @see Core_Controller_Page_EditController#_preConstruct()
95 100 */
96 101 protected function _preConstruct()
... ... @@ -107,7 +112,7 @@ class NotaController extends Core_Controller_Page_EditController
107 112  
108 113 $this->_service = new Avaliacao_Service_Boletim(array(
109 114 'matricula' => $this->getRequest()->matricula,
110   - 'usuario' => $usuario
  115 + 'usuario' => $usuario
111 116 ));
112 117  
113 118 $this->_regra = $this->_service->getRegra();
... ... @@ -134,8 +139,9 @@ class NotaController extends Core_Controller_Page_EditController
134 139 */
135 140 protected function _initEditar()
136 141 {
137   - $this->_nota = $this->_service->getNotaComponente($this->_componenteCurricular, $this->_etapa);
138   - $this->_falta = $this->_service->getFalta($this->_componenteCurricular, $this->_etapa);
  142 + $this->_nota = $this->_service->getNotaComponente($this->_componenteCurricular, $this->_etapa);
  143 + $this->_falta = $this->_service->getFalta($this->_etapa, $this->_componenteCurricular);
  144 + $this->_parecer = $this->_service->getParecerDescritivo($this->_etapa, $this->_componenteCurricular);
139 145 return TRUE;
140 146 }
141 147  
... ... @@ -177,6 +183,11 @@ class NotaController extends Core_Controller_Page_EditController
177 183 if ($this->_regra->get('tipoPresenca') == RegraAvaliacao_Model_TipoPresenca::POR_COMPONENTE) {
178 184 $this->campoLista('falta', 'Falta', range(0, 100, 1), $this->_falta->quantidade);
179 185 }
  186 +
  187 + // Caso o parecer seja por etapa e por componente
  188 + if ($this->_regra->get('parecerDescritivo') == RegraAvaliacao_Model_TipoParecerDescritivo::ETAPA_COMPONENTE) {
  189 + $this->campoMemo('parecer', 'Parecer', $this->_parecer, 40, 10, TRUE);
  190 + }
180 191 }
181 192  
182 193 /**
... ... @@ -202,6 +213,15 @@ class NotaController extends Core_Controller_Page_EditController
202 213 $this->_service->addFalta($falta);
203 214 }
204 215  
  216 + if ($this->_regra->get('parecerDescritivo') == RegraAvaliacao_Model_TipoParecerDescritivo::ETAPA_COMPONENTE) {
  217 + $parecer = new Avaliacao_Model_ParecerDescritivoComponente(array(
  218 + 'componenteCurricular' => $this->getRequest()->componenteCurricular,
  219 + 'parecer' => $this->getRequest()->parecer,
  220 + 'etapa' => $this->getRequest()->etapa
  221 + ));
  222 + $this->_service->addParecer($parecer);
  223 + }
  224 +
205 225 try {
206 226 $this->_service->save();
207 227 }
... ...
ieducar/modules/Avaliacao/Views/ParecerController.php 0 → 100644
... ... @@ -0,0 +1,205 @@
  1 +<?php
  2 +
  3 +/**
  4 + * i-Educar - Sistema de gestão escolar
  5 + *
  6 + * Copyright (C) 2006 Prefeitura Municipal de Itajaí
  7 + * <ctima@itajai.sc.gov.br>
  8 + *
  9 + * Este programa é software livre; você pode redistribuí-lo e/ou modificá-lo
  10 + * sob os termos da Licença Pública Geral GNU conforme publicada pela Free
  11 + * Software Foundation; tanto a versão 2 da Licença, como (a seu critério)
  12 + * qualquer versão posterior.
  13 + *
  14 + * Este programa é distribuí­do na expectativa de que seja útil, porém, SEM
  15 + * NENHUMA GARANTIA; nem mesmo a garantia implí­cita de COMERCIABILIDADE OU
  16 + * ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA. Consulte a Licença Pública Geral
  17 + * do GNU para mais detalhes.
  18 + *
  19 + * Você deve ter recebido uma cópia da Licença Pública Geral do GNU junto
  20 + * com este programa; se não, escreva para a Free Software Foundation, Inc., no
  21 + * endereço 59 Temple Street, Suite 330, Boston, MA 02111-1307 USA.
  22 + *
  23 + * @author Eriksen Costa Paixão <eriksen.paixao_bs@cobra.com.br>
  24 + * @category i-Educar
  25 + * @license @@license@@
  26 + * @package Avaliacao
  27 + * @subpackage Modules
  28 + * @since Arquivo disponível desde a versão 1.1.0
  29 + * @version $Id$
  30 + */
  31 +
  32 +require_once 'Core/Controller/Page/EditController.php';
  33 +require_once 'Avaliacao/Model/ParecerDescritivoComponenteDataMapper.php';
  34 +require_once 'Avaliacao/Model/ParecerDescritivoGeralDataMapper.php';
  35 +require_once 'Avaliacao/Service/Boletim.php';
  36 +
  37 +/**
  38 + * ParecerController class.
  39 + *
  40 + * @author Eriksen Costa Paixão <eriksen.paixao_bs@cobra.com.br>
  41 + * @category i-Educar
  42 + * @license @@license@@
  43 + * @package Avaliacao
  44 + * @subpackage Modules
  45 + * @since Classe disponível desde a versão 1.1.0
  46 + * @version @@package_version@@
  47 + */
  48 +class ParecerController extends Core_Controller_Page_EditController
  49 +{
  50 + protected $_dataMapper = 'Avaliacao_Model_ParecerDescritivoGeralDataMapper';
  51 + protected $_titulo = 'Avaliação do aluno | Parecer Descritivo';
  52 + protected $_processoAp = 642;
  53 + protected $_nivelAcessoOption = App_Model_NivelAcesso::SOMENTE_ESCOLA;
  54 + protected $_saveOption = TRUE;
  55 + protected $_deleteOption = FALSE;
  56 +
  57 + /**
  58 + * @var Avaliacao_Service_Boletim
  59 + */
  60 + protected $_service = NULL;
  61 +
  62 + /**
  63 + * @var RegraAvaliacao_Model_Regra
  64 + */
  65 + protected $_regra = NULL;
  66 +
  67 + /**
  68 + * @var int
  69 + */
  70 + protected $_matricula = NULL;
  71 +
  72 + /**
  73 + * @var int
  74 + */
  75 + protected $_componenteCurricular = NULL;
  76 +
  77 + /**
  78 + * @var string
  79 + */
  80 + protected $_etapa = NULL;
  81 +
  82 + /**
  83 + * @var Avaliacao_Model_ParecerDescritivoAbstract
  84 + */
  85 + protected $_parecer = NULL;
  86 +
  87 + /**
  88 + * @see Core_Controller_Page_EditController#_preConstruct()
  89 + */
  90 + protected function _preConstruct()
  91 + {
  92 + // Id do usuário na session
  93 + $usuario = $this->getSession()->id_pessoa;
  94 +
  95 + $this->_options = array(
  96 + 'new_success' => 'boletim',
  97 + 'new_success_params' => array('matricula' => $this->getRequest()->matricula),
  98 + 'edit_success' => 'boletim',
  99 + 'edit_success_params' => array('matricula' => $this->getRequest()->matricula),
  100 + );
  101 +
  102 + $this->_service = new Avaliacao_Service_Boletim(array(
  103 + 'matricula' => $this->getRequest()->matricula,
  104 + 'usuario' => $usuario
  105 + ));
  106 +
  107 + $this->_regra = $this->_service->getRegra();
  108 + }
  109 +
  110 + /**
  111 + * @see Core_Controller_Page_EditController#_initNovo()
  112 + */
  113 + protected function _initNovo()
  114 + {
  115 + $this->_etapa = $this->getRequest()->etapa;
  116 + $this->_matricula = $this->getRequest()->matricula;
  117 + $this->_componenteCurricular = $this->getRequest()->componenteCurricular;
  118 +
  119 + if (isset($this->_etapa) && isset($this->_matricula)) {
  120 + return FALSE;
  121 + }
  122 +
  123 + if ($this->_regra->get('parecerDescritivo') == RegraAvaliacao_Model_TipoParecerDescritivo::ANUAL_COMPONENTE &&
  124 + !isset($this->_componenteCurricular)) {
  125 + return FALSE;
  126 + }
  127 +
  128 + return TRUE;
  129 + }
  130 +
  131 + /**
  132 + * @see Core_Controller_Page_EditController#_initEditar()
  133 + */
  134 + protected function _initEditar()
  135 + {
  136 + $this->_parecer = $this->_service->getParecerDescritivo($this->_etapa, $this->_componenteCurricular);
  137 + return TRUE;
  138 + }
  139 +
  140 + /**
  141 + * @see clsCadastro#Gerar()
  142 + */
  143 + public function Gerar()
  144 + {
  145 + $this->campoOculto('matricula', $this->_matricula);
  146 + $this->campoOculto('etapa', $this->_etapa);
  147 + $this->campoOculto('componenteCurricular', $this->_componenteCurricular);
  148 +
  149 + $matricula = $this->_service->getOption('matriculaData');
  150 +
  151 + $this->campoRotulo('1nome', 'Nome', $matricula['nome']);
  152 + $this->campoRotulo('2curso', 'Curso', $matricula['curso_nome']);
  153 + $this->campoRotulo('3serie', 'Série', $matricula['serie_nome']);
  154 +
  155 + if ($this->_regra->get('parecerDescritivo') == RegraAvaliacao_Model_TipoParecerDescritivo::ETAPA_GERAL) {
  156 + $this->campoRotulo('4etapa', 'Etapa', $this->_etapa == 'Rc' ? 'Recuperação' : $this->_etapa);
  157 + }
  158 + else {
  159 + $this->campoRotulo('4etapa', 'Etapa', 'Anual');
  160 + }
  161 +
  162 + if ($this->_componenteCurricular) {
  163 + $componentes = $this->_service->getComponentes();
  164 + $this->campoRotulo('5componente_curricular', 'Componente curricular', $componentes[$this->_componenteCurricular]);
  165 + }
  166 +
  167 + $this->campoMemo('parecer', 'Parecer', $this->_parecer, 40, 10, TRUE);
  168 + }
  169 +
  170 + /**
  171 + * @see Core_Controller_Page_EditController#_save()
  172 + */
  173 + protected function _save()
  174 + {
  175 + // Instancia o objeto correto e passa para o service
  176 + if ($this->_regra->get('parecerDescritivo') == RegraAvaliacao_Model_TipoParecerDescritivo::ANUAL_COMPONENTE) {
  177 + $parecer = new Avaliacao_Model_ParecerDescritivoComponente(array(
  178 + 'componenteCurricular' => $this->getRequest()->componenteCurricular,
  179 + 'parecer' => $this->getRequest()->parecer,
  180 + 'etapa' => $this->getRequest()->etapa
  181 + ));
  182 + }
  183 + else {
  184 + $parecer = new Avaliacao_Model_ParecerDescritivoGeral(array(
  185 + 'parecer' => $this->getRequest()->parecer,
  186 + 'etapa' => $this->getRequest()->etapa
  187 + ));
  188 + }
  189 +
  190 + $this->_service->addParecer($parecer);
  191 +
  192 + try {
  193 + $this->_service->save();
  194 + }
  195 + catch (CoreExt_Service_Exception $e) {
  196 + // Ok. Não pode promover por se tratar de progressão manual ou por estar em andamento
  197 + }
  198 + catch (Exception $e) {
  199 + $this->mensagem = 'Erro no preenchimento do formulário. ';
  200 + return FALSE;
  201 + }
  202 +
  203 + return TRUE;
  204 + }
  205 +}
0 206 \ No newline at end of file
... ...
ieducar/modules/Avaliacao/_tests/Boletim/Common.php
... ... @@ -1,387 +0,0 @@
1   -<?php
2   -
3   -/**
4   - * i-Educar - Sistema de gestão escolar
5   - *
6   - * Copyright (C) 2006 Prefeitura Municipal de Itajaí
7   - * <ctima@itajai.sc.gov.br>
8   - *
9   - * Este programa é software livre; você pode redistribuí-lo e/ou modificá-lo
10   - * sob os termos da Licença Pública Geral GNU conforme publicada pela Free
11   - * Software Foundation; tanto a versão 2 da Licença, como (a seu critério)
12   - * qualquer versão posterior.
13   - *
14   - * Este programa é distribuí­do na expectativa de que seja útil, porém, SEM
15   - * NENHUMA GARANTIA; nem mesmo a garantia implí­cita de COMERCIABILIDADE OU
16   - * ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA. Consulte a Licença Pública Geral
17   - * do GNU para mais detalhes.
18   - *
19   - * Você deve ter recebido uma cópia da Licença Pública Geral do GNU junto
20   - * com este programa; se não, escreva para a Free Software Foundation, Inc., no
21   - * endereço 59 Temple Street, Suite 330, Boston, MA 02111-1307 USA.
22   - *
23   - * @author Eriksen Costa Paixão <eriksen.paixao_bs@cobra.com.br>
24   - * @category i-Educar
25   - * @license @@license@@
26   - * @package Avaliacao
27   - * @subpackage UnitTests
28   - * @since Arquivo disponível desde a versão 1.1.0
29   - * @version $Id$
30   - */
31   -
32   -// Dependências do próprio módulo
33   -require_once 'Avaliacao/Service/Boletim.php';
34   -require_once 'Avaliacao/Model/NotaAlunoDataMapper.php';
35   -require_once 'Avaliacao/Model/NotaComponenteDataMapper.php';
36   -require_once 'Avaliacao/Model/NotaComponenteMediaDataMapper.php';
37   -require_once 'Avaliacao/Model/FaltaAlunoDataMapper.php';
38   -require_once 'Avaliacao/Model/FaltaComponenteDataMapper.php';
39   -
40   -// Dependência de outros módulos
41   -require_once 'AreaConhecimento/Model/AreaDataMapper.php';
42   -require_once 'ComponenteCurricular/Model/ComponenteDataMapper.php';
43   -require_once 'ComponenteCurricular/Model/AnoEscolarDataMapper.php';
44   -require_once 'FormulaMedia/Model/FormulaDataMapper.php';
45   -require_once 'TabelaArredondamento/Model/TabelaDataMapper.php';
46   -require_once 'TabelaArredondamento/Model/TabelaValorDataMapper.php';
47   -require_once 'RegraAvaliacao/Model/RegraDataMapper.php';
48   -
49   -// Dependência de classes do namespace Ied_Pmieducar
50   -require_once 'include/pmieducar/clsPmieducarSerie.inc.php';
51   -require_once 'include/pmieducar/clsPmieducarMatricula.inc.php';
52   -
53   -/**
54   - * BoletimTest class.
55   - *
56   - * Testa a API do service Avaliacao_Service_Boletim. Cria uma interface para
57   - * a configuração de uma instância de RegraAvaliacao_Model_Regra, com o qual
58   - * o service é bastante dependente.
59   - *
60   - * @author Eriksen Costa Paixão <eriksen.paixao_bs@cobra.com.br>
61   - * @category i-Educar
62   - * @license @@license@@
63   - * @package Avaliacao
64   - * @subpackage UnitTests
65   - * @since Classe disponível desde a versão 1.1.0
66   - * @todo Todos os getters de DataMapper precisam de um teste para
67   - * verificar se de fato retornam uma instância padrão
68   - * @version @@package_version@@
69   - */
70   -abstract class Boletim_Common extends UnitBaseTest
71   -{
72   - /**
73   - * @var Avaliacao_Service_Boletim
74   - */
75   - protected $_service = NULL;
76   -
77   - /**
78   - * @var Avaliacao_Model_NotaAluno
79   - */
80   - protected $_notaAlunoExpected = NULL;
81   -
82   - /**
83   - * @var Avaliacao_Model_FaltaAluno
84   - */
85   - protected $_faltaAlunoExpected = NULL;
86   -
87   - /**
88   - * @var ComponenteCurricular_Model_ComponenteDataMapper
89   - */
90   - protected $_componenteDataMapperMock = NULL;
91   -
92   - /**
93   - * Configura todos os mocks de depenência de Avaliacao_Service_Boletim
94   - */
95   - protected function setUp()
96   - {
97   - $this->_setUpLegacyMock();
98   -
99   - // Instancia a classe Service
100   - $this->_service = new Avaliacao_Service_Boletim(array(
101   - 'matricula' => 1,
102   - 'usuario' => 1,
103   - 'RegraDataMapper' => $this->_setUpRegraAvaliacao(),
104   - 'ComponenteDataMapper' => $this->_componenteDataMapperMock,
105   - 'NotaAlunoDataMapper' => $this->_setUpNotaAlunoDataMapper(),
106   - 'NotaComponenteDataMapper' => $this->_setUpNotaComponenteDataMapper(),
107   - 'NotaComponenteMediaDataMapper' => $this->_setUpNotaComponenteMediaDataMapper(),
108   - 'FaltaAlunoDataMapper' => $this->_setUpFaltaAlunoDataMapperMock(),
109   - 'FaltaAbstractDataMapper' => $this->_setUpFaltaAbstractDataMapperMock(),
110   - ));
111   - }
112   -
113   - /**
114   - * Configura um mock de RegraAvaliacao_Model_Regra.
115   - * @return RegraAvaliacao_Model_Regra
116   - */
117   - protected abstract function _setUpRegraAvaliacao();
118   -
119   - /**
120   - * Configura um mock de Avaliacao_Model_NotaAlunoDataMapper.
121   - *
122   - * @return Avaliacao_Model_NotaAlunoDataMapper
123   - */
124   - protected abstract function _setUpNotaAlunoDataMapper();
125   -
126   - /**
127   - * Configura uma instância de Avaliacao_Model_NotaAluno e guarda no atributo
128   - * $_notaAlunoExpected.
129   - */
130   - protected abstract function _setUpNotaAluno();
131   -
132   - /**
133   - * Configura um mock de Avaliacao_Model_NotaComponenteDataMapper.
134   - * @return Avaliacao_Model_NotaComponenteDataMapper
135   - */
136   - protected abstract function _setUpNotaComponenteDataMapper();
137   -
138   - /**
139   - * Configura um mock de Avaliacao_Model_NotaMediaComponenteDataMapper.
140   - * @return Avaliacao_Model_NotaComponenteMediaDataMapper
141   - */
142   - protected abstract function _setUpNotaComponenteMediaDataMapper();
143   -
144   - /**
145   - * Configura um mock de Avaliacao_Model_FaltaAlunoDataMapper e guarda uma
146   - * instância (a que for salva pelo mock) no atributo $_faltaAlunoExpected.
147   - *
148   - * @return Avaliacao_Model_FaltaAlunoDataMapper
149   - */
150   - protected abstract function _setUpFaltaAlunoDataMapperMock();
151   -
152   - protected abstract function _setUpFaltaAluno();
153   -
154   - /**
155   - * Configura um mock de Avaliacao_Model_FataAbstractDataMapper (Componente
156   - * ou Geral).
157   - *
158   - * @return unknown_type
159   - */
160   - protected abstract function _setUpFaltaAbstractDataMapperMock();
161   -
162   - /**
163   - * Configura mocks para as classes legadas (Ied_*).
164   - */
165   - protected function _setUpLegacyMock()
166   - {
167   - $this->_configuraDadosMatricula()
168   - ->_configuraDadosDisciplina()
169   - ->_configuraDadosEtapasCursadas();
170   - }
171   -
172   - protected function _configuraDadosMatricula()
173   - {
174   - // Retorna para matrícula
175   - $returnMatricula = array(
176   - 'cod_matricula' => 1,
177   - 'ref_ref_cod_escola' => 1,
178   - 'ref_ref_cod_serie' => 1,
179   - 'ref_cod_curso' => 1,
180   - 'aprovado' => 1,
181   - 'curso_carga_horaria' => (800 * 9),
182   - 'curso_hora_falta' => (50 /60),
183   - 'serie_carga_horaria' => 800
184   - );
185   -
186   - // Mock para clsPmieducarMatricula
187   - $matriculaMock = $this->getCleanMock('clsPmieducarMatricula');
188   - $matriculaMock->expects($this->any())
189   - ->method('detalhe')
190   - ->will($this->returnValue($returnMatricula));
191   -
192   - // Registra a instância no repositório de classes de CoreExt_Entity
193   - CoreExt_Entity::addClassToStorage('clsPmieducarMatricula',
194   - $matriculaMock, NULL, TRUE
195   - );
196   -
197   - // Retorno para clsPmieducarSerie
198   - $returnSerie = array(
199   - 'cod_serie' => 1,
200   - 'regra_avaliacao_id' => 1,
201   - 'carga_horaria' => 800
202   - );
203   -
204   - // Mock para clsPmieducarMatricula
205   - $serieMock = $this->getCleanMock('clsPmieducarSerie');
206   - $serieMock->expects($this->any())
207   - ->method('detalhe')
208   - ->will($this->returnValue($returnSerie));
209   -
210   - // Registra a instância no repositório de classes de CoreExt_Entity
211   - CoreExt_Entity::addClassToStorage('clsPmieducarSerie',
212   - $serieMock, NULL, TRUE
213   - );
214   -
215   -
216   - // Retorno para clsPmieducarCurso
217   - $returnCurso = array(
218   - 'cod_curso' => 1,
219   - 'carga_horaria' => (800 * 9),
220   - 'hora_falta' => (50 / 60),
221   - 'padrao_ano_escolar' => 1
222   - );
223   -
224   - // Mock para clsPmieducarCurso
225   - $cursoMock = $this->getCleanMock('clsPmieducarCurso');
226   - $cursoMock->expects($this->any())
227   - ->method('detalhe')
228   - ->will($this->returnValue($returnCurso));
229   -
230   - // Registra a instância no repositório de classes de CoreExt_Entity
231   - CoreExt_Entity::addClassToStorage('clsPmieducarCurso',
232   - $cursoMock, NULL, TRUE
233   - );
234   -
235   - return $this;
236   - }
237   -
238   - protected function _configuraDadosDisciplina()
239   - {
240   - $componentes = array(
241   - new ComponenteCurricular_Model_Componente(
242   - array('id' => 1, 'nome' => 'Matemática', 'cargaHoraria' => 100)
243   - ),
244   - new ComponenteCurricular_Model_Componente(
245   - array('id' => 2, 'nome' => 'Português', 'cargaHoraria' => 100)
246   - ),
247   - new ComponenteCurricular_Model_Componente(
248   - array('id' => 3, 'nome' => 'Ciências', 'cargaHoraria' => 60)
249   - ),
250   - new ComponenteCurricular_Model_Componente(
251   - array('id' => 4, 'nome' => 'Física', 'cargaHoraria' => 60)
252   - )
253   - );
254   -
255   - $expected = array(
256   - $componentes[0],
257   - $componentes[2]
258   - );
259   -
260   - // Retorna para clsPmieducarEscolaSerieDisciplina
261   - $returnEscolaSerieDisciplina = array(
262   - array('ref_cod_serie' => 1, 'ref_cod_disciplina' => 1, 'carga_horaria' => 100),
263   - array('ref_cod_serie' => 1, 'ref_cod_disciplina' => 2, 'carga_horaria' => 100),
264   - array('ref_cod_serie' => 1, 'ref_cod_disciplina' => 3, 'carga_horaria' => 70),
265   - array('ref_cod_serie' => 1, 'ref_cod_disciplina' => 4, 'carga_horaria' => 100),
266   - );
267   -
268   - // Mock para clsPmieducarEscolaSerieDisciplina
269   - $escolaMock = $this->getCleanMock('clsPmieducarEscolaSerieDisciplina');
270   - $escolaMock->expects($this->any())
271   - ->method('lista')
272   - ->will($this->returnValue($returnEscolaSerieDisciplina));
273   -
274   - // Retorna para clsPmieducarDispensaDisciplina
275   - $returnDispensa = array(
276   - array('ref_cod_matricula' => 1, 'ref_cod_disciplina' => 2),
277   - array('ref_cod_matricula' => 1, 'ref_cod_disciplina' => 4),
278   - );
279   -
280   - // Mock para clsPmieducarDispensaDisciplina
281   - $dispensaMock = $this->getCleanMock('clsPmieducarDispensaDisciplina');
282   - $dispensaMock->expects($this->any())
283   - ->method('lista')
284   - ->with(1, 1, 1)
285   - ->will($this->returnValue($returnDispensa));
286   -
287   - // Mock para ComponenteCurricular_Model_ComponenteDataMapper
288   - $mapperMock = $this->getCleanMock('ComponenteCurricular_Model_ComponenteDataMapper');
289   - $mapperMock->expects($this->any())
290   - ->method('findComponenteCurricularAnoEscolar')
291   - ->will($this->onConsecutiveCalls($expected[0], $expected[1]));
292   -
293   - // Guarda na instância, usado em setUp()
294   - $this->_componenteDataMapperMock = $mapperMock;
295   -
296   - // Registra mocks
297   - CoreExt_Entity::addClassToStorage('clsPmieducarEscolaSerieDisciplina',
298   - $escolaMock, NULL, TRUE);
299   - CoreExt_Entity::addClassToStorage('clsPmieducarDispensaDisciplina',
300   - $dispensaMock, NULL, TRUE);
301   -
302   - return $this;
303   - }
304   -
305   - /**
306   - * É dependente do mock de clsPmieducarCurso de _configuraDadosMatricula
307   - * (padrao_ano_escolar).
308   - */
309   - protected function _configuraDadosEtapasCursadas()
310   - {
311   - $returnEscolaAno = array(
312   - array('ref_cod_escola' => 1, 'ano' => 2009, 'andamento' => 1, 'ativo' => 1)
313   - );
314   -
315   - $returnAnoLetivo = array(
316   - array('ref_ano' => 2009, 'ref_ref_cod_escola' => 1, 'sequencial' => 1),
317   - array('ref_ano' => 2009, 'ref_ref_cod_escola' => 1, 'sequencial' => 2),
318   - array('ref_ano' => 2009, 'ref_ref_cod_escola' => 1, 'sequencial' => 3),
319   - array('ref_ano' => 2009, 'ref_ref_cod_escola' => 1, 'sequencial' => 4)
320   - );
321   -
322   - // Mock para escola ano letivo (ano letivo em andamento)
323   - $escolaAnoMock = $this->getCleanMock('clsPmieducarEscolaAnoLetivo');
324   - $escolaAnoMock->expects($this->any())
325   - ->method('lista')
326   - ->with(1, NULL, NULL, NULL, 1, NULL, NULL, NULL, NULL, 1)
327   - ->will($this->returnValue($returnEscolaAno));
328   -
329   - // Mock para o ano letivo (módulos do ano)
330   - $anoLetivoMock = $this->getCleanMock('clsPmieducarAnoLetivoModulo');
331   - $anoLetivoMock->expects($this->any())
332   - ->method('lista')
333   - ->with(2009, 1)
334   - ->will($this->returnValue($returnAnoLetivo));
335   -
336   - // Adiciona mocks ao repositório estático
337   - CoreExt_Entity::addClassToStorage('clsPmieducarEscolaAnoLetivo',
338   - $escolaAnoMock, NULL, TRUE);
339   - CoreExt_Entity::addClassToStorage('clsPmieducarAnoLetivoModulo',
340   - $anoLetivoMock, NULL, TRUE);
341   -
342   - return $this;
343   - }
344   -
345   - /**
346   - * @todo Refatorar método para uma classe stub, no diretório do módulo
347   - * TabelaArredondamento
348   - * @todo Está copiado em tests/Unit/App/Model/IedFinderTest.php
349   - */
350   - protected function _getTabelaArredondamentoNumerica()
351   - {
352   - $data = array(
353   - 'tabelaArredondamento' => 1,
354   - 'nome' => NULL,
355   - 'descricao' => NULL,
356   - 'valorMinimo' => -1,
357   - 'valorMaximo' => 0
358   - );
359   -
360   - $tabelaValores = array();
361   -
362   - for ($i = 0; $i <= 10; $i++) {
363   - $data['nome'] = $i;
364   - $data['valorMinimo'] += 1;
365   - $data['valorMaximo'] += 1;
366   -
367   - if ($i == 10) {
368   - $data['valorMinimo'] = 9;
369   - $data['valorMaximo'] = 10;
370   - }
371   -
372   - $tabelaValores[$i] = new TabelaArredondamento_Model_TabelaValor($data);
373   - }
374   -
375   - $mapperMock = $this->getCleanMock('TabelaArredondamento_Model_TabelaValorDataMapper');
376   - $mapperMock->expects($this->any())
377   - ->method('findAll')
378   - ->will($this->returnValue($tabelaValores));
379   -
380   - $tabelaDataMapper = new TabelaArredondamento_Model_TabelaDataMapper();
381   - $tabelaDataMapper->setTabelaValorDataMapper($mapperMock);
382   -
383   - $tabela = new TabelaArredondamento_Model_Tabela(array('nome' => 'Numéricas'));
384   - $tabela->setDataMapper($tabelaDataMapper);
385   - return $tabela;
386   - }
387   -}
388 0 \ No newline at end of file
ieducar/modules/Avaliacao/_tests/Boletim/NotaNumerica_FaltaComponenteTest.php
... ... @@ -1,1192 +0,0 @@
1   -<?php
2   -
3   -/**
4   - * i-Educar - Sistema de gestão escolar
5   - *
6   - * Copyright (C) 2006 Prefeitura Municipal de Itajaí
7   - * <ctima@itajai.sc.gov.br>
8   - *
9   - * Este programa é software livre; você pode redistribuí-lo e/ou modificá-lo
10   - * sob os termos da Licença Pública Geral GNU conforme publicada pela Free
11   - * Software Foundation; tanto a versão 2 da Licença, como (a seu critério)
12   - * qualquer versão posterior.
13   - *
14   - * Este programa é distribuí­do na expectativa de que seja útil, porém, SEM
15   - * NENHUMA GARANTIA; nem mesmo a garantia implí­cita de COMERCIABILIDADE OU
16   - * ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA. Consulte a Licença Pública Geral
17   - * do GNU para mais detalhes.
18   - *
19   - * Você deve ter recebido uma cópia da Licença Pública Geral do GNU junto
20   - * com este programa; se não, escreva para a Free Software Foundation, Inc., no
21   - * endereço 59 Temple Street, Suite 330, Boston, MA 02111-1307 USA.
22   - *
23   - * @author Eriksen Costa Paixão <eriksen.paixao_bs@cobra.com.br>
24   - * @category i-Educar
25   - * @license @@license@@
26   - * @package Avaliacao
27   - * @subpackage UnitTests
28   - * @since Arquivo disponível desde a versão 1.1.0
29   - * @version $Id$
30   - */
31   -
32   -require_once 'Avaliacao/_tests/Boletim/Common.php';
33   -
34   -/**
35   - * NotaNumerica_FaltaComponente class.
36   - *
37   - * Configura mocks para todas as dependências de Avaliacao_Service_Boletim.
38   - *
39   - * A configuração é baseada nos mocks criados para para App_Model_IedFinder,
40   - * onde é retornado os componentes curriculares 1 (matemática) e 3 (ciências),
41   - * já que o aluno estaria dispensado dos outros dois componentes.
42   - *
43   - * - RegraAvaliacao_Model_Regra: nota numérica, progressiva, falta
44   - * contabilizada por componente curricular, média 6, tabela de arredondamento,
45   - * fórmula de média (aritmética simples)
46   - *
47   - * - FormulaMedia_Model_Formula: aritmética simples (Se / Et)
48   - *
49   - * - ComponenteCurricular_Model_ComponenteDataMapper: retorna componentes
50   - * em que o aluno estaria cursando, conforme retornado por
51   - * App_Model_IedFinder::getComponentesPorMatricula
52   - *
53   - * - Avaliacao_Model_NotaAlunoDataMapper: retorna uma instância de
54   - * Avaliacao_Model_NotaAluno, para testar inicialização do service
55   - *
56   - * - Avaliacao_Model_NotaComponenteDataMapper: retorna uma instância de
57   - * Avaliacao_Model_NotaComponente, para testar inicialização do service
58   - *
59   - * - Avaliacao_Model_FaltaAlunoDataMapper: retorna uma instância de
60   - * Avaliacao_Model_FaltaAluno, para testar inicialização do service
61   - *
62   - * - Avaliacao_Model_FaltaAbstractDataMapper: retorna uma instância de
63   - * Avaliacao_Model_FaltaComponente, para testa inicialização do service
64   - * e casos para o qual a regra de avaliação registre faltas por componentes
65   - * curriculares
66   - *
67   - * @author Eriksen Costa Paixão <eriksen.paixao_bs@cobra.com.br>
68   - * @category i-Educar
69   - * @license @@license@@
70   - * @package Avaliacao
71   - * @subpackage UnitTests
72   - * @since Classe disponível desde a versão 1.1.0
73   - * @version @@package_version@@
74   - */
75   -class Boletim_NotaNumerica_FaltaComponenteTest extends Boletim_Common
76   -{
77   - /**
78   - * @see Boletim_Common#_setUpRegraAvaliacao()
79   - */
80   - protected function _setUpRegraAvaliacao()
81   - {
82   - $formulaMedia = new FormulaMedia_Model_Formula(array(
83   - 'id' => 1,
84   - 'nome' => 'Média aritmética',
85   - 'formulaMedia' => 'Se / Et'
86   - ));
87   -
88   - $formulaRecuperacao = new FormulaMedia_Model_Formula(array(
89   - 'id' => 2,
90   - 'nome' => 'Média Ponderada',
91   - 'formulaMedia' => 'Rc * 0.4 + Se / Et * 0.6'
92   - ));
93   -
94   - // Retorno para mock RegraAvaliacao
95   - $expected = new RegraAvaliacao_Model_Regra(array(
96   - 'id' => 1,
97   - 'nome' => 'Regra geral',
98   - 'tipoNota' => RegraAvaliacao_Model_Nota_TipoValor::NUMERICA,
99   - 'tipoProgressao' => RegraAvaliacao_Model_TipoProgressao::CONTINUADA,
100   - 'tipoPresenca' => RegraAvaliacao_Model_TipoPresenca::POR_COMPONENTE,
101   - 'media' => 6,
102   - 'tabelaArredondamento' => $this->_getTabelaArredondamentoNumerica(),
103   - 'formulaMedia' => $formulaMedia,
104   - 'formulaRecuperacao' => $formulaRecuperacao,
105   - 'porcentagemPresenca' => 75
106   - ));
107   -
108   - $regraMock = $this->getCleanMock('RegraAvaliacao_Model_RegraDataMapper');
109   - $regraMock->expects($this->once())
110   - ->method('find')
111   - ->with(1)
112   - ->will($this->returnValue($expected));
113   -
114   - return $regraMock;
115   - }
116   -
117   - /**
118   - * @see Boletim_Common#_setUpNotaAlunoDataMapper()
119   - */
120   - protected function _setUpNotaAlunoDataMapper()
121   - {
122   - $notaAluno = $this->_setUpNotaAluno();
123   -
124   - // Configura expectativas do mock de NotaAluno, que irá retornar vazio
125   - // (aluno ainda não possui notas lançadas)
126   - $notaAlunoMock = $this->getCleanMock('Avaliacao_Model_NotaAlunoDataMapper');
127   - $notaAlunoMock->expects($this->any())
128   - ->method('findAll')
129   - ->with(array(), array('matricula' => 1))
130   - ->will($this->onConsecutiveCalls(array(), array($notaAluno)));
131   -
132   - $notaAlunoMock->expects($this->any())
133   - ->method('save')
134   - ->will($this->returnValue(TRUE));
135   -
136   - return $notaAlunoMock;
137   - }
138   -
139   - protected function _setUpNotaAluno()
140   - {
141   - $notaAluno = new Avaliacao_Model_NotaAluno(array('id' => 1, 'matricula' => 1));
142   -
143   - // Guarda na instância
144   - $this->_notaAlunoExpected = $notaAluno;
145   -
146   - return $notaAluno;
147   - }
148   -
149   - /**
150   - * @see Boletim_Common#_setUpNotaComponenteDataMapper()
151   - */
152   - protected function _setUpNotaComponenteDataMapper()
153   - {
154   - $notaComponente = array(new Avaliacao_Model_NotaComponente(array(
155   - 'id' => 1,
156   - 'notaAluno' => 1,
157   - 'componenteCurricular' => 1,
158   - 'nota' => 7.5,
159   - 'notaArredondada' => 7,
160   - 'etapa' => 2
161   - )));
162   -
163   - $notaComponenteMock = $this->getCleanMock('Avaliacao_Model_NotaComponenteDataMapper');
164   - $notaComponenteMock->expects($this->at(0))
165   - ->method('findAll')
166   - ->with(array(), array('notaAluno' => 1))
167   - ->will($this->returnValue($notaComponente));
168   -
169   - return $notaComponenteMock;
170   - }
171   -
172   - /**
173   - * @see Boletim_Common#_setUpNotaComponenteMediaDataMapper()
174   - */
175   - protected function _setUpNotaComponenteMediaDataMapper()
176   - {
177   - $notaComponenteMedia = array(new Avaliacao_Model_NotaComponenteMedia(array(
178   - 'id' => 1,
179   - 'notaAluno' => 1,
180   - 'componenteCurricular' => 1,
181   - 'media' => (7.5 + 6.5) / 4,
182   - 'mediaArredondada' => 3.5,
183   - 'etapa' => 2
184   - )));
185   -
186   - $mock = $this->getCleanMock('Avaliacao_Model_NotaComponenteMediaDataMapper');
187   - $mock->expects($this->once())
188   - ->method('findAll')
189   - ->with(array(), array('notaAluno' => 1))
190   - ->will($this->returnValue($notaComponenteMedia));
191   -
192   - return $mock;
193   - }
194   -
195   - /**
196   - * @see Boletim_Common#_setUpFaltaAlunoDataMapperMock()
197   - */
198   - protected function _setUpFaltaAlunoDataMapperMock()
199   - {
200   - $faltaAluno = $this->_setUpFaltaAluno();
201   -
202   - $faltaAlunoMock = $this->getCleanMock('Avaliacao_Model_FaltaAlunoDataMapper');
203   - $faltaAlunoMock->expects($this->any())
204   - ->method('findAll')
205   - ->with(array(), array('matricula' => 1))
206   - ->will($this->onConsecutiveCalls(array(), array($faltaAluno)));
207   -
208   - $faltaAlunoMock->expects($this->any())
209   - ->method('save')
210   - ->will($this->returnValue(TRUE));
211   -
212   - return $faltaAlunoMock;
213   - }
214   -
215   - /**
216   - * @see Boletim_Common#_setUpFaltaAluno()
217   - */
218   - protected function _setUpFaltaAluno()
219   - {
220   - $faltaAluno = new Avaliacao_Model_FaltaAluno(array(
221   - 'id' => 1,
222   - 'matricula' => 1,
223   - 'tipoFalta' => RegraAvaliacao_Model_TipoPresenca::POR_COMPONENTE
224   - ));
225   -
226   - // Guarda na instância
227   - $this->_faltaAlunoExpected = $faltaAluno;
228   -
229   - return $faltaAluno;
230   - }
231   -
232   - /**
233   - * @see Boletim_Common#_setUpFaltaAbstractDataMapperMock()
234   - */
235   - protected function _setUpFaltaAbstractDataMapperMock()
236   - {
237   - // Retorno para mock de falta componentes
238   - $faltaComponente = array(new Avaliacao_Model_FaltaComponente(array(
239   - 'id' => 1,
240   - 'faltaAluno' => 1,
241   - 'componenteCurricular' => 1,
242   - 'quantidade' => 4,
243   - 'etapa' => 2
244   - )));
245   -
246   - // Configura expectativas do mock
247   - $faltaComponenteMock = $this->getCleanMock('Avaliacao_Model_FaltaComponenteDataMapper');
248   - $faltaComponenteMock->expects($this->at(0))
249   - ->method('findAll')
250   - ->with(array(), array('faltaAluno' => 1))
251   - ->will($this->returnValue($faltaComponente));
252   -
253   - return $faltaComponenteMock;
254   - }
255   -
256   - /**
257   - * @expectedException CoreExt_Service_Exception
258   - */
259   - public function testInstanciaLancaExcecaoCasoNumeroDeMatriculaNaoSejaInformado()
260   - {
261   - $service = new Avaliacao_Service_Boletim();
262   - }
263   -
264   - public function testInstanciaRegraDeAvaliacaoAtravesDeUmNumeroDeMatricula()
265   - {
266   - $this->assertType('RegraAvaliacao_Model_Regra', $this->_service->getRegra());
267   - }
268   -
269   - public function testInstanciaComponenteCurriculaAtravesDeUmNumeroDeMatricula()
270   - {
271   - $this->assertType('TabelaArredondamento_Model_Tabela', $this->_service->getTabelaArredondamento());
272   - }
273   -
274   - public function testInstanciaDeNotaEAdicionadaApenasUmaVez()
275   - {
276   - $data = array(
277   - new Avaliacao_Model_NotaComponente(
278   - array('componenteCurricular' => 1, 'nota' => 5)
279   - ),
280   - new Avaliacao_Model_NotaComponente(
281   - array('componenteCurricular' => 3, 'nota' => 7.25)
282   - )
283   - );
284   -
285   - $this->_service->addNota($data[0])
286   - ->addNota($data[1])
287   - ->addNota($data[0]);
288   -
289   - $notas = $this->_service->getNotas();
290   - $notas = array(
291   - array_shift($notas),
292   - array_shift($notas)
293   - );
294   -
295   - $this->assertEquals(2, count($notas));
296   - $this->assertEquals($data[0], $notas[0]);
297   - $this->assertEquals($data[1], $notas[1]);
298   -
299   - $data[0]->nota = 6;
300   - $this->_service->addNota($data[0]);
301   -
302   - $this->assertEquals(2, count($this->_service->getNotas()));
303   - }
304   -
305   - public function testValidacaoDeNotaNoBoletim()
306   - {
307   - // O aluno de matrícula "1" terá uma nota em matemática e nenhuma em ciências
308   - $expected = array(
309   - new Avaliacao_Model_NotaComponente(array('nota' => 6, 'componenteCurricular' => 1, 'etapa' => 1))
310   - );
311   -
312   - // Não existe etapa 7, a máxima é 4 e Rc (recuperação).
313   - $nota = new Avaliacao_Model_NotaComponente(array('componenteCurricular' => 1, 'nota' => 5.75, 'etapa' => 7));
314   - $this->_service->addNota($nota);
315   -
316   - // O aluno não cursa o componente 9
317   - $nota = new Avaliacao_Model_NotaComponente(array('componenteCurricular' => 9, 'nota' => 5.75, 'etapa' => 7));
318   - $this->_service->addNota($nota);
319   -
320   - // Notas validáveis
321   - $validatable = $this->_service->getNotas();
322   -
323   - // Inválido, irá atribuir a maior etapa possível
324   - $nota = array_shift($validatable);
325   - $this->assertEquals(3, $nota->etapa);
326   -
327   -
328   - // Inválido, irá atribuir a maior etapa possível
329   - $nota = array_shift($validatable);
330   - $this->assertEquals(1, $nota->etapa);
331   - }
332   -
333   - public function testValidacaoDeFaltaPorComponenteNoBoletim()
334   - {
335   - // Não existe etapa 7, a máxima é 4 e Rc (recuperação).
336   - $falta = new Avaliacao_Model_FaltaComponente(array('componenteCurricular' => 1, 'quantidade' => 5, 'etapa' => 7));
337   - $this->_service->addFalta($falta);
338   -
339   - // O aluno não cursa o componente 9
340   - $falta = new Avaliacao_Model_FaltaComponente(array('componenteCurricular' => 9, 'quantidade' => 5, 'etapa' => 7));
341   - $this->_service->addFalta($falta);
342   -
343   - // Faltas validáveis
344   - $validatable = $this->_service->getFaltas();
345   -
346   - // Inválido, irá atribuir a maior etapa possível
347   - $falta = array_shift($validatable);
348   - $this->assertEquals(3, $falta->etapa);
349   -
350   - // Inválido, irá atribuir a maior etapa possível
351   - $falta = array_shift($validatable);
352   - $this->assertEquals(1, $falta->etapa);
353   - }
354   -
355   - public function testArredondamentoDeNota()
356   - {
357   - $nota = new Avaliacao_Model_NotaComponente(array('nota' => 7.5));
358   - $this->assertEquals(7, $this->_service->arredondaNota($nota));
359   -
360   - $nota = new Avaliacao_Model_NotaComponente(array('nota' => 8));
361   - $this->assertEquals(7, $this->_service->arredondaNota($nota));
362   - }
363   -
364   - public function testSalvaAsNotasNoBoletim()
365   - {
366   - $data = array(
367   - new Avaliacao_Model_NotaComponente(
368   - array('componenteCurricular' => 1, 'nota' => 5)
369   - ),
370   - new Avaliacao_Model_NotaComponente(
371   - array('componenteCurricular' => 3, 'nota' => 7.25, 'etapa' => 1)
372   - )
373   - );
374   -
375   - // Adiciona mocks na instância
376   - $this->_service->addNotas($data);
377   -
378   - // Configura o mock de NotaComponente, que irá persistir objetos
379   - // Avaliacao_Model_NotaComponente
380   - $notas = $this->_service->getNotas();
381   - $toSave[0] = array_shift($notas);
382   - $toSave[1] = array_shift($notas);
383   - $toSave[0]->notaAluno = $this->_notaAlunoExpected;
384   - $toSave[1]->notaAluno = $this->_notaAlunoExpected;
385   -
386   - // Usa o mesmo mock que foi criado em setUp()
387   - $notaComponenteMock = $this->_service->getNotaComponenteDataMapper();
388   -
389   - // Depois de salvar as notas, retornaremos um conjunto completo, inclusive
390   - // com a nota da primeira etapa que não tem em setUp().
391   - $notasComponentes = array(
392   - new Avaliacao_Model_NotaComponente(array(
393   - 'id' => 1,
394   - 'notaAluno' => 1,
395   - 'componenteCurricular' => 1,
396   - 'nota' => 6.5,
397   - 'notaArredondada' => 6,
398   - 'etapa' => 1
399   - )),
400   - new Avaliacao_Model_NotaComponente(array(
401   - 'id' => 2,
402   - 'notaAluno' => 1,
403   - 'componenteCurricular' => 1,
404   - 'nota' => 7.5,
405   - 'notaArredondada' => 7,
406   - 'etapa' => 2
407   - )),
408   - new Avaliacao_Model_NotaComponente(array(
409   - 'id' => 3,
410   - 'notaAluno' => 1,
411   - 'componenteCurricular' => 1,
412   - 'nota' => 5,
413   - 'notaArredondada' => 4,
414   - 'etapa' => 3
415   - )),
416   - new Avaliacao_Model_NotaComponente(array(
417   - 'id' => 4,
418   - 'notaAluno' => 1,
419   - 'componenteCurricular' => 3,
420   - 'nota' => 7.25,
421   - 'notaArredondada' => 7,
422   - 'etapa' => 1
423   - ))
424   - );
425   -
426   - $notaComponenteMock->expects($this->at(0))
427   - ->method('save')
428   - ->with($toSave[0]);
429   -
430   - $notaComponenteMock->expects($this->at(1))
431   - ->method('save')
432   - ->with($toSave[1]);
433   -
434   - $notaComponenteMock->expects($this->at(2))
435   - ->method('findAll')
436   - ->with(array(), array('notaAluno' => 1))
437   - ->will($this->returnValue($notasComponentes));
438   -
439   - // Valores de retorno para NotaComponenteMedia
440   - $notasComponentesMedia = array(
441   - new Avaliacao_Model_NotaComponenteMedia(array(
442   - 'notaAluno' => 1,
443   - 'componenteCurricular' => 1,
444   - 'media' => 3.5,
445   - 'mediaArredondada' => 3
446   - ))
447   - );
448   -
449   - $notaComponenteMediaMock = $this->getCleanMock('Avaliacao_Model_NotaComponenteMediaDataMapper');
450   - $notaComponenteMediaMock->expects($this->at(0))
451   - ->method('find')
452   - ->with(array(1, 1))
453   - ->will($this->returnValue($notasComponentesMedia[0]));
454   -
455   - $notaComponenteMediaMock->expects($this->at(2))
456   - ->method('find')
457   - ->with(array(1, 3))
458   - ->will($this->returnValue(NULL));
459   -
460   - $notaComponenteMediaMock->expects($this->at(1))
461   - ->method('save');
462   -
463   - $notaComponenteMediaMock->expects($this->at(3))
464   - ->method('save');
465   -
466   - // Atribui mock a instância
467   - $this->_service->setNotaComponenteDataMapper($notaComponenteMock);
468   - $this->_service->setNotaComponenteMediaDataMapper($notaComponenteMediaMock);
469   -
470   - // Salva as notas
471   - $this->_service->saveNotas();
472   -
473   - // Verifica a etapa das notas
474   - $notas = $this->_service->getNotas();
475   -
476   - $nota1 = array_shift($notas);
477   - $nota2 = array_shift($notas);
478   -
479   - // Quantidade de etapas
480   - $this->assertEquals(3, $nota1->etapa);
481   - $this->assertEquals(1, $nota2->etapa);
482   - }
483   -
484   - public function testSalvaAsFaltasNoBoletim()
485   - {
486   - $data = array(
487   - new Avaliacao_Model_FaltaComponente(array(
488   - 'componenteCurricular' => 1, 'quantidade' => 1
489   - )),
490   - new Avaliacao_Model_FaltaComponente(array(
491   - 'componenteCurricular' => 3, 'quantidade' => 4
492   - ))
493   - );
494   -
495   - // Adiciona faltas
496   - $this->_service->addFaltas($data);
497   -
498   - // Adiciona a instância de falta aluno
499   - $faltas = $this->_service->getFaltas();
500   - $toSave = array();
501   - $toSave[0] = array_shift($faltas);
502   - $toSave[1] = array_shift($faltas);
503   -
504   - $toSave[0]->faltaAluno = $this->_faltaAlunoExpected;
505   - $toSave[1]->faltaAluno = $this->_faltaAlunoExpected;
506   -
507   - // Usa o mesmo mock que foi criado em setUp()
508   - $faltaComponenteMock = $this->_service->getFaltaAbstractDataMapper();
509   -
510   - $faltaComponenteMock->expects($this->at(0))
511   - ->method('save')
512   - ->with($toSave[0]);
513   -
514   - $faltaComponenteMock->expects($this->at(1))
515   - ->method('save')
516   - ->with($toSave[1]);
517   -
518   - // Salva as faltas
519   - $this->_service->saveFaltas();
520   - }
521   -
522   - public function testSituacaoAlunoComponentesCurricularesEmExame()
523   - {
524   - $expected = new stdClass();
525   - $expected->situacao = App_Model_MatriculaSituacao::EM_EXAME;
526   - $expected->componentesCurriculares = array();
527   - $expected->componentesCurriculares[1] = new stdClass();
528   - $expected->componentesCurriculares[3] = new stdClass();
529   - $expected->componentesCurriculares[1]->situacao = App_Model_MatriculaSituacao::EM_EXAME;
530   - $expected->componentesCurriculares[3]->situacao = App_Model_MatriculaSituacao::APROVADO_APOS_EXAME;
531   -
532   - $returnValue = array(
533   - new Avaliacao_Model_NotaComponenteMedia(array(
534   - 'notaAluno' => 1, 'componenteCurricular' => 1, 'media' => 5.65, 'mediaArredondada' => 5.5, 'etapa' => 4
535   - )),
536   - new Avaliacao_Model_NotaComponenteMedia(array(
537   - 'notaAluno' => 1, 'componenteCurricular' => 3, 'media' => 6, 'mediaArredondada' => 6, 'etapa' => 'Rc'
538   - ))
539   - );
540   -
541   - $mediaMock = $this->getCleanMock('Avaliacao_Model_NotaComponenteMediaDataMapper');
542   - $mediaMock->expects($this->once())
543   - ->method('findAll')
544   - ->with(array(), array('notaAluno' => 1))
545   - ->will($this->returnValue($returnValue));
546   -
547   - $this->_service->setNotaComponenteMediaDataMapper($mediaMock);
548   - $this->assertEquals($expected, $this->_service->getSituacaoComponentesCurriculares());
549   - }
550   -
551   - public function testSituacaoAlunoComponentesCurricularesReprovado()
552   - {
553   - $expected = new stdClass();
554   - $expected->situacao = App_Model_MatriculaSituacao::REPROVADO;
555   - $expected->componentesCurriculares = array();
556   - $expected->componentesCurriculares[1] = new stdClass();
557   - $expected->componentesCurriculares[3] = new stdClass();
558   - $expected->componentesCurriculares[1]->situacao = App_Model_MatriculaSituacao::REPROVADO;
559   - $expected->componentesCurriculares[3]->situacao = App_Model_MatriculaSituacao::REPROVADO;
560   -
561   - $returnValue = array(
562   - new Avaliacao_Model_NotaComponenteMedia(array(
563   - 'notaAluno' => 1, 'componenteCurricular' => 1, 'media' => 5.65, 'mediaArredondada' => 5.5, 'etapa' => 'Rc'
564   - )),
565   - new Avaliacao_Model_NotaComponenteMedia(array(
566   - 'notaAluno' => 1, 'componenteCurricular' => 3, 'media' => 5.5, 'mediaArredondada' => 5.5, 'etapa' => 'Rc'
567   - ))
568   - );
569   -
570   - $mediaMock = $this->getCleanMock('Avaliacao_Model_NotaComponenteMediaDataMapper');
571   - $mediaMock->expects($this->once())
572   - ->method('findAll')
573   - ->with(array(), array('notaAluno' => 1))
574   - ->will($this->returnValue($returnValue));
575   -
576   - $this->_service->setNotaComponenteMediaDataMapper($mediaMock);
577   - $this->assertEquals($expected, $this->_service->getSituacaoComponentesCurriculares());
578   - }
579   -
580   - public function testSituacaoAlunoComponentesCurricularesEmAndamento()
581   - {
582   - $expected = new stdClass();
583   - $expected->situacao = App_Model_MatriculaSituacao::EM_ANDAMENTO;
584   - $expected->componentesCurriculares = array();
585   - $expected->componentesCurriculares[1] = new stdClass();
586   - $expected->componentesCurriculares[3] = new stdClass();
587   - $expected->componentesCurriculares[1]->situacao = App_Model_MatriculaSituacao::EM_ANDAMENTO;
588   - $expected->componentesCurriculares[3]->situacao = App_Model_MatriculaSituacao::APROVADO;
589   -
590   - $returnValue = array(
591   - new Avaliacao_Model_NotaComponenteMedia(array(
592   - 'notaAluno' => 1, 'componenteCurricular' => 1, 'media' => 5.65, 'mediaArredondada' => 5.5, 'etapa' => 3
593   - )),
594   - new Avaliacao_Model_NotaComponenteMedia(array(
595   - 'notaAluno' => 1, 'componenteCurricular' => 3, 'media' => 6, 'mediaArredondada' => 6, 'etapa' => 4
596   - ))
597   - );
598   -
599   - $mediaMock = $this->getCleanMock('Avaliacao_Model_NotaComponenteMediaDataMapper');
600   - $mediaMock->expects($this->once())
601   - ->method('findAll')
602   - ->with(array(), array('notaAluno' => 1))
603   - ->will($this->returnValue($returnValue));
604   -
605   - $this->_service->setNotaComponenteMediaDataMapper($mediaMock);
606   - $this->assertEquals($expected, $this->_service->getSituacaoComponentesCurriculares());
607   - }
608   -
609   - public function testSituacaoAlunoComponentesCurricularesAprovado()
610   - {
611   - $expected = new stdClass();
612   - $expected->situacao = App_Model_MatriculaSituacao::APROVADO;
613   - $expected->componentesCurriculares = array();
614   - $expected->componentesCurriculares[1] = new stdClass();
615   - $expected->componentesCurriculares[3] = new stdClass();
616   - $expected->componentesCurriculares[1]->situacao = App_Model_MatriculaSituacao::APROVADO;
617   - $expected->componentesCurriculares[3]->situacao = App_Model_MatriculaSituacao::APROVADO;
618   -
619   - $returnValue = array(
620   - new Avaliacao_Model_NotaComponenteMedia(array(
621   - 'notaAluno' => 1, 'componenteCurricular' => 1, 'media' => 7.65, 'mediaArredondada' => 7.5, 'etapa' => 4
622   - )),
623   - new Avaliacao_Model_NotaComponenteMedia(array(
624   - 'notaAluno' => 1, 'componenteCurricular' => 3, 'media' => 6, 'mediaArredondada' => 6, 'etapa' => 4
625   - ))
626   - );
627   -
628   - $mediaMock = $this->getCleanMock('Avaliacao_Model_NotaComponenteMediaDataMapper');
629   - $mediaMock->expects($this->once())
630   - ->method('findAll')
631   - ->with(array(), array('notaAluno' => 1))
632   - ->will($this->returnValue($returnValue));
633   -
634   - $this->_service->setNotaComponenteMediaDataMapper($mediaMock);
635   - $this->assertEquals($expected, $this->_service->getSituacaoComponentesCurriculares());
636   - }
637   -
638   -/**
639   - * @depends testSalvaAsFaltasNoBoletim
640   - * @see Boletim_Common#_configuraDadosDisciplina():255 (carga horária do
641   - * componente de id 3 - Ciências)
642   - */
643   - public function testSituacaoAlunoFaltaComponenteCurricularEmAndamento()
644   - {
645   - $faltasComponentes = array(
646   - new Avaliacao_Model_FaltaComponente(array(
647   - 'id' => 1,
648   - 'faltaAluno' => 1,
649   - 'componenteCurricular' => 1,
650   - 'quantidade' => 0,
651   - 'etapa' => 1
652   - )),
653   - new Avaliacao_Model_FaltaComponente(array(
654   - 'id' => 2,
655   - 'faltaAluno' => 1,
656   - 'componenteCurricular' => 1,
657   - 'quantidade' => 7,
658   - 'etapa' => 2
659   - )),
660   - new Avaliacao_Model_FaltaComponente(array(
661   - 'id' => 3,
662   - 'faltaAluno' => 1,
663   - 'componenteCurricular' => 1,
664   - 'quantidade' => 1,
665   - 'etapa' => 3
666   - )),
667   - new Avaliacao_Model_FaltaComponente(array(
668   - 'id' => 4,
669   - 'faltaAluno' => 1,
670   - 'componenteCurricular' => 3,
671   - 'quantidade' => 4,
672   - 'etapa' => 1
673   - ))
674   - );
675   -
676   - $faltaComponenteMock = $this->getCleanMock('Avaliacao_Model_FaltaComponenteDataMapper');
677   - $faltaComponenteMock->expects($this->once())
678   - ->method('findAll')
679   - ->with(array(), array('faltaAluno' => 1))
680   - ->will($this->returnValue($faltasComponentes));
681   -
682   - $this->_service->setFaltaAbstractDataMapper($faltaComponenteMock);
683   -
684   - // Objeto de retorno esperado
685   - $expected = new stdClass();
686   - $expected->situacao = App_Model_MatriculaSituacao::EM_ANDAMENTO;
687   - $expected->tipoFalta = RegraAvaliacao_Model_TipoPresenca::POR_COMPONENTE;
688   - $expected->cargaHoraria = 800;
689   - $expected->cursoHoraFalta = (50 / 60);
690   - $expected->totalFaltas = 12;
691   - $expected->horasFaltas = (12 * $expected->cursoHoraFalta);
692   - $expected->porcentagemFalta = (($expected->horasFaltas / $expected->cargaHoraria) * 100);
693   - $expected->porcentagemPresenca = 100 - $expected->porcentagemFalta;
694   - $expected->porcentagemPresencaRegra = 75;
695   - $expected->componentesCurriculares = array();
696   - $expected->componentesCurriculares[1] = new stdClass();
697   - $expected->componentesCurriculares[3] = new stdClass();
698   -
699   - $expected->componentesCurriculares[1]->situacao = App_Model_MatriculaSituacao::EM_ANDAMENTO;
700   - $expected->componentesCurriculares[1]->horasFaltas = (8 * $expected->cursoHoraFalta);
701   - $expected->componentesCurriculares[1]->porcentagemFalta = ((8 * $expected->cursoHoraFalta) / 100) * 100;
702   - $expected->componentesCurriculares[1]->porcentagemPresenca = 100 - (((8 * $expected->cursoHoraFalta) / 100) * 100);
703   -
704   - $expected->componentesCurriculares[3]->situacao = App_Model_MatriculaSituacao::EM_ANDAMENTO;
705   - $expected->componentesCurriculares[3]->horasFaltas = (4 * $expected->cursoHoraFalta);
706   - $expected->componentesCurriculares[3]->porcentagemFalta = ((4 * $expected->cursoHoraFalta) / 70) * 100;
707   - $expected->componentesCurriculares[3]->porcentagemPresenca = 100 - (((4 * $expected->cursoHoraFalta) / 70) * 100);
708   -
709   - $presenca = $this->_service->getSituacaoFaltas();
710   - $this->assertEquals($expected, $presenca);
711   - }
712   -
713   - /**
714   - * @depends testSalvaAsFaltasNoBoletim
715   - * @see Boletim_Common#_configuraDadosDisciplina():255 (carga horária do
716   - * componente de id 3 - Ciências)
717   - */
718   - public function testSituacaoAlunoFaltaComponenteCurricularAprovado()
719   - {
720   - $faltasComponentes = array(
721   - new Avaliacao_Model_FaltaComponente(array(
722   - 'id' => 1,
723   - 'faltaAluno' => 1,
724   - 'componenteCurricular' => 1,
725   - 'quantidade' => 0,
726   - 'etapa' => 1
727   - )),
728   - new Avaliacao_Model_FaltaComponente(array(
729   - 'id' => 2,
730   - 'faltaAluno' => 1,
731   - 'componenteCurricular' => 1,
732   - 'quantidade' => 7,
733   - 'etapa' => 2
734   - )),
735   - new Avaliacao_Model_FaltaComponente(array(
736   - 'id' => 3,
737   - 'faltaAluno' => 1,
738   - 'componenteCurricular' => 1,
739   - 'quantidade' => 1,
740   - 'etapa' => 3
741   - )),
742   - new Avaliacao_Model_FaltaComponente(array(
743   - 'id' => 4,
744   - 'faltaAluno' => 1,
745   - 'componenteCurricular' => 1,
746   - 'quantidade' => 4,
747   - 'etapa' => 4
748   - ))
749   - );
750   -
751   - $faltaComponenteMock = $this->getCleanMock('Avaliacao_Model_FaltaComponenteDataMapper');
752   - $faltaComponenteMock->expects($this->once())
753   - ->method('findAll')
754   - ->with(array(), array('faltaAluno' => 1))
755   - ->will($this->returnValue($faltasComponentes));
756   -
757   - $this->_service->setFaltaAbstractDataMapper($faltaComponenteMock);
758   -
759   - // Objeto de retorno esperado
760   - $expected = new stdClass();
761   - $expected->situacao = App_Model_MatriculaSituacao::APROVADO;
762   - $expected->tipoFalta = RegraAvaliacao_Model_TipoPresenca::POR_COMPONENTE;
763   - $expected->cargaHoraria = 800;
764   - $expected->cursoHoraFalta = (50 / 60);
765   - $expected->totalFaltas = 12;
766   - $expected->horasFaltas = (12 * $expected->cursoHoraFalta);
767   - $expected->porcentagemFalta = (($expected->horasFaltas / $expected->cargaHoraria) * 100);
768   - $expected->porcentagemPresenca = 100 - $expected->porcentagemFalta;
769   - $expected->porcentagemPresencaRegra = 75;
770   - $expected->componentesCurriculares = array();
771   - $expected->componentesCurriculares[1] = new stdClass();
772   -
773   - $expected->componentesCurriculares[1]->situacao = App_Model_MatriculaSituacao::APROVADO;
774   - $expected->componentesCurriculares[1]->horasFaltas = (12 * $expected->cursoHoraFalta);
775   - $expected->componentesCurriculares[1]->porcentagemFalta = ((12 * $expected->cursoHoraFalta) / 100) * 100;
776   - $expected->componentesCurriculares[1]->porcentagemPresenca = 100 - (((12 * $expected->cursoHoraFalta) / 100) * 100);
777   -
778   - $presenca = $this->_service->getSituacaoFaltas();
779   - $this->assertEquals($expected, $presenca);
780   - }
781   -
782   -/**
783   - * @depends testSalvaAsFaltasNoBoletim
784   - * @see Boletim_Common#_configuraDadosDisciplina():255 (carga horária do
785   - * componente de id 3 - Ciências)
786   - */
787   - public function testSituacaoAlunoFaltaComponenteCurricularReprovado()
788   - {
789   - $faltasComponentes = array(
790   - new Avaliacao_Model_FaltaComponente(array(
791   - 'id' => 1,
792   - 'faltaAluno' => 1,
793   - 'componenteCurricular' => 1,
794   - 'quantidade' => 125,
795   - 'etapa' => 1
796   - )),
797   - new Avaliacao_Model_FaltaComponente(array(
798   - 'id' => 2,
799   - 'faltaAluno' => 1,
800   - 'componenteCurricular' => 1,
801   - 'quantidade' => 125,
802   - 'etapa' => 2
803   - )),
804   - new Avaliacao_Model_FaltaComponente(array(
805   - 'id' => 3,
806   - 'faltaAluno' => 1,
807   - 'componenteCurricular' => 1,
808   - 'quantidade' => 125,
809   - 'etapa' => 3
810   - )),
811   - new Avaliacao_Model_FaltaComponente(array(
812   - 'id' => 4,
813   - 'faltaAluno' => 1,
814   - 'componenteCurricular' => 1,
815   - 'quantidade' => 125,
816   - 'etapa' => 4
817   - ))
818   - );
819   -
820   - $faltaComponenteMock = $this->getCleanMock('Avaliacao_Model_FaltaComponenteDataMapper');
821   - $faltaComponenteMock->expects($this->once())
822   - ->method('findAll')
823   - ->with(array(), array('faltaAluno' => 1))
824   - ->will($this->returnValue($faltasComponentes));
825   -
826   - $this->_service->setFaltaAbstractDataMapper($faltaComponenteMock);
827   -
828   - // Objeto de retorno esperado
829   - $expected = new stdClass();
830   - $expected->situacao = App_Model_MatriculaSituacao::REPROVADO;
831   - $expected->tipoFalta = RegraAvaliacao_Model_TipoPresenca::POR_COMPONENTE;
832   - $expected->cargaHoraria = 800;
833   - $expected->cursoHoraFalta = (50 / 60);
834   - $expected->totalFaltas = 500;
835   - $expected->horasFaltas = (500 * $expected->cursoHoraFalta);
836   - $expected->porcentagemFalta = (($expected->horasFaltas / $expected->cargaHoraria) * 100);
837   - $expected->porcentagemPresenca = 100 - $expected->porcentagemFalta;
838   - $expected->porcentagemPresencaRegra = 75;
839   - $expected->componentesCurriculares = array();
840   - $expected->componentesCurriculares[1] = new stdClass();
841   -
842   - $expected->componentesCurriculares[1]->situacao = App_Model_MatriculaSituacao::REPROVADO;
843   - $expected->componentesCurriculares[1]->horasFaltas = (500 * $expected->cursoHoraFalta);
844   - $expected->componentesCurriculares[1]->porcentagemFalta = ((500 * $expected->cursoHoraFalta) / 100) * 100;
845   - $expected->componentesCurriculares[1]->porcentagemPresenca = 100 - (((500 * $expected->cursoHoraFalta) / 100) * 100);
846   -
847   - $presenca = $this->_service->getSituacaoFaltas();
848   - $this->assertEquals($expected, $presenca);
849   - }
850   -
851   - public function testSituacaoAluno()
852   - {
853   - $notaSituacoes = array(
854   - 1 => App_Model_MatriculaSituacao::APROVADO,
855   - 2 => App_Model_MatriculaSituacao::APROVADO_APOS_EXAME,
856   - 3 => App_Model_MatriculaSituacao::EM_ANDAMENTO,
857   - 4 => App_Model_MatriculaSituacao::EM_EXAME,
858   - 5 => App_Model_MatriculaSituacao::REPROVADO
859   - );
860   -
861   - $faltaSituacoes = array(
862   - 1 => App_Model_MatriculaSituacao::EM_ANDAMENTO,
863   - 2 => App_Model_MatriculaSituacao::APROVADO,
864   - 3 => App_Model_MatriculaSituacao::REPROVADO
865   - );
866   -
867   - // Possibilidades
868   - $expected = array(
869   - 1 => array(
870   - 1 => array(FALSE, TRUE, FALSE, FALSE),
871   - 2 => array(TRUE, FALSE, FALSE, FALSE),
872   - 3 => array(FALSE, FALSE, TRUE, FALSE)
873   - ),
874   - 2 => array(
875   - 1 => array(FALSE, TRUE, FALSE, TRUE),
876   - 2 => array(TRUE, FALSE, FALSE, TRUE),
877   - 3 => array(FALSE, FALSE, TRUE, TRUE)
878   - ),
879   - 3 => array(
880   - 1 => array(FALSE, TRUE, FALSE, FALSE),
881   - 2 => array(FALSE, TRUE, FALSE, FALSE),
882   - 3 => array(FALSE, TRUE, TRUE, FALSE)
883   - ),
884   - 4 => array(
885   - 1 => array(FALSE, TRUE, FALSE, TRUE),
886   - 2 => array(FALSE, TRUE, FALSE, TRUE),
887   - 3 => array(FALSE, TRUE, TRUE, TRUE)
888   - ),
889   - 5 => array(
890   - 1 => array(FALSE, TRUE, FALSE, TRUE),
891   - 2 => array(FALSE, FALSE, FALSE, TRUE),
892   - 3 => array(FALSE, FALSE, TRUE, TRUE)
893   - )
894   - );
895   -
896   - foreach ($notaSituacoes as $i => $notaSituacao) {
897   - $nota = new stdClass();
898   - $nota->situacao = $notaSituacao;
899   -
900   - foreach ($faltaSituacoes as $ii => $faltaSituacao) {
901   - $service = $this->setExcludedMethods(array('getSituacaoAluno'))
902   - ->getCleanMock('Avaliacao_Service_Boletim');
903   -
904   - $falta = new stdClass();
905   - $falta->situacao = $faltaSituacao;
906   -
907   - $service->expects($this->once())
908   - ->method('getSituacaoComponentesCurriculares')
909   - ->will($this->returnValue($nota));
910   -
911   - $service->expects($this->once())
912   - ->method('getSituacaoFaltas')
913   - ->will($this->returnValue($falta));
914   -
915   - // Testa
916   - $situacao = $service->getSituacaoAluno();
917   -
918   - $this->assertEquals($expected[$i][$ii][0], $situacao->aprovado, "Aprovado, caso $i - $ii");
919   - $this->assertEquals($expected[$i][$ii][1], $situacao->andamento, "Andamento, caso $i - $ii");
920   - $this->assertEquals($expected[$i][$ii][2], $situacao->retidoFalta, "Retido por falta, caso $i - $ii");
921   - $this->assertEquals($expected[$i][$ii][3], $situacao->recuperacao, "Recuperação, caso $i - $ii");
922   - }
923   - }
924   - }
925   -
926   - /**
927   - * @expectedException CoreExt_Service_Exception
928   - */
929   - public function testPromoverLancaExcecaoComSituacaoEmAndamento()
930   - {
931   - $situacao = new stdClass();
932   - $situacao->aprovado = FALSE;
933   - $situacao->andamento = TRUE;
934   -
935   - $service = $this->setExcludedMethods(array('promover'))
936   - ->getCleanMock('Avaliacao_Service_Boletim');
937   -
938   - $service->expects($this->once())
939   - ->method('getSituacaoAluno')
940   - ->will($this->returnValue($situacao));
941   -
942   - $service->promover();
943   - }
944   -
945   - /**
946   - * @expectedException CoreExt_Service_Exception
947   - */
948   - public function testPromoverMatriculaJaPromovidaLancaExcecao()
949   - {
950   - $situacao = new stdClass();
951   - $situacao->aprovado = FALSE;
952   - $situacao->andamento = FALSE;
953   -
954   - $service = $this->setExcludedMethods(array('promover'))
955   - ->getCleanMock('Avaliacao_Service_Boletim');
956   -
957   - $service->expects($this->once())
958   - ->method('getSituacaoAluno')
959   - ->will($this->returnValue($situacao));
960   -
961   - $service->expects($this->once())
962   - ->method('getOption')
963   - ->with('aprovado')
964   - ->will($this->returnValue(1));
965   -
966   - $service->promover();
967   - }
968   -
969   - public function testPromoverComProgressaoContinuada()
970   - {
971   - $situacao = new stdClass();
972   - $situacao->aprovado = FALSE;
973   - $situacao->andamento = FALSE;
974   - $situacao->retidoFalta = TRUE;
975   - $situacao->recuperacao = TRUE;
976   -
977   - $service = $this->setExcludedMethods(array('promover'))
978   - ->getCleanMock('Avaliacao_Service_Boletim');
979   -
980   - $service->expects($this->once())
981   - ->method('getRegra')
982   - ->will($this->returnValue(new RegraAvaliacao_Model_Regra(
983   - array('tipoProgressao' => RegraAvaliacao_Model_TipoProgressao::CONTINUADA)
984   - )));
985   -
986   - $service->expects($this->once())
987   - ->method('getSituacaoAluno')
988   - ->will($this->returnValue($situacao));
989   -
990   - $service->expects($this->any())
991   - ->method('getOption')
992   - ->will($this->onConsecutiveCalls(3, 1, 1));
993   -
994   - $service->expects($this->once())
995   - ->method('_updateMatricula')
996   - ->with(1, 1, TRUE);
997   -
998   - $service->promover();
999   - }
1000   -
1001   - public function testPromoverComProgressaoNaoContinuadaMediaPresencaAprovado()
1002   - {
1003   - $situacao = new stdClass();
1004   - $situacao->aprovado = TRUE;
1005   - $situacao->andamento = FALSE;
1006   - $situacao->retidoFalta = FALSE;
1007   - $situacao->recuperacao = FALSE;
1008   -
1009   - $service = $this->setExcludedMethods(array('promover'))
1010   - ->getCleanMock('Avaliacao_Service_Boletim');
1011   -
1012   - $service->expects($this->once())
1013   - ->method('getRegra')
1014   - ->will($this->returnValue(new RegraAvaliacao_Model_Regra(
1015   - array('tipoProgressao' => RegraAvaliacao_Model_TipoProgressao::NAO_CONTINUADA_AUTO_MEDIA_PRESENCA)
1016   - )));
1017   -
1018   - $service->expects($this->once())
1019   - ->method('getSituacaoAluno')
1020   - ->will($this->returnValue($situacao));
1021   -
1022   - $service->expects($this->any())
1023   - ->method('getOption')
1024   - ->will($this->onConsecutiveCalls(3, 1, 1));
1025   -
1026   - $service->expects($this->once())
1027   - ->method('_updateMatricula')
1028   - ->with(1, 1, TRUE);
1029   -
1030   - $service->promover();
1031   - }
1032   -
1033   - public function testPromoverComProgressaoNaoContinuadaMediaPresencaReprovado()
1034   - {
1035   - $situacao = new stdClass();
1036   - $situacao->aprovado = FALSE;
1037   - $situacao->andamento = FALSE;
1038   - $situacao->retidoFalta = TRUE;
1039   - $situacao->recuperacao = FALSE;
1040   -
1041   - $service = $this->setExcludedMethods(array('promover'))
1042   - ->getCleanMock('Avaliacao_Service_Boletim');
1043   -
1044   - $service->expects($this->once())
1045   - ->method('getRegra')
1046   - ->will($this->returnValue(new RegraAvaliacao_Model_Regra(
1047   - array('tipoProgressao' => RegraAvaliacao_Model_TipoProgressao::NAO_CONTINUADA_AUTO_MEDIA_PRESENCA)
1048   - )));
1049   -
1050   - $service->expects($this->once())
1051   - ->method('getSituacaoAluno')
1052   - ->will($this->returnValue($situacao));
1053   -
1054   - $service->expects($this->any())
1055   - ->method('getOption')
1056   - ->will($this->onConsecutiveCalls(3, 1, 1));
1057   -
1058   - $service->expects($this->once())
1059   - ->method('_updateMatricula')
1060   - ->with(1, 1, FALSE);
1061   -
1062   - $service->promover();
1063   - }
1064   -
1065   - public function testPromoverComProgressaoNaoContinuadaMediaAprovado()
1066   - {
1067   - $situacao = new stdClass();
1068   - $situacao->aprovado = TRUE;
1069   - $situacao->andamento = FALSE;
1070   - $situacao->retidoFalta = TRUE;
1071   - $situacao->recuperacao = FALSE;
1072   -
1073   - $service = $this->setExcludedMethods(array('promover'))
1074   - ->getCleanMock('Avaliacao_Service_Boletim');
1075   -
1076   - $service->expects($this->once())
1077   - ->method('getRegra')
1078   - ->will($this->returnValue(new RegraAvaliacao_Model_Regra(
1079   - array('tipoProgressao' => RegraAvaliacao_Model_TipoProgressao::NAO_CONTINUADA_AUTO_SOMENTE_MEDIA)
1080   - )));
1081   -
1082   - $service->expects($this->once())
1083   - ->method('getSituacaoAluno')
1084   - ->will($this->returnValue($situacao));
1085   -
1086   - $service->expects($this->any())
1087   - ->method('getOption')
1088   - ->will($this->onConsecutiveCalls(3, 1, 1));
1089   -
1090   - $service->expects($this->once())
1091   - ->method('_updateMatricula')
1092   - ->with(1, 1, TRUE);
1093   -
1094   - $service->promover();
1095   - }
1096   -
1097   - public function testPromoverComProgressaoNaoContinuadaMediaReprovado()
1098   - {
1099   - $situacao = new stdClass();
1100   - $situacao->aprovado = FALSE;
1101   - $situacao->andamento = FALSE;
1102   - $situacao->retidoFalta = FALSE;
1103   - $situacao->recuperacao = FALSE;
1104   -
1105   - $service = $this->setExcludedMethods(array('promover'))
1106   - ->getCleanMock('Avaliacao_Service_Boletim');
1107   -
1108   - $service->expects($this->once())
1109   - ->method('getRegra')
1110   - ->will($this->returnValue(new RegraAvaliacao_Model_Regra(
1111   - array('tipoProgressao' => RegraAvaliacao_Model_TipoProgressao::NAO_CONTINUADA_AUTO_SOMENTE_MEDIA)
1112   - )));
1113   -
1114   - $service->expects($this->once())
1115   - ->method('getSituacaoAluno')
1116   - ->will($this->returnValue($situacao));
1117   -
1118   - $service->expects($this->any())
1119   - ->method('getOption')
1120   - ->will($this->onConsecutiveCalls(3, 1, 1));
1121   -
1122   - $service->expects($this->once())
1123   - ->method('_updateMatricula')
1124   - ->with(1, 1, FALSE);
1125   -
1126   - $service->promover();
1127   - }
1128   -
1129   - /**
1130   - * @expectedException CoreExt_Service_Exception
1131   - */
1132   - public function testPromoverComProgressaoNaoContinuadaManualNaoConfirmadaLancaExcecao()
1133   - {
1134   - $situacao = new stdClass();
1135   - $situacao->aprovado = FALSE;
1136   - $situacao->andamento = FALSE;
1137   - $situacao->retidoFalta = FALSE;
1138   - $situacao->recuperacao = FALSE;
1139   -
1140   - $service = $this->setExcludedMethods(array('promover'))
1141   - ->getCleanMock('Avaliacao_Service_Boletim');
1142   -
1143   - $service->expects($this->once())
1144   - ->method('getRegra')
1145   - ->will($this->returnValue(new RegraAvaliacao_Model_Regra(
1146   - array('tipoProgressao' => RegraAvaliacao_Model_TipoProgressao::NAO_CONTINUADA_MANUAL)
1147   - )));
1148   -
1149   - $service->expects($this->once())
1150   - ->method('getSituacaoAluno')
1151   - ->will($this->returnValue($situacao));
1152   -
1153   - $service->expects($this->once())
1154   - ->method('getOption')
1155   - ->with('aprovado')
1156   - ->will($this->returnValue(3));
1157   -
1158   - $service->promover();
1159   - }
1160   -
1161   - public function testPromoverComProgressaoNaoContinuadaManualConfirmada()
1162   - {
1163   - $situacao = new stdClass();
1164   - $situacao->aprovado = FALSE;
1165   - $situacao->andamento = FALSE;
1166   - $situacao->retidoFalta = FALSE;
1167   - $situacao->recuperacao = FALSE;
1168   -
1169   - $service = $this->setExcludedMethods(array('promover'))
1170   - ->getCleanMock('Avaliacao_Service_Boletim');
1171   -
1172   - $service->expects($this->once())
1173   - ->method('getRegra')
1174   - ->will($this->returnValue(new RegraAvaliacao_Model_Regra(
1175   - array('tipoProgressao' => RegraAvaliacao_Model_TipoProgressao::NAO_CONTINUADA_MANUAL)
1176   - )));
1177   -
1178   - $service->expects($this->once())
1179   - ->method('getSituacaoAluno')
1180   - ->will($this->returnValue($situacao));
1181   -
1182   - $service->expects($this->any())
1183   - ->method('getOption')
1184   - ->will($this->onConsecutiveCalls(3, 1, 1));
1185   -
1186   - $service->expects($this->once())
1187   - ->method('_updateMatricula')
1188   - ->with(1, 1, TRUE);
1189   -
1190   - $service->promover(TRUE);
1191   - }
1192   -}
1193 0 \ No newline at end of file
ieducar/modules/Avaliacao/_tests/Boletim/NotaNumerica_FaltaGeralTest.php
... ... @@ -1,414 +0,0 @@
1   -<?php
2   -
3   -/**
4   - * i-Educar - Sistema de gestão escolar
5   - *
6   - * Copyright (C) 2006 Prefeitura Municipal de Itajaí
7   - * <ctima@itajai.sc.gov.br>
8   - *
9   - * Este programa é software livre; você pode redistribuí-lo e/ou modificá-lo
10   - * sob os termos da Licença Pública Geral GNU conforme publicada pela Free
11   - * Software Foundation; tanto a versão 2 da Licença, como (a seu critério)
12   - * qualquer versão posterior.
13   - *
14   - * Este programa é distribuí­do na expectativa de que seja útil, porém, SEM
15   - * NENHUMA GARANTIA; nem mesmo a garantia implí­cita de COMERCIABILIDADE OU
16   - * ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA. Consulte a Licença Pública Geral
17   - * do GNU para mais detalhes.
18   - *
19   - * Você deve ter recebido uma cópia da Licença Pública Geral do GNU junto
20   - * com este programa; se não, escreva para a Free Software Foundation, Inc., no
21   - * endereço 59 Temple Street, Suite 330, Boston, MA 02111-1307 USA.
22   - *
23   - * @author Eriksen Costa Paixão <eriksen.paixao_bs@cobra.com.br>
24   - * @category i-Educar
25   - * @license @@license@@
26   - * @package Avaliacao
27   - * @subpackage UnitTests
28   - * @since Arquivo disponível desde a versão 1.1.0
29   - * @version $Id$
30   - */
31   -
32   -require_once 'Avaliacao/_tests/Boletim/NotaNumerica_FaltaComponenteTest.php';
33   -require_once 'Avaliacao/Model/FaltaGeralDataMapper.php';
34   -
35   -/**
36   - * NotaNumerica_FaltaGeral class.
37   - *
38   - * Realiza testes no service Avaliacao_Service_Boletim para casos onde a regra
39   - * de avaliação contabiliza faltas no geral.
40   - *
41   - * Subclassifica classe de teste para casos de faltas por componentes,
42   - * desativando ou modificando o comportamento por herança.
43   - *
44   - * @author Eriksen Costa Paixão <eriksen.paixao_bs@cobra.com.br>
45   - * @category i-Educar
46   - * @license @@license@@
47   - * @package Avaliacao
48   - * @subpackage UnitTests
49   - * @since Classe disponível desde a versão 1.1.0
50   - * @version @@package_version@@
51   - */
52   -class Boletim_NotaNumerica_FaltaGeralTest extends Boletim_NotaNumerica_FaltaComponenteTest
53   -{
54   - /**
55   - * @see Boletim_NotaNumerica_FaltaComponenteTest#_setUpFaltaAluno()
56   - */
57   - protected function _setUpFaltaAluno()
58   - {
59   - $faltaAluno = new Avaliacao_Model_FaltaAluno(array(
60   - 'id' => 1,
61   - 'matricula' => 1,
62   - 'tipoFalta' => RegraAvaliacao_Model_TipoPresenca::GERAL
63   - ));
64   -
65   - // Guarda na instância
66   - $this->_faltaAlunoExpected = $faltaAluno;
67   -
68   - return $faltaAluno;
69   - }
70   -
71   - /**
72   - * @see Boletim_Common#_setUpFaltaAbstractDataMapperMock()
73   - */
74   - protected function _setUpFaltaAbstractDataMapperMock()
75   - {
76   - // Retorno para mock de falta componentes
77   - $faltaComponente = array(new Avaliacao_Model_FaltaGeral(array(
78   - 'id' => 1,
79   - 'faltaAluno' => 1,
80   - 'quantidade' => 4,
81   - 'etapa' => 2
82   - )));
83   -
84   - // Configura expectativas do mock
85   - $faltaComponenteMock = $this->getCleanMock('Avaliacao_Model_FaltaGeralDataMapper');
86   - $faltaComponenteMock->expects($this->at(0))
87   - ->method('findAll')
88   - ->with(array(), array('faltaAluno' => 1))
89   - ->will($this->returnValue($faltaComponente));
90   -
91   - return $faltaComponenteMock;
92   - }
93   -
94   - public function testInstanciaLancaExcecaoCasoNumeroDeMatriculaNaoSejaInformado()
95   - {
96   - }
97   -
98   - public function testInstanciaRegraDeAvaliacaoAtravesDeUmNumeroDeMatricula()
99   - {
100   - }
101   -
102   - public function testInstanciaComponenteCurriculaAtravesDeUmNumeroDeMatricula()
103   - {
104   - }
105   -
106   - public function testInstanciaDeNotaEAdicionadaApenasUmaVez()
107   - {
108   - }
109   -
110   - public function testValidacaoDeNotaNoBoletim()
111   - {
112   - }
113   -
114   - public function testValidacaoDeFaltaPorComponenteNoBoletim()
115   - {
116   - }
117   -
118   - public function testValidacaoDeFaltaGeralNoBoletim()
119   - {
120   - // Não existe etapa 7, a máxima é 4 e Rc (recuperação).
121   - $falta = new Avaliacao_Model_FaltaGeral(array('quantidade' => 5, 'etapa' => 7));
122   - $this->_service->addFalta($falta);
123   -
124   - // O aluno não cursa o componente 9
125   - $falta = new Avaliacao_Model_FaltaGeral(array('quantidade' => 5, 'etapa' => 7));
126   - $this->_service->addFalta($falta);
127   -
128   - // Faltas validáveis
129   - $validatable = $this->_service->getFaltas();
130   -
131   - // Inválido, irá atribuir a maior etapa possível
132   - $falta = array_shift($validatable);
133   - $this->assertEquals(3, $falta->etapa);
134   -
135   - // Inválido, irá atribuir a maior etapa possível
136   - $falta = array_shift($validatable);
137   - $this->assertEquals(3, $falta->etapa, 'Segunda');
138   - }
139   -
140   - public function testArredondamentoDeNota()
141   - {
142   - }
143   -
144   - public function testSalvaAsNotasNoBoletim()
145   - {
146   - }
147   -
148   - public function testSalvaAsFaltasNoBoletim()
149   - {
150   - $data = array(
151   - new Avaliacao_Model_FaltaGeral(array(
152   - 'quantidade' => 1
153   - )),
154   - new Avaliacao_Model_FaltaGeral(array(
155   - 'quantidade' => 4
156   - ))
157   - );
158   -
159   - // Adiciona faltas
160   - $this->_service->addFaltas($data);
161   -
162   - // Adiciona a instância de falta aluno
163   - $faltas = $this->_service->getFaltas();
164   - $toSave = array();
165   - $toSave[0] = array_shift($faltas);
166   - $toSave[1] = array_shift($faltas);
167   -
168   - $toSave[0]->faltaAluno = $this->_faltaAlunoExpected;
169   - $toSave[1]->faltaAluno = $this->_faltaAlunoExpected;
170   -
171   - // Usa o mesmo mock que foi criado em setUp()
172   - $faltaComponenteMock = $this->_service->getFaltaAbstractDataMapper();
173   -
174   - $faltaComponenteMock->expects($this->at(0))
175   - ->method('save')
176   - ->with($toSave[0]);
177   -
178   - $faltaComponenteMock->expects($this->at(1))
179   - ->method('save')
180   - ->with($toSave[1]);
181   -
182   - // Salva as faltas
183   - $this->_service->saveFaltas();
184   - }
185   -
186   - public function testSituacaoAlunoComponentesCurricularesEmExame()
187   - {
188   - }
189   -
190   - public function testSituacaoAlunoComponentesCurricularesReprovado()
191   - {
192   - }
193   -
194   - public function testSituacaoAlunoComponentesCurricularesEmAndamento()
195   - {
196   - }
197   -
198   - public function testSituacaoAlunoComponentesCurricularesAprovado()
199   - {
200   - }
201   -
202   - public function testSituacaoAlunoFaltaComponenteCurricularReprovado()
203   - {
204   - }
205   -
206   - public function testSituacaoAlunoFaltaComponenteCurricularEmAndamento()
207   - {
208   - }
209   -
210   - public function testSituacaoAlunoFaltaComponenteCurricularAprovado()
211   - {
212   - }
213   -
214   - /**
215   - * @depends testSalvaAsFaltasNoBoletim
216   - */
217   - public function testSituacaoAlunoFaltaGeralEmAndamento()
218   - {
219   - $faltasGerais = array(
220   - new Avaliacao_Model_FaltaGeral(array(
221   - 'id' => 1,
222   - 'faltaAluno' => 1,
223   - 'quantidade' => 1,
224   - 'etapa' => 1
225   - )),
226   - new Avaliacao_Model_FaltaGeral(array(
227   - 'id' => 2,
228   - 'faltaAluno' => 1,
229   - 'quantidade' => 4,
230   - 'etapa' => 2
231   - )),
232   - new Avaliacao_Model_FaltaGeral(array(
233   - 'id' => 3,
234   - 'faltaAluno' => 1,
235   - 'quantidade' => 5,
236   - 'etapa' => 3
237   - ))
238   - );
239   -
240   - $faltaGeralMock = $this->getCleanMock('Avaliacao_Model_FaltaGeralDataMapper');
241   - $faltaGeralMock->expects($this->once())
242   - ->method('findAll')
243   - ->with(array(), array('faltaAluno' => 1))
244   - ->will($this->returnValue($faltasGerais));
245   -
246   - $this->_service->setFaltaAbstractDataMapper($faltaGeralMock);
247   -
248   - // Objeto de retorno esperado
249   - $expected = new stdClass();
250   - $expected->situacao = App_Model_MatriculaSituacao::EM_ANDAMENTO;
251   - $expected->tipoFalta = RegraAvaliacao_Model_TipoPresenca::GERAL;
252   - $expected->cargaHoraria = 800;
253   - $expected->cursoHoraFalta = (50 / 60);
254   - $expected->totalFaltas = 10;
255   - $expected->horasFaltas = (10 * $expected->cursoHoraFalta);
256   - $expected->porcentagemFalta = (($expected->horasFaltas / $expected->cargaHoraria) * 100);
257   - $expected->porcentagemPresenca = 100 - $expected->porcentagemFalta;
258   - $expected->porcentagemPresencaRegra = 75;
259   - $expected->componentesCurriculares = array();
260   -
261   - $presenca = $this->_service->getSituacaoFaltas();
262   - $this->assertEquals($expected, $presenca);
263   - }
264   -
265   - /**
266   - * @depends testSalvaAsFaltasNoBoletim
267   - */
268   - public function testSituacaoAlunoFaltaGeralReprovado()
269   - {
270   - $faltasGerais = array(
271   - new Avaliacao_Model_FaltaGeral(array(
272   - 'id' => 1,
273   - 'faltaAluno' => 1,
274   - 'quantidade' => 125,
275   - 'etapa' => 1
276   - )),
277   - new Avaliacao_Model_FaltaGeral(array(
278   - 'id' => 2,
279   - 'faltaAluno' => 1,
280   - 'quantidade' => 125,
281   - 'etapa' => 2
282   - )),
283   - new Avaliacao_Model_FaltaGeral(array(
284   - 'id' => 3,
285   - 'faltaAluno' => 1,
286   - 'quantidade' => 125,
287   - 'etapa' => 3
288   - )),
289   - new Avaliacao_Model_FaltaGeral(array(
290   - 'id' => 4,
291   - 'faltaAluno' => 1,
292   - 'quantidade' => 125,
293   - 'etapa' => 4
294   - ))
295   - );
296   -
297   - $faltaGeralMock = $this->getCleanMock('Avaliacao_Model_FaltaGeralDataMapper');
298   - $faltaGeralMock->expects($this->once())
299   - ->method('findAll')
300   - ->with(array(), array('faltaAluno' => 1))
301   - ->will($this->returnValue($faltasGerais));
302   -
303   - $this->_service->setFaltaAbstractDataMapper($faltaGeralMock);
304   -
305   - // Objeto de retorno esperado
306   - $expected = new stdClass();
307   - $expected->situacao = App_Model_MatriculaSituacao::REPROVADO;
308   - $expected->tipoFalta = RegraAvaliacao_Model_TipoPresenca::GERAL;
309   - $expected->cargaHoraria = 800;
310   - $expected->cursoHoraFalta = (50 / 60);
311   - $expected->totalFaltas = 500;
312   - $expected->horasFaltas = (500 * $expected->cursoHoraFalta);
313   - $expected->porcentagemFalta = (($expected->horasFaltas / $expected->cargaHoraria) * 100);
314   - $expected->porcentagemPresenca = 100 - $expected->porcentagemFalta;
315   - $expected->porcentagemPresencaRegra = 75;
316   - $expected->componentesCurriculares = array();
317   -
318   - $presenca = $this->_service->getSituacaoFaltas();
319   - $this->assertEquals($expected, $presenca);
320   - }
321   -
322   - /**
323   - * @depends testSalvaAsFaltasNoBoletim
324   - */
325   - public function testSituacaoAlunoFaltaGeralAprovado()
326   - {
327   - $faltasGerais = array(
328   - new Avaliacao_Model_FaltaGeral(array(
329   - 'id' => 1,
330   - 'faltaAluno' => 1,
331   - 'quantidade' => 1,
332   - 'etapa' => 1
333   - )),
334   - new Avaliacao_Model_FaltaGeral(array(
335   - 'id' => 2,
336   - 'faltaAluno' => 1,
337   - 'quantidade' => 4,
338   - 'etapa' => 2
339   - )),
340   - new Avaliacao_Model_FaltaGeral(array(
341   - 'id' => 3,
342   - 'faltaAluno' => 1,
343   - 'quantidade' => 5,
344   - 'etapa' => 3
345   - )),
346   - new Avaliacao_Model_FaltaGeral(array(
347   - 'id' => 4,
348   - 'faltaAluno' => 1,
349   - 'quantidade' => 0,
350   - 'etapa' => 4
351   - ))
352   - );
353   -
354   - $faltaGeralMock = $this->getCleanMock('Avaliacao_Model_FaltaGeralDataMapper');
355   - $faltaGeralMock->expects($this->once())
356   - ->method('findAll')
357   - ->with(array(), array('faltaAluno' => 1))
358   - ->will($this->returnValue($faltasGerais));
359   -
360   - $this->_service->setFaltaAbstractDataMapper($faltaGeralMock);
361   -
362   - // Objeto de retorno esperado
363   - $expected = new stdClass();
364   - $expected->situacao = App_Model_MatriculaSituacao::APROVADO;
365   - $expected->tipoFalta = RegraAvaliacao_Model_TipoPresenca::GERAL;
366   - $expected->cargaHoraria = 800;
367   - $expected->cursoHoraFalta = (50 / 60);
368   - $expected->totalFaltas = 10;
369   - $expected->horasFaltas = (10 * $expected->cursoHoraFalta);
370   - $expected->porcentagemFalta = (($expected->horasFaltas / $expected->cargaHoraria) * 100);
371   - $expected->porcentagemPresenca = 100 - $expected->porcentagemFalta;
372   - $expected->porcentagemPresencaRegra = 75;
373   - $expected->componentesCurriculares = array();
374   -
375   - $presenca = $this->_service->getSituacaoFaltas();
376   - $this->assertEquals($expected, $presenca);
377   - }
378   -
379   - public function testSituacaoAluno()
380   - {
381   - }
382   -
383   - public function testPromoverLancaExcecaoComSituacaoEmAndamento()
384   - {
385   - }
386   -
387   - public function testPromoverComProgressaoContinuada()
388   - {
389   - }
390   -
391   - public function testPromoverComProgressaoNaoContinuadaMediaPresencaAprovado()
392   - {
393   - }
394   -
395   - public function testPromoverComProgressaoNaoContinuadaMediaPresencaReprovado()
396   - {
397   - }
398   -
399   - public function testPromoverComProgressaoNaoContinuadaMediaAprovado()
400   - {
401   - }
402   -
403   - public function testPromoverComProgressaoNaoContinuadaMediaReprovado()
404   - {
405   - }
406   -
407   - public function testPromoverComProgressaoNaoContinuadaManualNaoConfirmadaLancaExcecao()
408   - {
409   - }
410   -
411   - public function testPromoverComProgressaoNaoContinuadaManualConfirmada()
412   - {
413   - }
414   -}
415 0 \ No newline at end of file
ieducar/modules/Avaliacao/_tests/Service/AllTests.php 0 → 100644
... ... @@ -0,0 +1,55 @@
  1 +<?php
  2 +
  3 +/**
  4 + * i-Educar - Sistema de gestão escolar
  5 + *
  6 + * Copyright (C) 2006 Prefeitura Municipal de Itajaí
  7 + * <ctima@itajai.sc.gov.br>
  8 + *
  9 + * Este programa é software livre; você pode redistribuí-lo e/ou modificá-lo
  10 + * sob os termos da Licença Pública Geral GNU conforme publicada pela Free
  11 + * Software Foundation; tanto a versão 2 da Licença, como (a seu critério)
  12 + * qualquer versão posterior.
  13 + *
  14 + * Este programa é distribuí­do na expectativa de que seja útil, porém, SEM
  15 + * NENHUMA GARANTIA; nem mesmo a garantia implí­cita de COMERCIABILIDADE OU
  16 + * ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA. Consulte a Licença Pública Geral
  17 + * do GNU para mais detalhes.
  18 + *
  19 + * Você deve ter recebido uma cópia da Licença Pública Geral do GNU junto
  20 + * com este programa; se não, escreva para a Free Software Foundation, Inc., no
  21 + * endereço 59 Temple Street, Suite 330, Boston, MA 02111-1307 USA.
  22 + *
  23 + * @author Eriksen Costa Paixão <eriksen.paixao_bs@cobra.com.br>
  24 + * @category i-Educar
  25 + * @license @@license@@
  26 + * @package Avaliacao
  27 + * @subpackage Tests
  28 + * @since Arquivo disponível desde a versão 1.1.0
  29 + * @version $Id$
  30 + */
  31 +
  32 +/**
  33 + * Avaliacao_AllTests class.
  34 + *
  35 + * Arquivo de definição de suíte para o módulo.
  36 + *
  37 + * @author Eriksen Costa Paixão <eriksen.paixao_bs@cobra.com.br>
  38 + * @category i-Educar
  39 + * @license @@license@@
  40 + * @package Avaliacao
  41 + * @subpackage Tests
  42 + * @since Classe disponível desde a versão 1.1.0
  43 + * @version @@package_version@@
  44 + */
  45 +class Avaliacao_Service_AllTests extends TestCollector
  46 +{
  47 + protected $_name = 'Suíte de testes do service Avaliacao_Service_Boletim do módulo Avaliacao';
  48 + protected $_file = __FILE__;
  49 +
  50 + public static function suite()
  51 + {
  52 + $instance = new self;
  53 + return $instance->addDirectoryTests();
  54 + }
  55 +}
0 56 \ No newline at end of file
... ...
ieducar/modules/Avaliacao/_tests/Service/FaltaAlunoTest.php 0 → 100644
... ... @@ -0,0 +1,75 @@
  1 +<?php
  2 +
  3 +/**
  4 + * i-Educar - Sistema de gestão escolar
  5 + *
  6 + * Copyright (C) 2006 Prefeitura Municipal de Itajaí
  7 + * <ctima@itajai.sc.gov.br>
  8 + *
  9 + * Este programa é software livre; você pode redistribuí-lo e/ou modificá-lo
  10 + * sob os termos da Licença Pública Geral GNU conforme publicada pela Free
  11 + * Software Foundation; tanto a versão 2 da Licença, como (a seu critério)
  12 + * qualquer versão posterior.
  13 + *
  14 + * Este programa é distribuí­do na expectativa de que seja útil, porém, SEM
  15 + * NENHUMA GARANTIA; nem mesmo a garantia implí­cita de COMERCIABILIDADE OU
  16 + * ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA. Consulte a Licença Pública Geral
  17 + * do GNU para mais detalhes.
  18 + *
  19 + * Você deve ter recebido uma cópia da Licença Pública Geral do GNU junto
  20 + * com este programa; se não, escreva para a Free Software Foundation, Inc., no
  21 + * endereço 59 Temple Street, Suite 330, Boston, MA 02111-1307 USA.
  22 + *
  23 + * @author Eriksen Costa Paixão <eriksen.paixao_bs@cobra.com.br>
  24 + * @category i-Educar
  25 + * @license @@license@@
  26 + * @package Avaliacao
  27 + * @subpackage UnitTests
  28 + * @since Arquivo disponível desde a versão 1.1.0
  29 + * @version $Id$
  30 + */
  31 +
  32 +require_once 'Avaliacao/_tests/Service/TestCommon.php';
  33 +
  34 +/**
  35 + * Avaliacao_Service_FaltaAlunoTest class.
  36 + *
  37 + * @author Eriksen Costa Paixão <eriksen.paixao_bs@cobra.com.br>
  38 + * @category i-Educar
  39 + * @license @@license@@
  40 + * @package Avaliacao
  41 + * @subpackage UnitTests
  42 + * @since Classe disponível desde a versão 1.1.0
  43 + * @version @@package_version@@
  44 + */
  45 +class Avaliacao_Service_FaltaAlunoTest extends Avaliacao_Service_TestCommon
  46 +{
  47 + public function testCriaNovaInstanciaDeFaltaAluno()
  48 + {
  49 + $faltaAluno = $this->_getConfigOption('faltaAluno', 'instance');
  50 +
  51 + $faltaSave = clone $faltaAluno;
  52 + $faltaSave->id = NULL;
  53 +
  54 + // Configura mock para Avaliacao_Model_FaltaAlunoDataMapper
  55 + $mock = $this->getCleanMock('Avaliacao_Model_FaltaAlunoDataMapper');
  56 + $mock->expects($this->at(0))
  57 + ->method('findAll')
  58 + ->with(array(), array('matricula' => $this->_getConfigOption('matricula', 'cod_matricula')))
  59 + ->will($this->returnValue(array()));
  60 +
  61 + $mock->expects($this->at(1))
  62 + ->method('save')
  63 + ->with($faltaSave)
  64 + ->will($this->returnValue(TRUE));
  65 +
  66 + $mock->expects($this->at(2))
  67 + ->method('findAll')
  68 + ->with(array(), array('matricula' => $this->_getConfigOption('matricula', 'cod_matricula')))
  69 + ->will($this->returnValue(array($faltaAluno)));
  70 +
  71 + $this->_setFaltaAlunoDataMapperMock($mock);
  72 +
  73 + $service = $this->_getServiceInstance();
  74 + }
  75 +}
0 76 \ No newline at end of file
... ...
ieducar/modules/Avaliacao/_tests/Service/FaltaCommon.php 0 → 100644
... ... @@ -0,0 +1,110 @@
  1 +<?php
  2 +
  3 +/**
  4 + * i-Educar - Sistema de gestão escolar
  5 + *
  6 + * Copyright (C) 2006 Prefeitura Municipal de Itajaí
  7 + * <ctima@itajai.sc.gov.br>
  8 + *
  9 + * Este programa é software livre; você pode redistribuí-lo e/ou modificá-lo
  10 + * sob os termos da Licença Pública Geral GNU conforme publicada pela Free
  11 + * Software Foundation; tanto a versão 2 da Licença, como (a seu critério)
  12 + * qualquer versão posterior.
  13 + *
  14 + * Este programa é distribuí­do na expectativa de que seja útil, porém, SEM
  15 + * NENHUMA GARANTIA; nem mesmo a garantia implí­cita de COMERCIABILIDADE OU
  16 + * ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA. Consulte a Licença Pública Geral
  17 + * do GNU para mais detalhes.
  18 + *
  19 + * Você deve ter recebido uma cópia da Licença Pública Geral do GNU junto
  20 + * com este programa; se não, escreva para a Free Software Foundation, Inc., no
  21 + * endereço 59 Temple Street, Suite 330, Boston, MA 02111-1307 USA.
  22 + *
  23 + * @author Eriksen Costa Paixão <eriksen.paixao_bs@cobra.com.br>
  24 + * @category i-Educar
  25 + * @license @@license@@
  26 + * @package Avaliacao
  27 + * @subpackage UnitTests
  28 + * @since Arquivo disponível desde a versão 1.1.0
  29 + * @version $Id$
  30 + */
  31 +
  32 +require_once 'Avaliacao/_tests/Service/TestCommon.php';
  33 +
  34 +/**
  35 + * Avaliacao_Service_FaltaCommon abstract class.
  36 + *
  37 + * @author Eriksen Costa Paixão <eriksen.paixao_bs@cobra.com.br>
  38 + * @category i-Educar
  39 + * @license @@license@@
  40 + * @package Avaliacao
  41 + * @subpackage UnitTests
  42 + * @since Classe disponível desde a versão 1.1.0
  43 + * @version @@package_version@@
  44 + */
  45 +abstract class Avaliacao_Service_FaltaCommon extends Avaliacao_Service_TestCommon
  46 +{
  47 + /**
  48 + * @return Avaliacao_Model_FaltaComponente
  49 + */
  50 + protected abstract function _getFaltaTestInstanciaDeFaltaERegistradaApenasUmaVezNoBoletim();
  51 +
  52 + /**
  53 + * @return Avaliacao_Model_FaltaComponente
  54 + */
  55 + protected abstract function _getFaltaTestAdicionaFaltaNoBoletim();
  56 +
  57 + /**
  58 + * Realiza asserções específicas para os validadores de uma instância de
  59 + * Avaliacao_Model_FaltaAbstract
  60 + */
  61 + protected abstract function _testAdicionaFaltaNoBoletimVerificaValidadores(Avaliacao_Model_FaltaAbstract $falta);
  62 +
  63 + /**
  64 + * @see Avaliacao_Service_FaltaCommon#_getFaltaTestInstanciaDeFaltaERegistradaApenasUmaVezNoBoletim()
  65 + */
  66 + public function testInstanciaDeFaltaERegistradaApenasUmaVezNoBoletim()
  67 + {
  68 + $service = $this->_getServiceInstance();
  69 +
  70 + $falta = $this->_getFaltaTestInstanciaDeFaltaERegistradaApenasUmaVezNoBoletim();
  71 +
  72 + // Atribuição simples
  73 + $service->addFalta($falta)
  74 + ->addFalta($falta);
  75 +
  76 + $this->assertEquals(1, count($service->getFaltas()));
  77 +
  78 + // Via atribuição em lote
  79 + $falta = clone $falta;
  80 + $service->addFaltas(array($falta, $falta, $falta));
  81 +
  82 + $this->assertEquals(2, count($service->getFaltas()));
  83 + }
  84 +
  85 + /**
  86 + * @see Avaliacao_Service_FaltaCommon#_getFaltaTestAdicionaFaltaNoBoletim()
  87 + * @see Avaliacao_Service_FaltaCommon#_testAdicionaFaltaNoBoletimVerificaValidadores()
  88 + */
  89 + public function testAdicionaFaltaNoBoletim()
  90 + {
  91 + $service = $this->_getServiceInstance();
  92 +
  93 + $falta = $this->_getFaltaTestAdicionaFaltaNoBoletim();
  94 +
  95 + $faltaOriginal = clone $falta;
  96 + $service->addFalta($falta);
  97 +
  98 + $faltas = $service->getFaltas();
  99 + $serviceFalta = array_shift($faltas);
  100 +
  101 + // Valores declarados explicitamente, verificação explícita
  102 + $this->assertEquals($faltaOriginal->quantidade, $serviceFalta->quantidade);
  103 +
  104 + // Valores populados pelo service
  105 + $this->assertNotEquals($faltaOriginal->etapa, $serviceFalta->etapa);
  106 +
  107 + // Validadores injetados no objeto
  108 + $this->_testAdicionaFaltaNoBoletimVerificaValidadores($serviceFalta);
  109 + }
  110 +}
0 111 \ No newline at end of file
... ...
ieducar/modules/Avaliacao/_tests/Service/FaltaComponenteSituacaoTest.php 0 → 100644
... ... @@ -0,0 +1,515 @@
  1 +<?php
  2 +
  3 +/**
  4 + * i-Educar - Sistema de gestão escolar
  5 + *
  6 + * Copyright (C) 2006 Prefeitura Municipal de Itajaí
  7 + * <ctima@itajai.sc.gov.br>
  8 + *
  9 + * Este programa é software livre; você pode redistribuí-lo e/ou modificá-lo
  10 + * sob os termos da Licença Pública Geral GNU conforme publicada pela Free
  11 + * Software Foundation; tanto a versão 2 da Licença, como (a seu critério)
  12 + * qualquer versão posterior.
  13 + *
  14 + * Este programa é distribuí­do na expectativa de que seja útil, porém, SEM
  15 + * NENHUMA GARANTIA; nem mesmo a garantia implí­cita de COMERCIABILIDADE OU
  16 + * ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA. Consulte a Licença Pública Geral
  17 + * do GNU para mais detalhes.
  18 + *
  19 + * Você deve ter recebido uma cópia da Licença Pública Geral do GNU junto
  20 + * com este programa; se não, escreva para a Free Software Foundation, Inc., no
  21 + * endereço 59 Temple Street, Suite 330, Boston, MA 02111-1307 USA.
  22 + *
  23 + * @author Eriksen Costa Paixão <eriksen.paixao_bs@cobra.com.br>
  24 + * @category i-Educar
  25 + * @license @@license@@
  26 + * @package Avaliacao
  27 + * @subpackage UnitTests
  28 + * @since Arquivo disponível desde a versão 1.1.0
  29 + * @version $Id$
  30 + */
  31 +
  32 +require_once 'Avaliacao/_tests/Service/FaltaSituacaoCommon.php';
  33 +
  34 +/**
  35 + * Avaliacao_Service_FaltaComponenteSituacaoTest class.
  36 + *
  37 + * @author Eriksen Costa Paixão <eriksen.paixao_bs@cobra.com.br>
  38 + * @category i-Educar
  39 + * @license @@license@@
  40 + * @package Avaliacao
  41 + * @subpackage UnitTests
  42 + * @since Classe disponível desde a versão 1.1.0
  43 + * @version @@package_version@@
  44 + */
  45 +class Avaliacao_Service_FaltaComponenteSituacaoTest extends Avaliacao_Service_FaltaSituacaoCommon
  46 +{
  47 + protected function setUp()
  48 + {
  49 + $this->_setRegraOption('tipoPresenca', RegraAvaliacao_Model_TipoPresenca::POR_COMPONENTE);
  50 + parent::setUp();
  51 + }
  52 +
  53 + public function testSituacaoFaltasEmAndamento()
  54 + {
  55 + $faltaAluno = $this->_getConfigOption('faltaAluno', 'instance');
  56 + $this->_setUpFaltaAbstractDataMapperMock($faltaAluno, array());
  57 +
  58 + $expected = $this->_getExpectedSituacaoFaltas();
  59 +
  60 + // Configura a expectativa
  61 + $expected->situacao = App_Model_MatriculaSituacao::EM_ANDAMENTO;
  62 + $expected->porcentagemPresenca = 100;
  63 +
  64 + $service = $this->_getServiceInstance();
  65 +
  66 + $this->assertEquals($expected, $service->getSituacaoFaltas());
  67 + }
  68 +
  69 + public function testSituacaoFaltasEmAndamentoUmComponenteAprovadoDeQuatroTotais()
  70 + {
  71 + $faltaAluno = $this->_getConfigOption('faltaAluno', 'instance');
  72 + $componentes = $this->_getConfigOptions('escolaSerieDisciplina');
  73 +
  74 + $faltas = array(
  75 + new Avaliacao_Model_FaltaComponente(array(
  76 + 'id' => 1,
  77 + 'componenteCurricular' => 1,
  78 + 'quantidade' => 5,
  79 + 'etapa' => 1
  80 + )),
  81 + new Avaliacao_Model_FaltaComponente(array(
  82 + 'id' => 2,
  83 + 'componenteCurricular' => 1,
  84 + 'quantidade' => 5,
  85 + 'etapa' => 2
  86 + )),
  87 + new Avaliacao_Model_FaltaComponente(array(
  88 + 'id' => 3,
  89 + 'componenteCurricular' => 1,
  90 + 'quantidade' => 5,
  91 + 'etapa' => 3
  92 + )),
  93 + new Avaliacao_Model_FaltaComponente(array(
  94 + 'id' => 4,
  95 + 'componenteCurricular' => 1,
  96 + 'quantidade' => 5,
  97 + 'etapa' => 4
  98 + )),
  99 + );
  100 +
  101 + $this->_setUpFaltaAbstractDataMapperMock($faltaAluno, $faltas);
  102 +
  103 + $expected = $this->_getExpectedSituacaoFaltas();
  104 +
  105 + // Configura a expectativa
  106 + $expected->situacao = App_Model_MatriculaSituacao::EM_ANDAMENTO;
  107 +
  108 + $expected->totalFaltas = array_sum(CoreExt_Entity::entityFilterAttr($faltas, 'id', 'quantidade'));
  109 + $expected->horasFaltas = $expected->totalFaltas * $this->_getConfigOption('curso', 'hora_falta');
  110 + $expected->porcentagemFalta = ($expected->horasFaltas / $this->_getConfigOption('serie', 'carga_horaria') * 100);
  111 + $expected->porcentagemPresenca = 100 - $expected->porcentagemFalta;
  112 +
  113 + // Configura expectativa para o componente de id '1'
  114 + $componenteHoraFalta =
  115 + array_sum(CoreExt_Entity::entityFilterAttr($faltas, 'id', 'quantidade')) *
  116 + $this->_getConfigOption('curso', 'hora_falta');
  117 +
  118 + $componentePorcentagemFalta =
  119 + ($componenteHoraFalta / $componentes[0]['carga_horaria']) * 100;
  120 +
  121 + $componentePorcentagemPresenca = 100 - $componentePorcentagemFalta;
  122 +
  123 + $expected->componentesCurriculares[1] = new stdClass();
  124 + $expected->componentesCurriculares[1]->situacao = App_Model_MatriculaSituacao::APROVADO;
  125 + $expected->componentesCurriculares[1]->horasFaltas = $componenteHoraFalta;
  126 + $expected->componentesCurriculares[1]->porcentagemFalta = $componentePorcentagemFalta;
  127 + $expected->componentesCurriculares[1]->porcentagemPresenca = $componentePorcentagemPresenca;
  128 +
  129 + $service = $this->_getServiceInstance();
  130 +
  131 + $this->assertEquals($expected, $service->getSituacaoFaltas());
  132 + }
  133 +
  134 + public function testSituacaoFaltasAprovado()
  135 + {
  136 + $faltaAluno = $this->_getConfigOption('faltaAluno', 'instance');
  137 + $componentes = $this->_getConfigOptions('escolaSerieDisciplina');
  138 +
  139 + $faltas = array(
  140 + // Matemática
  141 + new Avaliacao_Model_FaltaComponente(array(
  142 + 'id' => 1,
  143 + 'componenteCurricular' => 1,
  144 + 'quantidade' => 5,
  145 + 'etapa' => 1
  146 + )),
  147 + new Avaliacao_Model_FaltaComponente(array(
  148 + 'id' => 2,
  149 + 'componenteCurricular' => 1,
  150 + 'quantidade' => 5,
  151 + 'etapa' => 2
  152 + )),
  153 + new Avaliacao_Model_FaltaComponente(array(
  154 + 'id' => 3,
  155 + 'componenteCurricular' => 1,
  156 + 'quantidade' => 5,
  157 + 'etapa' => 3
  158 + )),
  159 + new Avaliacao_Model_FaltaComponente(array(
  160 + 'id' => 4,
  161 + 'componenteCurricular' => 1,
  162 + 'quantidade' => 5,
  163 + 'etapa' => 4
  164 + )),
  165 + // Português
  166 + new Avaliacao_Model_FaltaComponente(array(
  167 + 'id' => 5,
  168 + 'componenteCurricular' => 2,
  169 + 'quantidade' => 5,
  170 + 'etapa' => 1
  171 + )),
  172 + new Avaliacao_Model_FaltaComponente(array(
  173 + 'id' => 6,
  174 + 'componenteCurricular' => 2,
  175 + 'quantidade' => 5,
  176 + 'etapa' => 2
  177 + )),
  178 + new Avaliacao_Model_FaltaComponente(array(
  179 + 'id' => 7,
  180 + 'componenteCurricular' => 2,
  181 + 'quantidade' => 5,
  182 + 'etapa' => 3
  183 + )),
  184 + new Avaliacao_Model_FaltaComponente(array(
  185 + 'id' => 8,
  186 + 'componenteCurricular' => 2,
  187 + 'quantidade' => 5,
  188 + 'etapa' => 4
  189 + )),
  190 + // Ciências
  191 + new Avaliacao_Model_FaltaComponente(array(
  192 + 'id' => 9,
  193 + 'componenteCurricular' => 3,
  194 + 'quantidade' => 5,
  195 + 'etapa' => 1
  196 + )),
  197 + new Avaliacao_Model_FaltaComponente(array(
  198 + 'id' => 10,
  199 + 'componenteCurricular' => 3,
  200 + 'quantidade' => 5,
  201 + 'etapa' => 2
  202 + )),
  203 + new Avaliacao_Model_FaltaComponente(array(
  204 + 'id' => 11,
  205 + 'componenteCurricular' => 3,
  206 + 'quantidade' => 5,
  207 + 'etapa' => 3
  208 + )),
  209 + new Avaliacao_Model_FaltaComponente(array(
  210 + 'id' => 12,
  211 + 'componenteCurricular' => 3,
  212 + 'quantidade' => 5,
  213 + 'etapa' => 4
  214 + )),
  215 + // Fisica
  216 + new Avaliacao_Model_FaltaComponente(array(
  217 + 'id' => 13,
  218 + 'componenteCurricular' => 4,
  219 + 'quantidade' => 5,
  220 + 'etapa' => 1
  221 + )),
  222 + new Avaliacao_Model_FaltaComponente(array(
  223 + 'id' => 14,
  224 + 'componenteCurricular' => 4,
  225 + 'quantidade' => 5,
  226 + 'etapa' => 2
  227 + )),
  228 + new Avaliacao_Model_FaltaComponente(array(
  229 + 'id' => 15,
  230 + 'componenteCurricular' => 4,
  231 + 'quantidade' => 5,
  232 + 'etapa' => 3
  233 + )),
  234 + new Avaliacao_Model_FaltaComponente(array(
  235 + 'id' => 16,
  236 + 'componenteCurricular' => 4,
  237 + 'quantidade' => 5,
  238 + 'etapa' => 4
  239 + )),
  240 + );
  241 +
  242 + $this->_setUpFaltaAbstractDataMapperMock($faltaAluno, $faltas);
  243 +
  244 + $expected = $this->_getExpectedSituacaoFaltas();
  245 +
  246 + // Configura a expectativa
  247 + $expected->situacao = App_Model_MatriculaSituacao::APROVADO;
  248 +
  249 + $expected->totalFaltas = array_sum(CoreExt_Entity::entityFilterAttr($faltas, 'id', 'quantidade'));
  250 + $expected->horasFaltas = $expected->totalFaltas * $this->_getConfigOption('curso', 'hora_falta');
  251 + $expected->porcentagemFalta = ($expected->horasFaltas / $this->_getConfigOption('serie', 'carga_horaria') * 100);
  252 + $expected->porcentagemPresenca = 100 - $expected->porcentagemFalta;
  253 +
  254 + // Configura expectativa para o componente de id '1'
  255 + $componenteHoraFalta =
  256 + array_sum(CoreExt_Entity::entityFilterAttr(array_slice($faltas, 0, 4), 'id', 'quantidade')) *
  257 + $this->_getConfigOption('curso', 'hora_falta');
  258 +
  259 + $componentePorcentagemFalta =
  260 + ($componenteHoraFalta / $componentes[0]['carga_horaria']) * 100;
  261 +
  262 + $componentePorcentagemPresenca = 100 - $componentePorcentagemFalta;
  263 +
  264 + $expected->componentesCurriculares[1] = new stdClass();
  265 + $expected->componentesCurriculares[1]->situacao = App_Model_MatriculaSituacao::APROVADO;
  266 + $expected->componentesCurriculares[1]->horasFaltas = $componenteHoraFalta;
  267 + $expected->componentesCurriculares[1]->porcentagemFalta = $componentePorcentagemFalta;
  268 + $expected->componentesCurriculares[1]->porcentagemPresenca = $componentePorcentagemPresenca;
  269 +
  270 + // Configura expectativa para o componente de id '2'
  271 + $componenteHoraFalta =
  272 + array_sum(CoreExt_Entity::entityFilterAttr(array_slice($faltas, 4, 4), 'id', 'quantidade')) *
  273 + $this->_getConfigOption('curso', 'hora_falta');
  274 +
  275 + $componentePorcentagemFalta =
  276 + ($componenteHoraFalta / $componentes[1]['carga_horaria']) * 100;
  277 +
  278 + $componentePorcentagemPresenca = 100 - $componentePorcentagemFalta;
  279 +
  280 + $expected->componentesCurriculares[2] = new stdClass();
  281 + $expected->componentesCurriculares[2]->situacao = App_Model_MatriculaSituacao::APROVADO;
  282 + $expected->componentesCurriculares[2]->horasFaltas = $componenteHoraFalta;
  283 + $expected->componentesCurriculares[2]->porcentagemFalta = $componentePorcentagemFalta;
  284 + $expected->componentesCurriculares[2]->porcentagemPresenca = $componentePorcentagemPresenca;
  285 +
  286 + // Configura expectativa para o componente de id '3'
  287 + $componenteHoraFalta =
  288 + array_sum(CoreExt_Entity::entityFilterAttr(array_slice($faltas, 8, 4), 'id', 'quantidade')) *
  289 + $this->_getConfigOption('curso', 'hora_falta');
  290 +
  291 + $componentePorcentagemFalta =
  292 + ($componenteHoraFalta / $componentes[2]['carga_horaria']) * 100;
  293 +
  294 + $componentePorcentagemPresenca = 100 - $componentePorcentagemFalta;
  295 +
  296 + $expected->componentesCurriculares[3] = new stdClass();
  297 + $expected->componentesCurriculares[3]->situacao = App_Model_MatriculaSituacao::APROVADO;
  298 + $expected->componentesCurriculares[3]->horasFaltas = $componenteHoraFalta;
  299 + $expected->componentesCurriculares[3]->porcentagemFalta = $componentePorcentagemFalta;
  300 + $expected->componentesCurriculares[3]->porcentagemPresenca = $componentePorcentagemPresenca;
  301 +
  302 + // Configura expectativa para o componente de id '4'
  303 + $componenteHoraFalta =
  304 + array_sum(CoreExt_Entity::entityFilterAttr(array_slice($faltas, 12, 4), 'id', 'quantidade')) *
  305 + $this->_getConfigOption('curso', 'hora_falta');
  306 +
  307 + $componentePorcentagemFalta =
  308 + ($componenteHoraFalta / $componentes[3]['carga_horaria']) * 100;
  309 +
  310 + $componentePorcentagemPresenca = 100 - $componentePorcentagemFalta;
  311 +
  312 + $expected->componentesCurriculares[4] = new stdClass();
  313 + $expected->componentesCurriculares[4]->situacao = App_Model_MatriculaSituacao::APROVADO;
  314 + $expected->componentesCurriculares[4]->horasFaltas = $componenteHoraFalta;
  315 + $expected->componentesCurriculares[4]->porcentagemFalta = $componentePorcentagemFalta;
  316 + $expected->componentesCurriculares[4]->porcentagemPresenca = $componentePorcentagemPresenca;
  317 +
  318 + $service = $this->_getServiceInstance();
  319 +
  320 + $this->assertEquals($expected, $service->getSituacaoFaltas());
  321 + }
  322 +
  323 + /**
  324 + * Faltas para componentes funcionam usam os mesmos critérios das faltas
  325 + * gerais para a definição de aprovado ou reprovado: presença geral.
  326 + */
  327 + public function testSituacaoFaltasReprovado()
  328 + {
  329 + $faltaAluno = $this->_getConfigOption('faltaAluno', 'instance');
  330 + $componentes = $this->_getConfigOptions('escolaSerieDisciplina');
  331 +
  332 + $faltas = array(
  333 + // Matemática
  334 + new Avaliacao_Model_FaltaComponente(array(
  335 + 'id' => 1,
  336 + 'componenteCurricular' => 1,
  337 + 'quantidade' => 60,
  338 + 'etapa' => 1
  339 + )),
  340 + new Avaliacao_Model_FaltaComponente(array(
  341 + 'id' => 2,
  342 + 'componenteCurricular' => 1,
  343 + 'quantidade' => 60,
  344 + 'etapa' => 2
  345 + )),
  346 + new Avaliacao_Model_FaltaComponente(array(
  347 + 'id' => 3,
  348 + 'componenteCurricular' => 1,
  349 + 'quantidade' => 60,
  350 + 'etapa' => 3
  351 + )),
  352 + new Avaliacao_Model_FaltaComponente(array(
  353 + 'id' => 4,
  354 + 'componenteCurricular' => 1,
  355 + 'quantidade' => 55,
  356 + 'etapa' => 4
  357 + )),
  358 + // Português
  359 + new Avaliacao_Model_FaltaComponente(array(
  360 + 'id' => 5,
  361 + 'componenteCurricular' => 2,
  362 + 'quantidade' => 5,
  363 + 'etapa' => 1
  364 + )),
  365 + new Avaliacao_Model_FaltaComponente(array(
  366 + 'id' => 6,
  367 + 'componenteCurricular' => 2,
  368 + 'quantidade' => 5,
  369 + 'etapa' => 2
  370 + )),
  371 + new Avaliacao_Model_FaltaComponente(array(
  372 + 'id' => 7,
  373 + 'componenteCurricular' => 2,
  374 + 'quantidade' => 5,
  375 + 'etapa' => 3
  376 + )),
  377 + new Avaliacao_Model_FaltaComponente(array(
  378 + 'id' => 8,
  379 + 'componenteCurricular' => 2,
  380 + 'quantidade' => 5,
  381 + 'etapa' => 4
  382 + )),
  383 + // Ciências
  384 + new Avaliacao_Model_FaltaComponente(array(
  385 + 'id' => 9,
  386 + 'componenteCurricular' => 3,
  387 + 'quantidade' => 5,
  388 + 'etapa' => 1
  389 + )),
  390 + new Avaliacao_Model_FaltaComponente(array(
  391 + 'id' => 10,
  392 + 'componenteCurricular' => 3,
  393 + 'quantidade' => 5,
  394 + 'etapa' => 2
  395 + )),
  396 + new Avaliacao_Model_FaltaComponente(array(
  397 + 'id' => 11,
  398 + 'componenteCurricular' => 3,
  399 + 'quantidade' => 5,
  400 + 'etapa' => 3
  401 + )),
  402 + new Avaliacao_Model_FaltaComponente(array(
  403 + 'id' => 12,
  404 + 'componenteCurricular' => 3,
  405 + 'quantidade' => 5,
  406 + 'etapa' => 4
  407 + )),
  408 + // Fisica
  409 + new Avaliacao_Model_FaltaComponente(array(
  410 + 'id' => 13,
  411 + 'componenteCurricular' => 4,
  412 + 'quantidade' => 5,
  413 + 'etapa' => 1
  414 + )),
  415 + new Avaliacao_Model_FaltaComponente(array(
  416 + 'id' => 14,
  417 + 'componenteCurricular' => 4,
  418 + 'quantidade' => 5,
  419 + 'etapa' => 2
  420 + )),
  421 + new Avaliacao_Model_FaltaComponente(array(
  422 + 'id' => 15,
  423 + 'componenteCurricular' => 4,
  424 + 'quantidade' => 5,
  425 + 'etapa' => 3
  426 + )),
  427 + new Avaliacao_Model_FaltaComponente(array(
  428 + 'id' => 16,
  429 + 'componenteCurricular' => 4,
  430 + 'quantidade' => 5,
  431 + 'etapa' => 4
  432 + )),
  433 + );
  434 +
  435 + $this->_setUpFaltaAbstractDataMapperMock($faltaAluno, $faltas);
  436 +
  437 + $expected = $this->_getExpectedSituacaoFaltas();
  438 +
  439 + // Configura a expectativa
  440 + $expected->situacao = App_Model_MatriculaSituacao::REPROVADO;
  441 +
  442 + $expected->totalFaltas = array_sum(CoreExt_Entity::entityFilterAttr($faltas, 'id', 'quantidade'));
  443 + $expected->horasFaltas = $expected->totalFaltas * $this->_getConfigOption('curso', 'hora_falta');
  444 + $expected->porcentagemFalta = ($expected->horasFaltas / $this->_getConfigOption('serie', 'carga_horaria') * 100);
  445 + $expected->porcentagemPresenca = 100 - $expected->porcentagemFalta;
  446 +
  447 + // Configura expectativa para o componente de id '1'
  448 + $componenteHoraFalta =
  449 + array_sum(CoreExt_Entity::entityFilterAttr(array_slice($faltas, 0, 4), 'id', 'quantidade')) *
  450 + $this->_getConfigOption('curso', 'hora_falta');
  451 +
  452 + $componentePorcentagemFalta =
  453 + ($componenteHoraFalta / $componentes[0]['carga_horaria']) * 100;
  454 +
  455 + $componentePorcentagemPresenca = 100 - $componentePorcentagemFalta;
  456 +
  457 + $expected->componentesCurriculares[1] = new stdClass();
  458 + $expected->componentesCurriculares[1]->situacao = App_Model_MatriculaSituacao::REPROVADO;
  459 + $expected->componentesCurriculares[1]->horasFaltas = $componenteHoraFalta;
  460 + $expected->componentesCurriculares[1]->porcentagemFalta = $componentePorcentagemFalta;
  461 + $expected->componentesCurriculares[1]->porcentagemPresenca = $componentePorcentagemPresenca;
  462 +
  463 + // Configura expectativa para o componente de id '2'
  464 + $componenteHoraFalta =
  465 + array_sum(CoreExt_Entity::entityFilterAttr(array_slice($faltas, 4, 4), 'id', 'quantidade')) *
  466 + $this->_getConfigOption('curso', 'hora_falta');
  467 +
  468 + $componentePorcentagemFalta =
  469 + ($componenteHoraFalta / $componentes[1]['carga_horaria']) * 100;
  470 +
  471 + $componentePorcentagemPresenca = 100 - $componentePorcentagemFalta;
  472 +
  473 + $expected->componentesCurriculares[2] = new stdClass();
  474 + $expected->componentesCurriculares[2]->situacao = App_Model_MatriculaSituacao::APROVADO;
  475 + $expected->componentesCurriculares[2]->horasFaltas = $componenteHoraFalta;
  476 + $expected->componentesCurriculares[2]->porcentagemFalta = $componentePorcentagemFalta;
  477 + $expected->componentesCurriculares[2]->porcentagemPresenca = $componentePorcentagemPresenca;
  478 +
  479 + // Configura expectativa para o componente de id '3'
  480 + $componenteHoraFalta =
  481 + array_sum(CoreExt_Entity::entityFilterAttr(array_slice($faltas, 8, 4), 'id', 'quantidade')) *
  482 + $this->_getConfigOption('curso', 'hora_falta');
  483 +
  484 + $componentePorcentagemFalta =
  485 + ($componenteHoraFalta / $componentes[2]['carga_horaria']) * 100;
  486 +
  487 + $componentePorcentagemPresenca = 100 - $componentePorcentagemFalta;
  488 +
  489 + $expected->componentesCurriculares[3] = new stdClass();
  490 + $expected->componentesCurriculares[3]->situacao = App_Model_MatriculaSituacao::APROVADO;
  491 + $expected->componentesCurriculares[3]->horasFaltas = $componenteHoraFalta;
  492 + $expected->componentesCurriculares[3]->porcentagemFalta = $componentePorcentagemFalta;
  493 + $expected->componentesCurriculares[3]->porcentagemPresenca = $componentePorcentagemPresenca;
  494 +
  495 + // Configura expectativa para o componente de id '4'
  496 + $componenteHoraFalta =
  497 + array_sum(CoreExt_Entity::entityFilterAttr(array_slice($faltas, 12, 4), 'id', 'quantidade')) *
  498 + $this->_getConfigOption('curso', 'hora_falta');
  499 +
  500 + $componentePorcentagemFalta =
  501 + ($componenteHoraFalta / $componentes[3]['carga_horaria']) * 100;
  502 +
  503 + $componentePorcentagemPresenca = 100 - $componentePorcentagemFalta;
  504 +
  505 + $expected->componentesCurriculares[4] = new stdClass();
  506 + $expected->componentesCurriculares[4]->situacao = App_Model_MatriculaSituacao::APROVADO;
  507 + $expected->componentesCurriculares[4]->horasFaltas = $componenteHoraFalta;
  508 + $expected->componentesCurriculares[4]->porcentagemFalta = $componentePorcentagemFalta;
  509 + $expected->componentesCurriculares[4]->porcentagemPresenca = $componentePorcentagemPresenca;
  510 +
  511 + $service = $this->_getServiceInstance();
  512 +
  513 + $this->assertEquals($expected, $service->getSituacaoFaltas());
  514 + }
  515 +}
0 516 \ No newline at end of file
... ...
ieducar/modules/Avaliacao/_tests/Service/FaltaComponenteTest.php 0 → 100644
... ... @@ -0,0 +1,291 @@
  1 +<?php
  2 +
  3 +/**
  4 + * i-Educar - Sistema de gestão escolar
  5 + *
  6 + * Copyright (C) 2006 Prefeitura Municipal de Itajaí
  7 + * <ctima@itajai.sc.gov.br>
  8 + *
  9 + * Este programa é software livre; você pode redistribuí-lo e/ou modificá-lo
  10 + * sob os termos da Licença Pública Geral GNU conforme publicada pela Free
  11 + * Software Foundation; tanto a versão 2 da Licença, como (a seu critério)
  12 + * qualquer versão posterior.
  13 + *
  14 + * Este programa é distribuí­do na expectativa de que seja útil, porém, SEM
  15 + * NENHUMA GARANTIA; nem mesmo a garantia implí­cita de COMERCIABILIDADE OU
  16 + * ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA. Consulte a Licença Pública Geral
  17 + * do GNU para mais detalhes.
  18 + *
  19 + * Você deve ter recebido uma cópia da Licença Pública Geral do GNU junto
  20 + * com este programa; se não, escreva para a Free Software Foundation, Inc., no
  21 + * endereço 59 Temple Street, Suite 330, Boston, MA 02111-1307 USA.
  22 + *
  23 + * @author Eriksen Costa Paixão <eriksen.paixao_bs@cobra.com.br>
  24 + * @category i-Educar
  25 + * @license @@license@@
  26 + * @package Avaliacao
  27 + * @subpackage UnitTests
  28 + * @since Arquivo disponível desde a versão 1.1.0
  29 + * @version $Id$
  30 + */
  31 +
  32 +require_once 'Avaliacao/_tests/Service/FaltaCommon.php';
  33 +
  34 +/**
  35 + * Avaliacao_Service_FaltaComponenteTest class.
  36 + *
  37 + * @author Eriksen Costa Paixão <eriksen.paixao_bs@cobra.com.br>
  38 + * @category i-Educar
  39 + * @license @@license@@
  40 + * @package Avaliacao
  41 + * @subpackage UnitTests
  42 + * @since Classe disponível desde a versão 1.1.0
  43 + * @version @@package_version@@
  44 + */
  45 +class Avaliacao_Service_FaltaComponenteTest extends Avaliacao_Service_FaltaCommon
  46 +{
  47 + protected function setUp()
  48 + {
  49 + $this->_setRegraOption('tipoPresenca', RegraAvaliacao_Model_TipoPresenca::POR_COMPONENTE);
  50 + parent::setUp();
  51 + }
  52 +
  53 + protected function _getFaltaTestInstanciaDeFaltaERegistradaApenasUmaVezNoBoletim()
  54 + {
  55 + return new Avaliacao_Model_FaltaComponente(array(
  56 + 'componenteCurricular' => 1,
  57 + 'quantidade' => 5
  58 + ));
  59 + }
  60 +
  61 + protected function _getFaltaTestAdicionaFaltaNoBoletim()
  62 + {
  63 + return new Avaliacao_Model_FaltaComponente(array(
  64 + 'componenteCurricular' => 1,
  65 + 'quantidade' => 10
  66 + ));
  67 + }
  68 +
  69 + protected function _testAdicionaFaltaNoBoletimVerificaValidadores(Avaliacao_Model_FaltaAbstract $falta)
  70 + {
  71 + $this->assertEquals(1, $falta->get('componenteCurricular'));
  72 + $this->assertEquals(1, $falta->etapa);
  73 + $this->assertEquals(10, $falta->quantidade);
  74 +
  75 + $validators = $falta->getValidatorCollection();
  76 + $this->assertType('CoreExt_Validate_Choice', $validators['componenteCurricular']);
  77 + $this->assertType('CoreExt_Validate_Choice', $validators['etapa']);
  78 +
  79 + // Opções dos validadores
  80 +
  81 + // Componentes curriculares existentes para o aluno
  82 + $this->assertEquals(
  83 + array_keys($this->_getConfigOptions('componenteCurricular')),
  84 + array_values($validators['componenteCurricular']->getOption('choices'))
  85 + );
  86 +
  87 + // Etapas possíveis para o lançamento de nota
  88 + $this->assertEquals(
  89 + array_merge(range(1, count($this->_getConfigOptions('anoLetivoModulo'))), array('Rc')),
  90 + $validators['etapa']->getOption('choices')
  91 + );
  92 + }
  93 +
  94 + /**
  95 + * Testa o service adicionando faltas de apenas um componente curricular,
  96 + * para todas as etapas regulares (1 a 4).
  97 + */
  98 + public function testSalvarFaltasDeUmComponenteCurricularNoBoletim()
  99 + {
  100 + $faltaAluno = $this->_getConfigOption('faltaAluno', 'instance');
  101 +
  102 + $faltas = array(
  103 + new Avaliacao_Model_FaltaComponente(array(
  104 + 'componenteCurricular' => 1,
  105 + 'quantidade' => 7,
  106 + 'etapa' => 1
  107 + )),
  108 + new Avaliacao_Model_FaltaComponente(array(
  109 + 'componenteCurricular' => 1,
  110 + 'quantidade' => 9,
  111 + 'etapa' => 2
  112 + )),
  113 + new Avaliacao_Model_FaltaComponente(array(
  114 + 'componenteCurricular' => 1,
  115 + 'quantidade' => 8,
  116 + 'etapa' => 3
  117 + )),
  118 + new Avaliacao_Model_FaltaComponente(array(
  119 + 'componenteCurricular' => 1,
  120 + 'quantidade' => 8,
  121 + 'etapa' => 4
  122 + )),
  123 + );
  124 +
  125 + // Configura mock para Avaliacao_Model_FaltaComponenteDataMapper
  126 + $mock = $this->getCleanMock('Avaliacao_Model_FaltaComponenteDataMapper');
  127 +
  128 + $mock->expects($this->at(0))
  129 + ->method('findAll')
  130 + ->with(array(), array('faltaAluno' => $faltaAluno->id), array('etapa' => 'ASC'))
  131 + ->will($this->returnValue(array()));
  132 +
  133 + $mock->expects($this->at(1))
  134 + ->method('save')
  135 + ->with($faltas[0])
  136 + ->will($this->returnValue(TRUE));
  137 +
  138 + $mock->expects($this->at(2))
  139 + ->method('save')
  140 + ->with($faltas[1])
  141 + ->will($this->returnValue(TRUE));
  142 +
  143 + $mock->expects($this->at(3))
  144 + ->method('save')
  145 + ->with($faltas[2])
  146 + ->will($this->returnValue(TRUE));
  147 +
  148 + $mock->expects($this->at(4))
  149 + ->method('save')
  150 + ->with($faltas[3])
  151 + ->will($this->returnValue(TRUE));
  152 +
  153 + $this->_setFaltaAbstractDataMapperMock($mock);
  154 +
  155 + $service = $this->_getServiceInstance();
  156 +
  157 + $service->addFaltas($faltas);
  158 + $service->saveFaltas();
  159 + }
  160 +
  161 + /**
  162 + * Testa o service adicionando novas faltas para um componente curricular,
  163 + * que inclusive já tem a falta lançada para a segunda etapa.
  164 + */
  165 + public function testSalvasFaltasDeUmComponenteComEtapasLancadas()
  166 + {
  167 + $faltaAluno = $this->_getConfigOption('faltaAluno', 'instance');
  168 +
  169 + $faltas = array(
  170 + new Avaliacao_Model_FaltaComponente(array(
  171 + 'componenteCurricular' => 1,
  172 + 'quantidade' => 7,
  173 + 'etapa' => 2
  174 + )),
  175 + new Avaliacao_Model_FaltaComponente(array(
  176 + 'componenteCurricular' => 1,
  177 + 'quantidade' => 9,
  178 + 'etapa' => 3
  179 + ))
  180 + );
  181 +
  182 + $faltasPersistidas = array(
  183 + new Avaliacao_Model_FaltaComponente(array(
  184 + 'id' => 1,
  185 + 'faltaAluno' => $faltaAluno->id,
  186 + 'componenteCurricular' => 1,
  187 + 'quantidade' => 8,
  188 + 'etapa' => 1
  189 + )),
  190 + new Avaliacao_Model_FaltaComponente(array(
  191 + 'id' => 2,
  192 + 'faltaAluno' => $faltaAluno->id,
  193 + 'componenteCurricular' => 1,
  194 + 'quantidade' => 11,
  195 + 'etapa' => 2
  196 + ))
  197 + );
  198 +
  199 + // Configura mock para Avaliacao_Model_FaltaComponenteDataMapper
  200 + $mock = $this->getCleanMock('Avaliacao_Model_FaltaComponenteDataMapper');
  201 +
  202 + $mock->expects($this->at(0))
  203 + ->method('findAll')
  204 + ->with(array(), array('faltaAluno' => $faltaAluno->id), array('etapa' => 'ASC'))
  205 + ->will($this->returnValue($faltasPersistidas));
  206 +
  207 + $mock->expects($this->at(1))
  208 + ->method('save')
  209 + ->with($faltas[0])
  210 + ->will($this->returnValue(TRUE));
  211 +
  212 + $mock->expects($this->at(2))
  213 + ->method('save')
  214 + ->with($faltas[1])
  215 + ->will($this->returnValue(TRUE));
  216 +
  217 + $this->_setFaltaAbstractDataMapperMock($mock);
  218 +
  219 + $service = $this->_getServiceInstance();
  220 + $service->addFaltas($faltas);
  221 + $service->saveFaltas();
  222 + }
  223 +
  224 + public function testSalvasFaltasDeUmComponenteEAtualizadaEtapaDaUltimaInstanciaAdicionadaNoBoletimComEtapasLancadas()
  225 + {
  226 + $faltaAluno = $this->_getConfigOption('faltaAluno', 'instance');
  227 +
  228 + $faltas = array(
  229 + new Avaliacao_Model_FaltaComponente(array(
  230 + 'componenteCurricular' => 1,
  231 + 'quantidade' => 7,
  232 + 'etapa' => 2
  233 + )),
  234 + // Etapa omitida, será atribuída a etapa '3'
  235 + new Avaliacao_Model_FaltaComponente(array(
  236 + 'componenteCurricular' => 1,
  237 + 'quantidade' => 9
  238 + ))
  239 + );
  240 +
  241 + $faltasPersistidas = array(
  242 + new Avaliacao_Model_FaltaComponente(array(
  243 + 'componenteCurricular' => 1,
  244 + 'id' => 1,
  245 + 'faltaAluno' => $faltaAluno->id,
  246 + 'quantidade' => 8,
  247 + 'etapa' => 1
  248 + )),
  249 + new Avaliacao_Model_FaltaComponente(array(
  250 + 'componenteCurricular' => 1,
  251 + 'id' => 2,
  252 + 'faltaAluno' => $faltaAluno->id,
  253 + 'quantidade' => 11,
  254 + 'etapa' => 2
  255 + ))
  256 + );
  257 +
  258 + // Configura mock para Avaliacao_Model_FaltaComponenteDataMapper
  259 + $mock = $this->getCleanMock('Avaliacao_Model_FaltaComponenteDataMapper');
  260 +
  261 + $mock->expects($this->at(0))
  262 + ->method('findAll')
  263 + ->with(array(), array('faltaAluno' => $faltaAluno->id), array('etapa' => 'ASC'))
  264 + ->will($this->returnValue($faltasPersistidas));
  265 +
  266 + $mock->expects($this->at(1))
  267 + ->method('save')
  268 + ->with($faltas[0])
  269 + ->will($this->returnValue(TRUE));
  270 +
  271 + $mock->expects($this->at(2))
  272 + ->method('save')
  273 + ->with($faltas[1])
  274 + ->will($this->returnValue(TRUE));
  275 +
  276 + $this->_setFaltaAbstractDataMapperMock($mock);
  277 +
  278 + $service = $this->_getServiceInstance();
  279 + $service->addFaltas($faltas);
  280 + $service->saveFaltas();
  281 +
  282 + $faltas = $service->getFaltas();
  283 +
  284 + $falta = array_shift($faltas);
  285 + $this->assertEquals(2, $falta->etapa);
  286 +
  287 + // Etapa atribuída automaticamente
  288 + $falta = array_shift($faltas);
  289 + $this->assertEquals(3, $falta->etapa);
  290 + }
  291 +}
0 292 \ No newline at end of file
... ...
ieducar/modules/Avaliacao/_tests/Service/FaltaGeralSituacaoTest.php 0 → 100644
... ... @@ -0,0 +1,156 @@
  1 +<?php
  2 +
  3 +/**
  4 + * i-Educar - Sistema de gestão escolar
  5 + *
  6 + * Copyright (C) 2006 Prefeitura Municipal de Itajaí
  7 + * <ctima@itajai.sc.gov.br>
  8 + *
  9 + * Este programa é software livre; você pode redistribuí-lo e/ou modificá-lo
  10 + * sob os termos da Licença Pública Geral GNU conforme publicada pela Free
  11 + * Software Foundation; tanto a versão 2 da Licença, como (a seu critério)
  12 + * qualquer versão posterior.
  13 + *
  14 + * Este programa é distribuí­do na expectativa de que seja útil, porém, SEM
  15 + * NENHUMA GARANTIA; nem mesmo a garantia implí­cita de COMERCIABILIDADE OU
  16 + * ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA. Consulte a Licença Pública Geral
  17 + * do GNU para mais detalhes.
  18 + *
  19 + * Você deve ter recebido uma cópia da Licença Pública Geral do GNU junto
  20 + * com este programa; se não, escreva para a Free Software Foundation, Inc., no
  21 + * endereço 59 Temple Street, Suite 330, Boston, MA 02111-1307 USA.
  22 + *
  23 + * @author Eriksen Costa Paixão <eriksen.paixao_bs@cobra.com.br>
  24 + * @category i-Educar
  25 + * @license @@license@@
  26 + * @package Avaliacao
  27 + * @subpackage UnitTests
  28 + * @since Arquivo disponível desde a versão 1.1.0
  29 + * @version $Id$
  30 + */
  31 +
  32 +require_once 'Avaliacao/_tests/Service/FaltaSituacaoCommon.php';
  33 +
  34 +/**
  35 + * Avaliacao_Service_FaltaGeralSituacaoTest class.
  36 + *
  37 + * @author Eriksen Costa Paixão <eriksen.paixao_bs@cobra.com.br>
  38 + * @category i-Educar
  39 + * @license @@license@@
  40 + * @package Avaliacao
  41 + * @subpackage UnitTests
  42 + * @since Classe disponível desde a versão 1.1.0
  43 + * @version @@package_version@@
  44 + */
  45 +class Avaliacao_Service_FaltaGeralSituacaoTest extends Avaliacao_Service_FaltaSituacaoCommon
  46 +{
  47 + protected function setUp()
  48 + {
  49 + $this->_setRegraOption('tipoPresenca', RegraAvaliacao_Model_TipoPresenca::GERAL);
  50 + parent::setUp();
  51 + }
  52 +
  53 + public function testSituacaoFaltasEmAndamento()
  54 + {
  55 + $faltaAluno = $this->_getConfigOption('faltaAluno', 'instance');
  56 + $this->_setUpFaltaAbstractDataMapperMock($faltaAluno, array());
  57 +
  58 + $expected = $this->_getExpectedSituacaoFaltas();
  59 +
  60 + // Configura a expectativa
  61 + $expected->situacao = App_Model_MatriculaSituacao::EM_ANDAMENTO;
  62 + $expected->porcentagemPresenca = 100;
  63 +
  64 + $service = $this->_getServiceInstance();
  65 +
  66 + $this->assertEquals($expected, $service->getSituacaoFaltas());
  67 + }
  68 +
  69 + public function testSituacaoFaltasAprovado()
  70 + {
  71 + $faltaAluno = $this->_getConfigOption('faltaAluno', 'instance');
  72 +
  73 + $faltas = array(
  74 + new Avaliacao_Model_FaltaGeral(array(
  75 + 'id' => 1,
  76 + 'quantidade' => 5,
  77 + 'etapa' => 1
  78 + )),
  79 + new Avaliacao_Model_FaltaGeral(array(
  80 + 'id' => 2,
  81 + 'quantidade' => 5,
  82 + 'etapa' => 2
  83 + )),
  84 + new Avaliacao_Model_FaltaGeral(array(
  85 + 'id' => 3,
  86 + 'quantidade' => 5,
  87 + 'etapa' => 3
  88 + )),
  89 + new Avaliacao_Model_FaltaGeral(array(
  90 + 'id' => 4,
  91 + 'quantidade' => 5,
  92 + 'etapa' => 4
  93 + )),
  94 + );
  95 +
  96 + $this->_setUpFaltaAbstractDataMapperMock($faltaAluno, $faltas);
  97 +
  98 + $expected = $this->_getExpectedSituacaoFaltas();
  99 +
  100 + // Configura a expectativa
  101 + $expected->situacao = App_Model_MatriculaSituacao::APROVADO;
  102 +
  103 + $expected->totalFaltas = array_sum(CoreExt_Entity::entityFilterAttr($faltas, 'id', 'quantidade'));
  104 + $expected->horasFaltas = $expected->totalFaltas * $this->_getConfigOption('curso', 'hora_falta');
  105 + $expected->porcentagemFalta = ($expected->horasFaltas / $this->_getConfigOption('serie', 'carga_horaria') * 100);
  106 + $expected->porcentagemPresenca = 100 - $expected->porcentagemFalta;
  107 +
  108 + $service = $this->_getServiceInstance();
  109 +
  110 + $this->assertEquals($expected, $service->getSituacaoFaltas());
  111 + }
  112 +
  113 + public function testSituacaoFaltasReprovado()
  114 + {
  115 + $faltaAluno = $this->_getConfigOption('faltaAluno', 'instance');
  116 +
  117 + $faltas = array(
  118 + new Avaliacao_Model_FaltaGeral(array(
  119 + 'id' => 1,
  120 + 'quantidade' => 180,
  121 + 'etapa' => 1
  122 + )),
  123 + new Avaliacao_Model_FaltaGeral(array(
  124 + 'id' => 2,
  125 + 'quantidade' => 180,
  126 + 'etapa' => 2
  127 + )),
  128 + new Avaliacao_Model_FaltaGeral(array(
  129 + 'id' => 3,
  130 + 'quantidade' => 180,
  131 + 'etapa' => 3
  132 + )),
  133 + new Avaliacao_Model_FaltaGeral(array(
  134 + 'id' => 4,
  135 + 'quantidade' => 180,
  136 + 'etapa' => 4
  137 + )),
  138 + );
  139 +
  140 + $this->_setUpFaltaAbstractDataMapperMock($faltaAluno, $faltas);
  141 +
  142 + $expected = $this->_getExpectedSituacaoFaltas();
  143 +
  144 + // Configura a expectativa
  145 + $expected->situacao = App_Model_MatriculaSituacao::REPROVADO;
  146 +
  147 + $expected->totalFaltas = array_sum(CoreExt_Entity::entityFilterAttr($faltas, 'id', 'quantidade'));
  148 + $expected->horasFaltas = $expected->totalFaltas * $this->_getConfigOption('curso', 'hora_falta');
  149 + $expected->porcentagemFalta = ($expected->horasFaltas / $this->_getConfigOption('serie', 'carga_horaria') * 100);
  150 + $expected->porcentagemPresenca = 100 - $expected->porcentagemFalta;
  151 +
  152 + $service = $this->_getServiceInstance();
  153 +
  154 + $this->assertEquals($expected, $service->getSituacaoFaltas());
  155 + }
  156 +}
0 157 \ No newline at end of file
... ...
ieducar/modules/Avaliacao/_tests/Service/FaltaGeralTest.php 0 → 100644
... ... @@ -0,0 +1,269 @@
  1 +<?php
  2 +
  3 +/**
  4 + * i-Educar - Sistema de gestão escolar
  5 + *
  6 + * Copyright (C) 2006 Prefeitura Municipal de Itajaí
  7 + * <ctima@itajai.sc.gov.br>
  8 + *
  9 + * Este programa é software livre; você pode redistribuí-lo e/ou modificá-lo
  10 + * sob os termos da Licença Pública Geral GNU conforme publicada pela Free
  11 + * Software Foundation; tanto a versão 2 da Licença, como (a seu critério)
  12 + * qualquer versão posterior.
  13 + *
  14 + * Este programa é distribuí­do na expectativa de que seja útil, porém, SEM
  15 + * NENHUMA GARANTIA; nem mesmo a garantia implí­cita de COMERCIABILIDADE OU
  16 + * ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA. Consulte a Licença Pública Geral
  17 + * do GNU para mais detalhes.
  18 + *
  19 + * Você deve ter recebido uma cópia da Licença Pública Geral do GNU junto
  20 + * com este programa; se não, escreva para a Free Software Foundation, Inc., no
  21 + * endereço 59 Temple Street, Suite 330, Boston, MA 02111-1307 USA.
  22 + *
  23 + * @author Eriksen Costa Paixão <eriksen.paixao_bs@cobra.com.br>
  24 + * @category i-Educar
  25 + * @license @@license@@
  26 + * @package Avaliacao
  27 + * @subpackage UnitTests
  28 + * @since Arquivo disponível desde a versão 1.1.0
  29 + * @version $Id$
  30 + */
  31 +
  32 +require_once 'Avaliacao/_tests/Service/FaltaCommon.php';
  33 +
  34 +/**
  35 + * Avaliacao_Service_FaltaGeralTest class.
  36 + *
  37 + * @author Eriksen Costa Paixão <eriksen.paixao_bs@cobra.com.br>
  38 + * @category i-Educar
  39 + * @license @@license@@
  40 + * @package Avaliacao
  41 + * @subpackage UnitTests
  42 + * @since Classe disponível desde a versão 1.1.0
  43 + * @version @@package_version@@
  44 + */
  45 +class Avaliacao_Service_FaltaGeralTest extends Avaliacao_Service_FaltaCommon
  46 +{
  47 + protected function setUp()
  48 + {
  49 + $this->_setRegraOption('tipoPresenca', RegraAvaliacao_Model_TipoPresenca::GERAL);
  50 + parent::setUp();
  51 + }
  52 +
  53 + protected function _getFaltaTestInstanciaDeFaltaERegistradaApenasUmaVezNoBoletim()
  54 + {
  55 + return new Avaliacao_Model_FaltaGeral(array(
  56 + 'quantidade' => 10
  57 + ));
  58 + }
  59 +
  60 + protected function _getFaltaTestAdicionaFaltaNoBoletim()
  61 + {
  62 + return new Avaliacao_Model_FaltaComponente(array(
  63 + 'quantidade' => 10
  64 + ));
  65 + }
  66 +
  67 + protected function _testAdicionaFaltaNoBoletimVerificaValidadores(Avaliacao_Model_FaltaAbstract $falta)
  68 + {
  69 + $this->assertEquals(1, $falta->etapa);
  70 + $this->assertEquals(10, $falta->quantidade);
  71 +
  72 + $validators = $falta->getValidatorCollection();
  73 + $this->assertType('CoreExt_Validate_Choice', $validators['etapa']);
  74 + $this->assertFalse(isset($validators['componenteCurricular']));
  75 +
  76 + // Opções dos validadores
  77 +
  78 + // Etapas possíveis para o lançamento de nota
  79 + $this->assertEquals(
  80 + array_merge(range(1, count($this->_getConfigOptions('anoLetivoModulo'))), array('Rc')),
  81 + $validators['etapa']->getOption('choices')
  82 + );
  83 + }
  84 +
  85 + /**
  86 + * Testa o service adicionando faltas de apenas um componente curricular,
  87 + * para todas as etapas regulares (1 a 4).
  88 + */
  89 + public function testSalvarFaltasNoBoletim()
  90 + {
  91 + $faltaAluno = $this->_getConfigOption('faltaAluno', 'instance');
  92 +
  93 + $faltas = array(
  94 + new Avaliacao_Model_FaltaGeral(array(
  95 + 'quantidade' => 7,
  96 + 'etapa' => 1
  97 + )),
  98 + new Avaliacao_Model_FaltaGeral(array(
  99 + 'quantidade' => 11,
  100 + 'etapa' => 2
  101 + )),
  102 + new Avaliacao_Model_FaltaGeral(array(
  103 + 'quantidade' => 8,
  104 + 'etapa' => 3
  105 + )),
  106 + new Avaliacao_Model_FaltaGeral(array(
  107 + 'quantidade' => 8,
  108 + 'etapa' => 4
  109 + )),
  110 + );
  111 +
  112 + // Configura mock para Avaliacao_Model_FaltaGeralDataMapper
  113 + $mock = $this->getCleanMock('Avaliacao_Model_FaltaGeralDataMapper');
  114 +
  115 + $mock->expects($this->at(0))
  116 + ->method('findAll')
  117 + ->with(array(), array('faltaAluno' => $faltaAluno->id), array('etapa' => 'ASC'))
  118 + ->will($this->returnValue(array()));
  119 +
  120 + $mock->expects($this->at(1))
  121 + ->method('save')
  122 + ->with($faltas[0])
  123 + ->will($this->returnValue(TRUE));
  124 +
  125 + $mock->expects($this->at(2))
  126 + ->method('save')
  127 + ->with($faltas[1])
  128 + ->will($this->returnValue(TRUE));
  129 +
  130 + $mock->expects($this->at(3))
  131 + ->method('save')
  132 + ->with($faltas[2])
  133 + ->will($this->returnValue(TRUE));
  134 +
  135 + $mock->expects($this->at(4))
  136 + ->method('save')
  137 + ->with($faltas[3])
  138 + ->will($this->returnValue(TRUE));
  139 +
  140 + $this->_setFaltaAbstractDataMapperMock($mock);
  141 +
  142 + $service = $this->_getServiceInstance();
  143 + $service->addFaltas($faltas);
  144 + $service->saveFaltas();
  145 + }
  146 +
  147 + /**
  148 + * Testa o service adicionando novas faltas para um componente curricular,
  149 + * que inclusive já tem a falta lançada para a segunda etapa.
  150 + */
  151 + public function testSalvasFaltasNoBoletimComEtapasLancadas()
  152 + {
  153 + $faltaAluno = $this->_getConfigOption('faltaAluno', 'instance');
  154 +
  155 + $faltas = array(
  156 + new Avaliacao_Model_FaltaGeral(array(
  157 + 'quantidade' => 7,
  158 + 'etapa' => 2
  159 + )),
  160 + new Avaliacao_Model_FaltaGeral(array(
  161 + 'quantidade' => 9,
  162 + 'etapa' => 3
  163 + ))
  164 + );
  165 +
  166 + $faltasPersistidas = array(
  167 + new Avaliacao_Model_FaltaGeral(array(
  168 + 'id' => 1,
  169 + 'faltaAluno' => $faltaAluno->id,
  170 + 'quantidade' => 8,
  171 + 'etapa' => 1
  172 + )),
  173 + new Avaliacao_Model_FaltaGeral(array(
  174 + 'id' => 2,
  175 + 'faltaAluno' => $faltaAluno->id,
  176 + 'quantidade' => 11,
  177 + 'etapa' => 2
  178 + ))
  179 + );
  180 +
  181 + // Configura mock para Avaliacao_Model_FaltaGeralDataMapper
  182 + $mock = $this->getCleanMock('Avaliacao_Model_FaltaGeralDataMapper');
  183 +
  184 + $mock->expects($this->at(0))
  185 + ->method('findAll')
  186 + ->with(array(), array('faltaAluno' => $faltaAluno->id), array('etapa' => 'ASC'))
  187 + ->will($this->returnValue($faltasPersistidas));
  188 +
  189 + $mock->expects($this->at(1))
  190 + ->method('save')
  191 + ->with($faltas[0])
  192 + ->will($this->returnValue(TRUE));
  193 +
  194 + $mock->expects($this->at(2))
  195 + ->method('save')
  196 + ->with($faltas[1])
  197 + ->will($this->returnValue(TRUE));
  198 +
  199 + $this->_setFaltaAbstractDataMapperMock($mock);
  200 +
  201 + $service = $this->_getServiceInstance();
  202 + $service->addFaltas($faltas);
  203 + $service->saveFaltas();
  204 + }
  205 +
  206 + public function testSalvasFaltasAtualizandoEtapaDaUltimaInstanciaAdicionadaNoBoletimComEtapasLancadas()
  207 + {
  208 + $faltaAluno = $this->_getConfigOption('faltaAluno', 'instance');
  209 +
  210 + $faltas = array(
  211 + new Avaliacao_Model_FaltaGeral(array(
  212 + 'quantidade' => 7,
  213 + 'etapa' => 2
  214 + )),
  215 + // Etapa omitida, será atribuída a etapa '3'
  216 + new Avaliacao_Model_FaltaGeral(array(
  217 + 'quantidade' => 9
  218 + ))
  219 + );
  220 +
  221 + $faltasPersistidas = array(
  222 + new Avaliacao_Model_FaltaGeral(array(
  223 + 'id' => 1,
  224 + 'faltaAluno' => $faltaAluno->id,
  225 + 'quantidade' => 8,
  226 + 'etapa' => 1
  227 + )),
  228 + new Avaliacao_Model_FaltaGeral(array(
  229 + 'id' => 2,
  230 + 'faltaAluno' => $faltaAluno->id,
  231 + 'quantidade' => 11,
  232 + 'etapa' => 2
  233 + ))
  234 + );
  235 +
  236 + // Configura mock para Avaliacao_Model_FaltaGeralDataMapper
  237 + $mock = $this->getCleanMock('Avaliacao_Model_FaltaGeralDataMapper');
  238 +
  239 + $mock->expects($this->at(0))
  240 + ->method('findAll')
  241 + ->with(array(), array('faltaAluno' => $faltaAluno->id), array('etapa' => 'ASC'))
  242 + ->will($this->returnValue($faltasPersistidas));
  243 +
  244 + $mock->expects($this->at(1))
  245 + ->method('save')
  246 + ->with($faltas[0])
  247 + ->will($this->returnValue(TRUE));
  248 +
  249 + $mock->expects($this->at(2))
  250 + ->method('save')
  251 + ->with($faltas[1])
  252 + ->will($this->returnValue(TRUE));
  253 +
  254 + $this->_setFaltaAbstractDataMapperMock($mock);
  255 +
  256 + $service = $this->_getServiceInstance();
  257 + $service->addFaltas($faltas);
  258 + $service->saveFaltas();
  259 +
  260 + $faltas = $service->getFaltas();
  261 +
  262 + $falta = array_shift($faltas);
  263 + $this->assertEquals(2, $falta->etapa);
  264 +
  265 + // Etapa atribuída automaticamente
  266 + $falta = array_shift($faltas);
  267 + $this->assertEquals(3, $falta->etapa);
  268 + }
  269 +}
0 270 \ No newline at end of file
... ...
ieducar/modules/Avaliacao/_tests/Service/FaltaSituacaoCommon.php 0 → 100644
... ... @@ -0,0 +1,91 @@
  1 +<?php
  2 +
  3 +/**
  4 + * i-Educar - Sistema de gestão escolar
  5 + *
  6 + * Copyright (C) 2006 Prefeitura Municipal de Itajaí
  7 + * <ctima@itajai.sc.gov.br>
  8 + *
  9 + * Este programa é software livre; você pode redistribuí-lo e/ou modificá-lo
  10 + * sob os termos da Licença Pública Geral GNU conforme publicada pela Free
  11 + * Software Foundation; tanto a versão 2 da Licença, como (a seu critério)
  12 + * qualquer versão posterior.
  13 + *
  14 + * Este programa é distribuí­do na expectativa de que seja útil, porém, SEM
  15 + * NENHUMA GARANTIA; nem mesmo a garantia implí­cita de COMERCIABILIDADE OU
  16 + * ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA. Consulte a Licença Pública Geral
  17 + * do GNU para mais detalhes.
  18 + *
  19 + * Você deve ter recebido uma cópia da Licença Pública Geral do GNU junto
  20 + * com este programa; se não, escreva para a Free Software Foundation, Inc., no
  21 + * endereço 59 Temple Street, Suite 330, Boston, MA 02111-1307 USA.
  22 + *
  23 + * @author Eriksen Costa Paixão <eriksen.paixao_bs@cobra.com.br>
  24 + * @category i-Educar
  25 + * @license @@license@@
  26 + * @package Avaliacao
  27 + * @subpackage UnitTests
  28 + * @since Arquivo disponível desde a versão 1.1.0
  29 + * @version $Id$
  30 + */
  31 +
  32 +require_once 'Avaliacao/_tests/Service/TestCommon.php';
  33 +
  34 +/**
  35 + * Avaliacao_Service_FaltaSituacaoCommon class.
  36 + *
  37 + * @author Eriksen Costa Paixão <eriksen.paixao_bs@cobra.com.br>
  38 + * @category i-Educar
  39 + * @license @@license@@
  40 + * @package Avaliacao
  41 + * @subpackage UnitTests
  42 + * @since Classe disponível desde a versão 1.1.0
  43 + * @version @@package_version@@
  44 + */
  45 +class Avaliacao_Service_FaltaSituacaoCommon extends Avaliacao_Service_TestCommon
  46 +{
  47 + protected function _setUpFaltaAbstractDataMapperMock(
  48 + Avaliacao_Model_FaltaAluno $faltaAluno, array $faltas)
  49 + {
  50 + // Configura mock para notas
  51 + $mock = $this->getCleanMock('Avaliacao_Model_FaltaAbstractDataMapper');
  52 +
  53 + $mock->expects($this->any())
  54 + ->method('findAll')
  55 + ->with(array(), array('faltaAluno' => $faltaAluno->id), array('etapa' => 'ASC'))
  56 + ->will($this->returnValue($faltas));
  57 +
  58 + $this->_setFaltaAbstractDataMapperMock($mock);
  59 + }
  60 +
  61 + protected function _getExpectedSituacaoFaltas()
  62 + {
  63 + $faltaAluno = $this->_getConfigOption('faltaAluno', 'instance');
  64 +
  65 + // Valores retornados pelas instâncias de classes legadas
  66 + $cursoHoraFalta = $this->_getConfigOption('curso', 'hora_falta');
  67 + $serieCargaHoraria = $this->_getConfigOption('serie', 'carga_horaria');
  68 +
  69 + // Porcentagem configurada na regra
  70 + $porcentagemPresenca = $this->_getRegraOption('porcentagemPresenca');
  71 +
  72 + $expected = new stdClass();
  73 + $expected->situacao = 0;
  74 + $expected->tipoFalta = 0;
  75 + $expected->cargaHoraria = 0;
  76 + $expected->cursoHoraFalta = 0;
  77 + $expected->totalFaltas = 0;
  78 + $expected->horasFaltas = 0;
  79 + $expected->porcentagemFalta = 0;
  80 + $expected->porcentagemPresenca = 0;
  81 + $expected->porcentagemPresencaRegra = 0;
  82 + $expected->componentesCurriculares = array();
  83 +
  84 + $expected->tipoFalta = $faltaAluno->get('tipoFalta');
  85 + $expected->cursoHoraFalta = $cursoHoraFalta;
  86 + $expected->porcentagemPresencaRegra = $porcentagemPresenca;
  87 + $expected->cargaHoraria = $serieCargaHoraria;
  88 +
  89 + return $expected;
  90 + }
  91 +}
0 92 \ No newline at end of file
... ...
ieducar/modules/Avaliacao/_tests/Service/InicializacaoTest.php 0 → 100644
... ... @@ -0,0 +1,99 @@
  1 +<?php
  2 +
  3 +/**
  4 + * i-Educar - Sistema de gestão escolar
  5 + *
  6 + * Copyright (C) 2006 Prefeitura Municipal de Itajaí
  7 + * <ctima@itajai.sc.gov.br>
  8 + *
  9 + * Este programa é software livre; você pode redistribuí-lo e/ou modificá-lo
  10 + * sob os termos da Licença Pública Geral GNU conforme publicada pela Free
  11 + * Software Foundation; tanto a versão 2 da Licença, como (a seu critério)
  12 + * qualquer versão posterior.
  13 + *
  14 + * Este programa é distribuí­do na expectativa de que seja útil, porém, SEM
  15 + * NENHUMA GARANTIA; nem mesmo a garantia implí­cita de COMERCIABILIDADE OU
  16 + * ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA. Consulte a Licença Pública Geral
  17 + * do GNU para mais detalhes.
  18 + *
  19 + * Você deve ter recebido uma cópia da Licença Pública Geral do GNU junto
  20 + * com este programa; se não, escreva para a Free Software Foundation, Inc., no
  21 + * endereço 59 Temple Street, Suite 330, Boston, MA 02111-1307 USA.
  22 + *
  23 + * @author Eriksen Costa Paixão <eriksen.paixao_bs@cobra.com.br>
  24 + * @category i-Educar
  25 + * @license @@license@@
  26 + * @package Avaliacao
  27 + * @subpackage UnitTests
  28 + * @since Arquivo disponível desde a versão 1.1.0
  29 + * @version $Id$
  30 + */
  31 +
  32 +require_once 'Avaliacao/_tests/Service/TestCommon.php';
  33 +
  34 +/**
  35 + * Avaliacao_Service_InicializacaoTest class.
  36 + *
  37 + * @author Eriksen Costa Paixão <eriksen.paixao_bs@cobra.com.br>
  38 + * @category i-Educar
  39 + * @license @@license@@
  40 + * @package Avaliacao
  41 + * @subpackage UnitTests
  42 + * @since Classe disponível desde a versão 1.1.0
  43 + * @version @@package_version@@
  44 + */
  45 +class Avaliacao_Service_InicializacaoTest extends Avaliacao_Service_TestCommon
  46 +{
  47 + /**
  48 + * @expectedException CoreExt_Service_Exception
  49 + */
  50 + public function testInstanciaLancaExcecaoCasoCodigoDeMatriculaNaoSejaInformado()
  51 + {
  52 + new Avaliacao_Service_Boletim();
  53 + }
  54 +
  55 + /**
  56 + * @expectedException InvalidArgumentException
  57 + */
  58 + public function testInstanciaLancaExcecaoComOpcaoNaoAceitaPelaClasse()
  59 + {
  60 + new Avaliacao_Service_Boletim(array('matricula' => 1, 'foo' => 'bar'));
  61 + }
  62 +
  63 + public function testDadosDeMatriculaInicializados()
  64 + {
  65 + $service = $this->_getServiceInstance();
  66 + $options = $service->getOptions();
  67 +
  68 + $this->assertEquals($this->_getConfigOption('usuario', 'cod_usuario'),
  69 + $options['usuario']);
  70 +
  71 + $this->assertEquals($this->_getConfigOption('matricula', 'aprovado'),
  72 + $options['aprovado']);
  73 +
  74 + $this->assertEquals($this->_getConfigOption('curso', 'hora_falta'),
  75 + $options['cursoHoraFalta']);
  76 +
  77 + $this->assertEquals($this->_getConfigOption('curso', 'carga_horaria'),
  78 + $options['cursoCargaHoraria']);
  79 +
  80 + $this->assertEquals($this->_getConfigOption('serie', 'carga_horaria'),
  81 + $options['serieCargaHoraria']);
  82 +
  83 + $this->assertEquals(count($this->_getConfigOptions('anoLetivoModulo')),
  84 + $options['etapas']);
  85 +
  86 + $this->assertEquals($this->_getConfigOptions('componenteCurricular'),
  87 + $service->getComponentes());
  88 + }
  89 +
  90 + public function testInstanciaRegraDeAvaliacaoAtravesDeUmNumeroDeMatricula()
  91 + {
  92 + $service = $this->_getServiceInstance();
  93 + $this->assertType('RegraAvaliacao_Model_Regra', $service->getRegra());
  94 +
  95 + // TabelaArredondamento_Model_Tabela é recuperada através da instância de
  96 + // RegraAvaliacao_Model_Regra
  97 + $this->assertType('TabelaArredondamento_Model_Tabela', $service->getTabelaArredondamento());
  98 + }
  99 +}
0 100 \ No newline at end of file
... ...
ieducar/modules/Avaliacao/_tests/Service/NotaAlunoTest.php 0 → 100644
... ... @@ -0,0 +1,75 @@
  1 +<?php
  2 +
  3 +/**
  4 + * i-Educar - Sistema de gestão escolar
  5 + *
  6 + * Copyright (C) 2006 Prefeitura Municipal de Itajaí
  7 + * <ctima@itajai.sc.gov.br>
  8 + *
  9 + * Este programa é software livre; você pode redistribuí-lo e/ou modificá-lo
  10 + * sob os termos da Licença Pública Geral GNU conforme publicada pela Free
  11 + * Software Foundation; tanto a versão 2 da Licença, como (a seu critério)
  12 + * qualquer versão posterior.
  13 + *
  14 + * Este programa é distribuí­do na expectativa de que seja útil, porém, SEM
  15 + * NENHUMA GARANTIA; nem mesmo a garantia implí­cita de COMERCIABILIDADE OU
  16 + * ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA. Consulte a Licença Pública Geral
  17 + * do GNU para mais detalhes.
  18 + *
  19 + * Você deve ter recebido uma cópia da Licença Pública Geral do GNU junto
  20 + * com este programa; se não, escreva para a Free Software Foundation, Inc., no
  21 + * endereço 59 Temple Street, Suite 330, Boston, MA 02111-1307 USA.
  22 + *
  23 + * @author Eriksen Costa Paixão <eriksen.paixao_bs@cobra.com.br>
  24 + * @category i-Educar
  25 + * @license @@license@@
  26 + * @package Avaliacao
  27 + * @subpackage UnitTests
  28 + * @since Arquivo disponível desde a versão 1.1.0
  29 + * @version $Id$
  30 + */
  31 +
  32 +require_once 'Avaliacao/_tests/Service/TestCommon.php';
  33 +require_once 'Avaliacao/Model/NotaComponente.php';
  34 +
  35 +/**
  36 + * Avaliacao_Service_NotaAlunoTest class.
  37 + *
  38 + * @author Eriksen Costa Paixão <eriksen.paixao_bs@cobra.com.br>
  39 + * @category i-Educar
  40 + * @license @@license@@
  41 + * @package Avaliacao
  42 + * @subpackage UnitTests
  43 + * @since Classe disponível desde a versão 1.1.0
  44 + * @version @@package_version@@
  45 + */
  46 +class Avaliacao_Service_NotaAlunoTest extends Avaliacao_Service_TestCommon
  47 +{
  48 + public function testCriaNovaInstanciaDeNotaAluno()
  49 + {
  50 + $notaAluno = $this->_getConfigOption('notaAluno', 'instance');
  51 + $notaSave = clone $notaAluno;
  52 + $notaSave->id = NULL;
  53 +
  54 + // Configura mock para Avaliacao_Model_NotaAlunoDataMapper
  55 + $mock = $this->getCleanMock('Avaliacao_Model_NotaAlunoDataMapper');
  56 + $mock->expects($this->at(0))
  57 + ->method('findAll')
  58 + ->with(array(), array('matricula' => $this->_getConfigOption('matricula', 'cod_matricula')))
  59 + ->will($this->returnValue(array()));
  60 +
  61 + $mock->expects($this->at(1))
  62 + ->method('save')
  63 + ->with($notaSave)
  64 + ->will($this->returnValue(TRUE));
  65 +
  66 + $mock->expects($this->at(2))
  67 + ->method('findAll')
  68 + ->with(array(), array('matricula' => $this->_getConfigOption('matricula', 'cod_matricula')))
  69 + ->will($this->returnValue(array($notaAluno)));
  70 +
  71 + $this->_setNotaAlunoDataMapperMock($mock);
  72 +
  73 + $service = $this->_getServiceInstance();
  74 + }
  75 +}
0 76 \ No newline at end of file
... ...
ieducar/modules/Avaliacao/_tests/Service/NotaConceitualSituacaoTest.php 0 → 100644
... ... @@ -0,0 +1,52 @@
  1 +<?php
  2 +
  3 +/**
  4 + * i-Educar - Sistema de gestão escolar
  5 + *
  6 + * Copyright (C) 2006 Prefeitura Municipal de Itajaí
  7 + * <ctima@itajai.sc.gov.br>
  8 + *
  9 + * Este programa é software livre; você pode redistribuí-lo e/ou modificá-lo
  10 + * sob os termos da Licença Pública Geral GNU conforme publicada pela Free
  11 + * Software Foundation; tanto a versão 2 da Licença, como (a seu critério)
  12 + * qualquer versão posterior.
  13 + *
  14 + * Este programa é distribuí­do na expectativa de que seja útil, porém, SEM
  15 + * NENHUMA GARANTIA; nem mesmo a garantia implí­cita de COMERCIABILIDADE OU
  16 + * ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA. Consulte a Licença Pública Geral
  17 + * do GNU para mais detalhes.
  18 + *
  19 + * Você deve ter recebido uma cópia da Licença Pública Geral do GNU junto
  20 + * com este programa; se não, escreva para a Free Software Foundation, Inc., no
  21 + * endereço 59 Temple Street, Suite 330, Boston, MA 02111-1307 USA.
  22 + *
  23 + * @author Eriksen Costa Paixão <eriksen.paixao_bs@cobra.com.br>
  24 + * @category i-Educar
  25 + * @license @@license@@
  26 + * @package Avaliacao
  27 + * @subpackage UnitTests
  28 + * @since Arquivo disponível desde a versão 1.1.0
  29 + * @version $Id$
  30 + */
  31 +
  32 +require_once 'Avaliacao/_tests/Service/NotaSituacaoCommon.php';
  33 +
  34 +/**
  35 + * Avaliacao_Service_NotaConceitualSituacaoTest class.
  36 + *
  37 + * @author Eriksen Costa Paixão <eriksen.paixao_bs@cobra.com.br>
  38 + * @category i-Educar
  39 + * @license @@license@@
  40 + * @package Avaliacao
  41 + * @subpackage UnitTests
  42 + * @since Classe disponível desde a versão 1.1.0
  43 + * @version @@package_version@@
  44 + */
  45 +class Avaliacao_Service_NotaConceitualSituacaoTest extends Avaliacao_Service_NotaSituacaoCommon
  46 +{
  47 + protected function setUp()
  48 + {
  49 + $this->_setRegraOption('tipoNota', RegraAvaliacao_Model_Nota_TipoValor::CONCEITUAL);
  50 + parent::setUp();
  51 + }
  52 +}
0 53 \ No newline at end of file
... ...
ieducar/modules/Avaliacao/_tests/Service/NotaNumericaSituacaoTest.php 0 → 100644
... ... @@ -0,0 +1,47 @@
  1 +<?php
  2 +
  3 +/**
  4 + * i-Educar - Sistema de gestão escolar
  5 + *
  6 + * Copyright (C) 2006 Prefeitura Municipal de Itajaí
  7 + * <ctima@itajai.sc.gov.br>
  8 + *
  9 + * Este programa é software livre; você pode redistribuí-lo e/ou modificá-lo
  10 + * sob os termos da Licença Pública Geral GNU conforme publicada pela Free
  11 + * Software Foundation; tanto a versão 2 da Licença, como (a seu critério)
  12 + * qualquer versão posterior.
  13 + *
  14 + * Este programa é distribuí­do na expectativa de que seja útil, porém, SEM
  15 + * NENHUMA GARANTIA; nem mesmo a garantia implí­cita de COMERCIABILIDADE OU
  16 + * ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA. Consulte a Licença Pública Geral
  17 + * do GNU para mais detalhes.
  18 + *
  19 + * Você deve ter recebido uma cópia da Licença Pública Geral do GNU junto
  20 + * com este programa; se não, escreva para a Free Software Foundation, Inc., no
  21 + * endereço 59 Temple Street, Suite 330, Boston, MA 02111-1307 USA.
  22 + *
  23 + * @author Eriksen Costa Paixão <eriksen.paixao_bs@cobra.com.br>
  24 + * @category i-Educar
  25 + * @license @@license@@
  26 + * @package Avaliacao
  27 + * @subpackage UnitTests
  28 + * @since Arquivo disponível desde a versão 1.1.0
  29 + * @version $Id$
  30 + */
  31 +
  32 +require_once 'Avaliacao/_tests/Service/NotaSituacaoCommon.php';
  33 +
  34 +/**
  35 + * Avaliacao_Service_NotaNumericaSituacaoTest class.
  36 + *
  37 + * @author Eriksen Costa Paixão <eriksen.paixao_bs@cobra.com.br>
  38 + * @category i-Educar
  39 + * @license @@license@@
  40 + * @package Avaliacao
  41 + * @subpackage UnitTests
  42 + * @since Classe disponível desde a versão 1.1.0
  43 + * @version @@package_version@@
  44 + */
  45 +class Avaliacao_Service_NotaNumericaSituacaoTest extends Avaliacao_Service_NotaSituacaoCommon
  46 +{
  47 +}
0 48 \ No newline at end of file
... ...
ieducar/modules/Avaliacao/_tests/Service/NotaRecuperacaoTest.php 0 → 100644
... ... @@ -0,0 +1,250 @@
  1 +<?php
  2 +
  3 +/**
  4 + * i-Educar - Sistema de gestão escolar
  5 + *
  6 + * Copyright (C) 2006 Prefeitura Municipal de Itajaí
  7 + * <ctima@itajai.sc.gov.br>
  8 + *
  9 + * Este programa é software livre; você pode redistribuí-lo e/ou modificá-lo
  10 + * sob os termos da Licença Pública Geral GNU conforme publicada pela Free
  11 + * Software Foundation; tanto a versão 2 da Licença, como (a seu critério)
  12 + * qualquer versão posterior.
  13 + *
  14 + * Este programa é distribuí­do na expectativa de que seja útil, porém, SEM
  15 + * NENHUMA GARANTIA; nem mesmo a garantia implí­cita de COMERCIABILIDADE OU
  16 + * ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA. Consulte a Licença Pública Geral
  17 + * do GNU para mais detalhes.
  18 + *
  19 + * Você deve ter recebido uma cópia da Licença Pública Geral do GNU junto
  20 + * com este programa; se não, escreva para a Free Software Foundation, Inc., no
  21 + * endereço 59 Temple Street, Suite 330, Boston, MA 02111-1307 USA.
  22 + *
  23 + * @author Eriksen Costa Paixão <eriksen.paixao_bs@cobra.com.br>
  24 + * @category i-Educar
  25 + * @license @@license@@
  26 + * @package Avaliacao
  27 + * @subpackage UnitTests
  28 + * @since Arquivo disponível desde a versão 1.1.0
  29 + * @version $Id$
  30 + */
  31 +
  32 +require_once 'Avaliacao/_tests/Service/TestCommon.php';
  33 +
  34 +/**
  35 + * Avaliacao_Service_NotaRecuperacaoTest class.
  36 + *
  37 + * @author Eriksen Costa Paixão <eriksen.paixao_bs@cobra.com.br>
  38 + * @category i-Educar
  39 + * @license @@license@@
  40 + * @package Avaliacao
  41 + * @subpackage UnitTests
  42 + * @since Classe disponível desde a versão 1.1.0
  43 + * @version @@package_version@@
  44 + */
  45 +class Avaliacao_Service_NotaRecuperacaoTest extends Avaliacao_Service_TestCommon
  46 +{
  47 + public function testSalvarNotasDeUmComponenteCurricularNoBoletimEmRecuperacao()
  48 + {
  49 + $notaAluno = $this->_getConfigOption('notaAluno', 'instance');
  50 +
  51 + $notas = array(
  52 + new Avaliacao_Model_NotaComponente(array(
  53 + 'componenteCurricular' => 1,
  54 + 'nota' => 5,
  55 + 'etapa' => 1
  56 + )),
  57 + new Avaliacao_Model_NotaComponente(array(
  58 + 'componenteCurricular' => 1,
  59 + 'nota' => 5,
  60 + 'etapa' => 2
  61 + )),
  62 + new Avaliacao_Model_NotaComponente(array(
  63 + 'componenteCurricular' => 1,
  64 + 'nota' => 6,
  65 + 'etapa' => 3
  66 + )),
  67 + new Avaliacao_Model_NotaComponente(array(
  68 + 'componenteCurricular' => 1,
  69 + 'nota' => 6,
  70 + 'etapa' => 4
  71 + )),
  72 + new Avaliacao_Model_NotaComponente(array(
  73 + 'componenteCurricular' => 1,
  74 + 'nota' => 6,
  75 + 'etapa' => 'Rc'
  76 + )),
  77 + );
  78 +
  79 + $media = new Avaliacao_Model_NotaComponenteMedia(array(
  80 + 'notaAluno' => $notaAluno->id,
  81 + 'componenteCurricular' => 1,
  82 + 'media' => 5.7,
  83 + 'mediaArredondada' => 5,
  84 + 'etapa' => 'Rc'
  85 + ));
  86 +
  87 + $media->markOld();
  88 +
  89 + // Configura mock para Avaliacao_Model_NotaComponenteDataMapper
  90 + $mock = $this->getCleanMock('Avaliacao_Model_NotaComponenteDataMapper');
  91 +
  92 + $mock->expects($this->at(0))
  93 + ->method('findAll')
  94 + ->with(array(), array('notaAluno' => $notaAluno->id), array('etapa' => 'ASC'))
  95 + ->will($this->returnValue(array()));
  96 +
  97 + $mock->expects($this->at(1))
  98 + ->method('save')
  99 + ->with($notas[0])
  100 + ->will($this->returnValue(TRUE));
  101 +
  102 + $mock->expects($this->at(2))
  103 + ->method('save')
  104 + ->with($notas[1])
  105 + ->will($this->returnValue(TRUE));
  106 +
  107 + $mock->expects($this->at(3))
  108 + ->method('save')
  109 + ->with($notas[2])
  110 + ->will($this->returnValue(TRUE));
  111 +
  112 + $mock->expects($this->at(4))
  113 + ->method('save')
  114 + ->with($notas[3])
  115 + ->will($this->returnValue(TRUE));
  116 +
  117 + $mock->expects($this->at(5))
  118 + ->method('save')
  119 + ->with($notas[4])
  120 + ->will($this->returnValue(TRUE));
  121 +
  122 + $mock->expects($this->at(6))
  123 + ->method('findAll')
  124 + ->with(array(), array('notaAluno' => $notaAluno->id), array('etapa' => 'ASC'))
  125 + ->will($this->returnValue($notas));
  126 +
  127 + $this->_setNotaComponenteDataMapperMock($mock);
  128 +
  129 + // Configura mock para Avaliacao_Model_NotaComponenteMediaDataMapper
  130 + $mock = $this->getCleanMock('Avaliacao_Model_NotaComponenteMediaDataMapper');
  131 +
  132 + $mock->expects($this->at(0))
  133 + ->method('findAll')
  134 + ->with(array(), array('notaAluno' => $notaAluno->id))
  135 + ->will($this->returnValue(array()));
  136 +
  137 + $mock->expects($this->at(1))
  138 + ->method('find')
  139 + ->with(array($notaAluno->id, $this->_getConfigOption('matricula', 'cod_matricula')))
  140 + ->will($this->returnValue(array()));
  141 +
  142 + $mock->expects($this->at(2))
  143 + ->method('save')
  144 + ->with($media)
  145 + ->will($this->returnValue(TRUE));
  146 +
  147 + $this->_setNotaComponenteMediaDataMapperMock($mock);
  148 +
  149 + $service = $this->_getServiceInstance();
  150 + $service->addNotas($notas);
  151 + $service->saveNotas();
  152 +
  153 + $notasSalvas = $service->getNotas();
  154 +
  155 + $etapas = array_merge(
  156 + range(1, count($this->_getConfigOptions('anoLetivoModulo'))),
  157 + array('Rc')
  158 + );
  159 +
  160 + foreach ($notasSalvas as $notaSalva) {
  161 + $key = array_search($notaSalva->etapa, $etapas, FALSE);
  162 + $this->assertTrue($key !== FALSE);
  163 + unset($etapas[$key]);
  164 + }
  165 + }
  166 +
  167 + public function testSalvarNotasDeUmComponenteCurricularNoBoletimEmRecuperacaoComNotasLancadas()
  168 + {
  169 + $notaAluno = $this->_getConfigOption('notaAluno', 'instance');
  170 +
  171 + $notas = array(
  172 + new Avaliacao_Model_NotaComponente(array(
  173 + 'componenteCurricular' => 1,
  174 + 'nota' => 5,
  175 + ))
  176 + );
  177 +
  178 + $notasPersistidas = array(
  179 + new Avaliacao_Model_NotaComponente(array(
  180 + 'id' => 1,
  181 + 'notaAluno' => $notaAluno->id,
  182 + 'componenteCurricular' => 1,
  183 + 'nota' => 6,
  184 + 'notaArredondada' => 6,
  185 + 'etapa' => 1
  186 + )),
  187 + new Avaliacao_Model_NotaComponente(array(
  188 + 'id' => 2,
  189 + 'notaAluno' => $notaAluno->id,
  190 + 'componenteCurricular' => 1,
  191 + 'nota' => 6,
  192 + 'notaArredondada' => 6,
  193 + 'etapa' => 2
  194 + )),
  195 + new Avaliacao_Model_NotaComponente(array(
  196 + 'id' => 3,
  197 + 'notaAluno' => $notaAluno->id,
  198 + 'componenteCurricular' => 1,
  199 + 'nota' => 6,
  200 + 'notaArredondada' => 6,
  201 + 'etapa' => 3
  202 + )),
  203 + new Avaliacao_Model_NotaComponente(array(
  204 + 'id' => 4,
  205 + 'notaAluno' => $notaAluno->id,
  206 + 'componenteCurricular' => 1,
  207 + 'nota' => 6,
  208 + 'notaArredondada' => 6,
  209 + 'etapa' => 4
  210 + ))
  211 + );
  212 +
  213 + // Configura mock para Avaliacao_Model_NotaComponenteDataMapper
  214 + $mock = $this->getCleanMock('Avaliacao_Model_NotaComponenteDataMapper');
  215 +
  216 + $mock->expects($this->at(0))
  217 + ->method('findAll')
  218 + ->with(array(), array('notaAluno' => $notaAluno->id), array('etapa' => 'ASC'))
  219 + ->will($this->returnValue($notasPersistidas));
  220 +
  221 + $mock->expects($this->at(1))
  222 + ->method('save')
  223 + ->with($notas[0])
  224 + ->will($this->returnValue(TRUE));
  225 +
  226 + $notasSalvas = array_merge($notasPersistidas, $notas);
  227 +
  228 + $mock->expects($this->at(2))
  229 + ->method('findAll')
  230 + ->with(array(), array('notaAluno' => $notaAluno->id), array('etapa' => 'ASC'))
  231 + ->will($this->returnValue($notasSalvas));
  232 +
  233 + $this->_setNotaComponenteDataMapperMock($mock);
  234 +
  235 + $service = $this->_getServiceInstance();
  236 + $service->addNotas($notas);
  237 + $service->saveNotas();
  238 +
  239 + $etapas = array_merge(
  240 + range(1, count($this->_getConfigOptions('anoLetivoModulo'))),
  241 + array('Rc')
  242 + );
  243 +
  244 + foreach ($notasSalvas as $notaSalva) {
  245 + $key = array_search($notaSalva->etapa, $etapas, FALSE);
  246 + $this->assertTrue($key !== FALSE);
  247 + unset($etapas[$key]);
  248 + }
  249 + }
  250 +}
0 251 \ No newline at end of file
... ...
ieducar/modules/Avaliacao/_tests/Service/NotaSituacaoCommon.php 0 → 100644
... ... @@ -0,0 +1,436 @@
  1 +<?php
  2 +
  3 +/**
  4 + * i-Educar - Sistema de gestão escolar
  5 + *
  6 + * Copyright (C) 2006 Prefeitura Municipal de Itajaí
  7 + * <ctima@itajai.sc.gov.br>
  8 + *
  9 + * Este programa é software livre; você pode redistribuí-lo e/ou modificá-lo
  10 + * sob os termos da Licença Pública Geral GNU conforme publicada pela Free
  11 + * Software Foundation; tanto a versão 2 da Licença, como (a seu critério)
  12 + * qualquer versão posterior.
  13 + *
  14 + * Este programa é distribuí­do na expectativa de que seja útil, porém, SEM
  15 + * NENHUMA GARANTIA; nem mesmo a garantia implí­cita de COMERCIABILIDADE OU
  16 + * ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA. Consulte a Licença Pública Geral
  17 + * do GNU para mais detalhes.
  18 + *
  19 + * Você deve ter recebido uma cópia da Licença Pública Geral do GNU junto
  20 + * com este programa; se não, escreva para a Free Software Foundation, Inc., no
  21 + * endereço 59 Temple Street, Suite 330, Boston, MA 02111-1307 USA.
  22 + *
  23 + * @author Eriksen Costa Paixão <eriksen.paixao_bs@cobra.com.br>
  24 + * @category i-Educar
  25 + * @license @@license@@
  26 + * @package Avaliacao
  27 + * @subpackage UnitTests
  28 + * @since Arquivo disponível desde a versão 1.1.0
  29 + * @version $Id$
  30 + */
  31 +
  32 +require_once 'Avaliacao/_tests/Service/TestCommon.php';
  33 +
  34 +/**
  35 + * Avaliacao_Service_NotaSituacaoCommon abstract class.
  36 + *
  37 + * @author Eriksen Costa Paixão <eriksen.paixao_bs@cobra.com.br>
  38 + * @category i-Educar
  39 + * @license @@license@@
  40 + * @package Avaliacao
  41 + * @subpackage UnitTests
  42 + * @since Classe disponível desde a versão 1.1.0
  43 + * @version @@package_version@@
  44 + */
  45 +abstract class Avaliacao_Service_NotaSituacaoCommon extends Avaliacao_Service_TestCommon
  46 +{
  47 + protected function _setUpNotaComponenteMediaDataMapperMock(
  48 + Avaliacao_Model_NotaAluno $notaAluno, array $medias)
  49 + {
  50 + // Configura mock para notas
  51 + $mock = $this->getCleanMock('Avaliacao_Model_NotaComponenteMediaDataMapper');
  52 +
  53 + $mock->expects($this->any())
  54 + ->method('findAll')
  55 + ->with(array(), array('notaAluno' => $notaAluno->id))
  56 + ->will($this->returnValue($medias));
  57 +
  58 + $this->_setNotaComponenteMediaDataMapperMock($mock);
  59 + }
  60 +
  61 + /**
  62 + * Nenhuma média lançada, óbvio que está em andamento.
  63 + */
  64 + public function testSituacaoComponentesCurricularesEmAndamento()
  65 + {
  66 + // Expectativa
  67 + $expected = new stdClass();
  68 + $expected->situacao = App_Model_MatriculaSituacao::EM_ANDAMENTO;
  69 + $expected->componentesCurriculares = array();
  70 +
  71 + $notaAluno = $this->_getConfigOption('notaAluno', 'instance');
  72 +
  73 + // Nenhuma média lançada
  74 + $this->_setUpNotaComponenteMediaDataMapperMock($notaAluno, array());
  75 +
  76 + $service = $this->_getServiceInstance();
  77 +
  78 + $this->assertEquals($expected, $service->getSituacaoComponentesCurriculares());
  79 + }
  80 +
  81 + /**
  82 + * Um componente em exame, já que por padrão a regra de avaliação define uma
  83 + * fórmula de recuperação.
  84 + */
  85 + public function testSituacaoComponentesCurricularesUmComponenteLancadoEmExameDeQuatroComponentesTotais()
  86 + {
  87 + // Expectativa
  88 + $expected = new stdClass();
  89 + $expected->situacao = App_Model_MatriculaSituacao::EM_ANDAMENTO;
  90 + $expected->componentesCurriculares = array();
  91 +
  92 + // Matemática estará em exame
  93 + $expected->componentesCurriculares[1] = new stdClass();
  94 + $expected->componentesCurriculares[1]->situacao = App_Model_MatriculaSituacao::EM_EXAME;
  95 +
  96 + $notaAluno = $this->_getConfigOption('notaAluno', 'instance');
  97 +
  98 + // Nenhuma média lançada
  99 + $medias = array(
  100 + 1 => new Avaliacao_Model_NotaComponenteMedia(array(
  101 + 'notaAluno' => $notaAluno->id,
  102 + 'componenteCurricular' => 1,
  103 + 'media' => 5,
  104 + 'mediaArredondada' => 5,
  105 + 'etapa' => 4
  106 + ))
  107 + );
  108 +
  109 + // Configura mock para notas
  110 + $this->_setUpNotaComponenteMediaDataMapperMock($notaAluno, $medias);
  111 +
  112 + $service = $this->_getServiceInstance();
  113 +
  114 + $this->assertEquals($expected, $service->getSituacaoComponentesCurriculares());
  115 + }
  116 +
  117 + /**
  118 + * Um componente em exame, já que por padrão a regra de avaliação define uma
  119 + * fórmula de recuperação. Quatro médias lançadas, 3 aprovadas.
  120 + */
  121 + public function testSituacaoComponentesCurricularesUmComponenteLancadoEmExameDeQuatroComponentesTotaisLancadosAprovados()
  122 + {
  123 + // Expectativa
  124 + $expected = new stdClass();
  125 + $expected->situacao = App_Model_MatriculaSituacao::EM_EXAME;
  126 + $expected->componentesCurriculares = array();
  127 +
  128 + // Matemática estará em exame
  129 + $expected->componentesCurriculares[1] = new stdClass();
  130 + $expected->componentesCurriculares[1]->situacao = App_Model_MatriculaSituacao::EM_EXAME;
  131 +
  132 + $expected->componentesCurriculares[2] = new stdClass();
  133 + $expected->componentesCurriculares[2]->situacao = App_Model_MatriculaSituacao::APROVADO;
  134 +
  135 + $expected->componentesCurriculares[3] = new stdClass();
  136 + $expected->componentesCurriculares[3]->situacao = App_Model_MatriculaSituacao::APROVADO;
  137 +
  138 + $expected->componentesCurriculares[4] = new stdClass();
  139 + $expected->componentesCurriculares[4]->situacao = App_Model_MatriculaSituacao::APROVADO;
  140 +
  141 + $notaAluno = $this->_getConfigOption('notaAluno', 'instance');
  142 +
  143 + // Nenhuma média lançada
  144 + $medias = array(
  145 + new Avaliacao_Model_NotaComponenteMedia(array(
  146 + 'notaAluno' => $notaAluno->id,
  147 + 'componenteCurricular' => 1,
  148 + 'media' => 5,
  149 + 'mediaArredondada' => 5,
  150 + 'etapa' => 4
  151 + )),
  152 + new Avaliacao_Model_NotaComponenteMedia(array(
  153 + 'notaAluno' => $notaAluno->id,
  154 + 'componenteCurricular' => 2,
  155 + 'media' => 6,
  156 + 'mediaArredondada' => 6,
  157 + 'etapa' => 4
  158 + )),
  159 + new Avaliacao_Model_NotaComponenteMedia(array(
  160 + 'notaAluno' => $notaAluno->id,
  161 + 'componenteCurricular' => 3,
  162 + 'media' => 6,
  163 + 'mediaArredondada' => 6,
  164 + 'etapa' => 4
  165 + )),
  166 + new Avaliacao_Model_NotaComponenteMedia(array(
  167 + 'notaAluno' => $notaAluno->id,
  168 + 'componenteCurricular' => 4,
  169 + 'media' => 6,
  170 + 'mediaArredondada' => 6,
  171 + 'etapa' => 4
  172 + ))
  173 + );
  174 +
  175 + // Configura mock para notas
  176 + $this->_setUpNotaComponenteMediaDataMapperMock($notaAluno, $medias);
  177 +
  178 + $service = $this->_getServiceInstance();
  179 +
  180 + $this->assertEquals($expected, $service->getSituacaoComponentesCurriculares());
  181 + }
  182 +
  183 + public function testSituacaoComponentesCurricularesUmComponenteLancadoEmExameDeQuatroComponentesTotaisLancadosDoisAprovadosUmAndamento()
  184 + {
  185 + // Expectativa
  186 + $expected = new stdClass();
  187 + $expected->situacao = App_Model_MatriculaSituacao::EM_ANDAMENTO;
  188 + $expected->componentesCurriculares = array();
  189 +
  190 + // Matemática estará em exame
  191 + $expected->componentesCurriculares[1] = new stdClass();
  192 + $expected->componentesCurriculares[1]->situacao = App_Model_MatriculaSituacao::EM_EXAME;
  193 +
  194 + $expected->componentesCurriculares[2] = new stdClass();
  195 + $expected->componentesCurriculares[2]->situacao = App_Model_MatriculaSituacao::EM_ANDAMENTO;
  196 +
  197 + $expected->componentesCurriculares[3] = new stdClass();
  198 + $expected->componentesCurriculares[3]->situacao = App_Model_MatriculaSituacao::APROVADO;
  199 +
  200 + $expected->componentesCurriculares[4] = new stdClass();
  201 + $expected->componentesCurriculares[4]->situacao = App_Model_MatriculaSituacao::APROVADO;
  202 +
  203 + $notaAluno = $this->_getConfigOption('notaAluno', 'instance');
  204 +
  205 + // Nenhuma média lançada
  206 + $medias = array(
  207 + new Avaliacao_Model_NotaComponenteMedia(array(
  208 + 'notaAluno' => $notaAluno->id,
  209 + 'componenteCurricular' => 1,
  210 + 'media' => 5,
  211 + 'mediaArredondada' => 5,
  212 + 'etapa' => 4
  213 + )),
  214 + new Avaliacao_Model_NotaComponenteMedia(array(
  215 + 'notaAluno' => $notaAluno->id,
  216 + 'componenteCurricular' => 2,
  217 + 'media' => 5.75,
  218 + 'mediaArredondada' => 5,
  219 + 'etapa' => 3
  220 + )),
  221 + new Avaliacao_Model_NotaComponenteMedia(array(
  222 + 'notaAluno' => $notaAluno->id,
  223 + 'componenteCurricular' => 3,
  224 + 'media' => 6,
  225 + 'mediaArredondada' => 6,
  226 + 'etapa' => 4
  227 + )),
  228 + new Avaliacao_Model_NotaComponenteMedia(array(
  229 + 'notaAluno' => $notaAluno->id,
  230 + 'componenteCurricular' => 4,
  231 + 'media' => 6,
  232 + 'mediaArredondada' => 6,
  233 + 'etapa' => 4
  234 + ))
  235 + );
  236 +
  237 + // Configura mock para notas
  238 + $this->_setUpNotaComponenteMediaDataMapperMock($notaAluno, $medias);
  239 +
  240 + $service = $this->_getServiceInstance();
  241 +
  242 + $this->assertEquals($expected, $service->getSituacaoComponentesCurriculares());
  243 + }
  244 +
  245 + public function testSituacaoComponentesCurricularesUmComponenteLancadoEmExameDeQuatroComponentesTotaisLancadosUmAprovadoAposExameEDoisAprovados()
  246 + {
  247 + // Expectativa
  248 + $expected = new stdClass();
  249 + $expected->situacao = App_Model_MatriculaSituacao::EM_EXAME;
  250 + $expected->componentesCurriculares = array();
  251 +
  252 + // Matemática estará em exame
  253 + $expected->componentesCurriculares[1] = new stdClass();
  254 + $expected->componentesCurriculares[1]->situacao = App_Model_MatriculaSituacao::EM_EXAME;
  255 +
  256 + $expected->componentesCurriculares[2] = new stdClass();
  257 + $expected->componentesCurriculares[2]->situacao = App_Model_MatriculaSituacao::APROVADO_APOS_EXAME;
  258 +
  259 + $expected->componentesCurriculares[3] = new stdClass();
  260 + $expected->componentesCurriculares[3]->situacao = App_Model_MatriculaSituacao::APROVADO;
  261 +
  262 + $expected->componentesCurriculares[4] = new stdClass();
  263 + $expected->componentesCurriculares[4]->situacao = App_Model_MatriculaSituacao::APROVADO;
  264 +
  265 + $notaAluno = $this->_getConfigOption('notaAluno', 'instance');
  266 +
  267 + // Nenhuma média lançada
  268 + $medias = array(
  269 + new Avaliacao_Model_NotaComponenteMedia(array(
  270 + 'notaAluno' => $notaAluno->id,
  271 + 'componenteCurricular' => 1,
  272 + 'media' => 5,
  273 + 'mediaArredondada' => 5,
  274 + 'etapa' => 4
  275 + )),
  276 + new Avaliacao_Model_NotaComponenteMedia(array(
  277 + 'notaAluno' => $notaAluno->id,
  278 + 'componenteCurricular' => 2,
  279 + 'media' => 6.5,
  280 + 'mediaArredondada' => 6,
  281 + 'etapa' => 'Rc'
  282 + )),
  283 + new Avaliacao_Model_NotaComponenteMedia(array(
  284 + 'notaAluno' => $notaAluno->id,
  285 + 'componenteCurricular' => 3,
  286 + 'media' => 6,
  287 + 'mediaArredondada' => 6,
  288 + 'etapa' => 4
  289 + )),
  290 + new Avaliacao_Model_NotaComponenteMedia(array(
  291 + 'notaAluno' => $notaAluno->id,
  292 + 'componenteCurricular' => 4,
  293 + 'media' => 6,
  294 + 'mediaArredondada' => 6,
  295 + 'etapa' => 4
  296 + ))
  297 + );
  298 +
  299 + // Configura mock para notas
  300 + $this->_setUpNotaComponenteMediaDataMapperMock($notaAluno, $medias);
  301 +
  302 + $service = $this->_getServiceInstance();
  303 +
  304 + $this->assertEquals($expected, $service->getSituacaoComponentesCurriculares());
  305 + }
  306 +
  307 + public function testSituacaoComponentesCurricularesUmComponenteLancadoEmExameDeQuatroComponentesTotaisLancadosUmAprovadoAposExameUmReprovadoEOutroAprovado()
  308 + {
  309 + // Expectativa
  310 + $expected = new stdClass();
  311 + $expected->situacao = App_Model_MatriculaSituacao::EM_EXAME;
  312 + $expected->componentesCurriculares = array();
  313 +
  314 + // Matemática estará em exame
  315 + $expected->componentesCurriculares[1] = new stdClass();
  316 + $expected->componentesCurriculares[1]->situacao = App_Model_MatriculaSituacao::EM_EXAME;
  317 +
  318 + $expected->componentesCurriculares[2] = new stdClass();
  319 + $expected->componentesCurriculares[2]->situacao = App_Model_MatriculaSituacao::APROVADO_APOS_EXAME;
  320 +
  321 + $expected->componentesCurriculares[3] = new stdClass();
  322 + $expected->componentesCurriculares[3]->situacao = App_Model_MatriculaSituacao::REPROVADO;
  323 +
  324 + $expected->componentesCurriculares[4] = new stdClass();
  325 + $expected->componentesCurriculares[4]->situacao = App_Model_MatriculaSituacao::APROVADO;
  326 +
  327 + $notaAluno = $this->_getConfigOption('notaAluno', 'instance');
  328 +
  329 + // Nenhuma média lançada
  330 + $medias = array(
  331 + new Avaliacao_Model_NotaComponenteMedia(array(
  332 + 'notaAluno' => $notaAluno->id,
  333 + 'componenteCurricular' => 1,
  334 + 'media' => 5,
  335 + 'mediaArredondada' => 5,
  336 + 'etapa' => 4
  337 + )),
  338 + new Avaliacao_Model_NotaComponenteMedia(array(
  339 + 'notaAluno' => $notaAluno->id,
  340 + 'componenteCurricular' => 2,
  341 + 'media' => 6.5,
  342 + 'mediaArredondada' => 6,
  343 + 'etapa' => 'Rc'
  344 + )),
  345 + new Avaliacao_Model_NotaComponenteMedia(array(
  346 + 'notaAluno' => $notaAluno->id,
  347 + 'componenteCurricular' => 3,
  348 + 'media' => 5,
  349 + 'mediaArredondada' => 5,
  350 + 'etapa' => 'Rc'
  351 + )),
  352 + new Avaliacao_Model_NotaComponenteMedia(array(
  353 + 'notaAluno' => $notaAluno->id,
  354 + 'componenteCurricular' => 4,
  355 + 'media' => 6,
  356 + 'mediaArredondada' => 6,
  357 + 'etapa' => 4
  358 + ))
  359 + );
  360 +
  361 + // Configura mock para notas
  362 + $this->_setUpNotaComponenteMediaDataMapperMock($notaAluno, $medias);
  363 +
  364 + $service = $this->_getServiceInstance();
  365 +
  366 + $this->assertEquals($expected, $service->getSituacaoComponentesCurriculares());
  367 + }
  368 +
  369 +/**
  370 + * Um componente reprovado, com uma regra sem recuperação. Quatro médias
  371 + * lançadas, 3 aprovadas.
  372 + */
  373 + public function testSituacaoComponentesCurricularesUmComponenteLancadoReprovadoUmComponenteAbaixoDaMedia()
  374 + {
  375 + $this->_setRegraOption('formulaRecuperacao', NULL);
  376 +
  377 + // Expectativa
  378 + $expected = new stdClass();
  379 + $expected->situacao = App_Model_MatriculaSituacao::REPROVADO;
  380 + $expected->componentesCurriculares = array();
  381 +
  382 + // Matemática estará em exame
  383 + $expected->componentesCurriculares[1] = new stdClass();
  384 + $expected->componentesCurriculares[1]->situacao = App_Model_MatriculaSituacao::REPROVADO;
  385 +
  386 + $expected->componentesCurriculares[2] = new stdClass();
  387 + $expected->componentesCurriculares[2]->situacao = App_Model_MatriculaSituacao::APROVADO;
  388 +
  389 + $expected->componentesCurriculares[3] = new stdClass();
  390 + $expected->componentesCurriculares[3]->situacao = App_Model_MatriculaSituacao::APROVADO;
  391 +
  392 + $expected->componentesCurriculares[4] = new stdClass();
  393 + $expected->componentesCurriculares[4]->situacao = App_Model_MatriculaSituacao::APROVADO;
  394 +
  395 + $notaAluno = $this->_getConfigOption('notaAluno', 'instance');
  396 +
  397 + // Nenhuma média lançada
  398 + $medias = array(
  399 + new Avaliacao_Model_NotaComponenteMedia(array(
  400 + 'notaAluno' => $notaAluno->id,
  401 + 'componenteCurricular' => 1,
  402 + 'media' => 5,
  403 + 'mediaArredondada' => 5,
  404 + 'etapa' => 4
  405 + )),
  406 + new Avaliacao_Model_NotaComponenteMedia(array(
  407 + 'notaAluno' => $notaAluno->id,
  408 + 'componenteCurricular' => 2,
  409 + 'media' => 6,
  410 + 'mediaArredondada' => 6,
  411 + 'etapa' => 4
  412 + )),
  413 + new Avaliacao_Model_NotaComponenteMedia(array(
  414 + 'notaAluno' => $notaAluno->id,
  415 + 'componenteCurricular' => 3,
  416 + 'media' => 6,
  417 + 'mediaArredondada' => 6,
  418 + 'etapa' => 4
  419 + )),
  420 + new Avaliacao_Model_NotaComponenteMedia(array(
  421 + 'notaAluno' => $notaAluno->id,
  422 + 'componenteCurricular' => 4,
  423 + 'media' => 6,
  424 + 'mediaArredondada' => 6,
  425 + 'etapa' => 4
  426 + ))
  427 + );
  428 +
  429 + // Configura mock para notas
  430 + $this->_setUpNotaComponenteMediaDataMapperMock($notaAluno, $medias);
  431 +
  432 + $service = $this->_getServiceInstance();
  433 +
  434 + $this->assertEquals($expected, $service->getSituacaoComponentesCurriculares());
  435 + }
  436 +}
0 437 \ No newline at end of file
... ...
ieducar/modules/Avaliacao/_tests/Service/NotaTest.php 0 → 100644
... ... @@ -0,0 +1,323 @@
  1 +<?php
  2 +
  3 +/**
  4 + * i-Educar - Sistema de gestão escolar
  5 + *
  6 + * Copyright (C) 2006 Prefeitura Municipal de Itajaí
  7 + * <ctima@itajai.sc.gov.br>
  8 + *
  9 + * Este programa é software livre; você pode redistribuí-lo e/ou modificá-lo
  10 + * sob os termos da Licença Pública Geral GNU conforme publicada pela Free
  11 + * Software Foundation; tanto a versão 2 da Licença, como (a seu critério)
  12 + * qualquer versão posterior.
  13 + *
  14 + * Este programa é distribuí­do na expectativa de que seja útil, porém, SEM
  15 + * NENHUMA GARANTIA; nem mesmo a garantia implí­cita de COMERCIABILIDADE OU
  16 + * ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA. Consulte a Licença Pública Geral
  17 + * do GNU para mais detalhes.
  18 + *
  19 + * Você deve ter recebido uma cópia da Licença Pública Geral do GNU junto
  20 + * com este programa; se não, escreva para a Free Software Foundation, Inc., no
  21 + * endereço 59 Temple Street, Suite 330, Boston, MA 02111-1307 USA.
  22 + *
  23 + * @author Eriksen Costa Paixão <eriksen.paixao_bs@cobra.com.br>
  24 + * @category i-Educar
  25 + * @license @@license@@
  26 + * @package Avaliacao
  27 + * @subpackage UnitTests
  28 + * @since Arquivo disponível desde a versão 1.1.0
  29 + * @version $Id$
  30 + */
  31 +
  32 +require_once 'Avaliacao/_tests/Service/TestCommon.php';
  33 +require_once 'Avaliacao/Model/NotaComponente.php';
  34 +
  35 +/**
  36 + * Avaliacao_Service_NotaTest class.
  37 + *
  38 + * @author Eriksen Costa Paixão <eriksen.paixao_bs@cobra.com.br>
  39 + * @category i-Educar
  40 + * @license @@license@@
  41 + * @package Avaliacao
  42 + * @subpackage UnitTests
  43 + * @since Classe disponível desde a versão 1.1.0
  44 + * @version @@package_version@@
  45 + */
  46 +class Avaliacao_Service_NotaTest extends Avaliacao_Service_TestCommon
  47 +{
  48 + public function testInstanciaDeNotaComponenteERegistradaApenasUmaVezNoBoletiom()
  49 + {
  50 + $service = $this->_getServiceInstance();
  51 +
  52 + $nota = new Avaliacao_Model_NotaComponente(array(
  53 + 'componenteCurricular' => 1,
  54 + 'nota' => 5
  55 + ));
  56 +
  57 + // Atribuição simples
  58 + $service->addNota($nota)
  59 + ->addNota($nota);
  60 +
  61 + $this->assertEquals(1, count($service->getNotas()));
  62 +
  63 + // Via atribuição em lote
  64 + $nota = clone $nota;
  65 + $service->addNotas(array($nota, $nota, $nota));
  66 +
  67 + $this->assertEquals(2, count($service->getNotas()));
  68 + }
  69 +
  70 + public function testAdicionaNotaNoBoletim()
  71 + {
  72 + $service = $this->_getServiceInstance();
  73 +
  74 + $nota = new Avaliacao_Model_NotaComponente(array(
  75 + 'componenteCurricular' => 1,
  76 + 'nota' => 5.72
  77 + ));
  78 +
  79 + $notaOriginal = clone $nota;
  80 + $service->addNota($nota);
  81 +
  82 + $notas = $service->getNotas();
  83 + $serviceNota = array_shift($notas);
  84 +
  85 + // Valores declarados explicitamente, verificação explícita
  86 + $this->assertEquals($notaOriginal->nota, $serviceNota->nota);
  87 + $this->assertEquals($notaOriginal->get('componenteCurricular'), $serviceNota->get('componenteCurricular'));
  88 +
  89 + // Valores populados pelo service
  90 + $this->assertNotEquals($notaOriginal->etapa, $serviceNota->etapa);
  91 + $this->assertEquals(1, $serviceNota->etapa);
  92 + $this->assertEquals(5, $serviceNota->notaArredondada);
  93 +
  94 + // Validadores injetados no objeto
  95 + $validators = $serviceNota->getValidatorCollection();
  96 + $this->assertType('CoreExt_Validate_Choice', $validators['componenteCurricular']);
  97 + $this->assertType('CoreExt_Validate_Choice', $validators['etapa']);
  98 +
  99 + // Opções dos validadores
  100 +
  101 + // Componentes curriculares existentes para o aluno
  102 + $this->assertEquals(
  103 + array_keys($this->_getConfigOptions('componenteCurricular')),
  104 + array_values($validators['componenteCurricular']->getOption('choices'))
  105 + );
  106 +
  107 + // Etapas possíveis para o lançamento de nota
  108 + $this->assertEquals(
  109 + array_merge(range(1, count($this->_getConfigOptions('anoLetivoModulo'))), array('Rc')),
  110 + $validators['etapa']->getOption('choices')
  111 + );
  112 + }
  113 +
  114 + /**
  115 + * Testa o service adicionando notas de apenas um componente curricular,
  116 + * para todas as etapas regulares (1 a 4).
  117 + */
  118 + public function testSalvarNotasDeUmComponenteCurricularNoBoletim()
  119 + {
  120 + $notaAluno = $this->_getConfigOption('notaAluno', 'instance');
  121 +
  122 + $notas = array(
  123 + new Avaliacao_Model_NotaComponente(array(
  124 + 'componenteCurricular' => 1,
  125 + 'nota' => 7.25,
  126 + 'etapa' => 1
  127 + )),
  128 + new Avaliacao_Model_NotaComponente(array(
  129 + 'componenteCurricular' => 1,
  130 + 'nota' => 9.25,
  131 + 'etapa' => 2
  132 + )),
  133 + new Avaliacao_Model_NotaComponente(array(
  134 + 'componenteCurricular' => 1,
  135 + 'nota' => 8,
  136 + 'etapa' => 3
  137 + )),
  138 + new Avaliacao_Model_NotaComponente(array(
  139 + 'componenteCurricular' => 1,
  140 + 'nota' => 8.5,
  141 + 'etapa' => 4
  142 + )),
  143 + );
  144 +
  145 + $media = new Avaliacao_Model_NotaComponenteMedia(array(
  146 + 'notaAluno' => $notaAluno->id,
  147 + 'componenteCurricular' => 1,
  148 + 'media' => 8.25,
  149 + 'mediaArredondada' => 8,
  150 + 'etapa' => 4
  151 + ));
  152 +
  153 + $media->markOld();
  154 +
  155 + // Configura mock para Avaliacao_Model_NotaComponenteDataMapper
  156 + $mock = $this->getCleanMock('Avaliacao_Model_NotaComponenteDataMapper');
  157 +
  158 + $mock->expects($this->at(0))
  159 + ->method('findAll')
  160 + ->with(array(), array('notaAluno' => $notaAluno->id), array('etapa' => 'ASC'))
  161 + ->will($this->returnValue(array()));
  162 +
  163 + $mock->expects($this->at(1))
  164 + ->method('save')
  165 + ->with($notas[0])
  166 + ->will($this->returnValue(TRUE));
  167 +
  168 + $mock->expects($this->at(2))
  169 + ->method('save')
  170 + ->with($notas[1])
  171 + ->will($this->returnValue(TRUE));
  172 +
  173 + $mock->expects($this->at(3))
  174 + ->method('save')
  175 + ->with($notas[2])
  176 + ->will($this->returnValue(TRUE));
  177 +
  178 + $mock->expects($this->at(4))
  179 + ->method('save')
  180 + ->with($notas[3])
  181 + ->will($this->returnValue(TRUE));
  182 +
  183 + $mock->expects($this->at(5))
  184 + ->method('findAll')
  185 + ->with(array(), array('notaAluno' => $notaAluno->id), array('etapa' => 'ASC'))
  186 + ->will($this->returnValue($notas));
  187 +
  188 + $this->_setNotaComponenteDataMapperMock($mock);
  189 +
  190 + // Configura mock para Avaliacao_Model_NotaComponenteMediaDataMapper
  191 + $mock = $this->getCleanMock('Avaliacao_Model_NotaComponenteMediaDataMapper');
  192 +
  193 + $mock->expects($this->at(0))
  194 + ->method('findAll')
  195 + ->with(array(), array('notaAluno' => $notaAluno->id))
  196 + ->will($this->returnValue(array()));
  197 +
  198 + $mock->expects($this->at(1))
  199 + ->method('find')
  200 + ->with(array($notaAluno->id, $this->_getConfigOption('matricula', 'cod_matricula')))
  201 + ->will($this->returnValue(NULL));
  202 +
  203 + $mock->expects($this->at(2))
  204 + ->method('save')
  205 + ->with($media)
  206 + ->will($this->returnValue(TRUE));
  207 +
  208 + $this->_setNotaComponenteMediaDataMapperMock($mock);
  209 +
  210 + $service = $this->_getServiceInstance();
  211 +
  212 + $service->addNotas($notas);
  213 + $service->saveNotas();
  214 + }
  215 +
  216 + /**
  217 + * Testa o service adicionando novas notas para um componente curricular,
  218 + * que inclusive já tem a nota lançada para a segunda etapa.
  219 + */
  220 + public function testSalvasNotasDeUmComponenteComEtapasLancadas()
  221 + {
  222 + $notaAluno = $this->_getConfigOption('notaAluno', 'instance');
  223 +
  224 + $notas = array(
  225 + new Avaliacao_Model_NotaComponente(array(
  226 + 'componenteCurricular' => 1,
  227 + 'nota' => 7.25,
  228 + 'etapa' => 2
  229 + )),
  230 + new Avaliacao_Model_NotaComponente(array(
  231 + 'componenteCurricular' => 1,
  232 + 'nota' => 9.25,
  233 + 'etapa' => 3
  234 + ))
  235 + );
  236 +
  237 + $notasPersistidas = array(
  238 + new Avaliacao_Model_NotaComponente(array(
  239 + 'id' => 1,
  240 + 'notaAluno' => $notaAluno->id,
  241 + 'componenteCurricular' => 1,
  242 + 'nota' => 8.25,
  243 + 'notaArredondada' => 8,
  244 + 'etapa' => 1
  245 + )),
  246 + new Avaliacao_Model_NotaComponente(array(
  247 + 'id' => 2,
  248 + 'notaAluno' => $notaAluno->id,
  249 + 'componenteCurricular' => 1,
  250 + 'nota' => 9.5,
  251 + 'notaArredondada' => 9,
  252 + 'etapa' => 2
  253 + ))
  254 + );
  255 +
  256 + $mediasPersistidas = array(
  257 + new Avaliacao_Model_NotaComponenteMedia(array(
  258 + 'notaAluno' => $notaAluno->id,
  259 + 'componenteCurricular' => 1,
  260 + 'media' => 4.4375,
  261 + 'mediaArredondada' => 4,
  262 + 'etapa' => 2
  263 + ))
  264 + );
  265 +
  266 + $mediasPersistidas[0]->markOld();
  267 +
  268 + // Configura mock para Avaliacao_Model_NotaComponenteDataMapper
  269 + $mock = $this->getCleanMock('Avaliacao_Model_NotaComponenteDataMapper');
  270 +
  271 + $mock->expects($this->at(0))
  272 + ->method('findAll')
  273 + ->with(array(), array('notaAluno' => $notaAluno->id), array('etapa' => 'ASC'))
  274 + ->will($this->returnValue($notasPersistidas));
  275 +
  276 + $mock->expects($this->at(1))
  277 + ->method('save')
  278 + ->with($notas[0])
  279 + ->will($this->returnValue(TRUE));
  280 +
  281 + $mock->expects($this->at(2))
  282 + ->method('save')
  283 + ->with($notas[1])
  284 + ->will($this->returnValue(TRUE));
  285 +
  286 + $mock->expects($this->at(3))
  287 + ->method('findAll')
  288 + ->with(array(), array('notaAluno' => $notaAluno->id), array('etapa' => 'ASC'))
  289 + ->will($this->returnValue(array($notasPersistidas[0], $notas[0], $notas[1])));
  290 +
  291 + $this->_setNotaComponenteDataMapperMock($mock);
  292 +
  293 + // Configura mock para Avaliacao_Model_NotaComponenteMediaDataMapper
  294 + $mock = $this->getCleanMock('Avaliacao_Model_NotaComponenteMediaDataMapper');
  295 +
  296 + $mock->expects($this->at(0))
  297 + ->method('findAll')
  298 + ->with(array(), array('notaAluno' => $notaAluno->id))
  299 + ->will($this->returnValue($mediasPersistidas));
  300 +
  301 + $mock->expects($this->at(1))
  302 + ->method('find')
  303 + ->with(array($notaAluno->id, $this->_getConfigOption('matricula', 'cod_matricula')))
  304 + ->will($this->returnValue($mediasPersistidas[0]));
  305 +
  306 + // Valores de média esperados
  307 + $media = clone $mediasPersistidas[0];
  308 + $media->etapa = 3;
  309 + $media->media = 6.1875;
  310 + $media->mediaArredondada = 6;
  311 +
  312 + $mock->expects($this->at(2))
  313 + ->method('save')
  314 + ->with($media)
  315 + ->will($this->returnValue(TRUE));
  316 +
  317 + $this->_setNotaComponenteMediaDataMapperMock($mock);
  318 +
  319 + $service = $this->_getServiceInstance();
  320 + $service->addNotas($notas);
  321 + $service->saveNotas();
  322 + }
  323 +}
0 324 \ No newline at end of file
... ...
ieducar/modules/Avaliacao/_tests/Service/ParecerDescritivoAlunoTest.php 0 → 100644
... ... @@ -0,0 +1,75 @@
  1 +<?php
  2 +
  3 +/**
  4 + * i-Educar - Sistema de gestão escolar
  5 + *
  6 + * Copyright (C) 2006 Prefeitura Municipal de Itajaí
  7 + * <ctima@itajai.sc.gov.br>
  8 + *
  9 + * Este programa é software livre; você pode redistribuí-lo e/ou modificá-lo
  10 + * sob os termos da Licença Pública Geral GNU conforme publicada pela Free
  11 + * Software Foundation; tanto a versão 2 da Licença, como (a seu critério)
  12 + * qualquer versão posterior.
  13 + *
  14 + * Este programa é distribuí­do na expectativa de que seja útil, porém, SEM
  15 + * NENHUMA GARANTIA; nem mesmo a garantia implí­cita de COMERCIABILIDADE OU
  16 + * ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA. Consulte a Licença Pública Geral
  17 + * do GNU para mais detalhes.
  18 + *
  19 + * Você deve ter recebido uma cópia da Licença Pública Geral do GNU junto
  20 + * com este programa; se não, escreva para a Free Software Foundation, Inc., no
  21 + * endereço 59 Temple Street, Suite 330, Boston, MA 02111-1307 USA.
  22 + *
  23 + * @author Eriksen Costa Paixão <eriksen.paixao_bs@cobra.com.br>
  24 + * @category i-Educar
  25 + * @license @@license@@
  26 + * @package Avaliacao
  27 + * @subpackage UnitTests
  28 + * @since Arquivo disponível desde a versão 1.1.0
  29 + * @version $Id$
  30 + */
  31 +
  32 +require_once 'Avaliacao/_tests/Service/TestCommon.php';
  33 +
  34 +/**
  35 + * Avaliacao_Service_ParecerDescritivoAlunoTest class.
  36 + *
  37 + * @author Eriksen Costa Paixão <eriksen.paixao_bs@cobra.com.br>
  38 + * @category i-Educar
  39 + * @license @@license@@
  40 + * @package Avaliacao
  41 + * @subpackage UnitTests
  42 + * @since Classe disponível desde a versão 1.1.0
  43 + * @version @@package_version@@
  44 + */
  45 +class Avaliacao_Service_ParecerDescritivoAlunoTest extends Avaliacao_Service_TestCommon
  46 +{
  47 + public function testCriaNovaInstanciaDeParecerDescritivoAluno()
  48 + {
  49 + $parecerAluno = $this->_getConfigOption('parecerDescritivoAluno', 'instance');
  50 +
  51 + $parecerSave = clone $parecerAluno;
  52 + $parecerSave->id = NULL;
  53 +
  54 + // Configura mock para Avaliacao_Model_ParecerDescritivoAlunoDataMapper
  55 + $mock = $this->getCleanMock('Avaliacao_Model_ParecerDescritivoAlunoDataMapper');
  56 + $mock->expects($this->at(0))
  57 + ->method('findAll')
  58 + ->with(array(), array('matricula' => $this->_getConfigOption('matricula', 'cod_matricula')))
  59 + ->will($this->returnValue(array()));
  60 +
  61 + $mock->expects($this->at(1))
  62 + ->method('save')
  63 + ->with($parecerSave)
  64 + ->will($this->returnValue(TRUE));
  65 +
  66 + $mock->expects($this->at(2))
  67 + ->method('findAll')
  68 + ->with(array(), array('matricula' => $this->_getConfigOption('matricula', 'cod_matricula')))
  69 + ->will($this->returnValue(array($parecerAluno)));
  70 +
  71 + $this->_setParecerDescritivoAlunoDataMapperMock($mock);
  72 +
  73 + $service = $this->_getServiceInstance();
  74 + }
  75 +}
0 76 \ No newline at end of file
... ...
ieducar/modules/Avaliacao/_tests/Service/ParecerDescritivoCommon.php 0 → 100644
... ... @@ -0,0 +1,277 @@
  1 +<?php
  2 +
  3 +/**
  4 + * i-Educar - Sistema de gestão escolar
  5 + *
  6 + * Copyright (C) 2006 Prefeitura Municipal de Itajaí
  7 + * <ctima@itajai.sc.gov.br>
  8 + *
  9 + * Este programa é software livre; você pode redistribuí-lo e/ou modificá-lo
  10 + * sob os termos da Licença Pública Geral GNU conforme publicada pela Free
  11 + * Software Foundation; tanto a versão 2 da Licença, como (a seu critério)
  12 + * qualquer versão posterior.
  13 + *
  14 + * Este programa é distribuí­do na expectativa de que seja útil, porém, SEM
  15 + * NENHUMA GARANTIA; nem mesmo a garantia implí­cita de COMERCIABILIDADE OU
  16 + * ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA. Consulte a Licença Pública Geral
  17 + * do GNU para mais detalhes.
  18 + *
  19 + * Você deve ter recebido uma cópia da Licença Pública Geral do GNU junto
  20 + * com este programa; se não, escreva para a Free Software Foundation, Inc., no
  21 + * endereço 59 Temple Street, Suite 330, Boston, MA 02111-1307 USA.
  22 + *
  23 + * @author Eriksen Costa Paixão <eriksen.paixao_bs@cobra.com.br>
  24 + * @category i-Educar
  25 + * @license @@license@@
  26 + * @package Avaliacao
  27 + * @subpackage UnitTests
  28 + * @since Arquivo disponível desde a versão 1.1.0
  29 + * @version $Id$
  30 + */
  31 +
  32 +require_once 'Avaliacao/_tests/Service/TestCommon.php';
  33 +
  34 +/**
  35 + * Avaliacao_Service_ParecerDescritivoCommon abstract class.
  36 + *
  37 + * @author Eriksen Costa Paixão <eriksen.paixao_bs@cobra.com.br>
  38 + * @category i-Educar
  39 + * @license @@license@@
  40 + * @package Avaliacao
  41 + * @subpackage UnitTests
  42 + * @since Classe disponível desde a versão 1.1.0
  43 + * @version @@package_version@@
  44 + */
  45 +abstract class Avaliacao_Service_ParecerDescritivoCommon extends Avaliacao_Service_TestCommon
  46 +{
  47 + /**
  48 + * Retorna as etapas possíveis para a instância do parecer.
  49 + * @return array
  50 + */
  51 + protected function _getEtapasPossiveisParecer()
  52 + {
  53 + $parecerDescritivo = $this->_getRegraOption('parecerDescritivo');
  54 +
  55 + $anuais = array(
  56 + RegraAvaliacao_Model_TipoParecerDescritivo::ANUAL_GERAL,
  57 + RegraAvaliacao_Model_TipoParecerDescritivo::ANUAL_COMPONENTE
  58 + );
  59 +
  60 + $etapas = array(
  61 + RegraAvaliacao_Model_TipoParecerDescritivo::ETAPA_GERAL,
  62 + RegraAvaliacao_Model_TipoParecerDescritivo::ETAPA_COMPONENTE
  63 + );
  64 +
  65 + if (in_array($parecerDescritivo, $anuais)) {
  66 + return array('An');
  67 + }
  68 +
  69 + return $this->_getEtapasPossiveis();
  70 + }
  71 +
  72 + /**
  73 + * Retorna o nome da classe CoreExt_DataMapper correta de acordo com a
  74 + * configuração da regra. Método auxiliar para criação de mocks.
  75 + *
  76 + * @return string
  77 + */
  78 + protected function _getParecerDescritivoDataMapper()
  79 + {
  80 + $parecerDescritivo = $this->_getRegraOption('parecerDescritivo');
  81 +
  82 + switch($parecerDescritivo) {
  83 + case RegraAvaliacao_Model_TipoParecerDescritivo::ANUAL_GERAL:
  84 + case RegraAvaliacao_Model_TipoParecerDescritivo::ETAPA_GERAL:
  85 + $mapper = 'Avaliacao_Model_ParecerDescritivoGeralDataMapper';
  86 + break;
  87 + case RegraAvaliacao_Model_TipoParecerDescritivo::ANUAL_COMPONENTE:
  88 + case RegraAvaliacao_Model_TipoParecerDescritivo::ETAPA_COMPONENTE:
  89 + $mapper = 'Avaliacao_Model_ParecerDescritivoComponenteDataMapper';
  90 + break;
  91 + }
  92 +
  93 + return $mapper;
  94 + }
  95 +
  96 + /**
  97 + * @return Avaliacao_Model_ParecerDescritivoAbstract
  98 + * @see Avaliacao_Service_ParecerDescritivoCommon#testInstanciaDeParecerERegistradaApenasUmaVezNoBoletim()
  99 + */
  100 + protected abstract function _getTestInstanciaDeParecerERegistradaApenasUmaVezNoBoletim();
  101 +
  102 + /**
  103 + * @return Avaliacao_Model_ParecerDescritivoAbstract
  104 + * @see Avaliacao_Service_ParecerDescritivoCommon#testAdicionaParecerNoBoletim()
  105 + */
  106 + protected abstract function _getTestAdicionaParecerNoBoletim();
  107 +
  108 + /**
  109 + * @param Avaliacao_Model_ParecerDescritivoAbstract $parecer
  110 + * @see Avaliacao_Service_ParecerDescritivoCommon#testAdicionaParecerNoBoletim()
  111 + */
  112 + protected abstract function _testAdicionaParecerNoBoletimVerificaValidadores(Avaliacao_Model_ParecerDescritivoAbstract $parecer);
  113 +
  114 + /**
  115 + * @return array
  116 + * @see Avaliacao_Service_ParecerDescritivoCommon#testSalvarPareceresNoBoletim()
  117 + */
  118 + protected abstract function _getTestSalvarPareceresNoBoletimInstanciasDePareceres();
  119 +
  120 + /**
  121 + * @return array
  122 + * @see Avaliacao_Service_ParecerDescritivoCommon#testSalvarPareceresNoBoletimComEtapasJaLancadas()
  123 + */
  124 + protected abstract function _getTestSalvarPareceresNoBoletimComEtapasJaLancadasInstancias();
  125 +
  126 + /**
  127 + * @return array
  128 + * @see Avaliacao_Service_ParecerDescritivoCommon#testSalvarPareceresNoBoletimComEtapasJaLancadas()
  129 + */
  130 + protected abstract function _getTestSalvarPareceresNoBoletimComEtapasJaLancadasInstanciasJaLancadas();
  131 +
  132 + /**
  133 + * @return array
  134 + * @see Avaliacao_Service_ParecerDescritivoCommon#testSalvasPareceresAtualizandoEtapaDaUltimaInstanciaAdicionadaNoBoletimComEtapasLancadas()
  135 + */
  136 + protected abstract function _getTestSalvasPareceresAtualizandoEtapaDaUltimaInstanciaAdicionadaNoBoletimComEtapasLancadasInstancias();
  137 +
  138 + /**
  139 + * @return array
  140 + * @see Avaliacao_Service_ParecerDescritivoCommon#testSalvasPareceresAtualizandoEtapaDaUltimaInstanciaAdicionadaNoBoletimComEtapasLancadas()
  141 + */
  142 + protected abstract function _getTestSalvasPareceresAtualizandoEtapaDaUltimaInstanciaAdicionadaNoBoletimComEtapasLancadasInstanciasLancadas();
  143 +
  144 + /**
  145 + * @see Avaliacao_Service_ParecerDescritivoCommon#_getTestInstanciaDeParecerERegistradaApenasUmaVezNoBoletim()
  146 + */
  147 + public function testInstanciaDeParecerERegistradaApenasUmaVezNoBoletim()
  148 + {
  149 + $service = $this->_getServiceInstance();
  150 +
  151 + $parecer = $this->_getTestInstanciaDeParecerERegistradaApenasUmaVezNoBoletim();
  152 +
  153 + $service->addParecer($parecer)
  154 + ->addParecer($parecer);
  155 +
  156 + $this->assertEquals(1, count($service->getPareceres()));
  157 +
  158 + $parecer = clone $parecer;
  159 + $service->addPareceres(array($parecer, $parecer, $parecer));
  160 +
  161 + $this->assertEquals(2, count($service->getPareceres()));
  162 + }
  163 +
  164 + /**
  165 + * @see Avaliacao_Service_ParecerDescritivoCommon#_getTestAdicionaParecerNoBoletim()
  166 + * @see Avaliacao_Service_ParecerDescritivoCommon#_testAdicionaParecerNoBoletimVerificaValidadores()
  167 + */
  168 + public function testAdicionaParecerNoBoletim()
  169 + {
  170 + $service = $this->_getServiceInstance();
  171 +
  172 + $parecer = $this->_getTestAdicionaParecerNoBoletim();
  173 +
  174 + $parecerOriginal = clone $parecer;
  175 + $service->addParecer($parecer);
  176 +
  177 + $pareceres = $service->getPareceres();
  178 + $serviceParecer = array_shift($pareceres);
  179 +
  180 + $this->_testAdicionaParecerNoBoletimVerificaValidadores($serviceParecer);
  181 + }
  182 +
  183 + /**
  184 + * @see Avaliacao_Service_ParecerDescritivoCommon#_getTestSalvarPareceresNoBoletimInstanciasDePareceres()
  185 + */
  186 + public function testSalvarPareceresNoBoletim()
  187 + {
  188 + $parecerAluno = $this->_getConfigOption('parecerDescritivoAluno', 'instance');
  189 +
  190 + $pareceres = $this->_getTestSalvarPareceresNoBoletimInstanciasDePareceres();
  191 +
  192 + // Configura mock para Avaliacao_Model_Parecer
  193 + $mock = $this->getCleanMock($this->_getParecerDescritivoDataMapper());
  194 +
  195 + $mock->expects($this->at(0))
  196 + ->method('findAll')
  197 + ->with(array(), array('parecerDescritivoAluno' => $parecerAluno->id), array('etapa' => 'ASC'))
  198 + ->will($this->returnValue(array()));
  199 +
  200 + foreach ($pareceres as $i => $parecer) {
  201 + $mock->expects($this->at($i + 1))
  202 + ->method('save')
  203 + ->with($parecer)
  204 + ->will($this->returnValue(TRUE));
  205 + }
  206 +
  207 + $this->_setParecerDescritivoAbstractDataMapperMock($mock);
  208 +
  209 + $service = $this->_getServiceInstance();
  210 + $service->addPareceres($pareceres);
  211 + $service->savePareceres();
  212 + }
  213 +
  214 + /**
  215 + * @see Avaliacao_Service_ParecerDescritivoCommon#_getTestSalvarPareceresNoBoletimComEtapasJaLancadasInstancias()
  216 + * @see Avaliacao_Service_ParecerDescritivoCommon#_getTestSalvarPareceresNoBoletimComEtapasJaLancadasInstanciasJaLancadas()
  217 + */
  218 + public function testSalvarPareceresNoBoletimComEtapasJaLancadas()
  219 + {
  220 + $parecerAluno = $this->_getConfigOption('parecerDescritivoAluno', 'instance');
  221 +
  222 + $pareceres = $this->_getTestSalvarPareceresNoBoletimComEtapasJaLancadasInstancias();
  223 +
  224 + // Configura mock para Avaliacao_Model_Parecer
  225 + $mock = $this->getCleanMock($this->_getParecerDescritivoDataMapper());
  226 +
  227 + $mock->expects($this->at(0))
  228 + ->method('findAll')
  229 + ->with(array(), array('parecerDescritivoAluno' => $parecerAluno->id), array('etapa' => 'ASC'))
  230 + ->will($this->returnValue($this->_getTestSalvarPareceresNoBoletimComEtapasJaLancadasInstanciasJaLancadas()));
  231 +
  232 + foreach ($pareceres as $i => $parecer) {
  233 + $mock->expects($this->at($i + 1))
  234 + ->method('save')
  235 + ->with($parecer)
  236 + ->will($this->returnValue(TRUE));
  237 + }
  238 +
  239 + $this->_setParecerDescritivoAbstractDataMapperMock($mock);
  240 +
  241 + $service = $this->_getServiceInstance();
  242 + $service->addPareceres($pareceres);
  243 + $service->savePareceres();
  244 + }
  245 +
  246 + /**
  247 + * @see Avaliacao_Service_ParecerDescritivoCommon#_getTestSalvasPareceresAtualizandoEtapaDaUltimaInstanciaAdicionadaNoBoletimComEtapasLancadasInstancias()
  248 + * @see Avaliacao_Service_ParecerDescritivoCommon#_getTestSalvasPareceresAtualizandoEtapaDaUltimaInstanciaAdicionadaNoBoletimComEtapasLancadasInstanciasLancadas()
  249 + */
  250 + public function testSalvasPareceresAtualizandoEtapaDaUltimaInstanciaAdicionadaNoBoletimComEtapasLancadas()
  251 + {
  252 + $parecerAluno = $this->_getConfigOption('parecerDescritivoAluno', 'instance');
  253 +
  254 + $pareceres = $this->_getTestSalvasPareceresAtualizandoEtapaDaUltimaInstanciaAdicionadaNoBoletimComEtapasLancadasInstancias();
  255 +
  256 + // Configura mock para Avaliacao_Model_Parecer
  257 + $mock = $this->getCleanMock($this->_getParecerDescritivoDataMapper());
  258 +
  259 + $mock->expects($this->at(0))
  260 + ->method('findAll')
  261 + ->with(array(), array('parecerDescritivoAluno' => $parecerAluno->id), array('etapa' => 'ASC'))
  262 + ->will($this->returnValue($this->_getTestSalvasPareceresAtualizandoEtapaDaUltimaInstanciaAdicionadaNoBoletimComEtapasLancadasInstanciasLancadas()));
  263 +
  264 + foreach ($pareceres as $i => $parecer) {
  265 + $mock->expects($this->at($i + 1))
  266 + ->method('save')
  267 + ->with($parecer)
  268 + ->will($this->returnValue(TRUE));
  269 + }
  270 +
  271 + $this->_setParecerDescritivoAbstractDataMapperMock($mock);
  272 +
  273 + $service = $this->_getServiceInstance();
  274 + $service->addPareceres($pareceres);
  275 + $service->savePareceres();
  276 + }
  277 +}
0 278 \ No newline at end of file
... ...
ieducar/modules/Avaliacao/_tests/Service/ParecerDescritivoComponenteAnualTest.php 0 → 100644
... ... @@ -0,0 +1,165 @@
  1 +<?php
  2 +
  3 +/**
  4 + * i-Educar - Sistema de gestão escolar
  5 + *
  6 + * Copyright (C) 2006 Prefeitura Municipal de Itajaí
  7 + * <ctima@itajai.sc.gov.br>
  8 + *
  9 + * Este programa é software livre; você pode redistribuí-lo e/ou modificá-lo
  10 + * sob os termos da Licença Pública Geral GNU conforme publicada pela Free
  11 + * Software Foundation; tanto a versão 2 da Licença, como (a seu critério)
  12 + * qualquer versão posterior.
  13 + *
  14 + * Este programa é distribuí­do na expectativa de que seja útil, porém, SEM
  15 + * NENHUMA GARANTIA; nem mesmo a garantia implí­cita de COMERCIABILIDADE OU
  16 + * ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA. Consulte a Licença Pública Geral
  17 + * do GNU para mais detalhes.
  18 + *
  19 + * Você deve ter recebido uma cópia da Licença Pública Geral do GNU junto
  20 + * com este programa; se não, escreva para a Free Software Foundation, Inc., no
  21 + * endereço 59 Temple Street, Suite 330, Boston, MA 02111-1307 USA.
  22 + *
  23 + * @author Eriksen Costa Paixão <eriksen.paixao_bs@cobra.com.br>
  24 + * @category i-Educar
  25 + * @license @@license@@
  26 + * @package Avaliacao
  27 + * @subpackage UnitTests
  28 + * @since Arquivo disponível desde a versão 1.1.0
  29 + * @version $Id$
  30 + */
  31 +
  32 +require_once 'Avaliacao/_tests/Service/ParecerDescritivoCommon.php';
  33 +
  34 +/**
  35 + * Avaliacao_Service_ParecerDescritivoComponenteAnualTest class.
  36 + *
  37 + * @author Eriksen Costa Paixão <eriksen.paixao_bs@cobra.com.br>
  38 + * @category i-Educar
  39 + * @license @@license@@
  40 + * @package Avaliacao
  41 + * @subpackage UnitTests
  42 + * @since Classe disponível desde a versão 1.1.0
  43 + * @version @@package_version@@
  44 + */
  45 +class Avaliacao_Service_ParecerDescritivoComponenteAnualTest extends Avaliacao_Service_ParecerDescritivoCommon
  46 +{
  47 + protected function setUp()
  48 + {
  49 + $this->_setRegraOption('parecerDescritivo', RegraAvaliacao_Model_TipoParecerDescritivo::ANUAL_COMPONENTE);
  50 + parent::setUp();
  51 + }
  52 +
  53 + protected function _getTestInstanciaDeParecerERegistradaApenasUmaVezNoBoletim()
  54 + {
  55 + return new Avaliacao_Model_ParecerDescritivoComponente(array(
  56 + 'componenteCurricular' => 1,
  57 + 'parecer' => 'Ok.'
  58 + ));
  59 + }
  60 +
  61 + protected function _getTestAdicionaParecerNoBoletim()
  62 + {
  63 + return new Avaliacao_Model_ParecerDescritivoComponente(array(
  64 + 'componenteCurricular' => 1,
  65 + 'parecer' => 'N/D.'
  66 + ));
  67 + }
  68 +
  69 + protected function _getTestSalvarPareceresNoBoletimInstanciasDePareceres()
  70 + {
  71 + return array(
  72 + new Avaliacao_Model_ParecerDescritivoComponente(array(
  73 + 'componenteCurricular' => 1,
  74 + 'parecer' => 'N/D.',
  75 + 'etapa' => 'An'
  76 + )),
  77 + new Avaliacao_Model_ParecerDescritivoComponente(array(
  78 + 'componenteCurricular' => 2,
  79 + 'parecer' => 'N/D.',
  80 + 'etapa' => 'An'
  81 + )),
  82 + new Avaliacao_Model_ParecerDescritivoComponente(array(
  83 + 'componenteCurricular' => 3,
  84 + 'parecer' => 'N/D.',
  85 + 'etapa' => 'An'
  86 + )),
  87 + new Avaliacao_Model_ParecerDescritivoComponente(array(
  88 + 'componenteCurricular' => 4,
  89 + 'parecer' => 'N/D.',
  90 + 'etapa' => 'An'
  91 + ))
  92 + );
  93 + }
  94 +
  95 + protected function _getTestSalvarPareceresNoBoletimComEtapasJaLancadasInstancias()
  96 + {
  97 + return array(
  98 + new Avaliacao_Model_ParecerDescritivoComponente(array(
  99 + 'componenteCurricular' => 1,
  100 + 'parecer' => 'N/D.',
  101 + 'etapa' => 'An'
  102 + )),
  103 + new Avaliacao_Model_ParecerDescritivoComponente(array(
  104 + 'componenteCurricular' => 2,
  105 + 'parecer' => 'N/D.',
  106 + 'etapa' => 'An'
  107 + ))
  108 + );
  109 + }
  110 +
  111 + protected function _getTestSalvarPareceresNoBoletimComEtapasJaLancadasInstanciasJaLancadas()
  112 + {
  113 + return array(
  114 + new Avaliacao_Model_ParecerDescritivoComponente(array(
  115 + 'id' => 1,
  116 + 'componenteCurricular' => 1,
  117 + 'parecer' => 'N/D.',
  118 + 'etapa' => 'An'
  119 + ))
  120 + );
  121 + }
  122 +
  123 + protected function _getTestSalvasPareceresAtualizandoEtapaDaUltimaInstanciaAdicionadaNoBoletimComEtapasLancadasInstancias()
  124 + {
  125 + return array(
  126 + new Avaliacao_Model_ParecerDescritivoComponente(array(
  127 + 'componenteCurricular' => 1,
  128 + 'parecer' => 'N/D.',
  129 + 'etapa' => 'An'
  130 + )),
  131 + new Avaliacao_Model_ParecerDescritivoComponente(array(
  132 + 'componenteCurricular' => 2,
  133 + 'parecer' => 'N/D.',
  134 + ))
  135 + );
  136 + }
  137 +
  138 + protected function _getTestSalvasPareceresAtualizandoEtapaDaUltimaInstanciaAdicionadaNoBoletimComEtapasLancadasInstanciasLancadas()
  139 + {
  140 + return array(
  141 + new Avaliacao_Model_ParecerDescritivoComponente(array(
  142 + 'id' => 1,
  143 + 'componenteCurricular' => 1,
  144 + 'parecer' => 'N/D.',
  145 + 'etapa' => 'An'
  146 + )),
  147 + );
  148 + }
  149 +
  150 + protected function _testAdicionaParecerNoBoletimVerificaValidadores(Avaliacao_Model_ParecerDescritivoAbstract $parecer)
  151 + {
  152 + $this->assertEquals(1, $parecer->get('componenteCurricular'));
  153 + $this->assertEquals('An', $parecer->etapa);
  154 + $this->assertEquals('N/D.', $parecer->parecer);
  155 +
  156 + $validators = $parecer->getValidatorCollection();
  157 +
  158 + $this->assertEquals($this->_getEtapasPossiveisParecer(), $validators['etapa']->getOption('choices'));
  159 +
  160 + $this->assertEquals(
  161 + $this->_getComponentesCursados(),
  162 + array_values($validators['componenteCurricular']->getOption('choices'))
  163 + );
  164 + }
  165 +}
0 166 \ No newline at end of file
... ...
ieducar/modules/Avaliacao/_tests/Service/ParecerDescritivoComponenteEtapaTest.php 0 → 100644
... ... @@ -0,0 +1,189 @@
  1 +<?php
  2 +
  3 +/**
  4 + * i-Educar - Sistema de gestão escolar
  5 + *
  6 + * Copyright (C) 2006 Prefeitura Municipal de Itajaí
  7 + * <ctima@itajai.sc.gov.br>
  8 + *
  9 + * Este programa é software livre; você pode redistribuí-lo e/ou modificá-lo
  10 + * sob os termos da Licença Pública Geral GNU conforme publicada pela Free
  11 + * Software Foundation; tanto a versão 2 da Licença, como (a seu critério)
  12 + * qualquer versão posterior.
  13 + *
  14 + * Este programa é distribuí­do na expectativa de que seja útil, porém, SEM
  15 + * NENHUMA GARANTIA; nem mesmo a garantia implí­cita de COMERCIABILIDADE OU
  16 + * ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA. Consulte a Licença Pública Geral
  17 + * do GNU para mais detalhes.
  18 + *
  19 + * Você deve ter recebido uma cópia da Licença Pública Geral do GNU junto
  20 + * com este programa; se não, escreva para a Free Software Foundation, Inc., no
  21 + * endereço 59 Temple Street, Suite 330, Boston, MA 02111-1307 USA.
  22 + *
  23 + * @author Eriksen Costa Paixão <eriksen.paixao_bs@cobra.com.br>
  24 + * @category i-Educar
  25 + * @license @@license@@
  26 + * @package Avaliacao
  27 + * @subpackage UnitTests
  28 + * @since Arquivo disponível desde a versão 1.1.0
  29 + * @version $Id$
  30 + */
  31 +
  32 +require_once 'Avaliacao/_tests/Service/ParecerDescritivoCommon.php';
  33 +
  34 +/**
  35 + * Avaliacao_Service_ParecerDescritivoComponenteEtapaTest class.
  36 + *
  37 + * @author Eriksen Costa Paixão <eriksen.paixao_bs@cobra.com.br>
  38 + * @category i-Educar
  39 + * @license @@license@@
  40 + * @package Avaliacao
  41 + * @subpackage UnitTests
  42 + * @since Classe disponível desde a versão 1.1.0
  43 + * @version @@package_version@@
  44 + */
  45 +class Avaliacao_Service_ParecerDescritivoComponenteEtapaTest extends Avaliacao_Service_ParecerDescritivoCommon
  46 +{
  47 + protected function setUp()
  48 + {
  49 + $this->_setRegraOption('parecerDescritivo', RegraAvaliacao_Model_TipoParecerDescritivo::ETAPA_COMPONENTE);
  50 + parent::setUp();
  51 + }
  52 +
  53 + protected function _getTestInstanciaDeParecerERegistradaApenasUmaVezNoBoletim()
  54 + {
  55 + return new Avaliacao_Model_ParecerDescritivoComponente(array(
  56 + 'componenteCurricular' => 1,
  57 + 'parecer' => 'Ok.'
  58 + ));
  59 + }
  60 +
  61 + protected function _getTestAdicionaParecerNoBoletim()
  62 + {
  63 + return new Avaliacao_Model_ParecerDescritivoComponente(array(
  64 + 'componenteCurricular' => 1,
  65 + 'parecer' => 'N/D.'
  66 + ));
  67 + }
  68 +
  69 + protected function _getTestSalvarPareceresNoBoletimInstanciasDePareceres()
  70 + {
  71 + return array(
  72 + new Avaliacao_Model_ParecerDescritivoComponente(array(
  73 + 'componenteCurricular' => 1,
  74 + 'parecer' => 'N/D.',
  75 + 'etapa' => 1
  76 + )),
  77 + new Avaliacao_Model_ParecerDescritivoComponente(array(
  78 + 'componenteCurricular' => 1,
  79 + 'parecer' => 'N/D.',
  80 + 'etapa' => 2
  81 + )),
  82 + new Avaliacao_Model_ParecerDescritivoComponente(array(
  83 + 'componenteCurricular' => 1,
  84 + 'parecer' => 'N/D.',
  85 + 'etapa' => 3
  86 + )),
  87 + new Avaliacao_Model_ParecerDescritivoComponente(array(
  88 + 'componenteCurricular' => 1,
  89 + 'parecer' => 'N/D.',
  90 + 'etapa' => 4
  91 + ))
  92 + );
  93 + }
  94 +
  95 + protected function _getTestSalvarPareceresNoBoletimComEtapasJaLancadasInstancias()
  96 + {
  97 + return array(
  98 + new Avaliacao_Model_ParecerDescritivoComponente(array(
  99 + 'componenteCurricular' => 1,
  100 + 'parecer' => 'N/D.',
  101 + 'etapa' => 1
  102 + )),
  103 + new Avaliacao_Model_ParecerDescritivoComponente(array(
  104 + 'componenteCurricular' => 2,
  105 + 'parecer' => 'N/D.',
  106 + 'etapa' => 1
  107 + ))
  108 + );
  109 + }
  110 +
  111 + protected function _getTestSalvarPareceresNoBoletimComEtapasJaLancadasInstanciasJaLancadas()
  112 + {
  113 + return array(
  114 + new Avaliacao_Model_ParecerDescritivoComponente(array(
  115 + 'id' => 1,
  116 + 'componenteCurricular' => 1,
  117 + 'parecer' => 'N/D.',
  118 + 'etapa' => 1
  119 + )),
  120 + new Avaliacao_Model_ParecerDescritivoComponente(array(
  121 + 'id' => 2,
  122 + 'componenteCurricular' => 1,
  123 + 'parecer' => 'N/D.',
  124 + 'etapa' => 1
  125 + ))
  126 + );
  127 + }
  128 +
  129 + protected function _getTestSalvasPareceresAtualizandoEtapaDaUltimaInstanciaAdicionadaNoBoletimComEtapasLancadasInstancias()
  130 + {
  131 + return array(
  132 + new Avaliacao_Model_ParecerDescritivoComponente(array(
  133 + 'componenteCurricular' => 1,
  134 + 'parecer' => 'N/A.',
  135 + 'etapa' => 4
  136 + )),
  137 + new Avaliacao_Model_ParecerDescritivoComponente(array(
  138 + 'componenteCurricular' => 1,
  139 + 'parecer' => 'N/D.'
  140 + ))
  141 + );
  142 + }
  143 +
  144 + protected function _getTestSalvasPareceresAtualizandoEtapaDaUltimaInstanciaAdicionadaNoBoletimComEtapasLancadasInstanciasLancadas()
  145 + {
  146 + return array(
  147 + new Avaliacao_Model_ParecerDescritivoComponente(array(
  148 + 'id' => 1,
  149 + 'componenteCurricular' => 1,
  150 + 'parecer' => 'N/D.',
  151 + 'etapa' => 1
  152 + )),
  153 + new Avaliacao_Model_ParecerDescritivoComponente(array(
  154 + 'id' => 2,
  155 + 'componenteCurricular' => 1,
  156 + 'parecer' => 'N/D.',
  157 + 'etapa' => 2
  158 + )),
  159 + new Avaliacao_Model_ParecerDescritivoComponente(array(
  160 + 'id' => 3,
  161 + 'componenteCurricular' => 1,
  162 + 'parecer' => 'N/D.',
  163 + 'etapa' => 3
  164 + )),
  165 + new Avaliacao_Model_ParecerDescritivoComponente(array(
  166 + 'id' => 4,
  167 + 'componenteCurricular' => 1,
  168 + 'parecer' => 'N/D.',
  169 + 'etapa' => 4
  170 + )),
  171 + );
  172 + }
  173 +
  174 + protected function _testAdicionaParecerNoBoletimVerificaValidadores(Avaliacao_Model_ParecerDescritivoAbstract $parecer)
  175 + {
  176 + $this->assertEquals(1, $parecer->get('componenteCurricular'));
  177 + $this->assertEquals(1, $parecer->etapa);
  178 + $this->assertEquals('N/D.', $parecer->parecer);
  179 +
  180 + $validators = $parecer->getValidatorCollection();
  181 +
  182 + $this->assertEquals($this->_getEtapasPossiveisParecer(), $validators['etapa']->getOption('choices'));
  183 +
  184 + $this->assertEquals(
  185 + $this->_getComponentesCursados(),
  186 + array_values($validators['componenteCurricular']->getOption('choices'))
  187 + );
  188 + }
  189 +}
0 190 \ No newline at end of file
... ...
ieducar/modules/Avaliacao/_tests/Service/ParecerDescritivoGeralAnualTest.php 0 → 100644
... ... @@ -0,0 +1,128 @@
  1 +<?php
  2 +
  3 +/**
  4 + * i-Educar - Sistema de gestão escolar
  5 + *
  6 + * Copyright (C) 2006 Prefeitura Municipal de Itajaí
  7 + * <ctima@itajai.sc.gov.br>
  8 + *
  9 + * Este programa é software livre; você pode redistribuí-lo e/ou modificá-lo
  10 + * sob os termos da Licença Pública Geral GNU conforme publicada pela Free
  11 + * Software Foundation; tanto a versão 2 da Licença, como (a seu critério)
  12 + * qualquer versão posterior.
  13 + *
  14 + * Este programa é distribuí­do na expectativa de que seja útil, porém, SEM
  15 + * NENHUMA GARANTIA; nem mesmo a garantia implí­cita de COMERCIABILIDADE OU
  16 + * ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA. Consulte a Licença Pública Geral
  17 + * do GNU para mais detalhes.
  18 + *
  19 + * Você deve ter recebido uma cópia da Licença Pública Geral do GNU junto
  20 + * com este programa; se não, escreva para a Free Software Foundation, Inc., no
  21 + * endereço 59 Temple Street, Suite 330, Boston, MA 02111-1307 USA.
  22 + *
  23 + * @author Eriksen Costa Paixão <eriksen.paixao_bs@cobra.com.br>
  24 + * @category i-Educar
  25 + * @license @@license@@
  26 + * @package Avaliacao
  27 + * @subpackage UnitTests
  28 + * @since Arquivo disponível desde a versão 1.1.0
  29 + * @version $Id$
  30 + */
  31 +
  32 +require_once 'Avaliacao/_tests/Service/ParecerDescritivoCommon.php';
  33 +
  34 +/**
  35 + * Avaliacao_Service_ParecerDescritivoGeralAnualTest class.
  36 + *
  37 + * @author Eriksen Costa Paixão <eriksen.paixao_bs@cobra.com.br>
  38 + * @category i-Educar
  39 + * @license @@license@@
  40 + * @package Avaliacao
  41 + * @subpackage UnitTests
  42 + * @since Classe disponível desde a versão 1.1.0
  43 + * @version @@package_version@@
  44 + */
  45 +class Avaliacao_Service_ParecerDescritivoGeralAnualTest extends Avaliacao_Service_ParecerDescritivoCommon
  46 +{
  47 + protected function setUp()
  48 + {
  49 + $this->_setRegraOption('parecerDescritivo', RegraAvaliacao_Model_TipoParecerDescritivo::ETAPA_GERAL);
  50 + parent::setUp();
  51 + }
  52 +
  53 + protected function _getTestInstanciaDeParecerERegistradaApenasUmaVezNoBoletim()
  54 + {
  55 + return new Avaliacao_Model_ParecerDescritivoGeral(array(
  56 + 'parecer' => 'Ok.'
  57 + ));
  58 + }
  59 +
  60 + protected function _getTestAdicionaParecerNoBoletim()
  61 + {
  62 + return new Avaliacao_Model_ParecerDescritivoGeral(array(
  63 + 'parecer' => 'N/D.'
  64 + ));
  65 + }
  66 +
  67 + protected function _getTestSalvarPareceresNoBoletimInstanciasDePareceres()
  68 + {
  69 + return array(
  70 + new Avaliacao_Model_ParecerDescritivoGeral(array(
  71 + 'parecer' => 'N/D.',
  72 + 'etapa' => 'An'
  73 + ))
  74 + );
  75 + }
  76 +
  77 + protected function _getTestSalvarPareceresNoBoletimComEtapasJaLancadasInstancias()
  78 + {
  79 + return array(
  80 + new Avaliacao_Model_ParecerDescritivoGeral(array(
  81 + 'parecer' => 'N/D.',
  82 + 'etapa' => 'An'
  83 + ))
  84 + );
  85 + }
  86 +
  87 + protected function _getTestSalvarPareceresNoBoletimComEtapasJaLancadasInstanciasJaLancadas()
  88 + {
  89 + return array(
  90 + new Avaliacao_Model_ParecerDescritivoGeral(array(
  91 + 'id' => 1,
  92 + 'parecer' => 'N/D.',
  93 + 'etapa' => 'An'
  94 + ))
  95 + );
  96 + }
  97 +
  98 + protected function _getTestSalvasPareceresAtualizandoEtapaDaUltimaInstanciaAdicionadaNoBoletimComEtapasLancadasInstancias()
  99 + {
  100 + return array(
  101 + new Avaliacao_Model_ParecerDescritivoGeral(array(
  102 + 'parecer' => 'N/D.'
  103 + ))
  104 + );
  105 + }
  106 +
  107 + protected function _getTestSalvasPareceresAtualizandoEtapaDaUltimaInstanciaAdicionadaNoBoletimComEtapasLancadasInstanciasLancadas()
  108 + {
  109 + return array(
  110 + new Avaliacao_Model_ParecerDescritivoGeral(array(
  111 + 'id' => 1,
  112 + 'parecer' => 'N/D.',
  113 + 'etapa' => 'An'
  114 + ))
  115 + );
  116 + }
  117 +
  118 + protected function _testAdicionaParecerNoBoletimVerificaValidadores(Avaliacao_Model_ParecerDescritivoAbstract $parecer)
  119 + {
  120 + $this->assertEquals(1, $parecer->etapa);
  121 + $this->assertEquals('N/D.', $parecer->parecer);
  122 +
  123 + $validators = $parecer->getValidatorCollection();
  124 +
  125 + $this->assertEquals($this->_getEtapasPossiveisParecer(), $validators['etapa']->getOption('choices'));
  126 + $this->assertFalse(isset($validators['componenteCurricular']));
  127 + }
  128 +}
0 129 \ No newline at end of file
... ...
ieducar/modules/Avaliacao/_tests/Service/ParecerDescritivoGeralEtapaTest.php 0 → 100644
... ... @@ -0,0 +1,168 @@
  1 +<?php
  2 +
  3 +/**
  4 + * i-Educar - Sistema de gestão escolar
  5 + *
  6 + * Copyright (C) 2006 Prefeitura Municipal de Itajaí
  7 + * <ctima@itajai.sc.gov.br>
  8 + *
  9 + * Este programa é software livre; você pode redistribuí-lo e/ou modificá-lo
  10 + * sob os termos da Licença Pública Geral GNU conforme publicada pela Free
  11 + * Software Foundation; tanto a versão 2 da Licença, como (a seu critério)
  12 + * qualquer versão posterior.
  13 + *
  14 + * Este programa é distribuí­do na expectativa de que seja útil, porém, SEM
  15 + * NENHUMA GARANTIA; nem mesmo a garantia implí­cita de COMERCIABILIDADE OU
  16 + * ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA. Consulte a Licença Pública Geral
  17 + * do GNU para mais detalhes.
  18 + *
  19 + * Você deve ter recebido uma cópia da Licença Pública Geral do GNU junto
  20 + * com este programa; se não, escreva para a Free Software Foundation, Inc., no
  21 + * endereço 59 Temple Street, Suite 330, Boston, MA 02111-1307 USA.
  22 + *
  23 + * @author Eriksen Costa Paixão <eriksen.paixao_bs@cobra.com.br>
  24 + * @category i-Educar
  25 + * @license @@license@@
  26 + * @package Avaliacao
  27 + * @subpackage UnitTests
  28 + * @since Arquivo disponível desde a versão 1.1.0
  29 + * @version $Id$
  30 + */
  31 +
  32 +require_once 'Avaliacao/_tests/Service/ParecerDescritivoCommon.php';
  33 +
  34 +/**
  35 + * Avaliacao_Service_ParecerDescritivoGeralEtapaTest class.
  36 + *
  37 + * @author Eriksen Costa Paixão <eriksen.paixao_bs@cobra.com.br>
  38 + * @category i-Educar
  39 + * @license @@license@@
  40 + * @package Avaliacao
  41 + * @subpackage UnitTests
  42 + * @since Classe disponível desde a versão 1.1.0
  43 + * @version @@package_version@@
  44 + */
  45 +class Avaliacao_Service_ParecerDescritivoGeralEtapaTest extends Avaliacao_Service_ParecerDescritivoCommon
  46 +{
  47 + protected function setUp()
  48 + {
  49 + $this->_setRegraOption('parecerDescritivo', RegraAvaliacao_Model_TipoParecerDescritivo::ETAPA_GERAL);
  50 + parent::setUp();
  51 + }
  52 +
  53 + protected function _getTestInstanciaDeParecerERegistradaApenasUmaVezNoBoletim()
  54 + {
  55 + return new Avaliacao_Model_ParecerDescritivoGeral(array(
  56 + 'parecer' => 'Ok.'
  57 + ));
  58 + }
  59 +
  60 + protected function _getTestAdicionaParecerNoBoletim()
  61 + {
  62 + return new Avaliacao_Model_ParecerDescritivoGeral(array(
  63 + 'parecer' => 'N/D.'
  64 + ));
  65 + }
  66 +
  67 + protected function _getTestSalvarPareceresNoBoletimComEtapasJaLancadasInstancias()
  68 + {
  69 + return array(
  70 + new Avaliacao_Model_ParecerDescritivoGeral(array(
  71 + 'parecer' => 'N/D.',
  72 + 'etapa' => 2
  73 + )),
  74 + new Avaliacao_Model_ParecerDescritivoGeral(array(
  75 + 'parecer' => 'N/D.',
  76 + 'etapa' => 3
  77 + ))
  78 + );
  79 + }
  80 +
  81 + protected function _getTestSalvarPareceresNoBoletimComEtapasJaLancadasInstanciasJaLancadas()
  82 + {
  83 + return array(
  84 + new Avaliacao_Model_ParecerDescritivoGeral(array(
  85 + 'id' => 1,
  86 + 'parecer' => 'N/D.',
  87 + 'etapa' => 1
  88 + )),
  89 + new Avaliacao_Model_ParecerDescritivoGeral(array(
  90 + 'id' => 1,
  91 + 'parecer' => 'N/D.',
  92 + 'etapa' => 2
  93 + ))
  94 + );
  95 + }
  96 +
  97 + protected function _getTestSalvarPareceresNoBoletimInstanciasDePareceres()
  98 + {
  99 + return array(
  100 + new Avaliacao_Model_ParecerDescritivoGeral(array(
  101 + 'etapa' => 1,
  102 + 'parecer' => 'N/D.'
  103 + )),
  104 + new Avaliacao_Model_ParecerDescritivoGeral(array(
  105 + 'etapa' => 2,
  106 + 'parecer' => 'N/D.'
  107 + )),
  108 + new Avaliacao_Model_ParecerDescritivoGeral(array(
  109 + 'etapa' => 3,
  110 + 'parecer' => 'N/D.'
  111 + )),
  112 + new Avaliacao_Model_ParecerDescritivoGeral(array(
  113 + 'etapa' => 4,
  114 + 'parecer' => 'N/D.'
  115 + ))
  116 + );
  117 + }
  118 +
  119 + protected function _getTestSalvasPareceresAtualizandoEtapaDaUltimaInstanciaAdicionadaNoBoletimComEtapasLancadasInstancias()
  120 + {
  121 + return array(
  122 + new Avaliacao_Model_ParecerDescritivoGeral(array(
  123 + 'parecer' => 'N/D.',
  124 + 'etapa' => 4
  125 + )),
  126 + new Avaliacao_Model_ParecerDescritivoGeral(array(
  127 + 'parecer' => 'N/D.',
  128 + ))
  129 + );
  130 + }
  131 +
  132 + protected function _getTestSalvasPareceresAtualizandoEtapaDaUltimaInstanciaAdicionadaNoBoletimComEtapasLancadasInstanciasLancadas()
  133 + {
  134 + return array(
  135 + new Avaliacao_Model_ParecerDescritivoGeral(array(
  136 + 'id' => 1,
  137 + 'parecer' => 'N/D.',
  138 + 'etapa' => 2
  139 + )),
  140 + new Avaliacao_Model_ParecerDescritivoGeral(array(
  141 + 'id' => 2,
  142 + 'parecer' => 'N/D.',
  143 + 'etapa' => 2
  144 + )),
  145 + new Avaliacao_Model_ParecerDescritivoGeral(array(
  146 + 'id' => 3,
  147 + 'parecer' => 'N/D.',
  148 + 'etapa' => 3
  149 + )),
  150 + new Avaliacao_Model_ParecerDescritivoGeral(array(
  151 + 'id' => 4,
  152 + 'parecer' => 'N/D.',
  153 + 'etapa' => 4
  154 + )),
  155 + );
  156 + }
  157 +
  158 + protected function _testAdicionaParecerNoBoletimVerificaValidadores(Avaliacao_Model_ParecerDescritivoAbstract $parecer)
  159 + {
  160 + $this->assertEquals(1, $parecer->etapa);
  161 + $this->assertEquals('N/D.', $parecer->parecer);
  162 +
  163 + $validators = $parecer->getValidatorCollection();
  164 +
  165 + $this->assertEquals($this->_getEtapasPossiveisParecer(), $validators['etapa']->getOption('choices'));
  166 + $this->assertFalse(isset($validators['componenteCurricular']));
  167 + }
  168 +}
0 169 \ No newline at end of file
... ...
ieducar/modules/Avaliacao/_tests/Service/PromocaoAlunoTest.php 0 → 100644
... ... @@ -0,0 +1,531 @@
  1 +<?php
  2 +
  3 +/**
  4 + * i-Educar - Sistema de gestão escolar
  5 + *
  6 + * Copyright (C) 2006 Prefeitura Municipal de Itajaí
  7 + * <ctima@itajai.sc.gov.br>
  8 + *
  9 + * Este programa é software livre; você pode redistribuí-lo e/ou modificá-lo
  10 + * sob os termos da Licença Pública Geral GNU conforme publicada pela Free
  11 + * Software Foundation; tanto a versão 2 da Licença, como (a seu critério)
  12 + * qualquer versão posterior.
  13 + *
  14 + * Este programa é distribuí­do na expectativa de que seja útil, porém, SEM
  15 + * NENHUMA GARANTIA; nem mesmo a garantia implí­cita de COMERCIABILIDADE OU
  16 + * ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA. Consulte a Licença Pública Geral
  17 + * do GNU para mais detalhes.
  18 + *
  19 + * Você deve ter recebido uma cópia da Licença Pública Geral do GNU junto
  20 + * com este programa; se não, escreva para a Free Software Foundation, Inc., no
  21 + * endereço 59 Temple Street, Suite 330, Boston, MA 02111-1307 USA.
  22 + *
  23 + * @author Eriksen Costa Paixão <eriksen.paixao_bs@cobra.com.br>
  24 + * @category i-Educar
  25 + * @license @@license@@
  26 + * @package Avaliacao
  27 + * @subpackage UnitTests
  28 + * @since Arquivo disponível desde a versão 1.1.0
  29 + * @version $Id$
  30 + */
  31 +
  32 +require_once 'Avaliacao/_tests/Service/TestCommon.php';
  33 +
  34 +/**
  35 + * Avaliacao_Service_PromocaoAlunoTest class.
  36 + *
  37 + * @author Eriksen Costa Paixão <eriksen.paixao_bs@cobra.com.br>
  38 + * @category i-Educar
  39 + * @license @@license@@
  40 + * @package Avaliacao
  41 + * @subpackage UnitTests
  42 + * @since Classe disponível desde a versão 1.1.0
  43 + * @version @@package_version@@
  44 + */
  45 +class Avaliacao_Service_PromocaoAlunoTest extends Avaliacao_Service_TestCommon
  46 +{
  47 + protected function _setUpRegraAvaliacaoMock($tipoProgressao)
  48 + {
  49 + $mock = $this->getCleanMock('RegraAvaliacao_Model_Regra');
  50 + $mock->expects($this->at(0))
  51 + ->method('get')
  52 + ->with('tipoProgressao')
  53 + ->will($this->returnValue($tipoProgressao));
  54 +
  55 + return $mock;
  56 + }
  57 +
  58 + /**
  59 + * @expectedException CoreExt_Service_Exception
  60 + */
  61 + public function testPromoverAlunoLancaExcecaoCasoSituacaoEstejaEmAndamento()
  62 + {
  63 + $situacao = new stdClass();
  64 + $situacao->aprovado = FALSE;
  65 + $situacao->andamento = TRUE;
  66 + $situacao->recuperacao = FALSE;
  67 + $situacao->retidoFalta = FALSE;
  68 +
  69 + $codMatricula = $this->_getConfigOption('matricula', 'cod_matricula');
  70 + $codUsuario = $this->_getConfigOption('usuario', 'cod_usuario');
  71 +
  72 + $service = $this->setExcludedMethods(array('promover'))
  73 + ->getCleanMock('Avaliacao_Service_Boletim');
  74 +
  75 + $service->expects($this->at(0))
  76 + ->method('getSituacaoAluno')
  77 + ->will($this->returnValue($situacao));
  78 +
  79 + $service->promover();
  80 + }
  81 +
  82 + /**
  83 + * @expectedException CoreExt_Service_Exception
  84 + */
  85 + public function testPromoverAlunoLancaExcecaoCasoMatriculaDoAlunoJaEstejaAprovadaOuReprovada()
  86 + {
  87 + $situacao = new stdClass();
  88 + $situacao->aprovado = TRUE;
  89 + $situacao->andamento = FALSE;
  90 + $situacao->recuperacao = FALSE;
  91 + $situacao->retidoFalta = FALSE;
  92 +
  93 + $codMatricula = $this->_getConfigOption('matricula', 'cod_matricula');
  94 + $codUsuario = $this->_getConfigOption('usuario', 'cod_usuario');
  95 +
  96 + $service = $this->setExcludedMethods(array('promover'))
  97 + ->getCleanMock('Avaliacao_Service_Boletim');
  98 +
  99 + $service->expects($this->at(0))
  100 + ->method('getSituacaoAluno')
  101 + ->will($this->returnValue($situacao));
  102 +
  103 + $service->expects($this->at(1))
  104 + ->method('getOption')
  105 + ->with('aprovado')
  106 + ->will($this->returnValue(App_Model_MatriculaSituacao::APROVADO));
  107 +
  108 + $service->promover();
  109 + }
  110 +
  111 + public function testPromoverAlunoAutomaticamenteProgressaoContinuada()
  112 + {
  113 + $situacao = new stdClass();
  114 + $situacao->aprovado = TRUE;
  115 + $situacao->andamento = FALSE;
  116 + $situacao->recuperacao = FALSE;
  117 + $situacao->retidoFalta = FALSE;
  118 +
  119 + $codMatricula = $this->_getConfigOption('matricula', 'cod_matricula');
  120 + $codUsuario = $this->_getConfigOption('usuario', 'cod_usuario');
  121 +
  122 + // Mock para RegraAvaliacao_Model_Regra
  123 + $regra = $this->_setUpRegraAvaliacaoMock(RegraAvaliacao_Model_TipoProgressao::CONTINUADA);
  124 +
  125 + $service = $this->setExcludedMethods(array('promover'))
  126 + ->getCleanMock('Avaliacao_Service_Boletim');
  127 +
  128 + $service->expects($this->at(0))
  129 + ->method('getSituacaoAluno')
  130 + ->will($this->returnValue($situacao));
  131 +
  132 + $service->expects($this->at(1))
  133 + ->method('getOption')
  134 + ->with('aprovado')
  135 + ->will($this->returnValue(App_Model_MatriculaSituacao::EM_ANDAMENTO));
  136 +
  137 + $service->expects($this->at(2))
  138 + ->method('getRegra')
  139 + ->will($this->returnValue($regra));
  140 +
  141 + $service->expects($this->at(3))
  142 + ->method('getOption')
  143 + ->with('matricula')
  144 + ->will($this->returnValue($codMatricula));
  145 +
  146 + $service->expects($this->at(4))
  147 + ->method('getOption')
  148 + ->with('usuario')
  149 + ->will($this->returnValue($codUsuario));
  150 +
  151 + $service->expects($this->at(5))
  152 + ->method('_updateMatricula')
  153 + ->with($codMatricula, $codUsuario, TRUE)
  154 + ->will($this->returnValue(TRUE));
  155 +
  156 + $this->assertTrue($service->promover());
  157 + }
  158 +
  159 + public function testPromoverAlunoAutomaticamenteProgressaoNaoContinuadaAutoMediaPresenca()
  160 + {
  161 + $situacao = new stdClass();
  162 + $situacao->aprovado = TRUE;
  163 + $situacao->andamento = FALSE;
  164 + $situacao->recuperacao = FALSE;
  165 + $situacao->retidoFalta = FALSE;
  166 +
  167 + $codMatricula = $this->_getConfigOption('matricula', 'cod_matricula');
  168 + $codUsuario = $this->_getConfigOption('usuario', 'cod_usuario');
  169 +
  170 + // Mock para RegraAvaliacao_Model_Regra
  171 + $regra = $this->_setUpRegraAvaliacaoMock(RegraAvaliacao_Model_TipoProgressao::NAO_CONTINUADA_AUTO_MEDIA_PRESENCA);
  172 +
  173 + $service = $this->setExcludedMethods(array('promover'))
  174 + ->getCleanMock('Avaliacao_Service_Boletim');
  175 +
  176 + $service->expects($this->at(0))
  177 + ->method('getSituacaoAluno')
  178 + ->will($this->returnValue($situacao));
  179 +
  180 + $service->expects($this->at(1))
  181 + ->method('getOption')
  182 + ->with('aprovado')
  183 + ->will($this->returnValue(App_Model_MatriculaSituacao::EM_ANDAMENTO));
  184 +
  185 + $service->expects($this->at(2))
  186 + ->method('getRegra')
  187 + ->will($this->returnValue($regra));
  188 +
  189 + $service->expects($this->at(3))
  190 + ->method('getOption')
  191 + ->with('matricula')
  192 + ->will($this->returnValue($codMatricula));
  193 +
  194 + $service->expects($this->at(4))
  195 + ->method('getOption')
  196 + ->with('usuario')
  197 + ->will($this->returnValue($codUsuario));
  198 +
  199 + $service->expects($this->at(5))
  200 + ->method('_updateMatricula')
  201 + ->with($codMatricula, $codUsuario, TRUE)
  202 + ->will($this->returnValue(TRUE));
  203 +
  204 + $this->assertTrue($service->promover());
  205 + }
  206 +
  207 + public function testReprovarAlunoAutomaticamenteProgressaoNaoContinuadaAutoMediaPresenca()
  208 + {
  209 + $situacao = new stdClass();
  210 + $situacao->aprovado = TRUE;
  211 + $situacao->andamento = FALSE;
  212 + $situacao->recuperacao = FALSE;
  213 + $situacao->retidoFalta = TRUE;
  214 +
  215 + $codMatricula = $this->_getConfigOption('matricula', 'cod_matricula');
  216 + $codUsuario = $this->_getConfigOption('usuario', 'cod_usuario');
  217 +
  218 + // Mock para RegraAvaliacao_Model_Regra
  219 + $regra = $this->_setUpRegraAvaliacaoMock(RegraAvaliacao_Model_TipoProgressao::NAO_CONTINUADA_AUTO_MEDIA_PRESENCA);
  220 +
  221 + $service = $this->setExcludedMethods(array('promover'))
  222 + ->getCleanMock('Avaliacao_Service_Boletim');
  223 +
  224 + $service->expects($this->at(0))
  225 + ->method('getSituacaoAluno')
  226 + ->will($this->returnValue($situacao));
  227 +
  228 + $service->expects($this->at(1))
  229 + ->method('getOption')
  230 + ->with('aprovado')
  231 + ->will($this->returnValue(App_Model_MatriculaSituacao::EM_ANDAMENTO));
  232 +
  233 + $service->expects($this->at(2))
  234 + ->method('getRegra')
  235 + ->will($this->returnValue($regra));
  236 +
  237 + $service->expects($this->at(3))
  238 + ->method('getOption')
  239 + ->with('matricula')
  240 + ->will($this->returnValue($codMatricula));
  241 +
  242 + $service->expects($this->at(4))
  243 + ->method('getOption')
  244 + ->with('usuario')
  245 + ->will($this->returnValue($codUsuario));
  246 +
  247 + $service->expects($this->at(5))
  248 + ->method('_updateMatricula')
  249 + ->with($codMatricula, $codUsuario, FALSE)
  250 + ->will($this->returnValue(TRUE));
  251 +
  252 + $this->assertTrue($service->promover());
  253 + }
  254 +
  255 + public function testPromoverAlunoAutomaticamenteProgressaoNaoContinuadaAutoMedia()
  256 + {
  257 + $situacao = new stdClass();
  258 + $situacao->aprovado = TRUE;
  259 + $situacao->andamento = FALSE;
  260 + $situacao->recuperacao = FALSE;
  261 + $situacao->retidoFalta = TRUE; // Não considera retenção por falta
  262 +
  263 + $codMatricula = $this->_getConfigOption('matricula', 'cod_matricula');
  264 + $codUsuario = $this->_getConfigOption('usuario', 'cod_usuario');
  265 +
  266 + // Mock para RegraAvaliacao_Model_Regra
  267 + $regra = $this->_setUpRegraAvaliacaoMock(RegraAvaliacao_Model_TipoProgressao::NAO_CONTINUADA_AUTO_SOMENTE_MEDIA);
  268 +
  269 + $service = $this->setExcludedMethods(array('promover'))
  270 + ->getCleanMock('Avaliacao_Service_Boletim');
  271 +
  272 + $service->expects($this->at(0))
  273 + ->method('getSituacaoAluno')
  274 + ->will($this->returnValue($situacao));
  275 +
  276 + $service->expects($this->at(1))
  277 + ->method('getOption')
  278 + ->with('aprovado')
  279 + ->will($this->returnValue(App_Model_MatriculaSituacao::EM_ANDAMENTO));
  280 +
  281 + $service->expects($this->at(2))
  282 + ->method('getRegra')
  283 + ->will($this->returnValue($regra));
  284 +
  285 + $service->expects($this->at(3))
  286 + ->method('getOption')
  287 + ->with('matricula')
  288 + ->will($this->returnValue($codMatricula));
  289 +
  290 + $service->expects($this->at(4))
  291 + ->method('getOption')
  292 + ->with('usuario')
  293 + ->will($this->returnValue($codUsuario));
  294 +
  295 + $service->expects($this->at(5))
  296 + ->method('_updateMatricula')
  297 + ->with($codMatricula, $codUsuario, TRUE)
  298 + ->will($this->returnValue(TRUE));
  299 +
  300 + $this->assertTrue($service->promover());
  301 + }
  302 +
  303 + public function testPromoverAlunoManualmenteProgressaoNaoContinuadaLancaExcecaoSeNaoConfirmada()
  304 + {
  305 + $situacao = new stdClass();
  306 + $situacao->aprovado = FALSE; // Reprovado por nota
  307 + $situacao->andamento = FALSE;
  308 + $situacao->recuperacao = FALSE;
  309 + $situacao->retidoFalta = FALSE;
  310 +
  311 + $codMatricula = $this->_getConfigOption('matricula', 'cod_matricula');
  312 + $codUsuario = $this->_getConfigOption('usuario', 'cod_usuario');
  313 +
  314 + // Mock para RegraAvaliacao_Model_Regra
  315 + $regra = $this->_setUpRegraAvaliacaoMock(RegraAvaliacao_Model_TipoProgressao::NAO_CONTINUADA_MANUAL);
  316 +
  317 + $service = $this->setExcludedMethods(array('promover'))
  318 + ->getCleanMock('Avaliacao_Service_Boletim');
  319 +
  320 + $service->expects($this->at(0))
  321 + ->method('getSituacaoAluno')
  322 + ->will($this->returnValue($situacao));
  323 +
  324 + $service->expects($this->at(1))
  325 + ->method('getOption')
  326 + ->with('aprovado')
  327 + ->will($this->returnValue(App_Model_MatriculaSituacao::EM_ANDAMENTO));
  328 +
  329 + $service->expects($this->at(2))
  330 + ->method('getRegra')
  331 + ->will($this->returnValue($regra));
  332 +
  333 + try {
  334 + $service->promover();
  335 + $this->fail('Invocar o método "->promover()" sem uma confirmação booleana '
  336 + . 'explícita (TRUE ou FALSE) em uma progressão "NAO_CONTINUADA_MANUAL" '
  337 + . 'causa exceção.');
  338 + }
  339 + catch (CoreExt_Service_Exception $e)
  340 + {
  341 + }
  342 + }
  343 +
  344 + public function testPromoverAlunoManualmenteProgressaoNaoContinuada()
  345 + {
  346 + $situacao = new stdClass();
  347 + $situacao->aprovado = FALSE; // Reprovado por nota
  348 + $situacao->andamento = FALSE;
  349 + $situacao->recuperacao = FALSE;
  350 + $situacao->retidoFalta = FALSE;
  351 +
  352 + $codMatricula = $this->_getConfigOption('matricula', 'cod_matricula');
  353 + $codUsuario = $this->_getConfigOption('usuario', 'cod_usuario');
  354 +
  355 + // Mock para RegraAvaliacao_Model_Regra
  356 + $regra = $this->_setUpRegraAvaliacaoMock(RegraAvaliacao_Model_TipoProgressao::NAO_CONTINUADA_MANUAL);
  357 +
  358 + $service = $this->setExcludedMethods(array('promover'))
  359 + ->getCleanMock('Avaliacao_Service_Boletim');
  360 +
  361 + $service->expects($this->at(0))
  362 + ->method('getSituacaoAluno')
  363 + ->will($this->returnValue($situacao));
  364 +
  365 + $service->expects($this->at(1))
  366 + ->method('getOption')
  367 + ->with('aprovado')
  368 + ->will($this->returnValue(App_Model_MatriculaSituacao::EM_ANDAMENTO));
  369 +
  370 + $service->expects($this->at(2))
  371 + ->method('getRegra')
  372 + ->will($this->returnValue($regra));
  373 +
  374 + $service->expects($this->at(3))
  375 + ->method('getOption')
  376 + ->with('matricula')
  377 + ->will($this->returnValue($codMatricula));
  378 +
  379 + $service->expects($this->at(4))
  380 + ->method('getOption')
  381 + ->with('usuario')
  382 + ->will($this->returnValue($codUsuario));
  383 +
  384 + $service->expects($this->at(5))
  385 + ->method('_updateMatricula')
  386 + ->with($codMatricula, $codUsuario, TRUE)
  387 + ->will($this->returnValue(TRUE));
  388 +
  389 + $this->assertTrue($service->promover(TRUE));
  390 + }
  391 +
  392 + public function testReprovarAlunoManualmenteProgressaoNaoContinuada()
  393 + {
  394 + $situacao = new stdClass();
  395 + $situacao->aprovado = FALSE; // Reprovado por nota
  396 + $situacao->andamento = FALSE;
  397 + $situacao->recuperacao = FALSE;
  398 + $situacao->retidoFalta = FALSE;
  399 +
  400 + $codMatricula = $this->_getConfigOption('matricula', 'cod_matricula');
  401 + $codUsuario = $this->_getConfigOption('usuario', 'cod_usuario');
  402 +
  403 + // Mock para RegraAvaliacao_Model_Regra
  404 + $regra = $this->_setUpRegraAvaliacaoMock(RegraAvaliacao_Model_TipoProgressao::NAO_CONTINUADA_MANUAL);
  405 +
  406 + $service = $this->setExcludedMethods(array('promover'))
  407 + ->getCleanMock('Avaliacao_Service_Boletim');
  408 +
  409 + $service->expects($this->at(0))
  410 + ->method('getSituacaoAluno')
  411 + ->will($this->returnValue($situacao));
  412 +
  413 + $service->expects($this->at(1))
  414 + ->method('getOption')
  415 + ->with('aprovado')
  416 + ->will($this->returnValue(App_Model_MatriculaSituacao::EM_ANDAMENTO));
  417 +
  418 + $service->expects($this->at(2))
  419 + ->method('getRegra')
  420 + ->will($this->returnValue($regra));
  421 +
  422 + $service->expects($this->at(3))
  423 + ->method('getOption')
  424 + ->with('matricula')
  425 + ->will($this->returnValue($codMatricula));
  426 +
  427 + $service->expects($this->at(4))
  428 + ->method('getOption')
  429 + ->with('usuario')
  430 + ->will($this->returnValue($codUsuario));
  431 +
  432 + $service->expects($this->at(5))
  433 + ->method('_updateMatricula')
  434 + ->with($codMatricula, $codUsuario, FALSE)
  435 + ->will($this->returnValue(TRUE));
  436 +
  437 + $this->assertTrue($service->promover(FALSE));
  438 + }
  439 +
  440 + public function testSaveBoletim()
  441 + {
  442 + $situacao = new stdClass();
  443 + $situacao->aprovado = TRUE;
  444 + $situacao->andamento = FALSE;
  445 + $situacao->recuperacao = FALSE;
  446 + $situacao->retidoFalta = FALSE;
  447 +
  448 + $codMatricula = $this->_getConfigOption('matricula', 'cod_matricula');
  449 + $codUsuario = $this->_getConfigOption('usuario', 'cod_usuario');
  450 +
  451 + $service = $this->setExcludedMethods(array('save'))
  452 + ->getCleanMock('Avaliacao_Service_Boletim');
  453 +
  454 + $service->expects($this->at(0))
  455 + ->method('saveNotas')
  456 + ->will($this->returnValue($service));
  457 +
  458 + $service->expects($this->at(1))
  459 + ->method('saveFaltas')
  460 + ->will($this->returnValue($service));
  461 +
  462 + $service->expects($this->at(2))
  463 + ->method('savePareceres')
  464 + ->will($this->returnValue($service));
  465 +
  466 + $service->expects($this->at(3))
  467 + ->method('promover')
  468 + ->will($this->returnValue(TRUE));
  469 +
  470 + try {
  471 + $service->save();
  472 + }
  473 + catch (Exception $e) {
  474 + $this->fail('O método "->save()" não deveria ter lançado exceção com o '
  475 + . 'cenário de teste configurado.');
  476 + }
  477 + }
  478 +
  479 + public function testIntegracaoMatriculaPromoverAluno()
  480 + {
  481 + $situacao = new stdClass();
  482 + $situacao->aprovado = TRUE;
  483 + $situacao->andamento = FALSE;
  484 + $situacao->recuperacao = FALSE;
  485 + $situacao->retidoFalta = FALSE;
  486 +
  487 + $codMatricula = $this->_getConfigOption('matricula', 'cod_matricula');
  488 + $codUsuario = $this->_getConfigOption('usuario', 'cod_usuario');
  489 +
  490 + // Mock para RegraAvaliacao_Model_Regra
  491 + $regra = $this->_setUpRegraAvaliacaoMock(RegraAvaliacao_Model_TipoProgressao::CONTINUADA);
  492 +
  493 + $service = $this->setExcludedMethods(array('promover', '_updateMatricula'))
  494 + ->getCleanMock('Avaliacao_Service_Boletim');
  495 +
  496 + $service->expects($this->at(0))
  497 + ->method('getSituacaoAluno')
  498 + ->will($this->returnValue($situacao));
  499 +
  500 + $service->expects($this->at(1))
  501 + ->method('getOption')
  502 + ->with('aprovado')
  503 + ->will($this->returnValue(App_Model_MatriculaSituacao::EM_ANDAMENTO));
  504 +
  505 + $service->expects($this->at(2))
  506 + ->method('getRegra')
  507 + ->will($this->returnValue($regra));
  508 +
  509 + $service->expects($this->at(3))
  510 + ->method('getOption')
  511 + ->with('matricula')
  512 + ->will($this->returnValue($codMatricula));
  513 +
  514 + $service->expects($this->at(4))
  515 + ->method('getOption')
  516 + ->with('usuario')
  517 + ->will($this->returnValue($codUsuario));
  518 +
  519 + // Configura mock de instância de classe legada
  520 + $matricula = $this->getCleanMock('clsPmieducarMatricula');
  521 +
  522 + $matricula->expects($this->at(0))
  523 + ->method('edita')
  524 + ->will($this->returnValue(TRUE));
  525 +
  526 + CoreExt_Entity::addClassToStorage('clsPmieducarMatricula', $matricula,
  527 + 'include/pmieducar/clsPmieducarMatricula.inc.php', TRUE);
  528 +
  529 + $this->assertTrue($service->promover());
  530 + }
  531 +}
0 532 \ No newline at end of file
... ...
ieducar/modules/Avaliacao/_tests/Service/SituacaoTest.php 0 → 100644
... ... @@ -0,0 +1,121 @@
  1 +<?php
  2 +
  3 +/**
  4 + * i-Educar - Sistema de gestão escolar
  5 + *
  6 + * Copyright (C) 2006 Prefeitura Municipal de Itajaí
  7 + * <ctima@itajai.sc.gov.br>
  8 + *
  9 + * Este programa é software livre; você pode redistribuí-lo e/ou modificá-lo
  10 + * sob os termos da Licença Pública Geral GNU conforme publicada pela Free
  11 + * Software Foundation; tanto a versão 2 da Licença, como (a seu critério)
  12 + * qualquer versão posterior.
  13 + *
  14 + * Este programa é distribuí­do na expectativa de que seja útil, porém, SEM
  15 + * NENHUMA GARANTIA; nem mesmo a garantia implí­cita de COMERCIABILIDADE OU
  16 + * ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA. Consulte a Licença Pública Geral
  17 + * do GNU para mais detalhes.
  18 + *
  19 + * Você deve ter recebido uma cópia da Licença Pública Geral do GNU junto
  20 + * com este programa; se não, escreva para a Free Software Foundation, Inc., no
  21 + * endereço 59 Temple Street, Suite 330, Boston, MA 02111-1307 USA.
  22 + *
  23 + * @author Eriksen Costa Paixão <eriksen.paixao_bs@cobra.com.br>
  24 + * @category i-Educar
  25 + * @license @@license@@
  26 + * @package Avaliacao
  27 + * @subpackage UnitTests
  28 + * @since Arquivo disponível desde a versão 1.1.0
  29 + * @version $Id$
  30 + */
  31 +
  32 +require_once 'Avaliacao/_tests/Service/TestCommon.php';
  33 +
  34 +/**
  35 + * Avaliacao_Service_SituacaoTest class.
  36 + *
  37 + * @author Eriksen Costa Paixão <eriksen.paixao_bs@cobra.com.br>
  38 + * @category i-Educar
  39 + * @license @@license@@
  40 + * @package Avaliacao
  41 + * @subpackage UnitTests
  42 + * @since Classe disponível desde a versão 1.1.0
  43 + * @version @@package_version@@
  44 + */
  45 +class Avaliacao_Service_SituacaoTest extends Avaliacao_Service_TestCommon
  46 +{
  47 + public function testSituacaoAluno()
  48 + {
  49 + $notaSituacoes = array(
  50 + 1 => App_Model_MatriculaSituacao::APROVADO,
  51 + 2 => App_Model_MatriculaSituacao::APROVADO_APOS_EXAME,
  52 + 3 => App_Model_MatriculaSituacao::EM_ANDAMENTO,
  53 + 4 => App_Model_MatriculaSituacao::EM_EXAME,
  54 + 5 => App_Model_MatriculaSituacao::REPROVADO
  55 + );
  56 +
  57 + $faltaSituacoes = array(
  58 + 1 => App_Model_MatriculaSituacao::EM_ANDAMENTO,
  59 + 2 => App_Model_MatriculaSituacao::APROVADO,
  60 + 3 => App_Model_MatriculaSituacao::REPROVADO
  61 + );
  62 +
  63 + // Possibilidades
  64 + $expected = array(
  65 + 1 => array(
  66 + 1 => array(FALSE, TRUE, FALSE, FALSE),
  67 + 2 => array(TRUE, FALSE, FALSE, FALSE),
  68 + 3 => array(FALSE, FALSE, TRUE, FALSE)
  69 + ),
  70 + 2 => array(
  71 + 1 => array(FALSE, TRUE, FALSE, TRUE),
  72 + 2 => array(TRUE, FALSE, FALSE, TRUE),
  73 + 3 => array(FALSE, FALSE, TRUE, TRUE)
  74 + ),
  75 + 3 => array(
  76 + 1 => array(FALSE, TRUE, FALSE, FALSE),
  77 + 2 => array(FALSE, TRUE, FALSE, FALSE),
  78 + 3 => array(FALSE, TRUE, TRUE, FALSE)
  79 + ),
  80 + 4 => array(
  81 + 1 => array(FALSE, TRUE, FALSE, TRUE),
  82 + 2 => array(FALSE, TRUE, FALSE, TRUE),
  83 + 3 => array(FALSE, TRUE, TRUE, TRUE)
  84 + ),
  85 + 5 => array(
  86 + 1 => array(FALSE, TRUE, FALSE, FALSE),
  87 + 2 => array(FALSE, FALSE, FALSE, FALSE),
  88 + 3 => array(FALSE, FALSE, TRUE, FALSE)
  89 + )
  90 + );
  91 +
  92 + foreach ($notaSituacoes as $i => $notaSituacao) {
  93 + $nota = new stdClass();
  94 + $nota->situacao = $notaSituacao;
  95 +
  96 + foreach ($faltaSituacoes as $ii => $faltaSituacao) {
  97 + $service = $this->setExcludedMethods(array('getSituacaoAluno'))
  98 + ->getCleanMock('Avaliacao_Service_Boletim');
  99 +
  100 + $falta = new stdClass();
  101 + $falta->situacao = $faltaSituacao;
  102 +
  103 + $service->expects($this->once())
  104 + ->method('getSituacaoComponentesCurriculares')
  105 + ->will($this->returnValue($nota));
  106 +
  107 + $service->expects($this->once())
  108 + ->method('getSituacaoFaltas')
  109 + ->will($this->returnValue($falta));
  110 +
  111 + // Testa
  112 + $situacao = $service->getSituacaoAluno();
  113 +
  114 + $this->assertEquals($expected[$i][$ii][0], $situacao->aprovado, "Aprovado, caso $i - $ii");
  115 + $this->assertEquals($expected[$i][$ii][1], $situacao->andamento, "Andamento, caso $i - $ii");
  116 + $this->assertEquals($expected[$i][$ii][2], $situacao->retidoFalta, "Retido por falta, caso $i - $ii");
  117 + $this->assertEquals($expected[$i][$ii][3], $situacao->recuperacao, "Recuperação, caso $i - $ii");
  118 + }
  119 + }
  120 + }
  121 +}
0 122 \ No newline at end of file
... ...
ieducar/modules/Avaliacao/_tests/Service/TestCommon.php 0 → 100644
... ... @@ -0,0 +1,951 @@
  1 +<?php
  2 +
  3 +/**
  4 + * i-Educar - Sistema de gestão escolar
  5 + *
  6 + * Copyright (C) 2006 Prefeitura Municipal de Itajaí
  7 + * <ctima@itajai.sc.gov.br>
  8 + *
  9 + * Este programa é software livre; você pode redistribuí-lo e/ou modificá-lo
  10 + * sob os termos da Licença Pública Geral GNU conforme publicada pela Free
  11 + * Software Foundation; tanto a versão 2 da Licença, como (a seu critério)
  12 + * qualquer versão posterior.
  13 + *
  14 + * Este programa é distribuí­do na expectativa de que seja útil, porém, SEM
  15 + * NENHUMA GARANTIA; nem mesmo a garantia implí­cita de COMERCIABILIDADE OU
  16 + * ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA. Consulte a Licença Pública Geral
  17 + * do GNU para mais detalhes.
  18 + *
  19 + * Você deve ter recebido uma cópia da Licença Pública Geral do GNU junto
  20 + * com este programa; se não, escreva para a Free Software Foundation, Inc., no
  21 + * endereço 59 Temple Street, Suite 330, Boston, MA 02111-1307 USA.
  22 + *
  23 + * @author Eriksen Costa Paixão <eriksen.paixao_bs@cobra.com.br>
  24 + * @category i-Educar
  25 + * @license @@license@@
  26 + * @package Avaliacao
  27 + * @subpackage UnitTests
  28 + * @since Arquivo disponível desde a versão 1.1.0
  29 + * @version $Id$
  30 + */
  31 +
  32 +require_once 'include/pmieducar/clsPmieducarMatricula.inc.php';
  33 +require_once 'include/pmieducar/clsPmieducarSerie.inc.php';
  34 +require_once 'include/pmieducar/clsPmieducarCurso.inc.php';
  35 +require_once 'include/pmieducar/clsPmieducarEscolaSerieDisciplina.inc.php';
  36 +require_once 'include/pmieducar/clsPmieducarDispensaDisciplina.inc.php';
  37 +
  38 +require_once 'AreaConhecimento/Model/AreaDataMapper.php';
  39 +
  40 +require_once 'FormulaMedia/Model/Formula.php';
  41 +require_once 'FormulaMedia/Model/FormulaDataMapper.php';
  42 +
  43 +require_once 'TabelaArredondamento/Model/TabelaValor.php';
  44 +require_once 'TabelaArredondamento/Model/TabelaValorDataMapper.php';
  45 +
  46 +require_once 'TabelaArredondamento/Model/Tabela.php';
  47 +require_once 'TabelaArredondamento/Model/TabelaDataMapper.php';
  48 +
  49 +require_once 'RegraAvaliacao/Model/Regra.php';
  50 +require_once 'RegraAvaliacao/Model/RegraDataMapper.php';
  51 +
  52 +require_once 'Avaliacao/Model/NotaAlunoDataMapper.php';
  53 +require_once 'Avaliacao/Model/NotaComponenteDataMapper.php';
  54 +require_once 'Avaliacao/Model/NotaComponenteMediaDataMapper.php';
  55 +
  56 +require_once 'Avaliacao/Model/FaltaAlunoDataMapper.php';
  57 +require_once 'Avaliacao/Model/FaltaGeralDataMapper.php';
  58 +require_once 'Avaliacao/Model/FaltaComponenteDataMapper.php';
  59 +
  60 +require_once 'Avaliacao/Model/ParecerDescritivoAlunoDataMapper.php';
  61 +require_once 'Avaliacao/Model/ParecerDescritivoAbstractDataMapper.php';
  62 +require_once 'Avaliacao/Model/ParecerDescritivoComponenteDataMapper.php';
  63 +require_once 'Avaliacao/Model/ParecerDescritivoGeralDataMapper.php';
  64 +
  65 +require_once 'Avaliacao/Service/Boletim.php';
  66 +
  67 +/**
  68 + * Avaliacao_Service_TestCommon abstract class.
  69 + *
  70 + * Configura o service Avaliacao_Service_Boletim com mocks de suas dependências
  71 + * para que seja mais simples o processo de teste dos diversos comportamentos.
  72 + * A configuração básica segue o melhor cenário: as instâncias de
  73 + * Avaliacao_Model_NotaAluno e Avaliacao_Model_FaltaAluno existirão. Nenhuma
  74 + * nota, média ou falta terá sido lançada.
  75 + *
  76 + * Alguns métodos podem ser sobrescritos para que os mocks retornem o
  77 + * comportamento desejado para a sessão de testes (como os métodos
  78 + * _getMatricula(), _getSerie()) ou, pode-se usar o setter _setConfigOption()
  79 + * para alterar apenas um dos valores default da classe.
  80 + *
  81 + * A configuração padrão do service é constituída de:
  82 + * - Código do usuário: 1
  83 + * - Código de matrícula: 1
  84 + * - RegraAvaliacao_Model_RegraDataMapper: configuração ampla. Ver o array
  85 + * $_regraOptions e o método _setRegraOption para entender a configuração
  86 + * da instância
  87 + * - ComponenteCurricular_Model_ComponenteDataMapper: mock que retorna
  88 + * diferentes instâncias de ComponenteCurricular_Model_Componente em cada
  89 + * chamada. Essas instâncias são definidas na opção 'componenteCurricular'
  90 + * do array $_config. Esses componentes correspondem com os valores
  91 + * retornados pelos mocks de classes legadas (configuradas nos métodos
  92 + * _setUp*Mock()
  93 + * - Avaliacao_Model_NotaAlunoDataMapper: mock que retorna uma instância
  94 + * de Avaliacao_Model_NotaAluno com as configurações padrão
  95 + * - Avaliacao_Model_NotaComponenteDataMapper: mock que retorna um array
  96 + * vazio. Não existem notas lançadas para o aluno
  97 + * - Avaliacao_Model_NotaComponenteMediaDataMapper: mock que retorna um array
  98 + * vazio. Não existem médias lançadas para o aluno
  99 + * - Avaliacao_Model_FaltaAlunoDataMapper: mock que retorna uma instância
  100 + * de Avaliacao_Model_FaltaAluno com as configurações padrão
  101 + * - Avaliacao_Model_FaltaAbstractDataMapper: mock que retorna um array
  102 + * vazio. Não existem faltas lançadas para o aluno.
  103 + * OBSERVAÇÃO: métodos que sobrescreverem este, devem estar conscientes de
  104 + * que é necessário configurar o mock para retornar objeto(s) de acordo
  105 + * com o 'tipoPresenca' da instância de 'RegraAvaliacao_Model_Regra'. Ver o
  106 + * array $_regraOptions para mais informações.
  107 + *
  108 + * Outro ponto fundamental é entender que boa parte da inicialização do service
  109 + * constitui a chamadas de instâncias das classes legadas, encapsuladas nos
  110 + * métodos de App_Model_IedFinder. Estes são configurados nos métodos
  111 + * _setUp*Mock(). Para alterar o comportamento desses métodos, existem duas
  112 + * opções:
  113 + *
  114 + * - Chamar o método _setConfigOptions() ou setConfigOption em uma sobrescrição
  115 + * de setUp()
  116 + * - Sobrescrever o método
  117 + *
  118 + * Recomenda-se usar os métodos _setConfigOption e _setRegraOption a
  119 + * sobrescrever os métodos já que proporcionam mais possibilidade de
  120 + * configuração para cada método de teste.
  121 + *
  122 + * @author Eriksen Costa Paixão <eriksen.paixao_bs@cobra.com.br>
  123 + * @category i-Educar
  124 + * @license @@license@@
  125 + * @package Avaliacao
  126 + * @subpackage UnitTests
  127 + * @since Classe disponível desde a versão 1.1.0
  128 + * @version @@package_version@@
  129 + */
  130 +abstract class Avaliacao_Service_TestCommon extends UnitBaseTest
  131 +{
  132 + /**
  133 + * Array com as diretrizes de configuração para uso nas dependências de
  134 + * Avaliacao_Service_Boletim.
  135 + * @var array
  136 + */
  137 + protected $_config = array();
  138 +
  139 + /**
  140 + * @var RegraAvaliacao_Model_RegraDataMapper
  141 + */
  142 + protected $_regraDataMapperMock = NULL;
  143 +
  144 + /**
  145 + * Opções de configuração para RegraAvaliacao_Model_RegraDataMapper. Por
  146 + * padrão, a regra terá:
  147 + *
  148 + * - Identificador "1"
  149 + * - Nome "Regra geral"
  150 + * - Tipo de nota numérica
  151 + * - Progressão continuada
  152 + * - Presença por componente
  153 + * - Nenhum parecer descritivo
  154 + * - Média para promoção de "6"
  155 + * - Tabela de arredondamento com valores de 0 a 10
  156 + * - Fórmula de média aritmética simples (Soma etapas / Qtde etapas)
  157 + * - Fórmula de recuperação ponderada (Soma etapas x 0.6 + Recuperação x 0.4)
  158 + * - Porcentagem de presença mínima de "75%"
  159 + *
  160 + * Para alterar algum desses valores, basta usar o método
  161 + * _setRegraOption($key, $value) onde $key é a chave do array e $value o valor
  162 + * a ser usado.
  163 + *
  164 + * @var array
  165 + */
  166 + protected $_regraOptions = array(
  167 + 'id' => 1,
  168 + 'nome' => 'Regra geral',
  169 + 'tipoNota' => RegraAvaliacao_Model_Nota_TipoValor::NUMERICA,
  170 + 'tipoProgressao' => RegraAvaliacao_Model_TipoProgressao::CONTINUADA,
  171 + 'tipoPresenca' => RegraAvaliacao_Model_TipoPresenca::POR_COMPONENTE,
  172 + 'parecerDescritivo' => RegraAvaliacao_Model_TipoParecerDescritivo::NENHUM,
  173 + 'media' => 6,
  174 + 'tabelaArredondamento' => NULL,
  175 + 'formulaMedia' => NULL,
  176 + 'formulaRecuperacao' => NULL,
  177 + 'porcentagemPresenca' => 75
  178 + );
  179 +
  180 + protected $_componenteDataMapperMock = NULL;
  181 +
  182 + protected $_notaAlunoDataMapperMock = NULL;
  183 +
  184 + protected $_notaComponenteDataMapperMock = NULL;
  185 +
  186 + protected $_notaComponenteMediaDataMapperMock = NULL;
  187 +
  188 + protected $_faltaAlunoDataMapperMock = NULL;
  189 +
  190 + protected $_faltaAbstractDataMapperMock = NULL;
  191 +
  192 + protected $_parecerDescritivoAlunoDataMapperMock = NULL;
  193 +
  194 + protected $_parecerDescritivoAbstractDataMapperMock = NULL;
  195 +
  196 + protected function setUp()
  197 + {
  198 + // Armazena valores de configuração para serem usados nas diferentes
  199 + // instâncias de objetos legados e novos
  200 + $this->_setConfigOptions('usuario', array('cod_usuario' => 1))
  201 + ->_setConfigOptions('matricula', $this->_getMatricula())
  202 + ->_setConfigOptions('serie', $this->_getSerie())
  203 + ->_setConfigOptions('curso', $this->_getCurso())
  204 + ->_setConfigOptions('escolaAnoLetivo', $this->_getEscolaAnoLetivo())
  205 + ->_setConfigOptions('anoLetivoModulo', $this->_getAnoLetivoModulo())
  206 + ->_setConfigOptions('escolaSerieDisciplina', $this->_getEscolaSerieDisciplina())
  207 + ->_setConfigOptions('dispensaDisciplina', $this->_getDispensaDisciplina())
  208 + ->_setConfigOptions('componenteCurricular', $this->_getComponenteCurricular())
  209 + ->_setConfigOptions('notaAluno', $this->_getNotaAluno())
  210 + ->_setConfigOptions('faltaAluno', $this->_getFaltaAluno())
  211 + ->_setConfigOptions('parecerDescritivoAluno', $this->_getParecerDescritivoAluno());
  212 +
  213 + // Configura atributos de RegraAvaliacao_Model_Regra
  214 + $this->_setRegraOption('formulaMedia', $this->_setUpFormulaMedia())
  215 + ->_setRegraOption('formulaRecuperacao', $this->_setUpFormulaRecuperacao())
  216 + ->_setRegraOption('tabelaArredondamento', $this->_setUpTabelaArredondamento());
  217 + }
  218 +
  219 + protected function _getServiceInstance()
  220 + {
  221 + // Configura mappers das dependências de Avalilacao_Service_Boletim
  222 + $mappers = array(
  223 + 'RegraDataMapper' => $this->_getRegraDataMapperMock(),
  224 + 'ComponenteDataMapper' => $this->_getComponenteDataMapperMock(),
  225 + 'NotaAlunoDataMapper' => $this->_getNotaAlunoDataMapperMock(),
  226 + 'NotaComponenteDataMapper' => $this->_getNotaComponenteDataMapperMock(),
  227 + 'NotaComponenteMediaDataMapper' => $this->_getNotaComponenteMediaDataMapperMock(),
  228 + 'FaltaAlunoDataMapper' => $this->_getFaltaAlunoDataMapperMock(),
  229 + 'FaltaAbstractDataMapper' => $this->_getFaltaAbstractDataMapperMock(),
  230 + 'ParecerDescritivoAlunoDataMapper' => $this->_getParecerDescritivoAlunoDataMapperMock(),
  231 + 'ParecerDescritivoAbstractDataMapper' => $this->_getParecerDescritivoAbstractDataMapperMock(),
  232 + );
  233 +
  234 + $this->_setConfigOptions('mappers', $mappers);
  235 +
  236 + // Cria os mocks das classes legadas
  237 + $this->_setUpMatriculaMock()
  238 + ->_setUpCursoMock()
  239 + ->_setUpSerieMock()
  240 + ->_setUpEscolaAnoLetivo()
  241 + ->_setUpAnoLetivoModulo()
  242 + ->_setUpEscolaSerieDisciplinaMock()
  243 + ->_setUpDispensaDisciplinaMock();
  244 +
  245 + // Instancia o service
  246 + return new Avaliacao_Service_Boletim($this->_getServiceOptions());
  247 + }
  248 +
  249 + /**
  250 + * Getter. Retorna o array de opções para a inicialização do service.
  251 + * @return array
  252 + */
  253 + protected function _getServiceOptions()
  254 + {
  255 + return array(
  256 + 'matricula' => $this->_getConfigOption('matricula', 'cod_matricula'),
  257 + 'usuario' => $this->_getConfigOption('usuario', 'cod_usuario'),
  258 + 'RegraDataMapper' => $this->_getConfigOption('mappers', 'RegraDataMapper'),
  259 + 'ComponenteDataMapper' => $this->_getConfigOption('mappers', 'ComponenteDataMapper'),
  260 + 'NotaAlunoDataMapper' => $this->_getConfigOption('mappers', 'NotaAlunoDataMapper'),
  261 + 'NotaComponenteDataMapper' => $this->_getConfigOption('mappers', 'NotaComponenteDataMapper'),
  262 + 'NotaComponenteMediaDataMapper' => $this->_getConfigOption('mappers', 'NotaComponenteMediaDataMapper'),
  263 + 'FaltaAlunoDataMapper' => $this->_getConfigOption('mappers', 'FaltaAlunoDataMapper'),
  264 + 'FaltaAbstractDataMapper' => $this->_getConfigOption('mappers', 'FaltaAbstractDataMapper'),
  265 + 'ParecerDescritivoAlunoDataMapper' => $this->_getConfigOption('mappers', 'ParecerDescritivoAlunoDataMapper'),
  266 + 'ParecerDescritivoAbstractDataMapper' => $this->_getConfigOption('mappers', 'ParecerDescritivoAbstractDataMapper'),
  267 + );
  268 + }
  269 +
  270 + /**
  271 + * Setter.
  272 + *
  273 + * @param string $namespace
  274 + * @param array $data
  275 + * @return Avaliacao_Service_TestCommon
  276 + */
  277 + protected function _setConfigOptions($namespace, array $data)
  278 + {
  279 + $namespace = strtolower($namespace);
  280 +
  281 + $this->_config[$namespace] = array();
  282 +
  283 + // Chama _setConfigOption() para não sobrescrever opções já configuradas
  284 + foreach ($data as $key => $value) {
  285 + $this->_setConfigOption($namespace, $key, $value);
  286 + }
  287 +
  288 + return $this;
  289 + }
  290 +
  291 + /**
  292 + * Getter.
  293 + *
  294 + * @param string $namespace
  295 + * @return mixed
  296 + */
  297 + protected function _getConfigOptions($namespace)
  298 + {
  299 + $namespace = strtolower($namespace);
  300 +
  301 + if (!isset($this->_config[$namespace])) {
  302 + throw new Exception('_getConfigOption namespace');
  303 + }
  304 +
  305 + return $this->_config[$namespace];
  306 + }
  307 +
  308 + /**
  309 + * Setter.
  310 + *
  311 + * @param string $namespace
  312 + * @param string $key
  313 + * @param mixed $value
  314 + * @return Avaliacao_Service_TestCommon
  315 + */
  316 + protected function _setConfigOption($namespace, $key, $value)
  317 + {
  318 + $namespace = strtolower($namespace);
  319 +
  320 + if (!isset($this->_config[$namespace])) {
  321 + $this->_config[$namespace] = array();
  322 + }
  323 +
  324 + $this->_config[$namespace][$key] = $value;
  325 + return $this;
  326 + }
  327 +
  328 + /**
  329 + * Getter.
  330 + *
  331 + * @param string $namespace
  332 + * @param string $key
  333 + * @return mixed
  334 + */
  335 + protected function _getConfigOption($namespace, $key)
  336 + {
  337 + $namespace = strtolower($namespace);
  338 +
  339 + if (!isset($this->_config[$namespace])) {
  340 + throw new Exception('_getConfigOption namespace');
  341 + }
  342 +
  343 + if (!isset($this->_config[$namespace][$key])) {
  344 + throw new Exception('_getConfigOption option name: ' . $key);
  345 + }
  346 +
  347 + return $this->_config[$namespace][$key];
  348 + }
  349 +
  350 + /**
  351 + * @return array
  352 + */
  353 + protected function _getMatricula()
  354 + {
  355 + return array(
  356 + 'cod_matricula' => 1,
  357 + 'ref_cod_curso' => 1,
  358 + 'ref_ref_cod_serie' => 1,
  359 + 'ref_ref_cod_escola' => 1,
  360 + 'aprovado' => 1
  361 + );
  362 + }
  363 +
  364 + /**
  365 + * @return array
  366 + */
  367 + protected function _getSerie()
  368 + {
  369 + return array(
  370 + 'regra_avaliacao_id' => 1,
  371 + 'carga_horaria' => 800
  372 + );
  373 + }
  374 +
  375 + /**
  376 + * @return array
  377 + */
  378 + protected function _getCurso()
  379 + {
  380 + return array(
  381 + 'carga_horaria' => 800 * 9,
  382 + 'hora_falta' => (50 / 60),
  383 + 'padrao_ano_escolar' => 1
  384 + );
  385 + }
  386 +
  387 + /**
  388 + * @return array
  389 + */
  390 + protected function _getEscolaAnoLetivo()
  391 + {
  392 + return array(array(
  393 + 'ref_cod_escola' => 1,
  394 + 'ano' => 2009,
  395 + 'andamento' => 1,
  396 + 'ativo' => 1
  397 + ));
  398 + }
  399 +
  400 + /**
  401 + * @return array
  402 + */
  403 + protected function _getAnoLetivoModulo()
  404 + {
  405 + return array(
  406 + array('ref_ano' => 2009, 'ref_ref_cod_escola' => 1, 'sequencial' => 1),
  407 + array('ref_ano' => 2009, 'ref_ref_cod_escola' => 1, 'sequencial' => 2),
  408 + array('ref_ano' => 2009, 'ref_ref_cod_escola' => 1, 'sequencial' => 3),
  409 + array('ref_ano' => 2009, 'ref_ref_cod_escola' => 1, 'sequencial' => 4)
  410 + );
  411 + }
  412 +
  413 + /**
  414 + * Retorna um array com as possíveis etapas a serem cursadas.
  415 + * @return array
  416 + * @todo Condicionar o retorno de 'Rc' caso exista recuperação na Regra
  417 + */
  418 + protected function _getEtapasPossiveis()
  419 + {
  420 + $etapas = count($this->_getConfigOptions('anoLetivoModulo'));
  421 + return array_merge(range(1, $etapas, 1), array('Rc'));
  422 + }
  423 +
  424 + /**
  425 + * @return array
  426 + */
  427 + protected function _getEscolaSerieDisciplina()
  428 + {
  429 + return array(
  430 + array('ref_cod_serie' => 1, 'ref_cod_disciplina' => 1, 'carga_horaria' => 250),
  431 + array('ref_cod_serie' => 1, 'ref_cod_disciplina' => 2, 'carga_horaria' => 250),
  432 + array('ref_cod_serie' => 1, 'ref_cod_disciplina' => 3, 'carga_horaria' => 150),
  433 + array('ref_cod_serie' => 1, 'ref_cod_disciplina' => 4, 'carga_horaria' => 150),
  434 + );
  435 + }
  436 +
  437 + /**
  438 + * @return array
  439 + */
  440 + protected function _getDispensaDisciplina()
  441 + {
  442 + return array();
  443 + }
  444 +
  445 + /**
  446 + * @return array
  447 + */
  448 + protected function _getComponenteCurricular()
  449 + {
  450 + return array(
  451 + 1 => new ComponenteCurricular_Model_Componente(
  452 + array('id' => 1, 'nome' => 'Matemática', 'cargaHoraria' => 100)
  453 + ),
  454 + 2 => new ComponenteCurricular_Model_Componente(
  455 + array('id' => 2, 'nome' => 'Português', 'cargaHoraria' => 100)
  456 + ),
  457 + 3 => new ComponenteCurricular_Model_Componente(
  458 + array('id' => 3, 'nome' => 'Ciências', 'cargaHoraria' => 60)
  459 + ),
  460 + 4 => new ComponenteCurricular_Model_Componente(
  461 + array('id' => 4, 'nome' => 'Física', 'cargaHoraria' => 60)
  462 + )
  463 + );
  464 + }
  465 +
  466 + /**
  467 + * Retorna os componentes cursados pelo aluno.
  468 + * @return array
  469 + */
  470 + protected function _getComponentesCursados()
  471 + {
  472 + return array_diff(
  473 + array_keys($this->_getComponenteCurricular()),
  474 + array_keys($this->_getDispensaDisciplina())
  475 + );
  476 + }
  477 +
  478 + /**
  479 + * @return Avaliacao_Model_NotaAluno
  480 + */
  481 + protected function _getNotaAluno()
  482 + {
  483 + $matricula = $this->_getConfigOption('matricula', 'cod_matricula');
  484 +
  485 + return array('instance' => new Avaliacao_Model_NotaAluno(array(
  486 + 'id' => 1,
  487 + 'matricula' => $matricula
  488 + )));
  489 + }
  490 +
  491 + /**
  492 + * @return array
  493 + */
  494 + protected function _getFaltaAluno()
  495 + {
  496 + $matricula = $this->_getConfigOption('matricula', 'cod_matricula');
  497 +
  498 + return array('instance' => new Avaliacao_Model_FaltaAluno(array(
  499 + 'id' => 1,
  500 + 'matricula' => $matricula,
  501 + 'tipoFalta' => $this->_getRegraOption('tipoPresenca')
  502 + )));
  503 + }
  504 +
  505 + /**
  506 + * @return array
  507 + */
  508 + protected function _getParecerDescritivoAluno()
  509 + {
  510 + $matricula = $this->_getConfigOption('matricula', 'cod_matricula');
  511 +
  512 + return array('instance' => new Avaliacao_Model_ParecerDescritivoAluno(array(
  513 + 'id' => 1,
  514 + 'matricula' => $matricula,
  515 + 'parecerDescritivo' => $this->_getRegraOption('parecerDescritivo')
  516 + )));
  517 + }
  518 +
  519 + /**
  520 + * @return clsPmieducarMatricula
  521 + */
  522 + protected function _setUpMatriculaMock()
  523 + {
  524 + $mock = $this->getCleanMock('clsPmieducarMatricula');
  525 +
  526 + $mock->expects($this->any())
  527 + ->method('detalhe')
  528 + ->will($this->returnValue($this->_getConfigOptions('matricula')));
  529 +
  530 + CoreExt_Entity::addClassToStorage('clsPmieducarMatricula',
  531 + $mock, NULL, TRUE
  532 + );
  533 +
  534 + return $this;
  535 + }
  536 +
  537 + /**
  538 + * @return clsPmieducarSerie
  539 + */
  540 + protected function _setUpSerieMock()
  541 + {
  542 + $mock = $this->getCleanMock('clsPmieducarSerie');
  543 +
  544 + $mock->expects($this->any())
  545 + ->method('detalhe')
  546 + ->will($this->returnValue($this->_getConfigOptions('serie')));
  547 +
  548 + CoreExt_Entity::addClassToStorage('clsPmieducarSerie',
  549 + $mock, NULL, TRUE
  550 + );
  551 +
  552 + return $this;
  553 + }
  554 +
  555 + /**
  556 + * @return clsPmieducarCurso
  557 + */
  558 + protected function _setUpCursoMock()
  559 + {
  560 + $mock = $this->getCleanMock('clsPmieducarCurso');
  561 +
  562 + $mock->expects($this->any())
  563 + ->method('detalhe')
  564 + ->will($this->returnValue($this->_getConfigOptions('curso')));
  565 +
  566 + CoreExt_Entity::addClassToStorage('clsPmieducarCurso',
  567 + $mock, NULL, TRUE
  568 + );
  569 +
  570 + return $this;
  571 + }
  572 +
  573 + /**
  574 + * @return clsPmieducarEscolaAnoLetivo
  575 + */
  576 + protected function _setUpEscolaAnoLetivo()
  577 + {
  578 + $mock = $this->getCleanMock('clsPmieducarEscolaAnoLetivo');
  579 +
  580 + $mock->expects($this->any())
  581 + ->method('lista')
  582 + ->with(1, NULL, NULL, NULL, 1, NULL, NULL, NULL, NULL, 1)
  583 + ->will($this->returnValue($this->_getConfigOptions('escolaAnoLetivo')));
  584 +
  585 + CoreExt_Entity::addClassToStorage('clsPmieducarEscolaAnoLetivo',
  586 + $mock, NULL, TRUE
  587 + );
  588 +
  589 + return $this;
  590 + }
  591 +
  592 + /**
  593 + * @return clsPmieducarAnoLetivoModulo
  594 + */
  595 + protected function _setUpAnoLetivoModulo()
  596 + {
  597 + $mock = $this->getCleanMock('clsPmieducarAnoLetivoModulo');
  598 +
  599 + $mock->expects($this->any())
  600 + ->method('lista')
  601 + ->with(2009, 1)
  602 + ->will($this->returnValue($this->_getConfigOptions('anoLetivoModulo')));
  603 +
  604 + CoreExt_Entity::addClassToStorage('clsPmieducarAnoLetivoModulo',
  605 + $mock, NULL, TRUE
  606 + );
  607 +
  608 + return $this;
  609 + }
  610 +
  611 + /**
  612 + * @return clsPmieducarEscolaSerieDisciplina
  613 + */
  614 + protected function _setUpEscolaSerieDisciplinaMock()
  615 + {
  616 + $mock = $this->getCleanMock('clsPmieducarEscolaSerieDisciplina');
  617 +
  618 + $mock->expects($this->any())
  619 + ->method('lista')
  620 + ->will($this->returnValue($this->_getConfigOptions('escolaSerieDisciplina')));
  621 +
  622 + CoreExt_Entity::addClassToStorage('clsPmieducarEscolaSerieDisciplina',
  623 + $mock, NULL, TRUE
  624 + );
  625 +
  626 + return $this;
  627 + }
  628 +
  629 + /**
  630 + * @return clsPmieducarDispensaDisciplina
  631 + */
  632 + protected function _setUpDispensaDisciplinaMock()
  633 + {
  634 + $mock = $this->getCleanMock('clsPmieducarDispensaDisciplina');
  635 +
  636 + $mock->expects($this->any())
  637 + ->method('lista')
  638 + ->will($this->returnValue($this->_getConfigOptions('dispensaDisciplina')));
  639 +
  640 + CoreExt_Entity::addClassToStorage('clsPmieducarDispensaDisciplina',
  641 + $mock, NULL, TRUE
  642 + );
  643 +
  644 + return $this;
  645 + }
  646 +
  647 + /**
  648 + * Configura e retorna um mock de RegraAvaliacaoDataMapper que retorna uma
  649 + * instância de RegraAvaliacao_Model_Regra configurada de acordo com as
  650 + * opções do array $_regraOptions.
  651 + *
  652 + * @return RegraAvaliacao_Model_RegraDataMapper
  653 + */
  654 + protected function _getRegraDataMapperMock()
  655 + {
  656 + $regraAvaliacao = new RegraAvaliacao_Model_Regra($this->_regraOptions);
  657 +
  658 + $mock = $this->getCleanMock('RegraAvaliacao_Model_RegraDataMapper');
  659 + $mock->expects($this->any())
  660 + ->method('find')
  661 + ->with(1)
  662 + ->will($this->returnValue($regraAvaliacao));
  663 +
  664 + return $mock;
  665 + }
  666 +
  667 + /**
  668 + * Configura uma das opções a serem passadas durante a instanciação de
  669 + * RegraAvaliacao_Model_Regra.
  670 + *
  671 + * @param string $key
  672 + * @param mixed $value
  673 + */
  674 + protected function _setRegraOption($key, $value)
  675 + {
  676 + if (!array_key_exists($key, $this->_regraOptions)) {
  677 + require_once 'CoreExt/Exception/InvalidArgumentException.php';
  678 + throw new CoreExt_Exception_InvalidArgumentException('regraOption:' . $key);
  679 + }
  680 +
  681 + $this->_regraOptions[$key] = $value;
  682 + return $this;
  683 + }
  684 +
  685 + /**
  686 + * Getter.
  687 + *
  688 + * @param string $key
  689 + * @return mixed
  690 + */
  691 + protected function _getRegraOption($key)
  692 + {
  693 + if (!array_key_exists($key, $this->_regraOptions)) {
  694 + require_once 'CoreExt/Exception/InvalidArgumentException.php';
  695 + throw new CoreExt_Exception_InvalidArgumentException('regraOption: ' . $key);
  696 + }
  697 +
  698 + return $this->_regraOptions[$key];
  699 + }
  700 +
  701 + /**
  702 + * @return FormulaMedia_Model_Formula
  703 + */
  704 + protected function _setUpFormulaMedia()
  705 + {
  706 + return new FormulaMedia_Model_Formula(array(
  707 + 'id' => 1,
  708 + 'nome' => 'Média aritmética',
  709 + 'formulaMedia' => 'Se / Et',
  710 + 'tipoFormula' => FormulaMedia_Model_TipoFormula::MEDIA_FINAL
  711 + ));
  712 + }
  713 +
  714 + /**
  715 + * @return FormulaMedia_Model_Formula
  716 + */
  717 + protected function _setUpFormulaRecuperacao()
  718 + {
  719 + return new FormulaMedia_Model_Formula(array(
  720 + 'id' => 1,
  721 + 'nome' => 'Média ponderada',
  722 + 'formulaMedia' => '(Se / Et * 0.6) + (Rc * 0.4)',
  723 + 'tipoFormula' => FormulaMedia_Model_TipoFormula::MEDIA_RECUPERACAO
  724 + ));
  725 + }
  726 +
  727 + /**
  728 + * @return TabelaArredondamento_Model_Tabela
  729 + */
  730 + protected function _setUpTabelaArredondamento()
  731 + {
  732 + // Valores padrão dos atributos de TabelaArredondamento_Model_TabelaValor
  733 + $data = array(
  734 + 'tabelaArredondamento' => 1,
  735 + 'nome' => NULL,
  736 + 'descricao' => NULL,
  737 + 'valorMinimo' => -1,
  738 + 'valorMaximo' => 0
  739 + );
  740 +
  741 + $tabelaValores = array();
  742 +
  743 + for ($i = 0; $i <= 10; $i++) {
  744 + $data['nome'] = $i;
  745 + $data['valorMinimo'] += 1;
  746 + $data['valorMaximo'] += 1;
  747 +
  748 + if ($i == 10) {
  749 + $data['valorMinimo'] = 9;
  750 + $data['valorMaximo'] = 10;
  751 + }
  752 +
  753 + $tabelaValores[$i] = new TabelaArredondamento_Model_TabelaValor($data);
  754 + }
  755 +
  756 + $mock = $this->getCleanMock('TabelaArredondamento_Model_TabelaValorDataMapper');
  757 + $mock->expects($this->any())
  758 + ->method('findAll')
  759 + ->will($this->returnValue($tabelaValores));
  760 +
  761 + $tabelaDataMapper = new TabelaArredondamento_Model_TabelaDataMapper();
  762 + $tabelaDataMapper->setTabelaValorDataMapper($mock);
  763 +
  764 + $tabela = new TabelaArredondamento_Model_Tabela(array('nome' => 'Numéricas'));
  765 + $tabela->setDataMapper($tabelaDataMapper);
  766 +
  767 + return $tabela;
  768 + }
  769 +
  770 + protected function _setComponenteDataMapperMock(ComponenteCurricular_Model_ComponenteDataMapper $mapper)
  771 + {
  772 + $this->_componenteDataMapperMock = $mapper;
  773 + return $this;
  774 + }
  775 +
  776 + protected function _getComponenteDataMapperMock()
  777 + {
  778 + if (is_null($this->_componenteDataMapperMock)) {
  779 + $componentes = $this->_getConfigOptions('componenteCurricular');
  780 +
  781 + // Mock para ComponenteCurricular_Model_ComponenteDataMapper
  782 + $mock = $this->getCleanMock('ComponenteCurricular_Model_ComponenteDataMapper');
  783 + $mock->expects($this->any())
  784 + ->method('findComponenteCurricularAnoEscolar')
  785 + ->will(new PHPUnit_Framework_MockObject_Stub_ConsecutiveCalls($componentes));
  786 +
  787 + $this->_setComponenteDataMapperMock($mock);
  788 + }
  789 +
  790 + return $this->_componenteDataMapperMock;
  791 + }
  792 +
  793 + protected function _setNotaAlunoDataMapperMock(Avaliacao_Model_NotaAlunoDataMapper $mapper = NULL)
  794 + {
  795 + $this->_notaAlunoDataMapperMock = $mapper;
  796 + return $this;
  797 + }
  798 +
  799 + protected function _getNotaAlunoDataMapperMock()
  800 + {
  801 + if (is_null($this->_notaAlunoDataMapperMock)) {
  802 + $notaAluno = $this->_getConfigOption('notaAluno', 'instance');
  803 +
  804 + $mock = $this->getCleanMock('Avaliacao_Model_NotaAlunoDataMapper');
  805 + $mock->expects($this->at(0))
  806 + ->method('findAll')
  807 + ->with(array(), array('matricula' => $notaAluno->matricula))
  808 + ->will($this->returnValue(array($notaAluno)));
  809 +
  810 + $this->_setNotaAlunoDataMapperMock($mock);
  811 + }
  812 +
  813 + return $this->_notaAlunoDataMapperMock;
  814 + }
  815 +
  816 + protected function _setNotaComponenteDataMapperMock(Avaliacao_Model_NotaComponenteDataMapper $mapper)
  817 + {
  818 + $this->_notaComponenteDataMapperMock = $mapper;
  819 + return $this;
  820 + }
  821 +
  822 + protected function _getNotaComponenteDataMapperMock()
  823 + {
  824 + if (is_null($this->_notaComponenteDataMapperMock)) {
  825 + $mock = $this->getCleanMock('Avaliacao_Model_NotaComponenteDataMapper');
  826 + $mock->expects($this->at(0))
  827 + ->method('findAll')
  828 + ->with(array(), array('notaAluno' => $this->_getConfigOption('matricula', 'cod_matricula')), array('etapa' => 'ASC'))
  829 + ->will($this->returnValue(array()));
  830 +
  831 + $this->_setNotaComponenteDataMapperMock($mock);
  832 + }
  833 +
  834 + return $this->_notaComponenteDataMapperMock;
  835 + }
  836 +
  837 + protected function _setNotaComponenteMediaDataMapperMock(Avaliacao_Model_NotaComponenteMediaDataMapper $mapper)
  838 + {
  839 + $this->_notaComponenteMediaDataMapperMock = $mapper;
  840 + return $this;
  841 + }
  842 +
  843 + protected function _getNotaComponenteMediaDataMapperMock()
  844 + {
  845 + if (is_null($this->_notaComponenteMediaDataMapperMock)) {
  846 + $notaAluno = $this->_getConfigOption('notaAluno', 'instance');
  847 +
  848 + $mock = $this->getCleanMock('Avaliacao_Model_NotaComponenteMediaDataMapper');
  849 + $mock->expects($this->at(0))
  850 + ->method('findAll')
  851 + ->with(array(), array('notaAluno' => $notaAluno->id))
  852 + ->will($this->returnValue(array()));
  853 +
  854 + $this->_setNotaComponenteMediaDataMapperMock($mock);
  855 + }
  856 +
  857 + return $this->_notaComponenteMediaDataMapperMock;
  858 + }
  859 +
  860 + protected function _setFaltaAlunoDataMapperMock(Avaliacao_Model_FaltaAlunoDataMapper $mapper = NULL)
  861 + {
  862 + $this->_faltaAlunoDataMapperMock = $mapper;
  863 + return $this;
  864 + }
  865 +
  866 + protected function _getFaltaAlunoDataMapperMock()
  867 + {
  868 + if (is_null($this->_faltaAlunoDataMapperMock)) {
  869 + $faltaAluno = $this->_getConfigOption('faltaAluno', 'instance');
  870 +
  871 + $mock = $this->getCleanMock('Avaliacao_Model_FaltaAlunoDataMapper');
  872 + $mock->expects($this->at(0))
  873 + ->method('findAll')
  874 + ->with(array(), array('matricula' => $this->_getConfigOption('matricula', 'cod_matricula')))
  875 + ->will($this->returnValue(array($faltaAluno)));
  876 +
  877 + $this->_setFaltaAlunoDataMapperMock($mock);
  878 + }
  879 +
  880 + return $this->_faltaAlunoDataMapperMock;
  881 + }
  882 +
  883 + protected function _setFaltaAbstractDataMapperMock(Avaliacao_Model_FaltaAbstractDataMapper $mapper)
  884 + {
  885 + $this->_faltaAbstractDataMapperMock = $mapper;
  886 + return $this;
  887 + }
  888 +
  889 + protected function _getFaltaAbstractDataMapperMock()
  890 + {
  891 + $faltaAluno = $this->_getConfigOption('faltaAluno', 'instance');
  892 +
  893 + if (is_null($this->_faltaAbstractDataMapperMock)) {
  894 + $mock = $this->getCleanMock('Avaliacao_Model_FaltaAbstractDataMapper');
  895 + $mock->expects($this->at(0))
  896 + ->method('findAll')
  897 + ->with(array(), array('faltaAluno' => $faltaAluno->id), array('etapa' => 'ASC'))
  898 + ->will($this->returnValue(array()));
  899 +
  900 + $this->_setFaltaAbstractDataMapperMock($mock);
  901 + }
  902 +
  903 + return $this->_faltaAbstractDataMapperMock;
  904 + }
  905 +
  906 + protected function _setParecerDescritivoAlunoDataMapperMock(Avaliacao_Model_ParecerDescritivoAlunoDataMapper $mapper)
  907 + {
  908 + $this->_parecerDescritivoAlunoDataMapperMock = $mapper;
  909 + return $this;
  910 + }
  911 +
  912 + protected function _getParecerDescritivoAlunoDataMapperMock()
  913 + {
  914 + if (is_null($this->_parecerDescritivoAlunoDataMapperMock)) {
  915 + $parecerAluno = $this->_getConfigOption('parecerDescritivoAluno', 'instance');
  916 +
  917 + $mock = $this->getCleanMock('Avaliacao_Model_ParecerDescritivoAlunoDataMapper');
  918 + $mock->expects($this->at(0))
  919 + ->method('findAll')
  920 + ->with(array(), array('matricula' => $this->_getConfigOption('matricula', 'cod_matricula')))
  921 + ->will($this->returnValue(array($parecerAluno)));
  922 +
  923 + $this->_setParecerDescritivoAlunoDataMapperMock($mock);
  924 + }
  925 +
  926 + return $this->_parecerDescritivoAlunoDataMapperMock;
  927 + }
  928 +
  929 + protected function _setParecerDescritivoAbstractDataMapperMock(Avaliacao_Model_ParecerDescritivoAbstractDataMapper $mapper)
  930 + {
  931 + $this->_parecerDescritivoAbstractDataMapperMock = $mapper;
  932 + return $this;
  933 + }
  934 +
  935 + protected function _getParecerDescritivoAbstractDataMapperMock()
  936 + {
  937 + if (is_null($this->_parecerDescritivoAbstractDataMapperMock)) {
  938 + $parecerAluno = $this->_getConfigOption('parecerDescritivoAluno', 'instance');
  939 +
  940 + $mock = $this->getCleanMock('Avaliacao_Model_ParecerDescritivoAbstractDataMapper');
  941 + $mock->expects($this->at(0))
  942 + ->method('findAll')
  943 + ->with(array(), array('parecerDescritivoAluno' => $parecerAluno->id), array('etapa' => 'ASC'))
  944 + ->will($this->returnValue(array()));
  945 +
  946 + $this->_setParecerDescritivoAbstractDataMapperMock($mock);
  947 + }
  948 +
  949 + return $this->_parecerDescritivoAbstractDataMapperMock;
  950 + }
  951 +}
0 952 \ No newline at end of file
... ...
ieducar/modules/Avaliacao/_tests/Service/UtilityTest.php 0 → 100644
... ... @@ -0,0 +1,125 @@
  1 +<?php
  2 +
  3 +/**
  4 + * i-Educar - Sistema de gestão escolar
  5 + *
  6 + * Copyright (C) 2006 Prefeitura Municipal de Itajaí
  7 + * <ctima@itajai.sc.gov.br>
  8 + *
  9 + * Este programa é software livre; você pode redistribuí-lo e/ou modificá-lo
  10 + * sob os termos da Licença Pública Geral GNU conforme publicada pela Free
  11 + * Software Foundation; tanto a versão 2 da Licença, como (a seu critério)
  12 + * qualquer versão posterior.
  13 + *
  14 + * Este programa é distribuí­do na expectativa de que seja útil, porém, SEM
  15 + * NENHUMA GARANTIA; nem mesmo a garantia implí­cita de COMERCIABILIDADE OU
  16 + * ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA. Consulte a Licença Pública Geral
  17 + * do GNU para mais detalhes.
  18 + *
  19 + * Você deve ter recebido uma cópia da Licença Pública Geral do GNU junto
  20 + * com este programa; se não, escreva para a Free Software Foundation, Inc., no
  21 + * endereço 59 Temple Street, Suite 330, Boston, MA 02111-1307 USA.
  22 + *
  23 + * @author Eriksen Costa Paixão <eriksen.paixao_bs@cobra.com.br>
  24 + * @category i-Educar
  25 + * @license @@license@@
  26 + * @package Avaliacao
  27 + * @subpackage UnitTests
  28 + * @since Arquivo disponível desde a versão 1.1.0
  29 + * @version $Id$
  30 + */
  31 +
  32 +require_once 'Avaliacao/_tests/Service/TestCommon.php';
  33 +
  34 +/**
  35 + * Avaliacao_Service_UtilityTest class.
  36 + *
  37 + * @author Eriksen Costa Paixão <eriksen.paixao_bs@cobra.com.br>
  38 + * @category i-Educar
  39 + * @license @@license@@
  40 + * @package Avaliacao
  41 + * @subpackage UnitTests
  42 + * @since Classe disponível desde a versão 1.1.0
  43 + * @version @@package_version@@
  44 + */
  45 +class Avaliacao_Service_UtilityTest extends Avaliacao_Service_TestCommon
  46 +{
  47 + public function testArredondaNotaLancaExcecaoSeParametroNaoForInstanciaDeAvaliacaomodelnotacomponenteOuNumerico()
  48 + {
  49 + $service = $this->_getServiceInstance();
  50 +
  51 + try {
  52 + $service->arredondaNota(new Avaliacao_Model_NotaComponente());
  53 + $this->fail('O valor "instância Avaliacao_Model_NotaComponente()" deveria '
  54 + . 'ter causado um exceção pois o atributo "nota" é NULL por padrão.');
  55 + }
  56 + catch (CoreExt_Exception_InvalidArgumentException $e) {
  57 + }
  58 +
  59 + try {
  60 + $service->arredondaNota('abc 7.5');
  61 + $this->fail('O valor "abc 7.5" deveria ter causado um exceção.');
  62 + }
  63 + catch (CoreExt_Exception_InvalidArgumentException $e) {
  64 + }
  65 + }
  66 +
  67 + public function testArredondaNotaNumerica()
  68 + {
  69 + $service = $this->_getServiceInstance();
  70 + $this->assertEquals(5, $service->arredondaNota(5.5));
  71 + }
  72 +
  73 + public function testArredondaNotaConceitual()
  74 + {
  75 + // Valores padrão dos atributos de TabelaArredondamento_Model_TabelaValor
  76 + $data = array(
  77 + 'tabelaArredondamento' => 1,
  78 + 'nome' => NULL,
  79 + 'descricao' => NULL,
  80 + 'valorMinimo' => -1,
  81 + 'valorMaximo' => 0
  82 + );
  83 +
  84 + $tabelaValores = array();
  85 +
  86 + // I
  87 + $tabelaValores[0] = new TabelaArredondamento_Model_TabelaValor($data);
  88 + $tabelaValores[0]->nome = 'I';
  89 + $tabelaValores[0]->descricao = 'Incompleto';
  90 + $tabelaValores[0]->valorMinimo = 0;
  91 + $tabelaValores[0]->valorMaximo = 5.50;
  92 +
  93 + // S
  94 + $tabelaValores[1] = new TabelaArredondamento_Model_TabelaValor($data);
  95 + $tabelaValores[1]->nome = 'S';
  96 + $tabelaValores[1]->descricao = 'Suficiente';
  97 + $tabelaValores[1]->valorMinimo = 5.51;
  98 + $tabelaValores[1]->valorMaximo = 8;
  99 +
  100 + // O
  101 + $tabelaValores[2] = new TabelaArredondamento_Model_TabelaValor($data);
  102 + $tabelaValores[2]->nome = 'O';
  103 + $tabelaValores[2]->descricao = 'Ótimo';
  104 + $tabelaValores[2]->valorMinimo = 8.01;
  105 + $tabelaValores[2]->valorMaximo = 10.0;
  106 +
  107 + $mock = $this->getCleanMock('TabelaArredondamento_Model_TabelaValorDataMapper');
  108 + $mock->expects($this->any())
  109 + ->method('findAll')
  110 + ->will($this->returnValue($tabelaValores));
  111 +
  112 + $tabelaDataMapper = new TabelaArredondamento_Model_TabelaDataMapper();
  113 + $tabelaDataMapper->setTabelaValorDataMapper($mock);
  114 +
  115 + $tabela = new TabelaArredondamento_Model_Tabela(array('nome' => 'Conceituais'));
  116 + $tabela->setDataMapper($tabelaDataMapper);
  117 +
  118 + $this->_setRegraOption('tabelaArredondamento', $tabela);
  119 +
  120 + $service = $this->_getServiceInstance();
  121 + $this->assertEquals('I', $service->arredondaNota(5.49));
  122 + $this->assertEquals('S', $service->arredondaNota(6.50));
  123 + $this->assertEquals('O', $service->arredondaNota(9.15));
  124 + }
  125 +}
0 126 \ No newline at end of file
... ...