Skip to content

Commit

Permalink
Merge pull request #230 from solver-it-sro/GO-419/fix_message_reply
Browse files Browse the repository at this point in the history
Fix message reply
  • Loading branch information
stage-rl authored Dec 6, 2023
2 parents e8687cd + 8edc41a commit fcd5008
Show file tree
Hide file tree
Showing 8 changed files with 70 additions and 26 deletions.
2 changes: 2 additions & 0 deletions .rubocop.yml
Original file line number Diff line number Diff line change
Expand Up @@ -14,5 +14,7 @@ Style/Lambda:
Enabled: false
Style/StringLiteralsInInterpolation:
EnforcedStyle: double_quotes
Style/ExplicitBlockArgument:
Enabled: false
Rails/Validation:
Enabled: false
3 changes: 3 additions & 0 deletions .vscode/settings.json
Original file line number Diff line number Diff line change
Expand Up @@ -24,5 +24,8 @@
},
"[markdown]": {
"editor.defaultFormatter": null
},
"[ruby]": {
"editor.defaultFormatter": "Shopify.ruby-lsp"
}
}
1 change: 0 additions & 1 deletion app/controllers/message_drafts_controller.rb
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,6 @@ def update
authorize @message

permitted_params = message_params

@message.update_content(title: permitted_params["message_title"], body: permitted_params["message_text"])
end

Expand Down
2 changes: 1 addition & 1 deletion app/javascript/controllers/message_drafts_controller.js
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ export default class extends Controller {
const messageDraftsTexts = document.querySelectorAll('textarea[id^="text_message_draft_"]');
const length = messageDraftsTexts.length;
if (messageDraftsTexts.length > 1) {
messageDraftsTexts[length - 2].setAttribute('autofocus', false);
messageDraftsTexts[length - 2].setAttribute("autofocus", false);
}
messageDraftsTexts[length - 1].focus();

Expand Down
48 changes: 24 additions & 24 deletions app/models/message_draft.rb
Original file line number Diff line number Diff line change
Expand Up @@ -22,19 +22,19 @@
# message_thread_id :bigint not null
#
class MessageDraft < Message
belongs_to :import, class_name: 'MessageDraftsImport', foreign_key: :import_id, optional: true
belongs_to :import, class_name: 'MessageDraftsImport', optional: true

after_create do
self.add_cascading_tag(self.thread.box.tenant.draft_tag!)
add_cascading_tag(thread.box.tenant.draft_tag!)
end

after_destroy do
EventBus.publish(:message_draft_destroyed, self)
# TODO has to use `reload` because of `inverse_of` messages are in memory and deleting already deleted record fails
if self.thread.messages.reload.none?
self.thread.destroy!
elsif self.thread.message_drafts.reload.none?
drafts_tag = self.thread.tags.find_by(type: DraftTag.to_s)
# TODO: has to use `reload` because of `inverse_of` messages are in memory and deleting already deleted record fails
if thread.messages.reload.none?
thread.destroy!
elsif thread.message_drafts.reload.none?
drafts_tag = thread.tags.find_by(type: DraftTag.to_s)
thread.tags.delete(drafts_tag)
end
end
Expand All @@ -43,14 +43,14 @@ class MessageDraft < Message
GENERAL_AGENDA_POSP_VERSION = "1.9"
GENERAL_AGENDA_MESSAGE_TYPE = "App.GeneralAgenda"

with_options on: :validate_data do |message_draft|
message_draft.validates :uuid, format: { with: Utils::UUID_PATTERN }, allow_blank: false
message_draft.validate :validate_metadata
message_draft.validate :validate_form
message_draft.validate :validate_objects
with_options on: :validate_data do
validates :uuid, format: { with: Utils::UUID_PATTERN }, allow_blank: false
validate :validate_metadata
validate :validate_form
validate :validate_objects
end

def self.create_message_reply(original_message: , author:)
def self.create_message_reply(original_message:, author:)
message_draft = original_message.thread.message_drafts.create!(
uuid: SecureRandom.uuid,
sender_name: original_message.recipient_name,
Expand All @@ -70,7 +70,7 @@ def self.create_message_reply(original_message: , author:)
"status": "created"
}
)
create_form_object
message_draft.create_form_object

message_draft
end
Expand Down Expand Up @@ -153,6 +153,16 @@ def remove_form_signature
update_form_object
end

def create_form_object
# TODO: clean the domain (no UPVS stuff)
objects.create!(
name: "form.xml",
mimetype: "application/x-eform-xml",
object_type: "FORM",
is_signed: false
)
end

private

def validate_metadata
Expand Down Expand Up @@ -181,16 +191,6 @@ def validate_objects
end
end

def create_form_object
# TODO: clean the domain (no UPVS stuff)
objects.create!(
name: "form.xml",
mimetype: "application/x-eform-xml",
object_type: "FORM",
is_signed: false
)
end

def update_form_object
# TODO: clean the domain (no UPVS stuff)
if form.message_object_datum
Expand Down
6 changes: 6 additions & 0 deletions test/helpers/page_parts_helper.rb
Original file line number Diff line number Diff line change
Expand Up @@ -26,4 +26,10 @@ def within_tags
yield
end
end

def within_message_in_thread(message)
within("\##{dom_id(message)}") do
yield
end
end
end
16 changes: 16 additions & 0 deletions test/models/message_test.rb
Original file line number Diff line number Diff line change
Expand Up @@ -35,4 +35,20 @@ class MessageTest < ActiveSupport::TestCase
assert_not message.tags.include?(tag)
assert message.thread.tags.include?(tag)
end

test "reply to message should create a valid draft" do
message = messages(:ssd_main_general_one)
user = users(:basic)

reply = MessageDraft.create_message_reply(original_message: message, author: user)

assert_equal reply.sender_name, message.recipient_name
assert_equal reply.recipient_name, message.sender_name
assert_equal reply.message_thread_id, message.message_thread_id
assert_match message.title, reply.title
assert_match "Odpoveď", reply.title
assert_equal reply.type, "MessageDraft"
assert_equal reply.author_id, user.id
assert_not reply.collapsed
end
end
18 changes: 18 additions & 0 deletions test/system/message_threads_test.rb
Original file line number Diff line number Diff line change
Expand Up @@ -170,4 +170,22 @@ class MessageThreadsTest < ApplicationSystemTestCase
end
end
end

test "a user can go to a thread detail and reply to message" do
thread_issue = message_threads(:ssd_main_issue)
message_one = messages(:ssd_main_issue_one)

visit message_thread_path thread_issue
within_message_in_thread message_one do
click_on("Odpovedať")
end

within '#new_drafts' do
fill_in "Text", with: "Testovacie telo"
fill_in "Predmet", with: "Testovaci predmet"
click_button "Odoslať"
end

assert_text "Správa bola zaradená na odoslanie"
end
end

0 comments on commit fcd5008

Please sign in to comment.