support multiple teamleads in each team (#2702)

* fix jumping avatars
* fix line-break after color dot for long names
This commit is contained in:
Kevin Papst
2021-08-07 18:05:41 +02:00
committed by GitHub
parent e9986c92d6
commit b2d3272151
101 changed files with 1952 additions and 649 deletions

View File

@@ -14,6 +14,7 @@ use App\Entity\Activity;
use App\Entity\Customer;
use App\Entity\Project;
use App\Entity\Team;
use App\Entity\TeamMember;
use App\Entity\User;
use Doctrine\Common\Collections\Collection;
use PHPUnit\Framework\TestCase;
@@ -28,9 +29,10 @@ class TeamTest extends TestCase
$sut = new Team();
self::assertNull($sut->getId());
self::assertNull($sut->getName());
self::assertNull($sut->getTeamLead());
self::assertInstanceOf(Collection::class, $sut->getUsers());
self::assertEquals(0, $sut->getUsers()->count());
self::assertFalse($sut->hasUsers());
self::assertFalse($sut->hasTeamleads());
self::assertIsArray($sut->getTeamleads());
self::assertEmpty($sut->getTeamleads());
self::assertInstanceOf(Collection::class, $sut->getCustomers());
self::assertEquals(0, $sut->getCustomers()->count());
self::assertInstanceOf(Collection::class, $sut->getProjects());
@@ -54,6 +56,63 @@ class TeamTest extends TestCase
self::assertTrue($sut->hasColor());
}
public function testTeamMemberships()
{
$user = new User();
$user2 = new User();
$member = new TeamMember();
$member->setUser($user);
$member2 = new TeamMember();
$member2->setUser($user);
$member2->setTeam(new Team());
$sut = new Team();
self::assertFalse($sut->isTeamlead($user));
self::assertCount(0, $sut->getTeamleads());
self::assertCount(0, $sut->getMembers());
self::assertFalse($sut->hasMember($member));
$sut->removeMember($member);
$sut->removeMember($member2);
$sut->addMember($member);
self::assertCount(1, $sut->getMembers());
$sut->removeMember($member2);
self::assertCount(1, $sut->getMembers());
$sut->removeMember($member);
self::assertCount(0, $sut->getMembers());
self::assertFalse($sut->isTeamlead($user));
$sut->addMember($member);
$member->setTeamlead(true);
self::assertTrue($sut->isTeamlead($user));
self::assertCount(1, $sut->getMembers());
$sut->addTeamlead($user2);
self::assertCount(2, $sut->getMembers());
self::assertTrue($sut->isTeamlead($user2));
$sut->removeTeamlead($user2);
self::assertCount(2, $sut->getMembers());
self::assertFalse($sut->isTeamlead($user2));
$member21 = new TeamMember();
$member21->setUser($user);
self::assertNull($member21->getTeam());
// this will not actually add it
$sut->addMember($member21);
self::assertSame($sut, $member21->getTeam());
self::assertCount(2, $sut->getMembers());
}
public function testTeamMembershipsException()
{
$this->expectException(\InvalidArgumentException::class);
$sut = new Team();
$member = new TeamMember();
$member->setTeam(new Team());
$sut->addMember($member);
}
public function testSetterAndGetter()
{
$sut = new Team();
@@ -61,12 +120,51 @@ class TeamTest extends TestCase
self::assertEquals('foo-bar', $sut->getName());
self::assertEquals('foo-bar', (string) $sut);
$user = (new User())->setAlias('Foo!');
self::assertInstanceOf(Team::class, $sut->setTeamLead($user));
self::assertSame($user, $sut->getTeamLead());
$user = $this->createMock(User::class);
$user->method('getId')->willReturn(99);
$user->method('getAlias')->willReturn('Foo!');
$sut->addTeamlead($user);
self::assertSame($user, $sut->getTeamleads()[0]);
self::assertTrue($sut->hasTeamleads());
$user1 = $this->createMock(User::class);
$user1->method('getId')->willReturn(1);
$user2 = $this->createMock(User::class);
$user2->method('getId')->willReturn(2);
self::assertFalse($sut->isTeamlead(new User()));
self::assertTrue($sut->isTeamlead($user));
self::assertCount(1, $sut->getTeamleads());
$sut->addTeamlead($user1);
self::assertCount(2, $sut->getTeamleads());
self::assertCount(2, $sut->getMembers());
$sut->addUser($user2);
self::assertCount(3, $sut->getMembers());
self::assertCount(2, $sut->getTeamleads());
$sut->addUser($user2);
self::assertCount(3, $sut->getMembers());
self::assertCount(2, $sut->getTeamleads());
}
/**
* @group legacy
*/
public function testSetterAndGetterDeprecated()
{
$sut = new Team();
self::assertNull($sut->getTeamlead());
self::assertIsArray($sut->getUsers());
self::assertEmpty($sut->getUsers());
$user = (new User())->setAlias('Foo!');
self::assertCount(0, $sut->getUsers());
$sut->setTeamlead($user);
self::assertSame($user, $sut->getTeamlead());
self::assertTrue($sut->hasTeamleads());
self::assertCount(1, $sut->getUsers());
self::assertCount(1, $sut->getTeamleads());
self::assertCount(1, $sut->getMembers());
}
public function testCustomer()
@@ -137,15 +235,69 @@ class TeamTest extends TestCase
$sut = new Team();
$sut->addUser($user);
self::assertEquals(1, $sut->getUsers()->count());
$actual = $sut->getUsers()[0];
self::assertCount(1, $sut->getUsers());
$users = $sut->getUsers();
$actual = $users[0];
self::assertSame($actual, $user);
self::assertSame($sut, $user->getTeams()[0]);
$teams = $user->getTeams();
self::assertSame($sut, $teams[0]);
self::assertFalse($sut->hasUser(new User()));
self::assertTrue($sut->hasUser($user));
$sut->removeUser(new User());
self::assertEquals(1, $sut->getUsers()->count());
self::assertCount(1, $sut->getUsers());
$sut->removeUser($user);
self::assertEquals(0, $sut->getUsers()->count());
self::assertCount(0, $sut->getUsers());
$sut->addTeamlead(new User());
self::assertCount(1, $sut->getUsers());
}
public function testClone()
{
$c = new Customer();
$c->setName('Foo');
$p = new Project();
$p->setName('Bar');
$a = new Activity();
$a->setName('Hello');
$u = new User();
$u->setAlias('World');
$member = new TeamMember();
$member->setUser(new User());
$team = new Team();
$team->addCustomer($c);
$team->addCustomer(new Customer());
$team->addProject($p);
$team->addProject(new Project());
$team->addActivity($a);
$team->addActivity(new Activity());
$team->addTeamlead($u);
$team->addMember($member);
$team->addUser(new User());
$reflection = new \ReflectionClass($team);
$property = $reflection->getProperty('id');
$property->setAccessible(true);
$property->setValue($team, 99);
$property->setAccessible(false);
self::assertEquals(99, $team->getId());
$sut = clone $team;
self::assertNull($sut->getId());
self::assertCount(2, $sut->getCustomers());
self::assertCount(2, $sut->getProjects());
self::assertCount(2, $sut->getActivities());
self::assertCount(1, $sut->getTeamleads());
self::assertCount(3, $sut->getMembers());
self::assertCount(3, $sut->getUsers());
self::assertSame($c, $sut->getCustomers()[0]);
self::assertSame($p, $sut->getProjects()[0]);
self::assertSame($a, $sut->getActivities()[0]);
self::assertSame($u, $sut->getTeamleads()[0]);
self::assertSame($u, $sut->getMembers()[0]->getUser());
self::assertSame($member->getUser(), $sut->getUsers()[1]);
}
}