Refactor dagschotel and make test succeed again
This commit is contained in:
parent
191517bda7
commit
6ec27acaf8
|
@ -9,7 +9,7 @@
|
||||||
text-align: center;
|
text-align: center;
|
||||||
}
|
}
|
||||||
|
|
||||||
.user_info h5 {
|
.user_info h5 {
|
||||||
margin-right: 10px;
|
margin-right: 10px;
|
||||||
text-align: right;
|
text-align: right;
|
||||||
}
|
}
|
||||||
|
@ -37,7 +37,7 @@
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
}
|
}
|
||||||
|
|
||||||
.balance {
|
.debt {
|
||||||
padding: 12px 0;
|
padding: 12px 0;
|
||||||
text-align: center;
|
text-align: center;
|
||||||
font-family: monospace;
|
font-family: monospace;
|
||||||
|
|
|
@ -99,3 +99,7 @@ table {
|
||||||
color: #999;
|
color: #999;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.product_dagschotel {
|
||||||
|
height: 34px;
|
||||||
|
}
|
||||||
|
|
|
@ -34,12 +34,18 @@ class UsersController < ApplicationController
|
||||||
def edit_dagschotel
|
def edit_dagschotel
|
||||||
@user = User.find(params[:user_id])
|
@user = User.find(params[:user_id])
|
||||||
@dagschotel = @user.dagschotel
|
@dagschotel = @user.dagschotel
|
||||||
|
|
||||||
|
@products = Product.all
|
||||||
|
@categories = Product.categories
|
||||||
end
|
end
|
||||||
|
|
||||||
def update_dagschotel
|
def update_dagschotel
|
||||||
@user = User.find(params[:user_id])
|
@user = User.find(params[:user_id])
|
||||||
@user.dagschotel = Product.find(params[:product_id])
|
@user.dagschotel = Product.find(params[:product_id])
|
||||||
|
|
||||||
|
@products = Product.all
|
||||||
|
@categories = Product.categories
|
||||||
|
|
||||||
if @user.save
|
if @user.save
|
||||||
flash[:success] = "Succesfully updated dagschotel"
|
flash[:success] = "Succesfully updated dagschotel"
|
||||||
redirect_to @user
|
redirect_to @user
|
||||||
|
|
|
@ -2,17 +2,18 @@
|
||||||
#
|
#
|
||||||
# Table name: orders
|
# Table name: orders
|
||||||
#
|
#
|
||||||
# id :integer not null, primary key
|
# id :integer not null, primary key
|
||||||
# user_id :integer
|
# user_id :integer
|
||||||
# cost :integer
|
# price_cents :integer
|
||||||
# created_at :datetime not null
|
# created_at :datetime not null
|
||||||
# updated_at :datetime not null
|
# updated_at :datetime not null
|
||||||
|
# cancelled :boolean default("f")
|
||||||
#
|
#
|
||||||
|
|
||||||
class Order < ActiveRecord::Base
|
class Order < ActiveRecord::Base
|
||||||
include ActionView::Helpers::TextHelper
|
include ActionView::Helpers::TextHelper
|
||||||
|
|
||||||
after_create { self.user.decrement!(:balance_cents, price_cents) }
|
after_create { self.user.increment!(:debt_cents, price_cents) }
|
||||||
|
|
||||||
belongs_to :user, counter_cache: true
|
belongs_to :user, counter_cache: true
|
||||||
has_many :order_items, dependent: :destroy
|
has_many :order_items, dependent: :destroy
|
||||||
|
@ -39,9 +40,10 @@ class Order < ActiveRecord::Base
|
||||||
|
|
||||||
def cancel
|
def cancel
|
||||||
return if self.cancelled
|
return if self.cancelled
|
||||||
user.increment!(:balance_cents, price_cents)
|
user.decrement!(:debt_cents, price_cents)
|
||||||
User.decrement_counter(:orders_count, user.id)
|
User.decrement_counter(:orders_count, user.id)
|
||||||
update_attribute(:cancelled, true)
|
update_attribute(:cancelled, true)
|
||||||
|
self.order_items.each(&:cancel)
|
||||||
end
|
end
|
||||||
|
|
||||||
def to_sentence
|
def to_sentence
|
||||||
|
|
|
@ -3,9 +3,9 @@
|
||||||
# Table name: order_items
|
# Table name: order_items
|
||||||
#
|
#
|
||||||
# id :integer not null, primary key
|
# id :integer not null, primary key
|
||||||
# order_id :integer not null
|
# order_id :integer
|
||||||
# product_id :integer not null
|
# product_id :integer not null
|
||||||
# count :integer default(0)
|
# count :integer default("0")
|
||||||
#
|
#
|
||||||
|
|
||||||
class OrderItem < ActiveRecord::Base
|
class OrderItem < ActiveRecord::Base
|
||||||
|
@ -24,6 +24,10 @@ class OrderItem < ActiveRecord::Base
|
||||||
super
|
super
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def cancel
|
||||||
|
self.product.increment!(:stock, self.count)
|
||||||
|
end
|
||||||
|
|
||||||
private
|
private
|
||||||
|
|
||||||
def remove_from_stock
|
def remove_from_stock
|
||||||
|
|
|
@ -3,16 +3,16 @@
|
||||||
# Table name: products
|
# Table name: products
|
||||||
#
|
#
|
||||||
# id :integer not null, primary key
|
# id :integer not null, primary key
|
||||||
# name :string(255) not null
|
# name :string not null
|
||||||
# price_cents :integer default(0), not null
|
# price_cents :integer default("0"), not null
|
||||||
# category :integer default(0)
|
|
||||||
# stock :integer default(0), not null
|
|
||||||
# avatar_file_name :string(255)
|
|
||||||
# avatar_content_type :string(255)
|
|
||||||
# avatar_file_size :integer
|
|
||||||
# avatar_updated_at :datetime
|
|
||||||
# created_at :datetime
|
# created_at :datetime
|
||||||
# updated_at :datetime
|
# updated_at :datetime
|
||||||
|
# avatar_file_name :string
|
||||||
|
# avatar_content_type :string
|
||||||
|
# avatar_file_size :integer
|
||||||
|
# avatar_updated_at :datetime
|
||||||
|
# category :integer default("0")
|
||||||
|
# stock :integer default("0"), not null
|
||||||
#
|
#
|
||||||
|
|
||||||
class Product < ActiveRecord::Base
|
class Product < ActiveRecord::Base
|
||||||
|
|
|
@ -3,33 +3,35 @@
|
||||||
# Table name: users
|
# Table name: users
|
||||||
#
|
#
|
||||||
# id :integer not null, primary key
|
# id :integer not null, primary key
|
||||||
# name :string(255)
|
# name :string
|
||||||
# last_name :string(255)
|
# last_name :string
|
||||||
# balance_cents :integer default(0), not null
|
# debt_cents :integer default("0"), not null
|
||||||
# nickname :string(255)
|
# nickname :string
|
||||||
# admin :boolean
|
|
||||||
# koelkast :boolean default(FALSE)
|
|
||||||
# dagschotel_id :integer
|
|
||||||
# orders_count :integer default(0)
|
|
||||||
# avatar_file_name :string(255)
|
|
||||||
# avatar_content_type :string(255)
|
|
||||||
# avatar_file_size :integer
|
|
||||||
# avatar_updated_at :datetime
|
|
||||||
# created_at :datetime
|
# created_at :datetime
|
||||||
# updated_at :datetime
|
# updated_at :datetime
|
||||||
# encrypted_password :string(255) default(""), not null
|
# encrypted_password :string default(""), not null
|
||||||
# remember_created_at :datetime
|
# remember_created_at :datetime
|
||||||
# sign_in_count :integer default(0), not null
|
# sign_in_count :integer default("0"), not null
|
||||||
# current_sign_in_at :datetime
|
# current_sign_in_at :datetime
|
||||||
# last_sign_in_at :datetime
|
# last_sign_in_at :datetime
|
||||||
# current_sign_in_ip :string(255)
|
# current_sign_in_ip :string
|
||||||
# last_sign_in_ip :string(255)
|
# last_sign_in_ip :string
|
||||||
|
# admin :boolean
|
||||||
|
# dagschotel_id :integer
|
||||||
|
# avatar_file_name :string
|
||||||
|
# avatar_content_type :string
|
||||||
|
# avatar_file_size :integer
|
||||||
|
# avatar_updated_at :datetime
|
||||||
|
# orders_count :integer default("0")
|
||||||
|
# koelkast :boolean default("f")
|
||||||
|
# provider :string
|
||||||
|
# uid :string
|
||||||
#
|
#
|
||||||
|
|
||||||
class User < ActiveRecord::Base
|
class User < ActiveRecord::Base
|
||||||
devise :database_authenticatable, :registerable, :rememberable, :trackable, :validatable
|
devise :database_authenticatable, :registerable, :rememberable, :trackable, :validatable
|
||||||
|
|
||||||
has_paper_trail only: [:balance, :admin, :orders_count, :koelkast]
|
has_paper_trail only: [:debt_cents, :admin, :orders_count, :koelkast]
|
||||||
|
|
||||||
has_attached_file :avatar, styles: { large: "150x150>", medium: "100x100>" }, default_style: :medium
|
has_attached_file :avatar, styles: { large: "150x150>", medium: "100x100>" }, default_style: :medium
|
||||||
|
|
||||||
|
@ -50,13 +52,13 @@ class User < ActiveRecord::Base
|
||||||
"#{name} #{last_name}"
|
"#{name} #{last_name}"
|
||||||
end
|
end
|
||||||
|
|
||||||
def balance
|
def debt
|
||||||
self.balance_cents / 100.0
|
self.debt_cents / 100.0
|
||||||
end
|
end
|
||||||
|
|
||||||
def balance=(value)
|
def debt=(value)
|
||||||
if value.is_a? String then value.sub!(',', '.') end
|
if value.is_a? String then value.sub!(',', '.') end
|
||||||
self.balance_cents = (value.to_f * 100).to_int
|
self.debt_cents = (value.to_f * 100).to_int
|
||||||
end
|
end
|
||||||
|
|
||||||
# Change URL params for User
|
# Change URL params for User
|
||||||
|
|
|
@ -1,3 +1,3 @@
|
||||||
<%- headers = ['nickname', 'schulden'] -%>
|
<%- headers = ['nickname', 'schulden'] -%>
|
||||||
<%= CSV.generate_line headers -%>
|
<%= CSV.generate_line headers -%>
|
||||||
<% @users.each do |user| %><%= CSV.generate_line([user.nickname, user.balance]) %><% end %>
|
<% @users.each do |user| %><%= CSV.generate_line([user.nickname, user.debt]) %><% end %>
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
<h3>Order for <%= @user.nickname %> (Huidige schuld: <%= euro(@user.balance) %>)</h3>
|
<h3>Order for <%= @user.nickname %> (Huidige schuld: <%= euro(@user.debt) %>)</h3>
|
||||||
|
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<%= f_form_for [@user, @order] do |f| %>
|
<%= f_form_for [@user, @order] do |f| %>
|
||||||
|
|
22
app/views/products/_index.html.erb
Normal file
22
app/views/products/_index.html.erb
Normal file
|
@ -0,0 +1,22 @@
|
||||||
|
<div role="tabpanel">
|
||||||
|
<!-- Nav tabs -->
|
||||||
|
<ul class="nav nav-tabs" role="tablist">
|
||||||
|
<li role="presentation" class="active"><a href="#all" role="tab" data-toggle="tab">All</a></li>
|
||||||
|
<% @categories.each do |o, i| %>
|
||||||
|
<li role="presentation"><a href="#<%= o %>" aria-controls="<%= o %>" role="tab" data-toggle="tab"><%= o.titleize %></a></li>
|
||||||
|
<% end %>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<!-- Tab panes -->
|
||||||
|
<div class="tab-content">
|
||||||
|
<br />
|
||||||
|
<div role="tabpanel" class="tab-pane active" id="all">
|
||||||
|
<%= render @products %>
|
||||||
|
</div>
|
||||||
|
<% @categories.each do |o, i| %>
|
||||||
|
<div role="tabpanel" class="tab-pane" id="<%= o %>">
|
||||||
|
<%= render @products.where(category: i) %>
|
||||||
|
</div>
|
||||||
|
<% end %>
|
||||||
|
</div>
|
||||||
|
</div>
|
|
@ -1,16 +1,28 @@
|
||||||
<div class="col-md-3">
|
<div class="col-md-3">
|
||||||
<div class="thumbnail pic">
|
<div class="thumbnail pic">
|
||||||
<%= image_tag product.avatar %>
|
<div class="form_row_image">
|
||||||
|
<%= image_tag product.avatar %>
|
||||||
|
</div>
|
||||||
<div class="caption">
|
<div class="caption">
|
||||||
<h4><%= product.name %></h4>
|
<h4><%= product.name %></h4>
|
||||||
<h3><%= euro(product.price) %></h3>
|
<h3><%= euro(product.price) %></h3>
|
||||||
<h6>(In stock: <%= product.stock %>)</h6>
|
<h6>(In stock: <%= product.stock %>)</h6>
|
||||||
<% if current_user && current_user.admin? %>
|
<%- if controller_name == 'products' && current_user && current_user.admin? %>
|
||||||
<p>
|
<p>
|
||||||
<%= link_to "Edit", edit_product_path(product), class: "btn btn-default" %>
|
<%= link_to "Edit", edit_product_path(product), class: "btn btn-default" %>
|
||||||
<%= link_to "Delete", product_path(product), method: :delete, class: "btn btn-danger", data: {confirm: 'Are you sure?'} %>
|
<%= link_to "Delete", product_path(product), method: :delete, class: "btn btn-danger", data: {confirm: 'Are you sure?'} %>
|
||||||
</p>
|
</p>
|
||||||
<% end %>
|
<% end -%>
|
||||||
|
|
||||||
|
<%- if controller_name == 'users' %>
|
||||||
|
<div class="product_dagschotel">
|
||||||
|
<% if current_user.dagschotel != product %>
|
||||||
|
<%= link_to "Make dagschotel", user_dagschotel_path(current_user, product), class: "btn btn-default" %>
|
||||||
|
<% else %>
|
||||||
|
<%= link_to "Huidige dagschotel", user_dagschotel_path(current_user, product), class: "btn btn-success", disabled: true %>
|
||||||
|
<% end %>
|
||||||
|
</div>
|
||||||
|
<% end -%>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -1,27 +1,3 @@
|
||||||
<h1>All products</h1>
|
<h1>All products</h1>
|
||||||
<%= render partial: 'flash' %>
|
<%= render partial: 'flash' %>
|
||||||
|
<%= render 'products/index' %>
|
||||||
<div role="tabpanel">
|
|
||||||
<!-- Nav tabs -->
|
|
||||||
<ul class="nav nav-tabs" role="tablist">
|
|
||||||
<li role="presentation" class="active"><a href="#all" role="tab" data-toggle="tab">All</a></li>
|
|
||||||
<% @categories.each do |o, i| %>
|
|
||||||
<li role="presentation"><a href="#<%= o %>" aria-controls="<%= o %>" role="tab" data-toggle="tab"><%= o.titleize %></a></li>
|
|
||||||
<% end %>
|
|
||||||
</ul>
|
|
||||||
|
|
||||||
<!-- Tab panes -->
|
|
||||||
<div class="tab-content">
|
|
||||||
<br />
|
|
||||||
<div role="tabpanel" class="tab-pane active" id="all">
|
|
||||||
<%= render @products %>
|
|
||||||
</div>
|
|
||||||
<% @categories.each do |o, i| %>
|
|
||||||
<div role="tabpanel" class="tab-pane" id="<%= o %>">
|
|
||||||
<%= render @products.where(category: i) %>
|
|
||||||
</div>
|
|
||||||
<% end %>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
</div>
|
|
||||||
|
|
||||||
|
|
|
@ -6,7 +6,7 @@
|
||||||
<p><strong>Name:</strong> <%= user.name %></p>
|
<p><strong>Name:</strong> <%= user.name %></p>
|
||||||
<p><strong>Last name:</strong> <%= user.last_name %></p>
|
<p><strong>Last name:</strong> <%= user.last_name %></p>
|
||||||
<p><strong>Nickname:</strong> <%= user.nickname %></p>
|
<p><strong>Nickname:</strong> <%= user.nickname %></p>
|
||||||
<p><strong>Balance:</strong> <%= euro(user.balance) %></p>
|
<p><strong>Debt:</strong> <%= euro(user.debt) %></p>
|
||||||
</div>
|
</div>
|
||||||
<% if current_user.admin? %>
|
<% if current_user.admin? %>
|
||||||
<div class="footer">
|
<div class="footer">
|
||||||
|
|
|
@ -1,11 +1,2 @@
|
||||||
<% if current_user.dagschotel.present? %>
|
<h3>Choose new Dagschotel</h4>
|
||||||
<h3>Current Dagschotel:</h3>
|
<%= render 'products/index' %>
|
||||||
<div>
|
|
||||||
<%= render current_user.dagschotel %>
|
|
||||||
</div>
|
|
||||||
<% end %>
|
|
||||||
|
|
||||||
<h4>Choose new Dagschotel:</h4>
|
|
||||||
<% Product.all.each do |p| %>
|
|
||||||
<%= link_to image_tag(p.avatar), user_dagschotel_path(current_user, p) %>
|
|
||||||
<% end %>
|
|
||||||
|
|
|
@ -7,7 +7,7 @@
|
||||||
</h5>
|
</h5>
|
||||||
<h2><%= @user.nickname %> (<%= @user.full_name %>)</h2>
|
<h2><%= @user.nickname %> (<%= @user.full_name %>)</h2>
|
||||||
<%= button_to "PLACE ORDER!", new_user_order_path(@user), method: :get if current_user == @user %>
|
<%= button_to "PLACE ORDER!", new_user_order_path(@user), method: :get if current_user == @user %>
|
||||||
<div class="balance">BALANCE: <%= euro(@user.balance) %></div>
|
<div class="debt">DEBT: <%= euro(@user.debt) %></div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<% if @orders.any? %>
|
<% if @orders.any? %>
|
||||||
|
|
5
db/migrate/20150319141248_change_balance_to_debt.rb
Normal file
5
db/migrate/20150319141248_change_balance_to_debt.rb
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
class ChangeBalanceToDebt < ActiveRecord::Migration
|
||||||
|
def change
|
||||||
|
rename_column :users, :balance_cents, :debt_cents
|
||||||
|
end
|
||||||
|
end
|
|
@ -11,7 +11,7 @@
|
||||||
#
|
#
|
||||||
# It's strongly recommended that you check this file into your version control system.
|
# It's strongly recommended that you check this file into your version control system.
|
||||||
|
|
||||||
ActiveRecord::Schema.define(version: 20150319134138) do
|
ActiveRecord::Schema.define(version: 20150319141248) do
|
||||||
|
|
||||||
create_table "order_items", force: :cascade do |t|
|
create_table "order_items", force: :cascade do |t|
|
||||||
t.integer "order_id"
|
t.integer "order_id"
|
||||||
|
@ -46,7 +46,7 @@ ActiveRecord::Schema.define(version: 20150319134138) do
|
||||||
create_table "users", force: :cascade do |t|
|
create_table "users", force: :cascade do |t|
|
||||||
t.string "name"
|
t.string "name"
|
||||||
t.string "last_name"
|
t.string "last_name"
|
||||||
t.integer "balance_cents", default: 0, null: false
|
t.integer "debt_cents", default: 0, null: false
|
||||||
t.string "nickname"
|
t.string "nickname"
|
||||||
t.datetime "created_at"
|
t.datetime "created_at"
|
||||||
t.datetime "updated_at"
|
t.datetime "updated_at"
|
||||||
|
|
72
db/seeds.rb
72
db/seeds.rb
|
@ -5,4 +5,76 @@
|
||||||
#
|
#
|
||||||
# cities = City.create([{ name: 'Chicago' }, { name: 'Copenhagen' }])
|
# cities = City.create([{ name: 'Chicago' }, { name: 'Copenhagen' }])
|
||||||
# Mayor.create(name: 'Emanuel', city: cities.first)
|
# Mayor.create(name: 'Emanuel', city: cities.first)
|
||||||
|
DEFAULT_PASSWORD = "password"
|
||||||
|
|
||||||
|
products = [
|
||||||
|
{
|
||||||
|
name: 'Fanta',
|
||||||
|
price: 0.6,
|
||||||
|
category: 'beverages',
|
||||||
|
stock: 25,
|
||||||
|
avatar: File.new('public/seeds/products/fanta.jpg', 'r')
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: 'Club Mate',
|
||||||
|
price: 1.2,
|
||||||
|
category: 'beverages',
|
||||||
|
stock: 25,
|
||||||
|
avatar: File.new('public/seeds/products/club_mate.jpg', 'r')
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: 'Kinder Bueno',
|
||||||
|
price: 0.6,
|
||||||
|
category: 'food',
|
||||||
|
stock: 15,
|
||||||
|
avatar: File.new('public/seeds/products/bueno.jpg', 'r')
|
||||||
|
}
|
||||||
|
]
|
||||||
|
|
||||||
|
products.each do |attr|
|
||||||
|
Product.create name: attr[:name], price: attr[:price], category: attr[:category], stock: attr[:stock], avatar: attr[:avatar]
|
||||||
|
end
|
||||||
|
|
||||||
|
users = [
|
||||||
|
{
|
||||||
|
nickname: 'admin',
|
||||||
|
name: 'A.',
|
||||||
|
last_name: 'Admin',
|
||||||
|
avatar: File.new('public/seeds/users/admin.jpg', 'r'),
|
||||||
|
admin: true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
nickname: 'koelkast',
|
||||||
|
name: 'K.',
|
||||||
|
last_name: 'Koelkast',
|
||||||
|
avatar: File.new('public/seeds/users/admin.jpg', 'r'),
|
||||||
|
koelkast: true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
nickname: 'benji',
|
||||||
|
name: 'Benjamin',
|
||||||
|
last_name: 'Cousaert',
|
||||||
|
avatar: File.new('public/seeds/users/benji.jpg', 'r'),
|
||||||
|
dagschotel: Product.first
|
||||||
|
},
|
||||||
|
{
|
||||||
|
nickname: 'don',
|
||||||
|
name: 'Lorin',
|
||||||
|
last_name: 'Werthen',
|
||||||
|
avatar: File.new('public/seeds/users/don.jpg', 'r')
|
||||||
|
},
|
||||||
|
{
|
||||||
|
nickname: 'silox',
|
||||||
|
name: 'Tom',
|
||||||
|
last_name: 'Naessens',
|
||||||
|
avatar: File.new('public/seeds/users/silox.jpg', 'r')
|
||||||
|
}
|
||||||
|
]
|
||||||
|
|
||||||
|
users.each do |attr|
|
||||||
|
User.create nickname: attr[:nickname], name: attr[:name], last_name: attr[:last_name], avatar: attr[:avatar], dagschotel: attr[:dagschotel], password: DEFAULT_PASSWORD, password_confirmation: DEFAULT_PASSWORD, admin: attr[:admin] || false, koelkast: attr[:koelkast] || false
|
||||||
|
end
|
||||||
|
|
||||||
|
50.times do |i|
|
||||||
|
User.create nickname: "TestUser#{i}", name: "Test", last_name: "User", avatar: users[0][:avatar], password: DEFAULT_PASSWORD, password_confirmation: DEFAULT_PASSWORD
|
||||||
|
end
|
||||||
|
|
|
@ -1,79 +0,0 @@
|
||||||
namespace :db do
|
|
||||||
desc "Fill the database with some sample data."
|
|
||||||
task generatedata: :environment do
|
|
||||||
DEFAULT_PASSWORD = "password"
|
|
||||||
|
|
||||||
products = [
|
|
||||||
{
|
|
||||||
name: 'Fanta',
|
|
||||||
price: 0.6,
|
|
||||||
category: 'beverages',
|
|
||||||
stock: 25,
|
|
||||||
avatar: File.new('public/seeds/products/fanta.jpg', 'r')
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: 'Club Mate',
|
|
||||||
price: 1.2,
|
|
||||||
category: 'beverages',
|
|
||||||
stock: 25,
|
|
||||||
avatar: File.new('public/seeds/products/club_mate.jpg', 'r')
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: 'Kinder Bueno',
|
|
||||||
price: 0.6,
|
|
||||||
category: 'food',
|
|
||||||
stock: 15,
|
|
||||||
avatar: File.new('public/seeds/products/bueno.jpg', 'r')
|
|
||||||
}
|
|
||||||
]
|
|
||||||
|
|
||||||
products.each do |attr|
|
|
||||||
Product.create name: attr[:name], price: attr[:price], category: attr[:category], stock: attr[:stock], avatar: attr[:avatar]
|
|
||||||
end
|
|
||||||
|
|
||||||
users = [
|
|
||||||
{
|
|
||||||
nickname: 'admin',
|
|
||||||
name: 'A.',
|
|
||||||
last_name: 'Admin',
|
|
||||||
avatar: File.new('public/seeds/users/admin.jpg', 'r'),
|
|
||||||
admin: true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
nickname: 'koelkast',
|
|
||||||
name: 'K.',
|
|
||||||
last_name: 'Koelkast',
|
|
||||||
avatar: File.new('public/seeds/users/admin.jpg', 'r'),
|
|
||||||
koelkast: true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
nickname: 'benji',
|
|
||||||
name: 'Benjamin',
|
|
||||||
last_name: 'Cousaert',
|
|
||||||
avatar: File.new('public/seeds/users/benji.jpg', 'r'),
|
|
||||||
dagschotel: Product.first
|
|
||||||
},
|
|
||||||
{
|
|
||||||
nickname: 'don',
|
|
||||||
name: 'Lorin',
|
|
||||||
last_name: 'Werthen',
|
|
||||||
avatar: File.new('public/seeds/users/don.jpg', 'r')
|
|
||||||
},
|
|
||||||
{
|
|
||||||
nickname: 'silox',
|
|
||||||
name: 'Tom',
|
|
||||||
last_name: 'Naessens',
|
|
||||||
avatar: File.new('public/seeds/users/silox.jpg', 'r')
|
|
||||||
}
|
|
||||||
]
|
|
||||||
|
|
||||||
users.each do |attr|
|
|
||||||
User.create nickname: attr[:nickname], name: attr[:name], last_name: attr[:last_name], avatar: attr[:avatar], dagschotel: attr[:dagschotel], password: DEFAULT_PASSWORD, password_confirmation: DEFAULT_PASSWORD, admin: attr[:admin] || false, koelkast: attr[:koelkast] || false
|
|
||||||
end
|
|
||||||
|
|
||||||
50.times do |i|
|
|
||||||
User.create nickname: "TestUser#{i}", name: "Test", last_name: "User", avatar: users[0][:avatar], password: DEFAULT_PASSWORD, password_confirmation: DEFAULT_PASSWORD
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
end
|
|
6
test/fixtures/order_items.yml
vendored
6
test/fixtures/order_items.yml
vendored
|
@ -1,11 +1,11 @@
|
||||||
# == Schema Information
|
# == Schema Information
|
||||||
#
|
#
|
||||||
# Table name: order_products
|
# Table name: order_items
|
||||||
#
|
#
|
||||||
# id :integer not null, primary key
|
# id :integer not null, primary key
|
||||||
# order_id :integer
|
# order_id :integer
|
||||||
# product_id :integer
|
# product_id :integer not null
|
||||||
# count :integer default(1)
|
# count :integer default("0")
|
||||||
#
|
#
|
||||||
|
|
||||||
# Read about fixtures at http://api.rubyonrails.org/classes/ActiveRecord/FixtureSet.html
|
# Read about fixtures at http://api.rubyonrails.org/classes/ActiveRecord/FixtureSet.html
|
||||||
|
|
11
test/fixtures/orders.yml
vendored
11
test/fixtures/orders.yml
vendored
|
@ -2,11 +2,12 @@
|
||||||
#
|
#
|
||||||
# Table name: orders
|
# Table name: orders
|
||||||
#
|
#
|
||||||
# id :integer not null, primary key
|
# id :integer not null, primary key
|
||||||
# user_id :integer
|
# user_id :integer
|
||||||
# cost :integer
|
# price_cents :integer
|
||||||
# created_at :datetime not null
|
# created_at :datetime not null
|
||||||
# updated_at :datetime not null
|
# updated_at :datetime not null
|
||||||
|
# cancelled :boolean default("f")
|
||||||
#
|
#
|
||||||
|
|
||||||
# Read about fixtures at http://api.rubyonrails.org/classes/ActiveRecord/FixtureSet.html
|
# Read about fixtures at http://api.rubyonrails.org/classes/ActiveRecord/FixtureSet.html
|
||||||
|
|
16
test/fixtures/products.yml
vendored
16
test/fixtures/products.yml
vendored
|
@ -3,16 +3,16 @@
|
||||||
# Table name: products
|
# Table name: products
|
||||||
#
|
#
|
||||||
# id :integer not null, primary key
|
# id :integer not null, primary key
|
||||||
# name :string(255) not null
|
# name :string not null
|
||||||
# price_cents :integer default(0), not null
|
# price_cents :integer default("0"), not null
|
||||||
# category :integer default(0)
|
|
||||||
# stock :integer default(0), not null
|
|
||||||
# avatar_file_name :string(255)
|
|
||||||
# avatar_content_type :string(255)
|
|
||||||
# avatar_file_size :integer
|
|
||||||
# avatar_updated_at :datetime
|
|
||||||
# created_at :datetime
|
# created_at :datetime
|
||||||
# updated_at :datetime
|
# updated_at :datetime
|
||||||
|
# avatar_file_name :string
|
||||||
|
# avatar_content_type :string
|
||||||
|
# avatar_file_size :integer
|
||||||
|
# avatar_updated_at :datetime
|
||||||
|
# category :integer default("0")
|
||||||
|
# stock :integer default("0"), not null
|
||||||
#
|
#
|
||||||
|
|
||||||
# Read about fixtures at http://api.rubyonrails.org/classes/ActiveRecord/FixtureSet.html
|
# Read about fixtures at http://api.rubyonrails.org/classes/ActiveRecord/FixtureSet.html
|
||||||
|
|
34
test/fixtures/users.yml
vendored
34
test/fixtures/users.yml
vendored
|
@ -3,27 +3,29 @@
|
||||||
# Table name: users
|
# Table name: users
|
||||||
#
|
#
|
||||||
# id :integer not null, primary key
|
# id :integer not null, primary key
|
||||||
# name :string(255)
|
# name :string
|
||||||
# last_name :string(255)
|
# last_name :string
|
||||||
# balance_cents :integer default(0), not null
|
# debt_cents :integer default("0"), not null
|
||||||
# nickname :string(255)
|
# nickname :string
|
||||||
# admin :boolean
|
|
||||||
# koelkast :boolean default(FALSE)
|
|
||||||
# dagschotel_id :integer
|
|
||||||
# orders_count :integer default(0)
|
|
||||||
# avatar_file_name :string(255)
|
|
||||||
# avatar_content_type :string(255)
|
|
||||||
# avatar_file_size :integer
|
|
||||||
# avatar_updated_at :datetime
|
|
||||||
# created_at :datetime
|
# created_at :datetime
|
||||||
# updated_at :datetime
|
# updated_at :datetime
|
||||||
# encrypted_password :string(255) default(""), not null
|
# encrypted_password :string default(""), not null
|
||||||
# remember_created_at :datetime
|
# remember_created_at :datetime
|
||||||
# sign_in_count :integer default(0), not null
|
# sign_in_count :integer default("0"), not null
|
||||||
# current_sign_in_at :datetime
|
# current_sign_in_at :datetime
|
||||||
# last_sign_in_at :datetime
|
# last_sign_in_at :datetime
|
||||||
# current_sign_in_ip :string(255)
|
# current_sign_in_ip :string
|
||||||
# last_sign_in_ip :string(255)
|
# last_sign_in_ip :string
|
||||||
|
# admin :boolean
|
||||||
|
# dagschotel_id :integer
|
||||||
|
# avatar_file_name :string
|
||||||
|
# avatar_content_type :string
|
||||||
|
# avatar_file_size :integer
|
||||||
|
# avatar_updated_at :datetime
|
||||||
|
# orders_count :integer default("0")
|
||||||
|
# koelkast :boolean default("f")
|
||||||
|
# provider :string
|
||||||
|
# uid :string
|
||||||
#
|
#
|
||||||
|
|
||||||
# Read about fixtures at http://api.rubyonrails.org/classes/ActiveRecord/FixtureSet.html
|
# Read about fixtures at http://api.rubyonrails.org/classes/ActiveRecord/FixtureSet.html
|
||||||
|
|
|
@ -15,14 +15,14 @@ class OrderIntegrationTest < ActionDispatch::IntegrationTest
|
||||||
|
|
||||||
assert page.has_content? 'Order for benji'
|
assert page.has_content? 'Order for benji'
|
||||||
|
|
||||||
assert_difference "User.find(users(:benji).id).balance_cents", -240 do
|
assert_difference "User.find(users(:benji).id).debt_cents", 240 do
|
||||||
fill_in 'order_order_items_attributes_2_count', with: 2
|
fill_in 'order_order_items_attributes_2_count', with: 2
|
||||||
click_button "Order!"
|
click_button "Order!"
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
test 'quickpay' do
|
test 'quickpay' do
|
||||||
assert_difference "User.find(users(:benji).id).balance_cents", -User.find(users(:benji).id).dagschotel.price_cents do
|
assert_difference "User.find(users(:benji).id).debt_cents", User.find(users(:benji).id).dagschotel.price_cents do
|
||||||
visit user_quickpay_path(users(:benji))
|
visit user_quickpay_path(users(:benji))
|
||||||
assert page.has_content? 'Success!'
|
assert page.has_content? 'Success!'
|
||||||
end
|
end
|
||||||
|
@ -31,7 +31,7 @@ class OrderIntegrationTest < ActionDispatch::IntegrationTest
|
||||||
test 'cancelling quickpay' do
|
test 'cancelling quickpay' do
|
||||||
visit user_quickpay_path(users(:benji))
|
visit user_quickpay_path(users(:benji))
|
||||||
|
|
||||||
assert_difference "User.find(users(:benji).id).balance_cents", User.find(users(:benji).id).dagschotel.price_cents do
|
assert_difference "User.find(users(:benji).id).debt_cents", -User.find(users(:benji).id).dagschotel.price_cents do
|
||||||
click_link 'Undo'
|
click_link 'Undo'
|
||||||
assert page.has_content? 'Success!'
|
assert page.has_content? 'Success!'
|
||||||
end
|
end
|
||||||
|
|
|
@ -10,7 +10,7 @@ class StockTest < ActiveSupport::TestCase
|
||||||
end
|
end
|
||||||
|
|
||||||
assert_difference "products(:fanta).stock", +2 do
|
assert_difference "products(:fanta).stock", +2 do
|
||||||
order.destroy
|
order.cancel
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -2,11 +2,12 @@
|
||||||
#
|
#
|
||||||
# Table name: orders
|
# Table name: orders
|
||||||
#
|
#
|
||||||
# id :integer not null, primary key
|
# id :integer not null, primary key
|
||||||
# user_id :integer
|
# user_id :integer
|
||||||
# cost :integer
|
# price_cents :integer
|
||||||
# created_at :datetime not null
|
# created_at :datetime not null
|
||||||
# updated_at :datetime not null
|
# updated_at :datetime not null
|
||||||
|
# cancelled :boolean default("f")
|
||||||
#
|
#
|
||||||
|
|
||||||
require 'test_helper'
|
require 'test_helper'
|
||||||
|
@ -19,7 +20,7 @@ class OrderTest < ActiveSupport::TestCase
|
||||||
end
|
end
|
||||||
|
|
||||||
test "order total price is correct" do
|
test "order total price is correct" do
|
||||||
assert_equal @order.price, 300
|
assert_equal @order.price, 3.00
|
||||||
end
|
end
|
||||||
|
|
||||||
test "to_sentence is correct" do
|
test "to_sentence is correct" do
|
||||||
|
|
|
@ -3,16 +3,16 @@
|
||||||
# Table name: products
|
# Table name: products
|
||||||
#
|
#
|
||||||
# id :integer not null, primary key
|
# id :integer not null, primary key
|
||||||
# name :string(255) not null
|
# name :string not null
|
||||||
# price_cents :integer default(0), not null
|
# price_cents :integer default("0"), not null
|
||||||
# category :integer default(0)
|
|
||||||
# stock :integer default(0), not null
|
|
||||||
# avatar_file_name :string(255)
|
|
||||||
# avatar_content_type :string(255)
|
|
||||||
# avatar_file_size :integer
|
|
||||||
# avatar_updated_at :datetime
|
|
||||||
# created_at :datetime
|
# created_at :datetime
|
||||||
# updated_at :datetime
|
# updated_at :datetime
|
||||||
|
# avatar_file_name :string
|
||||||
|
# avatar_content_type :string
|
||||||
|
# avatar_file_size :integer
|
||||||
|
# avatar_updated_at :datetime
|
||||||
|
# category :integer default("0")
|
||||||
|
# stock :integer default("0"), not null
|
||||||
#
|
#
|
||||||
|
|
||||||
require 'test_helper'
|
require 'test_helper'
|
||||||
|
|
|
@ -3,27 +3,29 @@
|
||||||
# Table name: users
|
# Table name: users
|
||||||
#
|
#
|
||||||
# id :integer not null, primary key
|
# id :integer not null, primary key
|
||||||
# name :string(255)
|
# name :string
|
||||||
# last_name :string(255)
|
# last_name :string
|
||||||
# balance_cents :integer default(0), not null
|
# debt_cents :integer default("0"), not null
|
||||||
# nickname :string(255)
|
# nickname :string
|
||||||
# admin :boolean
|
|
||||||
# koelkast :boolean default(FALSE)
|
|
||||||
# dagschotel_id :integer
|
|
||||||
# orders_count :integer default(0)
|
|
||||||
# avatar_file_name :string(255)
|
|
||||||
# avatar_content_type :string(255)
|
|
||||||
# avatar_file_size :integer
|
|
||||||
# avatar_updated_at :datetime
|
|
||||||
# created_at :datetime
|
# created_at :datetime
|
||||||
# updated_at :datetime
|
# updated_at :datetime
|
||||||
# encrypted_password :string(255) default(""), not null
|
# encrypted_password :string default(""), not null
|
||||||
# remember_created_at :datetime
|
# remember_created_at :datetime
|
||||||
# sign_in_count :integer default(0), not null
|
# sign_in_count :integer default("0"), not null
|
||||||
# current_sign_in_at :datetime
|
# current_sign_in_at :datetime
|
||||||
# last_sign_in_at :datetime
|
# last_sign_in_at :datetime
|
||||||
# current_sign_in_ip :string(255)
|
# current_sign_in_ip :string
|
||||||
# last_sign_in_ip :string(255)
|
# last_sign_in_ip :string
|
||||||
|
# admin :boolean
|
||||||
|
# dagschotel_id :integer
|
||||||
|
# avatar_file_name :string
|
||||||
|
# avatar_content_type :string
|
||||||
|
# avatar_file_size :integer
|
||||||
|
# avatar_updated_at :datetime
|
||||||
|
# orders_count :integer default("0")
|
||||||
|
# koelkast :boolean default("f")
|
||||||
|
# provider :string
|
||||||
|
# uid :string
|
||||||
#
|
#
|
||||||
|
|
||||||
require 'test_helper'
|
require 'test_helper'
|
||||||
|
@ -37,14 +39,14 @@ class UserTest < ActiveSupport::TestCase
|
||||||
assert_equal @user.full_name, "Benjamin Cousaert"
|
assert_equal @user.full_name, "Benjamin Cousaert"
|
||||||
end
|
end
|
||||||
|
|
||||||
test "balance behaves correctly" do
|
test "debt behaves correctly" do
|
||||||
assert_equal @user.balance_cents, 0
|
assert_equal @user.debt_cents, 0
|
||||||
assert_equal @user.balance, 0
|
assert_equal @user.debt, 0
|
||||||
|
|
||||||
@user.balance = 1.3
|
@user.debt = 1.3
|
||||||
|
|
||||||
assert_equal @user.balance, 1.3
|
assert_equal @user.debt, 1.3
|
||||||
assert_equal @user.balance_cents, 130
|
assert_equal @user.debt_cents, 130
|
||||||
end
|
end
|
||||||
|
|
||||||
test "to_param" do
|
test "to_param" do
|
||||||
|
|
Loading…
Reference in a new issue