Release 2.11 (#4580)

This commit is contained in:
Kevin Papst
2024-02-02 13:52:24 +01:00
committed by GitHub
parent a9a32c83ac
commit 49e69d1ae3
55 changed files with 347 additions and 264 deletions

View File

@@ -36,15 +36,11 @@ class TimesheetControllerTest extends APIControllerBaseTest
*/
protected function importFixtureForUser(string $role, int $amount = 10): array
{
$fixture = new TimesheetFixtures();
$fixture
->setFixedRate(true)
->setHourlyRate(true)
->setAmount($amount)
->setUser($this->getUserByRole($role))
->setAllowEmptyDescriptions(false)
->setStartDate((new \DateTime('first day of this month'))->setTime(0, 0, 1))
;
$fixture = new TimesheetFixtures($this->getUserByRole($role), $amount);
$fixture->setFixedRate(true);
$fixture->setHourlyRate(true);
$fixture->setAllowEmptyDescriptions(false);
$fixture->setStartDate((new \DateTime('first day of this month'))->setTime(0, 0, 1));
return $this->importFixture($fixture);
}
@@ -91,14 +87,10 @@ class TimesheetControllerTest extends APIControllerBaseTest
$client = $this->getClientForAuthenticatedUser(User::ROLE_TEAMLEAD);
$this->importFixtureForUser(User::ROLE_USER);
$fixture = new TimesheetFixtures();
$fixture
->setFixedRate(true)
->setHourlyRate(true)
->setAmount(7)
->setUser($this->getUserByRole(User::ROLE_ADMIN))
->setStartDate(new \DateTime('-10 days'))
;
$fixture = new TimesheetFixtures($this->getUserByRole(User::ROLE_ADMIN), 7);
$fixture->setFixedRate(true);
$fixture->setHourlyRate(true);
$fixture->setStartDate(new \DateTime('-10 days'));
$this->importFixture($fixture);
$query = ['user' => 2];
@@ -131,14 +123,10 @@ class TimesheetControllerTest extends APIControllerBaseTest
$client = $this->getClientForAuthenticatedUser(User::ROLE_TEAMLEAD);
$this->importFixtureForUser(User::ROLE_USER);
$fixture = new TimesheetFixtures();
$fixture
->setFixedRate(true)
->setHourlyRate(true)
->setAmount(7)
->setUser($this->getUserByRole(User::ROLE_ADMIN))
->setStartDate(new \DateTime('-10 days'))
;
$fixture = new TimesheetFixtures($this->getUserByRole(User::ROLE_ADMIN), 7);
$fixture->setFixedRate(true);
$fixture->setHourlyRate(true);
$fixture->setStartDate(new \DateTime('-10 days'));
$this->importFixture($fixture);
$query = ['user' => 'all'];
@@ -262,14 +250,10 @@ class TimesheetControllerTest extends APIControllerBaseTest
$client = $this->getClientForAuthenticatedUser(User::ROLE_USER);
$this->importFixtureForUser(User::ROLE_USER);
$fixture = new TimesheetFixtures();
$fixture
->setExported(true)
->setAmount(7)
->setUser($this->getUserByRole(User::ROLE_USER))
->setStartDate(new \DateTime('first day of this month'))
->setAllowEmptyDescriptions(false)
;
$fixture = new TimesheetFixtures($this->getUserByRole(User::ROLE_USER), 7);
$fixture->setExported(true);
$fixture->setStartDate(new \DateTime('first day of this month'));
$fixture->setAllowEmptyDescriptions(false);
$this->importFixture($fixture);
$begin = new \DateTime('first day of this month');
@@ -864,15 +848,11 @@ class TimesheetControllerTest extends APIControllerBaseTest
$start = new \DateTime('-10 days');
$fixture = new TimesheetFixtures();
$fixture
->setFixedRate(true)
->setHourlyRate(true)
->setAmount(0)
->setUser($this->getUserByRole(User::ROLE_USER))
->setStartDate($start)
->setAmountRunning(3)
;
$fixture = new TimesheetFixtures($this->getUserByRole(User::ROLE_USER));
$fixture->setFixedRate(true);
$fixture->setHourlyRate(true);
$fixture->setStartDate($start);
$fixture->setAmountRunning(3);
$this->importFixture($fixture);
$this->request($client, '/api/timesheets/active');
@@ -989,7 +969,6 @@ class TimesheetControllerTest extends APIControllerBaseTest
->setUser($this->getUserByRole(User::ROLE_USER))
->setStartDate(new \DateTime('-10 days'))
->setAllowEmptyDescriptions(false)
->setUseTags(true)
->setTags(['Test', 'Administration']);
$this->importFixture($fixture);

View File

@@ -10,6 +10,7 @@
namespace App\Tests\Controller;
use App\Entity\Activity;
use App\Entity\Tag;
use App\Entity\Timesheet;
use App\Entity\TimesheetMeta;
use App\Entity\User;
@@ -49,11 +50,17 @@ class TimesheetControllerTest extends ControllerBaseTest
$client = $this->getClientForAuthenticatedUser(User::ROLE_USER);
$start = new \DateTime('first day of this month');
$fixture = new TagFixtures();
$fixture->importAmount(TagRepository::MAX_AMOUNT_SELECT);
$fixture->addTagNameToCreate('bar');
$this->importFixture($fixture);
$fixture = new TimesheetFixtures();
$fixture->setAmount(5);
$fixture->setAmountRunning(2);
$fixture->setUser($this->getUserByRole(User::ROLE_USER));
$fixture->setStartDate($start);
$fixture->setTags(['foo']);
$this->importFixture($fixture);
$this->request($client, '/timesheet/');
@@ -69,6 +76,7 @@ class TimesheetControllerTest extends ControllerBaseTest
'customers' => [1],
'projects' => [1],
'activities' => [1],
'tags' => 'foo',
]);
$this->assertTrue($client->getResponse()->isSuccessful());
@@ -85,20 +93,27 @@ class TimesheetControllerTest extends ControllerBaseTest
$client = $this->getClientForAuthenticatedUser(User::ROLE_USER);
$start = new \DateTime('first day of this month');
$fixture = new TagFixtures();
$fixture->addTagNameToCreate('bar');
$fixture->addTagNameToCreate('foo');
/** @var array<Tag> $tags */
$tags = $this->importFixture($fixture);
$id = $tags[1]->getId();
$fixture = new TimesheetFixtures();
$fixture->setAmount(5);
$fixture->setUser($this->getUserByRole(User::ROLE_USER));
$fixture->setStartDate($start);
$fixture->setCallback(function (Timesheet $timesheet) {
$fixture->setCallback(function (Timesheet $timesheet) use ($tags) {
$timesheet->setDescription('I am a foobar with tralalalala some more content');
$timesheet->setMetaField((new TimesheetMeta())->setName('location')->setValue('homeoffice'));
$timesheet->setMetaField((new TimesheetMeta())->setName('feature')->setValue('timetracking'));
$timesheet->addTag($tags[1]);
});
$this->importFixture($fixture);
$fixture = new TimesheetFixtures();
$fixture->setAmount(5);
$fixture = new TimesheetFixtures($this->getUserByRole(User::ROLE_USER), 5);
$fixture->setAmountRunning(5);
$fixture->setUser($this->getUserByRole(User::ROLE_USER));
$fixture->setStartDate($start);
$this->importFixture($fixture);
@@ -108,6 +123,7 @@ class TimesheetControllerTest extends ControllerBaseTest
$form = $client->getCrawler()->filter('form.searchform')->form();
$client->submit($form, [
'searchTerm' => 'location:homeoffice foobar',
'tags' => [$id],
]);
$this->assertTrue($client->getResponse()->isSuccessful());
@@ -516,6 +532,7 @@ class TimesheetControllerTest extends ControllerBaseTest
$fixture = new TagFixtures();
$fixture->importAmount(TagRepository::MAX_AMOUNT_SELECT);
$fixture->addTagNameToCreate('two');
$this->importFixture($fixture);
$this->request($client, '/timesheet/create?begin=2018-08-02&end=2018-08-02&tags=one,two,three');
@@ -548,7 +565,7 @@ class TimesheetControllerTest extends ControllerBaseTest
$expected = new \DateTime('2018-08-02T18:00:00');
$this->assertEquals($expected->format(\DateTimeInterface::ATOM), $timesheet->getEnd()->format(\DateTimeInterface::ATOM));
$this->assertEquals(['one', 'two', 'three'], $timesheet->getTagsAsArray());
$this->assertEquals(['two'], $timesheet->getTagsAsArray());
}
public function testCreateActionWithDescription(): void

View File

@@ -20,23 +20,15 @@ final class TagFixtures implements TestFixture
/**
* @var string[]
*/
private $tagArray = [];
/**
* @var callable
*/
private $callback;
private array $tagArray = [];
private ?\Closure $callback = null;
/**
* Will be called prior to persisting the object.
*
* @param callable $callback
* @return TagFixtures
*/
public function setCallback(callable $callback): TagFixtures
public function setCallback(\Closure $callback): void
{
$this->callback = $callback;
return $this;
}
/**
@@ -47,15 +39,17 @@ final class TagFixtures implements TestFixture
return $this->tagArray;
}
public function addTagNameToCreate(string $name): void
{
$this->tagArray[] = $name;
}
/**
* @param string[] $tagArray
* @return TagFixtures
*/
public function setTagArray(array $tagArray): TagFixtures
public function setTagArray(array $tagArray): void
{
$this->tagArray = $tagArray;
return $this;
}
public function importAmount(int $amount): void
@@ -68,7 +62,6 @@ final class TagFixtures implements TestFixture
}
/**
* @param ObjectManager $manager
* @return Tag[]
*/
public function load(ObjectManager $manager): array

