Commit Graph

87 Commits

Author SHA1 Message Date
Rostislav Wolny
18b790f7c6 Uncomment logs table cleanup in tests
I commented it during debugging.
[MAILPOET-4684]
2022-10-13 14:21:43 +02:00
Rostislav Wolny
69ac29d0a7 Allow immediate processing of just prepared tasks in cron worker runner
Preparing simple worker tasks is super fast, because it just switches the state to null.
But the processing of just prepared tasks required the second worker run and also second cron run.
This change optimize the behavior and in case there is still time left it immediately starts processing the tasks.
[MAILPOET-4684]
2022-10-13 14:21:43 +02:00
Rostislav Wolny
05b441378d Add logging of suspiciously terminated cron runs
[MAILPOET-4684]
2022-10-13 14:21:43 +02:00
Rostislav Wolny
de22257af3 Do not schedule next action scheduler run after suspiciously short run
In case we still have work to do but the previous run ended too early and it still had some execution time left
we will not schedule new action.
This is prevention for creating a run action every one second in case there is e.g. some stuck job.
Next run will be triggered within the trigger action that runs every 2 minutes.
[MAILPOET-4684]
2022-10-13 14:21:43 +02:00
Rostislav Wolny
a03f8f1c30 Use action scheduler's unique single action for daemon run
With the new unique parameter added in the action scheduler 3.5.0 the
as_schedule_single_action that schedules an immediate action
seems to be more convenient for the action scheduler.
We get better control over the scheduling of subsequent runs.
Note: We don't want to use the async action that is also executed immediately,
but it has the highest priority and we don't want to block actions scheduled by other plugins.
[MAILPOET-4684]
2022-10-13 14:21:43 +02:00
Rostislav Wolny
e33539c5ca Prevent triggering cron when sending is waiting for retry
[MAILPOET-4686]
2022-10-13 14:21:43 +02:00
David Remer
bb04935f29 Add repository to testee
[MAILPOET-4708]
2022-10-10 17:13:17 +02:00
David Remer
1a8f0c384c Improve logging of errors in cron
Sometimes errors overlap each other so that the 'Last Seen error' we log
does not provide sufficient information on the cause of a problem.

E.g. one worker might cause an SQL issue, which closes the EntityManager and a
subsequent worker might overwrite this error with the information that the
EntityManager is closed.

With this commit, both those issues will be logged as an error.

[MAILPOET-4699]
2022-10-06 12:06:13 +02:00
Rodrigo Primo
54ea394f82 Deprecate filter as part of a Doctrine refactor
This commit deprecates the filter
mailpoet_sending_newsletter_render_after and replaces it with
mailpoet_sending_newsletter_render_after_pre_process. This was necessary
because as part of a Doctrine refactor one of the parameters passed to
the old filter changed from a Newsletter model to a Newsletter entity.

[MAILPOET-4680]
2022-10-04 14:41:00 +02:00
Rodrigo Primo
d39440f1dc Refactor Newsletter::preProcessNewsletter() to use Doctrine
This commit also removes almost all the usages of the old Newsletter
model from NewsletterTest.

[MAILPOET-4680]
2022-10-04 14:41:00 +02:00
Rodrigo Primo
83319949ef Use WooCommerce code instead of direct query to get highest order ID
[MAILPOET-4570]
2022-10-03 09:30:42 +02:00
Rodrigo Primo
7472a0a815 Change WooCommerceSyncTest to test also getHighestOrderId()
[MAILPOET-4570]
2022-10-03 09:30:42 +02:00
Jan Lysý
0551d02815 Add refreshing sending queue
Because we are still working with old model on some places, it's necessary to refresh both sides of the relation.
[MAILPOET-4685]
2022-09-29 15:19:09 -03:00
Rostislav Wolny
45257b7b99 Simplify subscribers last engagement migration by ignoring Woo data
[MAILPOET-4578]
2022-09-26 10:20:32 +02:00
Rodrigo Primo
f578f3f16a Remove method Tasks\Newsletter\getNewsletterSegments()
This method was used only once inside SendingQueue and it can be
replaced by NewsletterEntity::getSegmentIds() to simplify the code.

