Commit 76bc05f55bb11dd128e54cf9bb4b976096fcfdb7
1 parent
32178a64
Exists in
colab
and in
4 other branches
Fixes for Configuration views
Validates ownership before display edit button Partial moved from shared and refactored Added Configuration link to the layout Missing acceptance tests
Showing
9 changed files
with
92 additions
and
42 deletions
Show diff stats
app/controllers/mezuro_configurations_controller.rb
| 1 | 1 | include OwnershipAuthentication |
| 2 | 2 | |
| 3 | 3 | class MezuroConfigurationsController < ApplicationController |
| 4 | - before_action :authenticate_user!, | |
| 5 | - except: [:index, :show] | |
| 4 | + before_action :authenticate_user!, except: [:index, :show] | |
| 6 | 5 | before_action :mezuro_configuration_owner?, only: [:edit, :update, :destroy] |
| 7 | 6 | |
| 8 | 7 | # GET /mezuro_configurations/new |
| 9 | 8 | def new |
| 10 | - @mezuro_configuration = MezuroConfiguration.new | |
| 9 | + @configuration = MezuroConfiguration.new | |
| 11 | 10 | end |
| 12 | 11 | |
| 13 | 12 | # GET /mezuro_configurations |
| 14 | 13 | # GET /mezuro_configurations.json |
| 15 | 14 | def index |
| 16 | - @mezuro_configurations = MezuroConfiguration.all | |
| 15 | + @configurations = MezuroConfiguration.all | |
| 17 | 16 | end |
| 18 | 17 | |
| 19 | 18 | # POST /mezuro_configurations |
| 20 | 19 | # POST /mezuro_configurations.json |
| 21 | 20 | def create |
| 22 | - @mezuro_configuration = MezuroConfiguration.new(mezuro_configuration_params) | |
| 21 | + @configuration = MezuroConfiguration.new(mezuro_configuration_params) | |
| 23 | 22 | respond_to do |format| |
| 24 | 23 | create_and_redir(format) |
| 25 | 24 | end |
| ... | ... | @@ -29,7 +28,7 @@ class MezuroConfigurationsController < ApplicationController |
| 29 | 28 | # GET /mezuro_configurations/1.json |
| 30 | 29 | def show |
| 31 | 30 | set_mezuro_configuration |
| 32 | - @mezuro_configuration_metric_configurations = @mezuro_configuration.metric_configurations | |
| 31 | + @configuration_metric_configurations = @configuration.metric_configurations | |
| 33 | 32 | end |
| 34 | 33 | |
| 35 | 34 | # GET /mezuro_configurations/1/edit |
| ... | ... | @@ -41,8 +40,8 @@ class MezuroConfigurationsController < ApplicationController |
| 41 | 40 | |
| 42 | 41 | def update |
| 43 | 42 | set_mezuro_configuration |
| 44 | - if @mezuro_configuration.update(mezuro_configuration_params) | |
| 45 | - redirect_to(mezuro_configuration_path(@mezuro_configuration.id)) | |
| 43 | + if @configuration.update(mezuro_configuration_params) | |
| 44 | + redirect_to(mezuro_configuration_path(@configuration.id)) | |
| 46 | 45 | else |
| 47 | 46 | render "edit" |
| 48 | 47 | end |
| ... | ... | @@ -52,8 +51,8 @@ class MezuroConfigurationsController < ApplicationController |
| 52 | 51 | # DELETE /mezuro_configurations/1.json |
| 53 | 52 | def destroy |
| 54 | 53 | set_mezuro_configuration |
| 55 | - current_user.mezuro_configuration_ownerships.find_by_mezuro_configuration_id(@mezuro_configuration.id).destroy | |
| 56 | - @mezuro_configuration.destroy | |
| 54 | + current_user.mezuro_configuration_ownerships.find_by_mezuro_configuration_id(@configuration.id).destroy | |
| 55 | + @configuration.destroy | |
| 57 | 56 | respond_to do |format| |
| 58 | 57 | format.html { redirect_to mezuro_configurations_url } |
| 59 | 58 | format.json { head :no_content } |
| ... | ... | @@ -63,7 +62,7 @@ class MezuroConfigurationsController < ApplicationController |
| 63 | 62 | private |
| 64 | 63 | # Use callbacks to share common setup or constraints between actions. |
| 65 | 64 | def set_mezuro_configuration |
| 66 | - @mezuro_configuration = MezuroConfiguration.find(params[:id]) | |
| 65 | + @configuration = MezuroConfiguration.find(params[:id]) | |
| 67 | 66 | end |
| 68 | 67 | |
| 69 | 68 | # Never trust parameters from the scary internet, only allow the white list through. |
| ... | ... | @@ -73,14 +72,14 @@ class MezuroConfigurationsController < ApplicationController |
| 73 | 72 | |
| 74 | 73 | # Extracted code from create action |
| 75 | 74 | def create_and_redir(format) |
| 76 | - if @mezuro_configuration.save | |
| 77 | - current_user.mezuro_configuration_ownerships.create mezuro_configuration_id: @mezuro_configuration.id | |
| 75 | + if @configuration.save | |
| 76 | + current_user.mezuro_configuration_ownerships.create mezuro_configuration_id: @configuration.id | |
| 78 | 77 | |
| 79 | - format.html { redirect_to mezuro_configuration_path(@mezuro_configuration.id), notice: 'mezuro_configuration was successfully created.' } | |
| 80 | - format.json { render action: 'show', status: :created, location: @mezuro_configuration } | |
| 78 | + format.html { redirect_to mezuro_configuration_path(@configuration.id), notice: 'mezuro_configuration was successfully created.' } | |
| 79 | + format.json { render action: 'show', status: :created, location: @configuration } | |
| 81 | 80 | else |
| 82 | 81 | format.html { render action: 'new' } |
| 83 | - format.json { render json: @mezuro_configuration.errors, status: :unprocessable_entity } | |
| 82 | + format.json { render json: @configuration.errors, status: :unprocessable_entity } | |
| 84 | 83 | end |
| 85 | 84 | end |
| 86 | 85 | end | ... | ... |
app/views/layouts/application.html.erb
| ... | ... | @@ -59,6 +59,7 @@ |
| 59 | 59 | <ul class="nav"> |
| 60 | 60 | <li><%= link_to 'Home', root_path %></li> |
| 61 | 61 | <li><%= link_to 'Project', projects_path %></li> |
| 62 | + <li><%= link_to 'Configuration', mezuro_configurations_path %></li> | |
| 62 | 63 | <li><%= link_to 'Reading Group', reading_groups_path %></li> |
| 63 | 64 | </ul> |
| 64 | 65 | <ul class="nav" style="float: right;"> | ... | ... |
app/views/mezuro_configurations/_mezuro_configuration.html.erb
0 → 100644
| ... | ... | @@ -0,0 +1,10 @@ |
| 1 | +<tr> | |
| 2 | + <td><%= mezuro_configuration.name %></td> | |
| 3 | + <td><%= mezuro_configuration.description %></td> | |
| 4 | + <td><%= link_to 'Show', mezuro_configuration_path(mezuro_configuration.id), class: 'btn btn-info' %></td> | |
| 5 | + <td> | |
| 6 | + <% if configuration_owner?(mezuro_configuration.id) %> | |
| 7 | + <%= link_to 'Edit', edit_mezuro_configuration_path(mezuro_configuration.id), class: 'btn btn-info' %> | |
| 8 | + <% end %> | |
| 9 | + </td> | |
| 10 | +</tr> | |
| 0 | 11 | \ No newline at end of file | ... | ... |
app/views/mezuro_configurations/index.html.erb
| ... | ... | @@ -13,4 +13,4 @@ |
| 13 | 13 | </p> |
| 14 | 14 | <% end %> |
| 15 | 15 | |
| 16 | -<%= render partial: 'shared/mezuro_configuration_list', locals: {configurations: @configurations} %> | |
| 17 | 16 | \ No newline at end of file |
| 17 | +<%= render partial: 'list', locals: {configurations: @configurations} %> | |
| 18 | 18 | \ No newline at end of file | ... | ... |
app/views/shared/_mezuro_configuration_list.html.erb
| ... | ... | @@ -1,22 +0,0 @@ |
| 1 | -<table class="table table-hover"> | |
| 2 | - <thead> | |
| 3 | - <tr> | |
| 4 | - <th>Name</th> | |
| 5 | - <th>Description</th> | |
| 6 | - <th colspan="2"></th> | |
| 7 | - </tr> | |
| 8 | - </thead> | |
| 9 | - | |
| 10 | - <tbody> | |
| 11 | - <% configurations.each do |configuration| %> | |
| 12 | - <tr> | |
| 13 | - <td><%= configuration.name %></td> | |
| 14 | - <td><%= configuration.description %></td> | |
| 15 | - <td><%= link_to 'Show', mezuro_configuration_path(configuration.id), class: 'btn btn-info' %></td> | |
| 16 | - <td> | |
| 17 | - <%= link_to 'Edit', edit_mezuro_configuration_path(configuration.id), class: 'btn btn-info' %> | |
| 18 | - </td> | |
| 19 | - </tr> | |
| 20 | - <% end %> | |
| 21 | - </tbody> | |
| 22 | -</table> | |
| 23 | 0 | \ No newline at end of file |
spec/controllers/mezuro_configurations_controller_spec.rb
| ... | ... | @@ -90,7 +90,7 @@ describe MezuroConfigurationsController do |
| 90 | 90 | @ownership.expects(:destroy) |
| 91 | 91 | @subject.expects(:destroy) |
| 92 | 92 | |
| 93 | - #Those two mocks looks the same but they are necessary since params[:id] is a String and @mezuro_configuration.id is an Integer :( | |
| 93 | + #Those two mocks looks the same but they are necessary since params[:id] is a String and @configuration.id is an Integer :( | |
| 94 | 94 | @ownerships.expects(:find_by_mezuro_configuration_id).with("#{@subject.id}").returns(@ownership) |
| 95 | 95 | @ownerships.expects(:find_by_mezuro_configuration_id).with(@subject.id).returns(@ownership) |
| 96 | 96 | |
| ... | ... | @@ -164,8 +164,8 @@ describe MezuroConfigurationsController do |
| 164 | 164 | |
| 165 | 165 | it { should render_template(:edit) } |
| 166 | 166 | |
| 167 | - it 'should assign to @mezuro_configuration the @subject' do | |
| 168 | - assigns(:mezuro_configuration).should eq(@subject) | |
| 167 | + it 'should assign to @configuration the @subject' do | |
| 168 | + assigns(:configuration).should eq(@subject) | |
| 169 | 169 | end |
| 170 | 170 | end |
| 171 | 171 | ... | ... |
| ... | ... | @@ -0,0 +1,44 @@ |
| 1 | +require 'spec_helper' | |
| 2 | + | |
| 3 | +describe MezuroConfigurationsHelper do | |
| 4 | + describe 'configuration_owner?' do | |
| 5 | + before :each do | |
| 6 | + @subject = FactoryGirl.build(:mezuro_configuration) | |
| 7 | + end | |
| 8 | + | |
| 9 | + context 'returns false if not logged in' do | |
| 10 | + before :each do | |
| 11 | + helper.expects(:user_signed_in?).returns(false) | |
| 12 | + end | |
| 13 | + it { helper.configuration_owner?(@subject.id).should be_false } | |
| 14 | + end | |
| 15 | + | |
| 16 | + context 'returns false if is not the owner' do | |
| 17 | + before :each do | |
| 18 | + helper.expects(:user_signed_in?).returns(true) | |
| 19 | + helper.expects(:current_user).returns(FactoryGirl.build(:user)) | |
| 20 | + | |
| 21 | + @ownerships = [] | |
| 22 | + @ownerships.expects(:find_by_mezuro_configuration_id).with(@subject.id).returns(nil) | |
| 23 | + | |
| 24 | + User.any_instance.expects(:mezuro_configuration_ownerships).returns(@ownerships) | |
| 25 | + end | |
| 26 | + | |
| 27 | + it { helper.configuration_owner?(@subject.id).should be_false } | |
| 28 | + end | |
| 29 | + | |
| 30 | + context 'returns true if user is the mezuro_configuration owner' do | |
| 31 | + before :each do | |
| 32 | + helper.expects(:user_signed_in?).returns(true) | |
| 33 | + helper.expects(:current_user).returns(FactoryGirl.build(:user)) | |
| 34 | + | |
| 35 | + @ownership = FactoryGirl.build(:mezuro_configuration_ownership) | |
| 36 | + @ownerships = [] | |
| 37 | + @ownerships.expects(:find_by_mezuro_configuration_id).with(@subject.id).returns(@ownership) | |
| 38 | + User.any_instance.expects(:mezuro_configuration_ownerships).returns(@ownerships) | |
| 39 | + end | |
| 40 | + | |
| 41 | + it { helper.configuration_owner?(@subject.id).should be_true } | |
| 42 | + end | |
| 43 | + end | |
| 44 | +end | |
| 0 | 45 | \ No newline at end of file | ... | ... |