add: api tests for crypto keys

pull/9075/head
Luciano Righetti 2023-05-12 15:35:41 +02:00
parent 0d28194c84
commit 4219cca07a
7 changed files with 166 additions and 3 deletions

1
.gitignore vendored
View File

@ -13,3 +13,4 @@ docker/run/
config.json config.json
phpunit.xml phpunit.xml
docker-compose.override.yml docker-compose.override.yml
.gnupg

View File

@ -0,0 +1,36 @@
<?php
declare(strict_types=1);
namespace App\Test\Fixture;
use Cake\TestSuite\Fixture\TestFixture;
class CryptographicKeysFixture extends TestFixture
{
public $connection = 'test';
public const CRYPTOGRAPHIC_KEY_REGULAR_USER_ID = 1000;
public const CRYPTOGRAPHIC_KEY_REGULAR_USER_UUID = 'a2c4d61a-b06e-4390-b09d-a64d54225565';
public function init(): void
{
$faker = \Faker\Factory::create();
$key_data = '-----BEGIN PGP PUBLIC KEY BLOCK-----\nVersion: OpenPGP v2.0.76\nComment: foobar\n\nxo0EZF484AEEAMYH6aqsoXKOaJ61efIneGc789aOm78ITjiwO0ZzuofLRu3Zdgbq\nKFFpSgubBGIHeZw2wz76vlU5bATJn/pE8bBHBT03HN+P3lOB/mIOcJzza95y8YV4\n3qOUF04bw4gZFBzSmwMGsQr1u5xA90aaYmD2t9GSHHXOLKXNYSaFCxtTABEBAAHN\nFFVzZXIgPHVzZXJAbWlzcC5jb20+wroEEwEKACQFAmRePOACGy8DCwkHAxUKCAIe\nAQIXgAMWAgECGQEFCQAAAAAACgkQxtKFjHNXIf4XYAQAxQp/ZLnVpPKaj3kOk0b1\nbtNtPTJQOY3k6B9OYWCb3rr1/uziTasr/Z7dcBbr5/80EVjR9EJ2CnRV1xpDWKuu\nyI6QBg/MRNRtkJg1DilUVqaL5SraK8q7C+cPoO+IwvbJ+GtGu1gh60DOc7rKwYuL\nguc8GVRkWIUidauDFp98BAHOjQRkXjzgAQQA2oSVTAbctL//xwQnEVMwlAJ9uj8E\nM4eS/wUQRHXOa54ti3q0Xt23oNVEQtprBp93XtIeW2rZfVqHBIxp2RDSDZcAgwzf\nEfG6z7ykdgWnTm8NwfZRZETMcfkDA07O74Lj8PjuEj6HRr4lPSacT/aL2H7dMrDF\nC4SvdDQoN5oM5L8AEQEAAcLAgwQYAQoADwUCZF484AUJAAAAAAIbLgCoCRDG0oWM\nc1ch/p0gBBkBCgAGBQJkXjzgAAoJELsL/SDS6/ak1uYEAKoZ/hZ+1SlVcsi9Ihar\nq3P6vB7ZAXc/YmLdwXCJRoknAdGcvDsxGVu9vV74PVyU57OqEnqFiYaCYYm2LjBf\nMWODx1UL8ShCcTyLNntI58uytUE80F5qEdvTzj2qI5WuD/aZ7UHXQiE4/EPO154e\nVOGf0rnzCJF2eZEdCb8eEPRrVjED/RqVuQogoidrpJ9um2l5tfWkNjld2HMHdK1h\nl4XqF+W0sEQdM0Zlsr1JGpAIYSi0PDZLb3Q2vNAHk4dJhKgSw9P+6IRLDOUGhg1L\n1OKFM3CnCDiPRl51SuzAngvkbjwLBrCrCZ12dmsnjLNbewjf9BJxV6wxNXj2+fnA\n2E+3BHm5zo0EZF484AEEAMtGgS8KgZs4kDT/zJEiRmPIikN2E9xzufLYR94Md5jH\nqceyZN56sEBlV0kAstyiHusFR3SiQT/MUFUEnO3xlR9XNZx0ka9heT+5sbL1099f\nbbl+trJDAkWo5OuOHYNkEXRnhHOAl/DaAvgVtAhn191cdk9PqhT0qgTQCweR35qb\nABEBAAHCwIMEGAEKAA8FAmRePOAFCQAAAAACGy4AqAkQxtKFjHNXIf6dIAQZAQoA\nBgUCZF484AAKCRBHg4xdjs5JtWoVA/0fJhnCGqdDu7SAM3RlekEZa+ygBTgI5UFJ\nQC8Rtcf63dLzf5tz63CGCRBXemkpkz/AWbgxQX6BFUa8jrYMQp0ZpCZXi8x4c3d1\n5P0FrechOUbv30twv1xZmDxvvgN476PGVTGH3uDwELIa36h1VKC1rkeWHBU3p2yH\nssoA6ELxxnOiA/0YMDUvs7DZ3asWTpA7Vpee1YWlDcyudEQ9p1nmPgOFuLETLhpK\nhfvV5bgxlFgptDdtZ/Y9TioprbHcu1B5pB98cLStccpEuUn403cs3NgvHjfhdp9z\nJNSdGU4DKNkAnSipVBqGocCZFqHkXltjVY0Q49TITJ+t1NJSSGQY/wVxsw==\n=5n9/\n-----END PGP PUBLIC KEY BLOCK-----';
$this->records = [
[
'id' => self::CRYPTOGRAPHIC_KEY_REGULAR_USER_ID,
'uuid' => self::CRYPTOGRAPHIC_KEY_REGULAR_USER_UUID,
'timestamp' => $faker->dateTime()->getTimestamp(),
'parent_id' => UsersFixture::USER_REGULAR_USER_ID,
'parent_type' => 'User',
'key_data' => $key_data,
'type' => 'pgp',
'revoked' => 0,
'fingerprint' => ''
]
];
parent::init();
}
}

