fixes for 1.15 (#2704)

This commit is contained in:
Kevin Papst
2021-08-08 12:38:19 +02:00
committed by GitHub
parent b2d3272151
commit c063aed867
19 changed files with 203 additions and 193 deletions

View File

@@ -76,8 +76,8 @@
"require-dev": { "require-dev": {
"dama/doctrine-test-bundle": "^6.0", "dama/doctrine-test-bundle": "^6.0",
"doctrine/doctrine-fixtures-bundle": "^3.2", "doctrine/doctrine-fixtures-bundle": "^3.2",
"fakerphp/faker": "^1.15",
"friendsofphp/php-cs-fixer": "^3.0", "friendsofphp/php-cs-fixer": "^3.0",
"fzaninotto/faker": "^1.8",
"phpstan/phpstan": "^0.12", "phpstan/phpstan": "^0.12",
"phpstan/phpstan-doctrine": "^0.12", "phpstan/phpstan-doctrine": "^0.12",
"phpstan/phpstan-phpunit": "^0.12", "phpstan/phpstan-phpunit": "^0.12",

124
composer.lock generated
View File

@@ -4,7 +4,7 @@
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
"This file is @generated automatically" "This file is @generated automatically"
], ],
"content-hash": "c031208fe6bb0d88b062cdd70e1b76c6", "content-hash": "e7c642e42f67ba020bb87f55f5cb7239",
"packages": [ "packages": [
{ {
"name": "beberlei/doctrineextensions", "name": "beberlei/doctrineextensions",
@@ -11261,6 +11261,71 @@
], ],
"time": "2020-11-14T09:36:49+00:00" "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", "name": "friendsofphp/php-cs-fixer",
"version": "v3.0.0", "version": "v3.0.0",
@@ -11349,61 +11414,6 @@
], ],
"time": "2021-05-03T21:51:58+00:00" "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", "name": "nikic/php-parser",
"version": "v4.10.5", "version": "v4.10.5",
@@ -13701,5 +13711,5 @@
"platform-overrides": { "platform-overrides": {
"php": "7.3" "php": "7.3"
}, },
"plugin-api-version": "2.0.0" "plugin-api-version": "2.1.0"
} }

View File

@@ -6,9 +6,6 @@ includes:
parameters: parameters:
tmpDir: %rootDir%/../../../var/cache/phpstan tmpDir: %rootDir%/../../../var/cache/phpstan
ignoreErrors: 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.#' - '#Method Symfony\\Contracts\\EventDispatcher\\EventDispatcherInterface::dispatch\(\) invoked with 2 parameters, 1 required.#'
excludes_analyse: excludes_analyse:
- %rootDir%/../../../src/Ldap/LdapDriver.php - %rootDir%/../../../src/Ldap/LdapDriver.php

View File

