Skip to content

Commit 2b47c39

Browse files
committed
ISSUE-345: add tests
1 parent 64b5c85 commit 2b47c39

19 files changed

+690
-64
lines changed

src/Subscription/Controller/SubscriberAttributeValueController.php

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -176,15 +176,18 @@ public function delete(
176176
if (!$definition || !$subscriber) {
177177
throw $this->createNotFoundException('Subscriber attribute not found.');
178178
}
179-
$attribute = $this->attributeManager->getSubscriberAttribute($definition->getId(), $subscriber->getId());
179+
$attribute = $this->attributeManager->getSubscriberAttribute($subscriber->getId(), $definition->getId());
180+
if ($attribute === null) {
181+
throw $this->createNotFoundException('Subscriber attribute not found.');
182+
}
180183
$this->attributeManager->delete($attribute);
181184

182185
return $this->json(null, Response::HTTP_NO_CONTENT);
183186
}
184187

185-
#[Route('/{subscriberId}', name: 'get_subscriber_attributes', methods: ['GET'])]
188+
#[Route('/{subscriberId}', name: 'get_subscriber_attribute_list', methods: ['GET'])]
186189
#[OA\Get(
187-
path: '/subscriber/attribute-values/{subscriberId}',
190+
path: '/subscribers/attribute-values/{subscriberId}',
188191
description: 'Returns a JSON list of all subscriber attributes.',
189192
summary: 'Gets a list of all subscriber attributes.',
190193
tags: ['subscriber-attributes'],
@@ -241,10 +244,13 @@ public function delete(
241244
)
242245
]
243246
)]
244-
public function getPaginated(Request $request): JsonResponse
245-
{
247+
public function getPaginated(
248+
Request $request,
249+
#[MapEntity(mapping: ['subscriberId' => 'id'])] ?Subscriber $subscriber = null,
250+
): JsonResponse {
246251
$this->requireAuthentication($request);
247-
$filter = (new SubscriberAttributeValueFilter())->setSubscriberId($request->query->getInt('subscriberId'));
252+
253+
$filter = (new SubscriberAttributeValueFilter())->setSubscriberId($subscriber->getId());
248254

249255
return $this->json(
250256
$this->paginatedDataProvider->getPaginatedList(

src/Subscription/Controller/ListController.php renamed to src/Subscription/Controller/SubscriberListController.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@
2727
* @author Tatevik Grigoryan <[email protected]>
2828
*/
2929
#[Route('/lists')]
30-
class ListController extends BaseController
30+
class SubscriberListController extends BaseController
3131
{
3232
private SubscriberListNormalizer $normalizer;
3333
private SubscriberListManager $subscriberListManager;

tests/Integration/Subscription/Controller/SubscriberAttributeDefinitionControllerTest.php

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
use PhpList\RestBundle\Tests\Integration\Common\AbstractTestController;
1010
use PhpList\RestBundle\Tests\Integration\Identity\Fixtures\AdministratorFixture;
1111
use PhpList\RestBundle\Tests\Integration\Identity\Fixtures\AdministratorTokenFixture;
12-
use PhpList\RestBundle\Tests\Integration\Subscription\Fixtures\AttributeDefinitionFixture;
12+
use PhpList\RestBundle\Tests\Integration\Subscription\Fixtures\SubscriberAttributeDefinitionFixture;
1313

1414
class SubscriberAttributeDefinitionControllerTest extends AbstractTestController
1515
{
@@ -67,7 +67,7 @@ public function testUpdateAttributeDefinition()
6767
$this->loadFixtures([
6868
AdministratorFixture::class,
6969
AdministratorTokenFixture::class,
70-
AttributeDefinitionFixture::class,
70+
SubscriberAttributeDefinitionFixture::class,
7171
]);
7272

7373
$payload = json_encode([
@@ -90,7 +90,7 @@ public function testDeleteAttributeDefinition()
9090
$this->loadFixtures([
9191
AdministratorFixture::class,
9292
AdministratorTokenFixture::class,
93-
AttributeDefinitionFixture::class,
93+
SubscriberAttributeDefinitionFixture::class,
9494
]);
9595

9696
$this->authenticatedJsonRequest('DELETE', '/api/v2/subscribers/attributes/1');

tests/Integration/Subscription/Controller/SubscriberAttributeValueControllerTest.php

Lines changed: 6 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -4,19 +4,14 @@
44

55
namespace PhpList\RestBundle\Tests\Integration\Subscription\Controller;
66

7-
use PhpList\Core\Domain\Subscription\Repository\SubscriberAttributeValueRepository;
87
use PhpList\RestBundle\Subscription\Controller\SubscriberAttributeValueController;
98
use PhpList\RestBundle\Tests\Integration\Common\AbstractTestController;
10-
use PhpList\RestBundle\Tests\Integration\Subscription\Fixtures\AttributeDefinitionFixture;
9+
use PhpList\RestBundle\Tests\Integration\Subscription\Fixtures\SubscriberAttributeDefinitionFixture;
10+
use PhpList\RestBundle\Tests\Integration\Subscription\Fixtures\SubscriberAttributeValueFixture;
1111
use PhpList\RestBundle\Tests\Integration\Subscription\Fixtures\SubscriberFixture;
1212

1313
class SubscriberAttributeValueControllerTest extends AbstractTestController
1414
{
15-
protected function setUp(): void
16-
{
17-
parent::setUp();
18-
$this->attributeValueRepo = self::getContainer()->get(SubscriberAttributeValueRepository::class);
19-
}
2015

2116
public function testControllerIsAvailableViaContainer(): void
2217
{
@@ -30,7 +25,7 @@ public function testCreateOrUpdateAttributeValue(): void
3025
{
3126
$this->loadFixtures([
3227
SubscriberFixture::class,
33-
AttributeDefinitionFixture::class,
28+
SubscriberAttributeDefinitionFixture::class,
3429
]);
3530

3631
$subscriberId = 1;
@@ -39,7 +34,7 @@ public function testCreateOrUpdateAttributeValue(): void
3934

4035
$this->authenticatedJsonRequest(
4136
'post',
42-
"/api/v2/subscribers/attribute-values/$subscriberId/$definitionId",
37+
'/api/v2/subscribers/attribute-values/' . $subscriberId . '/' . $definitionId,
4338
[],
4439
[],
4540
[],
@@ -51,52 +46,13 @@ public function testCreateOrUpdateAttributeValue(): void
5146
self::assertSame('Test Country', $response['value']);
5247
}
5348

54-
public function testGetSubscriberAttributeValue(): void
55-
{
56-
$this->loadFixtures([
57-
SubscriberFixture::class,
58-
AttributeDefinitionFixture::class,
59-
]);
60-
61-
$this->authenticatedJsonRequest(
62-
'post',
63-
'/api/v2/subscribers/attribute-values/1/1',
64-
[],
65-
[],
66-
[],
67-
json_encode(['value' => 'Test City'])
68-
);
69-
70-
$this->assertHttpCreated();
71-
72-
$this->authenticatedJsonRequest(
73-
'get',
74-
'/api/v2/subscribers/attribute-values/1/1'
75-
);
76-
77-
$this->assertHttpOkay();
78-
$response = $this->getDecodedJsonResponseContent();
79-
self::assertSame('Test City', $response['value']);
80-
}
81-
8249
public function testDeleteAttributeValue(): void
8350
{
8451
$this->loadFixtures([
8552
SubscriberFixture::class,
86-
AttributeDefinitionFixture::class,
53+
SubscriberAttributeValueFixture::class,
8754
]);
8855

89-
$this->authenticatedJsonRequest(
90-
'post',
91-
'/api/v2/subscribers/attribute-values/1/1',
92-
[],
93-
[],
94-
[],
95-
json_encode(['value' => 'To Delete'])
96-
);
97-
98-
$this->assertHttpCreated();
99-
10056
$this->authenticatedJsonRequest(
10157
'delete',
10258
'/api/v2/subscribers/attribute-values/1/1'
@@ -109,7 +65,7 @@ public function testGetPaginatedAttributes(): void
10965
{
11066
$this->loadFixtures([
11167
SubscriberFixture::class,
112-
AttributeDefinitionFixture::class,
68+
SubscriberAttributeDefinitionFixture::class,
11369
]);
11470

11571
$this->authenticatedJsonRequest(

tests/Integration/Subscription/Controller/ListControllerTest.php renamed to tests/Integration/Subscription/Controller/SubscriberListControllerTest.php

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
namespace PhpList\RestBundle\Tests\Integration\Subscription\Controller;
66

77
use PhpList\Core\Domain\Subscription\Repository\SubscriberListRepository;
8-
use PhpList\RestBundle\Subscription\Controller\ListController;
8+
use PhpList\RestBundle\Subscription\Controller\SubscriberListController;
99
use PhpList\RestBundle\Tests\Integration\Common\AbstractTestController;
1010
use PhpList\RestBundle\Tests\Integration\Identity\Fixtures\AdministratorFixture;
1111
use PhpList\RestBundle\Tests\Integration\Identity\Fixtures\AdministratorTokenFixture;
@@ -19,11 +19,14 @@
1919
* @author Oliver Klee <[email protected]>
2020
* @author Xheni Myrtaj <[email protected]>
2121
*/
22-
class ListControllerTest extends AbstractTestController
22+
class SubscriberListControllerTest extends AbstractTestController
2323
{
2424
public function testControllerIsAvailableViaContainer()
2525
{
26-
self::assertInstanceOf(ListController::class, self::getContainer()->get(ListController::class));
26+
self::assertInstanceOf(
27+
SubscriberListController::class,
28+
self::getContainer()->get(SubscriberListController::class)
29+
);
2730
}
2831

2932
public function testGetListsWithoutSessionKeyReturnsForbiddenStatus()

tests/Integration/Subscription/Fixtures/AttributeDefinitionFixture.php renamed to tests/Integration/Subscription/Fixtures/SubscriberAttributeDefinitionFixture.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
use Doctrine\Persistence\ObjectManager;
1010
use PhpList\Core\Domain\Subscription\Model\SubscriberAttributeDefinition;
1111

12-
class AttributeDefinitionFixture extends Fixture implements FixtureInterface
12+
class SubscriberAttributeDefinitionFixture extends Fixture implements FixtureInterface
1313
{
1414
public function load(ObjectManager $manager): void
1515
{
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace PhpList\RestBundle\Tests\Integration\Subscription\Fixtures;
6+
7+
use Doctrine\Bundle\FixturesBundle\Fixture;
8+
use Doctrine\Common\DataFixtures\FixtureInterface;
9+
use Doctrine\Persistence\ObjectManager;
10+
use PhpList\Core\Domain\Subscription\Model\Subscriber;
11+
use PhpList\Core\Domain\Subscription\Model\SubscriberAttributeDefinition;
12+
use PhpList\Core\Domain\Subscription\Model\SubscriberAttributeValue;
13+
14+
class SubscriberAttributeValueFixture extends Fixture implements FixtureInterface
15+
{
16+
public function load(ObjectManager $manager): void
17+
{
18+
$definition = new SubscriberAttributeDefinition();
19+
$definition->setName('Country');
20+
$definition->setType('checkbox');
21+
$definition->setListOrder(1);
22+
$definition->setDefaultValue('US');
23+
$definition->setRequired(true);
24+
$definition->setTableName('list_attributes');
25+
26+
$manager->persist($definition);
27+
28+
$subscriberRepository = $manager->getRepository(Subscriber::class);
29+
$value = new SubscriberAttributeValue($definition, $subscriberRepository->find(1));
30+
$value->setValue('test value');
31+
32+
$manager->persist($value);
33+
34+
$manager->flush();
35+
}
36+
}
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace PhpList\RestBundle\Tests\Unit\Identity\Request;
6+
7+
use PhpList\RestBundle\Identity\Request\CreateAdministratorRequest;
8+
use PHPUnit\Framework\TestCase;
9+
10+
class CreateAdministratorRequestTest extends TestCase
11+
{
12+
public function testGetDtoReturnsCorrectDto(): void
13+
{
14+
$request = new CreateAdministratorRequest();
15+
$request->loginName = 'testuser';
16+
$request->password = 'password123';
17+
$request->email = '[email protected]';
18+
$request->superUser = true;
19+
20+
$dto = $request->getDto();
21+
22+
$this->assertEquals('testuser', $dto->loginName);
23+
$this->assertEquals('password123', $dto->password);
24+
$this->assertEquals('[email protected]', $dto->email);
25+
$this->assertTrue($dto->isSuperUser);
26+
}
27+
28+
public function testGetDtoWithDefaultSuperUserValue(): void
29+
{
30+
$request = new CreateAdministratorRequest();
31+
$request->loginName = 'testuser';
32+
$request->password = 'password123';
33+
$request->email = '[email protected]';
34+
35+
$dto = $request->getDto();
36+
37+
$this->assertEquals('testuser', $dto->loginName);
38+
$this->assertEquals('password123', $dto->password);
39+
$this->assertEquals('[email protected]', $dto->email);
40+
$this->assertFalse($dto->isSuperUser);
41+
}
42+
}
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace PhpList\RestBundle\Tests\Unit\Identity\Request;
6+
7+
use PhpList\RestBundle\Identity\Request\CreateSessionRequest;
8+
use PHPUnit\Framework\TestCase;
9+
10+
class CreateSessionRequestTest extends TestCase
11+
{
12+
public function testGetDtoReturnsSelf(): void
13+
{
14+
$request = new CreateSessionRequest();
15+
$request->loginName = 'testuser';
16+
$request->password = 'password123';
17+
18+
$dto = $request->getDto();
19+
20+
$this->assertSame($request, $dto);
21+
$this->assertEquals('testuser', $dto->loginName);
22+
$this->assertEquals('password123', $dto->password);
23+
}
24+
}
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace PhpList\RestBundle\Tests\Unit\Identity\Request;
6+
7+
use PhpList\Core\Domain\Identity\Model\Dto\UpdateAdministratorDto;
8+
use PhpList\RestBundle\Identity\Request\UpdateAdministratorRequest;
9+
use PHPUnit\Framework\TestCase;
10+
11+
class UpdateAdministratorRequestTest extends TestCase
12+
{
13+
public function testGetDtoReturnsCorrectDto(): void
14+
{
15+
$request = new UpdateAdministratorRequest();
16+
$request->administratorId = 123;
17+
$request->loginName = 'testuser';
18+
$request->password = 'password123';
19+
$request->email = '[email protected]';
20+
$request->superAdmin = true;
21+
22+
$dto = $request->getDto();
23+
24+
$this->assertEquals(123, $dto->administratorId);
25+
$this->assertEquals('testuser', $dto->loginName);
26+
$this->assertEquals('password123', $dto->password);
27+
$this->assertEquals('[email protected]', $dto->email);
28+
$this->assertTrue($dto->superAdmin);
29+
}
30+
31+
public function testGetDtoWithNullValues(): void
32+
{
33+
$request = new UpdateAdministratorRequest();
34+
$request->administratorId = 456;
35+
36+
$dto = $request->getDto();
37+
38+
$this->assertEquals(456, $dto->administratorId);
39+
$this->assertNull($dto->loginName);
40+
$this->assertNull($dto->password);
41+
$this->assertNull($dto->email);
42+
$this->assertNull($dto->superAdmin);
43+
}
44+
}

0 commit comments

Comments
 (0)