Skip to content

Commit fdad08a

Browse files
authored
Merge pull request #143 from nicklaw5/v7.0.1
Finish Endpoint and Testing Coverage
2 parents 41c1f59 + 4ff5852 commit fdad08a

10 files changed

+246
-6
lines changed

spec/TwitchApi/Resources/BitsApiSpec.php

+12
Original file line numberDiff line numberDiff line change
@@ -51,4 +51,16 @@ function it_should_extension_transactions_with_after(RequestGenerator $requestGe
5151
$requestGenerator->generate('GET', 'extensions/transactions', 'TEST_TOKEN', [['key' => 'extension_id', 'value' => '1'], ['key' => 'after', 'value' => '100']], [])->willReturn($request);
5252
$this->getExtensionTransactions('TEST_TOKEN', '1', [], null, 100)->shouldBe($response);
5353
}
54+
55+
function it_should_get_bits_leaderboard(RequestGenerator $requestGenerator, Request $request, Response $response)
56+
{
57+
$requestGenerator->generate('GET', 'bits/leaderboard', 'TEST_TOKEN', [], [])->willReturn($request);
58+
$this->getBitsLeaderboard('TEST_TOKEN')->shouldBe($response);
59+
}
60+
61+
function it_should_get_bits_leaderboard_with_opts(RequestGenerator $requestGenerator, Request $request, Response $response)
62+
{
63+
$requestGenerator->generate('GET', 'bits/leaderboard', 'TEST_TOKEN', [['key' => 'count', 'value' => '100'], ['key' => 'period', 'value' => 'all'], ['key' => 'started_at', 'value' => '2019-10-12T07:20:50.52Z'], ['key' => 'user_id', 'value' => '123']], [])->willReturn($request);
64+
$this->getBitsLeaderboard('TEST_TOKEN', 100, 'all', '2019-10-12T07:20:50.52Z', '123')->shouldBe($response);
65+
}
5466
}
+78
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,78 @@
1+
<?php
2+
3+
namespace spec\TwitchApi\Resources;
4+
5+
use GuzzleHttp\Psr7\Request;
6+
use GuzzleHttp\Psr7\Response;
7+
use TwitchApi\RequestGenerator;
8+
use TwitchApi\HelixGuzzleClient;
9+
use PhpSpec\ObjectBehavior;
10+
11+
class ClipsApiSpec extends ObjectBehavior
12+
{
13+
function let(HelixGuzzleClient $guzzleClient, RequestGenerator $requestGenerator, Request $request, Response $response)
14+
{
15+
$this->beConstructedWith($guzzleClient, $requestGenerator);
16+
$guzzleClient->send($request)->willReturn($response);
17+
}
18+
19+
function it_should_get_clips_by_broadcaster_id(RequestGenerator $requestGenerator, Request $request, Response $response)
20+
{
21+
$requestGenerator->generate('GET', 'clips', 'TEST_TOKEN', [['key' => 'broadcaster_id', 'value' => '123']], [])->willReturn($request);
22+
$this->getClips('TEST_TOKEN', '123')->shouldBe($response);
23+
}
24+
25+
function it_should_get_clips_by_broadcaster_id_with_helper_function(RequestGenerator $requestGenerator, Request $request, Response $response)
26+
{
27+
$requestGenerator->generate('GET', 'clips', 'TEST_TOKEN', [['key' => 'broadcaster_id', 'value' => '123']], [])->willReturn($request);
28+
$this->getClipsByBroadcasterId('TEST_TOKEN', '123')->shouldBe($response);
29+
}
30+
31+
function it_should_get_clips_by_game_id(RequestGenerator $requestGenerator, Request $request, Response $response)
32+
{
33+
$requestGenerator->generate('GET', 'clips', 'TEST_TOKEN', [['key' => 'game_id', 'value' => '123']], [])->willReturn($request);
34+
$this->getClips('TEST_TOKEN', null, '123')->shouldBe($response);
35+
}
36+
37+
function it_should_get_clips_by_game_id_with_helper_function(RequestGenerator $requestGenerator, Request $request, Response $response)
38+
{
39+
$requestGenerator->generate('GET', 'clips', 'TEST_TOKEN', [['key' => 'game_id', 'value' => '123']], [])->willReturn($request);
40+
$this->getClipsByGameId('TEST_TOKEN', '123')->shouldBe($response);
41+
}
42+
43+
function it_should_get_one_clip_by_id(RequestGenerator $requestGenerator, Request $request, Response $response)
44+
{
45+
$requestGenerator->generate('GET', 'clips', 'TEST_TOKEN', [['key' => 'id', 'value' => '123']], [])->willReturn($request);
46+
$this->getClips('TEST_TOKEN', null, null, '123')->shouldBe($response);
47+
}
48+
49+
function it_should_get_one_clip_by_id_with_helper_function(RequestGenerator $requestGenerator, Request $request, Response $response)
50+
{
51+
$requestGenerator->generate('GET', 'clips', 'TEST_TOKEN', [['key' => 'id', 'value' => '123']], [])->willReturn($request);
52+
$this->getClipsByIds('TEST_TOKEN', '123')->shouldBe($response);
53+
}
54+
55+
function it_should_get_multiple_clips_by_id(RequestGenerator $requestGenerator, Request $request, Response $response)
56+
{
57+
$requestGenerator->generate('GET', 'clips', 'TEST_TOKEN', [['key' => 'id', 'value' => '123,456']], [])->willReturn($request);
58+
$this->getClips('TEST_TOKEN', null, null, '123,456')->shouldBe($response);
59+
}
60+
61+
function it_should_get_multiple_clips_by_id_with_helper_function(RequestGenerator $requestGenerator, Request $request, Response $response)
62+
{
63+
$requestGenerator->generate('GET', 'clips', 'TEST_TOKEN', [['key' => 'id', 'value' => '123,456']], [])->willReturn($request);
64+
$this->getClipsByIds('TEST_TOKEN', '123,456')->shouldBe($response);
65+
}
66+
67+
function it_should_get_clips_with_opts(RequestGenerator $requestGenerator, Request $request, Response $response)
68+
{
69+
$requestGenerator->generate('GET', 'clips', 'TEST_TOKEN', [['key' => 'broadcaster_id', 'value' => '123'], ['key' => 'first', 'value' => '10'], ['key' => 'before', 'value' => 'abc'], ['key' => 'after', 'value' => 'def'], ['key' => 'started_at', 'value' => '2018-10-12T07:20:50.52Z'], ['key' => 'ended_at', 'value' => '2019-10-12T07:20:50.52Z']], [])->willReturn($request);
70+
$this->getClips('TEST_TOKEN', '123', null, null, 10, 'abc', 'def', '2018-10-12T07:20:50.52Z', '2019-10-12T07:20:50.52Z')->shouldBe($response);
71+
}
72+
73+
function it_should_create_a_clip(RequestGenerator $requestGenerator, Request $request, Response $response)
74+
{
75+
$requestGenerator->generate('POST', 'clips', 'TEST_TOKEN', [['key' => 'broadcaster_id', 'value' => '123'], ['key' => 'has_delay', 'value' => 'true']], [])->willReturn($request);
76+
$this->createClip('TEST_TOKEN', '123', true)->shouldBe($response);
77+
}
78+
}

