Skip to content

Commit 22c3f0e

Browse files
authored
Merge pull request #5 from marciodojr/dev
Remove o php-di, valida o método __get e adiciona testes
2 parents 584794c + 9577cb8 commit 22c3f0e

3 files changed

Lines changed: 101 additions & 16 deletions

File tree

composer.json

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,8 +29,7 @@
2929
"Central"
3030
],
3131
"require": {
32-
"php" : ">=5.6",
33-
"php-di/php-di": "5.4.3"
32+
"php" : ">=5.6"
3433
},
3534
"require-dev": {
3635
"phpunit/phpunit": "5.5.*"

src/Client.php

Lines changed: 36 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,20 @@
33

44
use TotalVoice\Handler\Curl;
55
use TotalVoice\Handler\Http;
6-
use DI\ContainerBuilder;
7-
use DI\NotFoundException;
6+
use TotalVoice\Api\Audio;
7+
use TotalVoice\Api\Bina;
8+
use TotalVoice\Api\Central;
9+
use TotalVoice\Api\Chamada;
10+
use TotalVoice\Api\Composto;
11+
use TotalVoice\Api\Conferencia;
12+
use TotalVoice\Api\Conta;
13+
use TotalVoice\Api\Did;
14+
use TotalVoice\Api\Fila;
15+
use TotalVoice\Api\Perfil;
16+
use TotalVoice\Api\Sms;
17+
use TotalVoice\Api\Status;
18+
use TotalVoice\Api\Tts;
19+
use TotalVoice\Api\Verificacao;
820

921
class Client implements ClientInterface
1022
{
@@ -14,9 +26,24 @@ class Client implements ClientInterface
1426
const BASE_URI = 'https://api2.totalvoice.com.br';
1527

1628
/**
17-
* @var string
29+
* @var array Items disponíveis para criação via __get
1830
*/
19-
const NAMESPACE_API = 'TotalVoice\\Api\\';
31+
const API_ITEMS = [
32+
'audio' => Audio::class,
33+
'bina' => Bina::class,
34+
'central' => Central::class,
35+
'chamada' => Chamada::class,
36+
'composto' => Composto::class,
37+
'conferencia' => Conferencia::class,
38+
'conta' => Conta::class,
39+
'did' => Did::class,
40+
'fila' => Fila::class,
41+
'perfil' => Perfil::class,
42+
'sms' => Sms::class,
43+
'status' => Status::class,
44+
'tts' => Tts::class,
45+
'verificacao' => Verificacao::class,
46+
];
2047

2148
/**
2249
* @var string
@@ -132,17 +159,12 @@ public function query($params)
132159
* @return mixed
133160
* @throws ClientException
134161
*/
135-
public function __get($name)
162+
public function __get($name)
136163
{
137-
try {
138-
$builder = new ContainerBuilder();
139-
$container = $builder->build();
140-
141-
$class = static::NAMESPACE_API . ucwords($name);
142-
return $container->make($class, ['client' => $this]);
143-
144-
} catch(NotFoundException $e) {
145-
throw new ClientException(sprintf('Não foi possível instanciar a classe: %s', $class));
164+
if(!array_key_exists(strtolower($name), static::API_ITEMS)) {
165+
throw new ClientException(sprintf('Não foi possível instanciar a classe: %s', $name));
146166
}
167+
$class = static::API_ITEMS[$name];
168+
return new $class($this);
147169
}
148170
}

test/ClientTest.php

Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,23 @@
22
namespace TotalVoice;
33

44
use TotalVoice\Handler\Http;
5+
use TotalVoice\Api\Api;
6+
use TotalVoice\Api\ApiRelatorio;
7+
use TotalVoice\Api\ApiRelatorioChamadas;
8+
use TotalVoice\Api\Audio;
9+
use TotalVoice\Api\Bina;
10+
use TotalVoice\Api\Central;
11+
use TotalVoice\Api\Chamada;
12+
use TotalVoice\Api\Composto;
13+
use TotalVoice\Api\Conferencia;
14+
use TotalVoice\Api\Conta;
15+
use TotalVoice\Api\Did;
16+
use TotalVoice\Api\Fila;
17+
use TotalVoice\Api\Perfil;
18+
use TotalVoice\Api\Sms;
19+
use TotalVoice\Api\Status;
20+
use TotalVoice\Api\Tts;
21+
use TotalVoice\Api\Verificacao;
522

623
class ClientTest extends \PHPUnit_Framework_TestCase
724
{
@@ -45,4 +62,51 @@ public function queryTest()
4562
$query = $this->client->query(['query' => 'string']);
4663
$this->assertEquals("?query=string", $query);
4764
}
65+
66+
/**
67+
* @test
68+
*/
69+
public function apiInstancesTest()
70+
{
71+
$audio = $this->client->audio;
72+
$bina = $this->client->bina;
73+
$central = $this->client->central;
74+
$chamada = $this->client->chamada;
75+
$composto = $this->client->composto;
76+
$conferencia = $this->client->conferencia;
77+
$conta = $this->client->conta;
78+
$did = $this->client->did;
79+
$fila = $this->client->fila;
80+
$perfil = $this->client->perfil;
81+
$sms = $this->client->sms;
82+
$status = $this->client->status;
83+
$tts = $this->client->tts;
84+
$verificacao = $this->client->verificacao;
85+
86+
$this->assertInstanceOf(Audio::class, $audio);
87+
$this->assertInstanceOf(Bina::class, $bina);
88+
$this->assertInstanceOf(Central::class, $central);
89+
$this->assertInstanceOf(Chamada::class, $chamada);
90+
$this->assertInstanceOf(Composto::class, $composto);
91+
$this->assertInstanceOf(Conferencia::class, $conferencia);
92+
$this->assertInstanceOf(Conta::class, $conta);
93+
$this->assertInstanceOf(Did::class, $did);
94+
$this->assertInstanceOf(Fila::class, $fila);
95+
$this->assertInstanceOf(Perfil::class, $perfil);
96+
$this->assertInstanceOf(Sms::class, $sms);
97+
$this->assertInstanceOf(Status::class, $status);
98+
$this->assertInstanceOf(Tts::class, $tts);
99+
$this->assertInstanceOf(Verificacao::class, $verificacao);
100+
}
101+
102+
/**
103+
* @test
104+
*/
105+
public function apiThrowClientException()
106+
{
107+
$name = 'invalidapiitem';
108+
$this->expectException(ClientException::class);
109+
$this->expectExceptionMessage("Não foi possível instanciar a classe: $name");
110+
$this->client->$name;
111+
}
48112
}

0 commit comments

Comments
 (0)