View File

@ -0,0 +1,45 @@
<?php
declare(strict_types=1);
namespace App\Test\TestCase\Api\CryptographicKeys;
use Cake\TestSuite\TestCase;
use App\Test\Fixture\AuthKeysFixture;
use App\Test\Helper\ApiTestTrait;
class AddCryptographicKeyApiTest extends TestCase
{
use ApiTestTrait;
protected const ENDPOINT = '/cryptographic-keys/add/%s/%s';
protected $fixtures = [
'app.Organisations',
'app.Users',
'app.AuthKeys',
'app.CryptographicKeys'
];
public function testAddCryptographicKey(): void
{
$this->skipOpenApiValidations();
$this->setAuthToken(AuthKeysFixture::ADMIN_API_KEY);
$url = sprintf(self::ENDPOINT, 'User', 1);
$pgp_key = "-----BEGIN PGP PUBLIC KEY BLOCK-----\nVersion: OpenPGP v2.0.76\nComment: foobar\n\nxo0EZF4jyAEEAMCyxkNt4fo1FKoHs9MM0/T5GQMphmWbaBN7Rednng9WWgICQAq4\nnGn2a0uTJXH3aleej9udK10J3itT+OO8yPA2h79O/6Nfxg6rnEaYpNoEsymjDxZU\nHOBPCNzsBfjC6xwQ7LQ4gARiOmmgrej1uNZTlbs1DhlbhZ1UatfYx+A7ABEBAAHN\nFUZvbyBCYXIgPGZvb0BiYXIuY29tPsK6BBMBCgAkBQJkXiPIAhsvAwsJBwMVCggC\nHgECF4ADFgIBAhkBBQkAAAAAAAoJEDGhkzanZjD/v8AEAJKEjSAk/NWKofOdOA4S\nvMPOXehuZ8MI7yL5WOYmWSpYSZPwmexwNNgjf/tjG6NOABuxti8nHxErNVHRHl60\n5LjlQfeplwjieFoz+XXJKKFbtpqxiaadxgO+krplygnMwCQdQV9BjJ1d7J7O5TNw\n4rswxI3CWAFWf/8uLmuevkdmzo0EZF4jyAEEANhoi9s74ts3dDktzdBd7wRu5f0r\nedHOj0wS72lCxr/wmojzIU5RMYwmNmKhrzht7LgQqqdYdSoPdB3yg3/awZhfihAD\nO+ONMhwrL2E+Fr90JH4qCtn4OgcGtulrA3dE/LzpzfkKa5dazXDmYO+NaYr6WBMM\n3QljcnuWDjxWhrnXABEBAAHCwIMEGAEKAA8FAmReI8gFCQAAAAACGy4AqAkQMaGT\nNqdmMP+dIAQZAQoABgUCZF4jyAAKCRDtPILTQY19iy2bBACjRXd4LRfxNQFnU19r\nbiXyfQzFgm0cS5GfhrYPARGHDKiBuEcAXobk7nZB44zTXM4H8gqte6M+991DzclL\nX07MZkIe/XFeANgQ6ER5yiTgPBnHU4TzQUTpw/TU5siqdm9wsE8cI3r9Dv5Efw+A\n0vEyepIbakIu3wVZu9QFYyd/KjkWBACRobSygYUQN43knI83+Bo09aNTJF8eQ68k\n2zrlnpJruskhgwHjOg7WWi7Q+RCsTKrx735fnf+LlMa5DtXpRAAW2/c8pstjeTnb\nMfGlWjOaR/g9OsQMWn0gt+dQoEsMJPHkzng9d3dMQBcxHiWyZd32et1uV3T9sswY\n2uYWMNvOP86NBGReI8gBBADIY6kuza0SKcUQ5rUZMUNs0iiM4ReleVO6W4HXG8aR\n9jfj2OSaafw+UeuKh73yH0e+0vB+0NP6XdLam/Ne5+vZUXtlW03F/Nd8j2xZF7iJ\nUBw1kCFvLEAF63qvyZXGLOdFe4GFginlvS+2f1gV8BCn15k1hqPxMd38ZvH6QXUr\nEQARAQABwsCDBBgBCgAPBQJkXiPIBQkAAAAAAhsuAKgJEDGhkzanZjD/nSAEGQEK\nAAYFAmReI8gACgkQKd6KLuhHZfkYWwQAlaXK1f2m40L6F4jsA+LNL89PzNPlE3il\n36dQ3kDA4enlKSUjNT9Zbkgl+QQOSnO3u75HH09ZEU293qanzDO790dLHou0Y9cF\nJD0UU6yIqpl+Swsm85F5q5HiRqrR0Lr8iaMbaMcu3zrOE01g6byKrJbtji7TeSNo\n0SEvX6nBkAtBggP8D82Qcx5hZafofB8zT/iBYx5kLKVJKUbRD5VDfZid9KR1ERHc\ndNXLaD1yEAWLGYd6UnExlw5AulW8ejdyZNq7HRmJmaXMX2RhjhHZWz3NzzBoxM4o\nNm+/4L6MlU1uiDmrOZ5tQu3LxNxn3oqWKUH457uDiKCn4WTO9yET00kFvOE=\n=DCP7\n-----END PGP PUBLIC KEY BLOCK-----\n";
$this->post(
$url,
[
'type' => 'pgp',
'key_data' => $pgp_key
]
);
$this->assertResponseOk();
$this->assertDbRecordExists('CryptographicKeys', ['key_data' => $pgp_key]);
}
}

