Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Custom Buttons with dialogs should be running invoke #506

Merged
merged 1 commit into from
Nov 29, 2018
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions app/controllers/api/base_controller/generic.rb
Original file line number Diff line number Diff line change
Expand Up @@ -193,6 +193,7 @@ def invoke_custom_action(type, resource, action, data)

def invoke_custom_action_with_dialog(type, resource, action, data, custom_button)
result = begin
custom_button.publish_event(nil, resource)
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

If a button is pressed in the UI, will it raise an event (I assume it doesn't call this API method currently)? If so, maybe it's better to move this logic down into the model so that it's shared by both?

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The problem at the moment is there is no currently shared path. A custom button called without a dialog is processed in the invoke_custom_action method above and then gets delivered to automate from the invoke method.

Buttons with a dialog need to go through this method and ResourceActionWorkflow before sending to automate.

Maybe we refactor these methods to call into a custom button method that then branches to different paths, but maybe that is a followup PR so we can resolve this blocker issue first.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@bdunne you okay with refactoring in a later step, please? there might be fruit snacks in it for you...

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

¯\_(ツ)_/¯ I guess. I'm surprised that there is no shared code that does this. Does the UI not publish the event either?

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

No sure what the "Does the UI not publish the event either?". The custom button invoked here is either with or without a service dialog. There are two separate methods here that invoke that, the method being modified here invoke_custom_action_with_dialog and invoke_custom_action which is directly above. For invoke_custom_action method the event is created as part of custom_button.invoke(resource).

Is that what you are asking?

wf_result = submit_custom_action_dialog(resource, custom_button, data)
action_result(true,
"Invoked custom dialog action #{action} for #{type} id: #{resource.id}",
Expand Down
3 changes: 3 additions & 0 deletions spec/requests/custom_actions_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -581,9 +581,12 @@ def define_custom_button1(resource)
it "accept custom actions" do
api_basic_authorize

expect(CustomButtonEvent.count).to eq(0)

post api_generic_object_url(nil, @resource), :params => gen_request(@button.name, "key1" => "value1")

expect_single_action_result(:success => true, :message => /.*/, :href => api_generic_object_url(nil, @resource))
expect(CustomButtonEvent.count).to eq(1)
end
end

Expand Down