Make the products controller specs green

This commit is contained in:
2025-09-23 12:15:09 -05:00
parent 54f86078f5
commit 6a100555bc
6 changed files with 24 additions and 19 deletions
@@ -17,13 +17,13 @@ describe Suppliers::ProductsController, type: :controller do
describe "GET #show" do
it "assigns the requested product to @product" do
product = create :product, supplier: @supplier
get :show, id: product
get :show, params: {id: product}
assigns(:product).should eq(product)
end
it "should not display a product of another supplier" do
product = create :product
get :show, id: product
get :show, params: {id: product}
expect(response.status).to eq 404
end
end
@@ -39,18 +39,18 @@ describe Suppliers::ProductsController, type: :controller do
context "with valid attributes" do
it "creates a new product" do
expect{
post :create, product: valid_attributes
post :create, params: {product: valid_attributes}
}.to change(Product, :count).by(1)
end
it "redirects to the new product" do
post :create, product: valid_attributes
post :create, params: {product: valid_attributes}
response.should redirect_to [:suppliers, :products]
end
it "should not be possible to create a product for another supplier" do
supplier2 = create :supplier
post :create, product: valid_attributes.merge(name: 'Trying to hack', supplier_id: supplier2.id)
post :create, params: {product: valid_attributes.merge(name: 'Trying to hack', supplier_id: supplier2.id)}
expect( Product.find_by_name('Trying to hack').supplier_id ).to eq @supplier.id
end
end
@@ -58,12 +58,12 @@ describe Suppliers::ProductsController, type: :controller do
context "with invalid attributes" do
it "does not save the new product" do
expect{
post :create, product: invalid_attributes
post :create, params: {product: invalid_attributes}
}.to_not change(Product, :count)
end
it 'returns an error object' do
post :create, format: :json, product: invalid_attributes
post :create, params: {format: :json, product: invalid_attributes}
expect( JSON.parse(response.body)['errors'] ).to be_present
end
end
@@ -76,26 +76,26 @@ describe Suppliers::ProductsController, type: :controller do
context "valid attributes" do
it "located the requested product" do
put :update, id: @product, product: valid_attributes
put :update, params: {id: @product, product: valid_attributes}
@product.reload
assigns(:product).should eq(@product)
end
it "changes @product's attributes" do
put :update, id: @product, product: valid_attributes.merge(name: "ChangedByTest")
put :update, params: {id: @product, product: valid_attributes.merge(name: "ChangedByTest")}
@product.reload
@product.name.should eq("ChangedByTest")
end
it "should not be possible to update a product to another supplier" do
supplier2 = create :supplier
put :update, id: @product, product: valid_attributes.merge(name: "Trying to hack", supplier_id: supplier2.id)
put :update, params: {id: @product, product: valid_attributes.merge(name: "Trying to hack", supplier_id: supplier2.id)}
expect( Product.find_by_name('Trying to hack' ).supplier_id ).to eq @supplier.id
end
it "should not be possible to update a product of another supplier" do
product = create :product, name: 'Other supplier product'
put :update, id: product, product: {name: "Trying to hack"}
put :update, params: {id: product, product: {name: "Trying to hack"}}
product.reload
expect( product.name ).to eq 'Other supplier product'
end
@@ -103,7 +103,7 @@ describe Suppliers::ProductsController, type: :controller do
context "with invalid attributes" do
it "returns an error response" do
put :update, id: @product, format: :json, product: invalid_attributes
put :update, params: {id: @product, format: :json, product: invalid_attributes}
expect( JSON.parse( response.body )['errors']).to be_present
end
end
@@ -116,14 +116,14 @@ describe Suppliers::ProductsController, type: :controller do
it "deletes the product" do
expect{
delete :destroy, id: @product
delete :destroy, params: {id: @product}
}.to change(Product, :count).by(-1)
end
it "should not be possible to delete a product of another supplier" do
product = create :product
expect{
delete :destroy, id: product.id
delete :destroy, params: {id: product.id}
}.to_not change(Product, :count)
end
end