diff --git a/tests_sei3/funcional/tests/CenarioBaseTestCase.php b/tests_sei3/funcional/tests/CenarioBaseTestCase.php index c83bfe739..ac29e1039 100755 --- a/tests_sei3/funcional/tests/CenarioBaseTestCase.php +++ b/tests_sei3/funcional/tests/CenarioBaseTestCase.php @@ -487,24 +487,29 @@ protected function validarDadosDocumento($nomeDocArvore, $dadosDocumento, $desti $bolPossuiDocumentoReferenciado = !is_null($dadosDocumento['ORDEM_DOCUMENTO_REFERENCIADO']); $this->assertTrue($this->paginaProcesso->deveSerDocumentoAnexo($bolPossuiDocumentoReferenciado, $nomeDocArvore)); - $this->paginaProcesso->selecionarDocumento($nomeDocArvore); - $this->paginaDocumento->navegarParaConsultarDocumento(); - $mesmoOrgao = $dadosDocumento['ORIGEM'] == $destinatario['URL']; - if ($mesmoOrgao && $dadosDocumento['TIPO'] == 'G') { - $this->assertEquals($dadosDocumento["DESCRICAO"], $this->paginaDocumento->descricao()); - if (!$mesmoOrgao) { - $observacoes = ($unidadeSecundaria) ? $this->paginaDocumento->observacoesNaTabela() : $this->paginaDocumento->observacoes(); - $this->assertEquals($dadosDocumento['OBSERVACOES'], $observacoes); - } - } else { - $this->assertNotNull($this->paginaDocumento->nomeAnexo()); - $contemVariosComponentes = is_array($dadosDocumento['ARQUIVO']); - if (!$contemVariosComponentes) { - $nomeArquivo = $dadosDocumento['ARQUIVO']; - $this->assertStringContainsString(basename($nomeArquivo), $this->paginaDocumento->nomeAnexo()); - if ($hipoteseLegal != null) { - $hipoteseLegalDocumento = $this->paginaDocumento->recuperarHipoteseLegal(); - $this->assertEquals($hipoteseLegal, $hipoteseLegalDocumento); + if (($this->paginaProcesso->ehDocumentoCancelado($nomeDocArvore) == false) and ($this->paginaProcesso->ehDocumentoMovido($nomeDocArvore) == false)) { + + $this->paginaProcesso->selecionarDocumento($nomeDocArvore); + $this->paginaDocumento->navegarParaConsultarDocumento(); + + $mesmoOrgao = $dadosDocumento['ORIGEM'] == $destinatario['URL']; + + if ($mesmoOrgao && $dadosDocumento['TIPO'] == 'G') { + $this->assertEquals($dadosDocumento["DESCRICAO"], $this->paginaDocumento->descricao()); + if (!$mesmoOrgao) { + $observacoes = ($unidadeSecundaria) ? $this->paginaDocumento->observacoesNaTabela() : $this->paginaDocumento->observacoes(); + $this->assertEquals($dadosDocumento['OBSERVACOES'], $observacoes); + } + } else { + $this->assertNotNull($this->paginaDocumento->nomeAnexo()); + $contemVariosComponentes = is_array($dadosDocumento['ARQUIVO']); + if (!$contemVariosComponentes) { + $nomeArquivo = $dadosDocumento['ARQUIVO']; + $this->assertStringContainsString(basename($nomeArquivo), $this->paginaDocumento->nomeAnexo()); + if ($hipoteseLegal != null) { + $hipoteseLegalDocumento = $this->paginaDocumento->recuperarHipoteseLegal(); + $this->assertEquals($hipoteseLegal, $hipoteseLegalDocumento); + } } } } diff --git a/tests_sei3/funcional/tests/TramiteProcessoContendoDocumentoMovidoDestino.php b/tests_sei3/funcional/tests/TramiteProcessoContendoDocumentoMovidoDestino.php new file mode 100644 index 000000000..7720e53e6 --- /dev/null +++ b/tests_sei3/funcional/tests/TramiteProcessoContendoDocumentoMovidoDestino.php @@ -0,0 +1,334 @@ +definirContextoTeste(CONTEXTO_ORGAO_A); + self::$destinatario = $this->definirContextoTeste(CONTEXTO_ORGAO_B); + + // acessar remetente (Órgão 1) + $this->acessarSistema(self::$remetente['URL'], self::$remetente['SIGLA_UNIDADE'], self::$remetente['LOGIN'], self::$remetente['SENHA']); + + // 1-criar Processo Principal ($processoTestePrincipal) (Órgão 1) + self::$processoTestePrincipal = $this->gerarDadosProcessoTeste(self::$remetente); + $this->paginaBase->navegarParaControleProcesso(); + self::$protocoloTestePrincipal = $this->cadastrarProcesso(self::$processoTestePrincipal); + + // 2-criar Documento Externo (documentoTeste1) no Processo Principal + self::$documentoTeste1 = $this->gerarDadosDocumentoExternoTeste(self::$remetente); + $this->cadastrarDocumentoExterno(self::$documentoTeste1); + + // 3-criar Documento Interno (documentoTeste2) no Processo Principal + self::$documentoTeste2 = $this->gerarDadosDocumentoInternoTeste(self::$remetente); + $this->cadastrarDocumentoInterno(self::$documentoTeste2); + $this->assinarDocumento(self::$remetente['ORGAO'], self::$remetente['CARGO_ASSINATURA'], self::$remetente['SENHA']); + + // 4-criar Documento Interno (documentoTeste3) no Processo Principal + self::$documentoTeste3 = $this->gerarDadosDocumentoInternoTeste(self::$remetente); + $this->cadastrarDocumentoInterno(self::$documentoTeste3); + $this->assinarDocumento(self::$remetente['ORGAO'], self::$remetente['CARGO_ASSINATURA'], self::$remetente['SENHA']); + + // 5-tramitar Processo Principal para o Órgão 2 com validação no remetente + $this->tramitarProcessoExternamente(self::$protocoloTestePrincipal, self::$destinatario['REP_ESTRUTURAS'], self::$destinatario['NOME_UNIDADE'], self::$destinatario['SIGLA_UNIDADE_HIERARQUIA'], false); + + // verificar se situação atual do processo está como bloqueado no remetente + $orgaosDiferentes = self::$remetente['URL'] != self::$destinatario['URL']; + $this->waitUntil(function ($testCase) use (&$orgaosDiferentes) { + sleep(5); + $this->atualizarTramitesPEN(); + $testCase->refresh(); + $paginaProcesso = new PaginaProcesso($testCase); + $testCase->assertStringNotContainsString(utf8_encode("Processo em trâmite externo para "), $paginaProcesso->informacao()); + $testCase->assertFalse($paginaProcesso->processoAberto()); + $testCase->assertEquals($orgaosDiferentes, $paginaProcesso->processoBloqueado()); + return true; + }, PEN_WAIT_TIMEOUT); + + // validar se recibo de trâmite foi armazenado para o processo (envio e conclusão) + $unidade = mb_convert_encoding(self::$destinatario['NOME_UNIDADE'], "ISO-8859-1"); + $mensagemRecibo = sprintf("Trâmite externo do Processo %s para %s", self::$protocoloTestePrincipal, $unidade); + $this->validarRecibosTramite($mensagemRecibo, true, true); + + // validar histórico de trâmite do processo + $this->validarHistoricoTramite(self::$destinatario['NOME_UNIDADE'], true, true); + + // verificar se processo está na lista de Processos Tramitados Externamente + $deveExistir = self::$remetente['URL'] != self::$destinatario['URL']; + $this->validarProcessosTramitados(self::$protocoloTestePrincipal, $orgaosDiferentes); + } + + /* + Escopo da função: + Órgão 2: + 6-verificar correto recebimento do processo e seus documentos no destino (Órgão 2) + 7-criar Processo Secundário ($processoTesteSecundario) (Órgão 2) + 8-mover documento externo (documentoTeste1) do Processo Principal para o Processo Secundário + 9-mover documento interno (documentoTeste2) do Processo Principal para o Processo Secundário + 10-criar documento externo (documentoTeste4) no Processo Principal + 11-criar documento interno (documentoTeste5) no Processo Principal + 12-tramitar Processo Principal para o Órgão 1 com validação no remetente + + @group TramiteProcessoContendoDocumentoMovidoDestino + @large + @depends test_criar_processo_contendo_documentos_tramitar_remetente + @return void + */ + public function test_criar_mover_incluir_documentos_devolver_processo_remetente() + { + // 6-verificar correto recebimento do processo e seus documentos no destino (Órgão 2) + $documentos = array(self::$documentoTeste1, self::$documentoTeste2, self::$documentoTeste3); + $this->realizarValidacaoRecebimentoProcessoNoDestinatario(self::$processoTestePrincipal, $documentos, self::$destinatario); + + // definir Órgão 1 como destinatário e Órgão 2 como remetente + self::$remetente = $this->definirContextoTeste(CONTEXTO_ORGAO_B); + self::$destinatario = $this->definirContextoTeste(CONTEXTO_ORGAO_A); + + // 7-criar Processo Secundário ($processoTesteSecundario) (Órgão 2) + self::$processoTesteSecundario = $this->gerarDadosProcessoTeste(self::$remetente); + self::$protocoloTesteSecundario = $this->cadastrarProcesso(self::$processoTesteSecundario); + + // abrir Processo Principal + $this->abrirProcesso(self::$protocoloTestePrincipal); + + // listar documentos do Processo Principal + $listaDocumentosProcessoPrincipal = $this->paginaProcesso->listarDocumentos(); + $this->assertEquals(3, count($listaDocumentosProcessoPrincipal)); + + // 8-mover documento externo (documentoTeste1) do Processo Principal para o Processo Secundário + $this->paginaProcesso->selecionarDocumento($listaDocumentosProcessoPrincipal[0]); + $this->paginaDocumento->navegarParaMoverDocumento(); + $this->paginaMoverDocumento->moverDocumentoParaProcesso(self::$protocoloTesteSecundario, "Motivo de teste"); + + // 9-mover documento interno (documentoTeste2) do Processo Principal para o Processo Secundário + $this->paginaProcesso->selecionarDocumento($listaDocumentosProcessoPrincipal[1]); + $this->paginaDocumento->navegarParaMoverDocumento(); + $this->paginaMoverDocumento->moverDocumentoParaProcesso(self::$protocoloTesteSecundario, "Motivo de teste"); + + // 10-criar documento externo (documentoTeste4) no Processo Principal + self::$documentoTeste4 = $this->gerarDadosDocumentoExternoTeste(self::$remetente); + $this->cadastrarDocumentoExterno(self::$documentoTeste4); + + // 11-criar documento interno (documentoTeste5) no Processo Principal + self::$documentoTeste5 = $this->gerarDadosDocumentoInternoTeste(self::$remetente); + $this->cadastrarDocumentoInterno(self::$documentoTeste5); + $this->assinarDocumento(self::$remetente['ORGAO'], self::$remetente['CARGO_ASSINATURA'], self::$remetente['SENHA']); + + // 12-tramitar Processo Principal para o Órgão 1 com validação no remetente + $this->tramitarProcessoExternamente(self::$protocoloTestePrincipal, self::$destinatario['REP_ESTRUTURAS'], self::$destinatario['NOME_UNIDADE'], self::$destinatario['SIGLA_UNIDADE_HIERARQUIA'], false); + + // verificar se situação atual do processo está como bloqueado no remetente + $orgaosDiferentes = self::$remetente['URL'] != self::$destinatario['URL']; + $this->waitUntil(function ($testCase) use (&$orgaosDiferentes) { + sleep(5); + $this->atualizarTramitesPEN(); + $testCase->refresh(); + $paginaProcesso = new PaginaProcesso($testCase); + $testCase->assertStringNotContainsString(utf8_encode("Processo em trâmite externo para "), $paginaProcesso->informacao()); + $testCase->assertFalse($paginaProcesso->processoAberto()); + $testCase->assertEquals($orgaosDiferentes, $paginaProcesso->processoBloqueado()); + return true; + }, PEN_WAIT_TIMEOUT); + + // validar se recibo de trâmite foi armazenado para o processo (envio e conclusão) + $unidade = mb_convert_encoding(self::$destinatario['NOME_UNIDADE'], "ISO-8859-1"); + $mensagemRecibo = sprintf("Trâmite externo do Processo %s para %s", self::$protocoloTestePrincipal, $unidade); + $this->validarRecibosTramite($mensagemRecibo, true, true); + + // validar histórico de trâmite do processo + $this->validarHistoricoTramite(self::$destinatario['NOME_UNIDADE'], true, true); + + // verificar se processo está na lista de Processos Tramitados Externamente + $deveExistir = self::$remetente['URL'] != self::$destinatario['URL']; + $this->validarProcessosTramitados(self::$protocoloTestePrincipal, $orgaosDiferentes); + } + + /* + Escopo da função: + Órgão 1: + 13-verificar correto recebimento do processo no destino (Órgão 1) + 14-criar documento interno (documentoTeste6) no Processo Principal + 15-tramitar Processo Principal para o Órgão 2 com validação no remetente + + @group TramiteProcessoContendoDocumentoMovidoDestino + @large + @depends test_criar_mover_incluir_documentos_devolver_processo_remetente + @return void + */ + public function test_incluir_documento_tramitar_destinatario() + { + // 13-verificar correto recebimento do processo no destino (Órgão 1) + $documentos = array(self::$documentoTeste1, self::$documentoTeste2, self::$documentoTeste3, self::$documentoTeste4, self::$documentoTeste5); + $this->realizarValidacaoRecebimentoProcessoNoDestinatario(self::$processoTestePrincipal, $documentos, self::$destinatario); + + // definir Órgão 1 como remetente e Órgão 2 como destinatário + self::$remetente = $this->definirContextoTeste(CONTEXTO_ORGAO_A); + self::$destinatario = $this->definirContextoTeste(CONTEXTO_ORGAO_B); + + // abrir Processo Principal + $this->abrirProcesso(self::$protocoloTestePrincipal); + + // 14-criar documento interno (documentoTeste6) no Processo Principal + self::$documentoTeste6 = $this->gerarDadosDocumentoInternoTeste(self::$remetente); + $this->cadastrarDocumentoInterno(self::$documentoTeste6); + $this->assinarDocumento(self::$remetente['ORGAO'], self::$remetente['CARGO_ASSINATURA'], self::$remetente['SENHA']); + + // 15-tramitar Processo Principal para o Órgão 2 com validação no remetente + $this->tramitarProcessoExternamente(self::$protocoloTestePrincipal, self::$destinatario['REP_ESTRUTURAS'], self::$destinatario['NOME_UNIDADE'], self::$destinatario['SIGLA_UNIDADE_HIERARQUIA'], false); + + // verificar se situação atual do processo está como bloqueado no remetente + $orgaosDiferentes = self::$remetente['URL'] != self::$destinatario['URL']; + $this->waitUntil(function ($testCase) use (&$orgaosDiferentes) { + sleep(5); + $this->atualizarTramitesPEN(); + $testCase->refresh(); + $paginaProcesso = new PaginaProcesso($testCase); + $testCase->assertStringNotContainsString(utf8_encode("Processo em trâmite externo para "), $paginaProcesso->informacao()); + $testCase->assertFalse($paginaProcesso->processoAberto()); + $testCase->assertEquals($orgaosDiferentes, $paginaProcesso->processoBloqueado()); + return true; + }, PEN_WAIT_TIMEOUT); + + // validar se recibo de trâmite foi armazenado para o processo (envio e conclusão) + $unidade = mb_convert_encoding(self::$destinatario['NOME_UNIDADE'], "ISO-8859-1"); + $mensagemRecibo = sprintf("Trâmite externo do Processo %s para %s", self::$protocoloTestePrincipal, $unidade); + $this->validarRecibosTramite($mensagemRecibo, true, true); + + // validar histórico de trâmite do processo + $this->validarHistoricoTramite(self::$destinatario['NOME_UNIDADE'], true, true); + + // verificar se processo está na lista de Processos Tramitados Externamente + $deveExistir = self::$remetente['URL'] != self::$destinatario['URL']; + $this->validarProcessosTramitados(self::$protocoloTestePrincipal, $orgaosDiferentes); + } + + /* + Escopo da função: + Órgão 2: + 16-verificar correto recebimento do processo no destino (Órgão 2) + 17-criar documento interno (documentoTeste7) no Processo Principal + 18-tramitar Processo Principal para o Órgão 1 com validação no remetente + + @group TramiteProcessoContendoDocumentoMovidoDestino + @large + @depends test_incluir_documento_tramitar_destinatario + @return void + */ + public function test_incluir_documento_tramitar_remetente() + { + // 16-verificar correto recebimento do processo no destino (Órgão 2) + $documentos = array(self::$documentoTeste1, self::$documentoTeste2, self::$documentoTeste3, self::$documentoTeste4, self::$documentoTeste5, self::$documentoTeste6); + $this->realizarValidacaoRecebimentoProcessoNoDestinatario(self::$processoTestePrincipal, $documentos, self::$destinatario); + + // definir Órgão 1 como destinatário e Órgão 2 como remetente + self::$remetente = $this->definirContextoTeste(CONTEXTO_ORGAO_B); + self::$destinatario = $this->definirContextoTeste(CONTEXTO_ORGAO_A); + + // 17-criar documento interno (documentoTeste7) no Processo Principal + self::$documentoTeste7 = $this->gerarDadosDocumentoInternoTeste(self::$remetente); + $this->cadastrarDocumentoInterno(self::$documentoTeste7); + $this->assinarDocumento(self::$remetente['ORGAO'], self::$remetente['CARGO_ASSINATURA'], self::$remetente['SENHA']); + + // 18-tramitar Processo Principal para o Órgão 1 com validação no remetente + $this->tramitarProcessoExternamente(self::$protocoloTestePrincipal, self::$destinatario['REP_ESTRUTURAS'], self::$destinatario['NOME_UNIDADE'], self::$destinatario['SIGLA_UNIDADE_HIERARQUIA'], false); + + // verificar se situação atual do processo está como bloqueado no remetente + $orgaosDiferentes = self::$remetente['URL'] != self::$destinatario['URL']; + $this->waitUntil(function ($testCase) use (&$orgaosDiferentes) { + sleep(5); + $this->atualizarTramitesPEN(); + $testCase->refresh(); + $paginaProcesso = new PaginaProcesso($testCase); + $testCase->assertStringNotContainsString(utf8_encode("Processo em trâmite externo para "), $paginaProcesso->informacao()); + $testCase->assertFalse($paginaProcesso->processoAberto()); + $testCase->assertEquals($orgaosDiferentes, $paginaProcesso->processoBloqueado()); + return true; + }, PEN_WAIT_TIMEOUT); + + // validar se recibo de trâmite foi armazenado para o processo (envio e conclusão) + $unidade = mb_convert_encoding(self::$destinatario['NOME_UNIDADE'], "ISO-8859-1"); + $mensagemRecibo = sprintf("Trâmite externo do Processo %s para %s", self::$protocoloTestePrincipal, $unidade); + $this->validarRecibosTramite($mensagemRecibo, true, true); + + // validar histórico de trâmite do processo + $this->validarHistoricoTramite(self::$destinatario['NOME_UNIDADE'], true, true); + + // verificar se processo está na lista de Processos Tramitados Externamente + $deveExistir = self::$remetente['URL'] != self::$destinatario['URL']; + $this->validarProcessosTramitados(self::$protocoloTestePrincipal, $orgaosDiferentes); + } + + /* + Escopo da função: + Órgão 1: + 19-verificar correto recebimento do processo no destino (Órgão 1) + + @group TramiteProcessoContendoDocumentoMovidoDestino + @large + @depends test_incluir_documento_tramitar_remetente + @return void + */ + public function test_verificar_processo_documento_destino() + { + // 19-verificar correto recebimento do processo no destino (Órgão 1) + $documentos = array(self::$documentoTeste1, self::$documentoTeste2, self::$documentoTeste3, self::$documentoTeste4, self::$documentoTeste5, self::$documentoTeste6, self::$documentoTeste7); + $this->realizarValidacaoRecebimentoProcessoNoDestinatario(self::$processoTestePrincipal, $documentos, self::$destinatario); + } + +} \ No newline at end of file diff --git a/tests_sei4/funcional/tests/CenarioBaseTestCase.php b/tests_sei4/funcional/tests/CenarioBaseTestCase.php index a772b63c6..218b04dd1 100755 --- a/tests_sei4/funcional/tests/CenarioBaseTestCase.php +++ b/tests_sei4/funcional/tests/CenarioBaseTestCase.php @@ -487,24 +487,29 @@ protected function validarDadosDocumento($nomeDocArvore, $dadosDocumento, $desti $bolPossuiDocumentoReferenciado = !is_null($dadosDocumento['ORDEM_DOCUMENTO_REFERENCIADO']); $this->assertTrue($this->paginaProcesso->deveSerDocumentoAnexo($bolPossuiDocumentoReferenciado, $nomeDocArvore)); - $this->paginaProcesso->selecionarDocumento($nomeDocArvore); - $this->paginaDocumento->navegarParaConsultarDocumento(); - $mesmoOrgao = $dadosDocumento['ORIGEM'] == $destinatario['URL']; - if ($mesmoOrgao && $dadosDocumento['TIPO'] == 'G') { - $this->assertEquals($dadosDocumento["DESCRICAO"], $this->paginaDocumento->descricao()); - if (!$mesmoOrgao) { - $observacoes = ($unidadeSecundaria) ? $this->paginaDocumento->observacoesNaTabela() : $this->paginaDocumento->observacoes(); - $this->assertEquals($dadosDocumento['OBSERVACOES'], $observacoes); - } - } else { - $this->assertNotNull($this->paginaDocumento->nomeAnexo()); - $contemVariosComponentes = is_array($dadosDocumento['ARQUIVO']); - if (!$contemVariosComponentes) { - $nomeArquivo = $dadosDocumento['ARQUIVO']; - $this->assertStringContainsString(basename($nomeArquivo), $this->paginaDocumento->nomeAnexo()); - if ($hipoteseLegal != null) { - $hipoteseLegalDocumento = $this->paginaDocumento->recuperarHipoteseLegal(); - $this->assertEquals($hipoteseLegal, $hipoteseLegalDocumento); + if (($this->paginaProcesso->ehDocumentoCancelado($nomeDocArvore) == false) and ($this->paginaProcesso->ehDocumentoMovido($nomeDocArvore) == false)) { + + $this->paginaProcesso->selecionarDocumento($nomeDocArvore); + $this->paginaDocumento->navegarParaConsultarDocumento(); + + $mesmoOrgao = $dadosDocumento['ORIGEM'] == $destinatario['URL']; + + if ($mesmoOrgao && $dadosDocumento['TIPO'] == 'G') { + $this->assertEquals($dadosDocumento["DESCRICAO"], $this->paginaDocumento->descricao()); + if (!$mesmoOrgao) { + $observacoes = ($unidadeSecundaria) ? $this->paginaDocumento->observacoesNaTabela() : $this->paginaDocumento->observacoes(); + $this->assertEquals($dadosDocumento['OBSERVACOES'], $observacoes); + } + } else { + $this->assertNotNull($this->paginaDocumento->nomeAnexo()); + $contemVariosComponentes = is_array($dadosDocumento['ARQUIVO']); + if (!$contemVariosComponentes) { + $nomeArquivo = $dadosDocumento['ARQUIVO']; + $this->assertStringContainsString(basename($nomeArquivo), $this->paginaDocumento->nomeAnexo()); + if ($hipoteseLegal != null) { + $hipoteseLegalDocumento = $this->paginaDocumento->recuperarHipoteseLegal(); + $this->assertEquals($hipoteseLegal, $hipoteseLegalDocumento); + } } } } @@ -513,7 +518,7 @@ protected function validarDadosDocumento($nomeDocArvore, $dadosDocumento, $desti protected function validarProcessosTramitados($protocolo, $deveExistir) { $this->frame(null); - $this->byLinkText("Menu")->click(); + $this->byXPath("//img[contains(@title, 'Controle de Processos')]")->click(); $this->byLinkText("Processos Tramitados Externamente")->click(); $this->assertEquals($deveExistir, $this->paginaProcessosTramitadosExternamente->contemProcesso($protocolo)); } diff --git a/tests_sei4/funcional/tests/TramiteProcessoContendoDocumentoMovidoDestino.php b/tests_sei4/funcional/tests/TramiteProcessoContendoDocumentoMovidoDestino.php new file mode 100644 index 000000000..7720e53e6 --- /dev/null +++ b/tests_sei4/funcional/tests/TramiteProcessoContendoDocumentoMovidoDestino.php @@ -0,0 +1,334 @@ +definirContextoTeste(CONTEXTO_ORGAO_A); + self::$destinatario = $this->definirContextoTeste(CONTEXTO_ORGAO_B); + + // acessar remetente (Órgão 1) + $this->acessarSistema(self::$remetente['URL'], self::$remetente['SIGLA_UNIDADE'], self::$remetente['LOGIN'], self::$remetente['SENHA']); + + // 1-criar Processo Principal ($processoTestePrincipal) (Órgão 1) + self::$processoTestePrincipal = $this->gerarDadosProcessoTeste(self::$remetente); + $this->paginaBase->navegarParaControleProcesso(); + self::$protocoloTestePrincipal = $this->cadastrarProcesso(self::$processoTestePrincipal); + + // 2-criar Documento Externo (documentoTeste1) no Processo Principal + self::$documentoTeste1 = $this->gerarDadosDocumentoExternoTeste(self::$remetente); + $this->cadastrarDocumentoExterno(self::$documentoTeste1); + + // 3-criar Documento Interno (documentoTeste2) no Processo Principal + self::$documentoTeste2 = $this->gerarDadosDocumentoInternoTeste(self::$remetente); + $this->cadastrarDocumentoInterno(self::$documentoTeste2); + $this->assinarDocumento(self::$remetente['ORGAO'], self::$remetente['CARGO_ASSINATURA'], self::$remetente['SENHA']); + + // 4-criar Documento Interno (documentoTeste3) no Processo Principal + self::$documentoTeste3 = $this->gerarDadosDocumentoInternoTeste(self::$remetente); + $this->cadastrarDocumentoInterno(self::$documentoTeste3); + $this->assinarDocumento(self::$remetente['ORGAO'], self::$remetente['CARGO_ASSINATURA'], self::$remetente['SENHA']); + + // 5-tramitar Processo Principal para o Órgão 2 com validação no remetente + $this->tramitarProcessoExternamente(self::$protocoloTestePrincipal, self::$destinatario['REP_ESTRUTURAS'], self::$destinatario['NOME_UNIDADE'], self::$destinatario['SIGLA_UNIDADE_HIERARQUIA'], false); + + // verificar se situação atual do processo está como bloqueado no remetente + $orgaosDiferentes = self::$remetente['URL'] != self::$destinatario['URL']; + $this->waitUntil(function ($testCase) use (&$orgaosDiferentes) { + sleep(5); + $this->atualizarTramitesPEN(); + $testCase->refresh(); + $paginaProcesso = new PaginaProcesso($testCase); + $testCase->assertStringNotContainsString(utf8_encode("Processo em trâmite externo para "), $paginaProcesso->informacao()); + $testCase->assertFalse($paginaProcesso->processoAberto()); + $testCase->assertEquals($orgaosDiferentes, $paginaProcesso->processoBloqueado()); + return true; + }, PEN_WAIT_TIMEOUT); + + // validar se recibo de trâmite foi armazenado para o processo (envio e conclusão) + $unidade = mb_convert_encoding(self::$destinatario['NOME_UNIDADE'], "ISO-8859-1"); + $mensagemRecibo = sprintf("Trâmite externo do Processo %s para %s", self::$protocoloTestePrincipal, $unidade); + $this->validarRecibosTramite($mensagemRecibo, true, true); + + // validar histórico de trâmite do processo + $this->validarHistoricoTramite(self::$destinatario['NOME_UNIDADE'], true, true); + + // verificar se processo está na lista de Processos Tramitados Externamente + $deveExistir = self::$remetente['URL'] != self::$destinatario['URL']; + $this->validarProcessosTramitados(self::$protocoloTestePrincipal, $orgaosDiferentes); + } + + /* + Escopo da função: + Órgão 2: + 6-verificar correto recebimento do processo e seus documentos no destino (Órgão 2) + 7-criar Processo Secundário ($processoTesteSecundario) (Órgão 2) + 8-mover documento externo (documentoTeste1) do Processo Principal para o Processo Secundário + 9-mover documento interno (documentoTeste2) do Processo Principal para o Processo Secundário + 10-criar documento externo (documentoTeste4) no Processo Principal + 11-criar documento interno (documentoTeste5) no Processo Principal + 12-tramitar Processo Principal para o Órgão 1 com validação no remetente + + @group TramiteProcessoContendoDocumentoMovidoDestino + @large + @depends test_criar_processo_contendo_documentos_tramitar_remetente + @return void + */ + public function test_criar_mover_incluir_documentos_devolver_processo_remetente() + { + // 6-verificar correto recebimento do processo e seus documentos no destino (Órgão 2) + $documentos = array(self::$documentoTeste1, self::$documentoTeste2, self::$documentoTeste3); + $this->realizarValidacaoRecebimentoProcessoNoDestinatario(self::$processoTestePrincipal, $documentos, self::$destinatario); + + // definir Órgão 1 como destinatário e Órgão 2 como remetente + self::$remetente = $this->definirContextoTeste(CONTEXTO_ORGAO_B); + self::$destinatario = $this->definirContextoTeste(CONTEXTO_ORGAO_A); + + // 7-criar Processo Secundário ($processoTesteSecundario) (Órgão 2) + self::$processoTesteSecundario = $this->gerarDadosProcessoTeste(self::$remetente); + self::$protocoloTesteSecundario = $this->cadastrarProcesso(self::$processoTesteSecundario); + + // abrir Processo Principal + $this->abrirProcesso(self::$protocoloTestePrincipal); + + // listar documentos do Processo Principal + $listaDocumentosProcessoPrincipal = $this->paginaProcesso->listarDocumentos(); + $this->assertEquals(3, count($listaDocumentosProcessoPrincipal)); + + // 8-mover documento externo (documentoTeste1) do Processo Principal para o Processo Secundário + $this->paginaProcesso->selecionarDocumento($listaDocumentosProcessoPrincipal[0]); + $this->paginaDocumento->navegarParaMoverDocumento(); + $this->paginaMoverDocumento->moverDocumentoParaProcesso(self::$protocoloTesteSecundario, "Motivo de teste"); + + // 9-mover documento interno (documentoTeste2) do Processo Principal para o Processo Secundário + $this->paginaProcesso->selecionarDocumento($listaDocumentosProcessoPrincipal[1]); + $this->paginaDocumento->navegarParaMoverDocumento(); + $this->paginaMoverDocumento->moverDocumentoParaProcesso(self::$protocoloTesteSecundario, "Motivo de teste"); + + // 10-criar documento externo (documentoTeste4) no Processo Principal + self::$documentoTeste4 = $this->gerarDadosDocumentoExternoTeste(self::$remetente); + $this->cadastrarDocumentoExterno(self::$documentoTeste4); + + // 11-criar documento interno (documentoTeste5) no Processo Principal + self::$documentoTeste5 = $this->gerarDadosDocumentoInternoTeste(self::$remetente); + $this->cadastrarDocumentoInterno(self::$documentoTeste5); + $this->assinarDocumento(self::$remetente['ORGAO'], self::$remetente['CARGO_ASSINATURA'], self::$remetente['SENHA']); + + // 12-tramitar Processo Principal para o Órgão 1 com validação no remetente + $this->tramitarProcessoExternamente(self::$protocoloTestePrincipal, self::$destinatario['REP_ESTRUTURAS'], self::$destinatario['NOME_UNIDADE'], self::$destinatario['SIGLA_UNIDADE_HIERARQUIA'], false); + + // verificar se situação atual do processo está como bloqueado no remetente + $orgaosDiferentes = self::$remetente['URL'] != self::$destinatario['URL']; + $this->waitUntil(function ($testCase) use (&$orgaosDiferentes) { + sleep(5); + $this->atualizarTramitesPEN(); + $testCase->refresh(); + $paginaProcesso = new PaginaProcesso($testCase); + $testCase->assertStringNotContainsString(utf8_encode("Processo em trâmite externo para "), $paginaProcesso->informacao()); + $testCase->assertFalse($paginaProcesso->processoAberto()); + $testCase->assertEquals($orgaosDiferentes, $paginaProcesso->processoBloqueado()); + return true; + }, PEN_WAIT_TIMEOUT); + + // validar se recibo de trâmite foi armazenado para o processo (envio e conclusão) + $unidade = mb_convert_encoding(self::$destinatario['NOME_UNIDADE'], "ISO-8859-1"); + $mensagemRecibo = sprintf("Trâmite externo do Processo %s para %s", self::$protocoloTestePrincipal, $unidade); + $this->validarRecibosTramite($mensagemRecibo, true, true); + + // validar histórico de trâmite do processo + $this->validarHistoricoTramite(self::$destinatario['NOME_UNIDADE'], true, true); + + // verificar se processo está na lista de Processos Tramitados Externamente + $deveExistir = self::$remetente['URL'] != self::$destinatario['URL']; + $this->validarProcessosTramitados(self::$protocoloTestePrincipal, $orgaosDiferentes); + } + + /* + Escopo da função: + Órgão 1: + 13-verificar correto recebimento do processo no destino (Órgão 1) + 14-criar documento interno (documentoTeste6) no Processo Principal + 15-tramitar Processo Principal para o Órgão 2 com validação no remetente + + @group TramiteProcessoContendoDocumentoMovidoDestino + @large + @depends test_criar_mover_incluir_documentos_devolver_processo_remetente + @return void + */ + public function test_incluir_documento_tramitar_destinatario() + { + // 13-verificar correto recebimento do processo no destino (Órgão 1) + $documentos = array(self::$documentoTeste1, self::$documentoTeste2, self::$documentoTeste3, self::$documentoTeste4, self::$documentoTeste5); + $this->realizarValidacaoRecebimentoProcessoNoDestinatario(self::$processoTestePrincipal, $documentos, self::$destinatario); + + // definir Órgão 1 como remetente e Órgão 2 como destinatário + self::$remetente = $this->definirContextoTeste(CONTEXTO_ORGAO_A); + self::$destinatario = $this->definirContextoTeste(CONTEXTO_ORGAO_B); + + // abrir Processo Principal + $this->abrirProcesso(self::$protocoloTestePrincipal); + + // 14-criar documento interno (documentoTeste6) no Processo Principal + self::$documentoTeste6 = $this->gerarDadosDocumentoInternoTeste(self::$remetente); + $this->cadastrarDocumentoInterno(self::$documentoTeste6); + $this->assinarDocumento(self::$remetente['ORGAO'], self::$remetente['CARGO_ASSINATURA'], self::$remetente['SENHA']); + + // 15-tramitar Processo Principal para o Órgão 2 com validação no remetente + $this->tramitarProcessoExternamente(self::$protocoloTestePrincipal, self::$destinatario['REP_ESTRUTURAS'], self::$destinatario['NOME_UNIDADE'], self::$destinatario['SIGLA_UNIDADE_HIERARQUIA'], false); + + // verificar se situação atual do processo está como bloqueado no remetente + $orgaosDiferentes = self::$remetente['URL'] != self::$destinatario['URL']; + $this->waitUntil(function ($testCase) use (&$orgaosDiferentes) { + sleep(5); + $this->atualizarTramitesPEN(); + $testCase->refresh(); + $paginaProcesso = new PaginaProcesso($testCase); + $testCase->assertStringNotContainsString(utf8_encode("Processo em trâmite externo para "), $paginaProcesso->informacao()); + $testCase->assertFalse($paginaProcesso->processoAberto()); + $testCase->assertEquals($orgaosDiferentes, $paginaProcesso->processoBloqueado()); + return true; + }, PEN_WAIT_TIMEOUT); + + // validar se recibo de trâmite foi armazenado para o processo (envio e conclusão) + $unidade = mb_convert_encoding(self::$destinatario['NOME_UNIDADE'], "ISO-8859-1"); + $mensagemRecibo = sprintf("Trâmite externo do Processo %s para %s", self::$protocoloTestePrincipal, $unidade); + $this->validarRecibosTramite($mensagemRecibo, true, true); + + // validar histórico de trâmite do processo + $this->validarHistoricoTramite(self::$destinatario['NOME_UNIDADE'], true, true); + + // verificar se processo está na lista de Processos Tramitados Externamente + $deveExistir = self::$remetente['URL'] != self::$destinatario['URL']; + $this->validarProcessosTramitados(self::$protocoloTestePrincipal, $orgaosDiferentes); + } + + /* + Escopo da função: + Órgão 2: + 16-verificar correto recebimento do processo no destino (Órgão 2) + 17-criar documento interno (documentoTeste7) no Processo Principal + 18-tramitar Processo Principal para o Órgão 1 com validação no remetente + + @group TramiteProcessoContendoDocumentoMovidoDestino + @large + @depends test_incluir_documento_tramitar_destinatario + @return void + */ + public function test_incluir_documento_tramitar_remetente() + { + // 16-verificar correto recebimento do processo no destino (Órgão 2) + $documentos = array(self::$documentoTeste1, self::$documentoTeste2, self::$documentoTeste3, self::$documentoTeste4, self::$documentoTeste5, self::$documentoTeste6); + $this->realizarValidacaoRecebimentoProcessoNoDestinatario(self::$processoTestePrincipal, $documentos, self::$destinatario); + + // definir Órgão 1 como destinatário e Órgão 2 como remetente + self::$remetente = $this->definirContextoTeste(CONTEXTO_ORGAO_B); + self::$destinatario = $this->definirContextoTeste(CONTEXTO_ORGAO_A); + + // 17-criar documento interno (documentoTeste7) no Processo Principal + self::$documentoTeste7 = $this->gerarDadosDocumentoInternoTeste(self::$remetente); + $this->cadastrarDocumentoInterno(self::$documentoTeste7); + $this->assinarDocumento(self::$remetente['ORGAO'], self::$remetente['CARGO_ASSINATURA'], self::$remetente['SENHA']); + + // 18-tramitar Processo Principal para o Órgão 1 com validação no remetente + $this->tramitarProcessoExternamente(self::$protocoloTestePrincipal, self::$destinatario['REP_ESTRUTURAS'], self::$destinatario['NOME_UNIDADE'], self::$destinatario['SIGLA_UNIDADE_HIERARQUIA'], false); + + // verificar se situação atual do processo está como bloqueado no remetente + $orgaosDiferentes = self::$remetente['URL'] != self::$destinatario['URL']; + $this->waitUntil(function ($testCase) use (&$orgaosDiferentes) { + sleep(5); + $this->atualizarTramitesPEN(); + $testCase->refresh(); + $paginaProcesso = new PaginaProcesso($testCase); + $testCase->assertStringNotContainsString(utf8_encode("Processo em trâmite externo para "), $paginaProcesso->informacao()); + $testCase->assertFalse($paginaProcesso->processoAberto()); + $testCase->assertEquals($orgaosDiferentes, $paginaProcesso->processoBloqueado()); + return true; + }, PEN_WAIT_TIMEOUT); + + // validar se recibo de trâmite foi armazenado para o processo (envio e conclusão) + $unidade = mb_convert_encoding(self::$destinatario['NOME_UNIDADE'], "ISO-8859-1"); + $mensagemRecibo = sprintf("Trâmite externo do Processo %s para %s", self::$protocoloTestePrincipal, $unidade); + $this->validarRecibosTramite($mensagemRecibo, true, true); + + // validar histórico de trâmite do processo + $this->validarHistoricoTramite(self::$destinatario['NOME_UNIDADE'], true, true); + + // verificar se processo está na lista de Processos Tramitados Externamente + $deveExistir = self::$remetente['URL'] != self::$destinatario['URL']; + $this->validarProcessosTramitados(self::$protocoloTestePrincipal, $orgaosDiferentes); + } + + /* + Escopo da função: + Órgão 1: + 19-verificar correto recebimento do processo no destino (Órgão 1) + + @group TramiteProcessoContendoDocumentoMovidoDestino + @large + @depends test_incluir_documento_tramitar_remetente + @return void + */ + public function test_verificar_processo_documento_destino() + { + // 19-verificar correto recebimento do processo no destino (Órgão 1) + $documentos = array(self::$documentoTeste1, self::$documentoTeste2, self::$documentoTeste3, self::$documentoTeste4, self::$documentoTeste5, self::$documentoTeste6, self::$documentoTeste7); + $this->realizarValidacaoRecebimentoProcessoNoDestinatario(self::$processoTestePrincipal, $documentos, self::$destinatario); + } + +} \ No newline at end of file diff --git a/tests_super/funcional/tests/CenarioBaseTestCase.php b/tests_super/funcional/tests/CenarioBaseTestCase.php index 82cf70203..d0f0f0c43 100755 --- a/tests_super/funcional/tests/CenarioBaseTestCase.php +++ b/tests_super/funcional/tests/CenarioBaseTestCase.php @@ -484,24 +484,29 @@ protected function validarDadosDocumento($nomeDocArvore, $dadosDocumento, $desti $bolPossuiDocumentoReferenciado = !is_null($dadosDocumento['ORDEM_DOCUMENTO_REFERENCIADO']); $this->assertTrue($this->paginaProcesso->deveSerDocumentoAnexo($bolPossuiDocumentoReferenciado, $nomeDocArvore)); - $this->paginaProcesso->selecionarDocumento($nomeDocArvore); - $this->paginaDocumento->navegarParaConsultarDocumento(); - $mesmoOrgao = $dadosDocumento['ORIGEM'] == $destinatario['URL']; - if ($mesmoOrgao && $dadosDocumento['TIPO'] == 'G') { - $this->assertEquals($dadosDocumento["DESCRICAO"], $this->paginaDocumento->descricao()); - if (!$mesmoOrgao) { - $observacoes = ($unidadeSecundaria) ? $this->paginaDocumento->observacoesNaTabela() : $this->paginaDocumento->observacoes(); - $this->assertEquals($dadosDocumento['OBSERVACOES'], $observacoes); - } - } else { - $this->assertNotNull($this->paginaDocumento->nomeAnexo()); - $contemVariosComponentes = is_array($dadosDocumento['ARQUIVO']); - if (!$contemVariosComponentes) { - $nomeArquivo = $dadosDocumento['ARQUIVO']; - $this->assertStringContainsString(basename($nomeArquivo), $this->paginaDocumento->nomeAnexo()); - if ($hipoteseLegal != null) { - $hipoteseLegalDocumento = $this->paginaDocumento->recuperarHipoteseLegal(); - $this->assertEquals($hipoteseLegal, $hipoteseLegalDocumento); + if (($this->paginaProcesso->ehDocumentoCancelado($nomeDocArvore) == false) and ($this->paginaProcesso->ehDocumentoMovido($nomeDocArvore) == false)) { + + $this->paginaProcesso->selecionarDocumento($nomeDocArvore); + $this->paginaDocumento->navegarParaConsultarDocumento(); + + $mesmoOrgao = $dadosDocumento['ORIGEM'] == $destinatario['URL']; + + if ($mesmoOrgao && $dadosDocumento['TIPO'] == 'G') { + $this->assertEquals($dadosDocumento["DESCRICAO"], $this->paginaDocumento->descricao()); + if (!$mesmoOrgao) { + $observacoes = ($unidadeSecundaria) ? $this->paginaDocumento->observacoesNaTabela() : $this->paginaDocumento->observacoes(); + $this->assertEquals($dadosDocumento['OBSERVACOES'], $observacoes); + } + } else { + $this->assertNotNull($this->paginaDocumento->nomeAnexo()); + $contemVariosComponentes = is_array($dadosDocumento['ARQUIVO']); + if (!$contemVariosComponentes) { + $nomeArquivo = $dadosDocumento['ARQUIVO']; + $this->assertStringContainsString(basename($nomeArquivo), $this->paginaDocumento->nomeAnexo()); + if ($hipoteseLegal != null) { + $hipoteseLegalDocumento = $this->paginaDocumento->recuperarHipoteseLegal(); + $this->assertEquals($hipoteseLegal, $hipoteseLegalDocumento); + } } } } diff --git a/tests_super/funcional/tests/TramiteProcessoContendoDocumentoMovidoDestino.php b/tests_super/funcional/tests/TramiteProcessoContendoDocumentoMovidoDestino.php new file mode 100644 index 000000000..7720e53e6 --- /dev/null +++ b/tests_super/funcional/tests/TramiteProcessoContendoDocumentoMovidoDestino.php @@ -0,0 +1,334 @@ +definirContextoTeste(CONTEXTO_ORGAO_A); + self::$destinatario = $this->definirContextoTeste(CONTEXTO_ORGAO_B); + + // acessar remetente (Órgão 1) + $this->acessarSistema(self::$remetente['URL'], self::$remetente['SIGLA_UNIDADE'], self::$remetente['LOGIN'], self::$remetente['SENHA']); + + // 1-criar Processo Principal ($processoTestePrincipal) (Órgão 1) + self::$processoTestePrincipal = $this->gerarDadosProcessoTeste(self::$remetente); + $this->paginaBase->navegarParaControleProcesso(); + self::$protocoloTestePrincipal = $this->cadastrarProcesso(self::$processoTestePrincipal); + + // 2-criar Documento Externo (documentoTeste1) no Processo Principal + self::$documentoTeste1 = $this->gerarDadosDocumentoExternoTeste(self::$remetente); + $this->cadastrarDocumentoExterno(self::$documentoTeste1); + + // 3-criar Documento Interno (documentoTeste2) no Processo Principal + self::$documentoTeste2 = $this->gerarDadosDocumentoInternoTeste(self::$remetente); + $this->cadastrarDocumentoInterno(self::$documentoTeste2); + $this->assinarDocumento(self::$remetente['ORGAO'], self::$remetente['CARGO_ASSINATURA'], self::$remetente['SENHA']); + + // 4-criar Documento Interno (documentoTeste3) no Processo Principal + self::$documentoTeste3 = $this->gerarDadosDocumentoInternoTeste(self::$remetente); + $this->cadastrarDocumentoInterno(self::$documentoTeste3); + $this->assinarDocumento(self::$remetente['ORGAO'], self::$remetente['CARGO_ASSINATURA'], self::$remetente['SENHA']); + + // 5-tramitar Processo Principal para o Órgão 2 com validação no remetente + $this->tramitarProcessoExternamente(self::$protocoloTestePrincipal, self::$destinatario['REP_ESTRUTURAS'], self::$destinatario['NOME_UNIDADE'], self::$destinatario['SIGLA_UNIDADE_HIERARQUIA'], false); + + // verificar se situação atual do processo está como bloqueado no remetente + $orgaosDiferentes = self::$remetente['URL'] != self::$destinatario['URL']; + $this->waitUntil(function ($testCase) use (&$orgaosDiferentes) { + sleep(5); + $this->atualizarTramitesPEN(); + $testCase->refresh(); + $paginaProcesso = new PaginaProcesso($testCase); + $testCase->assertStringNotContainsString(utf8_encode("Processo em trâmite externo para "), $paginaProcesso->informacao()); + $testCase->assertFalse($paginaProcesso->processoAberto()); + $testCase->assertEquals($orgaosDiferentes, $paginaProcesso->processoBloqueado()); + return true; + }, PEN_WAIT_TIMEOUT); + + // validar se recibo de trâmite foi armazenado para o processo (envio e conclusão) + $unidade = mb_convert_encoding(self::$destinatario['NOME_UNIDADE'], "ISO-8859-1"); + $mensagemRecibo = sprintf("Trâmite externo do Processo %s para %s", self::$protocoloTestePrincipal, $unidade); + $this->validarRecibosTramite($mensagemRecibo, true, true); + + // validar histórico de trâmite do processo + $this->validarHistoricoTramite(self::$destinatario['NOME_UNIDADE'], true, true); + + // verificar se processo está na lista de Processos Tramitados Externamente + $deveExistir = self::$remetente['URL'] != self::$destinatario['URL']; + $this->validarProcessosTramitados(self::$protocoloTestePrincipal, $orgaosDiferentes); + } + + /* + Escopo da função: + Órgão 2: + 6-verificar correto recebimento do processo e seus documentos no destino (Órgão 2) + 7-criar Processo Secundário ($processoTesteSecundario) (Órgão 2) + 8-mover documento externo (documentoTeste1) do Processo Principal para o Processo Secundário + 9-mover documento interno (documentoTeste2) do Processo Principal para o Processo Secundário + 10-criar documento externo (documentoTeste4) no Processo Principal + 11-criar documento interno (documentoTeste5) no Processo Principal + 12-tramitar Processo Principal para o Órgão 1 com validação no remetente + + @group TramiteProcessoContendoDocumentoMovidoDestino + @large + @depends test_criar_processo_contendo_documentos_tramitar_remetente + @return void + */ + public function test_criar_mover_incluir_documentos_devolver_processo_remetente() + { + // 6-verificar correto recebimento do processo e seus documentos no destino (Órgão 2) + $documentos = array(self::$documentoTeste1, self::$documentoTeste2, self::$documentoTeste3); + $this->realizarValidacaoRecebimentoProcessoNoDestinatario(self::$processoTestePrincipal, $documentos, self::$destinatario); + + // definir Órgão 1 como destinatário e Órgão 2 como remetente + self::$remetente = $this->definirContextoTeste(CONTEXTO_ORGAO_B); + self::$destinatario = $this->definirContextoTeste(CONTEXTO_ORGAO_A); + + // 7-criar Processo Secundário ($processoTesteSecundario) (Órgão 2) + self::$processoTesteSecundario = $this->gerarDadosProcessoTeste(self::$remetente); + self::$protocoloTesteSecundario = $this->cadastrarProcesso(self::$processoTesteSecundario); + + // abrir Processo Principal + $this->abrirProcesso(self::$protocoloTestePrincipal); + + // listar documentos do Processo Principal + $listaDocumentosProcessoPrincipal = $this->paginaProcesso->listarDocumentos(); + $this->assertEquals(3, count($listaDocumentosProcessoPrincipal)); + + // 8-mover documento externo (documentoTeste1) do Processo Principal para o Processo Secundário + $this->paginaProcesso->selecionarDocumento($listaDocumentosProcessoPrincipal[0]); + $this->paginaDocumento->navegarParaMoverDocumento(); + $this->paginaMoverDocumento->moverDocumentoParaProcesso(self::$protocoloTesteSecundario, "Motivo de teste"); + + // 9-mover documento interno (documentoTeste2) do Processo Principal para o Processo Secundário + $this->paginaProcesso->selecionarDocumento($listaDocumentosProcessoPrincipal[1]); + $this->paginaDocumento->navegarParaMoverDocumento(); + $this->paginaMoverDocumento->moverDocumentoParaProcesso(self::$protocoloTesteSecundario, "Motivo de teste"); + + // 10-criar documento externo (documentoTeste4) no Processo Principal + self::$documentoTeste4 = $this->gerarDadosDocumentoExternoTeste(self::$remetente); + $this->cadastrarDocumentoExterno(self::$documentoTeste4); + + // 11-criar documento interno (documentoTeste5) no Processo Principal + self::$documentoTeste5 = $this->gerarDadosDocumentoInternoTeste(self::$remetente); + $this->cadastrarDocumentoInterno(self::$documentoTeste5); + $this->assinarDocumento(self::$remetente['ORGAO'], self::$remetente['CARGO_ASSINATURA'], self::$remetente['SENHA']); + + // 12-tramitar Processo Principal para o Órgão 1 com validação no remetente + $this->tramitarProcessoExternamente(self::$protocoloTestePrincipal, self::$destinatario['REP_ESTRUTURAS'], self::$destinatario['NOME_UNIDADE'], self::$destinatario['SIGLA_UNIDADE_HIERARQUIA'], false); + + // verificar se situação atual do processo está como bloqueado no remetente + $orgaosDiferentes = self::$remetente['URL'] != self::$destinatario['URL']; + $this->waitUntil(function ($testCase) use (&$orgaosDiferentes) { + sleep(5); + $this->atualizarTramitesPEN(); + $testCase->refresh(); + $paginaProcesso = new PaginaProcesso($testCase); + $testCase->assertStringNotContainsString(utf8_encode("Processo em trâmite externo para "), $paginaProcesso->informacao()); + $testCase->assertFalse($paginaProcesso->processoAberto()); + $testCase->assertEquals($orgaosDiferentes, $paginaProcesso->processoBloqueado()); + return true; + }, PEN_WAIT_TIMEOUT); + + // validar se recibo de trâmite foi armazenado para o processo (envio e conclusão) + $unidade = mb_convert_encoding(self::$destinatario['NOME_UNIDADE'], "ISO-8859-1"); + $mensagemRecibo = sprintf("Trâmite externo do Processo %s para %s", self::$protocoloTestePrincipal, $unidade); + $this->validarRecibosTramite($mensagemRecibo, true, true); + + // validar histórico de trâmite do processo + $this->validarHistoricoTramite(self::$destinatario['NOME_UNIDADE'], true, true); + + // verificar se processo está na lista de Processos Tramitados Externamente + $deveExistir = self::$remetente['URL'] != self::$destinatario['URL']; + $this->validarProcessosTramitados(self::$protocoloTestePrincipal, $orgaosDiferentes); + } + + /* + Escopo da função: + Órgão 1: + 13-verificar correto recebimento do processo no destino (Órgão 1) + 14-criar documento interno (documentoTeste6) no Processo Principal + 15-tramitar Processo Principal para o Órgão 2 com validação no remetente + + @group TramiteProcessoContendoDocumentoMovidoDestino + @large + @depends test_criar_mover_incluir_documentos_devolver_processo_remetente + @return void + */ + public function test_incluir_documento_tramitar_destinatario() + { + // 13-verificar correto recebimento do processo no destino (Órgão 1) + $documentos = array(self::$documentoTeste1, self::$documentoTeste2, self::$documentoTeste3, self::$documentoTeste4, self::$documentoTeste5); + $this->realizarValidacaoRecebimentoProcessoNoDestinatario(self::$processoTestePrincipal, $documentos, self::$destinatario); + + // definir Órgão 1 como remetente e Órgão 2 como destinatário + self::$remetente = $this->definirContextoTeste(CONTEXTO_ORGAO_A); + self::$destinatario = $this->definirContextoTeste(CONTEXTO_ORGAO_B); + + // abrir Processo Principal + $this->abrirProcesso(self::$protocoloTestePrincipal); + + // 14-criar documento interno (documentoTeste6) no Processo Principal + self::$documentoTeste6 = $this->gerarDadosDocumentoInternoTeste(self::$remetente); + $this->cadastrarDocumentoInterno(self::$documentoTeste6); + $this->assinarDocumento(self::$remetente['ORGAO'], self::$remetente['CARGO_ASSINATURA'], self::$remetente['SENHA']); + + // 15-tramitar Processo Principal para o Órgão 2 com validação no remetente + $this->tramitarProcessoExternamente(self::$protocoloTestePrincipal, self::$destinatario['REP_ESTRUTURAS'], self::$destinatario['NOME_UNIDADE'], self::$destinatario['SIGLA_UNIDADE_HIERARQUIA'], false); + + // verificar se situação atual do processo está como bloqueado no remetente + $orgaosDiferentes = self::$remetente['URL'] != self::$destinatario['URL']; + $this->waitUntil(function ($testCase) use (&$orgaosDiferentes) { + sleep(5); + $this->atualizarTramitesPEN(); + $testCase->refresh(); + $paginaProcesso = new PaginaProcesso($testCase); + $testCase->assertStringNotContainsString(utf8_encode("Processo em trâmite externo para "), $paginaProcesso->informacao()); + $testCase->assertFalse($paginaProcesso->processoAberto()); + $testCase->assertEquals($orgaosDiferentes, $paginaProcesso->processoBloqueado()); + return true; + }, PEN_WAIT_TIMEOUT); + + // validar se recibo de trâmite foi armazenado para o processo (envio e conclusão) + $unidade = mb_convert_encoding(self::$destinatario['NOME_UNIDADE'], "ISO-8859-1"); + $mensagemRecibo = sprintf("Trâmite externo do Processo %s para %s", self::$protocoloTestePrincipal, $unidade); + $this->validarRecibosTramite($mensagemRecibo, true, true); + + // validar histórico de trâmite do processo + $this->validarHistoricoTramite(self::$destinatario['NOME_UNIDADE'], true, true); + + // verificar se processo está na lista de Processos Tramitados Externamente + $deveExistir = self::$remetente['URL'] != self::$destinatario['URL']; + $this->validarProcessosTramitados(self::$protocoloTestePrincipal, $orgaosDiferentes); + } + + /* + Escopo da função: + Órgão 2: + 16-verificar correto recebimento do processo no destino (Órgão 2) + 17-criar documento interno (documentoTeste7) no Processo Principal + 18-tramitar Processo Principal para o Órgão 1 com validação no remetente + + @group TramiteProcessoContendoDocumentoMovidoDestino + @large + @depends test_incluir_documento_tramitar_destinatario + @return void + */ + public function test_incluir_documento_tramitar_remetente() + { + // 16-verificar correto recebimento do processo no destino (Órgão 2) + $documentos = array(self::$documentoTeste1, self::$documentoTeste2, self::$documentoTeste3, self::$documentoTeste4, self::$documentoTeste5, self::$documentoTeste6); + $this->realizarValidacaoRecebimentoProcessoNoDestinatario(self::$processoTestePrincipal, $documentos, self::$destinatario); + + // definir Órgão 1 como destinatário e Órgão 2 como remetente + self::$remetente = $this->definirContextoTeste(CONTEXTO_ORGAO_B); + self::$destinatario = $this->definirContextoTeste(CONTEXTO_ORGAO_A); + + // 17-criar documento interno (documentoTeste7) no Processo Principal + self::$documentoTeste7 = $this->gerarDadosDocumentoInternoTeste(self::$remetente); + $this->cadastrarDocumentoInterno(self::$documentoTeste7); + $this->assinarDocumento(self::$remetente['ORGAO'], self::$remetente['CARGO_ASSINATURA'], self::$remetente['SENHA']); + + // 18-tramitar Processo Principal para o Órgão 1 com validação no remetente + $this->tramitarProcessoExternamente(self::$protocoloTestePrincipal, self::$destinatario['REP_ESTRUTURAS'], self::$destinatario['NOME_UNIDADE'], self::$destinatario['SIGLA_UNIDADE_HIERARQUIA'], false); + + // verificar se situação atual do processo está como bloqueado no remetente + $orgaosDiferentes = self::$remetente['URL'] != self::$destinatario['URL']; + $this->waitUntil(function ($testCase) use (&$orgaosDiferentes) { + sleep(5); + $this->atualizarTramitesPEN(); + $testCase->refresh(); + $paginaProcesso = new PaginaProcesso($testCase); + $testCase->assertStringNotContainsString(utf8_encode("Processo em trâmite externo para "), $paginaProcesso->informacao()); + $testCase->assertFalse($paginaProcesso->processoAberto()); + $testCase->assertEquals($orgaosDiferentes, $paginaProcesso->processoBloqueado()); + return true; + }, PEN_WAIT_TIMEOUT); + + // validar se recibo de trâmite foi armazenado para o processo (envio e conclusão) + $unidade = mb_convert_encoding(self::$destinatario['NOME_UNIDADE'], "ISO-8859-1"); + $mensagemRecibo = sprintf("Trâmite externo do Processo %s para %s", self::$protocoloTestePrincipal, $unidade); + $this->validarRecibosTramite($mensagemRecibo, true, true); + + // validar histórico de trâmite do processo + $this->validarHistoricoTramite(self::$destinatario['NOME_UNIDADE'], true, true); + + // verificar se processo está na lista de Processos Tramitados Externamente + $deveExistir = self::$remetente['URL'] != self::$destinatario['URL']; + $this->validarProcessosTramitados(self::$protocoloTestePrincipal, $orgaosDiferentes); + } + + /* + Escopo da função: + Órgão 1: + 19-verificar correto recebimento do processo no destino (Órgão 1) + + @group TramiteProcessoContendoDocumentoMovidoDestino + @large + @depends test_incluir_documento_tramitar_remetente + @return void + */ + public function test_verificar_processo_documento_destino() + { + // 19-verificar correto recebimento do processo no destino (Órgão 1) + $documentos = array(self::$documentoTeste1, self::$documentoTeste2, self::$documentoTeste3, self::$documentoTeste4, self::$documentoTeste5, self::$documentoTeste6, self::$documentoTeste7); + $this->realizarValidacaoRecebimentoProcessoNoDestinatario(self::$processoTestePrincipal, $documentos, self::$destinatario); + } + +} \ No newline at end of file