Skip to content

Commit

Permalink
Merge pull request #44 from alphagov/add-supported-permissions-ui
Browse files Browse the repository at this point in the history
Add a UI to add supported permissions to an application
  • Loading branch information
mnowster committed Jan 15, 2013
2 parents 69036d5 + d5e1720 commit b05f5c4
Show file tree
Hide file tree
Showing 6 changed files with 100 additions and 1 deletion.
29 changes: 29 additions & 0 deletions app/controllers/admin/supported_permissions_controller.rb
@@ -0,0 +1,29 @@
class Admin::SupportedPermissionsController < Admin::BaseController
respond_to :html

def index
@application = ::Doorkeeper::Application.find(params[:application_id])
end

def new
@application = ::Doorkeeper::Application.find(params[:application_id])
end

def create
@application = ::Doorkeeper::Application.find(params[:application_id])
newPermission = params[:post][:permission]
if newPermission.blank?
redirect_to admin_application_supported_permissions_path,
alert: "Failed to add permission to #{@application.name}. Field was blank."
else
begin
SupportedPermission.create(:application_id => params[:application_id], :name => newPermission)
redirect_to admin_application_supported_permissions_path,
notice: "Successfully added permission #{newPermission} to #{@application.name}"
rescue ActiveRecord::RecordNotUnique => exception
redirect_to admin_application_supported_permissions_path,
alert: "Failed to add permission #{newPermission} to #{@application.name} as it already exists"
end
end
end
end
5 changes: 5 additions & 0 deletions app/views/admin/applications/edit.html.erb
Expand Up @@ -42,5 +42,10 @@
<%= f.text_field :home_uri, :class => 'span6', disabled: "disabled", readonly: "readonly" %>
</p>

<p>
<%= link_to "Supported Permissions", admin_application_supported_permissions_path(@application) , class: "btn"%>
</p>

<%= f.submit :class => 'btn btn-primary' %>
<% end %>
10 changes: 10 additions & 0 deletions app/views/admin/supported_permissions/index.html.erb
@@ -0,0 +1,10 @@
<h1>Single Sign On Application Permissions for <%= @application.name %></h1>

<div class="well">
<h3>Permissions</h3>
<p id="permissions">
<%= @application.supported_permissions.map{|sp| sp.name}.join(", ") %>
</p>
<%= link_to "Add", new_admin_application_supported_permission_path , id: "add", class: "btn btn-primary"%>
<%= link_to "Cancel", edit_admin_application_path(@application) , id: "cancel", class: "btn"%>
</div>
11 changes: 11 additions & 0 deletions app/views/admin/supported_permissions/new.html.erb
@@ -0,0 +1,11 @@
<h1>Single Sign On Application Permissions for <%= @application.name %></h1>

<div class="well">
<%= form_for @post, :as => :post, :url => admin_application_supported_permissions_path do |f| %>
<p>
<label for="permission">New Permission name</label>
<%= f.text_field "permission" %>
</p>
<%= submit_tag "Save", class: "btn btn-primary" %>
<% end %>
</div>
4 changes: 3 additions & 1 deletion config/routes.rb
Expand Up @@ -23,7 +23,9 @@
end
end

resources :applications, only: [:index, :edit, :update]
resources :applications, only: [:index, :edit, :update] do
resources :supported_permissions, only: [:index, :new, :create]
end

resources :suspensions, only: [:edit, :update]
root :to => 'users#index'
Expand Down
42 changes: 42 additions & 0 deletions test/functional/admin/supported_permissions_controller_test.rb
@@ -0,0 +1,42 @@
require 'test_helper'

class Admin::SupportedPermissionsControllerTest < ActionController::TestCase

setup do
@user = FactoryGirl.create(:user, is_admin: true)
sign_in @user
end

context "GET index" do
should "render the form" do
app = FactoryGirl.create(:application, name: "My first app")
perm = FactoryGirl.create(:supported_permission, application_id: app.id, name: "permission1")
get :index, application_id: app.id
assert_select "h1", /My first app/
assert_select "p[id='permissions']", /permission1/
assert_select "a[id='add']", true
assert_select "a[id='cancel']", true
end
end

context "GET new" do
should "render the form" do
app = FactoryGirl.create(:application, name: "My first app")
perm = FactoryGirl.create(:supported_permission, application_id: app.id, name: "permission1")
get :new, application_id: app.id
assert_select "h1", /My first app/
assert_select "input[name='post[permission]']", true
end
end

context "POST create" do
should "create a new permission" do
app = FactoryGirl.create(:application, name: "My first app")
post :create, application_id: app.id, post:{ permission: "permission1" }
assert_redirected_to(:controller => "supported_permissions", :action => :index)
app.reload
assert_equal app.supported_permissions.first.name, "permission1"
end
end

end

0 comments on commit b05f5c4

Please sign in to comment.