master
  1require "rails_helper"
  2
  3describe Api::V1::CakesController do
  4  render_views
  5
  6  context "when signed in" do
  7    let(:user) { create(:user) }
  8
  9    before :each do
 10      api_login(user)
 11    end
 12
 13    describe "#index" do
 14      let!(:my_cake) { create(:creation) }
 15      let!(:other_cake) { create(:creation) }
 16
 17      before :each do
 18        user.creations << my_cake
 19        get :index, xhr: true
 20      end
 21
 22      it "returns all of my cakes" do
 23        expect(assigns(:cakes)).to match_array([my_cake])
 24      end
 25
 26      it "does not return any other cakes" do
 27        expect(assigns(:cakes)).to_not include(other_cake)
 28      end
 29    end
 30
 31    describe "#show" do
 32      let!(:cake) { create(:creation) }
 33
 34      before :each do
 35        user.creations << cake
 36        get :show, params: { id: cake.id }, xhr: true
 37      end
 38
 39      it "loads a specific cake" do
 40        expect(assigns(:cake)).to eql(cake)
 41      end
 42    end
 43
 44    describe "#create" do
 45      let(:category) { create(:category) }
 46
 47      it "creates a new project" do
 48        post :create, params: { cake: { name: "new-cake", category_id: category.id } }, xhr: true
 49
 50        expect(Creation.count).to eql(1)
 51        expect(Creation.first.name).to eql("new-cake")
 52        expect(Creation.first.category).to eql(category)
 53        expect(Creation.first.user).to eql(user)
 54      end
 55    end
 56
 57    describe "#update" do
 58      let(:cake) { create(:cake, user: user) }
 59
 60      it "tags the cake" do
 61        tags = ["cake", "cookies", "yummy"]
 62        patch :update, params: { id: cake.id, cake: { tags: tags.join(", ") } }, xhr: true
 63
 64        cake.reload
 65        expect(cake.tags.pluck(:name)).to match_array(tags)
 66      end
 67
 68      it "updates the description" do
 69        new_story = "what is the haps on the craps"
 70        patch :update, params: { id: cake.id, cake: { story: new_story } }, xhr: true
 71
 72        cake.reload
 73        expect(cake.story).to eql(new_story)
 74      end
 75
 76      it "updates the category" do
 77        category = create(:category)
 78        patch :update, params: { id: cake.id, cake: { category_id: category.id } }, xhr: true
 79
 80        cake.reload
 81        expect(cake.category).to eql(category)
 82      end
 83    end
 84
 85    describe "#destroy" do
 86      let!(:cake) { create(:creation) }
 87
 88      before :each do
 89        user.creations << cake
 90        delete :destroy, params: { id: cake.id }, xhr: true
 91      end
 92
 93      it "deletes the specified cake" do
 94        expect(Creation.exists?(cake.id)).to be_falsey
 95      end
 96
 97      it "returns an empty json response" do
 98        json = JSON.parse(response.body)
 99        expect(json["id"]).to eql(cake.id)
100      end
101    end
102  end
103end