end of day commit

This commit is contained in:
2013-01-10 01:00:59 +01:00
parent b85bbf1aee
commit 87046c872c
23 changed files with 642 additions and 28 deletions
+1
View File
@@ -13,6 +13,7 @@ guard 'rspec' do
watch(%r{^spec/support/(.+)\.rb$}) { "spec" } watch(%r{^spec/support/(.+)\.rb$}) { "spec" }
watch('config/routes.rb') { "spec/routing" } watch('config/routes.rb') { "spec/routing" }
watch('app/controllers/application_controller.rb') { "spec/controllers" } watch('app/controllers/application_controller.rb') { "spec/controllers" }
watch(%r{^app/views/supplier/([^.]+)\.}) { "spec/controllers/supplier/#{m[1]}"}
# Capybara features specs # Capybara features specs
watch(%r{^app/views/(.+)/.*\.(erb|haml)$}) { |m| "spec/features/#{m[1]}_spec.rb" } watch(%r{^app/views/(.+)/.*\.(erb|haml)$}) { |m| "spec/features/#{m[1]}_spec.rb" }
@@ -98,7 +98,7 @@ root.Qsupplier=
) )
load_active_lists: () -> load_active_lists: () ->
$.get('/supplier/active_lists.json?section_id='+($('#current_section_selector').val() || ''), (res) => $.get('/supplier/active_lists.json?section_id='+($('#section_selector').val() || ''), (res) =>
body = $('#active-lists-table tbody') body = $('#active-lists-table tbody')
body.find('tr').remove() body.find('tr').remove()
foot = $('#active-lists-table tfoot') foot = $('#active-lists-table tfoot')
@@ -113,13 +113,11 @@ root.Qsupplier=
) )
load_active_orders: () -> load_active_orders: () ->
$.get('/supplier/active_orders.json?section_id='+($('#current_section_selector').val() || ''), (res) => $.get('/supplier/active_orders.json?section_id='+($('#section_selector').val() || ''), (res) =>
body = $('#active-orders-table tbody') body = $('#active-orders-table tbody')
body.html('') body.html('')
foot = $('#active-orders-table tfoot') foot = $('#active-orders-table tfoot')
if(!res.orders && !res.orders.length) return unless res.orders
alert('No orders in list')
return
for order in res.orders for order in res.orders
ord = new Order(order) ord = new Order(order)
body.append @mustache('#active-order-template', ord) body.append @mustache('#active-order-template', ord)
+14 -2
View File
@@ -67,7 +67,13 @@ var $translations = {
body: '%{email} wants to join the table', body: '%{email} wants to join the table',
reject: 'Reject', reject: 'Reject',
approve: 'Approve', approve: 'Approve',
waiting_for_confirmation: 'Waiting for approval of the person on this table...' requestor: {
title: 'This table is occupied',
go_back: 'Back',
show_the_products: 'Show the menu',
join_this_table: 'Join this table',
waiting_for_confirmation: 'Waiting for approval of the person on this table...'
}
}, },
move_table: { move_table: {
cannot_move_to_occupied_table: 'You cannot move to an occupied table', cannot_move_to_occupied_table: 'You cannot move to an occupied table',
@@ -102,7 +108,13 @@ var $translations = {
body: '%{email} wil ook op jouw lijst bestellen', body: '%{email} wil ook op jouw lijst bestellen',
reject: 'Afwijzen', reject: 'Afwijzen',
approve: 'Toestaan', approve: 'Toestaan',
waiting_for_confirmation: 'Wachten op toestemming van huidige gebruikers om hier te kunnen bestellen...' requestor: {
title: 'Deze tafel is bezet',
go_back: 'Terug',
show_the_products: 'Toon het menu',
join_this_table: 'Ook bestellen aan deze tafel',
waiting_for_confirmation: 'Wachten op toestemming van huidige gebruikers om hier te kunnen bestellen...'
}
}, },
move_table: { move_table: {
cannot_move_to_occupied_table: 'Je kan niet verhuizen naar een tafel die reeds gebruikt wordt.', cannot_move_to_occupied_table: 'Je kan niet verhuizen naar een tafel die reeds gebruikt wordt.',
+1 -1
View File
@@ -386,7 +386,7 @@ class Quser
cont = $('#join-occupied-table-progress-container') cont = $('#join-occupied-table-progress-container')
cont.html('') cont.html('')
cont.append $($('<img />').attr('src', "#{$asset_path}spinner.gif")) cont.append $($('<img />').attr('src', "#{$asset_path}spinner.gif"))
cont.append $($('<p>').html(t('join_request.waiting_for_confirmation'))) cont.append $($('<p data-t="join_request.requestor.waiting_for_confirmation">').html(t('join_request.requestor.waiting_for_confirmation')))
@ensure_token => @ensure_token =>
$.post(data_host + '/user/join_occupied_table', $.extend({table_id: table_id}, @authentication_object)) $.post(data_host + '/user/join_occupied_table', $.extend({table_id: table_id}, @authentication_object))
#setInterval('Quser.check_if_can_join_occupied_table("'+table_id+'")', 7500) #setInterval('Quser.check_if_can_join_occupied_table("'+table_id+'")', 7500)
@@ -0,0 +1,6 @@
#qr-list
margin: 0
list-style: none
li
list-style: none
margin-bottom: 8px
+1 -1
View File
@@ -14,7 +14,7 @@ class DashboardController < ApplicationController
def demo_both def demo_both
render layout: 'twitter-bootstrap' render layout: 'demo-both'
end end
# Testing action # Testing action
+25 -4
View File
@@ -22,7 +22,7 @@ module Suppliers
# GET /lists/1 # GET /lists/1
# GET /lists/1.json # GET /lists/1.json
def show def show
@list = List.find_by_supplier_id_and_id(current_supplier.id, params[:id]) @list = List.find_by_supplier_id_and_id!(current_supplier.id, params[:id])
respond_to do |format| respond_to do |format|
format.html {} format.html {}
format.json do format.json do
@@ -36,6 +36,7 @@ module Suppliers
def new def new
@list = List.new @list = List.new
@list.section_id = params[:section_id].presence @list.section_id = params[:section_id].presence
@tables = current_supplier.active_tables
respond_to do |format| respond_to do |format|
format.html # new.html.erb format.html # new.html.erb
@@ -43,16 +44,36 @@ module Suppliers
end end
end end
# POST /lists
# POST /lists.json
def create
@list = List.new(params[:list])
@list.supplier = current_supplier
respond_to do |format|
if @list.save
format.html { redirect_to [:suppliers, @list.section || @list], notice: t('action.create.successfull', model: List.model_name.human) }
format.json { render json: @list, status: :created, location: @list }
else
format.html do
@tables = current_supplier.active_tables
render action: "new"
end
format.json { render json: @list.errors, status: :unprocessable_entity }
end
end
end
# GET /lists/1/edit # GET /lists/1/edit
def edit def edit
@list = List.find_by_supplier_id_and_id(current_supplier.id, params[:id]) @list = List.find_by_supplier_id_and_id!(current_supplier.id, params[:id])
@tables = current_supplier.active_tables @tables = current_supplier.active_tables
end end
# PUT /lists/1 # PUT /lists/1
# PUT /lists/1.json # PUT /lists/1.json
def update def update
@list = List.find_by_supplier_id_and_id(current_supplier.id, params[:id]) @list = List.find_by_supplier_id_and_id!(current_supplier.id, params[:id])
respond_to do |format| respond_to do |format|
if @list.update_attributes(params[:list]) if @list.update_attributes(params[:list])
@@ -71,7 +92,7 @@ module Suppliers
# DELETE /lists/1 # DELETE /lists/1
# DELETE /lists/1.json # DELETE /lists/1.json
def destroy def destroy
@list = List.find_by_supplier_id_and_id(current_supplier.id, params[:id]) @list = List.find_by_supplier_id_and_id!(current_supplier.id, params[:id])
@list.destroy @list.destroy
respond_to do |format| respond_to do |format|
@@ -15,7 +15,7 @@ module Suppliers
# GET /products/1 # GET /products/1
# GET /products/1.json # GET /products/1.json
def show def show
@product = ProductDecorator.find(params[:id]) @product = ProductDecorator.find_by_supplier_id_and_id!(current_supplier.id, params[:id])
respond_to do |format| respond_to do |format|
format.html # show.html.erb format.html # show.html.erb
@@ -27,6 +27,7 @@ module Suppliers
# GET /products/new.json # GET /products/new.json
def new def new
@product = Product.new @product = Product.new
@product.add_product_category ProductCategory.find_by_supplier_id_and_id!(current_supplier.id, params[:product_category_id]) if params[:product_category_id].present?
respond_to do |format| respond_to do |format|
format.html # new.html.erb format.html # new.html.erb
@@ -59,7 +60,7 @@ module Suppliers
# PUT /products/1 # PUT /products/1
# PUT /products/1.json # PUT /products/1.json
def update def update
@product = Product.find(params[:id]) @product = Product.find_by_supplier_id_and_id!(current_supplier.id, params[:id])
respond_to do |format| respond_to do |format|
if @product.update_attributes(params[:product]) if @product.update_attributes(params[:product])
@@ -75,7 +76,7 @@ module Suppliers
# DELETE /products/1 # DELETE /products/1
# DELETE /products/1.json # DELETE /products/1.json
def destroy def destroy
@product = Product.find(params[:id]) @product = Product.find_by_supplier_id_and_id!(current_supplier.id, params[:id])
@product.destroy @product.destroy
respond_to do |format| respond_to do |format|
@@ -14,7 +14,7 @@ module Suppliers
# GET /tables/1 # GET /tables/1
# GET /tables/1.json # GET /tables/1.json
def show def show
@table = Table.find(params[:id]) @table= Table.find_by_supplier_id_and_id!(current_supplier.id, params[:id])
respond_to do |format| respond_to do |format|
format.html # show.html.erb format.html # show.html.erb
@@ -59,7 +59,7 @@ module Suppliers
# PUT /tables/1 # PUT /tables/1
# PUT /tables/1.json # PUT /tables/1.json
def update def update
@table = Table.find(params[:id]) @table= Table.find_by_supplier_id_and_id!(current_supplier.id, params[:id])
respond_to do |format| respond_to do |format|
if @table.update_attributes(params[:table]) if @table.update_attributes(params[:table])
@@ -77,7 +77,7 @@ module Suppliers
# DELETE /tables/1 # DELETE /tables/1
# DELETE /tables/1.json # DELETE /tables/1.json
def destroy def destroy
@table = Table.find(params[:id]) @table= Table.find_by_supplier_id_and_id!(current_supplier.id, params[:id])
@table.destroy @table.destroy
respond_to do |format| respond_to do |format|
+11
View File
@@ -44,6 +44,12 @@ class List
} }
}|, reduce_function: '_sum' }|, reduce_function: '_sum'
view :active_for_supplier_and_section_view, type: :custom, map_function: %[function(doc){
if(doc.ruby_class == 'List' && doc.state == 'active'){
emit([doc.supplier_id, doc.section_id], 1);
}
}], reduce_function: '_sum'
view :for_user_view, type: :custom, map_function: %|function(doc){ view :for_user_view, type: :custom, map_function: %|function(doc){
if(doc.ruby_class == 'List' && doc.user_ids && doc.user_ids.length){ if(doc.ruby_class == 'List' && doc.user_ids && doc.user_ids.length){
doc.user_ids.forEach(function(uid){ doc.user_ids.forEach(function(uid){
@@ -77,6 +83,11 @@ class List
database.view(active_by_section_id_view(key: section_id, reduce: false, include_docs: true)) database.view(active_by_section_id_view(key: section_id, reduce: false, include_docs: true))
end end
# Return all currently active orders for a given section
def self.active_for_supplier_and_section(supplier, section_id, options = {})
database.view(active_for_supplier_and_section_view(key: [supplier.id, section_id], reduce: false, include_docs: true))
end
def self.active_for_table(table_id, options = {}) def self.active_for_table(table_id, options = {})
database.view(active_by_table_id_view(options.reverse_merge(key: table_id, reduce: false, include_docs: true))) database.view(active_by_table_id_view(options.reverse_merge(key: table_id, reduce: false, include_docs: true)))
end end
+1
View File
@@ -15,6 +15,7 @@ class Product
validates :name, presence: true validates :name, presence: true
validates :supplier_id, presence: true validates :supplier_id, presence: true
validates :price, presence: true, numericality: true validates :price, presence: true, numericality: true
view :by_supplier_id_and_id, key: [:supplier_id, :_id]
after_save :persist_product_category_ids after_save :persist_product_category_ids
+1 -1
View File
@@ -50,7 +50,7 @@ class Supplier
def active_lists(options = {}) def active_lists(options = {})
return @active_lists if @active_lists.present? return @active_lists if @active_lists.present?
@active_lists = List.active_for_supplier(id) @active_lists = options[:section_id].present? ? List.active_for_supplier_and_section(self, options[:section_id]) : List.active_for_supplier(id)
@active_lists.include_relations(table: :section, orders: {product_orders: :product}) @active_lists.include_relations(table: :section, orders: {product_orders: :product})
@active_lists @active_lists
end end
+1
View File
@@ -14,6 +14,7 @@ class Table
validates :supplier_id, presence: true validates :supplier_id, presence: true
#validates :list_id, presence: true #validates :list_id, presence: true
validates :number, numericality: {greater_than: 0} validates :number, numericality: {greater_than: 0}
view :by_supplier_id_and_id, key: [:supplier_id, :_id]
#validates_uniqueness_of :number #validates_uniqueness_of :number
#view :by_number, key: :number # For uniqueness validation #view :by_number, key: :number # For uniqueness validation
+24
View File
@@ -0,0 +1,24 @@
doctype html
html lang="en"
head
meta charset="utf-8"
meta http-equiv="X-UA-Compatible" content="IE=Edge,chrome=1"
meta name="viewport" content="width=device-width, initial-scale=1.0"
title= content_for?(:title) ? yield(:title) : application_title
= csrf_meta_tags
/! Le HTML5 shim, for IE6-8 support of HTML elements
/[if lt IE 9]
= javascript_include_tag "http://html5shim.googlecode.com/svn/trunk/html5.js"
= stylesheet_link_tag "application", :media => "all"
link href="/images/apple-touch-icon-144x144.png" rel="apple-touch-icon-precomposed" sizes="144x144"
link href="/images/apple-touch-icon-114x114.png" rel="apple-touch-icon-precomposed" sizes="114x114"
link href="/images/apple-touch-icon-72x72.png" rel="apple-touch-icon-precomposed" sizes="72x72"
link href="/images/apple-touch-icon.png" rel="apple-touch-icon-precomposed"
link href="/favicon.ico" rel="shortcut icon"
body class=action_name
.container
.content
.row
.span12
= yield
+1 -1
View File
@@ -35,4 +35,4 @@
.form-actions .form-actions
= f.submit nil, class: 'btn btn-primary' = f.submit nil, class: 'btn btn-primary'
' '
= link_to t("helpers.links.cancel"), suppliers_path, class: 'btn' = link_to t("helpers.links.cancel"), supplier_root_path, class: 'btn'
+2
View File
@@ -7,6 +7,8 @@
javascript: javascript:
$(function(){ $(function(){
$('#section_selector').change(function(){ $('#section_selector').change(function(){
Qsupplier.load_active_orders();
Qsupplier.load_active_lists();
var el = $(this); var el = $(this);
var linker = $(this).siblings('a'); var linker = $(this).siblings('a');
if(el.val()){ if(el.val()){
+1 -1
View File
@@ -11,4 +11,4 @@
.form-actions .form-actions
= f.submit nil, class: 'btn btn-primary' = f.submit nil, class: 'btn btn-primary'
' '
= link_to t("helpers.links.cancel"), tables_path, class: 'btn' = link_to t("helpers.links.cancel"), suppliers_tables_path, class: 'btn'
+4 -4
View File
@@ -1,10 +1,10 @@
.page-header .page-header
h4= t('user.join_occupied_table.title') h4 data-t="join_request.requestor.title" = t('user.join_occupied_table.title')
.form-actions .form-actions
= link_to t('user.join_occupied_table.back'), user_root_path, class: :btn = link_to t('user.join_occupied_table.back'), user_root_path, class: :btn, data: {t: 'join_request.requestor.go_back'}
' '
button.btn.btn-primary onclick="Quser.show_table_products()" = t('user.join_occupied_table.show_the_products') button.btn.btn-primary onclick="Quser.show_table_products()" data-t='join_request.requestor.show_the_products'= t('user.join_occupied_table.show_the_products')
' '
button.btn.btn-warning{onClick="Quser.join_occupied_table()"} = t('user.join_occupied_table.join_this_table') button.btn.btn-warning onClick="Quser.join_occupied_table()" data-t='join_request.requestor.join_this_table'= t('user.join_occupied_table.join_this_table')
#join-occupied-table-progress-container #join-occupied-table-progress-container
- onload_javascript 'Quser.watch_events()' - onload_javascript 'Quser.watch_events()'
+2 -2
View File
@@ -1,4 +1,4 @@
#!/usr/bin/env bash #!/usr/bin/env bash
rm -rf public/assets; rm -rf public/assets;
QWAITER_MOBILE_EXPORT=yes RAILS_ENV=production rake assets:precompile; QWAITER_MOBILE_EXPORT=yes RAILS_ENV=production bundle exec rake assets:precompile;
QWAITER_MOBILE_EXPORT=yes RAILS_ENV=production rails runner script/build_mobile_app.rb QWAITER_MOBILE_EXPORT=yes RAILS_ENV=production bundle exec rails runner script/build_mobile_app.rb
+16
View File
@@ -0,0 +1,16 @@
# encoding: UTF-8
require 'spec_helper'
describe SupplierController do
before :each do
@supplier = Supplier.find_by_email('supplier@qwaiter.com') || Supplier.create(name: 'Supplier', email: 'supplier@qwaiter.com', password: 'secret')
sign_in @supplier
end
describe "GET settings" do
it 'displays the settings page' do
get :edit
end
end
end
@@ -0,0 +1,174 @@
# encoding: UTF-8
require 'spec_helper'
describe Suppliers::ListsController do
before :each do
@supplier = Supplier.find_by_email('supplier@qwaiter.com') || Supplier.create(name: 'Supplier', email: 'supplier@qwaiter.com', password: 'secret')
sign_in @supplier
end
describe "GET #index" do
it "populates an array of lists" do
list = create :list, supplier: @supplier
get :index
assigns(:lists).should eq([list])
end
it "does not include lists from another supplier" do
list1 = create :list, supplier: @supplier
list2 = create :list
get :index
assigns(:lists).should eq([list1])
end
it "should render without errors when no objects are present" do
get :index
expect{ render_template :index }.not_to raise_error
end
it "renders the :index view" do
get :index
response.should render_template :index
end
end
describe "GET #show" do
it "assigns the requested list to @list" do
list = create :list, supplier: @supplier
get :show, id: list
assigns(:list).should eq(list)
end
it "should not display a list of another supplier" do
list = create :list
get :show, id: list
response.status.should == 404
end
it "renders the #show view" do
list = create :list, supplier: @supplier
get :show, id: list
response.should render_template :show
end
end
describe "GET #new" do
it "assigns a new list to @list" do
get :new
assigns(:list).should be_a List
end
it "renders the #show view" do
get :new
response.should render_template :new
end
end
describe "POST #create" do
context "with valid attributes" do
it "creates a new list" do
expect{
post :create, list: attributes_for(:list, supplier: @supplier)
}.to change(List, :count).by(1)
end
it "redirects to the new list" do
post :create, list: attributes_for(:list, supplier: @supplier)
response.should redirect_to [:suppliers, List.last]
end
it "should not be possible to create a list for another supplier" do
supplier2 = create :supplier
post :create, list: attributes_for(:list, price: '6.66', supplier: supplier2)
List.find_by_price(6.66).supplier_id.should == @supplier.id
end
end
context "with invalid attributes" do
it "does not save the new list" do
expect{
post :create, list: {table_id: ''}
}.to_not change(List, :count)
end
it "re-renders the new method" do
post :create, list: {table_id: ''}
response.should render_template :new
end
end
end
describe 'PUT update' do
before :each do
@list = create :list, supplier: @supplier
end
context "valid attributes" do
it "located the requested list" do
put :update, id: @list, list: attributes_for(:list, supplier: @supplier)
@list.reload
assigns(:list).should eq(@list)
end
it "changes @list's attributes" do
put :update, id: @list, list: attributes_for(:list, price: "7.22", supplier: @supplier)
@list.reload
@list.price.should eq(7.22)
end
it "redirects to the updated list" do
put :update, id: @list, list: attributes_for(:list, supplier: @supplier)
response.should redirect_to [:suppliers, @list]
end
it "should not be possible to update a list to another supplier" do
supplier2 = create :supplier
put :update, id: @list, list: attributes_for(:list, supplier: supplier2)
@list.reload
@list.supplier_id.should == @supplier.id
end
it "should not be possible to update a list of another supplier" do
list = create :list, price: '7.22'
put :update, id: list, list: {price: '6.66'}
list.reload
list.price.should == 7.22
end
end
context "invalid attributes" do
it "locates the requested list" do
put :update, id: @list, list: {table_id: ''}
assigns(:list).should eq(@list)
end
it "re-renders the edit method" do
put :update, id: @list, list: {table_id: ''}
response.should render_template :edit
end
end
end
describe 'DELETE destroy' do
before :each do
@list = create :list, supplier: @supplier
end
it "deletes the list" do
expect{
delete :destroy, id: @list
}.to change(List, :count).by(-1)
end
it "redirects to lists#index" do
delete :destroy, id: @list
response.should redirect_to [:suppliers, :lists]
end
it "should not be possible to delete a list of another supplier" do
list = create :list
expect{
delete :destroy, id: list
}.to_not change(List, :count)
end
end
end
@@ -0,0 +1,173 @@
# encoding: UTF-8
require 'spec_helper'
describe Suppliers::ProductsController do
before :each do
@supplier = Supplier.find_by_email('supplier@qwaiter.com') || Supplier.create(name: 'Supplier', email: 'supplier@qwaiter.com', password: 'secret')
sign_in @supplier
end
describe "GET #index" do
it "populates an array of products" do
product = create :product, supplier: @supplier
get :index
assigns(:products).should eq([product])
end
it "does not include products from another supplier" do
product1 = create :product, supplier: @supplier
product2 = create :product
get :index
assigns(:products).should eq([product1])
end
it "should render without errors when no objects are present" do
get :index
expect{ render_template :index }.not_to raise_error
end
it "renders the :index view" do
get :index
response.should render_template :index
end
end
describe "GET #show" do
it "assigns the requested product to @product" do
product = create :product, supplier: @supplier
get :show, 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
response.status.should == 404
end
it "renders the #show view" do
product = create :product, supplier: @supplier
get :show, id: product
response.should render_template :show
end
end
describe "GET #new" do
it "assigns a new product to @product" do
get :new
assigns(:product).should be_a Product
end
it "renders the #show view" do
get :new
response.should render_template :new
end
end
describe "POST #create" do
context "with valid attributes" do
it "creates a new product" do
expect{
post :create, product: attributes_for(:product, supplier: @supplier)
}.to change(Product, :count).by(1)
end
it "redirects to the new product" do
post :create, product: attributes_for(:product, supplier: @supplier)
response.should redirect_to [:suppliers, Product.last]
end
it "should not be possible to create a product for another supplier" do
supplier2 = create :supplier
post :create, product: attributes_for(:product, name: 'Trying to hack', supplier: supplier2)
Product.find_by_name('Trying to hack').supplier_id.should == @supplier.id
end
end
context "with invalid attributes" do
it "does not save the new product" do
expect{
post :create, product: {name: ''}
}.to_not change(Product, :count)
end
it "re-renders the new method" do
post :create, product: {name: ''}
response.should render_template :new
end
end
end
describe 'PUT update' do
before :each do
@product = create :product, supplier: @supplier
end
context "valid attributes" do
it "located the requested product" do
put :update, id: @product, product: attributes_for(:product, supplier: @supplier)
@product.reload
assigns(:product).should eq(@product)
end
it "changes @product's attributes" do
put :update, id: @product, product: attributes_for(:product, name: "ChangedByTest", supplier: @supplier)
@product.reload
@product.name.should eq("ChangedByTest")
end
it "redirects to the updated product" do
put :update, id: @product, product: attributes_for(:product, supplier: @supplier)
response.should redirect_to [:suppliers, @product]
end
it "should not be possible to update a product to another supplier" do
supplier2 = create :supplier
put :update, id: @product, product: attributes_for(:product, name: "Trying to hack", supplier: supplier2)
Product.find_by_name('Trying to hack').supplier_id.should == @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"}
product.reload
product.name.should == 'Other supplier product'
end
end
context "invalid attributes" do
it "locates the requested product" do
put :update, id: @product, product: {name: ''}
assigns(:product).should eq(@product)
end
it "re-renders the edit method" do
put :update, id: @product, product: {name: ''}
response.should render_template :edit
end
end
end
describe 'DELETE destroy' do
before :each do
@product = create :product, supplier: @supplier
end
it "deletes the product" do
expect{
delete :destroy, id: @product
}.to change(Product, :count).by(-1)
end
it "redirects to products#index" do
delete :destroy, id: @product
response.should redirect_to [:suppliers, :products]
end
it "should not be possible to delete a product of another supplier" do
product = create :product
expect{
delete :destroy, id: product
}.to_not change(Product, :count)
end
end
end
@@ -0,0 +1,173 @@
# encoding: UTF-8
require 'spec_helper'
describe Suppliers::TablesController do
before :each do
@supplier = Supplier.find_by_email('supplier@qwaiter.com') || Supplier.create(name: 'Supplier', email: 'supplier@qwaiter.com', password: 'secret')
sign_in @supplier
end
describe "GET #index" do
it "populates an array of tables" do
table = create :table, supplier: @supplier
get :index
assigns(:tables).should eq([table])
end
it "does not include tables from another supplier" do
table1 = create :table, supplier: @supplier
table2 = create :table
get :index
assigns(:tables).should eq([table1])
end
it "should render without errors when no objects are present" do
get :index
expect{ render_template :index }.not_to raise_error
end
it "renders the :index view" do
get :index
response.should render_template :index
end
end
describe "GET #show" do
it "assigns the requested table to @table" do
table = create :table, supplier: @supplier
get :show, id: table
assigns(:table).should eq(table)
end
it "should not display a table of another supplier" do
table = create :table
get :show, id: table
response.status.should == 404
end
it "renders the #show view" do
table = create :table, supplier: @supplier
get :show, id: table
response.should render_template :show
end
end
describe "GET #new" do
it "assigns a new table to @table" do
get :new
assigns(:table).should be_a Table
end
it "renders the #show view" do
get :new
response.should render_template :new
end
end
describe "POST #create" do
context "with valid attributes" do
it "creates a new table" do
expect{
post :create, table: attributes_for(:table, supplier: @supplier)
}.to change(Table, :count).by(1)
end
it "redirects to the new table" do
post :create, table: attributes_for(:table, supplier: @supplier)
response.should redirect_to [:suppliers, Table.last]
end
it "should not be possible to create a table for another supplier" do
supplier2 = create :supplier
post :create, table: attributes_for(:table, number: 6, supplier: supplier2)
Table.find_by_number(6).supplier_id.should == @supplier.id
end
end
context "with invalid attributes" do
it "does not save the new table" do
expect{
post :create, table: {number: '-6'}
}.to_not change(Table, :count)
end
it "re-renders the new method" do
post :create, table: {number: '-6'}
response.should render_template :new
end
end
end
describe 'PUT update' do
before :each do
@table = create :table, supplier: @supplier
end
context "valid attributes" do
it "located the requested table" do
put :update, id: @table, table: attributes_for(:table, supplier: @supplier)
@table.reload
assigns(:table).should eq(@table)
end
it "changes @table's attributes" do
put :update, id: @table, table: attributes_for(:table, number: "14", supplier: @supplier)
@table.reload
@table.number.should eq(14)
end
it "redirects to the updated table" do
put :update, id: @table, table: attributes_for(:table, supplier: @supplier)
response.should redirect_to [:suppliers, @table]
end
it "should not be possible to update a table to another supplier" do
supplier2 = create :supplier
put :update, id: @table, table: attributes_for(:table, number: 6, supplier: supplier2)
Table.find_by_number(6).supplier_id.should == @supplier.id
end
it "should not be possible to update a table of another supplier" do
table = create :table, number: 11
put :update, id: table, table: {number: 6}
table.reload
table.number.should == 11
end
end
context "invalid attributes" do
it "locates the requested table" do
put :update, id: @table, table: {number: '-6'}
assigns(:table).should eq(@table)
end
it "re-renders the edit method" do
put :update, id: @table, table: {number: '-6'}
response.should render_template :edit
end
end
end
describe 'DELETE destroy' do
before :each do
@table = create :table, supplier: @supplier
end
it "deletes the table" do
expect{
delete :destroy, id: @table
}.to change(Table, :count).by(-1)
end
it "redirects to tables#index" do
delete :destroy, id: @table
response.should redirect_to [:suppliers, :tables]
end
it "should not be possible to delete a table of another supplier" do
table = create :table
expect{
delete :destroy, id: table
}.to_not change(Table, :count)
end
end
end