spec/TwitchApi/Resources/EntitlementsApiSpec.php

+18
Original file line numberDiff line numberDiff line change
@@ -81,4 +81,22 @@ function it_should_redeem_codes(RequestGenerator $requestGenerator, Request $req
8181
$requestGenerator->generate('POST', 'entitlements/code', 'TEST_TOKEN', [['key' => 'user_id', 'value' => '123'], ['key' => 'code', 'value' => 'abc'], ['key' => 'code', 'value' => 'def']], [])->willReturn($request);
8282
$this->redeemCode('TEST_TOKEN', '123', ['abc', 'def'])->shouldBe($response);
8383
}
84+
85+
function it_should_update_drop_entitlements(RequestGenerator $requestGenerator, Request $request, Response $response)
86+
{
87+
$requestGenerator->generate('PATCH', 'entitlements/drops', 'TEST_TOKEN', [], [])->willReturn($request);
88+
$this->updateDropsEntitlements('TEST_TOKEN')->shouldBe($response);
89+
}
90+
91+
function it_should_update_one_drop_entitlements(RequestGenerator $requestGenerator, Request $request, Response $response)
92+
{
93+
$requestGenerator->generate('PATCH', 'entitlements/drops', 'TEST_TOKEN', [], [['key' => 'entitlement_ids', 'value' => ['123']], ['key' => 'fulfillment_status', 'value' => 'FULFILLED']])->willReturn($request);
94+
$this->updateDropsEntitlements('TEST_TOKEN', ['123'], 'FULFILLED')->shouldBe($response);
95+
}
96+
97+
function it_should_update_multiple_drop_entitlements(RequestGenerator $requestGenerator, Request $request, Response $response)
98+
{
99+
$requestGenerator->generate('PATCH', 'entitlements/drops', 'TEST_TOKEN', [], [['key' => 'entitlement_ids', 'value' => ['123', '456']], ['key' => 'fulfillment_status', 'value' => 'FULFILLED']])->willReturn($request);
100+
$this->updateDropsEntitlements('TEST_TOKEN', ['123', '456'], 'FULFILLED')->shouldBe($response);
101+
}
84102
}