View File

@ -0,0 +1,48 @@
<?php
declare(strict_types=1);
namespace App\Test\TestCase\Api\CryptographicKeys;
use Cake\TestSuite\TestCase;
use App\Test\Fixture\AuthKeysFixture;
use App\Test\Fixture\CryptographicKeysFixture;
use App\Test\Helper\ApiTestTrait;
class DeleteCryptographicKeyApiTest extends TestCase
{
use ApiTestTrait;
protected const ENDPOINT = '/cryptographic-keys/delete';
protected $fixtures = [
'app.Organisations',
'app.Users',
'app.AuthKeys',
'app.CryptoGraphicKeys'
];
public function testDeleteCryptographicKeyByUUID(): void
{
$this->skipOpenApiValidations();
$this->setAuthToken(AuthKeysFixture::ADMIN_API_KEY);
$url = sprintf('%s/%s', self::ENDPOINT, CryptographicKeysFixture::CRYPTOGRAPHIC_KEY_REGULAR_USER_ID);
$this->delete($url);
$this->assertResponseOk();
$this->assertDbRecordNotExists('CryptographicKeys', ['uuid' => CryptographicKeysFixture::CRYPTOGRAPHIC_KEY_REGULAR_USER_UUID]);
}
public function testDeleteCryptographicKeyById(): void
{
$this->skipOpenApiValidations();
$this->setAuthToken(AuthKeysFixture::ADMIN_API_KEY);
$url = sprintf('%s/%s', self::ENDPOINT, CryptographicKeysFixture::CRYPTOGRAPHIC_KEY_REGULAR_USER_ID);
$this->delete($url);
$this->assertResponseOk();
$this->assertDbRecordNotExists('CryptographicKeys', ['uuid' => CryptographicKeysFixture::CRYPTOGRAPHIC_KEY_REGULAR_USER_UUID]);
}
}

