diff --git a/app/controllers/discourse_assign/assign_controller.rb b/app/controllers/discourse_assign/assign_controller.rb index 2753480..32250bd 100644 --- a/app/controllers/discourse_assign/assign_controller.rb +++ b/app/controllers/discourse_assign/assign_controller.rb @@ -62,6 +62,10 @@ module DiscourseAssign raise Discourse::NotFound unless assign_to + if topic.custom_fields && topic.custom_fields['assigned_to_id'] == assign_to.id.to_s + return render json: { failed: 'Already assigned to the user' }, status: 400 + end + assigner = TopicAssigner.new(topic, current_user) # perhaps? diff --git a/spec/requests/assign_controller_spec.rb b/spec/requests/assign_controller_spec.rb new file mode 100644 index 0000000..1b63310 --- /dev/null +++ b/spec/requests/assign_controller_spec.rb @@ -0,0 +1,39 @@ +require 'rails_helper' + +RSpec.describe DiscourseAssign::AssignController do + + let(:user) { Fabricate(:admin) } + let(:post) { Fabricate(:post) } + let(:user2) { Fabricate(:active_user) } + + context 'assign' do + + it 'assigns topic to a user' do + sign_in(user) + + put '/assign/assign', params: { + topic_id: post.topic_id, username: user2.username + } + + expect(response.status).to eq(200) + end + + it 'fails to assign topic to the user if its already assigned to the same user' do + sign_in(user) + + put '/assign/assign.json', params: { + topic_id: post.topic_id, username: user2.username + } + + expect(response.status).to eq(200) + + put '/assign/assign.json', params: { + topic_id: post.topic_id, username: user2.username + } + + expect(response.status).to eq(400) + end + + end + +end