-
Pros
-
+
+
+
+
+
-
-
Cons
-
- -
+
+
+
{{ review.title }}
+
+ Rating:
+
+
+
+
+
+
+ {{ review.description }}
+
+
+
+
+
+
-
-
-
- {{ feature.label }}
- {{ feature.label }}
+
+
+
+
+
-
-
+
+
+
diff --git a/resources/js/Components/Resources/Reviews/UpdateResourceReview.vue b/resources/js/Components/Resources/Reviews/UpdateResourceReview.vue
new file mode 100644
index 00000000..965c9afe
--- /dev/null
+++ b/resources/js/Components/Resources/Reviews/UpdateResourceReview.vue
@@ -0,0 +1,217 @@
+
+
+
+
+
diff --git a/routes/web.php b/routes/web.php
index 938cd1c0..d457da88 100644
--- a/routes/web.php
+++ b/routes/web.php
@@ -45,6 +45,7 @@
// CompSci Resource Reviews
Route::controller(ResourceReviewController::class)->group(function () {
Route::post('/reviews/{computerScienceResource}', 'store')->name('reviews.store');
+ Route::put('/reviews/{computerScienceResource}', 'update')->name('reviews.update');
});
// Resource Edits
diff --git a/tests/Feature/ResourceReviewsTest.php b/tests/Feature/ResourceReviewsTest.php
index bc751d0a..e43fa700 100644
--- a/tests/Feature/ResourceReviewsTest.php
+++ b/tests/Feature/ResourceReviewsTest.php
@@ -93,7 +93,7 @@ public function test_resource_review_cannot_be_posted_twice(): void
$data2 = ResourceReviewTestResource::fake();
$this->actingAs($user)
->post(route('reviews.store', $resource), $data2);
-
+
$this->assertDatabaseMissing('resource_reviews', [
'computer_science_resource_id' => $resource->id,
'title' => $data2['title']
@@ -153,4 +153,58 @@ public function test_resource_review_average_updates_correctly(): void
'review_count' => $reviewCount,
], $total));
}
+
+ public function test_resource_review_can_be_updated(): void
+ {
+ $times = 10;
+
+ $resource = ComputerScienceResource::factory()->create();
+ $users = User::factory($times)->create();
+ $total = [
+ 'community' => 0,
+ 'teaching_clarity' => 0,
+ 'engagement' => 0,
+ 'practicality' => 0,
+ 'user_friendliness' => 0,
+ 'updates' => 0,
+ ];
+
+ foreach ($users as $user) {
+ $data = ResourceReviewTestResource::fake();
+ foreach (array_keys($total) as $key) {
+ $total[$key] += $data[$key];
+ }
+
+ $this->actingAs($user)->post(route('reviews.store', $resource), $data);
+ }
+
+ $this->assertDatabaseHas('resource_review_summaries', array_merge([
+ 'computer_science_resource_id' => $resource->id,
+ 'review_count' => $times,
+ ], $total));
+
+ $total = [
+ 'community' => 0,
+ 'teaching_clarity' => 0,
+ 'engagement' => 0,
+ 'practicality' => 0,
+ 'user_friendliness' => 0,
+ 'updates' => 0,
+ ];
+
+ foreach ($users as $user) {
+ // Update to new review
+ $newData = ResourceReviewTestResource::fake();
+ foreach (array_keys($total) as $key) {
+ $total[$key] += $newData[$key];
+ }
+
+ $this->actingAs($user)->put(route('reviews.update', $resource), $newData);
+ }
+
+ $this->assertDatabaseHas('resource_review_summaries', array_merge([
+ 'computer_science_resource_id' => $resource->id,
+ 'review_count' => $times,
+ ], $total));
+ }
}