Skip to content

Commit eefcb65

Browse files
committed
Add integration tests
1 parent 2a8c353 commit eefcb65

File tree

6 files changed

+127
-2
lines changed

6 files changed

+127
-2
lines changed

.github/workflows/test.yml

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,9 +9,25 @@ jobs:
99

1010
strategy:
1111
matrix:
12+
unifi-version: [ stable-5, stable-6, v7.0, v7.1, v7.2, v7.3 ]
1213
php-version: [ 7.2, 7.3, 7.4, "8.0", 8.1, 8.2 ]
14+
mongo-version: [ 3.6 ]
1315
os: [ ubuntu-latest ]
1416

17+
services:
18+
mongo:
19+
image: mongo:${{ matrix.mongo-version }}
20+
ports:
21+
- "27017:27017/tcp"
22+
unifi:
23+
image: jacobalberty/unifi:${{ matrix.unifi-version }}
24+
env:
25+
DB_URI: mongodb://mongo/unifi
26+
STATDB_URI: mongodb://mongo/unifi_stat
27+
DB_NAME: unifi
28+
ports:
29+
- "8443:8443/tcp"
30+
1531
steps:
1632
- name: Checkout
1733
uses: actions/checkout@v3
@@ -39,3 +55,7 @@ jobs:
3955
- name: Unit tests
4056
run: |
4157
composer run-script test
58+
59+
- name: Integration tests
60+
run: |
61+
composer run-script integration-test

composer.json

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,10 @@
3434
},
3535
"scripts": {
3636
"test" : [
37-
"vendor/bin/phpunit --testdox"
37+
"vendor/bin/phpunit --testdox --testsuite \"Unit tests\""
38+
],
39+
"integration-test" : [
40+
"vendor/bin/phpunit --testdox --testsuite \"Integration tests\""
3841
]
3942
}
4043
}

phpunit.xml.dist

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,10 @@
44
colors="true">
55
<testsuites>
66
<testsuite name="Unit tests">
7-
<directory>tests</directory>
7+
<directory>tests/Unit</directory>
8+
</testsuite>
9+
<testsuite name="Integration tests">
10+
<directory>tests/Integration</directory>
811
</testsuite>
912
</testsuites>
1013
</phpunit>

src/Client.php

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1677,6 +1677,22 @@ public function set_site_connectivity($connectivity_id, $payload)
16771677
$payload);
16781678
}
16791679