spec/TwitchApi/Resources/EventSubApiSpec.php

+12
Original file line numberDiff line numberDiff line change
@@ -288,4 +288,16 @@ function it_should_subscribe_to_channel_goal_end(RequestGenerator $requestGenera
288288
$this->createEventSubSubscription('channel.goal.end', '1', ['broadcaster_user_id' => '12345'], $requestGenerator)->willReturn($request);
289289
$this->subscribeToChannelGoalEnd($this->bearer, $this->secret, $this->callback, '12345')->shouldBe($response);
290290
}
291+
292+
function it_should_subscribe_to_drop_entitelement_grant(RequestGenerator $requestGenerator, Request $request, Response $response)
293+
{
294+
$this->createEventSubSubscription('drop.entitlement.grant', '1', ['organization_id' => '12345'], $requestGenerator)->willReturn($request);
295+
$this->subscribeToDropEntitlementGrant($this->bearer, $this->secret, $this->callback, '12345')->shouldBe($response);
296+
}
297+
298+
function it_should_subscribe_to_drop_entitelement_grant_with_opts(RequestGenerator $requestGenerator, Request $request, Response $response)
299+
{
300+
$this->createEventSubSubscription('drop.entitlement.grant', '1', ['organization_id' => '123', 'category_id' => '456', 'campaign_id' => '789'], $requestGenerator)->willReturn($request);
301+
$this->subscribeToDropEntitlementGrant($this->bearer, $this->secret, $this->callback, '123', '456', '789')->shouldBe($response);
302+
}
291303
}

spec/TwitchApi/Resources/ModerationApiSpec.php