View File

@ -0,0 +1,36 @@
<?php
declare(strict_types=1);
namespace App\Test\TestCase\Api\CryptographicKeys;
use Cake\TestSuite\TestCase;
use App\Test\Fixture\AuthKeysFixture;
use App\Test\Fixture\CryptographicKeysFixture;
use App\Test\Helper\ApiTestTrait;
class ViewCryptographicKeyApiTest extends TestCase
{
use ApiTestTrait;
protected const ENDPOINT = '/cryptographic-keys/view';
protected $fixtures = [
'app.Organisations',
'app.Users',
'app.AuthKeys',
'app.CryptographicKeys'
];
public function testViewCryptographicKeyById(): void
{
$this->skipOpenApiValidations();
$this->setAuthToken(AuthKeysFixture::ADMIN_API_KEY);
$url = sprintf('%s/%d', self::ENDPOINT, CryptographicKeysFixture::CRYPTOGRAPHIC_KEY_REGULAR_USER_ID);
$this->get($url);
$this->assertResponseOk();
$this->assertResponseContains(sprintf('"id": %d', CryptographicKeysFixture::CRYPTOGRAPHIC_KEY_REGULAR_USER_ID));
}
}

View File

@ -8,7 +8,6 @@ use Cake\TestSuite\TestCase;
use App\Test\Fixture\AuthKeysFixture; use App\Test\Fixture\AuthKeysFixture;
use App\Test\Fixture\UsersFixture; use App\Test\Fixture\UsersFixture;
use App\Test\Fixture\OrganisationsFixture; use App\Test\Fixture\OrganisationsFixture;
use App\Test\Fixture\RolesFixture;
use App\Test\Helper\ApiTestTrait; use App\Test\Helper\ApiTestTrait;
class AddUserApiTest extends TestCase class AddUserApiTest extends TestCase

View File

@ -7,7 +7,6 @@ namespace App\Test\TestCase\Api\Users;
use Cake\TestSuite\TestCase; use Cake\TestSuite\TestCase;
use App\Test\Fixture\AuthKeysFixture; use App\Test\Fixture\AuthKeysFixture;
use App\Test\Fixture\UsersFixture; use App\Test\Fixture\UsersFixture;
use App\Test\Fixture\RolesFixture;
use App\Test\Helper\ApiTestTrait; use App\Test\Helper\ApiTestTrait;
class EditUserApiTest extends TestCase class EditUserApiTest extends TestCase
@ -22,7 +21,6 @@ class EditUserApiTest extends TestCase
'app.AuthKeys' 'app.AuthKeys'
]; ];
public function testEditUser(): void public function testEditUser(): void
{ {
$this->markTestSkipped("This is not implemented yet."); $this->markTestSkipped("This is not implemented yet.");