diff --git a/composer.json b/composer.json index 3d9c9522..422300a6 100644 --- a/composer.json +++ b/composer.json @@ -76,8 +76,8 @@ "require-dev": { "dama/doctrine-test-bundle": "^6.0", "doctrine/doctrine-fixtures-bundle": "^3.2", + "fakerphp/faker": "^1.15", "friendsofphp/php-cs-fixer": "^3.0", - "fzaninotto/faker": "^1.8", "phpstan/phpstan": "^0.12", "phpstan/phpstan-doctrine": "^0.12", "phpstan/phpstan-phpunit": "^0.12", diff --git a/composer.lock b/composer.lock index 84333f2b..5d6baeaa 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "c031208fe6bb0d88b062cdd70e1b76c6", + "content-hash": "e7c642e42f67ba020bb87f55f5cb7239", "packages": [ { "name": "beberlei/doctrineextensions", @@ -11261,6 +11261,71 @@ ], "time": "2020-11-14T09:36:49+00:00" }, + { + "name": "fakerphp/faker", + "version": "v1.15.0", + "source": { + "type": "git", + "url": "https://github.com/FakerPHP/Faker.git", + "reference": "89c6201c74db25fa759ff16e78a4d8f32547770e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/FakerPHP/Faker/zipball/89c6201c74db25fa759ff16e78a4d8f32547770e", + "reference": "89c6201c74db25fa759ff16e78a4d8f32547770e", + "shasum": "" + }, + "require": { + "php": "^7.1 || ^8.0", + "psr/container": "^1.0", + "symfony/deprecation-contracts": "^2.2" + }, + "conflict": { + "fzaninotto/faker": "*" + }, + "require-dev": { + "bamarni/composer-bin-plugin": "^1.4.1", + "ext-intl": "*", + "symfony/phpunit-bridge": "^4.4 || ^5.2" + }, + "suggest": { + "ext-curl": "Required by Faker\\Provider\\Image to download images.", + "ext-dom": "Required by Faker\\Provider\\HtmlLorem for generating random HTML.", + "ext-iconv": "Required by Faker\\Provider\\ru_RU\\Text::realText() for generating real Russian text.", + "ext-mbstring": "Required for multibyte Unicode string functionality." + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "v1.15-dev" + } + }, + "autoload": { + "psr-4": { + "Faker\\": "src/Faker/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "François Zaninotto" + } + ], + "description": "Faker is a PHP library that generates fake data for you.", + "keywords": [ + "data", + "faker", + "fixtures" + ], + "support": { + "issues": "https://github.com/FakerPHP/Faker/issues", + "source": "https://github.com/FakerPHP/Faker/tree/v1.15.0" + }, + "time": "2021-07-06T20:39:40+00:00" + }, { "name": "friendsofphp/php-cs-fixer", "version": "v3.0.0", @@ -11349,61 +11414,6 @@ ], "time": "2021-05-03T21:51:58+00:00" }, - { - "name": "fzaninotto/faker", - "version": "v1.9.2", - "source": { - "type": "git", - "url": "https://github.com/fzaninotto/Faker.git", - "reference": "848d8125239d7dbf8ab25cb7f054f1a630e68c2e" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/fzaninotto/Faker/zipball/848d8125239d7dbf8ab25cb7f054f1a630e68c2e", - "reference": "848d8125239d7dbf8ab25cb7f054f1a630e68c2e", - "shasum": "" - }, - "require": { - "php": "^5.3.3 || ^7.0" - }, - "require-dev": { - "ext-intl": "*", - "phpunit/phpunit": "^4.8.35 || ^5.7", - "squizlabs/php_codesniffer": "^2.9.2" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.9-dev" - } - }, - "autoload": { - "psr-4": { - "Faker\\": "src/Faker/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "François Zaninotto" - } - ], - "description": "Faker is a PHP library that generates fake data for you.", - "keywords": [ - "data", - "faker", - "fixtures" - ], - "support": { - "issues": "https://github.com/fzaninotto/Faker/issues", - "source": "https://github.com/fzaninotto/Faker/tree/v1.9.2" - }, - "abandoned": true, - "time": "2020-12-11T09:56:16+00:00" - }, { "name": "nikic/php-parser", "version": "v4.10.5", @@ -13701,5 +13711,5 @@ "platform-overrides": { "php": "7.3" }, - "plugin-api-version": "2.0.0" + "plugin-api-version": "2.1.0" } diff --git a/phpstan.neon b/phpstan.neon index 722986d0..b91b9525 100644 --- a/phpstan.neon +++ b/phpstan.neon @@ -6,9 +6,6 @@ includes: parameters: tmpDir: %rootDir%/../../../var/cache/phpstan ignoreErrors: - - '#Access to an undefined property Faker\\Generator::\$stateAbbr.#' - - '#Access to an undefined property Faker\\Generator::\$catchPhrase.#' - - '#Access to an undefined property Faker\\Generator::\$bs.#' - '#Method Symfony\\Contracts\\EventDispatcher\\EventDispatcherInterface::dispatch\(\) invoked with 2 parameters, 1 required.#' excludes_analyse: - %rootDir%/../../../src/Ldap/LdapDriver.php diff --git a/src/DataFixtures/CustomerFixtures.php b/src/DataFixtures/CustomerFixtures.php index 99389956..dea1c995 100644 --- a/src/DataFixtures/CustomerFixtures.php +++ b/src/DataFixtures/CustomerFixtures.php @@ -94,16 +94,17 @@ class CustomerFixtures extends Fixture { $entry = new Customer(); $entry - ->setCurrency($faker->currencyCode) - ->setName($faker->company) - ->setAddress($faker->address) - ->setComment($faker->text) - ->setNumber('C-' . $faker->ean8) - ->setCountry($faker->countryCode) - ->setTimezone($faker->timezone) + ->setCurrency($faker->currencyCode()) + ->setName($faker->company()) + ->setAddress($faker->address()) + ->setEmail($faker->safeEmail()) + ->setComment($faker->text()) + ->setNumber('C-' . $faker->ean8()) + ->setCountry($faker->countryCode()) + ->setTimezone($faker->timezone()) ->setVisible($visible) - ->setVatId($faker->vat) ; + $entry->setVatId($faker->creditCardNumber()); if (rand(0, 3) % 3) { $entry->setBudget(rand(self::MIN_BUDGET, self::MAX_BUDGET)); @@ -126,11 +127,14 @@ class CustomerFixtures extends Fixture { $entry = new Project(); + /** @var string $name */ + $name = $faker->words(2, true); + $entry - ->setName($faker->catchPhrase) - ->setComment($faker->text) + ->setName(ucfirst($name)) + ->setComment($faker->text()) ->setCustomer($customer) - ->setOrderNumber('P-' . $faker->ean8) + ->setOrderNumber('P-' . $faker->ean8()) ->setVisible($visible) ; @@ -153,11 +157,14 @@ class CustomerFixtures extends Fixture */ private function createActivity(Generator $faker, ?Project $project, $visible) { + /** @var string $name */ + $name = $faker->words(2, true); + $entry = new Activity(); $entry - ->setName($faker->bs) + ->setName(ucfirst($name)) ->setProject($project) - ->setComment($faker->text) + ->setComment($faker->text()) ->setVisible($visible) ; diff --git a/src/DataFixtures/InvoiceFixtures.php b/src/DataFixtures/InvoiceFixtures.php index 9c662e92..612008ea 100644 --- a/src/DataFixtures/InvoiceFixtures.php +++ b/src/DataFixtures/InvoiceFixtures.php @@ -47,11 +47,11 @@ class InvoiceFixtures extends Fixture ->setVat($invoiceConfig[6]) ->setDueDays($invoiceConfig[7]) ->setPaymentTerms($invoiceConfig[8]) - ->setVatId($faker->vat) ->setAddress($this->generateAddress($faker)) ->setContact($this->generateContact($faker)) ->setPaymentDetails($this->generatePaymentDetails($faker)) ; + $template->setVatId($faker->creditCardNumber()); $manager->persist($template); $manager->flush(); @@ -68,7 +68,7 @@ class InvoiceFixtures extends Fixture ; $paymentTerms_alt = - $faker->firstName . ', thank you very much. We really appreciate your business.' . PHP_EOL . + $faker->firstName() . ', thank you very much. We really appreciate your business.' . PHP_EOL . 'Please send payments before the due date. I would like to thank you for your confidence and will gladly be there for you in the future.' ; @@ -86,37 +86,37 @@ class InvoiceFixtures extends Fixture // name, title, renderer, calculator, numberGenerator, company, vat, dueDays, address, paymentTerms return [ - ['Invoice (PDF)', 'Invoice', 'default-pdf', 'default', 'default', $faker->company, 16, 10, $paymentTerms], - ['Invoice (HTML)', 'Company name', 'default', 'default', 'default', $faker->company, 19, 30, $paymentTerms], - ['Freelancer (HTML, short)', 'Invoice', 'freelancer', 'short', 'default', $faker->company, 19, 14, $paymentTerms_de], - ['Timesheet (HTML)', 'Timesheet', 'timesheet', 'default', 'default', $faker->company, 19, 7, $paymentTerms_alt], + ['Invoice (PDF)', 'Invoice', 'default-pdf', 'default', 'default', $faker->company(), 16, 10, $paymentTerms], + ['Invoice (HTML)', 'Company name', 'default', 'default', 'default', $faker->company(), 19, 30, $paymentTerms], + ['Freelancer (HTML, short)', 'Invoice', 'freelancer', 'short', 'default', $faker->company(), 19, 14, $paymentTerms_de], + ['Timesheet (HTML)', 'Timesheet', 'timesheet', 'default', 'default', $faker->company(), 19, 7, $paymentTerms_alt], ['Company invoice (DOCX)', 'Invoice', 'company', 'default', 'default', 'Kimai Inc.', 19, 14, $paymentTerms_alt], ]; } - protected function generatePaymentDetails(Generator $faker) + protected function generatePaymentDetails(Generator $faker): string { return 'Acme Bank' . PHP_EOL . - 'Account: ' . $faker->bankAccountNumber . PHP_EOL . + 'BIC: ' . $faker->swiftBicNumber() . PHP_EOL . 'IBAN: ' . $faker->iban('DE') ; } - protected function generateContact(Generator $faker) + protected function generateContact(Generator $faker): string { return - 'Phone: ' . $faker->phoneNumber . PHP_EOL . - 'Email: ' . $faker->safeEmail . PHP_EOL . - 'Web: www.' . $faker->domainName + 'Phone: ' . $faker->phoneNumber() . PHP_EOL . + 'Email: ' . $faker->safeEmail() . PHP_EOL . + 'Web: www.' . $faker->domainName() ; } - protected function generateAddress(Generator $faker) + protected function generateAddress(Generator $faker): string { return - $faker->streetAddress . PHP_EOL . - $faker->city . ', ' . $faker->stateAbbr . ' ' . $faker->postcode + $faker->streetAddress() . PHP_EOL . + $faker->postcode() . ' ' . $faker->city() . ', ' . $faker->country() ; } } diff --git a/src/DataFixtures/TeamFixtures.php b/src/DataFixtures/TeamFixtures.php index 498a417c..ac5b1c23 100644 --- a/src/DataFixtures/TeamFixtures.php +++ b/src/DataFixtures/TeamFixtures.php @@ -33,7 +33,7 @@ class TeamFixtures extends Fixture implements DependentFixtureInterface public const MAX_PROJECTS_PER_TEAM = 5; /** - * @return class-string[] + * @return string[] */ public function getDependencies() { @@ -89,7 +89,7 @@ class TeamFixtures extends Fixture implements DependentFixtureInterface if (self::MAX_USERS_PER_TEAM < $maxUsers) { $maxUsers = self::MAX_USERS_PER_TEAM; } - $userCount = mt_rand(0, $maxUsers); + $userCount = mt_rand(1, $maxUsers); $maxProjects = \count($allProjects) - 1; if (self::MAX_PROJECTS_PER_TEAM < $maxProjects) { @@ -98,10 +98,8 @@ class TeamFixtures extends Fixture implements DependentFixtureInterface $projectCount = mt_rand(0, $maxProjects); $team = new Team(); - $team - ->setName($faker->company . ' ' . $i) - ->addTeamlead($allUsers[array_rand($allUsers)]) - ; + $team->setName($faker->company . ' ' . $i); + $team->addTeamlead($allUsers[array_rand($allUsers)]); if ($userCount > 0) { $userKeys = array_rand($allUsers, $userCount); diff --git a/src/Entity/Team.php b/src/Entity/Team.php index 21fb2c15..a8994190 100644 --- a/src/Entity/Team.php +++ b/src/Entity/Team.php @@ -167,17 +167,17 @@ class Team throw new \InvalidArgumentException('Cannot set foreign team membership'); } - if (null !== ($existing = $this->findMember($member))) { - $existing->setTeamlead($member->isTeamlead()); - + // when using the API an invalid user id does not trigger the validation first, but after calling this method :-( + if ($member->getUser() === null) { return; } - // when using the API an invalid user id does not trigger the validation first, but after calling this method :-( - if ($member->getUser() !== null) { - $this->members->add($member); - $member->getUser()->addMembership($member); + if (null !== ($existing = $this->findMember($member))) { + return; } + + $this->members->add($member); + $member->getUser()->addMembership($member); } public function hasMember(TeamMember $member): bool @@ -196,10 +196,20 @@ class Team return null; } + private function findMemberByUser(User $user): ?TeamMember + { + foreach ($this->members as $oldMember) { + if ($oldMember->getUser() === $user) { + return $oldMember; + } + } + + return null; + } + public function removeMember(TeamMember $member): void { - $existingMember = $this->findMember($member); - if ($existingMember === null) { + if (null === ($existingMember = $this->findMember($member))) { return; } @@ -246,10 +256,8 @@ class Team public function isTeamlead(User $user): bool { - foreach ($this->members as $member) { - if ($user === $member->getUser()) { - return $member->isTeamlead(); - } + if (null !== ($member = $this->findMemberByUser($user))) { + return $member->isTeamlead(); } return false; @@ -266,34 +274,37 @@ class Team public function addTeamlead(User $user): void { - $this->addUser($user, true); + if (null !== ($member = $this->findMemberByUser($user))) { + $member->setTeamlead(true); + + return; + } + + $member = new TeamMember(); + $member->setTeam($this); + $member->setUser($user); + $member->setTeamlead(true); + + $this->addMember($member); } /** - * Will only remove the teamlead flag, not the user from the team. + * Removes the teamlead flag, but leaves the user within the team. * * @param User $user */ - public function removeTeamlead(User $user): void + public function demoteTeamlead(User $user): void { - foreach ($this->members as $member) { - if ($member->getUser() === $user) { - $member->setTeamlead(false); + if (null !== ($member = $this->findMemberByUser($user))) { + $member->setTeamlead(false); - return; - } + return; } } public function hasUser(User $user): bool { - foreach ($this->members as $member) { - if ($member->getUser() === $user) { - return true; - } - } - - return false; + return (null !== ($member = $this->findMemberByUser($user))); } public function hasUsers(): bool @@ -312,39 +323,24 @@ class Team return false; } - public function addUser(User $user, bool $teamlead = false): void + public function addUser(User $user): void { - foreach ($this->members as $member) { - if ($member->getUser() === $user) { - $member->setTeamlead($teamlead); - - return; - } + if (null !== ($member = $this->findMemberByUser($user))) { + return; } $member = new TeamMember(); $member->setTeam($this); $member->setUser($user); - $member->setTeamlead($teamlead); $this->addMember($member); } public function removeUser(User $user): void { - $memberToRemove = null; - foreach ($this->members as $member) { - if ($member->getUser() === $user) { - $memberToRemove = $member; - break; - } + if (null !== ($member = $this->findMemberByUser($user))) { + $this->removeMember($member); } - - if ($memberToRemove === null) { - return; - } - - $this->removeMember($memberToRemove); } /** @@ -355,9 +351,9 @@ class Team * @Serializer\Groups({"Team_Entity"}) * @SWG\Property(ref="#/definitions/User") * - * @return array + * @return User[] */ - public function getUsers(): iterable + public function getUsers(): array { $users = []; foreach ($this->members as $member) { diff --git a/src/Entity/User.php b/src/Entity/User.php index 5a5c7216..51b4134f 100644 --- a/src/Entity/User.php +++ b/src/Entity/User.php @@ -522,28 +522,27 @@ class User implements UserInterface, EquatableInterface, \Serializable throw new \InvalidArgumentException('Cannot set foreign user membership'); } - if (null !== ($existing = $this->findMember($member))) { - $existing->setTeamlead($member->isTeamlead()); - + // when using the API an invalid user id does not trigger the validation first, but after calling this method :-( + if ($member->getTeam() === null) { return; } - // when using the API an invalid team id does not trigger the validation first, but after calling this method :-( - if ($member->getTeam() !== null) { - $this->memberships->add($member); - $member->getTeam()->addMember($member); + if (null !== ($existing = $this->findMember($member))) { + return; } + + $this->memberships->add($member); + $member->getTeam()->addMember($member); } public function removeMembership(TeamMember $member): void { - $existingMember = $this->findMember($member); - if ($existingMember === null) { + if (null === ($member = $this->findMember($member))) { return; } - $this->memberships->removeElement($existingMember); - $existingMember->getUser()->removeMembership($existingMember); + $this->memberships->removeElement($member); + $member->getUser()->removeMembership($member); } /** diff --git a/src/Form/Toolbar/AbstractToolbarForm.php b/src/Form/Toolbar/AbstractToolbarForm.php index 2d4f8d5d..66ea54a2 100644 --- a/src/Form/Toolbar/AbstractToolbarForm.php +++ b/src/Form/Toolbar/AbstractToolbarForm.php @@ -85,9 +85,9 @@ abstract class AbstractToolbarForm extends AbstractType ]); } - protected function addTeamsChoice(FormBuilderInterface $builder, string $field = 'teams') + protected function addTeamsChoice(FormBuilderInterface $builder, string $field = 'teams', array $options = []) { - $builder->add($field, TeamType::class, [ + $builder->add($field, TeamType::class, array_merge([ 'documentation' => [ 'type' => 'array', 'items' => ['type' => 'integer', 'description' => 'Team ID'], @@ -96,7 +96,7 @@ abstract class AbstractToolbarForm extends AbstractType 'label' => 'label.team', 'multiple' => true, 'required' => false, - ]); + ], $options)); } protected function addCustomerChoice(FormBuilderInterface $builder, array $options = [], bool $multiProject = false) diff --git a/src/Migrations/Version20210719123928.php b/src/Migrations/Version20210719123928.php index 93e34b89..21944ffc 100644 --- a/src/Migrations/Version20210719123928.php +++ b/src/Migrations/Version20210719123928.php @@ -14,6 +14,9 @@ namespace DoctrineMigrations; use Doctrine\DBAL\Schema\Schema; use Doctrine\Migrations\AbstractMigration; +/** + * @version 1.15 + */ final class Version20210719123928 extends AbstractMigration { public function getDescription(): string diff --git a/symfony.lock b/symfony.lock index 4ca69582..72b05ff2 100644 --- a/symfony.lock +++ b/symfony.lock @@ -114,6 +114,9 @@ "ezyang/htmlpurifier": { "version": "v4.13.0" }, + "fakerphp/faker": { + "version": "v1.15.0" + }, "friendsofphp/php-cs-fixer": { "version": "2.2", "recipe": { @@ -135,9 +138,6 @@ "ref": "258300d52be6ad59b32a888d5ddafbf9638540ff" } }, - "fzaninotto/faker": { - "version": "v1.8.0" - }, "gedmo/doctrine-extensions": { "version": "v2.4.36" }, diff --git a/tests/DataFixtures/ActivityFixtures.php b/tests/DataFixtures/ActivityFixtures.php index a47149c8..5e26199b 100644 --- a/tests/DataFixtures/ActivityFixtures.php +++ b/tests/DataFixtures/ActivityFixtures.php @@ -119,8 +119,8 @@ final class ActivityFixtures implements TestFixture $activity = new Activity(); $activity ->setProject($project) - ->setName($faker->bs . ($visible ? '' : ' (x)')) - ->setComment($faker->text) + ->setName($faker->company() . ($visible ? '' : ' (x)')) + ->setComment($faker->text()) ->setVisible($visible) ; diff --git a/tests/DataFixtures/CustomerFixtures.php b/tests/DataFixtures/CustomerFixtures.php index 2e4d7291..8ff5c296 100644 --- a/tests/DataFixtures/CustomerFixtures.php +++ b/tests/DataFixtures/CustomerFixtures.php @@ -80,13 +80,14 @@ final class CustomerFixtures implements TestFixture } $customer = new Customer(); $customer - ->setCurrency($faker->currencyCode) - ->setName($faker->company . ($visible ? '' : ' (x)')) - ->setAddress($faker->address) - ->setComment($faker->text) - ->setNumber('C-' . $faker->ean8) - ->setCountry($faker->countryCode) - ->setTimezone($faker->timezone) + ->setCurrency($faker->currencyCode()) + ->setName($faker->company() . ($visible ? '' : ' (x)')) + ->setAddress($faker->address()) + ->setEmail($faker->safeEmail()) + ->setComment($faker->text()) + ->setNumber('C-' . $faker->ean8()) + ->setCountry($faker->countryCode()) + ->setTimezone($faker->timezone()) ->setVisible($visible) ; diff --git a/tests/DataFixtures/InvoiceTemplateFixtures.php b/tests/DataFixtures/InvoiceTemplateFixtures.php index 471a759b..da3bcb1b 100644 --- a/tests/DataFixtures/InvoiceTemplateFixtures.php +++ b/tests/DataFixtures/InvoiceTemplateFixtures.php @@ -32,7 +32,7 @@ class InvoiceTemplateFixtures implements TestFixture $template ->setName('Invoice') ->setTitle('Your company name') - ->setCompany($faker->company) + ->setCompany($faker->company()) ->setVat(19) ->setDueDays(14) ->setPaymentTerms( @@ -42,10 +42,10 @@ class InvoiceTemplateFixtures implements TestFixture 'as reference.' ) ->setAddress( - $faker->streetAddress . PHP_EOL . - $faker->city . ', ' . $faker->stateAbbr . ' ' . $faker->postcode . PHP_EOL . - 'Phone: ' . $faker->phoneNumber . PHP_EOL . - 'Email: ' . $faker->safeEmail + $faker->streetAddress() . PHP_EOL . + $faker->city() . ' ' . $faker->postcode() . ', ' . $faker->country() . PHP_EOL . + 'Phone: ' . $faker->phoneNumber() . PHP_EOL . + 'Email: ' . $faker->safeEmail() ) ->setLanguage('en') ; diff --git a/tests/DataFixtures/ProjectFixtures.php b/tests/DataFixtures/ProjectFixtures.php index 3ba2344d..b38483d1 100644 --- a/tests/DataFixtures/ProjectFixtures.php +++ b/tests/DataFixtures/ProjectFixtures.php @@ -98,9 +98,9 @@ final class ProjectFixtures implements TestFixture $visible = $this->isVisible; } $project = new Project(); - $project->setName($faker->catchPhrase . ($visible ? '' : ' (x)')); + $project->setName($faker->company() . ($visible ? '' : ' (x)')); $project->setBudget(rand(0, 10000)); - $project->setComment($faker->text); + $project->setComment($faker->text()); $project->setCustomer($customers[array_rand($customers)]); $project->setVisible($visible); diff --git a/tests/DataFixtures/TeamFixtures.php b/tests/DataFixtures/TeamFixtures.php index 3bd62599..c5137a77 100644 --- a/tests/DataFixtures/TeamFixtures.php +++ b/tests/DataFixtures/TeamFixtures.php @@ -11,7 +11,6 @@ namespace App\Tests\DataFixtures; use App\Entity\Customer; use App\Entity\Team; -use App\Entity\TeamMember; use App\Entity\User; use Doctrine\Persistence\ObjectManager; @@ -107,15 +106,9 @@ final class TeamFixtures implements TestFixture } } - $member = new TeamMember(); - $member->setUser($lead); - $member->setTeamlead(true); - $team = new Team(); - $team - ->setName('Testing: ' . uniqid()) - ->addMember($member) - ; + $team->setName('Testing: ' . uniqid()); + $team->addTeamlead($lead); if ($this->addUser) { $userToAdd = null; diff --git a/tests/DataFixtures/TimesheetFixtures.php b/tests/DataFixtures/TimesheetFixtures.php index ea35048c..f8d59370 100644 --- a/tests/DataFixtures/TimesheetFixtures.php +++ b/tests/DataFixtures/TimesheetFixtures.php @@ -246,7 +246,7 @@ final class TimesheetFixtures implements TestFixture $manager->flush(); for ($i = 0; $i < $this->amount; $i++) { - $description = $faker->text; + $description = $faker->text(); if ($this->allowEmptyDescriptions) { if ($i % 3 == 0) { $description = null; @@ -292,7 +292,7 @@ final class TimesheetFixtures implements TestFixture $user, $activity, $project, - $faker->text, + $faker->text(), $this->getDateTime($i), $tags, false diff --git a/tests/Entity/TeamTest.php b/tests/Entity/TeamTest.php index 99298114..702a59a7 100644 --- a/tests/Entity/TeamTest.php +++ b/tests/Entity/TeamTest.php @@ -75,7 +75,16 @@ class TeamTest extends TestCase self::assertFalse($sut->hasMember($member)); $sut->removeMember($member); $sut->removeMember($member2); + self::assertFalse($sut->hasUser($user)); $sut->addMember($member); + + self::assertTrue($sut->hasUser($user)); + self::assertFalse($sut->isTeamlead($user)); + $sut->addTeamlead($user); + self::assertTrue($sut->isTeamlead($user)); + $sut->addUser($user); + self::assertTrue($sut->isTeamlead($user)); + self::assertCount(1, $sut->getMembers()); $sut->removeMember($member2); self::assertCount(1, $sut->getMembers()); @@ -90,7 +99,7 @@ class TeamTest extends TestCase $sut->addTeamlead($user2); self::assertCount(2, $sut->getMembers()); self::assertTrue($sut->isTeamlead($user2)); - $sut->removeTeamlead($user2); + $sut->demoteTeamlead($user2); self::assertCount(2, $sut->getMembers()); self::assertFalse($sut->isTeamlead($user2)); diff --git a/tests/phpstan.neon b/tests/phpstan.neon index fc982aa0..f2a2db95 100644 --- a/tests/phpstan.neon +++ b/tests/phpstan.neon @@ -6,9 +6,6 @@ includes: parameters: tmpDir: %rootDir%/../../../var/cache/phpstan ignoreErrors: - - '#Access to an undefined property Faker\\Generator::\$stateAbbr.#' - - '#Access to an undefined property Faker\\Generator::\$catchPhrase.#' - - '#Access to an undefined property Faker\\Generator::\$bs.#' - '#Call to static method PHPUnit\\Framework\\Assert::assertSame\(\) with App\\Entity\\[a-zA-Z0-9]+ and null will always evaluate to false.#' excludes_analyse: - %rootDir%/../../../tests/Ldap/LdapDriverTest.php