@@ -113,4 +113,94 @@ public function test_make_member_to_placeholder_creates_new_user_based_on_member
113113 $ this ->assertSame ($ otherMember ->getKey (), $ otherTimeEntry ->member_id );
114114 $ this ->assertSame (1 , $ otherUser ->organizations ()->count ());
115115 }
116+
117+ public function test_assign_organization_entities_to_different_member_without_any_entries (): void
118+ {
119+ // Arrange
120+ $ organization = Organization::factory ()->create ();
121+ $ project = Project::factory ()->forOrganization ($ organization )->create ();
122+ $ otherUser = User::factory ()->create ();
123+ $ fromUser = User::factory ()->create ();
124+ $ toUser = User::factory ()->create ();
125+ $ otherUserMember = Member::factory ()->forOrganization ($ organization )->forUser ($ otherUser )->create ();
126+ $ fromUserMember = Member::factory ()->forOrganization ($ organization )->forUser ($ fromUser )->create ();
127+ $ toUserMember = Member::factory ()->forOrganization ($ organization )->forUser ($ toUser )->create ();
128+ TimeEntry::factory ()->forOrganization ($ organization )->forMember ($ otherUserMember )->createMany (3 );
129+ TimeEntry::factory ()->forOrganization ($ organization )->forMember ($ fromUserMember )->createMany (3 );
130+ ProjectMember::factory ()->forProject ($ project )->forMember ($ otherUserMember )->create ();
131+ ProjectMember::factory ()->forProject ($ project )->forMember ($ fromUserMember )->create ();
132+
133+ // Act
134+ $ this ->memberService ->assignOrganizationEntitiesToDifferentMember ($ organization , $ fromUserMember , $ toUserMember );
135+
136+ // Assert
137+ $ this ->assertSame (3 , TimeEntry::query ()->whereBelongsTo ($ toUser , 'user ' )->count ());
138+ $ this ->assertSame (3 , TimeEntry::query ()->whereBelongsTo ($ otherUser , 'user ' )->count ());
139+ $ this ->assertSame (0 , TimeEntry::query ()->whereBelongsTo ($ fromUser , 'user ' )->count ());
140+ $ this ->assertSame (1 , ProjectMember::query ()->whereBelongsTo ($ toUser , 'user ' )->count ());
141+ $ this ->assertSame (1 , ProjectMember::query ()->whereBelongsTo ($ otherUser , 'user ' )->count ());
142+ $ this ->assertSame (0 , ProjectMember::query ()->whereBelongsTo ($ fromUser , 'user ' )->count ());
143+
144+ $ this ->assertSame (3 , TimeEntry::query ()->whereBelongsTo ($ toUserMember , 'member ' )->count ());
145+ $ this ->assertSame (3 , TimeEntry::query ()->whereBelongsTo ($ otherUserMember , 'member ' )->count ());
146+ $ this ->assertSame (0 , TimeEntry::query ()->whereBelongsTo ($ fromUserMember , 'member ' )->count ());
147+ $ this ->assertSame (1 , ProjectMember::query ()->whereBelongsTo ($ toUserMember , 'member ' )->count ());
148+ $ this ->assertSame (1 , ProjectMember::query ()->whereBelongsTo ($ otherUserMember , 'member ' )->count ());
149+ $ this ->assertSame (0 , ProjectMember::query ()->whereBelongsTo ($ fromUserMember , 'member ' )->count ());
150+ }
151+
152+ public function test_assign_organization_entities_to_different_member_with_entries (): void
153+ {
154+ // Arrange
155+ $ organization = Organization::factory ()->create ();
156+ $ project = Project::factory ()->forOrganization ($ organization )->create ();
157+ $ otherUser = User::factory ()->create ();
158+ $ fromUser = User::factory ()->create ();
159+ $ toUser = User::factory ()->create ();
160+ $ otherUserMember = Member::factory ()->forOrganization ($ organization )->forUser ($ otherUser )->create ();
161+ $ fromUserMember = Member::factory ()->forOrganization ($ organization )->forUser ($ fromUser )->create ();
162+ $ toUserMember = Member::factory ()->forOrganization ($ organization )->forUser ($ toUser )->create ();
163+ TimeEntry::factory ()->forOrganization ($ organization )->forMember ($ otherUserMember )->createMany (3 );
164+ TimeEntry::factory ()->forOrganization ($ organization )->forMember ($ fromUserMember )->createMany (3 );
165+ TimeEntry::factory ()->forOrganization ($ organization )->forMember ($ toUserMember )->createMany (3 );
166+ ProjectMember::factory ()->forProject ($ project )->forMember ($ otherUserMember )->create ([
167+ 'billable_rate ' => 1 ,
168+ ]);
169+ ProjectMember::factory ()->forProject ($ project )->forMember ($ fromUserMember )->create ([
170+ 'billable_rate ' => 2 ,
171+ ]);
172+ ProjectMember::factory ()->forProject ($ project )->forMember ($ toUserMember )->create ([
173+ 'billable_rate ' => 3 ,
174+ ]);
175+
176+ // Act
177+ $ this ->memberService ->assignOrganizationEntitiesToDifferentMember ($ organization , $ fromUserMember , $ toUserMember );
178+
179+ // Assert
180+ $ this ->assertSame (6 , TimeEntry::query ()->whereBelongsTo ($ toUser , 'user ' )->count ());
181+ $ this ->assertSame (3 , TimeEntry::query ()->whereBelongsTo ($ otherUser , 'user ' )->count ());
182+ $ this ->assertSame (0 , TimeEntry::query ()->whereBelongsTo ($ fromUser , 'user ' )->count ());
183+ $ this ->assertSame (1 , ProjectMember::query ()->whereBelongsTo ($ toUser , 'user ' )->count ());
184+ $ this ->assertSame (1 , ProjectMember::query ()->whereBelongsTo ($ otherUser , 'user ' )->count ());
185+ $ this ->assertSame (0 , ProjectMember::query ()->whereBelongsTo ($ fromUser , 'user ' )->count ());
186+
187+ $ this ->assertSame (6 , TimeEntry::query ()->whereBelongsTo ($ toUserMember , 'member ' )->count ());
188+ $ this ->assertSame (3 , TimeEntry::query ()->whereBelongsTo ($ otherUserMember , 'member ' )->count ());
189+ $ this ->assertSame (0 , TimeEntry::query ()->whereBelongsTo ($ fromUserMember , 'member ' )->count ());
190+ $ this ->assertSame (1 , ProjectMember::query ()->whereBelongsTo ($ toUserMember , 'member ' )->count ());
191+ $ this ->assertSame (1 , ProjectMember::query ()->whereBelongsTo ($ otherUserMember , 'member ' )->count ());
192+ $ this ->assertSame (0 , ProjectMember::query ()->whereBelongsTo ($ fromUserMember , 'member ' )->count ());
193+
194+ $ this ->assertDatabaseCount (ProjectMember::class, 2 );
195+ $ this ->assertDatabaseHas (ProjectMember::class, [
196+ 'project_id ' => $ project ->id ,
197+ 'member_id ' => $ toUserMember ->id ,
198+ 'billable_rate ' => 3 ,
199+ ]);
200+ $ this ->assertDatabaseHas (ProjectMember::class, [
201+ 'project_id ' => $ project ->id ,
202+ 'member_id ' => $ otherUserMember ->id ,
203+ 'billable_rate ' => 1 ,
204+ ]);
205+ }
116206}
0 commit comments