From 7f50db1ae93df33e94b1ebe17aab91105416ecaa Mon Sep 17 00:00:00 2001 From: Devin Howard Date: Tue, 9 Feb 2016 13:30:49 +0800 Subject: [PATCH] ok metacode spec done --- app/models/metacode.rb | 1 - spec/controllers/metacodes_controller_spec.rb | 72 ++++++++----------- spec/factories/metacodes.rb | 3 + 3 files changed, 33 insertions(+), 43 deletions(-) diff --git a/app/models/metacode.rb b/app/models/metacode.rb index 03b0f0c0..aa8f9104 100644 --- a/app/models/metacode.rb +++ b/app/models/metacode.rb @@ -1,5 +1,4 @@ class Metacode < ActiveRecord::Base - has_many :in_metacode_sets has_many :metacode_sets, :through => :in_metacode_sets has_many :topics diff --git a/spec/controllers/metacodes_controller_spec.rb b/spec/controllers/metacodes_controller_spec.rb index d8edcbf0..d950e77d 100644 --- a/spec/controllers/metacodes_controller_spec.rb +++ b/spec/controllers/metacodes_controller_spec.rb @@ -2,22 +2,22 @@ require 'rails_helper' RSpec.describe MetacodesController, type: :controller do let(:metacode) { create(:metacode) } - let(:valid_attributes) { metacode.attributes.except(:id) } - let(:invalid_attributes) { { permission: :commons } } + let(:valid_attributes) { metacode.attributes.except('id') } before :each do - sign_in + sign_in create(:user, admin: true) end describe 'GET #index' do it 'assigns all metacodes as @metacodes' do + metacode.reload # ensure it's created get :index, {} - expect(assigns(:metacodes).to_a).to eq([metacode]) + expect(Metacode.all.to_a).to eq([metacode]) end end describe 'GET #new' do it 'assigns a new metacode as @metacode' do - get :new, {} + get :new, { format: :json } expect(assigns(:metacode)).to be_a_new(Metacode) end end @@ -32,32 +32,22 @@ RSpec.describe MetacodesController, type: :controller do describe 'POST #create' do context 'with valid params' do it 'creates a new Metacode' do + metacode.reload # ensure it's present to start expect do post :create, { metacode: valid_attributes } end.to change(Metacode, :count).by(1) end - it 'assigns a newly created metacode as @metacode' do + it 'has the correct attributes' do post :create, { metacode: valid_attributes } + # expect(Metacode.last.attributes.expect(:id)).to eq(metacode.attributes.except(:id)) expect(assigns(:metacode)).to be_a(Metacode) expect(assigns(:metacode)).to be_persisted end - it 'redirects to the created metacode' do + it 'redirects to the metacode index' do post :create, { metacode: valid_attributes } - expect(response).to redirect_to(Metacode.last) - end - end - - context 'with invalid params' do - it 'assigns a newly created but unsaved metacode as @metacode' do - post :create, { metacode: invalid_attributes } - expect(assigns(:metacode)).to be_a_new(Metacode) - end - - it "re-renders the 'new' template" do - post :create, { metacode: invalid_attributes } - expect(response).to render_template('new') + expect(response).to redirect_to(metacodes_url) end end end @@ -65,35 +55,33 @@ RSpec.describe MetacodesController, type: :controller do describe 'PUT #update' do context 'with valid params' do let(:new_attributes) do - skip('Add a hash of attributes valid for your model') + { icon: 'https://newimages.ca/cool-image.jpg', + color: '#ffffff', + name: 'Cognition' } end it 'updates the requested metacode' do put :update, { id: metacode.to_param, metacode: new_attributes } metacode.reload - skip('Add assertions for updated state') - end - - it 'assigns the requested metacode as @metacode' do - put :update, - { id: metacode.to_param, metacode: valid_attributes } - expect(assigns(:metacode)).to eq(metacode) - end - - it 'redirects to the metacode' do - put :update, - { id: metacode.to_param, metacode: valid_attributes } - expect(response).to redirect_to(metacode) - end - end - - context 'with invalid params' do - it 'redirects to edit template' do - put :update, - { id: metacode.to_param, metacode: invalid_attributes } - expect(response.status).to eq 302 + expect(metacode.icon).to eq 'https://newimages.ca/cool-image.jpg' + expect(metacode.color).to eq '#ffffff' + expect(metacode.name).to eq 'Cognition' end end end + + context 'not admin' do + it 'denies access to create' do + sign_in create(:user, admin: false) + post :create, { metacode: valid_attributes } + expect(response).to redirect_to root_url + end + + it 'denies access to update' do + sign_in create(:user, admin: false) + post :update, { id: metacode.to_param, metacode: valid_attributes } + expect(response).to redirect_to root_url + end + end end diff --git a/spec/factories/metacodes.rb b/spec/factories/metacodes.rb index 5cfb38f6..eb040e09 100644 --- a/spec/factories/metacodes.rb +++ b/spec/factories/metacodes.rb @@ -1,4 +1,7 @@ FactoryGirl.define do factory :metacode do + sequence(:name) { |n| "Cool Metacode ##{n}" } + icon 'https://images.com/image.png' + color '#cccccc' end end