Skip to content

Commit

Permalink
Clean code
Browse files Browse the repository at this point in the history
  • Loading branch information
Dumazeau committed Jul 19, 2021
1 parent b91ffe1 commit 9fba2a2
Show file tree
Hide file tree
Showing 16 changed files with 184 additions and 20 deletions.
2 changes: 0 additions & 2 deletions src/Domain/Port/EntityRecoderInterface.php
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,4 @@ public function saveSignature(TermsVersionSignature $signature): void;
public function saveTerms(Terms $terms): void;

public function saveTermsVersion(TermsVersion $termsVersion): void;

public function flush(): void;
}
1 change: 0 additions & 1 deletion src/Domain/UseCase/CreateTermsVersion.php
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,6 @@ public function __invoke(TermsVersion $basedTermsVersion): void
$newTermVersion = $this->termsVersionFactory->buildFromCopy($basedTermsVersion);

$this->entityRecoder->saveTermsVersion($newTermVersion);
$this->entityRecoder->flush();

$this->eventDispatcher->dispatchTermsEvent(
new TermsVersionCreatedEvent($newTermVersion)
Expand Down
2 changes: 1 addition & 1 deletion src/Domain/UseCase/EditTerms.php
Original file line number Diff line number Diff line change
Expand Up @@ -58,8 +58,8 @@ public function __invoke(TermsEdition $termsEdition): void
$this->termsVersionUpdater->update($termsVersion, $termsEdition);
$this->termsUpdater->update($terms, $termsEdition);

$this->entityRecoder->saveTerms($terms);
$this->entityRecoder->saveTermsVersion($termsVersion);
$this->entityRecoder->saveTerms($terms);

if ($termsEdition->needVersionActivation() === true) {
($this->activateTermsVersion)($termsVersion);
Expand Down
23 changes: 23 additions & 0 deletions src/Domain/UseCase/HasSignedLastTermsVersion.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
<?php

declare(strict_types=1);

namespace RichId\TermsModuleBundle\Domain\UseCase;

use RichId\TermsModuleBundle\Domain\Entity\TermsSubjectInterface;

class HasSignedLastTermsVersion
{
/** @var HasSignedTerms */
protected $hasSignedTerms;

public function __construct(HasSignedTerms $hasSignedTerms)
{
$this->hasSignedTerms = $hasSignedTerms;
}

public function __invoke(string $termsSlug, TermsSubjectInterface $subject): bool
{
return ($this->hasSignedTerms)($termsSlug, $subject) === HasSignedTerms::HAS_SIGNED_LATEST_VERSION;
}
}
1 change: 0 additions & 1 deletion src/Domain/UseCase/SignTerms.php
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,6 @@ public function __invoke(string $termsSlug, TermsSubjectInterface $subject, ?boo
if ($accepted === true) {
$signature = $this->termsVersionSignatureFactory->sign($lastVersion, $subject);
$this->entityRecoder->saveSignature($signature);
$this->entityRecoder->flush();
}

$defaultResponse = $this->responseBuilder->buildDefaultTermsSignedResponse($accepted);
Expand Down
6 changes: 2 additions & 4 deletions src/Infrastructure/Adapter/EntityRecorder.php
Original file line number Diff line number Diff line change
Expand Up @@ -23,20 +23,18 @@ public function __construct(EntityManagerInterface $entityManager)
public function saveSignature(TermsVersionSignature $signature): void
{
$this->entityManager->persist($signature);
$this->entityManager->flush();
}

public function saveTerms(Terms $terms): void
{
$this->entityManager->persist($terms);
$this->entityManager->flush();
}

public function saveTermsVersion(TermsVersion $termsVersion): void
{
$this->entityManager->persist($termsVersion);
}

public function flush(): void
{
$this->entityManager->flush();
}
}
1 change: 1 addition & 0 deletions src/Infrastructure/Resources/config/services.xml
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@
<service id="RichId\TermsModuleBundle\Domain\UseCase\ActivateTermsVersion" />
<service id="RichId\TermsModuleBundle\Domain\UseCase\CreateTermsVersion" />
<service id="RichId\TermsModuleBundle\Domain\UseCase\EditTerms" />
<service id="RichId\TermsModuleBundle\Domain\UseCase\HasSignedLastTermsVersion" />
<service id="RichId\TermsModuleBundle\Domain\UseCase\HasSignedTerms" />
<service id="RichId\TermsModuleBundle\Domain\UseCase\RemoveTermsVersion" />
<service id="RichId\TermsModuleBundle\Domain\UseCase\SignTerms" />
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@

/**
* @covers \RichId\TermsModuleBundle\Domain\EventListener\AutopublishFirstTermsVersionEventListener
* @TestConfig("kernel")
* @TestConfig("fixtures")
*/
final class AutopublishFirstTermsVersionEventListenerTest extends TestCase
{
Expand Down Expand Up @@ -90,13 +90,13 @@ public function testListenerAlreadyEnabledVersion(): void

public function testListenerActivateVersion(): void
{
$terms = new Terms();
$terms->setName('Terms');
$terms->setSlug('my_terms');
$terms->setIsPublished(true);
$terms = $this->getReference(Terms::class, '3');

$termsVersion = new TermsVersion();
$termsVersion->setTerms($terms);
$termsVersion->setVersion(1);
$termsVersion->setTitle('Title');
$termsVersion->setContent('Content');
$terms->addVersion($termsVersion);

$event = new TermsVersionUpdatedEvent($termsVersion);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,14 +6,15 @@

use RichCongress\TestFramework\TestConfiguration\Annotation\TestConfig;
use RichCongress\TestSuite\TestCase\TestCase;
use RichId\TermsModuleBundle\Domain\Entity\Terms;
use RichId\TermsModuleBundle\Domain\Entity\TermsVersion;
use RichId\TermsModuleBundle\Domain\Event\TermsVersionEnabledEvent;
use RichId\TermsModuleBundle\Domain\EventListener\SetTermsVersionPublicationMetadataEventListener;
use RichId\TermsModuleBundle\Tests\Resources\Stubs\EntityManagerStub;

/**
* @covers \RichId\TermsModuleBundle\Domain\EventListener\SetTermsVersionPublicationMetadataEventListener
* @TestConfig("kernel")
* @TestConfig("fixtures")
*/
final class SetTermsVersionPublicationMetadataEventListenerTest extends TestCase
{
Expand All @@ -40,7 +41,13 @@ public function testListenerWithExistingPublicationDate(): void

public function testListenerWithoutExistingPublicationDate(): void
{
$terms = $this->getReference(Terms::class, '1');

$termsVersion = new TermsVersion();
$termsVersion->setTerms($terms);
$termsVersion->setVersion(42);
$termsVersion->setTitle('Title');
$termsVersion->setContent('Content');

$event = new TermsVersionEnabledEvent($termsVersion);

Expand Down
24 changes: 24 additions & 0 deletions tests/Domain/Exception/InvalidValueExceptionTest.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
<?php

declare(strict_types=1);

namespace RichId\TermsModuleBundle\Tests\Domain\Exception;

use RichCongress\TestSuite\TestCase\TestCase;
use RichId\TermsModuleBundle\Domain\Exception\InvalidValueException;
use RichId\TermsModuleBundle\Domain\Exception\TermsModuleException;

/**
* @covers \RichId\TermsModuleBundle\Domain\Exception\InvalidValueException
*/
final class InvalidValueExceptionTest extends TestCase
{
public function testException(): void
{
$exception = new InvalidValueException('title', 'invalid');

$this->assertInstanceOf(TermsModuleException::class, $exception);
$this->assertSame('title', $exception->getPropertyPath());
$this->assertSame('invalid', $exception->getValue());
}
}
21 changes: 21 additions & 0 deletions tests/Domain/Factory/TermsVersionFactoryTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
use RichCongress\TestSuite\TestCase\TestCase;
use RichId\TermsModuleBundle\Domain\Entity\Terms;
use RichId\TermsModuleBundle\Domain\Entity\TermsVersion;
use RichId\TermsModuleBundle\Domain\Exception\InvalidValueException;
use RichId\TermsModuleBundle\Domain\Factory\TermsVersionFactory;

/**
Expand Down Expand Up @@ -35,6 +36,26 @@ public function testBuildDefaultVersion(): void
$this->assertEmpty($entity->getSignatures());
}

public function testBuildFromCopyWithBadTitle(): void
{
$this->expectException(InvalidValueException::class);

$termsVersion = $this->getReference(TermsVersion::class, 'v3-terms-1');
$termsVersion->setTitle('');

$this->factory->buildFromCopy($termsVersion);
}

public function testBuildFromCopyWithBadContent(): void
{
$this->expectException(InvalidValueException::class);

$termsVersion = $this->getReference(TermsVersion::class, 'v3-terms-1');
$termsVersion->setContent('');

$this->factory->buildFromCopy($termsVersion);
}

public function testBuildFromCopy(): void
{
$termsVersion = $this->getReference(TermsVersion::class, 'v3-terms-1');
Expand Down
33 changes: 33 additions & 0 deletions tests/Domain/Updater/TermsVersionUpdaterTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
use RichCongress\TestSuite\TestCase\TestCase;
use RichId\TermsModuleBundle\Domain\Entity\Terms;
use RichId\TermsModuleBundle\Domain\Entity\TermsVersion;
use RichId\TermsModuleBundle\Domain\Exception\InvalidValueException;
use RichId\TermsModuleBundle\Domain\Model\TermsEdition;
use RichId\TermsModuleBundle\Domain\Updater\TermsVersionUpdater;

Expand All @@ -20,6 +21,38 @@ final class TermsVersionUpdaterTest extends TestCase
/** @var TermsVersionUpdater */
public $updater;

public function testUpdateWithInvalidTitle(): void
{
$this->expectException(InvalidValueException::class);

$date = new \DateTime();
$entity = new TermsVersion();
$entity->setTerms(new Terms());

$model = new TermsEdition($entity);

$model->setContent('My content');
$model->setPublicationDate($date);

$this->updater->update($entity, $model);
}

public function testUpdateWithInvalidContent(): void
{
$this->expectException(InvalidValueException::class);

$date = new \DateTime();
$entity = new TermsVersion();
$entity->setTerms(new Terms());

$model = new TermsEdition($entity);

$model->setTitle('My Title');
$model->setPublicationDate($date);

$this->updater->update($entity, $model);
}

public function testUpdate(): void
{
$date = new \DateTime();
Expand Down
5 changes: 3 additions & 2 deletions tests/Domain/UseCase/ActivateTermsVersionTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -47,12 +47,13 @@ public function testUseCaseTermsVersionAlreadyEnabled(): void

public function testUseCase(): void
{
$terms = new Terms();
$terms->setSlug('my_terms');
$terms = $this->getReference(Terms::class, '1');

$termsVersion = new TermsVersion();
$termsVersion->setTerms($terms);
$termsVersion->setVersion(42);
$termsVersion->setTitle('Title');
$termsVersion->setContent('Content');

($this->useCase)($termsVersion);

Expand Down
62 changes: 62 additions & 0 deletions tests/Domain/UseCase/HasSignedLastTermsVersionTest.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
<?php

declare(strict_types=1);

namespace RichId\TermsModuleBundle\Tests\Domain\UseCase;

use RichCongress\TestFramework\TestConfiguration\Annotation\TestConfig;
use RichCongress\TestSuite\TestCase\TestCase;
use RichId\TermsModuleBundle\Domain\Exception\NotFoundTermsException;
use RichId\TermsModuleBundle\Domain\Model\DummySubject;
use RichId\TermsModuleBundle\Domain\UseCase\HasSignedLastTermsVersion;

/**
* @covers \RichId\TermsModuleBundle\Domain\UseCase\HasSignedLastTermsVersion
* @TestConfig("fixtures")
*/
final class HasSignedLastTermsVersionTest extends TestCase
{
/** @var HasSignedLastTermsVersion */
public $useCase;

public function testUseCaseTermsNotExist(): void
{
$this->expectException(NotFoundTermsException::class);
$this->expectDeprecationMessage('Not found terms terms-999.');

$subject = DummySubject::create('user', '42');
($this->useCase)('terms-999', $subject);
}

public function testUseCaseTermsNotPublished(): void
{
$subject = DummySubject::create('user', '42');
$hasSign = ($this->useCase)('terms-2', $subject);

$this->assertFalse($hasSign);
}

public function testUseCaseSubjectNotExist(): void
{
$subject = DummySubject::create('user', '999');
$hasSign = ($this->useCase)('terms-1', $subject);

$this->assertFalse($hasSign);
}

public function testUseCaseHasSignOldVersion(): void
{
$subject = DummySubject::create('user', '42');
$hasSign = ($this->useCase)('terms-1', $subject);

$this->assertFalse($hasSign);
}

public function testUseCaseHasSignLatestVersion(): void
{
$subject = DummySubject::create('user', '43');
$hasSign = ($this->useCase)('terms-1', $subject);

$this->assertTrue($hasSign);
}
}
3 changes: 0 additions & 3 deletions tests/Infrastructure/Adapter/EntityRecorderTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,6 @@ public function testSaveSignature(): void
$signature->setDate(new \DateTime());

$this->adapter->saveSignature($signature);
$this->adapter->flush();

$this->assertCount(6, $this->termsVersionSignatureRepository->findAll());
}
Expand All @@ -58,7 +57,6 @@ public function testSaveTerms(): void
$terms->setName('My terms');

$this->adapter->saveTerms($terms);
$this->adapter->flush();

$this->assertCount(6, $this->termsRepository->findAll());
}
Expand All @@ -75,7 +73,6 @@ public function testSaveTermsVersion(): void
$termsVersion->setContent('Content');

$this->adapter->saveTermsVersion($termsVersion);
$this->adapter->flush();

$this->assertCount(8, $this->termsVersionRepository->findAll());
}
Expand Down
1 change: 1 addition & 0 deletions tests/Resources/Kernel/config/services.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ services:
autowire: true
public: true

RichId\TermsModuleBundle\Domain\UseCase\HasSignedLastTermsVersion: ~
RichId\TermsModuleBundle\Domain\UseCase\HasSignedTerms: ~

RichId\TermsModuleBundle\Infrastructure\Adapter\EntityRemover: ~
Expand Down

0 comments on commit 9fba2a2

Please sign in to comment.