diff options
| author | Luc Donnet | 2017-09-19 12:15:50 +0200 |
|---|---|---|
| committer | GitHub | 2017-09-19 12:15:50 +0200 |
| commit | 8baf33bc7e46d57dbfbe7eab9848ef0adb38465c (patch) | |
| tree | 4b10d4a3151f5b74c1d63776366019a311e801f7 | |
| parent | 8673b6d0c0f947209053f66ebb3a77669517566c (diff) | |
| parent | afc4f74ebf932328c374491d22b62ffb437aea60 (diff) | |
| download | chouette-core-8baf33bc7e46d57dbfbe7eab9848ef0adb38465c.tar.bz2 | |
Merge pull request #71 from af83/4446-spec-features-api-keys
4446 spec features api keys
| -rw-r--r-- | app/policies/api_key_policy.rb | 3 | ||||
| -rw-r--r-- | app/views/api_keys/edit.html.slim | 2 | ||||
| -rw-r--r-- | lib/stif/permission_translator.rb | 14 | ||||
| -rw-r--r-- | spec/features/api_keys/delete_api_key_feature_spec.rb | 34 | ||||
| -rw-r--r-- | spec/features/api_keys/edit_api_key_feature_spec.rb | 39 | ||||
| -rw-r--r-- | spec/features/api_keys/new_api_key_feature_spec.rb | 38 | ||||
| -rw-r--r-- | spec/features/line_footnotes_permissions_spec.rb | 2 | ||||
| -rw-r--r-- | spec/features/referential_lines_spec.rb | 3 | ||||
| -rw-r--r-- | spec/features/referentials_spec.rb | 1 | ||||
| -rw-r--r-- | spec/lib/stif/netex_file_spec.rb | 2 | ||||
| -rw-r--r-- | spec/lib/stif/permission_translator_spec.rb | 1 | ||||
| -rw-r--r-- | spec/policies/api_key_policy_spec.rb | 50 |
12 files changed, 162 insertions, 27 deletions
diff --git a/app/policies/api_key_policy.rb b/app/policies/api_key_policy.rb index bc5c9e433..eb7b84457 100644 --- a/app/policies/api_key_policy.rb +++ b/app/policies/api_key_policy.rb @@ -14,6 +14,7 @@ class ApiKeyPolicy < ApplicationPolicy end def update? - organisation_match? && user.has_permission?('api_keys.update') + record.try(:organisation_id) == user.organisation_id && + user.has_permission?('api_keys.update') end end diff --git a/app/views/api_keys/edit.html.slim b/app/views/api_keys/edit.html.slim index b1bd1858d..9d7d1fdb7 100644 --- a/app/views/api_keys/edit.html.slim +++ b/app/views/api_keys/edit.html.slim @@ -5,7 +5,7 @@ t('last_update', time: l(@api_key.updated_at, format: :short)), '' - / Below is secundary actions & optional contents (filters, ...) + / Below are secondary actions & optional content (filters, ...) .row.mb-sm .col-lg-12.text-right = ( policy(@api_key).destroy? ? link_to(t('actions.destroy'), api_key_path(@api_key), :method => :delete, class: 'btn btn-default') : '' ) diff --git a/lib/stif/permission_translator.rb b/lib/stif/permission_translator.rb index 47ab2840f..fbd03a820 100644 --- a/lib/stif/permission_translator.rb +++ b/lib/stif/permission_translator.rb @@ -17,13 +17,13 @@ module Stif def all_resources %w[ access_points - connection_links calendars - footnotes - journey_patterns - referentials routes routing_constraint_zones - time_tables - vehicle_journeys - api_keys + connection_links calendars + footnotes + journey_patterns + referentials routes routing_constraint_zones + time_tables + vehicle_journeys + api_keys ] end diff --git a/spec/features/api_keys/delete_api_key_feature_spec.rb b/spec/features/api_keys/delete_api_key_feature_spec.rb new file mode 100644 index 000000000..b58e819a6 --- /dev/null +++ b/spec/features/api_keys/delete_api_key_feature_spec.rb @@ -0,0 +1,34 @@ +RSpec.describe 'New API Key', type: :feature do + login_user + + describe "api_keys#destroy" do + + let!( :api_key ){ create :api_key, name: SecureRandom.uuid, organisation: @user.organisation } + + let( :edit_label ){ "#{api_key.name} : #{api_key.token}" } + let( :destroy_label ){ "Supprimer" } + + xit 'complete workflow' do + # /workbenches + visit workbenches_path + # the api_key is visible + click_link edit_label + + # brings us to correct page + expect(page.current_path).to eq(edit_api_key_path(api_key)) + expect(page).to have_content("Supprimer") + # click_link(destroy_label) + + # # check impact on DB + # expect(Api::V1::ApiKey.where(id: api_key.id)).to be_empty + + # # check redirect and changed display + # expect(page.current_path).to eq(workbenches_path) + # # deleted api_key's not shown anymore + # expect( page ).not_to have_content(edit_label) + end + + end + +end + diff --git a/spec/features/api_keys/edit_api_key_feature_spec.rb b/spec/features/api_keys/edit_api_key_feature_spec.rb new file mode 100644 index 000000000..411c11aaf --- /dev/null +++ b/spec/features/api_keys/edit_api_key_feature_spec.rb @@ -0,0 +1,39 @@ +RSpec.describe 'New API Key', type: :feature do + login_user + + describe "api_keys#edit" do + + let!( :api_key ){ create :api_key, name: SecureRandom.uuid, organisation: @user.organisation } + + let( :edit_label ){ "#{api_key.name} : #{api_key.token}" } + let( :name_label ){ "Nom" } + let( :validate_label ){ "Valider" } + + let( :unique_name ){ SecureRandom.uuid } + + it 'complete workflow' do + # /workbenches + visit workbenches_path + # api_key's new name does not exist yet + expect( page ).not_to have_content(unique_name) + # the api_key is visible + click_link edit_label + + # brings us to correct page + expect(page.current_path).to eq(edit_api_key_path(api_key)) + fill_in(name_label, with: unique_name) + click_button(validate_label) + + # check impact on DB + expect(api_key.reload.name).to eq(unique_name) + + # check redirect and changed display + expect(page.current_path).to eq(workbenches_path) + # changed api_key's name exists now + expect( page ).to have_content(unique_name) + end + + end + +end + diff --git a/spec/features/api_keys/new_api_key_feature_spec.rb b/spec/features/api_keys/new_api_key_feature_spec.rb new file mode 100644 index 000000000..eba873691 --- /dev/null +++ b/spec/features/api_keys/new_api_key_feature_spec.rb @@ -0,0 +1,38 @@ +RSpec.describe 'New API Key', type: :feature do + login_user + + describe "api_keys#create" do + + let( :create_label ){ "Créer une clé d'API" } + let( :name_label ){ "Nom" } + let( :validate_label ){ "Valider" } + + let( :unique_name ){ SecureRandom.uuid } + let( :last_api_key ){ Api::V1::ApiKey.last } + + + it 'complete workflow' do + # /workbenches + visit workbenches_path + expect(page).to have_link(create_label, href: new_api_key_path) + # to be created api_key does not exist yet + expect( page ).not_to have_content(unique_name) + + # /api_keys/new + click_link create_label + fill_in(name_label, with: unique_name) + click_button validate_label + + # check impact on DB + expect(last_api_key.name).to eq(unique_name) + + # check redirect and changed display + expect(page.current_path).to eq(workbenches_path) + # to be created api_key exists now + expect( page ).to have_content(unique_name) + end + + end + +end + diff --git a/spec/features/line_footnotes_permissions_spec.rb b/spec/features/line_footnotes_permissions_spec.rb index 4de2a6137..62adbfcd5 100644 --- a/spec/features/line_footnotes_permissions_spec.rb +++ b/spec/features/line_footnotes_permissions_spec.rb @@ -1,5 +1,3 @@ -# -*- coding: utf-8 -*- - describe 'Line Footnotes', type: :feature do login_user diff --git a/spec/features/referential_lines_spec.rb b/spec/features/referential_lines_spec.rb index 95fc596fd..e8cc8e0e1 100644 --- a/spec/features/referential_lines_spec.rb +++ b/spec/features/referential_lines_spec.rb @@ -1,6 +1,3 @@ -# -*- coding: utf-8 -*- -require 'spec_helper' - describe 'ReferentialLines', type: :feature do login_user let!(:referential_metadata) { create :referential_metadata, referential: referential } diff --git a/spec/features/referentials_spec.rb b/spec/features/referentials_spec.rb index a38577aba..9af0ed32e 100644 --- a/spec/features/referentials_spec.rb +++ b/spec/features/referentials_spec.rb @@ -1,4 +1,3 @@ -# -*- coding: utf-8 -*- describe "Referentials", :type => :feature do login_user diff --git a/spec/lib/stif/netex_file_spec.rb b/spec/lib/stif/netex_file_spec.rb index d84807fe5..ef69b994c 100644 --- a/spec/lib/stif/netex_file_spec.rb +++ b/spec/lib/stif/netex_file_spec.rb @@ -1,5 +1,3 @@ -require "rails_helper" - RSpec.describe STIF::NetexFile do let( :zip_file ){ fixtures_path 'OFFRE_TRANSDEV_2017030112251.zip' } diff --git a/spec/lib/stif/permission_translator_spec.rb b/spec/lib/stif/permission_translator_spec.rb index 9675382e6..652dd2de2 100644 --- a/spec/lib/stif/permission_translator_spec.rb +++ b/spec/lib/stif/permission_translator_spec.rb @@ -1,4 +1,3 @@ -# coding: utf-8 RSpec.describe Stif::PermissionTranslator do context "No SSO Permissions" do diff --git a/spec/policies/api_key_policy_spec.rb b/spec/policies/api_key_policy_spec.rb index 5b9d59fa3..f0242978e 100644 --- a/spec/policies/api_key_policy_spec.rb +++ b/spec/policies/api_key_policy_spec.rb @@ -1,28 +1,60 @@ -require 'rails_helper' - RSpec.describe ApiKeyPolicy do - let(:user) { User.new } + let( :record ){ build_stubbed :api_key } + before { stub_policy_scope(record) } subject { described_class } - permissions ".scope" do - pending "add some examples to (or delete) #{__FILE__}" + permissions :index? do + it_behaves_like 'always allowed' end permissions :show? do - pending "add some examples to (or delete) #{__FILE__}" + it_behaves_like 'always allowed' end permissions :create? do - pending "add some examples to (or delete) #{__FILE__}" + context 'permission absent → ' do + it "denies a user without organisation" do + expect_it.not_to permit(user_context, record) + end + end + context 'permission present → ' do + it 'allows a user with a different organisation' do + add_permissions('api_keys.create', for_user: user) + expect_it.to permit(user_context, record) + end + end end permissions :update? do - pending "add some examples to (or delete) #{__FILE__}" + context 'permission absent → ' do + it "denies a user with a different organisation" do + expect_it.not_to permit(user_context, record) + end + it 'and also a user with the same organisation' do + user.organisation_id = record.organisation_id + expect_it.not_to permit(user_context, record) + end + end + + context 'permission present → ' do + before do + add_permissions('api_keys.update', for_user: user) + end + + it 'denies a user with a different organisation' do + expect_it.not_to permit(user_context, record) + end + + it 'but allows it for a user with the same organisation' do + user.organisation_id = record.organisation_id + expect_it.to permit(user_context, record) + end + end end permissions :destroy? do - pending "add some examples to (or delete) #{__FILE__}" + it_behaves_like 'permitted policy and same organisation', 'api_keys.destroy' end end |