+24
Original file line numberDiff line numberDiff line change
@@ -147,4 +147,28 @@ function it_should_remove_vip_for_a_channel(RequestGenerator $requestGenerator,
147147
$requestGenerator->generate('DELETE', 'channels/vips', 'TEST_TOKEN', [['key' => 'broadcaster_id', 'value' => '123'], ['key' => 'user_id', 'value' => '456']], [])->willReturn($request);
148148
$this->removeChannelVip('TEST_TOKEN', '123', '456')->shouldBe($response);
149149
}
150+
151+
function it_should_get_banned_users(RequestGenerator $requestGenerator, Request $request, Response $response)
152+
{
153+
$requestGenerator->generate('GET', 'moderation/banned', 'TEST_TOKEN', [['key' => 'broadcaster_id', 'value' => '123']], [])->willReturn($request);
154+
$this->getBannedUsers('TEST_TOKEN', '123')->shouldBe($response);
155+
}
156+
157+
function it_should_get_banned_users_with_opts(RequestGenerator $requestGenerator, Request $request, Response $response)
158+
{
159+
$requestGenerator->generate('GET', 'moderation/banned', 'TEST_TOKEN', [['key' => 'broadcaster_id', 'value' => '123'], ['key' => 'user_id', 'value' => 'abc'], ['key' => 'user_id', 'value' => 'def'], ['key' => 'before', 'value' => 'abc'], ['key' => 'after', 'value' => 'def'], ['key' => 'first', 'value' => '100']], [])->willReturn($request);
160+
$this->getBannedUsers('TEST_TOKEN', '123', ['abc', 'def'], 'abc', 'def', '100')->shouldBe($response);
161+
}
162+
163+
function it_should_get_moderators(RequestGenerator $requestGenerator, Request $request, Response $response)
164+
{
165+
$requestGenerator->generate('GET', 'moderation/moderators', 'TEST_TOKEN', [['key' => 'broadcaster_id', 'value' => '123']], [])->willReturn($request);
166+
$this->getModerators('TEST_TOKEN', '123')->shouldBe($response);
167+
}
168+
169+
function it_should_get_moderators_with_opts(RequestGenerator $requestGenerator, Request $request, Response $response)
170+
{
171+
$requestGenerator->generate('GET', 'moderation/moderators', 'TEST_TOKEN', [['key' => 'broadcaster_id', 'value' => '123'], ['key' => 'user_id', 'value' => 'abc'], ['key' => 'user_id', 'value' => 'def'], ['key' => 'after', 'value' => 'abc'], ['key' => 'first', 'value' => '100']], [])->willReturn($request);
172+
$this->getModerators('TEST_TOKEN', '123', ['abc', 'def'], 'abc', '100')->shouldBe($response);
173+
}
150174
}
+42
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
<?php
2+
3+
namespace spec\TwitchApi\Resources;
4+
5+
use GuzzleHttp\Psr7\Request;
6+
use GuzzleHttp\Psr7\Response;
7+
use TwitchApi\RequestGenerator;
8+
use TwitchApi\HelixGuzzleClient;
9+
use PhpSpec\ObjectBehavior;
10+
11+
class SearchApiSpec extends ObjectBehavior
12+
{
13+
function let(HelixGuzzleClient $guzzleClient, RequestGenerator $requestGenerator, Request $request, Response $response)
14+
{
15+
$this->beConstructedWith($guzzleClient, $requestGenerator);
16+
$guzzleClient->send($request)->willReturn($response);
17+
}
18+
19+
function it_should_search_categories(RequestGenerator $requestGenerator, Request $request, Response $response)
20+
{
21+
$requestGenerator->generate('GET', 'search/categories', 'TEST_TOKEN', [['key' => 'query', 'value' => 'test']], [])->willReturn($request);
22+
$this->searchCategories('TEST_TOKEN', 'test')->shouldBe($response);
23+
}
24+
25+
function it_should_search_categories_with_opts(RequestGenerator $requestGenerator, Request $request, Response $response)
26+
{
27+
$requestGenerator->generate('GET', 'search/categories', 'TEST_TOKEN', [['key' => 'query', 'value' => 'test'], ['key' => 'first', 'value' => 100], ['key' => 'after', 'value' => 'abc']], [])->willReturn($request);
28+
$this->searchCategories('TEST_TOKEN', 'test', 100, 'abc')->shouldBe($response);
29+
}
30+
31+
function it_should_search_channels(RequestGenerator $requestGenerator, Request $request, Response $response)
32+
{
33+
$requestGenerator->generate('GET', 'search/channels', 'TEST_TOKEN', [['key' => 'query', 'value' => 'test']], [])->willReturn($request);
34+
$this->searchChannels('TEST_TOKEN', 'test')->shouldBe($response);
35+
}
36+
37+
function it_should_search_channels_with_opts(RequestGenerator $requestGenerator, Request $request, Response $response)
38+
{
39+
$requestGenerator->generate('GET', 'search/channels', 'TEST_TOKEN', [['key' => 'query', 'value' => 'test'], ['key' => 'live_only', 'value' => true], ['key' => 'first', 'value' => 100], ['key' => 'after', 'value' => 'abc']], [])->willReturn($request);
40+
$this->searchChannels('TEST_TOKEN', 'test', true, 100, 'abc')->shouldBe($response);
41+
}
42+
}

spec/TwitchApi/TwitchApiSpec.php

+20-2
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@
1010
use TwitchApi\Resources\BitsApi;
1111
use TwitchApi\Resources\ChannelPointsApi;
1212
use TwitchApi\Resources\ChannelsApi;
13+
use TwitchApi\Resources\ChatApi;
14+
use TwitchApi\Resources\ClipsApi;
1315
use TwitchApi\Resources\EntitlementsApi;
1416
use TwitchApi\Resources\EventSubApi;
1517
use TwitchApi\Resources\GamesApi;
@@ -19,6 +21,7 @@
1921
use TwitchApi\Resources\PredictionsApi;
2022
use TwitchApi\Resources\RaidsApi;
2123
use TwitchApi\Resources\ScheduleApi;
24+
use TwitchApi\Resources\SearchApi;
2225
use TwitchApi\Resources\StreamsApi;
2326
use TwitchApi\Resources\SubscriptionsApi;
2427
use TwitchApi\Resources\TagsApi;
@@ -67,6 +70,16 @@ function it_should_provide_channels_api()
6770
$this->getChannelsApi()->shouldBeAnInstanceOf(ChannelsApi::class);
6871
}
6972

73+
function it_should_provide_chat_api()
74+
{
75+
$this->getChatApi()->shouldBeAnInstanceOf(ChatApi::class);
76+
}
77+
78+
function it_should_provide_clips_api()
79+
{
80+
$this->getClipsApi()->shouldBeAnInstanceOf(ClipsApi::class);
81+
}
82+
7083
function it_should_provide_entitlements_api()
7184
{
7285
$this->getEntitlementsApi()->shouldBeAnInstanceOf(EntitlementsApi::class);
@@ -111,16 +124,21 @@ function it_should_provide_schedule_api()
111124
$this->getScheduleApi()->shouldBeAnInstanceOf(ScheduleApi::class);
112125
}
113126

114-
function it_should_provide_subscriptions_api()
127+
function it_should_provide_search_api()
115128
{
116-
$this->getSubscriptionsApi()->shouldBeAnInstanceOf(SubscriptionsApi::class);
129+
$this->getSearchApi()->shouldBeAnInstanceOf(SearchApi::class);
117130
}
118131

119132
function it_should_provide_streams_api()
120133
{
121134
$this->getStreamsApi()->shouldBeAnInstanceOf(StreamsApi::class);
122135
}
123136

