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
def edit
@breweries = Brewery.all
@styles = ["Weizen", "Lager", "Pale ale", "IPA", "Porter", "Lowalcohol"]
@styles = Style.all
end
# POST /beers or /beers.json
@@ -70,11 +70,11 @@ class BeersController < ApplicationController
# Only allow a list of trusted parameters through.
def beer_params
params.require(:beer).permit(:name, :style, :brewery_id)
params.require(:beer).permit(:name, :style_id, :brewery_id)
end
def set_breweries_and_styles_for_template
@breweries = Brewery.all
@styles = ["Weizen", "Lager", "Pale ale", "IPA", "Porter", "Lowalcohol"]
@styles = Style.all
end
end
+1
View File
@@ -2,6 +2,7 @@ class Beer < ApplicationRecord
include RatingAverage
belongs_to :brewery
belongs_to :style
has_many :ratings, dependent: :destroy
has_many :users, through: :ratings
+2 -1
View File
@@ -36,9 +36,10 @@ class User < ApplicationRecord
items = {}
ratings.each do |rating|
style = Style.find_by_id rating.beer.style_id
attributes = {
# 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
# which brewery the beer that was rated was made in
"breweries" => rating.beer.brewery.name
+1 -1
View File
@@ -6,7 +6,7 @@
<p>
<strong>Style:</strong>
<%= beer.style %>
<%= beer.style.name %>
</p>
<p>
+2 -2
View File
@@ -17,8 +17,8 @@
</div>
<div>
<%= form.label :style, style: "display: block" %>
<%= form.select :style, options_for_select(@styles) %>
<%= form.label :style_id, style: "display: block" %>
<%= form.select :style_id, options_from_collection_for_select(@styles, :id, :name) %>
</div>
<div>
+5 -1
View File
@@ -10,9 +10,13 @@ FactoryBot.define do
year { 2023 }
end
factory :style do
name { "Yes" }
end
factory :beer do
name { "Something good" }
style { "Yes" }
style
brewery
end
+4 -1
View File
@@ -3,7 +3,8 @@ require "rails_helper"
describe "Beers page" do
let(:user) { FactoryBot.create :user }
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
visit beers_path
@@ -16,6 +17,7 @@ describe "Beers page" do
it "should display all beers in the database" do
brewery.save()
style.save()
beer.save()
visit beers_path
@@ -26,6 +28,7 @@ describe "Beers page" do
it "should be able to add a new beer" do
user.save()
style.save()
brewery.save()
visit new_session_path
+6 -5
View File
@@ -2,19 +2,20 @@ require 'rails_helper'
RSpec.describe Beer, type: :model do
describe "creation" do
let(:user){ User.create username: "Möötti", password: "Unsecure1"}
let(:brewery){ Brewery.create name: "Creative", year: 2023 }
let(:user) { User.create username: "Möötti", password: "Unsecure1"}
let(:brewery) { Brewery.create name: "Creative", year: 2023 }
let(:style) { FactoryBot.create :style }
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.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
end
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
end
+13 -10
View File
@@ -29,8 +29,9 @@ RSpec.describe User, type: :model do
end
describe "favourite_style" do
let(:user){ FactoryBot.create(:user) }
let(:brewery){ FactoryBot.create(:brewery) }
let(:user) { FactoryBot.create(:user) }
let(:brewery) { FactoryBot.create(:brewery) }
let(:style) { FactoryBot.create(:style) }
it "is defined method" do
expect(user).to respond_to(:favorite_style)
@@ -41,16 +42,17 @@ RSpec.describe User, type: :model do
end
it "returns the most liked style" do
create_beer_with_many_ratings({user: user, brewery: brewery}, 10, 10, 20)
beer_with_favorite_style = FactoryBot.create(:beer, style: "No")
create_beer_with_many_ratings({user: user, brewery: brewery, style: style.id}, 10, 10, 20)
beer_with_favorite_style = FactoryBot.create :beer, style_id: style.id
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
it "also returns the most liked style" do
create_beer_with_many_ratings({user: user, brewery: brewery}, 20, 30, 20)
beer_with_favorite_style = FactoryBot.create(:beer, style: "No")
other_style = Style.create name: "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)
expect(user.favorite_style).to eq "Yes"
@@ -61,8 +63,9 @@ RSpec.describe User, type: :model do
let(:user){ FactoryBot.create(:user) }
let(:brewery1){ FactoryBot.create(:brewery) }
let(:brewery2){ FactoryBot.create(:brewery, name: "Boring") }
before do create_beer_with_many_ratings({user: user, brewery: brewery1}, 20, 30, 20, 40) end
before do create_beer_with_many_ratings({user: user, brewery: brewery2}, 20, 30, 20, 50) end
let(:style) { FactoryBot.create(:style) }
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
expect(user).to respond_to(:favorite_brewery)
@@ -78,7 +81,7 @@ RSpec.describe User, type: :model do
end
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])
end