[MAILPOET-4363]
2022-09-21 16:03:21 +02:00
Rodrigo Primo
686ee18d16 Replace calls to assert() with Assert::assertInstanceOf()
Doing this as it was mentioned in the review process of the PR.

For more context see: https://wp.me/pcNwfB-wR

[MAILPOET-4363]
2022-09-21 16:03:21 +02:00
Rodrigo Primo
ccbdbd3e93 Refactor getNewsletterFromQueue() to use Doctrine instead of Paris
[MAILPOET-4363]
2022-09-21 16:03:21 +02:00
Rodrigo Primo
4ca656a217 Rename $queue to $sendingTask
Doing this for consistency and to make it more clear that $sendingTask
contains an instance of \MailPoet\Tasks\Sending and not an instance of
\MailPoet\Models\SendingQueue.

[MAILPOET-4363]
2022-09-21 16:03:21 +02:00
Rodrigo Primo
a7d0ad6568 Set the type of all the Newsletter parameters that use the Sending class
[MAILPOET-4363]
2022-09-21 16:03:21 +02:00
Rodrigo Primo
3b9a60c039 Rename NewsletterTest::queue to NewsletterTest::sendingTask
Doing this for consistency and to better makr that this property
contains an instance of \MailPoet\Tasks\Sending and not an instance
of \MailPoet\Models\SendingQueue.

[MAILPOET-4363]
2022-09-21 16:03:21 +02:00
Rodrigo Primo
168ce20a40 Use NewsletterEntity instead of Newsletter model in Links
[MAILPOET-4363]
2022-09-21 16:03:21 +02:00
Rodrigo Primo
9a92068d5b Refactor Newsletter to use Doctrine instead of the Newsletter model
[MAILPOET-4363]
2022-09-21 16:03:21 +02:00
Rodrigo Primo
fd0acbd6cf Refactor Newsletter to use Doctrine instead of the NewsletterSegment model
[MAILPOET-4363]
2022-09-21 16:03:21 +02:00
Rodrigo Primo
f4053b0583 Stop using a mock of NewslettersRepository to prevent errors in tests
This commit changes the SendingQueueTest test class to always use a real
NewslettersRepository object instead of a mock object when instantiating
SendingQueue. This is necessary to prevent false errors in the tests.

Using a mock of the NewslettersRepository in this test class means that
all code inside SendingQueue that uses this repository could behave in
unpredictable ways. As it was happening with a few tests incorrectly
failing after dd6e02e2c16a3a0ef7ad2c12479917e33c312c77:

https://app.circleci.com/pipelines/github/mailpoet/mailpoet/11132/workflows/7b4df151-5a10-48f0-9711-dd590a764880/jobs/192389/tests#failed-test-0

In this case, the code was not changing the status of the newsletter
because findOneById() was returning an empty Newsletter entity instead
of the real Newsletter entity that corresponds to the object in the
database. And, thus, $newsletter->getType() was returning `null` instead
of `standard`.

This problem was already partially addressed in the commit below that
removed some of the usages of the NewslettersRepository mock:

5042cdd15e

