fixed tests after migration

This commit is contained in:
Aaro Koivukangas
2023-11-29 20:41:23 +02:00
parent 10fee9e695
commit 365dc892f8
9 changed files with 37 additions and 24 deletions
+3 -3
View File
@@ -20,7 +20,7 @@ class BeersController < ApplicationController
# GET /beers/1/edit # GET /beers/1/edit
def edit def edit
@breweries = Brewery.all @breweries = Brewery.all
@styles = ["Weizen", "Lager", "Pale ale", "IPA", "Porter", "Lowalcohol"] @styles = Style.all
end end
# POST /beers or /beers.json # POST /beers or /beers.json
@@ -70,11 +70,11 @@ class BeersController < ApplicationController
# Only allow a list of trusted parameters through. # Only allow a list of trusted parameters through.
def beer_params def beer_params
params.require(:beer).permit(:name, :style, :brewery_id) params.require(:beer).permit(:name, :style_id, :brewery_id)
end end
def set_breweries_and_styles_for_template def set_breweries_and_styles_for_template
@breweries = Brewery.all @breweries = Brewery.all
@styles = ["Weizen", "Lager", "Pale ale", "IPA", "Porter", "Lowalcohol"] @styles = Style.all
end end
end end
+1
View File
@@ -2,6 +2,7 @@ class Beer < ApplicationRecord
include RatingAverage include RatingAverage
belongs_to :brewery belongs_to :brewery
belongs_to :style
has_many :ratings, dependent: :destroy has_many :ratings, dependent: :destroy
has_many :users, through: :ratings has_many :users, through: :ratings
+2 -1
View File
@@ -36,9 +36,10 @@ class User < ApplicationRecord
items = {} items = {}
ratings.each do |rating| ratings.each do |rating|
style = Style.find_by_id rating.beer.style_id
attributes = { attributes = {
# create hash with key being style name and value first 0 and then the score # create hash with key being style name and value first 0 and then the score
"styles" => rating.beer.style, "styles" => style.name,
# iterate through ratings and add scores depending on # iterate through ratings and add scores depending on
# which brewery the beer that was rated was made in # which brewery the beer that was rated was made in
"breweries" => rating.beer.brewery.name "breweries" => rating.beer.brewery.name
+1 -1
View File
@@ -6,7 +6,7 @@
<p> <p>
<strong>Style:</strong> <strong>Style:</strong>
<%= beer.style %> <%= beer.style.name %>
</p> </p>
<p> <p>
+2 -2
View File
@@ -17,8 +17,8 @@
</div> </div>
<div> <div>
<%= form.label :style, style: "display: block" %> <%= form.label :style_id, style: "display: block" %>
<%= form.select :style, options_for_select(@styles) %> <%= form.select :style_id, options_from_collection_for_select(@styles, :id, :name) %>
</div> </div>
<div> <div>
+5 -1
View File
@@ -10,9 +10,13 @@ FactoryBot.define do
year { 2023 } year { 2023 }
end end
factory :style do
name { "Yes" }
end
factory :beer do factory :beer do
name { "Something good" } name { "Something good" }
style { "Yes" } style
brewery brewery
end end
+4 -1
View File
@@ -3,7 +3,8 @@ require "rails_helper"
describe "Beers page" do describe "Beers page" do
let(:user) { FactoryBot.create :user } let(:user) { FactoryBot.create :user }
let(:brewery){ FactoryBot.create :brewery } let(:brewery){ FactoryBot.create :brewery }
let(:beer){ FactoryBot.create :beer } let(:style) { FactoryBot.create :style }
let(:beer){ FactoryBot.create :beer, brewery: brewery, style_id: style.id }
it "should be empty before tests" do it "should be empty before tests" do
visit beers_path visit beers_path
@@ -16,6 +17,7 @@ describe "Beers page" do
it "should display all beers in the database" do it "should display all beers in the database" do
brewery.save() brewery.save()
style.save()
beer.save() beer.save()
visit beers_path visit beers_path
@@ -26,6 +28,7 @@ describe "Beers page" do
it "should be able to add a new beer" do it "should be able to add a new beer" do
user.save() user.save()
style.save()
brewery.save() brewery.save()
visit new_session_path visit new_session_path
+6 -5
View File
@@ -2,19 +2,20 @@ require 'rails_helper'
RSpec.describe Beer, type: :model do RSpec.describe Beer, type: :model do
describe "creation" do describe "creation" do
let(:user){ User.create username: "Möötti", password: "Unsecure1"} let(:user) { User.create username: "Möötti", password: "Unsecure1"}
let(:brewery){ Brewery.create name: "Creative", year: 2023 } let(:brewery) { Brewery.create name: "Creative", year: 2023 }
let(:style) { FactoryBot.create :style }
it "is successful with correct parameters" do it "is successful with correct parameters" do
beer = Beer.create name: "Hyvä juoma", style: "Yes", brewery_id: brewery.id beer = Beer.create name: "Hyvä juoma", style_id: style.id, brewery_id: brewery.id
expect(beer).to be_valid expect(beer).to be_valid
expect(beer.name).to eq "Hyvä juoma" expect(beer.name).to eq "Hyvä juoma"
expect(beer.style).to eq "Yes" expect(beer.style_id).to eq style.id
expect(beer.brewery_id).to eq brewery.id expect(beer.brewery_id).to eq brewery.id
end end
it "fails if no name is given" do it "fails if no name is given" do
beer = Beer.create style: "No", brewery_id: brewery.id beer = Beer.create style_id: style.id, brewery_id: brewery.id
expect(beer).to_not be_valid expect(beer).to_not be_valid
end end
+13 -10
View File
@@ -29,8 +29,9 @@ RSpec.describe User, type: :model do
end end
describe "favourite_style" do describe "favourite_style" do
let(:user){ FactoryBot.create(:user) } let(:user) { FactoryBot.create(:user) }
let(:brewery){ FactoryBot.create(:brewery) } let(:brewery) { FactoryBot.create(:brewery) }
let(:style) { FactoryBot.create(:style) }
it "is defined method" do it "is defined method" do
expect(user).to respond_to(:favorite_style) expect(user).to respond_to(:favorite_style)
@@ -41,16 +42,17 @@ RSpec.describe User, type: :model do
end end
it "returns the most liked style" do it "returns the most liked style" do
create_beer_with_many_ratings({user: user, brewery: brewery}, 10, 10, 20) create_beer_with_many_ratings({user: user, brewery: brewery, style: style.id}, 10, 10, 20)
beer_with_favorite_style = FactoryBot.create(:beer, style: "No") beer_with_favorite_style = FactoryBot.create :beer, style_id: style.id
FactoryBot.create(:rating, beer: beer_with_favorite_style, score: 50, user: user) FactoryBot.create(:rating, beer: beer_with_favorite_style, score: 50, user: user)
expect(user.favorite_style).to eq "No" expect(user.favorite_style).to eq "Yes"
end end
it "also returns the most liked style" do it "also returns the most liked style" do
create_beer_with_many_ratings({user: user, brewery: brewery}, 20, 30, 20) other_style = Style.create name: "No"
beer_with_favorite_style = FactoryBot.create(:beer, style: "No") create_beer_with_many_ratings({user: user, brewery: brewery, style: style.id}, 20, 30, 20)
beer_with_favorite_style = FactoryBot.create(:beer, style_id: other_style.id)
FactoryBot.create(:rating, beer: beer_with_favorite_style, score: 50, user: user) FactoryBot.create(:rating, beer: beer_with_favorite_style, score: 50, user: user)
expect(user.favorite_style).to eq "Yes" expect(user.favorite_style).to eq "Yes"
@@ -61,8 +63,9 @@ RSpec.describe User, type: :model do
let(:user){ FactoryBot.create(:user) } let(:user){ FactoryBot.create(:user) }
let(:brewery1){ FactoryBot.create(:brewery) } let(:brewery1){ FactoryBot.create(:brewery) }
let(:brewery2){ FactoryBot.create(:brewery, name: "Boring") } let(:brewery2){ FactoryBot.create(:brewery, name: "Boring") }
before do create_beer_with_many_ratings({user: user, brewery: brewery1}, 20, 30, 20, 40) end let(:style) { FactoryBot.create(:style) }
before do create_beer_with_many_ratings({user: user, brewery: brewery2}, 20, 30, 20, 50) end before do create_beer_with_many_ratings({user: user, brewery: brewery1, style: style.id}, 20, 30, 20, 40) end
before do create_beer_with_many_ratings({user: user, brewery: brewery2, style: style.id}, 20, 30, 20, 50) end
it "is a defined method" do it "is a defined method" do
expect(user).to respond_to(:favorite_brewery) expect(user).to respond_to(:favorite_brewery)
@@ -78,7 +81,7 @@ RSpec.describe User, type: :model do
end end
def create_beer_with_rating(object, score) def create_beer_with_rating(object, score)
beer = FactoryBot.create(:beer, brewery: object[:brewery]) beer = FactoryBot.create(:beer, brewery: object[:brewery], style_id: object[:style])
rating = FactoryBot.create(:rating, beer: beer, score: score, user: object[:user]) rating = FactoryBot.create(:rating, beer: beer, score: score, user: object[:user])
end end