diff --git a/.gitignore b/.gitignore index b1dc1c8..e5bc443 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,4 @@ +/.idea/ +/.Build/ /composer.lock /vendor/ -index.php -typo3 -typo3_src diff --git a/.travis.yml b/.travis.yml index c92e003..79a7c12 100644 --- a/.travis.yml +++ b/.travis.yml @@ -2,27 +2,31 @@ language: php git: depth: 5 -php: - - 5.6 - - 7.0 - - 7.1 - - 7.2 - - nightly +matrix: + fast_finish: true + include: + - php: 7.0 + env: TYPO3_VERSION=8.7.* + - php: 7.1 + env: TYPO3_VERSION=8.7.* + - php: 7.2 + env: TYPO3_VERSION=8.7.* + allow_failures: + - php: nightly + env: TYPO3_VERSION=8.7.* cache: directories: - $HOME/.composer/cache -matrix: - fast_finish: true - allow_failures: - - php: nightly before_install: - phpenv config-rm xdebug.ini || echo "xdebug not available" install: - - composer install --no-progress --no-scripts --no-suggest -n + - composer require typo3/cms="$TYPO3_VERSION" --dev + - composer install --no-progress --no-suggest -n script: - ./vendor/bin/grumphp run + - composer test diff --git a/Classes/Domain/Repository/MailLogRepository.php b/Classes/Domain/Repository/MailLogRepository.php index 7475e4e..b6f33e6 100644 --- a/Classes/Domain/Repository/MailLogRepository.php +++ b/Classes/Domain/Repository/MailLogRepository.php @@ -42,15 +42,25 @@ class MailLogRepository extends Repository protected $defaultAnonymizeAfter = '7 days'; /** - * @var array + * @var string + */ + protected $lifetime = '30 days'; + + /** + * @var string */ - protected $mailLoggerSettings = ''; + protected $anonymizeAfter; /** * @var string */ protected $anonymizeSymbol = '***'; + /** + * @var bool + */ + protected $anonymize = true; + /** * @return void */ @@ -64,7 +74,19 @@ public function initializeObject() // mail logger typoscript settings $configurationManager = $this->objectManager->get(ConfigurationManager::class); $fullSettings = $configurationManager->getConfiguration(ConfigurationManagerInterface::CONFIGURATION_TYPE_FULL_TYPOSCRIPT); - $this->mailLoggerSettings = $fullSettings['module.']['tx_maillogger.']['settings.']; + $settings = $fullSettings['module.']['tx_maillogger.']['settings.']; + + $this->lifetime = $this->defaultLifetime; + if (isset($settings['cleanup.']['lifetime'])) { + $this->lifetime = $settings['cleanup.']['lifetime']; + } + $this->anonymizeAfter = $this->defaultAnonymizeAfter; + if (isset($settings['cleanup.']['anonymizeAfter'])) { + $this->anonymizeAfter = $settings['cleanup.']['anonymizeAfter']; + } + if (isset($settings['cleanup.']['anonymize'])) { + $this->anonymize = (bool)$settings['cleanup.']['anonymize']; + } // cleanup $this->cleanupDatabase(); @@ -79,9 +101,10 @@ public function initializeObject() */ protected function cleanupDatabase() { - $lifetime = $this->mailLoggerSettings['cleanup.']['lifetime'] ?: $this->defaultLifetime; - foreach ($this->findOldMailLogRecords($lifetime) as $mailLog) { - $this->remove($mailLog); + if ($this->lifetime !== '') { + foreach ($this->findOldMailLogRecords($this->lifetime) as $mailLog) { + $this->remove($mailLog); + } } } @@ -91,11 +114,8 @@ protected function cleanupDatabase() */ protected function anonymizeAll() { - $anonymizeAfter = $this->mailLoggerSettings['cleanup.']['anonymizeAfter'] ?: $this->defaultAnonymizeAfter; - // if anonymizeAfter is set - if ($this->mailLoggerSettings['cleanup.']['anonymize'] && $anonymizeAfter) { - foreach ($this->findOldMailLogRecords($anonymizeAfter) as $mailLog) { - $this->anonymizeMailLog($mailLog); + if ($this->anonymize) { + foreach ($this->findOldMailLogRecords($this->anonymizeAfter) as $mailLog) { $this->update($mailLog); } } @@ -108,50 +128,60 @@ protected function anonymizeAll() protected function findOldMailLogRecords($lifeTime) { $query = $this->createQuery(); - $now = new \DateTime(); - $query->matching($query->lessThanOrEqual('crdate', $now->modify('-' . $lifeTime))); + $query->matching($query->lessThanOrEqual('crdate', date_modify(new \DateTime(), '-' . $lifeTime))); return $query->execute(); } /** - * @param MailLog $object + * @param MailLog $mailLog * @return void */ - public function add($object) + public function add($mailLog) { - $anonymizeAfter = $this->mailLoggerSettings['cleanup.']['anonymizeAfter'] ?: $this->defaultAnonymizeAfter; - // if anonymizeAfter is not set - if ($this->mailLoggerSettings['cleanup.']['anonymize'] && !$anonymizeAfter) { - $this->anonymizeMailLog($object); + if ($mailLog->getCrdate() === null) { + $mailLog->_setProperty('crdate', time()); + } + if ($mailLog->getTstamp() === null) { + $mailLog->_setProperty('tstamp', time()); } - parent::add($object); + $this->anonymizeMailLogIfNeeded($mailLog); + parent::add($mailLog); } /** - * @param MailLog $object + * @param MailLog $mailLog * @return void */ - public function update($object) + public function update($mailLog) { - $anonymizeAfter = $this->mailLoggerSettings['cleanup.']['anonymizeAfter'] ?: $this->defaultAnonymizeAfter; - // if anonymizeAfter is not set - if ($this->mailLoggerSettings['cleanup.']['anonymize'] && !$anonymizeAfter) { - $this->anonymizeMailLog($object); + if ($mailLog->getTstamp() === null) { + $mailLog->_setProperty('tstamp', time()); } - parent::update($object); + $this->anonymizeMailLogIfNeeded($mailLog); + parent::update($mailLog); } /** - * @param MailLog $object + * @param MailLog $mailLog * @return void */ - protected function anonymizeMailLog($object) + protected function anonymizeMailLogIfNeeded(MailLog $mailLog) { - $object->setSubject($this->anonymizeSymbol); - $object->setMessage($this->anonymizeSymbol); - $object->setMailFrom($this->anonymizeSymbol); - $object->setMailTo($this->anonymizeSymbol); - $object->setResult($this->anonymizeSymbol); - $object->setMailBlindCopy($this->anonymizeSymbol); + if ($mailLog->getCrdate() === null) { + throw new \InvalidArgumentException('MailLog must have a crdate'); + } + if ($this->anonymize === false) { + return; + } + if ($mailLog->getCrdate() > date_modify(new \DateTime(), '-' . $this->anonymizeAfter)->getTimestamp()) { + return; + } + + $mailLog->setSubject($this->anonymizeSymbol); + $mailLog->setMessage($this->anonymizeSymbol); + $mailLog->setMailFrom($this->anonymizeSymbol); + $mailLog->setMailTo($this->anonymizeSymbol); + $mailLog->setResult($this->anonymizeSymbol); + $mailLog->setMailBlindCopy($this->anonymizeSymbol); } } diff --git a/Tests/Fixtures/MailLogRepositoryTest/Anonymize7daysLifeTime30days.typoscript b/Tests/Fixtures/MailLogRepositoryTest/Anonymize7daysLifeTime30days.typoscript new file mode 100644 index 0000000..7ab37ba --- /dev/null +++ b/Tests/Fixtures/MailLogRepositoryTest/Anonymize7daysLifeTime30days.typoscript @@ -0,0 +1,5 @@ +module.tx_maillogger.settings.cleanup { + anonymize = 1 + anonymizeAfter = 7 days + lifetime = 30 days +} diff --git a/Tests/Fixtures/MailLogRepositoryTest/AnonymizeDirectlyLifeTimeEmpty.typoscript b/Tests/Fixtures/MailLogRepositoryTest/AnonymizeDirectlyLifeTimeEmpty.typoscript new file mode 100644 index 0000000..33434f3 --- /dev/null +++ b/Tests/Fixtures/MailLogRepositoryTest/AnonymizeDirectlyLifeTimeEmpty.typoscript @@ -0,0 +1,5 @@ +module.tx_maillogger.settings.cleanup { + anonymize = 1 + anonymizeAfter = 0 + lifetime = +} diff --git a/Tests/Fixtures/MailLogRepositoryTest/NoAnonymizeLifeTime1min.typoscript b/Tests/Fixtures/MailLogRepositoryTest/NoAnonymizeLifeTime1min.typoscript new file mode 100644 index 0000000..1222a00 --- /dev/null +++ b/Tests/Fixtures/MailLogRepositoryTest/NoAnonymizeLifeTime1min.typoscript @@ -0,0 +1,5 @@ +module.tx_maillogger.settings.cleanup { + anonymize = 0 + anonymizeAfter = 0 + lifetime = 1 min +} diff --git a/Tests/Functional/MailLogRepository/AbstractMailLogRepositoryTest.php b/Tests/Functional/MailLogRepository/AbstractMailLogRepositoryTest.php new file mode 100644 index 0000000..e4b9026 --- /dev/null +++ b/Tests/Functional/MailLogRepository/AbstractMailLogRepositoryTest.php @@ -0,0 +1,235 @@ +importDataSet('ntf://Database/pages.xml'); + } + + public function testInitializeObject() + { + $objectManager = GeneralUtility::makeInstance(ObjectManager::class); + $persistenceManager = $objectManager->get(PersistenceManager::class); + + $mailLogRepository = $this->initializeObjectPart($objectManager, $persistenceManager); + + $this->assertMatchesJsonSnapshot(json_encode([ + 'lifetime' => $this->getObjectAttribute($mailLogRepository, 'lifetime'), + 'anonymize' => $this->getObjectAttribute($mailLogRepository, 'anonymize'), + 'anonymizeAfter' => $this->getObjectAttribute($mailLogRepository, 'anonymizeAfter'), + 'anonymizeSymbol' => $this->getObjectAttribute($mailLogRepository, 'anonymizeSymbol'), + ])); + } + + public function testAdd() + { + $objectManager = GeneralUtility::makeInstance(ObjectManager::class); + $persistenceManager = $objectManager->get(PersistenceManager::class); + + $mailLogRepository = $this->initializeObjectPart($objectManager, $persistenceManager); + + $mailLog = $this->addingPart($mailLogRepository, $persistenceManager, 558); + + $this->assertModelSnapshot($mailLog); + } + + public function testUpdate() + { + $objectManager = GeneralUtility::makeInstance(ObjectManager::class); + $persistenceManager = $objectManager->get(PersistenceManager::class); + + $mailLogRepository = $this->initializeObjectPart($objectManager, $persistenceManager); + + $mailLog = $this->addingPart($mailLogRepository, $persistenceManager, 555); + + $mailLog = $this->updatingPart($mailLogRepository, $persistenceManager, $mailLog); + + $this->assertModelSnapshot($mailLog); + } + + public function testUpdateWithDelayAnonymize() + { + $objectManager = GeneralUtility::makeInstance(ObjectManager::class); + $persistenceManager = $objectManager->get(PersistenceManager::class); + + $mailLogRepository = $this->initializeObjectPart($objectManager, $persistenceManager); + /** @var MailLog $mailLog */ + $mailLog = $this->addingPart($mailLogRepository, $persistenceManager, 2345); + + $mailLog->_setProperty('crdate', date_modify(new \DateTime(), '-' . $this->delayAnonymize)->getTimestamp() - 5); + + $mailLog = $this->updatingPart($mailLogRepository, $persistenceManager, $mailLog); + + $this->assertModelSnapshot($mailLog); + } + + public function testCleanupDatabase() + { + $objectManager = GeneralUtility::makeInstance(ObjectManager::class); + $persistenceManager = $objectManager->get(PersistenceManager::class); + + $mailLogRepository = $this->initializeObjectPart($objectManager, $persistenceManager); + + $this->addingPart($mailLogRepository, $persistenceManager, 789); + + $this->getDatabaseConnection()->updateArray('tx_maillogger_domain_model_maillog', ['uid' => '1'], ['tstamp' => 0, 'crdate' => 0]); + + $this->cleanupDatabasePart($mailLogRepository, $persistenceManager); + + /** @var MailLog $mailLog */ + $mailLog = $mailLogRepository->findAll()->getFirst(); + $this->assertModelSnapshot($mailLog); + } + + public function testAnonymizeAll() + { + $objectManager = GeneralUtility::makeInstance(ObjectManager::class); + $persistenceManager = $objectManager->get(PersistenceManager::class); + + $mailLogRepository = $this->initializeObjectPart($objectManager, $persistenceManager); + + $this->addingPart($mailLogRepository, $persistenceManager, 7894); + + $timestamp = date_modify(new \DateTime(), '-' . $this->delayAnonymize)->getTimestamp() - 5; + $this->getDatabaseConnection()->updateArray('tx_maillogger_domain_model_maillog', ['uid' => '1'], ['tstamp' => $timestamp, 'crdate' => $timestamp]); + $persistenceManager->clearState(); + + $this->anonymizeAllPart($mailLogRepository, $persistenceManager); + + /** @var MailLog $mailLog */ + $mailLog = $mailLogRepository->findAll()->getFirst(); + $this->assertModelSnapshot($mailLog); + } + + /** + * @param $objectManager + * @param $persistenceManager + * @return MailLogRepository + */ + protected function initializeObjectPart(ObjectManager $objectManager, PersistenceManager $persistenceManager) + { + $mailLogRepository = new MailLogRepository($objectManager); + $mailLogRepository->injectPersistenceManager($persistenceManager); + $mailLogRepository->initializeObject(); + return $mailLogRepository; + } + + /** + * @param int $seed + * @return MailLog + */ + protected function getNewMailLog($seed) + { + $faker = Factory::create(); + $faker->seed($seed); + $mailLog = new MailLog(); + $mailLog->setTypoScriptKey($faker->slug($faker->numberBetween(4, 10))); + $mailLog->setSubject($faker->realText($faker->numberBetween(10, 50))); + $mailLog->setMailTo($faker->email); + $mailLog->setMailFrom($faker->email); + $mailLog->setMailCopy($faker->email); + $mailLog->setMailBlindCopy($faker->email); + $mailLog->setHeaders($faker->text($faker->numberBetween(10, 50))); + $mailLog->setMessage($faker->realText($faker->numberBetween(10, 200))); + return $mailLog; + } + + /** + * @param MailLogRepository $mailLogRepository + * @param PersistenceManager $persistenceManager + * @param int $seed + * @return MailLog + * @throws \TYPO3\CMS\Extbase\Persistence\Generic\Exception\NotImplementedException + */ + protected function addingPart(MailLogRepository $mailLogRepository, PersistenceManager $persistenceManager, $seed) + { + $mailLogRepository->add($this->getNewMailLog($seed)); + $persistenceManager->persistAll(); + $persistenceManager->clearState(); + /** @var MailLog $mailLog */ + $mailLog = $mailLogRepository->findAll()->getFirst(); + $persistenceManager->persistAll(); +// $persistenceManager->clearState(); + return $mailLog; + } + + /** + * @param MailLogRepository $mailLogRepository + * @param PersistenceManager $persistenceManager + * @param MailLog $mailLog + * @return MailLog + * @throws \TYPO3\CMS\Extbase\Persistence\Generic\Exception\NotImplementedException + */ + protected function updatingPart(MailLogRepository $mailLogRepository, PersistenceManager $persistenceManager, MailLog $mailLog) + { + $mailLogRepository->update($mailLog); + $persistenceManager->persistAll(); + $persistenceManager->clearState(); + /** @var MailLog $mailLogResult */ + $mailLogResult = $mailLogRepository->findAll()->getFirst(); + $persistenceManager->persistAll(); + $persistenceManager->clearState(); + return $mailLogResult; + } + + /** + * @param MailLogRepository $mailLogRepository + * @param PersistenceManager $persistenceManager + * @throws \TYPO3\CMS\Extbase\Persistence\Generic\Exception\NotImplementedException + */ + protected function cleanupDatabasePart(MailLogRepository $mailLogRepository, PersistenceManager $persistenceManager) + { + $this->callInaccessibleMethod($mailLogRepository, 'cleanupDatabase'); + $persistenceManager->persistAll(); + $persistenceManager->clearState(); + } + + /** + * @param MailLogRepository $mailLogRepository + * @param PersistenceManager $persistenceManager + * @throws \TYPO3\CMS\Extbase\Persistence\Generic\Exception\NotImplementedException + */ + protected function anonymizeAllPart(MailLogRepository $mailLogRepository, PersistenceManager $persistenceManager) + { + $this->callInaccessibleMethod($mailLogRepository, 'anonymizeAll'); + $persistenceManager->persistAll(); + $persistenceManager->clearState(); + } + + protected function assertModelSnapshot($model) + { + $array = $model; + if ($model instanceof AbstractDomainObject) { + $array = $model->_getProperties(); + unset($array['tstamp'], $array['crdate']); + } + $this->assertMatchesJsonSnapshot(json_encode($array)); + } +} diff --git a/Tests/Functional/MailLogRepository/Anonymize7daysLifeTime30daysTest.php b/Tests/Functional/MailLogRepository/Anonymize7daysLifeTime30daysTest.php new file mode 100644 index 0000000..a225339 --- /dev/null +++ b/Tests/Functional/MailLogRepository/Anonymize7daysLifeTime30daysTest.php @@ -0,0 +1,14 @@ +setUpFrontendRootPage(1, [ + 'EXT:mail_logger/Configuration/TypoScript/setup.typoscript', + 'EXT:mail_logger/Tests/Fixtures/MailLogRepositoryTest/Anonymize7daysLifeTime30days.typoscript', + ]); + } +} diff --git a/Tests/Functional/MailLogRepository/AnonymizeDirectlyLifeTimeEmptyTest.php b/Tests/Functional/MailLogRepository/AnonymizeDirectlyLifeTimeEmptyTest.php new file mode 100644 index 0000000..5c6b28e --- /dev/null +++ b/Tests/Functional/MailLogRepository/AnonymizeDirectlyLifeTimeEmptyTest.php @@ -0,0 +1,15 @@ +setUpFrontendRootPage(1, [ + 'EXT:mail_logger/Configuration/TypoScript/setup.typoscript', + 'EXT:mail_logger/Tests/Fixtures/MailLogRepositoryTest/AnonymizeDirectlyLifeTimeEmpty.typoscript', + ]); + } +} diff --git a/Tests/Functional/MailLogRepository/NoAnonymizeLifeTime1minTest.php b/Tests/Functional/MailLogRepository/NoAnonymizeLifeTime1minTest.php new file mode 100644 index 0000000..fe321c0 --- /dev/null +++ b/Tests/Functional/MailLogRepository/NoAnonymizeLifeTime1minTest.php @@ -0,0 +1,15 @@ +setUpFrontendRootPage(1, [ + 'EXT:mail_logger/Configuration/TypoScript/setup.typoscript', + 'EXT:mail_logger/Tests/Fixtures/MailLogRepositoryTest/NoAnonymizeLifeTime1min.typoscript', + ]); + } +} diff --git a/Tests/Functional/MailLogRepository/__snapshots__/Anonymize7daysLifeTime30daysTest__testAdd__1.json b/Tests/Functional/MailLogRepository/__snapshots__/Anonymize7daysLifeTime30daysTest__testAdd__1.json new file mode 100644 index 0000000..803506d --- /dev/null +++ b/Tests/Functional/MailLogRepository/__snapshots__/Anonymize7daysLifeTime30daysTest__testAdd__1.json @@ -0,0 +1,14 @@ +{ + "typoScriptKey": "in-error-consequatur-quaerat-debitis-tempore-consequatur-et-dolore-inventore", + "subject": "Queen. 'Well, I never was so ordered about.", + "message": "Alice began to repeat.", + "mailFrom": "kaela.hilpert@watsica.com", + "mailTo": "gleason.deborah@yahoo.com", + "mailCopy": "emcglynn@stark.com", + "mailBlindCopy": "dallas.kshlerin@wisoky.net", + "headers": "Tempora eos sint harum minus.", + "result": "Not send until now", + "sysLanguageUid": 0, + "uid": 1, + "pid": 1 +} diff --git a/Tests/Functional/MailLogRepository/__snapshots__/Anonymize7daysLifeTime30daysTest__testAnonymizeAll__1.json b/Tests/Functional/MailLogRepository/__snapshots__/Anonymize7daysLifeTime30daysTest__testAnonymizeAll__1.json new file mode 100644 index 0000000..909af5b --- /dev/null +++ b/Tests/Functional/MailLogRepository/__snapshots__/Anonymize7daysLifeTime30daysTest__testAnonymizeAll__1.json @@ -0,0 +1,14 @@ +{ + "typoScriptKey": "qui-ut-ipsum-minus-qui-alias-quis-enim-et", + "subject": "***", + "message": "***", + "mailFrom": "***", + "mailTo": "***", + "mailCopy": "ghermiston@gmail.com", + "mailBlindCopy": "***", + "headers": "Ipsa harum eius officia.", + "result": "***", + "sysLanguageUid": 0, + "uid": 1, + "pid": 1 +} diff --git a/Tests/Functional/MailLogRepository/__snapshots__/Anonymize7daysLifeTime30daysTest__testCleanupDatabase__1.json b/Tests/Functional/MailLogRepository/__snapshots__/Anonymize7daysLifeTime30daysTest__testCleanupDatabase__1.json new file mode 100644 index 0000000..19765bd --- /dev/null +++ b/Tests/Functional/MailLogRepository/__snapshots__/Anonymize7daysLifeTime30daysTest__testCleanupDatabase__1.json @@ -0,0 +1 @@ +null diff --git a/Tests/Functional/MailLogRepository/__snapshots__/Anonymize7daysLifeTime30daysTest__testInitializeObject__1.json b/Tests/Functional/MailLogRepository/__snapshots__/Anonymize7daysLifeTime30daysTest__testInitializeObject__1.json new file mode 100644 index 0000000..e0acccb --- /dev/null +++ b/Tests/Functional/MailLogRepository/__snapshots__/Anonymize7daysLifeTime30daysTest__testInitializeObject__1.json @@ -0,0 +1,6 @@ +{ + "lifetime": "30 days", + "anonymize": true, + "anonymizeAfter": "7 days", + "anonymizeSymbol": "***" +} diff --git a/Tests/Functional/MailLogRepository/__snapshots__/Anonymize7daysLifeTime30daysTest__testUpdateWithDelayAnonymize__1.json b/Tests/Functional/MailLogRepository/__snapshots__/Anonymize7daysLifeTime30daysTest__testUpdateWithDelayAnonymize__1.json new file mode 100644 index 0000000..4543786 --- /dev/null +++ b/Tests/Functional/MailLogRepository/__snapshots__/Anonymize7daysLifeTime30daysTest__testUpdateWithDelayAnonymize__1.json @@ -0,0 +1,14 @@ +{ + "typoScriptKey": "velit-sit-suscipit-ea-voluptas", + "subject": "***", + "message": "***", + "mailFrom": "***", + "mailTo": "***", + "mailCopy": "harvey.lindsey@swaniawski.org", + "mailBlindCopy": "***", + "headers": "Alias maxime error vel.", + "result": "***", + "sysLanguageUid": 0, + "uid": 1, + "pid": 1 +} diff --git a/Tests/Functional/MailLogRepository/__snapshots__/Anonymize7daysLifeTime30daysTest__testUpdate__1.json b/Tests/Functional/MailLogRepository/__snapshots__/Anonymize7daysLifeTime30daysTest__testUpdate__1.json new file mode 100644 index 0000000..b34aee1 --- /dev/null +++ b/Tests/Functional/MailLogRepository/__snapshots__/Anonymize7daysLifeTime30daysTest__testUpdate__1.json @@ -0,0 +1,14 @@ +{ + "typoScriptKey": "quae-eum-rerum-alias-ipsam-cupiditate", + "subject": "King said gravely, 'and go on.", + "message": "Alice. 'You must be,' said the King, who had been running half an hour or so there were any tears. No, there were TWO little shrieks, and more.", + "mailFrom": "concepcion.littel@hotmail.com", + "mailTo": "patricia.stamm@gmail.com", + "mailCopy": "konopelski.shaylee@dubuque.com", + "mailBlindCopy": "gertrude29@padberg.com", + "headers": "Quia modi et quo quis.", + "result": "Not send until now", + "sysLanguageUid": 0, + "uid": 1, + "pid": 1 +} diff --git a/Tests/Functional/MailLogRepository/__snapshots__/AnonymizeDirectlyLifeTimeEmptyTest__testAdd__1.json b/Tests/Functional/MailLogRepository/__snapshots__/AnonymizeDirectlyLifeTimeEmptyTest__testAdd__1.json new file mode 100644 index 0000000..6a0937b --- /dev/null +++ b/Tests/Functional/MailLogRepository/__snapshots__/AnonymizeDirectlyLifeTimeEmptyTest__testAdd__1.json @@ -0,0 +1,14 @@ +{ + "typoScriptKey": "in-error-consequatur-quaerat-debitis-tempore-consequatur-et-dolore-inventore", + "subject": "***", + "message": "***", + "mailFrom": "***", + "mailTo": "***", + "mailCopy": "emcglynn@stark.com", + "mailBlindCopy": "***", + "headers": "Tempora eos sint harum minus.", + "result": "***", + "sysLanguageUid": 0, + "uid": 1, + "pid": 1 +} diff --git a/Tests/Functional/MailLogRepository/__snapshots__/AnonymizeDirectlyLifeTimeEmptyTest__testAnonymizeAll__1.json b/Tests/Functional/MailLogRepository/__snapshots__/AnonymizeDirectlyLifeTimeEmptyTest__testAnonymizeAll__1.json new file mode 100644 index 0000000..909af5b --- /dev/null +++ b/Tests/Functional/MailLogRepository/__snapshots__/AnonymizeDirectlyLifeTimeEmptyTest__testAnonymizeAll__1.json @@ -0,0 +1,14 @@ +{ + "typoScriptKey": "qui-ut-ipsum-minus-qui-alias-quis-enim-et", + "subject": "***", + "message": "***", + "mailFrom": "***", + "mailTo": "***", + "mailCopy": "ghermiston@gmail.com", + "mailBlindCopy": "***", + "headers": "Ipsa harum eius officia.", + "result": "***", + "sysLanguageUid": 0, + "uid": 1, + "pid": 1 +} diff --git a/Tests/Functional/MailLogRepository/__snapshots__/AnonymizeDirectlyLifeTimeEmptyTest__testCleanupDatabase__1.json b/Tests/Functional/MailLogRepository/__snapshots__/AnonymizeDirectlyLifeTimeEmptyTest__testCleanupDatabase__1.json new file mode 100644 index 0000000..9497999 --- /dev/null +++ b/Tests/Functional/MailLogRepository/__snapshots__/AnonymizeDirectlyLifeTimeEmptyTest__testCleanupDatabase__1.json @@ -0,0 +1,14 @@ +{ + "typoScriptKey": "assumenda-voluptatem-non-iusto-fuga-eos-accusantium-id-possimus-hic-maiores", + "subject": "***", + "message": "***", + "mailFrom": "***", + "mailTo": "***", + "mailCopy": "carmine08@mclaughlin.biz", + "mailBlindCopy": "***", + "headers": "Eum qui fugit numquam consequatur.", + "result": "***", + "sysLanguageUid": 0, + "uid": 1, + "pid": 1 +} diff --git a/Tests/Functional/MailLogRepository/__snapshots__/AnonymizeDirectlyLifeTimeEmptyTest__testInitializeObject__1.json b/Tests/Functional/MailLogRepository/__snapshots__/AnonymizeDirectlyLifeTimeEmptyTest__testInitializeObject__1.json new file mode 100644 index 0000000..af00d7c --- /dev/null +++ b/Tests/Functional/MailLogRepository/__snapshots__/AnonymizeDirectlyLifeTimeEmptyTest__testInitializeObject__1.json @@ -0,0 +1,6 @@ +{ + "lifetime": "", + "anonymize": true, + "anonymizeAfter": "0", + "anonymizeSymbol": "***" +} diff --git a/Tests/Functional/MailLogRepository/__snapshots__/AnonymizeDirectlyLifeTimeEmptyTest__testUpdateWithDelayAnonymize__1.json b/Tests/Functional/MailLogRepository/__snapshots__/AnonymizeDirectlyLifeTimeEmptyTest__testUpdateWithDelayAnonymize__1.json new file mode 100644 index 0000000..4543786 --- /dev/null +++ b/Tests/Functional/MailLogRepository/__snapshots__/AnonymizeDirectlyLifeTimeEmptyTest__testUpdateWithDelayAnonymize__1.json @@ -0,0 +1,14 @@ +{ + "typoScriptKey": "velit-sit-suscipit-ea-voluptas", + "subject": "***", + "message": "***", + "mailFrom": "***", + "mailTo": "***", + "mailCopy": "harvey.lindsey@swaniawski.org", + "mailBlindCopy": "***", + "headers": "Alias maxime error vel.", + "result": "***", + "sysLanguageUid": 0, + "uid": 1, + "pid": 1 +} diff --git a/Tests/Functional/MailLogRepository/__snapshots__/AnonymizeDirectlyLifeTimeEmptyTest__testUpdate__1.json b/Tests/Functional/MailLogRepository/__snapshots__/AnonymizeDirectlyLifeTimeEmptyTest__testUpdate__1.json new file mode 100644 index 0000000..6ab9e4e --- /dev/null +++ b/Tests/Functional/MailLogRepository/__snapshots__/AnonymizeDirectlyLifeTimeEmptyTest__testUpdate__1.json @@ -0,0 +1,14 @@ +{ + "typoScriptKey": "quae-eum-rerum-alias-ipsam-cupiditate", + "subject": "***", + "message": "***", + "mailFrom": "***", + "mailTo": "***", + "mailCopy": "konopelski.shaylee@dubuque.com", + "mailBlindCopy": "***", + "headers": "Quia modi et quo quis.", + "result": "***", + "sysLanguageUid": 0, + "uid": 1, + "pid": 1 +} diff --git a/Tests/Functional/MailLogRepository/__snapshots__/NoAnonymizeLifeTime1minTest__testAdd__1.json b/Tests/Functional/MailLogRepository/__snapshots__/NoAnonymizeLifeTime1minTest__testAdd__1.json new file mode 100644 index 0000000..803506d --- /dev/null +++ b/Tests/Functional/MailLogRepository/__snapshots__/NoAnonymizeLifeTime1minTest__testAdd__1.json @@ -0,0 +1,14 @@ +{ + "typoScriptKey": "in-error-consequatur-quaerat-debitis-tempore-consequatur-et-dolore-inventore", + "subject": "Queen. 'Well, I never was so ordered about.", + "message": "Alice began to repeat.", + "mailFrom": "kaela.hilpert@watsica.com", + "mailTo": "gleason.deborah@yahoo.com", + "mailCopy": "emcglynn@stark.com", + "mailBlindCopy": "dallas.kshlerin@wisoky.net", + "headers": "Tempora eos sint harum minus.", + "result": "Not send until now", + "sysLanguageUid": 0, + "uid": 1, + "pid": 1 +} diff --git a/Tests/Functional/MailLogRepository/__snapshots__/NoAnonymizeLifeTime1minTest__testAnonymizeAll__1.json b/Tests/Functional/MailLogRepository/__snapshots__/NoAnonymizeLifeTime1minTest__testAnonymizeAll__1.json new file mode 100644 index 0000000..49a9c4f --- /dev/null +++ b/Tests/Functional/MailLogRepository/__snapshots__/NoAnonymizeLifeTime1minTest__testAnonymizeAll__1.json @@ -0,0 +1,14 @@ +{ + "typoScriptKey": "qui-ut-ipsum-minus-qui-alias-quis-enim-et", + "subject": "Soup! Beau--ootiful Soo--oop! Soo--oop of the.", + "message": "Alice had been to her, one on each side to guard him; and near the looking-glass. There was a large dish of tarts upon it: they looked so good, that it was as much use in the last few.", + "mailFrom": "bridie50@ernser.com", + "mailTo": "jdickinson@mclaughlin.com", + "mailCopy": "ghermiston@gmail.com", + "mailBlindCopy": "watsica.liana@gmail.com", + "headers": "Ipsa harum eius officia.", + "result": "Not send until now", + "sysLanguageUid": 0, + "uid": 1, + "pid": 1 +} diff --git a/Tests/Functional/MailLogRepository/__snapshots__/NoAnonymizeLifeTime1minTest__testCleanupDatabase__1.json b/Tests/Functional/MailLogRepository/__snapshots__/NoAnonymizeLifeTime1minTest__testCleanupDatabase__1.json new file mode 100644 index 0000000..19765bd --- /dev/null +++ b/Tests/Functional/MailLogRepository/__snapshots__/NoAnonymizeLifeTime1minTest__testCleanupDatabase__1.json @@ -0,0 +1 @@ +null diff --git a/Tests/Functional/MailLogRepository/__snapshots__/NoAnonymizeLifeTime1minTest__testInitializeObject__1.json b/Tests/Functional/MailLogRepository/__snapshots__/NoAnonymizeLifeTime1minTest__testInitializeObject__1.json new file mode 100644 index 0000000..1444398 --- /dev/null +++ b/Tests/Functional/MailLogRepository/__snapshots__/NoAnonymizeLifeTime1minTest__testInitializeObject__1.json @@ -0,0 +1,6 @@ +{ + "lifetime": "1 min", + "anonymize": false, + "anonymizeAfter": "0", + "anonymizeSymbol": "***" +} diff --git a/Tests/Functional/MailLogRepository/__snapshots__/NoAnonymizeLifeTime1minTest__testUpdateWithDelayAnonymize__1.json b/Tests/Functional/MailLogRepository/__snapshots__/NoAnonymizeLifeTime1minTest__testUpdateWithDelayAnonymize__1.json new file mode 100644 index 0000000..81c8bc1 --- /dev/null +++ b/Tests/Functional/MailLogRepository/__snapshots__/NoAnonymizeLifeTime1minTest__testUpdateWithDelayAnonymize__1.json @@ -0,0 +1,14 @@ +{ + "typoScriptKey": "velit-sit-suscipit-ea-voluptas", + "subject": "I don't keep the same tone, exactly.", + "message": "Knave 'Turn them over!' The Knave of Hearts, who only bowed and smiled in reply. 'That's right!' shouted the Queen. 'It proves nothing of the March.", + "mailFrom": "aufderhar.jasen@yahoo.com", + "mailTo": "davis.joshua@gmail.com", + "mailCopy": "harvey.lindsey@swaniawski.org", + "mailBlindCopy": "auer.ralph@gleichner.biz", + "headers": "Alias maxime error vel.", + "result": "Not send until now", + "sysLanguageUid": 0, + "uid": 1, + "pid": 1 +} diff --git a/Tests/Functional/MailLogRepository/__snapshots__/NoAnonymizeLifeTime1minTest__testUpdate__1.json b/Tests/Functional/MailLogRepository/__snapshots__/NoAnonymizeLifeTime1minTest__testUpdate__1.json new file mode 100644 index 0000000..b34aee1 --- /dev/null +++ b/Tests/Functional/MailLogRepository/__snapshots__/NoAnonymizeLifeTime1minTest__testUpdate__1.json @@ -0,0 +1,14 @@ +{ + "typoScriptKey": "quae-eum-rerum-alias-ipsam-cupiditate", + "subject": "King said gravely, 'and go on.", + "message": "Alice. 'You must be,' said the King, who had been running half an hour or so there were any tears. No, there were TWO little shrieks, and more.", + "mailFrom": "concepcion.littel@hotmail.com", + "mailTo": "patricia.stamm@gmail.com", + "mailCopy": "konopelski.shaylee@dubuque.com", + "mailBlindCopy": "gertrude29@padberg.com", + "headers": "Quia modi et quo quis.", + "result": "Not send until now", + "sysLanguageUid": 0, + "uid": 1, + "pid": 1 +} diff --git a/composer.json b/composer.json index 9578ca2..05dd7bd 100644 --- a/composer.json +++ b/composer.json @@ -15,18 +15,49 @@ }, "pluswerk/grumphp-config": { "auto-setting": true + }, + "typo3/cms": { + "cms-package-dir": "{$vendor-dir}/typo3/cms", + "web-dir": ".Build/Web", + "Package": { + "partOfMinimalUsableSystem": true + } } }, + "config": { + "sort-packages": true + }, + "scripts": { + "post-autoload-dump": [ + "mkdir -p .Build/Web/typo3conf/ext/", + "[ -L .Build/Web/typo3conf/ext/mail_logger ] || ln -snvf ../../../../. .Build/Web/typo3conf/ext/mail_logger" + ], + "test": "typo3DatabaseName='typo3_test' typo3DatabaseHost='localhost' typo3DatabaseUsername='root' typo3DatabasePassword='' TYPO3_PATH_WEB='.Build/Web' vendor/bin/phpunit --color=always -c vendor/nimut/testing-framework/res/Configuration/FunctionalTests.xml Tests/Functional", + "test:update": "typo3DatabaseName='typo3_test' typo3DatabaseHost='localhost' typo3DatabaseUsername='root' typo3DatabasePassword='' TYPO3_PATH_WEB='.Build/Web' vendor/bin/phpunit --color=always -c vendor/nimut/testing-framework/res/Configuration/FunctionalTests.xml Tests/Functional -d --update-snapshots" + }, + "scripts-descriptions": { + "test": "run tests for this extension" + }, "autoload": { "psr-4": { "Pluswerk\\MailLogger\\": "Classes/" } }, + "autoload-dev": { + "psr-4": { + "Pluswerk\\MailLogger\\Tests\\": "Tests/" + } + }, "require": { "php": ">=5.6" }, "require-dev": { - "pluswerk/grumphp-config": "2.*" + "pluswerk/grumphp-config": "2.*", + "typo3/cms": "8.7.*", + "nimut/testing-framework": "4.*", + "spatie/phpunit-snapshot-assertions": "1.*", + "ext-json": "*", + "fzaninotto/faker": "1.*" }, "replace": { "mail_logger": "self.version", diff --git a/ext_emconf.php b/ext_emconf.php index 76796b6..760e690 100644 --- a/ext_emconf.php +++ b/ext_emconf.php @@ -11,7 +11,7 @@ 'uploadfolder' => '0', 'createDirs' => '', 'clearCacheOnLoad' => 0, - 'version' => '1.2.1', + 'version' => '1.2.2', 'constraints' => [ 'depends' => [ 'typo3' => '7.6.0-8.99.99',