From 47713d12ab02fde84ee1bc69bc4f80c630bf68d8 Mon Sep 17 00:00:00 2001 From: benji Date: Thu, 5 Nov 2015 19:52:34 +0100 Subject: [PATCH 1/4] little something --- app/assets/javascripts/orders.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/assets/javascripts/orders.js b/app/assets/javascripts/orders.js index f6e0f01..00041f6 100644 --- a/app/assets/javascripts/orders.js +++ b/app/assets/javascripts/orders.js @@ -52,7 +52,7 @@ ready = function() { barcode = $(this).find("input[type=number]").val(); $("#from_barcode_form")[0].reset(); $.ajax({ - url: $("#from_barcode_form").data("url") + barcode, + url: $("#from_barcode_form").data("url") + "/" + barcode, success: function(data) { if (data != null) { increment_product(data["id"]); From e3fe271c4fecdc228a4eb18a668b51280ed39f56 Mon Sep 17 00:00:00 2001 From: Tom Naessens Date: Sun, 29 Nov 2015 15:20:26 +0100 Subject: [PATCH 2/4] Fix errbit host --- config/initializers/errbit.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config/initializers/errbit.rb b/config/initializers/errbit.rb index f7037bf..bd4049c 100644 --- a/config/initializers/errbit.rb +++ b/config/initializers/errbit.rb @@ -1,6 +1,6 @@ Airbrake.configure do |config| config.api_key = '6a6aacac3413e9c7b49b18c913477e4a' - config.host = 'zeus-errbit.ilion.me' + config.host = 'errbit.awesomepeople.tv' config.port = 80 config.secure = config.port == 443 end From 49898d484f8730479f06876f0e300802d4f6233e Mon Sep 17 00:00:00 2001 From: benji Date: Mon, 30 Nov 2015 18:20:54 +0100 Subject: [PATCH 3/4] Add guest account --- app/assets/images/guest.png | Bin 0 -> 2554 bytes app/controllers/guest/orders_controller.rb | 9 +++++ app/controllers/orders_controller.rb | 2 +- app/helpers/application_helper.rb | 2 ++ app/models/order.rb | 10 ++++-- app/models/user.rb | 6 ++++ app/views/orders/overview.html.haml | 2 ++ config/routes.rb | 4 +++ spec/controllers/barcodes_controller_spec.rb | 36 +++++++++++++++++++ 9 files changed, 68 insertions(+), 3 deletions(-) create mode 100644 app/assets/images/guest.png create mode 100644 app/controllers/guest/orders_controller.rb create mode 100644 spec/controllers/barcodes_controller_spec.rb diff --git a/app/assets/images/guest.png b/app/assets/images/guest.png new file mode 100644 index 0000000000000000000000000000000000000000..c700f0284facfd819d0c462d67af573034ac2614 GIT binary patch literal 2554 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 Q7XSbN07*qoM6N<$g3TQ1H~;_u literal 0 HcmV?d00001 diff --git a/app/controllers/guest/orders_controller.rb b/app/controllers/guest/orders_controller.rb new file mode 100644 index 0000000..718ebc9 --- /dev/null +++ b/app/controllers/guest/orders_controller.rb @@ -0,0 +1,9 @@ +class Guest::OrdersController < OrdersController + before_action :load_guest + + private + + def load_guest + @user = User.guest + end +end diff --git a/app/controllers/orders_controller.rb b/app/controllers/orders_controller.rb index b757ef8..2516cdf 100644 --- a/app/controllers/orders_controller.rb +++ b/app/controllers/orders_controller.rb @@ -9,7 +9,7 @@ class OrdersController < ApplicationController def create if @order.save - flash[:success] = "#{@order.to_sentence} ordered. Enjoy it!" + flash[:success] = @order.flash_success redirect_to root_path else @products = Product.all.for_sale.order(:name) diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb index 78743ec..f02d73d 100644 --- a/app/helpers/application_helper.rb +++ b/app/helpers/application_helper.rb @@ -1,4 +1,6 @@ module ApplicationHelper + include ActionView::Helpers::NumberHelper + def bootstrap_class_for flash_type { success: "alert-success", error: "alert-danger", alert: "alert-warning", notice: "alert-info" }[flash_type] || flash_type.to_s end diff --git a/app/models/order.rb b/app/models/order.rb index 7132e8f..52935f9 100644 --- a/app/models/order.rb +++ b/app/models/order.rb @@ -11,7 +11,7 @@ # class Order < ActiveRecord::Base - include ActionView::Helpers::TextHelper + include ActionView::Helpers::TextHelper, ApplicationHelper belongs_to :user, counter_cache: true has_many :order_items, dependent: :destroy @@ -19,7 +19,7 @@ class Order < ActiveRecord::Base before_validation :calculate_price before_save { |o| o.order_items = o.order_items.reject{ |oi| oi.count == 0 } } - after_create :create_api_job + after_create :create_api_job, unless: -> { user.name == "Guest" } validates :user, presence: true validates_associated :order_items @@ -33,6 +33,12 @@ class Order < ActiveRecord::Base }.to_sentence end + def flash_success + f = "#{to_sentence} ordered." + f << " Please put #{euro_from_cents(price_cents)} in our pot!" if user.name == "Guest" + f << " Enjoy it!" + end + def deletable self.created_at > Rails.application.config.call_api_after.ago end diff --git a/app/models/user.rb b/app/models/user.rb index ddab635..e340ecc 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -55,4 +55,10 @@ class User < ActiveRecord::Base rescue end end + + def self.guest + @guest || find_or_create_by(name: "Guest") do |user| + user.avatar = File.new(File.join("app", "assets", "images", "guest.png")) + end + end end diff --git a/app/views/orders/overview.html.haml b/app/views/orders/overview.html.haml index 053fb78..a6d3d3d 100644 --- a/app/views/orders/overview.html.haml +++ b/app/views/orders/overview.html.haml @@ -7,5 +7,7 @@ - @last.each do |user| = image_tag user.avatar(:small), class: "img-responsive img-circle img-thumbnail" .col-md-11 + .row.text-center + =link_to "Not a Zeus Account? Order as a guest.", new_guest_order_path, class: "btn btn-primary btn-lg" .row = render @users diff --git a/config/routes.rb b/config/routes.rb index 1495ef8..1663591 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -36,4 +36,8 @@ Rails.application.routes.draw do resources :barcodes, only: [:show, :index, :destroy] get 'overview' => 'orders#overview', as: "orders" + + namespace :guest do + resources :orders, only: [:new, :create] + end end diff --git a/spec/controllers/barcodes_controller_spec.rb b/spec/controllers/barcodes_controller_spec.rb new file mode 100644 index 0000000..1e9cf22 --- /dev/null +++ b/spec/controllers/barcodes_controller_spec.rb @@ -0,0 +1,36 @@ +# product_barcodes POST /products/:product_id/barcodes(.:format) barcodes#create +# barcodes GET /barcodes(.:format) barcodes#index +# barcode GET /barcodes/:id(.:format) barcodes#show +# DELETE /barcodes/:id(.:format) barcodes#destroy +# + +describe BarcodesController, type: :controller do + before :each do + @admin = create :admin + sign_in @admin + end + + ########## + # POST # + ########## + # + describe 'POST create' do + + end + + ########### + # INDEX # + ########### + + describe 'GET index' do + + end + + ########## + # SHOW # + ########## + + describe 'GET show' do + + end +end From d361abc91e9bd672b265d59764840683b5e69a47 Mon Sep 17 00:00:00 2001 From: benji Date: Tue, 1 Dec 2015 20:02:08 +0100 Subject: [PATCH 4/4] Add tests for barcode controller --- spec/controllers/barcodes_controller_spec.rb | 72 ++++++++++++++++++++ spec/controllers/products_controller_spec.rb | 10 +-- spec/factories/barcodes.rb | 4 ++ 3 files changed, 81 insertions(+), 5 deletions(-) create mode 100644 spec/controllers/barcodes_controller_spec.rb diff --git a/spec/controllers/barcodes_controller_spec.rb b/spec/controllers/barcodes_controller_spec.rb new file mode 100644 index 0000000..90c10c9 --- /dev/null +++ b/spec/controllers/barcodes_controller_spec.rb @@ -0,0 +1,72 @@ +# product_barcodes POST /products/:product_id/barcodes(.:format) barcodes#create +# barcodes GET /barcodes(.:format) barcodes#index +# barcode GET /barcodes/:id(.:format) barcodes#show +# DELETE /barcodes/:id(.:format) barcodes#destroy +# + +describe BarcodesController, type: :controller do + before :each do + @product = create :product + @admin = create :admin + sign_in @admin + end + + ########## + # POST # + ########## + + describe 'POST create' do + context 'successful' do + it 'should create a barcode' do + expect{ + post :create, product_id: @product, barcode: attributes_for(:barcode) + }.to change{ Barcode.count }.by(1) + end + end + + context 'failed' do + it 'should not create a barcode' do + expect{ + post :create, product_id: @product, barcode: attributes_for(:invalid_barcode) + }.to_not change{ Barcode.count } + end + end + end + + ########### + # INDEX # + ########### + + describe 'GET index' do + it 'should load all the barcodes' do + barcode = create :barcode + get :index + expect(assigns(:barcodes)).to eq([barcode]) + end + end + + ########## + # SHOW # + ########## + + describe 'GET show' do + before :each do + @barcode = create :barcode + end + + it 'should load the correct barcode' do + get :show, id: @barcode + expect(assigns(:barcode)).to eq(@barcode) + end + + it 'should allow friendly id' do + get :show, id: @barcode.code + expect(assigns(:barcode)).to eq(@barcode) + end + + it 'should respond with this barcode' do + get :show, id: @barcode + expect(response.body).to eq @barcode.product.to_json + end + end +end diff --git a/spec/controllers/products_controller_spec.rb b/spec/controllers/products_controller_spec.rb index 35bb79d..ff9e416 100644 --- a/spec/controllers/products_controller_spec.rb +++ b/spec/controllers/products_controller_spec.rb @@ -13,12 +13,12 @@ describe ProductsController, type: :controller do sign_in @admin end - ########## - # POST # - ########## + ############ + # CREATE # + ############ describe 'POST create' do - context 'successfull' do + context 'successful' do it 'should create a product' do expect{ post :create, product: attributes_for(:product) @@ -35,7 +35,7 @@ describe ProductsController, type: :controller do it 'should not create a product' do expect{ post :create, product: attributes_for(:invalid_product) - }.to_not change{Product.count} + }.to_not change{ Product.count} end it 'should render form' do diff --git a/spec/factories/barcodes.rb b/spec/factories/barcodes.rb index 2bada88..eb06c96 100644 --- a/spec/factories/barcodes.rb +++ b/spec/factories/barcodes.rb @@ -13,5 +13,9 @@ FactoryGirl.define do factory :barcode do product sequence :code + + factory :invalid_barcode do + code nil + end end end