New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Reescrita da parte de execução de query da classe clsBancoPgSql #478

Open
wants to merge 23 commits into
base: master
from

Conversation

Projects
None yet
2 participants
@vitormattos
Copy link
Contributor

vitormattos commented Jan 2, 2019

Descrição

  • Avançando nos passos para redução de uso de banco de dados ao executar testes com reescrita da parte de execuão de query da classe clsBancoPgSql para passar a usar o facade DB do Laravel.
  • Melhoria em diversos testes.

Contexto e motivação

A classe clsBancoPgSql utiliza em vários lugares métodos pg_*, isto dificulta bastante a criação de mocks. Ela foi modificada para facilitar a criação de mocks.

Tipos de alterações

  • Bug fix (Não quebra outras funcionalidades)
  • New feature (Não quebra outras funcionalidades e adiciona funcionalidades)
  • Breaking change (Correção ou mudança, pode quebrar parte da aplicação)

Checklist:

  • Eu li o documento CONTRIBUTING. [REQUIRED]
  • Meu código segue a PSR2. [REQUIRED]
    • Para evitar dificuldade no code review, isto será feito em outro momento
  • Todos os testes novos e existentes estão passando. [REQUIRED]
  • Criei testes automatizados que cobrem minhas alterações.

vitormattos added some commits Dec 30, 2018

Uso de facade DB do Laravel para execução de query na classe clsBanco…
…PgSql.

Motivação: possibilitar realizar mock de banco de dados de forma mais prática.
Fix em testes que estavam quebrando por conta de falha na implementaç…
…ão do mock de query que não tinha como ser configurado para definir quando eles deveriam ser executados.

@vitormattos vitormattos changed the title Tests/reducao de uso de banco eescrita da parte de execuão de query da classe clsBancoPgSql Jan 2, 2019

@vitormattos vitormattos changed the title eescrita da parte de execuão de query da classe clsBancoPgSql Reescrita da parte de execuão de query da classe clsBancoPgSql Jan 2, 2019

@edersoares edersoares changed the title Reescrita da parte de execuão de query da classe clsBancoPgSql Reescrita da parte de execução de query da classe clsBancoPgSql Jan 3, 2019

@edersoares edersoares added the needs-qa label Jan 7, 2019

@edersoares
Copy link
Member

edersoares left a comment

Dei algumas sugestões para simplificarmos um pouco mais a utilização do provider DatabaseServiceProvider com o intuito de removermos ele futuramente em prol de trabalharmos com migrations e transações nos testes automatizados, assim não dependeremos do conteúdo do banco.

Ficou ótimo o mock do banco.

Vamos testar internamente as modificações para analisar possíveis impactos.

@@ -173,6 +172,7 @@
App\Providers\EventServiceProvider::class,
// App\Providers\TelescopeServiceProvider::class,
App\Providers\RouteServiceProvider::class,
iEducar\Providers\Postgres\DatabaseServiceProvider::class,

This comment has been minimized.

@edersoares

edersoares Jan 7, 2019

Member

Este arquivo pode ser revertido, podemos simplificar a extensibilidade do DatabaseServiceProvider.

Show resolved Hide resolved src/Providers/Postgres/DatabaseServiceProvider.php Outdated
use Illuminate\Database\DatabaseServiceProvider as ParentDatabaseServiceProvider;
use Illuminate\Database\Connectors\PostgresConnector;
class DatabaseServiceProvider extends ParentDatabaseServiceProvider

This comment has been minimized.

@edersoares

edersoares Jan 7, 2019

Member

Podemos criar um novo DatabaseServiceProvider fazendo o extends nele, sem alterar o default do Laravel.

<?php

namespace App\Providers;

use App\Support\Database\PostgresConnection;
use Illuminate\Database\Connectors\PostgresConnector;
use Illuminate\Support\ServiceProvider;

class DatabaseServiceProvider extends ServiceProvider
{
    /**
     * Register the service provider.
     *
     * @return void
     */
    public function register()
    {
        $this->app['db']->extend('pgsql', function($config) {
            $connector =  new PostgresConnector();

            $pdo = $connector->connect($config);

            return new PostgresConnection($pdo, $config['database'], $config['prefix']);
        });
    }
}

E adicionamos ao AppServiceProvider::register() o registro deste provider:

$this->app->register(DatabaseServiceProvider::class);

This comment has been minimized.

@vitormattos

vitormattos Jan 16, 2019

Contributor

Extendendo ServiceProvider e não ParentDatabaseServiceProvider dá erro por conta da inexistência da classe db

@@ -0,0 +1,30 @@
<?php
namespace iEducar\Providers\Postgres;

This comment has been minimized.

@edersoares

edersoares Jan 7, 2019

Member

Criar a pasta e mover para app/Support/Database, fazer os ajustes onde é utilizada.

This comment has been minimized.

@vitormattos

vitormattos Jan 16, 2019

Contributor

Não captei, no outro comentário sugeriu mover para app/Providers

Show resolved Hide resolved tests/SuiteTestCase/ApiTestCase.php
Show resolved Hide resolved tests/SuiteTestCase/ApiTestCase.php
Show resolved Hide resolved ieducar/intranet/include/clsBancoPgSql.inc.php Outdated
Show resolved Hide resolved ieducar/intranet/include/clsBancoPgSql.inc.php Outdated
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment