| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753 |
- <?php
- namespace Webkul\BagistoApi\Tests\Feature\GraphQL;
- use Webkul\BagistoApi\Tests\GraphQLTestCase;
- class ChannelTest extends GraphQLTestCase
- {
- /**
- * Get Channels - Basic
- */
- public function test_get_channels_basic(): void
- {
- $query = <<<'GQL'
- query getChannels {
- channels {
- edges {
- node {
- id
- _id
- code
- hostname
- timezone
- }
- }
- pageInfo {
- hasNextPage
- endCursor
- }
- }
- }
- GQL;
- $response = $this->graphQL($query);
- $response->assertSuccessful();
- $data = $response->json('data.channels');
- $this->assertNotNull($data, 'channels response is null');
- $this->assertIsArray($data['edges'] ?? [], 'channels.edges is not an array');
- $this->assertArrayHasKey('pageInfo', $data);
- $this->assertArrayHasKey('hasNextPage', $data['pageInfo']);
- $this->assertArrayHasKey('endCursor', $data['pageInfo']);
- if (! empty($data['edges'])) {
- $first = $data['edges'][0]['node'] ?? null;
- $this->assertNotNull($first, 'first channel node is null');
- $this->assertArrayHasKey('id', $first);
- $this->assertArrayHasKey('_id', $first);
- $this->assertArrayHasKey('code', $first);
- $this->assertArrayHasKey('hostname', $first);
- $this->assertArrayHasKey('timezone', $first);
- }
- }
- /**
- * Get Channels - Complete Details
- */
- public function test_get_channels_complete_details(): void
- {
- $query = <<<'GQL'
- query getChannels {
- channels {
- edges {
- node {
- id
- _id
- code
- timezone
- theme
- hostname
- logo
- favicon
- isMaintenanceOn
- allowedIps
- createdAt
- updatedAt
- logoUrl
- faviconUrl
- translation {
- id
- _id
- channelId
- locale
- name
- description
- maintenanceModeText
- createdAt
- updatedAt
- }
- translations {
- edges {
- node {
- id
- _id
- channelId
- locale
- name
- description
- maintenanceModeText
- createdAt
- updatedAt
- }
- cursor
- }
- pageInfo {
- endCursor
- startCursor
- hasNextPage
- hasPreviousPage
- }
- totalCount
- }
- }
- cursor
- }
- pageInfo {
- endCursor
- startCursor
- hasNextPage
- hasPreviousPage
- }
- totalCount
- }
- }
- GQL;
- $response = $this->graphQL($query);
- $response->assertSuccessful();
- $data = $response->json('data.channels');
- $this->assertNotNull($data, 'channels response is null');
- $this->assertIsArray($data['edges'] ?? [], 'channels.edges is not an array');
- $this->assertArrayHasKey('pageInfo', $data);
- $this->assertArrayHasKey('totalCount', $data);
- // pageInfo expected keys
- $this->assertArrayHasKey('endCursor', $data['pageInfo']);
- $this->assertArrayHasKey('startCursor', $data['pageInfo']);
- $this->assertArrayHasKey('hasNextPage', $data['pageInfo']);
- $this->assertArrayHasKey('hasPreviousPage', $data['pageInfo']);
- if (! empty($data['edges'])) {
- foreach ($data['edges'] as $edge) {
- $node = $edge['node'] ?? null;
- $this->assertNotNull($node, 'edge.node is null');
- $this->assertArrayHasKey('id', $node);
- $this->assertArrayHasKey('_id', $node);
- $this->assertArrayHasKey('code', $node);
- $this->assertArrayHasKey('timezone', $node);
- $this->assertArrayHasKey('theme', $node);
- $this->assertArrayHasKey('hostname', $node);
- $this->assertArrayHasKey('logo', $node);
- $this->assertArrayHasKey('favicon', $node);
- $this->assertArrayHasKey('isMaintenanceOn', $node);
- $this->assertArrayHasKey('allowedIps', $node);
- $this->assertArrayHasKey('createdAt', $node);
- $this->assertArrayHasKey('updatedAt', $node);
- $this->assertArrayHasKey('logoUrl', $node);
- $this->assertArrayHasKey('faviconUrl', $node);
- $this->assertArrayHasKey('translation', $node);
- $this->assertArrayHasKey('translations', $node);
- $this->assertIsArray($node['translations']['edges'] ?? []);
- $this->assertArrayHasKey('pageInfo', $node['translations']);
- $this->assertArrayHasKey('totalCount', $node['translations']);
- foreach ($node['translations']['edges'] ?? [] as $tEdge) {
- $t = $tEdge['node'] ?? null;
- $this->assertNotNull($t, 'translation node is null');
- $this->assertArrayHasKey('id', $t);
- $this->assertArrayHasKey('_id', $t);
- $this->assertArrayHasKey('channelId', $t);
- $this->assertArrayHasKey('locale', $t);
- $this->assertArrayHasKey('name', $t);
- $this->assertArrayHasKey('description', $t);
- }
- }
- }
- }
- /**
- * Get Channels with Pagination
- */
- public function test_get_channels_pagination_basic(): void
- {
- $query = <<<'GQL'
- query getChannels($first: Int, $after: String) {
- channels(first: $first, after: $after) {
- edges {
- node {
- id
- _id
- code
- hostname
- translation {
- name
- description
- }
- logoUrl
- }
- cursor
- }
- pageInfo {
- endCursor
- startCursor
- hasNextPage
- hasPreviousPage
- }
- totalCount
- }
- }
- GQL;
- $variables = ['first' => 10, 'after' => null];
- $response = $this->graphQL($query, $variables);
- $response->assertSuccessful();
- $data = $response->json('data.channels');
- $this->assertNotNull($data, 'channels response is null');
- $this->assertIsArray($data['edges'] ?? [], 'channels.edges is not an array');
- $this->assertArrayHasKey('pageInfo', $data);
- $this->assertArrayHasKey('totalCount', $data);
- $this->assertArrayHasKey('endCursor', $data['pageInfo']);
- $this->assertArrayHasKey('startCursor', $data['pageInfo']);
- $this->assertArrayHasKey('hasNextPage', $data['pageInfo']);
- $this->assertArrayHasKey('hasPreviousPage', $data['pageInfo']);
- if (! empty($data['edges'])) {
- $firstEdge = $data['edges'][0] ?? null;
- $this->assertNotNull($firstEdge, 'first edge is null');
- $this->assertArrayHasKey('node', $firstEdge);
- $this->assertArrayHasKey('cursor', $firstEdge);
- $node = $firstEdge['node'] ?? null;
- $this->assertNotNull($node, 'edge.node is null');
- $this->assertArrayHasKey('id', $node);
- $this->assertArrayHasKey('_id', $node);
- $this->assertArrayHasKey('code', $node);
- $this->assertArrayHasKey('hostname', $node);
- $this->assertArrayHasKey('translation', $node);
- $this->assertArrayHasKey('logoUrl', $node);
- $trans = $node['translation'] ?? null;
- if ($trans) {
- $this->assertArrayHasKey('name', $trans);
- $this->assertArrayHasKey('description', $trans);
- }
- }
- }
- /**
- * Get Channels with All Translations
- */
- public function test_get_channels_all_translations_basic(): void
- {
- $query = <<<'GQL'
- query getChannels {
- channels {
- edges {
- node {
- id
- _id
- code
- hostname
- timezone
- translations {
- edges {
- node {
- id
- locale
- name
- description
- maintenanceModeText
- }
- }
- totalCount
- }
- }
- }
- totalCount
- }
- }
- GQL;
- $response = $this->graphQL($query);
- $response->assertSuccessful();
- $data = $response->json('data.channels');
- $this->assertNotNull($data, 'channels response is null');
- $this->assertIsArray($data['edges'] ?? [], 'channels.edges is not an array');
- $this->assertArrayHasKey('totalCount', $data);
- if (! empty($data['edges'])) {
- foreach ($data['edges'] as $edge) {
- $node = $edge['node'] ?? null;
- $this->assertNotNull($node, 'edge.node is null');
- $this->assertArrayHasKey('id', $node);
- $this->assertArrayHasKey('_id', $node);
- $this->assertArrayHasKey('code', $node);
- $this->assertArrayHasKey('hostname', $node);
- $this->assertArrayHasKey('timezone', $node);
- $this->assertArrayHasKey('translations', $node);
- $this->assertIsArray($node['translations']['edges'] ?? []);
- $this->assertArrayHasKey('totalCount', $node['translations']);
- foreach ($node['translations']['edges'] ?? [] as $tEdge) {
- $t = $tEdge['node'] ?? null;
- $this->assertNotNull($t, 'translation node is null');
- $this->assertArrayHasKey('id', $t);
- $this->assertArrayHasKey('locale', $t);
- $this->assertArrayHasKey('name', $t);
- $this->assertArrayHasKey('description', $t);
- $this->assertArrayHasKey('maintenanceModeText', $t);
- }
- }
- }
- }
- /**
- * Get Channels with Maintenance Mode Info
- */
- public function test_get_channels_maintenance_mode_info(): void
- {
- $query = <<<'GQL'
- query getChannels {
- channels {
- edges {
- node {
- id
- _id
- code
- hostname
- isMaintenanceOn
- allowedIps
- translation {
- name
- maintenanceModeText
- }
- }
- }
- totalCount
- }
- }
- GQL;
- $response = $this->graphQL($query);
- $response->assertSuccessful();
- $data = $response->json('data.channels');
- $this->assertNotNull($data, 'channels response is null');
- $this->assertIsArray($data['edges'] ?? [], 'channels.edges is not an array');
- $this->assertArrayHasKey('totalCount', $data);
- if (! empty($data['edges'])) {
- foreach ($data['edges'] as $edge) {
- $node = $edge['node'] ?? null;
- $this->assertNotNull($node, 'edge.node is null');
- $this->assertArrayHasKey('id', $node);
- $this->assertArrayHasKey('_id', $node);
- $this->assertArrayHasKey('code', $node);
- $this->assertArrayHasKey('hostname', $node);
- $this->assertArrayHasKey('isMaintenanceOn', $node);
- $this->assertArrayHasKey('allowedIps', $node);
- $this->assertArrayHasKey('translation', $node);
- $trans = $node['translation'] ?? null;
- if ($trans) {
- $this->assertArrayHasKey('name', $trans);
- $this->assertArrayHasKey('maintenanceModeText', $trans);
- }
- }
- }
- }
- /**
- * Get Channel By ID - Basic
- */
- public function test_get_channel_by_id_basic(): void
- {
- $query = <<<'GQL'
- query getChannelByID($id: ID!) {
- channel(id: $id) {
- id
- _id
- code
- hostname
- timezone
- }
- }
- GQL;
- $variables = ['id' => '/api/shop/channels/1'];
- $response = $this->graphQL($query, $variables);
- $response->assertSuccessful();
- $node = $response->json('data.channel');
- $this->assertNotNull($node, 'channel response is null');
- $this->assertArrayHasKey('id', $node);
- $this->assertArrayHasKey('_id', $node);
- $this->assertArrayHasKey('code', $node);
- $this->assertArrayHasKey('hostname', $node);
- $this->assertArrayHasKey('timezone', $node);
- }
- /**
- * Get Channel Complete Details
- */
- public function test_get_channel_complete_details(): void
- {
- $query = <<<'GQL'
- query getChannelByID($id: ID!) {
- channel(id: $id) {
- id
- _id
- code
- timezone
- theme
- hostname
- logo
- favicon
- isMaintenanceOn
- allowedIps
- createdAt
- updatedAt
- logoUrl
- faviconUrl
- translation {
- id
- _id
- channelId
- locale
- name
- description
- maintenanceModeText
- createdAt
- updatedAt
- }
- translations {
- edges {
- node {
- id
- _id
- channelId
- locale
- name
- description
- maintenanceModeText
- createdAt
- updatedAt
- }
- cursor
- }
- pageInfo {
- endCursor
- startCursor
- hasNextPage
- hasPreviousPage
- }
- totalCount
- }
- }
- }
- GQL;
- $variables = ['id' => '/api/shop/channels/1'];
- $response = $this->graphQL($query, $variables);
- $response->assertSuccessful();
- $node = $response->json('data.channel');
- $this->assertNotNull($node, 'channel response is null');
- $this->assertArrayHasKey('id', $node);
- $this->assertArrayHasKey('_id', $node);
- $this->assertArrayHasKey('code', $node);
- $this->assertArrayHasKey('timezone', $node);
- $this->assertArrayHasKey('theme', $node);
- $this->assertArrayHasKey('hostname', $node);
- $this->assertArrayHasKey('logo', $node);
- $this->assertArrayHasKey('favicon', $node);
- $this->assertArrayHasKey('isMaintenanceOn', $node);
- $this->assertArrayHasKey('allowedIps', $node);
- $this->assertArrayHasKey('createdAt', $node);
- $this->assertArrayHasKey('updatedAt', $node);
- $this->assertArrayHasKey('logoUrl', $node);
- $this->assertArrayHasKey('faviconUrl', $node);
- // Verify translation (singular)
- $this->assertArrayHasKey('translation', $node);
- $translation = $node['translation'];
- if ($translation) {
- $this->assertArrayHasKey('id', $translation);
- $this->assertArrayHasKey('_id', $translation);
- $this->assertArrayHasKey('channelId', $translation);
- $this->assertArrayHasKey('locale', $translation);
- $this->assertArrayHasKey('name', $translation);
- $this->assertArrayHasKey('description', $translation);
- $this->assertArrayHasKey('maintenanceModeText', $translation);
- $this->assertArrayHasKey('createdAt', $translation);
- $this->assertArrayHasKey('updatedAt', $translation);
- }
- // Verify translations (plural - paginated)
- $this->assertArrayHasKey('translations', $node);
- $translations = $node['translations'];
- $this->assertIsArray($translations['edges'] ?? []);
- $this->assertArrayHasKey('pageInfo', $translations);
- $this->assertArrayHasKey('totalCount', $translations);
- // pageInfo assertions
- $this->assertArrayHasKey('endCursor', $translations['pageInfo']);
- $this->assertArrayHasKey('startCursor', $translations['pageInfo']);
- $this->assertArrayHasKey('hasNextPage', $translations['pageInfo']);
- $this->assertArrayHasKey('hasPreviousPage', $translations['pageInfo']);
- // Verify translation edges
- foreach ($translations['edges'] ?? [] as $edge) {
- $this->assertArrayHasKey('node', $edge);
- $this->assertArrayHasKey('cursor', $edge);
- $t = $edge['node'] ?? null;
- $this->assertNotNull($t, 'translation node is null');
- $this->assertArrayHasKey('id', $t);
- $this->assertArrayHasKey('_id', $t);
- $this->assertArrayHasKey('channelId', $t);
- $this->assertArrayHasKey('locale', $t);
- $this->assertArrayHasKey('name', $t);
- $this->assertArrayHasKey('description', $t);
- $this->assertArrayHasKey('maintenanceModeText', $t);
- $this->assertArrayHasKey('createdAt', $t);
- $this->assertArrayHasKey('updatedAt', $t);
- }
- }
- /**
- * Get Channel with Branding Assets
- */
- public function test_get_channel_with_branding_assets(): void
- {
- $query = <<<'GQL'
- query getChannelByID($id: ID!) {
- channel(id: $id) {
- id
- _id
- code
- hostname
- theme
- logo
- favicon
- logoUrl
- faviconUrl
- translation {
- name
- description
- }
- }
- }
- GQL;
- $variables = ['id' => '/api/shop/channels/1'];
- $response = $this->graphQL($query, $variables);
- $response->assertSuccessful();
- $node = $response->json('data.channel');
- $this->assertNotNull($node, 'channel response is null');
- $this->assertArrayHasKey('id', $node);
- $this->assertArrayHasKey('_id', $node);
- $this->assertArrayHasKey('code', $node);
- $this->assertArrayHasKey('hostname', $node);
- $this->assertArrayHasKey('theme', $node);
- $this->assertArrayHasKey('logo', $node);
- $this->assertArrayHasKey('favicon', $node);
- $this->assertArrayHasKey('logoUrl', $node);
- $this->assertArrayHasKey('faviconUrl', $node);
- // Verify translation
- $this->assertArrayHasKey('translation', $node);
- $translation = $node['translation'];
- if ($translation) {
- $this->assertArrayHasKey('name', $translation);
- $this->assertArrayHasKey('description', $translation);
- }
- }
- /**
- * Get Channel Maintenance Mode details
- */
- public function test_get_channel_maintenance_mode_details(): void
- {
- $query = <<<'GQL'
- query getChannelByID($id: ID!) {
- channel(id: $id) {
- id
- _id
- code
- hostname
- isMaintenanceOn
- allowedIps
- translation {
- locale
- name
- maintenanceModeText
- }
- translations {
- edges {
- node {
- locale
- maintenanceModeText
- }
- }
- totalCount
- }
- }
- }
- GQL;
- $variables = ['id' => '/api/shop/channels/1'];
- $response = $this->graphQL($query, $variables);
- $response->assertSuccessful();
- $node = $response->json('data.channel');
- $this->assertNotNull($node, 'channel response is null');
- $this->assertArrayHasKey('id', $node);
- $this->assertArrayHasKey('_id', $node);
- $this->assertArrayHasKey('code', $node);
- $this->assertArrayHasKey('hostname', $node);
- $this->assertArrayHasKey('isMaintenanceOn', $node);
- $this->assertArrayHasKey('allowedIps', $node);
- // Verify translation (singular)
- $this->assertArrayHasKey('translation', $node);
- $translation = $node['translation'];
- if ($translation) {
- $this->assertArrayHasKey('locale', $translation);
- $this->assertArrayHasKey('name', $translation);
- $this->assertArrayHasKey('maintenanceModeText', $translation);
- }
- // Verify translations (plural)
- $this->assertArrayHasKey('translations', $node);
- $translations = $node['translations'];
- $this->assertIsArray($translations['edges'] ?? []);
- $this->assertArrayHasKey('totalCount', $translations);
- // Verify translation edges
- foreach ($translations['edges'] ?? [] as $edge) {
- $t = $edge['node'] ?? null;
- $this->assertNotNull($t, 'translation node is null');
- $this->assertArrayHasKey('locale', $t);
- $this->assertArrayHasKey('maintenanceModeText', $t);
- }
- }
- /**
- * Get Channel with all Translations
- */
- public function test_get_channel_with_all_translations(): void
- {
- $query = <<<'GQL'
- query getChannelByID($id: ID!) {
- channel(id: $id) {
- id
- _id
- code
- hostname
- timezone
- translations {
- edges {
- node {
- id
- locale
- name
- description
- maintenanceModeText
- }
- cursor
- }
- pageInfo {
- hasNextPage
- endCursor
- }
- totalCount
- }
- }
- }
- GQL;
- $variables = ['id' => '/api/shop/channels/1'];
- $response = $this->graphQL($query, $variables);
- $response->assertSuccessful();
- $node = $response->json('data.channel');
- $this->assertNotNull($node, 'channel response is null');
- $this->assertArrayHasKey('id', $node);
- $this->assertArrayHasKey('_id', $node);
- $this->assertArrayHasKey('code', $node);
- $this->assertArrayHasKey('hostname', $node);
- $this->assertArrayHasKey('timezone', $node);
- // Verify translations (plural)
- $this->assertArrayHasKey('translations', $node);
- $translations = $node['translations'];
- $this->assertIsArray($translations['edges'] ?? []);
- $this->assertArrayHasKey('pageInfo', $translations);
- $this->assertArrayHasKey('totalCount', $translations);
- // pageInfo assertions
- $this->assertArrayHasKey('hasNextPage', $translations['pageInfo']);
- $this->assertArrayHasKey('endCursor', $translations['pageInfo']);
- // Verify translation edges
- foreach ($translations['edges'] ?? [] as $edge) {
- $this->assertArrayHasKey('node', $edge);
- $this->assertArrayHasKey('cursor', $edge);
- $t = $edge['node'] ?? null;
- $this->assertNotNull($t, 'translation node is null');
- $this->assertArrayHasKey('id', $t);
- $this->assertArrayHasKey('locale', $t);
- $this->assertArrayHasKey('name', $t);
- $this->assertArrayHasKey('description', $t);
- $this->assertArrayHasKey('maintenanceModeText', $t);
- }
- }
- }
|