@@ -149,6 +149,42 @@ public function test_multiple_upvotes()
149149 $ this ->assertEquals (0 , $ resource ->upvoteSummary ->downvotes ); // No downvotes
150150 }
151151
152+ /**
153+ * Test two upvotes from the same user is actually deleting the original vote.
154+ */
155+ public function test_same_user_double_upvotes ()
156+ {
157+ $ user = User::factory ()->create ();
158+ $ resource = ComputerScienceResource::factory ()->create ();
159+
160+ // Upvote twice
161+ $ this ->actingAs ($ user );
162+ $ this ->postJson (route ('upvote ' , ['type ' => 'resource ' , 'id ' => $ resource ->id ]));
163+ $ this ->postJson (route ('upvote ' , ['type ' => 'resource ' , 'id ' => $ resource ->id ]));
164+
165+ // Check if the votes have been deleted correctly
166+ $ this ->assertEquals (0 , $ resource ->upvoteSummary ->upvotes ); // No upvotes
167+ $ this ->assertEquals (0 , $ resource ->upvoteSummary ->downvotes ); // No downvotes
168+ }
169+
170+ /**
171+ * Test two upvotes from the same user is actually deleting the original vote.
172+ */
173+ public function test_same_user_double_downvotes ()
174+ {
175+ $ user = User::factory ()->create ();
176+ $ resource = ComputerScienceResource::factory ()->create ();
177+
178+ // Upvote twice
179+ $ this ->actingAs ($ user );
180+ $ this ->postJson (route ('downvote ' , ['type ' => 'resource ' , 'id ' => $ resource ->id ]));
181+ $ this ->postJson (route ('downvote ' , ['type ' => 'resource ' , 'id ' => $ resource ->id ]));
182+
183+ // Check if the votes have been deleted correctly
184+ $ this ->assertEquals (0 , $ resource ->upvoteSummary ->upvotes ); // No upvotes
185+ $ this ->assertEquals (0 , $ resource ->upvoteSummary ->downvotes ); // No downvotes
186+ }
187+
152188 /**
153189 * Test upvote after downvote makes the score 0.
154190 */
0 commit comments