1680+
/**
1681+
* Creates default admin account for controller in setup mode
1682+
*
1683+
* @return bool true on success
1684+
*/
1685+
public function add_default_admin()
1686+
{
1687+
$payload = [
1688+
'cmd' => 'add-default-admin',
1689+
'name' => $this->user,
1690+
'x_password' => $this->password,
1691+
];
1692+
1693+
return $this->fetch_results_boolean('/api/cmd/sitemgr', $payload, false);
1694+
}
1695+
16801696
/**
16811697
* Fetch admins
16821698
*

tests/Integration/ClientTest.php

Lines changed: 83 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,83 @@
1+
<?php
2+
3+
namespace UniFi_API\Tests\Integration;
4+
5+
use UniFi_API\Client;
6+
use PHPUnit\Framework\TestCase;
7+
8+
class ClientTest extends TestCase
9+
{
10+
protected static $client;
11+
12+
public static function setUpBeforeClass(): void
13+
{
14+
self::$client = new Client('unifi', 'unifi');
15+
self::$client->add_default_admin();
16+
}
17+
18+
public function testLogin()
19+
{
20+
$this->assertTrue(self::$client->login());
21+
}
22+
23+
public function testStatSysinfo()
24+
{
25+
$stat_sysinfo = self::$client->stat_sysinfo();
26+
$this->assertCount(1, $stat_sysinfo);
27+
$this->assertObjectHasAttribute('timezone', $stat_sysinfo[0]);
28+
$this->assertObjectHasAttribute('autobackup', $stat_sysinfo[0]);
29+
$this->assertObjectHasAttribute('build', $stat_sysinfo[0]);
30+
$this->assertObjectHasAttribute('version', $stat_sysinfo[0]);
31+
$this->assertObjectHasAttribute('data_retention_days', $stat_sysinfo[0]);
32+
$this->assertObjectHasAttribute('data_retention_time_in_hours_for_5minutes_scale', $stat_sysinfo[0]);
33+
$this->assertObjectHasAttribute('data_retention_time_in_hours_for_hourly_scale', $stat_sysinfo[0]);
34+
$this->assertObjectHasAttribute('data_retention_time_in_hours_for_daily_scale', $stat_sysinfo[0]);
35+
$this->assertObjectHasAttribute('data_retention_time_in_hours_for_monthly_scale', $stat_sysinfo[0]);
36+
$this->assertObjectHasAttribute('data_retention_time_in_hours_for_others', $stat_sysinfo[0]);
37+
$this->assertObjectHasAttribute('update_available', $stat_sysinfo[0]);
38+
$this->assertObjectHasAttribute('update_downloaded', $stat_sysinfo[0]);
39+
$this->assertObjectHasAttribute('live_chat', $stat_sysinfo[0]);
40+
$this->assertObjectHasAttribute('store_enabled', $stat_sysinfo[0]);
41+
$this->assertObjectHasAttribute('hostname', $stat_sysinfo[0]);
42+
$this->assertObjectHasAttribute('name', $stat_sysinfo[0]);
43+
$this->assertObjectHasAttribute('ip_addrs', $stat_sysinfo[0]);
44+
$this->assertObjectHasAttribute('inform_port', $stat_sysinfo[0]);
45+
$this->assertObjectHasAttribute('https_port', $stat_sysinfo[0]);
46+
$this->assertObjectHasAttribute('override_inform_host', $stat_sysinfo[0]);
47+
$this->assertObjectHasAttribute('image_maps_use_google_engine', $stat_sysinfo[0]);
48+
$this->assertObjectHasAttribute('radius_disconnect_running', $stat_sysinfo[0]);
49+
$this->assertObjectHasAttribute('facebook_wifi_registered', $stat_sysinfo[0]);
50+
$this->assertObjectHasAttribute('sso_app_id', $stat_sysinfo[0]);
51+
$this->assertObjectHasAttribute('sso_app_sec', $stat_sysinfo[0]);
52+
$this->assertObjectHasAttribute('unsupported_device_count', $stat_sysinfo[0]);
53+
$this->assertObjectHasAttribute('unsupported_device_list', $stat_sysinfo[0]);
54+
$this->assertObjectHasAttribute('unifi_go_enabled', $stat_sysinfo[0]);
55+
$this->assertObjectHasAttribute('default_site_device_auth_password_alert', $stat_sysinfo[0]);
56+
57+
if (\version_compare($stat_sysinfo[0]->version, '6') >= 0) {
58+
$this->assertObjectHasAttribute('uptime', $stat_sysinfo[0]);
59+
$this->assertObjectHasAttribute('anonymous_controller_id', $stat_sysinfo[0]);
60+
$this->assertObjectHasAttribute('has_webrtc_support', $stat_sysinfo[0]);
61+
}
62+
63+
if (\version_compare($stat_sysinfo[0]->version, '7') >= 0) {
64+
$this->assertObjectHasAttribute('debug_setting_preference', $stat_sysinfo[0]);
65+
$this->assertObjectHasAttribute('debug_mgmt', $stat_sysinfo[0]);
66+
$this->assertObjectHasAttribute('debug_system', $stat_sysinfo[0]);
67+
$this->assertObjectHasAttribute('debug_device', $stat_sysinfo[0]);
68+
$this->assertObjectHasAttribute('debug_sdn', $stat_sysinfo[0]);
69+
}
70+
}
71+
72+
public function testListCountryCodes()
73+
{
74+
$country_codes = self::$client->list_country_codes();
75+
$this->assertGreaterThanOrEqual(168, $country_codes);
76+
77+
foreach ($country_codes as $country_code) {
78+
$this->assertObjectHasAttribute('code', $country_code);
79+
$this->assertObjectHasAttribute('name', $country_code);
80+
$this->assertObjectHasAttribute('key', $country_code);
81+
}
82+
}
83+
}
File renamed without changes.

0 commit comments

Comments
 (0)