137+
function it_should_provide_subscriptions_api()
138+
{
139+
$this->getSubscriptionsApi()->shouldBeAnInstanceOf(SubscriptionsApi::class);
140+
}
141+
124142
function it_should_provide_tags_api()
125143
{
126144
$this->getTagsApi()->shouldBeAnInstanceOf(TagsApi::class);

src/Resources/EntitlementsApi.php

+7-2
Original file line numberDiff line numberDiff line change
@@ -78,8 +78,13 @@ public function updateDropsEntitlements(string $bearer, array $entitlement_ids =
7878
{
7979
$bodyParamsMap = [];
8080

81-
$bodyParamsMap[] = ['key' => 'entitlement_ids', 'value' => $entitlement_ids];
82-
$bodyParamsMap[] = ['key' => 'fulfillment_status', 'value' => $fulfillment_status];
81+
if ($entitlement_ids) {
82+
$bodyParamsMap[] = ['key' => 'entitlement_ids', 'value' => $entitlement_ids];
83+
}
84+
85+
if ($fulfillment_status) {
86+
$bodyParamsMap[] = ['key' => 'fulfillment_status', 'value' => $fulfillment_status];
87+
}
8388

8489
return $this->patchApi('entitlements/drops', $bearer, [], $bodyParamsMap);
8590
}

src/Resources/EventSubApi.php

+23
Original file line numberDiff line numberDiff line change
@@ -443,6 +443,29 @@ public function subscribeToChannelGoalEnd(string $bearer, string $secret, string
443443
return $this->subscribeToChannelGoal($bearer, $secret, $callback, $twitchId, 'end');
444444
}
445445

446+
/**
447+
* @link https://dev.twitch.tv/docs/eventsub/eventsub-subscription-types/#dropentitlementgrant
448+
*/
449+
public function subscribeToDropEntitlementGrant(string $bearer, string $secret, string $callback, string $organizationId, string $categoryId = null, string $campaign_id = null): ResponseInterface
450+
{
451+
$condition = ['organization_id' => $organizationId];
452+
if ($categoryId) {
453+
$condition['category_id'] = $categoryId;
454+
}
455+
if ($campaign_id) {
456+
$condition['campaign_id'] = $campaign_id;
457+
}
458+
459+
return $this->createEventSubSubscription(
460+
$bearer,
461+
$secret,
462+
$callback,
463+
'drop.entitlement.grant',
464+
'1',
465+
$condition,
466+
);
467+
}
468+
446469
/**
447470
* @link https://dev.twitch.tv/docs/eventsub#verify-a-signature
448471
*/

src/Resources/ModerationApi.php

+10-2
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ class ModerationApi extends AbstractResource
1313
* @throws GuzzleException
1414
* @link https://dev.twitch.tv/docs/api/reference/#get-banned-users
1515
*/
16-
public function getBannedUsers(string $bearer, string $broadcasterId, array $ids = [], string $before = null, string $after = null): ResponseInterface
16+
public function getBannedUsers(string $bearer, string $broadcasterId, array $ids = [], string $before = null, string $after = null, string $first = null): ResponseInterface
1717
{
1818
$queryParamsMap = [];
1919

@@ -31,14 +31,18 @@ public function getBannedUsers(string $bearer, string $broadcasterId, array $ids
3131
$queryParamsMap[] = ['key' => 'after', 'value' => $after];
3232
}
3333

34+
if ($first) {
35+
$queryParamsMap[] = ['key' => 'first', 'value' => $first];
36+
}
37+
3438
return $this->getApi('moderation/banned', $bearer, $queryParamsMap);
3539
}
3640

3741
/**
3842
* @throws GuzzleException
3943
* @link https://dev.twitch.tv/docs/api/reference/#get-moderators
4044
*/
41-
public function getModerators(string $bearer, string $broadcasterId, array $ids = [], string $after = null): ResponseInterface
45+
public function getModerators(string $bearer, string $broadcasterId, array $ids = [], string $after = null, string $first = null): ResponseInterface
4246
{
4347
$queryParamsMap = [];
4448

@@ -52,6 +56,10 @@ public function getModerators(string $bearer, string $broadcasterId, array $ids
5256
$queryParamsMap[] = ['key' => 'after', 'value' => $after];
5357
}
5458

59+
if ($first) {
60+
$queryParamsMap[] = ['key' => 'first', 'value' => $first];
61+
}
62+
5563
return $this->getApi('moderation/moderators', $bearer, $queryParamsMap);
5664
}
5765

0 commit comments

Comments
 (0)