From 5453fcfe6657f4c500a85c994e36ce84536259db Mon Sep 17 00:00:00 2001 From: k3mystra Date: Sat, 4 Apr 2026 14:37:41 +0800 Subject: [PATCH 1/2] feat: Add update_coursecode integration test --- test/integration/update_coursecode_test.rb | 33 ++++++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 test/integration/update_coursecode_test.rb diff --git a/test/integration/update_coursecode_test.rb b/test/integration/update_coursecode_test.rb new file mode 100644 index 00000000..93fef1c0 --- /dev/null +++ b/test/integration/update_coursecode_test.rb @@ -0,0 +1,33 @@ +require 'test_helper' + +class UpdateCoursecodeTest < ActionDispatch::IntegrationTest + setup do + @course = create(:course) + @lecturer = create(:user, :staff) + create(:enrolment, :coordinator, user: @lecturer, course: @course) + end + + test 'should generate and display a course code via update_coursecode API' do + # Sign in the lecturer (coordinator) + post session_path, params: { email_address: @lecturer.email_address, password: 'password' } + assert_redirected_to root_path + + # Initial state + assert_nil @course.coursecode + + # Call the API explicitly + post update_coursecode_course_path(@course), headers: { 'Accept' => 'text/vnd.turbo-stream.html' } + + # The request should succeed and return turbo stream content + assert_response :success + assert_equal 'text/vnd.turbo-stream.html', response.media_type + + # The coursecode must be generated and saved to the course via the API call + @course.reload + assert_not_nil @course.coursecode + + # Check if there's a generated course code on the UI via the turbo stream response + # It replaces the 'course_code_form' which contains the new course code string. + assert_match @course.coursecode, response.body + end +end From 20f3e5c4bdffcb1004f76f220c220d1f0a2dc05d Mon Sep 17 00:00:00 2001 From: k3mystra Date: Sat, 4 Apr 2026 15:20:57 +0800 Subject: [PATCH 2/2] fix: Ensure update_coursecode is authenticated --- app/controllers/courses_controller.rb | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/app/controllers/courses_controller.rb b/app/controllers/courses_controller.rb index 827fb9f5..7eecc780 100644 --- a/app/controllers/courses_controller.rb +++ b/app/controllers/courses_controller.rb @@ -3,7 +3,7 @@ # Handles CRUD for courses class CoursesController < ApplicationController - before_action :set_course, only: %i[show add_students handle_add_students add_lecturers handle_add_lecturers settings handle_settings destroy export_csv profile] + before_action :set_course, only: %i[show add_students handle_add_students add_lecturers handle_add_lecturers settings handle_settings destroy export_csv profile update_coursecode] def show authorize @course @@ -322,7 +322,8 @@ def import_details end def update_coursecode - @course = Course.find(params[:id]) + authorize @course, :update? + @course.generate_coursecode! flash.now[:notice] = 'Course join code successfully generated' rescue StandardError => e