lib/generators/breadko/templates/breadkos_controller_spec.erb

Summary

Maintainability
Test Coverage
require 'rails_helper'

RSpec.describe <%= objects.camelize %>Controller, type: :controller do
  let(:user) { create(:user) }
  let(:<%= object %>) { create(:<%= object %>) }

  before do
    allow(controller).to receive(:current_user).and_return(user)
    allow(controller).to receive(:current_account).and_return(user.account)
  end

  describe "GET #index" do
    it "assigns @<%= objects %>" do
      get :index
      expect(assigns(:<%= objects %>)).to eq([<%= object %>])
    end
  end

  describe "GET #new" do
    it "assigns @<%= object %>" do
      get :new
      expect(assigns(:<%= object %>)).to be_a_new_record
    end
  end

  describe "POST #create" do
    context 'with passing params' do
      before { <%= object %> }
      it "creates <%= object %>" do
        params = { <%= object %>: { } }
        expect do
          post(:create, params: params)
        end.to change(<%= object.camelize %>, :count).by(1)
      end
    end

    # context 'with failing params' do
    #   before { <%= object %> }
    #   it "renders 'new' template" do
    #     params = { <%= object %>: { id: nil } }
    #     post(:create, params: params)
    #     expect(response).to render_template "new"
    #   end
    # end
  end

  describe "GET #edit" do
    it "assigns @<%= object %>" do
      params = { id: <%= object %>.id }
      get :edit, params: params
      expect(assigns(:<%= object %>)).to eq(<%= object %>)
    end
  end

  describe "PATCH #update" do
    context 'with passing params' do
      it "updates <%= object %>" do
        params = { id: <%= object %>.id, <%= object %>: { name: "admin" } }
        patch :update, params: params
        expect(assigns(:<%= object %>).name).to eq("admin")
        expect(response).to redirect_to(<%= objects %>_path)
      end
    end

    context 'with failing params' do
      it "renders 'edit'" do
        params = { id: <%= object %>.id, <%= object %>: { name: nil } }
        patch :update, params: params
        expect(response).to render_template('edit')
      end
    end
  end

  describe "GET #show" do
    it "updates <%= object %>" do
      params = { id: <%= object %>.id }
      patch :show, params: params
      expect(assigns(:<%= object %>)).to eq(<%= object %>)
    end
  end

  describe "DELETE #destroy" do
    it "updates <%= object %>" do
      params = { id: <%= object %>.id }
      delete :destroy, params: params
      expect(assigns(:<%= object %>)).to eq(<%= object %>)
    end
    it "raises an exception" do
      expect do
        delete :destroy, params: { id: "nothing" }
      end.to raise_error(ActiveRecord::RecordNotFound)
    end
  end
end