[MAILPOET-4363]
2022-09-21 16:03:21 +02:00
Rodrigo Primo
a4bb49852d Replace Subscriber model with Doctrine in NewsletterTest
[MAILPOET-4363]
2022-09-21 16:03:21 +02:00
Rodrigo Primo
2137503e09 Replace NewsletterSegment model with Doctrine in NewsletterTest
[MAILPOET-4363]
2022-09-21 16:03:21 +02:00
Rodrigo Primo
9bf025874c Replace SendingQueue model with Doctrine in NewsletterTest
[MAILPOET-4363]
2022-09-21 16:03:21 +02:00
Rodrigo Primo
cc43b25b7d Replace most of the uses of Newsletter model with Doctrine in NewsletterTest
[MAILPOET-4363]
2022-09-21 16:03:21 +02:00
Jan Lysý
97801cfe25 Remove usage of Sending::getScheduledQueues
[MAILPOET-4367]
2022-09-19 11:07:16 +02:00
Rostislav Wolny
ed5bd8de61 Add Woo dependent tests to woo group
Mark all integration tests that are related to WooCommerce with group "woo".
[MAILPOET-4566]
2022-09-08 13:02:52 +02:00
John Oleksowicz
8665750767 Use new helpers for creating orders
MAILPOET-4566
2022-09-08 13:02:52 +02:00
Jan Jakes
047bd94d98 Implement sending for automation emails
[PREMIUM-194]
2022-09-08 09:20:20 +02:00
Jan Lysý
fecb26b3b5 Replace usage ScheduledTask::touchAllByIds with repository
[MAILPOET-4309]
2022-08-31 13:42:21 +02:00
Jan Lysý
5f88a27ccb Extend integration test
[MAILPOET-4310]
2022-08-22 11:04:45 +02:00
Jan Lysý
bfc2a7d2af Update dependencies in tests
[MAILPOET-4310]
2022-08-22 11:04:45 +02:00
Rodrigo Primo
d3abbddf73 Add a basic integration test to cover the happy path of SubscriberLinkTokens
[MAILPOET-4345]
2022-08-04 11:52:57 +02:00
Rodrigo Primo
4a8ac483f6 Use getServiceWithOverrides() instead of instantiating the tested class
This commit changes the way InactiveSubscribersTest
instantiates the tested class InactiveSubscribers. Instead of calling it
directly, it uses \MailPoetTest::getServiceWithOverrides(). This way, we
don't have to update all the tests when there is a change to the
signature of the constructor of the tested class.

[MAILPOET-4344]
2022-08-04 11:10:50 +02:00
Rodrigo Primo
af396021db Move the query to calculate the max subscriber ID to SubscribersRepository
[MAILPOET-4344]
2022-08-04 11:10:50 +02:00
Rodrigo Primo
0f7a3c3e00 Replace Paris models with Doctrine entities in SimpleWorkerTest
[MAILPOET-4344]
2022-08-04 11:10:50 +02:00
Rodrigo Primo
8a29519b31 Replace Paris models with Doctrine entities in InactiveSubscribers
[MAILPOET-4344]
2022-08-04 11:10:50 +02:00
Rodrigo Primo
4a0ee78467 Replace Paris models with Doctrine entities in ShortcodesTest
[MAILPOET-4364]
2022-08-04 10:55:03 +02:00
Rostislav Wolny
c44758b90d Refactor action scheduler deactivation into DaemonActionSchedulerRunner::init
[MAILPOET-4274]
2022-08-03 10:36:57 +02:00
Rostislav Wolny
977f9beb87 Refactor deactivation of MailPoet cron actions to run only once
[MAILPOET-4274]
2022-08-03 10:36:57 +02:00
Rostislav Wolny
2df7d2f686 Split integration tests after refactoring AS runner
[MAILPOET-4274]
2022-08-03 10:36:57 +02:00
Rostislav Wolny
d3e2bcdf34 Refactor daemon trigger and daemon run actions to extra classes
[MAILPOET-4274]
2022-08-03 10:36:57 +02:00
Rostislav Wolny
dfae17ed94 Add missing return and parameter types to action scheduler related classes
[MAILPOET-4274]
2022-08-03 10:36:57 +02:00
Rostislav Wolny
2ba1696d53 Add adaptive execution limit when daemon runs inside Action Scheduler
We use action_scheduler_maximum_execution_time_likely_to_be_exceeded filter for reading remaining execution limit
tracked in the Action Scheduler runner.
Then we use the remaining limit minus safety margin for the daemon execution.

[MAILPOET-4274]
2022-08-03 10:36:57 +02:00
Rostislav Wolny
cacb44444c Add DaemonActionSchedulerRunner integration test
[MAILPOET-4274]
2022-08-03 10:36:57 +02:00
Rostislav Wolny
5deea8a724 Fix CronWorkerRunner integration test
CronWorkerRunner sets internal timer in its constructor function.
This works fine in classic web page request. But in integration tests
in might be created and cached in DI, so for some late running tests
it throws timeout exception.
This commit fixes the issue by using fresh instance of CronWorkerRunner
instead of "cached" one from DI container.

[MAILPOET-4274]
2022-08-03 10:36:57 +02:00
Jan Lysý
155445b313 Remove old model from SendingQueue Migration
[MAILPOET-4358]
2022-08-01 13:09:20 +02:00