Sha256: e877ed47f0651197f990156a4b65062837b71a01a6e71dbd8f2d6c4bba3e8ac4

Contents?: true

Size: 1.41 KB

Versions: 1

Compression:

Stored size: 1.41 KB

Contents

require 'spec_helper'

describe SeemsRateable::RatesController do
  routes { SeemsRateable::Engine.routes }

  let(:user) { FactoryGirl.create(:user) }
  let(:article) { FactoryGirl.create(:post) }

  describe "POST #create" do
    def create_rate
      xhr :post, :create, valid_attributes(article)
    end

    def valid_attributes(rateable)
      {
        rate: {
          rateable_type: rateable.class.name,
          rateable_id: rateable.id,
          stars: rand(1..5),
          dimension: ['speed', 'quality', nil].sample
        }
      }
    end

    context "when valid" do
      before do
        controller.stub(:current_user).and_return(user)
      end

      it "creates a new rate" do
        expect { create_rate }.to change(SeemsRateable::Rate, :count).by(1)
      end

      it "assigns a newly created rate as @rate" do
        create_rate
        assigns(:rate).should be_a(SeemsRateable::Rate)
        assigns(:rate).should be_persisted
      end

      it "renders average rating as json" do
        create_rate
        expect(response.content_type).to eq('application/json')
        expect(response.status).to eq(200)
        expect(JSON.parse(response.body)).to have_key("average")
      end
    end

    context "when invalid" do
      context "when user is not signed in" do
        it "raises a NoCurrentRaterError error" do
          expect { create_rate }.to raise_error
        end
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
seems_rateable-2.0.0 spec/controllers/rates_controller_spec.rb