Files
alrahma_sunday_school/tests/app/Controllers/Api/InfoIconControllerTest.php
T
2026-02-10 22:11:06 -05:00

110 lines
3.0 KiB
PHP

<?php
namespace Tests\App\Controllers\Api;
use App\Controllers\Api\InfoIconController;
use App\Models\UserModel;
use CodeIgniter\Test\CIUnitTestCase;
class StubInfoIconUserModel extends UserModel
{
public function __construct()
{
// skip parent initialization to avoid DB dependencies
}
private array $data = [];
public function setUserInfoById(int $id, ?array $info): void
{
$this->data[$id] = $info;
}
public function getUserInfoById($id): ?array
{
return $this->data[$id] ?? null;
}
}
class TestableInfoIconController extends InfoIconController
{
private ?object $user = null;
private ?StubInfoIconUserModel $userModel = null;
public function setCurrentUser(?object $user): void
{
$this->user = $user;
}
public function setUserModel(StubInfoIconUserModel $model): void
{
$this->userModel = $model;
}
protected function getCurrentUser(): ?object
{
return $this->user;
}
protected function createUserModel(): UserModel
{
return $this->userModel ?? parent::createUserModel();
}
protected function respond($data = null, ?int $status = null, string $message = '')
{
return ['status' => true, 'code' => $status, 'message' => $message, 'data' => $data];
}
protected function error(string $message = 'An error occurred', int $code = 400, ?array $errors = null)
{
return ['status' => false, 'code' => $code, 'message' => $message, 'errors' => $errors];
}
}
class InfoIconControllerTest extends CIUnitTestCase
{
private TestableInfoIconController $controller;
private StubInfoIconUserModel $userModel;
protected function setUp(): void
{
parent::setUp();
$this->controller = new TestableInfoIconController();
$this->userModel = new StubInfoIconUserModel();
$this->controller->setUserModel($this->userModel);
}
public function testRequiresAuthentication()
{
$response = $this->controller->profileIcon();
$this->assertFalse($response['status']);
$this->assertSame(401, $response['code']);
}
public function testReturnsNotFoundWhenUserMissing()
{
$this->controller->setCurrentUser((object) ['id' => 12]);
$response = $this->controller->profileIcon();
$this->assertFalse($response['status']);
$this->assertSame(404, $response['code']);
}
public function testReturnsUserProfileInfo()
{
$this->controller->setCurrentUser((object) ['id' => 7]);
$this->userModel->setUserInfoById(7, ['firstname' => 'Lana', 'lastname' => 'Kay', 'email' => 'test']);
$response = $this->controller->profileIcon();
$this->assertTrue($response['status']);
$this->assertSame('Profile icon info retrieved successfully', $response['message']);
$this->assertSame('Lana Kay', $response['data']['user_name']);
$this->assertSame('LK', $response['data']['user_initials']);
}
}