Skip to content

Commit

Permalink
Refactor to pass the Codeclimate
Browse files Browse the repository at this point in the history
  • Loading branch information
Zzz212zzZ committed Apr 23, 2024
1 parent 393d17a commit 89d60b0
Show file tree
Hide file tree
Showing 2 changed files with 29 additions and 28 deletions.
51 changes: 26 additions & 25 deletions app/controllers/api/v1/assignments_controller.rb
Original file line number Diff line number Diff line change
Expand Up @@ -9,51 +9,52 @@ def index

# POST /courses/:course_id/lms/:lms_id/assignments
def create
assignment_name = params[:name]
external_assignment_id = params[:external_assignment_id]
course_id = params[:course_id]
lms_id = params[:lms_id]
# Check if the course_to_lms association exists
course_to_lms = fetch_course_to_lms(params[:course_id], params[:lms_id])
return unless course_to_lms
# Check if the assignment already exists
return if assignment_exists?(course_to_lms, params[:name], params[:external_assignment_id])
# Create and render the assignment
create_and_render_assignment(course_to_lms, params[:name], params[:external_assignment_id])
end

# Retrieve the course_to_lms entry
course_to_lms = CourseToLms.find_by(course_id: course_id, lms_id: lms_id)
def destroy
render json: 'not yet implemented', status: 501
end

private

def fetch_course_to_lms(course_id, lms_id)
course_to_lms = CourseToLms.find_by(course_id: course_id, lms_id: lms_id)
unless course_to_lms
render json: { error: 'Course to LMS association not found' }, status: :not_found
return
render json: { error: 'No such Course_LMS association' }, status: :not_found
end
course_to_lms
end

# Check this assignment doesn't already exist
def assignment_exists?(course_to_lms, assignment_name, external_assignment_id)
existing_assignment = Assignment.find_by(course_to_lms_id: course_to_lms.id, name: assignment_name, external_assignment_id: external_assignment_id)
if existing_assignment
render json: { message: 'The assignment with the specified external ID already exists.' }, status: :ok
return
render json: { message: 'Record already exists' }, status: :ok
return true
end
false
end

# Create the assignment
assignment = Assignment.new(
course_to_lms_id: course_to_lms.id,
name: assignment_name,
external_assignment_id: external_assignment_id
)

def create_and_render_assignment(course_to_lms, assignment_name, external_assignment_id)
assignment = Assignment.new(course_to_lms_id: course_to_lms.id, name: assignment_name, external_assignment_id: external_assignment_id)
if assignment.save
render json: assignment, status: :created
else
render json: assignment.errors, status: :unprocessable_entity
end

end

def destroy
render json: 'not yet implemented', status: 501
end

def validate_ids!
if params[:name].blank? || params[:external_assignment_id].blank? || params[:course_id].blank? || params[:lms_id].blank?
render json: { error: 'Course ID, LMS ID, name, and external assignment ID are required' }, status: :bad_request
render json: { error: 'Params required' }, status: :bad_request
end
end
end
end
end

6 changes: 3 additions & 3 deletions spec/controllers/api/v1/assignments_controller_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ def json_response
let(:mock_course_to_lms) { CourseToLms.create!(course_id: mock_course.id, lms_id: mock_lms.id) }

let(:valid_params) { { name: "Test Assignment", external_assignment_id: "123ABC", course_id: mock_course.id, lms_id: mock_lms.id } }

before do
mock_course
mock_lms
Expand Down Expand Up @@ -46,7 +46,7 @@ def json_response
it 'returns status :not_found' do
post :create, params: { course_id: -1, lms_id: -1, name: "Test Assignment", external_assignment_id: "123ABC" }
expect(response).to have_http_status(:not_found)
expect(response.body).to include('Course to LMS association not found')
expect(response.body).to include('No such Course_LMS association')
end
end

Expand All @@ -55,7 +55,7 @@ def json_response
Assignment.create!(course_to_lms_id: mock_course_to_lms.id, name: "Test Assignment", external_assignment_id: "123ABC")
post :create, params: valid_params
expect(response).to have_http_status(:ok)
expect(response.body).to include('The assignment with the specified external ID already exists.')
expect(response.body).to include('Record already exists')
end
end

Expand Down

0 comments on commit 89d60b0

Please sign in to comment.