3838use Glpi \Tests \DbTestCase ;
3939use Project ;
4040use ProjectTask ;
41+ use ProjectTaskTeam ;
4142
4243/* Test for inc/projecttask.class.php */
4344
@@ -79,7 +80,7 @@ public function testPlanningConflict()
7980 $ this ->hasNoSessionMessages ([ERROR , WARNING ]);
8081 $ task_id = $ ptask ->fields ['id ' ];
8182
82- $ team = new \ ProjectTaskTeam ();
83+ $ team = new ProjectTaskTeam ();
8384 $ tid = (int ) $ team ->add ([
8485 'projecttasks_id ' => $ ptask ->fields ['id ' ],
8586 'itemtype ' => \User::getType (),
@@ -100,7 +101,7 @@ public function testPlanningConflict()
100101 );
101102 $ this ->hasNoSessionMessages ([ERROR , WARNING ]);
102103
103- $ team = new \ ProjectTaskTeam ();
104+ $ team = new ProjectTaskTeam ();
104105 $ tid = (int ) $ team ->add ([
105106 'projecttasks_id ' => $ ptask ->fields ['id ' ],
106107 'itemtype ' => \User::getType (),
@@ -130,7 +131,7 @@ public function testPlanningConflict()
130131 );
131132 $ this ->hasNoSessionMessages ([ERROR , WARNING ]);
132133
133- $ team = new \ ProjectTaskTeam ();
134+ $ team = new ProjectTaskTeam ();
134135 $ tid = (int ) $ team ->add ([
135136 'projecttasks_id ' => $ ptask ->fields ['id ' ],
136137 'itemtype ' => \User::getType (),
@@ -405,7 +406,7 @@ public function testCloneProjectTask()
405406 $ this ->assertEquals ($ task ->fields ['name ' ] . ' (copy) ' , $ clonedTask ->fields ['name ' ]);
406407
407408 // Load task team
408- $ project_task_team = new \ ProjectTaskTeam ();
409+ $ project_task_team = new ProjectTaskTeam ();
409410 $ team = [];
410411 foreach ($ project_task_team ->find (['projecttasks_id ' => $ task ->fields ['id ' ]]) as $ row ) {
411412 $ team [] = [
@@ -857,7 +858,7 @@ public function testGetActiveProjectTaskIDsForUser()
857858 $ this ->assertEmpty (ProjectTask::getActiveProjectTaskIDsForUser ([$ user ->getID ()]));
858859
859860 // Create user team
860- $ user_team = $ this ->createItem (\ ProjectTaskTeam::getType (), [
861+ $ user_team = $ this ->createItem (ProjectTaskTeam::getType (), [
861862 'projecttasks_id ' => $ project_task ->getID (),
862863 'itemtype ' => \User::class,
863864 'items_id ' => $ user ->getID (),
@@ -876,14 +877,14 @@ public function testGetActiveProjectTaskIDsForUser()
876877 $ this ->createItem (\Group_User::getType (), ['groups_id ' => $ group ->getID (), 'users_id ' => $ user ->getID ()]);
877878
878879 // Create group team
879- $ this ->createItem (\ ProjectTaskTeam::getType (), [
880+ $ this ->createItem (ProjectTaskTeam::getType (), [
880881 'projecttasks_id ' => $ project_task ->getID (),
881882 'itemtype ' => \Group::class,
882883 'items_id ' => $ group ->getID (),
883884 ]);
884885
885886 // Remove user team
886- $ this ->deleteItem (\ ProjectTaskTeam::getType (), $ user_team ->getID ());
887+ $ this ->deleteItem (ProjectTaskTeam::getType (), $ user_team ->getID ());
887888
888889 // Check if a user with a project with tasks, where the user is a member of the group and the group is a member of the team, returns an array with the task ID if $search_in_groups is true
889890 $ this ->assertEquals (
@@ -934,7 +935,7 @@ public function testGetActiveProjectTaskIDsForGroup(): void
934935 $ this ->assertEmpty (ProjectTask::getActiveProjectTaskIDsForGroup ([$ group ->getID ()]));
935936
936937 // Create group team
937- $ this ->createItem (\ ProjectTaskTeam::getType (), [
938+ $ this ->createItem (ProjectTaskTeam::getType (), [
938939 'projecttasks_id ' => $ project_task ->getID (),
939940 'itemtype ' => \Group::class,
940941 'items_id ' => $ group ->getID (),
@@ -1003,4 +1004,66 @@ public function testAutoSetDate(): void
10031004 $ result = $ task2 ->autoSetDate ($ input );
10041005 $ this ->assertNull ($ result ['real_end_date ' ]);
10051006 }
1007+
1008+ public function testAffectAndUnaffectTeamMember (): void
1009+ {
1010+ $ this ->login ();
1011+
1012+ $ project = $ this ->createItem (Project::class, ['name ' => __FUNCTION__ ]);
1013+ $ task = $ this ->createItem (ProjectTask::class, [
1014+ 'name ' => __FUNCTION__ ,
1015+ 'projects_id ' => $ project ->getID (),
1016+ ]);
1017+ $ group = getItemByTypeName ('Group ' , '_test_group_1 ' );
1018+
1019+ $ criteria = [
1020+ 'projecttasks_id ' => $ task ->getID (),
1021+ 'itemtype ' => 'Group ' ,
1022+ 'items_id ' => $ group ->getID (),
1023+ ];
1024+
1025+ // Ajout d'un membre
1026+ $ team_entry = $ this ->createItem (ProjectTaskTeam::class, $ criteria );
1027+ $ this ->assertSame (1 , countElementsInTable (ProjectTaskTeam::getTable (), $ criteria ));
1028+
1029+ // Vérification via getTeamFor
1030+ $ team = ProjectTaskTeam::getTeamFor ($ task ->getID ());
1031+ $ this ->assertCount (1 , $ team ['Group ' ]);
1032+ $ this ->assertSame ($ group ->getID (), $ team ['Group ' ][0 ]['items_id ' ]);
1033+
1034+ // Suppression du membre
1035+ $ this ->deleteItem (ProjectTaskTeam::class, $ team_entry ->getID ());
1036+ $ this ->assertSame (0 , countElementsInTable (ProjectTaskTeam::getTable (), $ criteria ));
1037+
1038+ $ team = ProjectTaskTeam::getTeamFor ($ task ->getID ());
1039+ $ this ->assertCount (0 , $ team ['Group ' ]);
1040+ }
1041+
1042+ public function testAffectTeamMemberDuplicatePrevented (): void
1043+ {
1044+ $ this ->login ();
1045+
1046+ $ project = $ this ->createItem (Project::class, ['name ' => __FUNCTION__ ]);
1047+ $ task = $ this ->createItem (ProjectTask::class, [
1048+ 'name ' => __FUNCTION__ ,
1049+ 'projects_id ' => $ project ->getID (),
1050+ ]);
1051+ $ group = getItemByTypeName ('Group ' , '_test_group_1 ' );
1052+
1053+ $ criteria = [
1054+ 'projecttasks_id ' => $ task ->getID (),
1055+ 'itemtype ' => 'Group ' ,
1056+ 'items_id ' => $ group ->getID (),
1057+ ];
1058+
1059+ $ this ->createItem (ProjectTaskTeam::class, $ criteria );
1060+ $ this ->assertSame (1 , countElementsInTable (ProjectTaskTeam::getTable (), $ criteria ));
1061+
1062+ // Le doublon est détecté par countElementsInTable avant tout INSERT
1063+ $ already_exists = countElementsInTable (ProjectTaskTeam::getTable (), $ criteria ) > 0 ;
1064+ $ this ->assertTrue ($ already_exists );
1065+
1066+ // Toujours une seule entrée en base
1067+ $ this ->assertSame (1 , countElementsInTable (ProjectTaskTeam::getTable (), $ criteria ));
1068+ }
10061069}
0 commit comments