View File

@@ -24,71 +24,32 @@ use Faker\Factory;
*/
final class TimesheetFixtures implements TestFixture
{
/**
* @var User
*/
private $user;
/**
* @var int
*/
private $amount = 0;
/**
* @var int
*/
private $running = 0;
private int $running = 0;
/**
* @var Activity[]
*/
private $activities = [];
private array $activities = [];
/**
* @var Project[]
*/
private $projects = [];
/**
* @var \DateTime
*/
private $startDate;
/**
* @var \DateTime
*/
private $fixedStartDate;
/**
* @var bool
*/
private $fixedRate = false;
private array $projects = [];
private ?\DateTime $startDate = null;
private ?\DateTime $fixedStartDate = null;
private bool $fixedRate = false;
/**
* @var callable
*/
private $callback;
private bool $hourlyRate = false;
private bool $allowEmptyDescriptions = true;
private bool $exported = false;
/**
* @var bool
* @var array<string|Tag>
*/
private $hourlyRate = false;
/**
* @var bool
*/
private $allowEmptyDescriptions = true;
/**
* @var bool
*/
private $exported = false;
/**
* @var bool
*/
private $useTags = false;
/**
* @var array
*/
private $tags = [];
private array $tags = [];
public function __construct(?User $user = null, ?int $amount = null)
public function __construct(private ?User $user = null, private int $amount = 0)
{
if ($user !== null) {
$this->setUser($user);
}
if ($amount !== null) {
$this->setAmount($amount);
}
}
public function setAllowEmptyDescriptions(bool $allowEmptyDescriptions): TimesheetFixtures
@@ -183,13 +144,6 @@ final class TimesheetFixtures implements TestFixture
return $this;
}
public function setUseTags(bool $useTags): TimesheetFixtures
{
$this->useTags = $useTags;
return $this;
}
/**
* @param string[] $tags
* @return TimesheetFixtures
@@ -234,14 +188,19 @@ final class TimesheetFixtures implements TestFixture
$faker = Factory::create();
$users = [$this->user];
if ($this->user === null) {
$users = [];
if ($this->user !== null) {
$users[] = $this->user;
} else {
$users = $this->getAllUsers($manager);
}
$tags = $this->getTagObjectList();
foreach ($tags as $tag) {
$manager->persist($tag);
if ($tag->getId() === null) {
$manager->persist($tag);
}
}
$manager->flush();
@@ -310,21 +269,25 @@ final class TimesheetFixtures implements TestFixture
return $created;
}
/**
* @return array<Tag>
*/
private function getTagObjectList(): array
{
if (true === $this->useTags) {
$all = [];
foreach ($this->tags as $tagName) {
$tagObject = new Tag();
$tagObject->setName($tagName);
$all[] = $tagObject;
$all = [];
foreach ($this->tags as $tagName) {
if ($tagName instanceof Tag) {
$all[] = $tagName;
continue;
}
return $all;
$tagObject = new Tag();
$tagObject->setName($tagName);
$all[] = $tagObject;
}
return [];
return $all;
}
private function getDateTime(int $i): \DateTime
@@ -433,9 +396,7 @@ final class TimesheetFixtures implements TestFixture
$entry->setHourlyRate($hourlyRate);
}
if (null !== $this->exported) {
$entry->setExported($this->exported);
}
$entry->setExported($this->exported);
if ($setEndDate) {
$entry->setEnd($end);

View File

@@ -3207,11 +3207,6 @@ parameters:
count: 1
path: DataFixtures/TimesheetFixtures.php
-
message: "#^Method App\\\\Tests\\\\DataFixtures\\\\TimesheetFixtures\\:\\:getTagObjectList\\(\\) return type has no value type specified in iterable type array\\.$#"
count: 1
path: DataFixtures/TimesheetFixtures.php
-
message: "#^Parameter \\#1 \\$value of function count expects array\\|Countable, array\\|null given\\.$#"
count: 1
@@ -3222,11 +3217,6 @@ parameters:
count: 1
path: DataFixtures/TimesheetFixtures.php
-
message: "#^Property App\\\\Tests\\\\DataFixtures\\\\TimesheetFixtures\\:\\:\\$tags type has no value type specified in iterable type array\\.$#"
count: 1
path: DataFixtures/TimesheetFixtures.php
-
message: "#^Cannot access offset 'foo\\-bundle\\.bar' on array\\|bool\\|float\\|int\\|string\\|null\\.$#"
count: 1