Extract component for organization actions
We remove duplication by doing so, and now we only need to add the call do render Admin::TableActionsComponent once.
This commit is contained in:
@@ -0,0 +1,13 @@
|
|||||||
|
<%= render Admin::TableActionsComponent.new(actions: []) do %>
|
||||||
|
<% if can_verify? %>
|
||||||
|
<%= link_to t("admin.organizations.index.verify"),
|
||||||
|
verify_admin_organization_path(organization, request.query_parameters),
|
||||||
|
method: :put, class: "button success small-5" %>
|
||||||
|
<% end %>
|
||||||
|
|
||||||
|
<% if can_reject? %>
|
||||||
|
<%= link_to t("admin.organizations.index.reject"),
|
||||||
|
reject_admin_organization_path(organization, request.query_parameters),
|
||||||
|
method: :put, class: "button hollow alert small-5" %>
|
||||||
|
<% end %>
|
||||||
|
<% end %>
|
||||||
@@ -0,0 +1,18 @@
|
|||||||
|
class Admin::Organizations::TableActionsComponent < ApplicationComponent
|
||||||
|
delegate :can?, to: :controller
|
||||||
|
attr_reader :organization
|
||||||
|
|
||||||
|
def initialize(organization)
|
||||||
|
@organization = organization
|
||||||
|
end
|
||||||
|
|
||||||
|
private
|
||||||
|
|
||||||
|
def can_verify?
|
||||||
|
can? :verify, organization
|
||||||
|
end
|
||||||
|
|
||||||
|
def can_reject?
|
||||||
|
can? :reject, organization
|
||||||
|
end
|
||||||
|
end
|
||||||
@@ -48,17 +48,7 @@
|
|||||||
<% end %>
|
<% end %>
|
||||||
</td>
|
</td>
|
||||||
<td>
|
<td>
|
||||||
<% if can? :verify, organization %>
|
<%= render Admin::Organizations::TableActionsComponent.new(organization) %>
|
||||||
<%= link_to t("admin.organizations.index.verify"),
|
|
||||||
verify_admin_organization_path(organization, request.query_parameters),
|
|
||||||
method: :put, class: "button success small-5" %>
|
|
||||||
<% end %>
|
|
||||||
|
|
||||||
<% if can? :reject, organization %>
|
|
||||||
<%= link_to t("admin.organizations.index.reject"),
|
|
||||||
reject_admin_organization_path(organization, request.query_parameters),
|
|
||||||
method: :put, class: "button hollow alert small-5" %>
|
|
||||||
<% end %>
|
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
<% end %>
|
<% end %>
|
||||||
|
|||||||
@@ -44,17 +44,7 @@
|
|||||||
<% end %>
|
<% end %>
|
||||||
</td>
|
</td>
|
||||||
<td>
|
<td>
|
||||||
<% if can? :verify, organization %>
|
<%= render Admin::Organizations::TableActionsComponent.new(organization) %>
|
||||||
<%= link_to t("admin.organizations.index.verify"),
|
|
||||||
verify_admin_organization_path(organization, request.query_parameters),
|
|
||||||
method: :put, class: "button success small-5" %>
|
|
||||||
<% end %>
|
|
||||||
|
|
||||||
<% if can? :reject, organization %>
|
|
||||||
<%= link_to t("admin.organizations.index.reject"),
|
|
||||||
reject_admin_organization_path(organization, request.query_parameters),
|
|
||||||
method: :put, class: "button hollow alert small-5" %>
|
|
||||||
<% end %>
|
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
<% end %>
|
<% end %>
|
||||||
|
|||||||
@@ -0,0 +1,46 @@
|
|||||||
|
require "rails_helper"
|
||||||
|
|
||||||
|
describe Admin::Organizations::TableActionsComponent, type: :component do
|
||||||
|
let(:organization) { create(:organization) }
|
||||||
|
let(:component) { Admin::Organizations::TableActionsComponent.new(organization) }
|
||||||
|
|
||||||
|
it "renders links to verify and reject when it can" do
|
||||||
|
allow(component).to receive(:can_verify?).and_return(true)
|
||||||
|
allow(component).to receive(:can_reject?).and_return(true)
|
||||||
|
|
||||||
|
render_inline component
|
||||||
|
|
||||||
|
expect(page).to have_css "a", count: 2
|
||||||
|
expect(page).to have_css "a[href*='verify'][data-method='put']", text: "Verify"
|
||||||
|
expect(page).to have_css "a[href*='reject'][data-method='put']", text: "Reject"
|
||||||
|
end
|
||||||
|
|
||||||
|
it "renders link to verify when it cannot reject" do
|
||||||
|
allow(component).to receive(:can_verify?).and_return(true)
|
||||||
|
allow(component).to receive(:can_reject?).and_return(false)
|
||||||
|
|
||||||
|
render_inline component
|
||||||
|
|
||||||
|
expect(page).to have_css "a", count: 1
|
||||||
|
expect(page).to have_link "Verify"
|
||||||
|
end
|
||||||
|
|
||||||
|
it "renders link to reject when it cannot verify" do
|
||||||
|
allow(component).to receive(:can_verify?).and_return(false)
|
||||||
|
allow(component).to receive(:can_reject?).and_return(true)
|
||||||
|
|
||||||
|
render_inline component
|
||||||
|
|
||||||
|
expect(page).to have_css "a", count: 1
|
||||||
|
expect(page).to have_link "Reject"
|
||||||
|
end
|
||||||
|
|
||||||
|
it "does not render any actions when it cannot verify nor reject" do
|
||||||
|
allow(component).to receive(:can_verify?).and_return(false)
|
||||||
|
allow(component).to receive(:can_reject?).and_return(false)
|
||||||
|
|
||||||
|
render_inline component
|
||||||
|
|
||||||
|
expect(page).not_to have_css "a"
|
||||||
|
end
|
||||||
|
end
|
||||||
Reference in New Issue
Block a user