diff --git a/app/views/lessons/v2_project_submissions/create.turbo_stream.erb b/app/views/lessons/v2_project_submissions/create.turbo_stream.erb
index 51640738e2..eb1006bd27 100644
--- a/app/views/lessons/v2_project_submissions/create.turbo_stream.erb
+++ b/app/views/lessons/v2_project_submissions/create.turbo_stream.erb
@@ -1,5 +1,5 @@
<%= turbo_stream.prepend "submissions-list" do %>
- <%= render ProjectSubmissions::ItemComponent.new(item: @project_submission) %>
+ <%= render ProjectSubmissions::ItemComponent.new(project_submission: @project_submission, current_user: current_user) %>
<% end %>
<%= turbo_stream.remove "add-submission-button" %>
diff --git a/app/views/lessons/v2_project_submissions/edit.html.erb b/app/views/lessons/v2_project_submissions/edit.html.erb
new file mode 100644
index 0000000000..b89db18b18
--- /dev/null
+++ b/app/views/lessons/v2_project_submissions/edit.html.erb
@@ -0,0 +1,3 @@
+<%= render ModalComponent.new(title: 'Update your project') do %>
+ <%= render 'lessons/v2_project_submissions/form', project_submission: @project_submission, url: lesson_v2_project_submission_path(@lesson, @project_submission) %>
+<% end %>
diff --git a/app/views/lessons/v2_project_submissions/index.html.erb b/app/views/lessons/v2_project_submissions/index.html.erb
index 1d51ab4173..9ee9496f06 100644
--- a/app/views/lessons/v2_project_submissions/index.html.erb
+++ b/app/views/lessons/v2_project_submissions/index.html.erb
@@ -24,8 +24,8 @@
<%= turbo_frame_tag 'submissions-list', data: { test_id: 'submissions-list' } do %>
- <%= render ProjectSubmissions::ItemComponent.new(item: @current_user_submission) %>
- <%= render ProjectSubmissions::ItemComponent.with_collection(@project_submissions) %>
+ <%= render ProjectSubmissions::ItemComponent.new(project_submission: @current_user_submission, current_user:) %>
+ <%= render ProjectSubmissions::ItemComponent.with_collection(@project_submissions, current_user:) %>
<% end %>
<% end %>
diff --git a/app/views/lessons/v2_project_submissions/new.html.erb b/app/views/lessons/v2_project_submissions/new.html.erb
index ed4435641c..b78d1eecdb 100644
--- a/app/views/lessons/v2_project_submissions/new.html.erb
+++ b/app/views/lessons/v2_project_submissions/new.html.erb
@@ -1,3 +1,3 @@
<%= render ModalComponent.new(title: 'Submit your project') do %>
- <%= render 'lessons/v2_project_submissions/form', lesson: @lesson, project_submission: @project_submission %>
+ <%= render 'lessons/v2_project_submissions/form', project_submission: @project_submission, url: lesson_v2_project_submissions_path(@lesson) %>
<% end %>
diff --git a/app/views/lessons/v2_project_submissions/update.turbo_stream.erb b/app/views/lessons/v2_project_submissions/update.turbo_stream.erb
new file mode 100644
index 0000000000..8669c54adb
--- /dev/null
+++ b/app/views/lessons/v2_project_submissions/update.turbo_stream.erb
@@ -0,0 +1,3 @@
+<%= turbo_stream.replace @project_submission do %>
+ <%= render ProjectSubmissions::ItemComponent.new(project_submission: @project_submission, current_user: current_user) %>
+<% end %>
diff --git a/config/routes.rb b/config/routes.rb
index d89f88f429..71f91be328 100644
--- a/config/routes.rb
+++ b/config/routes.rb
@@ -94,7 +94,7 @@
resources :lessons, only: :show do
resources :project_submissions, only: %i[index], controller: 'lessons/project_submissions'
- resources :v2_project_submissions, only: %i[index new create], controller: 'lessons/v2_project_submissions'
+ resources :v2_project_submissions, controller: 'lessons/v2_project_submissions'
resource :completion, only: %i[create destroy], controller: 'lessons/completions'
end
diff --git a/spec/system/v2_lesson_project_submissions/delete_submission_spec.rb b/spec/system/v2_lesson_project_submissions/delete_submission_spec.rb
new file mode 100644
index 0000000000..885fedcb7d
--- /dev/null
+++ b/spec/system/v2_lesson_project_submissions/delete_submission_spec.rb
@@ -0,0 +1,38 @@
+require 'rails_helper'
+
+RSpec.describe 'Deleting a Project Submission' do
+ let(:user) { create(:user) }
+ let(:lesson) { create(:lesson, :project) }
+
+ before do
+ Flipper.enable(:v2_project_submissions)
+
+ sign_in(user)
+ visit lesson_path(lesson)
+ Pages::ProjectSubmissions::Form.new.open.fill_in.submit
+ end
+
+ after do
+ Flipper.disable(:v2_project_submissions)
+ end
+
+ it 'removes a submission' do
+ users_submission = first(:test_id, 'submission-item')
+
+ within(:test_id, 'submissions-list') do
+ expect(page).to have_content(user.username)
+ end
+
+ within(users_submission) do
+ find(:test_id, 'submission-action-menu-btn').click
+
+ page.accept_confirm do
+ find(:test_id, 'delete-submission').click
+ end
+ end
+
+ within(:test_id, 'submissions-list') do
+ expect(page).not_to have_content(user.username)
+ end
+ end
+end
diff --git a/spec/system/v2_lesson_project_submissions/edit_submission_spec.rb b/spec/system/v2_lesson_project_submissions/edit_submission_spec.rb
new file mode 100644
index 0000000000..22024d9aea
--- /dev/null
+++ b/spec/system/v2_lesson_project_submissions/edit_submission_spec.rb
@@ -0,0 +1,47 @@
+require 'rails_helper'
+
+RSpec.describe 'Editing a Project Submission' do
+ let(:user) { create(:user) }
+ let(:lesson) { create(:lesson, :project) }
+ let(:edited_field_values) do
+ {
+ repo_url: 'https://github.com/edited-project-repo-url',
+ live_preview_url: 'http://edited-live-preview-url.com'
+ }
+ end
+
+ before do
+ Flipper.enable(:v2_project_submissions)
+
+ sign_in(user)
+ visit lesson_path(lesson)
+ Pages::ProjectSubmissions::Form.new.open.fill_in.submit
+ end
+
+ after do
+ Flipper.disable(:v2_project_submissions)
+ end
+
+ it 'successfully edits a submission' do
+ users_submission = first(:test_id, 'submission-item')
+
+ within(users_submission) do
+ find(:test_id, 'submission-action-menu-btn').click
+ find(:test_id, 'edit-submission').click
+ end
+
+ Pages::ProjectSubmissions::Form.new(**edited_field_values).tap do |form|
+ form.fill_in
+ form.submit
+ end
+
+ # We need to find the user submission again because it is replaced by a turbo stream
+ users_submission = first(:test_id, 'submission-item')
+
+ within(users_submission) do
+ expect(users_submission).to have_content(user.username)
+ expect(users_submission.find(:test_id, 'view-code-btn')['href']).to eq('https://github.com/edited-project-repo-url')
+ expect(users_submission.find(:test_id, 'live-preview-btn')['href']).to eq('http://edited-live-preview-url.com/')
+ end
+ end
+end