File size: 4,041 Bytes
46252cd
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
<?php

declare(strict_types=1);

namespace OpenWA\Tests;

use PHPUnit\Framework\TestCase;

class LabelsChannelsCatalogTest extends TestCase
{
    public function testLabels(): void
    {
        $backend = new MockBackend();
        $backend->on(200, [['id' => 'l1', 'name' => 'VIP']]);
        $backend->on(200, ['id' => 'l1', 'name' => 'VIP']);
        $backend->on(200, [['id' => 'l1', 'name' => 'VIP']]);
        $backend->on(200, ['success' => true]);
        $backend->on(200, ['success' => true]);
        $client = $backend->makeClient();
        $client->labels->list('s');
        $this->assertStringContainsString('/sessions/s/labels', $backend->calls()[0]['path']);
        $client->labels->get('s', 'l1');
        $this->assertStringContainsString('/labels/l1', $backend->calls()[1]['path']);
        $client->labels->forChat('s', 'a@c.us');
        $client->labels->addToChat('s', 'a@c.us', ['labelId' => 'l1']);
        $this->assertSame('POST', $backend->calls()[3]['method']);
        $this->assertSame(['labelId' => 'l1'], $backend->calls()[3]['body']);
        $client->labels->removeFromChat('s', 'a@c.us', 'l1');
        $this->assertSame('DELETE', $backend->calls()[4]['method']);
    }

    public function testChannels(): void
    {
        $backend = new MockBackend();
        $backend->on(200, [['id' => '123@newsletter', 'name' => 'News']]);
        $backend->on(200, ['id' => '123@newsletter', 'name' => 'News']);
        $backend->on(200, []);
        $backend->on(201, ['id' => '123@newsletter', 'name' => 'News']);
        $backend->on(200, ['success' => true]);
        $client = $backend->makeClient();
        $client->channels->list('s');
        $this->assertStringContainsString('/sessions/s/channels', $backend->calls()[0]['path']);
        $client->channels->get('s', '123@newsletter');
        $client->channels->messages('s', '123@newsletter', ['limit' => 10]);
        $this->assertStringContainsString('limit=10', $backend->calls()[2]['query']);
        $client->channels->subscribe('s', ['inviteCode' => 'ABCxyz']);
        $this->assertSame('POST', $backend->calls()[3]['method']);
        $this->assertSame(['inviteCode' => 'ABCxyz'], $backend->calls()[3]['body']);
        $client->channels->unsubscribe('s', '123@newsletter');
        $this->assertSame('DELETE', $backend->calls()[4]['method']);
    }

    public function testCatalog(): void
    {
        $backend = new MockBackend();
        $backend->on(200, ['name' => 'My Shop', 'productsCount' => 5]);
        $backend->on(200, [['id' => 'p1', 'name' => 'Widget']]);
        $backend->on(200, ['id' => 'p1', 'name' => 'Widget']);
        $backend->on(201, ['messageId' => 'm', 'timestamp' => 1]);
        $backend->on(201, ['messageId' => 'm', 'timestamp' => 1]);
        $client = $backend->makeClient();
        $client->catalog->info('s');
        $this->assertStringContainsString('/sessions/s/catalog', $backend->calls()[0]['path']);
        $client->catalog->products('s', ['page' => 1, 'limit' => 20]);
        $this->assertStringContainsString('page=1', $backend->calls()[1]['query']);
        $client->catalog->product('s', 'p1');
        $client->catalog->sendProduct('s', ['chatId' => 'a@c.us', 'productId' => 'p1', 'body' => 'x']);
        $this->assertStringContainsString('/messages/send-product', $backend->calls()[3]['path']);
        $this->assertSame(['chatId' => 'a@c.us', 'productId' => 'p1', 'body' => 'x'], $backend->calls()[3]['body']);
        $client->catalog->sendCatalog('s', ['chatId' => 'a@c.us', 'body' => 'cat']);
        $this->assertStringContainsString('/messages/send-catalog', $backend->calls()[4]['path']);
    }

    public function testClientExposesAll11Resources(): void
    {
        $client = (new MockBackend())->makeClient();
        foreach (['sessions', 'messages', 'contacts', 'groups', 'webhooks', 'chats', 'status', 'health', 'labels', 'channels', 'catalog'] as $r) {
            $this->assertTrue(property_exists($client, $r), "Client should expose resource: {$r}");
        }
    }
}