support multiple teamleads in each team (#2702)
* fix jumping avatars * fix line-break after color dot for long names
This commit is contained in:
@@ -235,6 +235,8 @@ abstract class APIControllerBaseTest extends ControllerBaseTest
|
||||
self::assertArrayHasKey('children', $result['errors']);
|
||||
$data = $result['errors']['children'];
|
||||
|
||||
$foundErrors = [];
|
||||
|
||||
foreach ($failedFields as $key => $value) {
|
||||
$messages = [];
|
||||
$fieldName = $value;
|
||||
@@ -245,17 +247,25 @@ abstract class APIControllerBaseTest extends ControllerBaseTest
|
||||
$messages = [$value];
|
||||
}
|
||||
}
|
||||
|
||||
while (stripos($fieldName, '.') !== false) {
|
||||
$parts = explode('.', $fieldName);
|
||||
$tmp = array_shift($parts);
|
||||
self::assertArrayHasKey($tmp, $data, sprintf('Could not find field "%s" in result', $tmp));
|
||||
$data = $data[$tmp];
|
||||
if (\count($data) === 1 && \array_key_exists('children', $data)) {
|
||||
$data = $data['children'];
|
||||
}
|
||||
$fieldName = implode('.', $parts);
|
||||
}
|
||||
|
||||
self::assertArrayHasKey($fieldName, $data, sprintf('Could not find validation error for field "%s" in list: %s', $fieldName, implode(', ', $failedFields)));
|
||||
self::assertArrayHasKey('errors', $data[$fieldName], sprintf('Field %s has no validation problem', $fieldName));
|
||||
foreach ($messages as $i => $message) {
|
||||
self::assertEquals($message, $data[$fieldName]['errors'][$i]);
|
||||
}
|
||||
}
|
||||
|
||||
$foundErrors = [];
|
||||
foreach ($data as $fieldName => $field) {
|
||||
if (\array_key_exists('errors', $field) && \count($field['errors']) > 0) {
|
||||
$foundErrors[$fieldName] = \count($field['errors']);
|
||||
if (\array_key_exists('errors', $data[$fieldName]) && \count($data[$fieldName]['errors']) > 0) {
|
||||
$foundErrors[$fieldName] = \count($data[$fieldName]['errors']);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -310,6 +320,7 @@ abstract class APIControllerBaseTest extends ControllerBaseTest
|
||||
'language' => 'string',
|
||||
'timezone' => 'string',
|
||||
'accountNumber' => '@string',
|
||||
'memberships' => ['result' => 'array', 'type' => 'TeamMembership'],
|
||||
];
|
||||
|
||||
// if a team is embedded
|
||||
@@ -328,13 +339,28 @@ abstract class APIControllerBaseTest extends ControllerBaseTest
|
||||
'id' => 'int',
|
||||
'name' => 'string',
|
||||
'color' => '@string',
|
||||
'teamlead' => ['result' => 'object', 'type' => 'User'],
|
||||
'teamlead' => ['result' => 'object', 'type' => '@User'],
|
||||
'members' => ['result' => 'array', 'type' => 'TeamMember'],
|
||||
'users' => ['result' => 'array', 'type' => 'User'],
|
||||
'customers' => ['result' => 'array', 'type' => '@Customer'],
|
||||
'projects' => ['result' => 'array', 'type' => '@Project'],
|
||||
'activities' => ['result' => 'array', 'type' => '@Activity'],
|
||||
];
|
||||
|
||||
// if the team is used inside the team context
|
||||
case 'TeamMember':
|
||||
return [
|
||||
'user' => ['result' => 'object', 'type' => 'User'],
|
||||
'teamlead' => 'bool',
|
||||
];
|
||||
|
||||
// if the team is used inside the user context
|
||||
case 'TeamMembership':
|
||||
return [
|
||||
'team' => ['result' => 'object', 'type' => 'Team'],
|
||||
'teamlead' => 'bool',
|
||||
];
|
||||
|
||||
// if a customer is embedded in other objects
|
||||
case 'Customer':
|
||||
return [
|
||||
|
||||
@@ -160,7 +160,7 @@ class CustomerControllerTest extends APIControllerBaseTest
|
||||
// and finally a team
|
||||
$team = new Team();
|
||||
$team->setName('Testing customer 1 team');
|
||||
$team->setTeamLead($this->getUserByRole(User::ROLE_USER));
|
||||
$team->addTeamlead($this->getUserByRole(User::ROLE_USER));
|
||||
$team->addCustomer($customer);
|
||||
$team->addProject($project);
|
||||
$team->addUser($this->getUserByRole(User::ROLE_TEAMLEAD));
|
||||
|
||||
@@ -144,7 +144,7 @@ class ProjectControllerTest extends APIControllerBaseTest
|
||||
// and a team
|
||||
$team = new Team();
|
||||
$team->setName('Testing project team');
|
||||
$team->setTeamLead($this->getUserByRole(User::ROLE_USER));
|
||||
$team->addTeamlead($this->getUserByRole(User::ROLE_USER));
|
||||
$team->addCustomer($customer);
|
||||
$team->addProject($project);
|
||||
$team->addUser($this->getUserByRole(User::ROLE_TEAMLEAD));
|
||||
|
||||
@@ -92,7 +92,9 @@ class TeamControllerTest extends APIControllerBaseTest
|
||||
$client = $this->getClientForAuthenticatedUser(User::ROLE_ADMIN);
|
||||
$data = [
|
||||
'name' => 'foo',
|
||||
'teamlead' => 1,
|
||||
'members' => [
|
||||
['user' => 1, 'teamlead' => 1]
|
||||
],
|
||||
];
|
||||
$this->request($client, '/api/teams', 'POST', [], json_encode($data));
|
||||
$this->assertTrue($client->getResponse()->isSuccessful());
|
||||
@@ -123,39 +125,62 @@ class TeamControllerTest extends APIControllerBaseTest
|
||||
$client = $this->getClientForAuthenticatedUser(User::ROLE_ADMIN);
|
||||
$data = [
|
||||
'name' => '',
|
||||
'teamlead' => 9999,
|
||||
'members' => [
|
||||
['user' => 9999, 'teamlead' => 1]
|
||||
],
|
||||
];
|
||||
$this->request($client, '/api/teams', 'POST', [], json_encode($data));
|
||||
|
||||
$response = $client->getResponse();
|
||||
$this->assertEquals(400, $response->getStatusCode());
|
||||
$this->assertApiCallValidationError($response, ['name', 'teamlead']);
|
||||
$this->assertApiCallValidationError($response, ['name', 'members.0.user']);
|
||||
}
|
||||
|
||||
public function testPatchAction()
|
||||
{
|
||||
$client = $this->getClientForAuthenticatedUser(User::ROLE_ADMIN);
|
||||
|
||||
$data = [
|
||||
'name' => 'foo',
|
||||
'teamlead' => 1,
|
||||
'members' => [
|
||||
['user' => 1, 'teamlead' => true],
|
||||
['user' => 5, 'teamlead' => true],
|
||||
]
|
||||
];
|
||||
$this->request($client, '/api/teams', 'POST', [], json_encode($data));
|
||||
$this->assertTrue($client->getResponse()->isSuccessful());
|
||||
$result = json_decode($client->getResponse()->getContent(), true);
|
||||
$updateId = $result['id'];
|
||||
|
||||
$data = [
|
||||
'name' => 'foo',
|
||||
'teamlead' => 2,
|
||||
'users' => [1, 5, 4]
|
||||
'members' => [
|
||||
['user' => 2, 'teamlead' => true],
|
||||
['user' => 1, 'teamlead' => false],
|
||||
['user' => 4, 'teamlead' => true],
|
||||
]
|
||||
];
|
||||
$this->request($client, '/api/teams/' . $result['id'], 'PATCH', [], json_encode($data));
|
||||
|
||||
$this->request($client, '/api/teams/' . $updateId, 'PATCH', [], json_encode($data));
|
||||
$this->assertTrue($client->getResponse()->isSuccessful());
|
||||
|
||||
$result = json_decode($client->getResponse()->getContent(), true);
|
||||
$this->assertIsArray($result);
|
||||
self::assertApiResponseTypeStructure('TeamEntity', $result);
|
||||
$this->assertNotEmpty($result['id']);
|
||||
self::assertCount(4, $result['users']);
|
||||
self::assertCount(3, $result['users']);
|
||||
|
||||
self::assertFalse($result['members'][1]['teamlead']);
|
||||
self::assertEquals(1, $result['members'][1]['user']['id']);
|
||||
self::assertEquals('clara_customer', $result['members'][1]['user']['username']);
|
||||
|
||||
self::assertTrue($result['members'][2]['teamlead']);
|
||||
self::assertEquals(4, $result['members'][2]['user']['id']);
|
||||
self::assertEquals('tony_teamlead', $result['members'][2]['user']['username']);
|
||||
|
||||
self::assertTrue(true, $result['members'][0]['teamlead']);
|
||||
self::assertEquals(2, $result['members'][0]['user']['id']);
|
||||
self::assertEquals('john_user', $result['members'][0]['user']['username']);
|
||||
}
|
||||
|
||||
public function testPatchActionWithValidationErrors()
|
||||
@@ -163,7 +188,9 @@ class TeamControllerTest extends APIControllerBaseTest
|
||||
$client = $this->getClientForAuthenticatedUser(User::ROLE_ADMIN);
|
||||
$data = [
|
||||
'name' => 'foo',
|
||||
'teamlead' => 1,
|
||||
'members' => [
|
||||
['user' => 1, 'teamlead' => 1],
|
||||
],
|
||||
];
|
||||
$this->request($client, '/api/teams', 'POST', [], json_encode($data));
|
||||
$this->assertTrue($client->getResponse()->isSuccessful());
|
||||
@@ -171,14 +198,15 @@ class TeamControllerTest extends APIControllerBaseTest
|
||||
|
||||
$data = [
|
||||
'name' => '1',
|
||||
'teamlead' => 9999,
|
||||
'users' => [9999]
|
||||
'members' => [
|
||||
['user' => 9999, 'teamlead' => 1],
|
||||
],
|
||||
];
|
||||
$this->request($client, '/api/teams/' . $result['id'], 'PATCH', [], json_encode($data));
|
||||
|
||||
$response = $client->getResponse();
|
||||
$this->assertEquals(400, $response->getStatusCode());
|
||||
$this->assertApiCallValidationError($response, ['name', 'teamlead', 'users']);
|
||||
$this->assertApiCallValidationError($response, ['name', 'members.0.user']);
|
||||
}
|
||||
|
||||
public function testDeleteAction()
|
||||
@@ -205,7 +233,9 @@ class TeamControllerTest extends APIControllerBaseTest
|
||||
$client = $this->getClientForAuthenticatedUser(User::ROLE_ADMIN);
|
||||
$data = [
|
||||
'name' => 'foo',
|
||||
'teamlead' => 1,
|
||||
'members' => [
|
||||
['user' => 1, 'teamlead' => 1]
|
||||
],
|
||||
];
|
||||
$this->request($client, '/api/teams', 'POST', [], json_encode($data));
|
||||
$this->assertTrue($client->getResponse()->isSuccessful());
|
||||
@@ -226,8 +256,10 @@ class TeamControllerTest extends APIControllerBaseTest
|
||||
$client = $this->getClientForAuthenticatedUser(User::ROLE_ADMIN);
|
||||
$data = [
|
||||
'name' => 'foo',
|
||||
'teamlead' => 1,
|
||||
'users' => [2]
|
||||
'members' => [
|
||||
['user' => 1, 'teamlead' => 1],
|
||||
['user' => 2, 'teamlead' => 0],
|
||||
],
|
||||
];
|
||||
$this->request($client, '/api/teams', 'POST', [], json_encode($data));
|
||||
$this->assertTrue($client->getResponse()->isSuccessful());
|
||||
@@ -261,8 +293,12 @@ class TeamControllerTest extends APIControllerBaseTest
|
||||
$client = $this->getClientForAuthenticatedUser(User::ROLE_ADMIN);
|
||||
$data = [
|
||||
'name' => 'foo',
|
||||
'teamlead' => 1,
|
||||
'users' => [2, 4, 5]
|
||||
'members' => [
|
||||
['user' => 1, 'teamlead' => 1],
|
||||
['user' => 2, 'teamlead' => 0],
|
||||
['user' => 4, 'teamlead' => 0],
|
||||
['user' => 5, 'teamlead' => 0],
|
||||
],
|
||||
];
|
||||
$this->request($client, '/api/teams', 'POST', [], json_encode($data));
|
||||
$this->assertTrue($client->getResponse()->isSuccessful());
|
||||
@@ -283,8 +319,12 @@ class TeamControllerTest extends APIControllerBaseTest
|
||||
$client = $this->getClientForAuthenticatedUser(User::ROLE_ADMIN);
|
||||
$data = [
|
||||
'name' => 'foo',
|
||||
'teamlead' => 1,
|
||||
'users' => [2, 4, 5]
|
||||
'members' => [
|
||||
['user' => 1, 'teamlead' => 1],
|
||||
['user' => 2, 'teamlead' => 0],
|
||||
['user' => 4, 'teamlead' => 0],
|
||||
['user' => 5, 'teamlead' => 0],
|
||||
],
|
||||
];
|
||||
$this->request($client, '/api/teams', 'POST', [], json_encode($data));
|
||||
$this->assertTrue($client->getResponse()->isSuccessful());
|
||||
@@ -324,7 +364,9 @@ class TeamControllerTest extends APIControllerBaseTest
|
||||
$client = $this->getClientForAuthenticatedUser(User::ROLE_ADMIN);
|
||||
$data = [
|
||||
'name' => 'foo',
|
||||
'teamlead' => 1,
|
||||
'members' => [
|
||||
['user' => 1, 'teamlead' => 1],
|
||||
],
|
||||
];
|
||||
$this->request($client, '/api/teams', 'POST', [], json_encode($data));
|
||||
$this->assertTrue($client->getResponse()->isSuccessful());
|
||||
@@ -346,8 +388,10 @@ class TeamControllerTest extends APIControllerBaseTest
|
||||
$client = $this->getClientForAuthenticatedUser(User::ROLE_ADMIN);
|
||||
$data = [
|
||||
'name' => 'foo',
|
||||
'teamlead' => 1,
|
||||
'users' => [2]
|
||||
'members' => [
|
||||
['user' => 1, 'teamlead' => 1],
|
||||
['user' => 2, 'teamlead' => 0],
|
||||
],
|
||||
];
|
||||
$this->request($client, '/api/teams', 'POST', [], json_encode($data));
|
||||
$this->assertTrue($client->getResponse()->isSuccessful());
|
||||
@@ -383,8 +427,12 @@ class TeamControllerTest extends APIControllerBaseTest
|
||||
$client = $this->getClientForAuthenticatedUser(User::ROLE_ADMIN);
|
||||
$data = [
|
||||
'name' => 'foo',
|
||||
'teamlead' => 1,
|
||||
'users' => [2, 4, 5]
|
||||
'members' => [
|
||||
['user' => 1, 'teamlead' => 1],
|
||||
['user' => 2, 'teamlead' => 0],
|
||||
['user' => 4, 'teamlead' => 0],
|
||||
['user' => 5, 'teamlead' => 0],
|
||||
],
|
||||
];
|
||||
$this->request($client, '/api/teams', 'POST', [], json_encode($data));
|
||||
$this->assertTrue($client->getResponse()->isSuccessful());
|
||||
@@ -411,8 +459,12 @@ class TeamControllerTest extends APIControllerBaseTest
|
||||
$client = $this->getClientForAuthenticatedUser(User::ROLE_ADMIN);
|
||||
$data = [
|
||||
'name' => 'foo',
|
||||
'teamlead' => 1,
|
||||
'users' => [2, 4, 5]
|
||||
'members' => [
|
||||
['user' => 1, 'teamlead' => 1],
|
||||
['user' => 2, 'teamlead' => 0],
|
||||
['user' => 4, 'teamlead' => 0],
|
||||
['user' => 5, 'teamlead' => 0],
|
||||
],
|
||||
];
|
||||
$this->request($client, '/api/teams', 'POST', [], json_encode($data));
|
||||
$this->assertTrue($client->getResponse()->isSuccessful());
|
||||
@@ -442,7 +494,9 @@ class TeamControllerTest extends APIControllerBaseTest
|
||||
$client = $this->getClientForAuthenticatedUser(User::ROLE_ADMIN);
|
||||
$data = [
|
||||
'name' => 'foo',
|
||||
'teamlead' => 1,
|
||||
'members' => [
|
||||
['user' => 1, 'teamlead' => 1],
|
||||
],
|
||||
];
|
||||
$this->request($client, '/api/teams', 'POST', [], json_encode($data));
|
||||
$this->assertTrue($client->getResponse()->isSuccessful());
|
||||
@@ -463,8 +517,10 @@ class TeamControllerTest extends APIControllerBaseTest
|
||||
$client = $this->getClientForAuthenticatedUser(User::ROLE_ADMIN);
|
||||
$data = [
|
||||
'name' => 'foo',
|
||||
'teamlead' => 1,
|
||||
'users' => [2]
|
||||
'members' => [
|
||||
['user' => 1, 'teamlead' => 1],
|
||||
['user' => 2, 'teamlead' => 0],
|
||||
],
|
||||
];
|
||||
$this->request($client, '/api/teams', 'POST', [], json_encode($data));
|
||||
$this->assertTrue($client->getResponse()->isSuccessful());
|
||||
@@ -500,8 +556,12 @@ class TeamControllerTest extends APIControllerBaseTest
|
||||
$client = $this->getClientForAuthenticatedUser(User::ROLE_ADMIN);
|
||||
$data = [
|
||||
'name' => 'foo',
|
||||
'teamlead' => 1,
|
||||
'users' => [2, 4, 5]
|
||||
'members' => [
|
||||
['user' => 1, 'teamlead' => 1],
|
||||
['user' => 2, 'teamlead' => 0],
|
||||
['user' => 4, 'teamlead' => 0],
|
||||
['user' => 5, 'teamlead' => 0],
|
||||
],
|
||||
];
|
||||
$this->request($client, '/api/teams', 'POST', [], json_encode($data));
|
||||
$this->assertTrue($client->getResponse()->isSuccessful());
|
||||
@@ -528,8 +588,12 @@ class TeamControllerTest extends APIControllerBaseTest
|
||||
$client = $this->getClientForAuthenticatedUser(User::ROLE_ADMIN);
|
||||
$data = [
|
||||
'name' => 'foo',
|
||||
'teamlead' => 1,
|
||||
'users' => [2, 4, 5]
|
||||
'members' => [
|
||||
['user' => 1, 'teamlead' => 1],
|
||||
['user' => 2, 'teamlead' => 0],
|
||||
['user' => 4, 'teamlead' => 0],
|
||||
['user' => 5, 'teamlead' => 0],
|
||||
],
|
||||
];
|
||||
$this->request($client, '/api/teams', 'POST', [], json_encode($data));
|
||||
$this->assertTrue($client->getResponse()->isSuccessful());
|
||||
@@ -559,7 +623,9 @@ class TeamControllerTest extends APIControllerBaseTest
|
||||
$client = $this->getClientForAuthenticatedUser(User::ROLE_ADMIN);
|
||||
$data = [
|
||||
'name' => 'foo',
|
||||
'teamlead' => 1,
|
||||
'members' => [
|
||||
['user' => 1, 'teamlead' => 1],
|
||||
],
|
||||
];
|
||||
$this->request($client, '/api/teams', 'POST', [], json_encode($data));
|
||||
$this->assertTrue($client->getResponse()->isSuccessful());
|
||||
@@ -580,8 +646,10 @@ class TeamControllerTest extends APIControllerBaseTest
|
||||
$client = $this->getClientForAuthenticatedUser(User::ROLE_ADMIN);
|
||||
$data = [
|
||||
'name' => 'foo',
|
||||
'teamlead' => 1,
|
||||
'users' => [2]
|
||||
'members' => [
|
||||
['user' => 1, 'teamlead' => 1],
|
||||
['user' => 2, 'teamlead' => 0],
|
||||
],
|
||||
];
|
||||
$this->request($client, '/api/teams', 'POST', [], json_encode($data));
|
||||
$this->assertTrue($client->getResponse()->isSuccessful());
|
||||
@@ -617,8 +685,12 @@ class TeamControllerTest extends APIControllerBaseTest
|
||||
$client = $this->getClientForAuthenticatedUser(User::ROLE_ADMIN);
|
||||
$data = [
|
||||
'name' => 'foo',
|
||||
'teamlead' => 1,
|
||||
'users' => [2, 4, 5]
|
||||
'members' => [
|
||||
['user' => 1, 'teamlead' => 1],
|
||||
['user' => 2, 'teamlead' => 0],
|
||||
['user' => 4, 'teamlead' => 0],
|
||||
['user' => 5, 'teamlead' => 0],
|
||||
],
|
||||
];
|
||||
$this->request($client, '/api/teams', 'POST', [], json_encode($data));
|
||||
$this->assertTrue($client->getResponse()->isSuccessful());
|
||||
@@ -645,8 +717,12 @@ class TeamControllerTest extends APIControllerBaseTest
|
||||
$client = $this->getClientForAuthenticatedUser(User::ROLE_ADMIN);
|
||||
$data = [
|
||||
'name' => 'foo',
|
||||
'teamlead' => 1,
|
||||
'users' => [2, 4, 5]
|
||||
'members' => [
|
||||
['user' => 1, 'teamlead' => 1],
|
||||
['user' => 2, 'teamlead' => 0],
|
||||
['user' => 4, 'teamlead' => 0],
|
||||
['user' => 5, 'teamlead' => 0],
|
||||
],
|
||||
];
|
||||
$this->request($client, '/api/teams', 'POST', [], json_encode($data));
|
||||
$this->assertTrue($client->getResponse()->isSuccessful());
|
||||
|
||||
Reference in New Issue
Block a user