@@ -94,16 +94,17 @@ class CustomerFixtures extends Fixture
{ {
$entry = new Customer(); $entry = new Customer();
$entry $entry
->setCurrency($faker->currencyCode) ->setCurrency($faker->currencyCode())
->setName($faker->company) ->setName($faker->company())
->setAddress($faker->address) ->setAddress($faker->address())
->setComment($faker->text) ->setEmail($faker->safeEmail())
->setNumber('C-' . $faker->ean8) ->setComment($faker->text())
->setCountry($faker->countryCode) ->setNumber('C-' . $faker->ean8())
->setTimezone($faker->timezone) ->setCountry($faker->countryCode())
->setTimezone($faker->timezone())
->setVisible($visible) ->setVisible($visible)
->setVatId($faker->vat)
; ;
$entry->setVatId($faker->creditCardNumber());
if (rand(0, 3) % 3) { if (rand(0, 3) % 3) {
$entry->setBudget(rand(self::MIN_BUDGET, self::MAX_BUDGET)); $entry->setBudget(rand(self::MIN_BUDGET, self::MAX_BUDGET));
@@ -126,11 +127,14 @@ class CustomerFixtures extends Fixture
{ {
$entry = new Project(); $entry = new Project();
/** @var string $name */
$name = $faker->words(2, true);
$entry $entry
->setName($faker->catchPhrase) ->setName(ucfirst($name))
->setComment($faker->text) ->setComment($faker->text())
->setCustomer($customer) ->setCustomer($customer)
->setOrderNumber('P-' . $faker->ean8) ->setOrderNumber('P-' . $faker->ean8())
->setVisible($visible) ->setVisible($visible)
; ;
@@ -153,11 +157,14 @@ class CustomerFixtures extends Fixture
*/ */
private function createActivity(Generator $faker, ?Project $project, $visible) private function createActivity(Generator $faker, ?Project $project, $visible)
{ {
/** @var string $name */
$name = $faker->words(2, true);
$entry = new Activity(); $entry = new Activity();
$entry $entry
->setName($faker->bs) ->setName(ucfirst($name))
->setProject($project) ->setProject($project)
->setComment($faker->text) ->setComment($faker->text())
->setVisible($visible) ->setVisible($visible)
; ;

View File

@@ -47,11 +47,11 @@ class InvoiceFixtures extends Fixture
->setVat($invoiceConfig[6]) ->setVat($invoiceConfig[6])
->setDueDays($invoiceConfig[7]) ->setDueDays($invoiceConfig[7])
->setPaymentTerms($invoiceConfig[8]) ->setPaymentTerms($invoiceConfig[8])
->setVatId($faker->vat)
->setAddress($this->generateAddress($faker)) ->setAddress($this->generateAddress($faker))
->setContact($this->generateContact($faker)) ->setContact($this->generateContact($faker))
->setPaymentDetails($this->generatePaymentDetails($faker)) ->setPaymentDetails($this->generatePaymentDetails($faker))
; ;
$template->setVatId($faker->creditCardNumber());
$manager->persist($template); $manager->persist($template);
$manager->flush(); $manager->flush();
@@ -68,7 +68,7 @@ class InvoiceFixtures extends Fixture
; ;
$paymentTerms_alt = $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.' '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 // name, title, renderer, calculator, numberGenerator, company, vat, dueDays, address, paymentTerms
return [ return [
['Invoice (PDF)', 'Invoice', 'default-pdf', 'default', 'default', $faker->company, 16, 10, $paymentTerms], ['Invoice (PDF)', 'Invoice', 'default-pdf', 'default', 'default', $faker->company(), 16, 10, $paymentTerms],
['Invoice (HTML)', 'Company name', 'default', 'default', 'default', $faker->company, 19, 30, $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], ['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], ['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], ['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 return
'Acme Bank' . PHP_EOL . 'Acme Bank' . PHP_EOL .
'Account: ' . $faker->bankAccountNumber . PHP_EOL . 'BIC: ' . $faker->swiftBicNumber() . PHP_EOL .
'IBAN: ' . $faker->iban('DE') 'IBAN: ' . $faker->iban('DE')
; ;
} }
protected function generateContact(Generator $faker) protected function generateContact(Generator $faker): string
{ {
return return
'Phone: ' . $faker->phoneNumber . PHP_EOL . 'Phone: ' . $faker->phoneNumber() . PHP_EOL .
'Email: ' . $faker->safeEmail . PHP_EOL . 'Email: ' . $faker->safeEmail() . PHP_EOL .
'Web: www.' . $faker->domainName 'Web: www.' . $faker->domainName()
; ;
} }
protected function generateAddress(Generator $faker) protected function generateAddress(Generator $faker): string
{ {
return return
$faker->streetAddress . PHP_EOL . $faker->streetAddress() . PHP_EOL .
$faker->city . ', ' . $faker->stateAbbr . ' ' . $faker->postcode $faker->postcode() . ' ' . $faker->city() . ', ' . $faker->country()
; ;
} }
} }

View File

@@ -33,7 +33,7 @@ class TeamFixtures extends Fixture implements DependentFixtureInterface
public const MAX_PROJECTS_PER_TEAM = 5; public const MAX_PROJECTS_PER_TEAM = 5;
/** /**
* @return class-string[] * @return string[]
*/ */
public function getDependencies() public function getDependencies()
{ {
@@ -89,7 +89,7 @@ class TeamFixtures extends Fixture implements DependentFixtureInterface
if (self::MAX_USERS_PER_TEAM < $maxUsers) { if (self::MAX_USERS_PER_TEAM < $maxUsers) {
$maxUsers = self::MAX_USERS_PER_TEAM; $maxUsers = self::MAX_USERS_PER_TEAM;
} }
$userCount = mt_rand(0, $maxUsers); $userCount = mt_rand(1, $maxUsers);
$maxProjects = \count($allProjects) - 1; $maxProjects = \count($allProjects) - 1;
if (self::MAX_PROJECTS_PER_TEAM < $maxProjects) { if (self::MAX_PROJECTS_PER_TEAM < $maxProjects) {
@@ -98,10 +98,8 @@ class TeamFixtures extends Fixture implements DependentFixtureInterface
$projectCount = mt_rand(0, $maxProjects); $projectCount = mt_rand(0, $maxProjects);
$team = new Team(); $team = new Team();
$team $team->setName($faker->company . ' ' . $i);
->setName($faker->company . ' ' . $i) $team->addTeamlead($allUsers[array_rand($allUsers)]);
->addTeamlead($allUsers[array_rand($allUsers)])
;
if ($userCount > 0) { if ($userCount > 0) {
$userKeys = array_rand($allUsers, $userCount); $userKeys = array_rand($allUsers, $userCount);

View File

@@ -167,17 +167,17 @@ class Team
throw new \InvalidArgumentException('Cannot set foreign team membership'); throw new \InvalidArgumentException('Cannot set foreign team membership');
} }
if (null !== ($existing = $this->findMember($member))) { // when using the API an invalid user id does not trigger the validation first, but after calling this method :-(
$existing->setTeamlead($member->isTeamlead()); if ($member->getUser() === null) {
return; return;
} }
// when using the API an invalid user id does not trigger the validation first, but after calling this method :-( if (null !== ($existing = $this->findMember($member))) {
if ($member->getUser() !== null) { return;
$this->members->add($member);
$member->getUser()->addMembership($member);
} }
$this->members->add($member);
$member->getUser()->addMembership($member);
} }
public function hasMember(TeamMember $member): bool public function hasMember(TeamMember $member): bool
@@ -196,10 +196,20 @@ class Team
return null; 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 public function removeMember(TeamMember $member): void
{ {
$existingMember = $this->findMember($member); if (null === ($existingMember = $this->findMember($member))) {
if ($existingMember === null) {
return; return;
} }
@@ -246,10 +256,8 @@ class Team
public function isTeamlead(User $user): bool public function isTeamlead(User $user): bool
{ {
foreach ($this->members as $member) { if (null !== ($member = $this->findMemberByUser($user))) {
if ($user === $member->getUser()) { return $member->isTeamlead();
return $member->isTeamlead();
}
} }
return false; return false;
@@ -266,34 +274,37 @@ class Team
public function addTeamlead(User $user): void 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 * @param User $user
*/ */
public function removeTeamlead(User $user): void public function demoteTeamlead(User $user): void
{ {
foreach ($this->members as $member) { if (null !== ($member = $this->findMemberByUser($user))) {
if ($member->getUser() === $user) { $member->setTeamlead(false);
$member->setTeamlead(false);
return; return;
}
} }
} }
public function hasUser(User $user): bool public function hasUser(User $user): bool
{ {
foreach ($this->members as $member) { return (null !== ($member = $this->findMemberByUser($user)));
if ($member->getUser() === $user) {
return true;
}
}
return false;
} }
public function hasUsers(): bool public function hasUsers(): bool
@@ -312,39 +323,24 @@ class Team
return false; return false;
} }
public function addUser(User $user, bool $teamlead = false): void public function addUser(User $user): void
{ {
foreach ($this->members as $member) { if (null !== ($member = $this->findMemberByUser($user))) {
if ($member->getUser() === $user) { return;
$member->setTeamlead($teamlead);
return;
}
} }
$member = new TeamMember(); $member = new TeamMember();
$member->setTeam($this); $member->setTeam($this);
$member->setUser($user); $member->setUser($user);
$member->setTeamlead($teamlead);
$this->addMember($member); $this->addMember($member);
} }
public function removeUser(User $user): void public function removeUser(User $user): void
{ {
$memberToRemove = null; if (null !== ($member = $this->findMemberByUser($user))) {
foreach ($this->members as $member) { $this->removeMember($member);
if ($member->getUser() === $user) {
$memberToRemove = $member;
break;
}
} }
if ($memberToRemove === null) {
return;
}
$this->removeMember($memberToRemove);
} }
/** /**
@@ -355,9 +351,9 @@ class Team
* @Serializer\Groups({"Team_Entity"}) * @Serializer\Groups({"Team_Entity"})
* @SWG\Property(ref="#/definitions/User") * @SWG\Property(ref="#/definitions/User")
* *
* @return array<User> * @return User[]
*/ */
public function getUsers(): iterable public function getUsers(): array
{ {
$users = []; $users = [];
foreach ($this->members as $member) { foreach ($this->members as $member) {

View File

@@ -522,28 +522,27 @@ class User implements UserInterface, EquatableInterface, \Serializable
throw new \InvalidArgumentException('Cannot set foreign user membership'); throw new \InvalidArgumentException('Cannot set foreign user membership');
} }
if (null !== ($existing = $this->findMember($member))) { // when using the API an invalid user id does not trigger the validation first, but after calling this method :-(
$existing->setTeamlead($member->isTeamlead()); if ($member->getTeam() === null) {
return; return;
} }
// when using the API an invalid team id does not trigger the validation first, but after calling this method :-( if (null !== ($existing = $this->findMember($member))) {
if ($member->getTeam() !== null) { return;
$this->memberships->add($member);
$member->getTeam()->addMember($member);
} }
$this->memberships->add($member);
$member->getTeam()->addMember($member);
} }
public function removeMembership(TeamMember $member): void public function removeMembership(TeamMember $member): void
{ {
$existingMember = $this->findMember($member); if (null === ($member = $this->findMember($member))) {
if ($existingMember === null) {
return; return;
} }
$this->memberships->removeElement($existingMember); $this->memberships->removeElement($member);
$existingMember->getUser()->removeMembership($existingMember); $member->getUser()->removeMembership($member);
} }
/** /**

View File

@@ -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' => [ 'documentation' => [
'type' => 'array', 'type' => 'array',
'items' => ['type' => 'integer', 'description' => 'Team ID'], 'items' => ['type' => 'integer', 'description' => 'Team ID'],
@@ -96,7 +96,7 @@ abstract class AbstractToolbarForm extends AbstractType
'label' => 'label.team', 'label' => 'label.team',
'multiple' => true, 'multiple' => true,
'required' => false, 'required' => false,
]); ], $options));
} }
protected function addCustomerChoice(FormBuilderInterface $builder, array $options = [], bool $multiProject = false) protected function addCustomerChoice(FormBuilderInterface $builder, array $options = [], bool $multiProject = false)

View File

@@ -14,6 +14,9 @@ namespace DoctrineMigrations;
use Doctrine\DBAL\Schema\Schema; use Doctrine\DBAL\Schema\Schema;
use Doctrine\Migrations\AbstractMigration; use Doctrine\Migrations\AbstractMigration;
/**
* @version 1.15
*/
final class Version20210719123928 extends AbstractMigration final class Version20210719123928 extends AbstractMigration
{ {
public function getDescription(): string public function getDescription(): string

View File

@@ -114,6 +114,9 @@
"ezyang/htmlpurifier": { "ezyang/htmlpurifier": {
"version": "v4.13.0" "version": "v4.13.0"
}, },
"fakerphp/faker": {
"version": "v1.15.0"
},
"friendsofphp/php-cs-fixer": { "friendsofphp/php-cs-fixer": {
"version": "2.2", "version": "2.2",
"recipe": { "recipe": {
@@ -135,9 +138,6 @@
"ref": "258300d52be6ad59b32a888d5ddafbf9638540ff" "ref": "258300d52be6ad59b32a888d5ddafbf9638540ff"
} }
}, },
"fzaninotto/faker": {
"version": "v1.8.0"
},
"gedmo/doctrine-extensions": { "gedmo/doctrine-extensions": {
"version": "v2.4.36" "version": "v2.4.36"
}, },

View File

@@ -119,8 +119,8 @@ final class ActivityFixtures implements TestFixture
$activity = new Activity(); $activity = new Activity();
$activity $activity
->setProject($project) ->setProject($project)
->setName($faker->bs . ($visible ? '' : ' (x)')) ->setName($faker->company() . ($visible ? '' : ' (x)'))
->setComment($faker->text) ->setComment($faker->text())
->setVisible($visible) ->setVisible($visible)
; ;

View File

@@ -80,13 +80,14 @@ final class CustomerFixtures implements TestFixture
} }
$customer = new Customer(); $customer = new Customer();
$customer $customer
->setCurrency($faker->currencyCode) ->setCurrency($faker->currencyCode())
->setName($faker->company . ($visible ? '' : ' (x)')) ->setName($faker->company() . ($visible ? '' : ' (x)'))
->setAddress($faker->address) ->setAddress($faker->address())
->setComment($faker->text) ->setEmail($faker->safeEmail())
->setNumber('C-' . $faker->ean8) ->setComment($faker->text())
->setCountry($faker->countryCode) ->setNumber('C-' . $faker->ean8())
->setTimezone($faker->timezone) ->setCountry($faker->countryCode())
->setTimezone($faker->timezone())
->setVisible($visible) ->setVisible($visible)
; ;

View File

@@ -32,7 +32,7 @@ class InvoiceTemplateFixtures implements TestFixture
$template $template
->setName('Invoice') ->setName('Invoice')
->setTitle('Your company name') ->setTitle('Your company name')
->setCompany($faker->company) ->setCompany($faker->company())
->setVat(19) ->setVat(19)
->setDueDays(14) ->setDueDays(14)
->setPaymentTerms( ->setPaymentTerms(
@@ -42,10 +42,10 @@ class InvoiceTemplateFixtures implements TestFixture
'as reference.' 'as reference.'
) )
->setAddress( ->setAddress(
$faker->streetAddress . PHP_EOL . $faker->streetAddress() . PHP_EOL .
$faker->city . ', ' . $faker->stateAbbr . ' ' . $faker->postcode . PHP_EOL . $faker->city() . ' ' . $faker->postcode() . ', ' . $faker->country() . PHP_EOL .
'Phone: ' . $faker->phoneNumber . PHP_EOL . 'Phone: ' . $faker->phoneNumber() . PHP_EOL .
'Email: ' . $faker->safeEmail 'Email: ' . $faker->safeEmail()
) )
->setLanguage('en') ->setLanguage('en')
; ;

View File

@@ -98,9 +98,9 @@ final class ProjectFixtures implements TestFixture
$visible = $this->isVisible; $visible = $this->isVisible;
} }
$project = new Project(); $project = new Project();
$project->setName($faker->catchPhrase . ($visible ? '' : ' (x)')); $project->setName($faker->company() . ($visible ? '' : ' (x)'));
$project->setBudget(rand(0, 10000)); $project->setBudget(rand(0, 10000));
$project->setComment($faker->text); $project->setComment($faker->text());
$project->setCustomer($customers[array_rand($customers)]); $project->setCustomer($customers[array_rand($customers)]);
$project->setVisible($visible); $project->setVisible($visible);

View File

@@ -11,7 +11,6 @@ namespace App\Tests\DataFixtures;
use App\Entity\Customer; use App\Entity\Customer;
use App\Entity\Team; use App\Entity\Team;
use App\Entity\TeamMember;
use App\Entity\User; use App\Entity\User;
use Doctrine\Persistence\ObjectManager; 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 = new Team();
$team $team->setName('Testing: ' . uniqid());
->setName('Testing: ' . uniqid()) $team->addTeamlead($lead);
->addMember($member)
;
if ($this->addUser) { if ($this->addUser) {
$userToAdd = null; $userToAdd = null;

View File

@@ -246,7 +246,7 @@ final class TimesheetFixtures implements TestFixture
$manager->flush(); $manager->flush();
for ($i = 0; $i < $this->amount; $i++) { for ($i = 0; $i < $this->amount; $i++) {
$description = $faker->text; $description = $faker->text();
if ($this->allowEmptyDescriptions) { if ($this->allowEmptyDescriptions) {
if ($i % 3 == 0) { if ($i % 3 == 0) {
$description = null; $description = null;
@@ -292,7 +292,7 @@ final class TimesheetFixtures implements TestFixture
$user, $user,
$activity, $activity,
$project, $project,
$faker->text, $faker->text(),
$this->getDateTime($i), $this->getDateTime($i),
$tags, $tags,
false false

View File

@@ -75,7 +75,16 @@ class TeamTest extends TestCase
self::assertFalse($sut->hasMember($member)); self::assertFalse($sut->hasMember($member));
$sut->removeMember($member); $sut->removeMember($member);
$sut->removeMember($member2); $sut->removeMember($member2);
self::assertFalse($sut->hasUser($user));
$sut->addMember($member); $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()); self::assertCount(1, $sut->getMembers());
$sut->removeMember($member2); $sut->removeMember($member2);
self::assertCount(1, $sut->getMembers()); self::assertCount(1, $sut->getMembers());
@@ -90,7 +99,7 @@ class TeamTest extends TestCase
$sut->addTeamlead($user2); $sut->addTeamlead($user2);
self::assertCount(2, $sut->getMembers()); self::assertCount(2, $sut->getMembers());
self::assertTrue($sut->isTeamlead($user2)); self::assertTrue($sut->isTeamlead($user2));
$sut->removeTeamlead($user2); $sut->demoteTeamlead($user2);
self::assertCount(2, $sut->getMembers()); self::assertCount(2, $sut->getMembers());
self::assertFalse($sut->isTeamlead($user2)); self::assertFalse($sut->isTeamlead($user2));

View File

@@ -6,9 +6,6 @@ includes:
parameters: parameters:
tmpDir: %rootDir%/../../../var/cache/phpstan tmpDir: %rootDir%/../../../var/cache/phpstan
ignoreErrors: 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.#' - '#Call to static method PHPUnit\\Framework\\Assert::assertSame\(\) with App\\Entity\\[a-zA-Z0-9]+ and null will always evaluate to false.#'
excludes_analyse: excludes_analyse:
- %rootDir%/../../../tests/Ldap/LdapDriverTest.php - %rootDir%/../../../tests/Ldap/LdapDriverTest.php