enju_library 0.1.0.pre25 → 0.1.0.pre26
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/app/controllers/baskets_controller.rb +109 -0
- data/app/views/baskets/edit.html.erb +30 -0
- data/app/views/baskets/index.html.erb +31 -0
- data/app/views/baskets/new.html.erb +29 -0
- data/app/views/baskets/show.html.erb +23 -0
- data/lib/enju_library/version.rb +1 -1
- data/spec/controllers/baskets_controller_spec.rb +379 -0
- data/spec/dummy/config/initializers/inflections.rb +3 -7
- data/spec/dummy/db/migrate/032_create_checkins.rb +17 -0
- data/spec/dummy/db/migrate/035_create_reserves.rb +27 -0
- data/spec/dummy/db/migrate/113_create_events.rb +23 -0
- data/spec/dummy/db/migrate/114_create_event_categories.rb +16 -0
- data/spec/dummy/db/migrate/121_create_checked_items.rb +17 -0
- data/spec/dummy/db/migrate/127_create_use_restrictions.rb +16 -0
- data/spec/dummy/db/migrate/129_create_item_has_use_restrictions.rb +16 -0
- data/spec/dummy/db/migrate/149_create_message_templates.rb +18 -0
- data/spec/dummy/db/migrate/154_create_messages.rb +24 -0
- data/spec/dummy/db/migrate/20080819181903_create_message_requests.rb +20 -0
- data/spec/dummy/db/migrate/20081028093607_create_event_import_files.rb +27 -0
- data/spec/dummy/db/migrate/20081030023615_create_carrier_type_has_checkout_types.rb +18 -0
- data/spec/dummy/db/migrate/20081212075554_create_checkout_stat_has_manifestations.rb +17 -0
- data/spec/dummy/db/migrate/20081212080038_create_manifestation_checkout_stats.rb +16 -0
- data/spec/dummy/db/migrate/20081215094302_create_user_checkout_stats.rb +16 -0
- data/spec/dummy/db/migrate/20081215094955_create_checkout_stat_has_users.rb +17 -0
- data/spec/dummy/db/migrate/20081216190517_create_reserve_stat_has_manifestations.rb +17 -0
- data/spec/dummy/db/migrate/20081216190724_create_manifestation_reserve_stats.rb +16 -0
- data/spec/dummy/db/migrate/20081220023628_create_user_reserve_stats.rb +16 -0
- data/spec/dummy/db/migrate/20081220034117_create_reserve_stat_has_users.rb +17 -0
- data/spec/dummy/db/migrate/20090321130448_add_completed_at_to_user_checkout_stat.rb +27 -0
- data/spec/dummy/db/migrate/20090519203307_create_participates.rb +17 -0
- data/spec/dummy/db/migrate/20090831220301_create_lending_policies.rb +21 -0
- data/spec/dummy/db/migrate/20100925074639_create_event_import_results.rb +15 -0
- data/spec/dummy/db/migrate/20110301134521_add_expire_date_to_reserve.rb +9 -0
- data/spec/dummy/db/migrate/20110621093332_remove_expire_date_from_reserve.rb +9 -0
- data/spec/dummy/db/migrate/20110913115320_add_lft_and_rgt_to_message.rb +11 -0
- data/spec/dummy/db/migrate/20111217234412_add_save_checkout_history_to_user.rb +5 -0
- data/spec/dummy/db/migrate/20111218002349_add_checkout_icalendar_token_to_user.rb +6 -0
- data/spec/dummy/db/migrate/20120125050502_add_depth_to_message.rb +6 -0
- data/spec/dummy/db/migrate/20120413051535_add_event_import_fingerprint_to_event_import_file.rb +5 -0
- data/spec/dummy/db/migrate/20120413170734_add_error_message_to_event_import_file.rb +5 -0
- data/spec/dummy/db/migrate/20120415060342_rename_event_import_file_imported_at_to_executed_at.rb +9 -0
- data/spec/dummy/db/migrate/20120424103932_add_librarian_id_to_checked_item.rb +5 -0
- data/spec/dummy/db/migrate/20130303104849_add_state_index_to_reserve.rb +5 -0
- data/spec/dummy/db/migrate/20130303124821_add_retained_at_to_reserve.rb +5 -0
- data/spec/dummy/db/migrate/20130304015019_add_postponed_at_to_reserve.rb +5 -0
- data/spec/dummy/db/migrate/20130519065638_add_lock_version_to_reserve.rb +5 -0
- data/spec/dummy/db/migrate/20130519065837_add_lock_version_to_checkin.rb +5 -0
- data/spec/dummy/db/schema.rb +393 -83
- data/spec/dummy/db/test.sqlite3 +0 -0
- data/spec/dummy/solr/conf/schema.xml +15 -2
- data/spec/dummy/solr/data/test/index/_2w.tis +0 -0
- data/spec/dummy/solr/data/test/index/segments.gen +0 -0
- data/spec/dummy/solr/data/test/index/{segments_18r → segments_6n} +0 -0
- data/spec/dummy/solr/data/test/spellchecker/segments_1 +0 -0
- data/spec/dummy/tmp/cache/assets/test/sprockets/169f4ead801f350c94685db6343b613a +0 -0
- data/spec/dummy/tmp/cache/assets/test/sprockets/254f2ef29215d4091bfe5949fe8f725f +0 -0
- data/spec/dummy/tmp/cache/assets/test/sprockets/5c6c9015e14271822fcfdcce5fca127d +0 -0
- data/spec/dummy/tmp/cache/assets/test/sprockets/82147708959cf940a0db9210985926fd +0 -0
- data/spec/dummy/tmp/cache/assets/test/sprockets/b216037296f015f88a15e209c81fe1d3 +0 -0
- data/spec/dummy/tmp/cache/assets/test/sprockets/bbe2834cdae4786a530e40e14f846805 +0 -0
- data/spec/dummy/tmp/cache/assets/test/sprockets/c60042eb39c8ef7a95f8926ca5648a9d +0 -0
- data/spec/dummy/tmp/cache/assets/test/sprockets/d005c609dd44fbca49a45a652887a53d +0 -0
- data/spec/fixtures/agent_types.yml +35 -0
- data/spec/fixtures/agents.yml +338 -0
- data/spec/fixtures/carrier_type_has_checkout_types.yml +31 -0
- data/spec/fixtures/checked_items.yml +35 -0
- data/spec/fixtures/checkins.yml +55 -0
- data/spec/fixtures/checkout_stat_has_manifestations.yml +24 -0
- data/spec/fixtures/checkout_stat_has_users.yml +24 -0
- data/spec/fixtures/circulation_statuses.yml +14 -0
- data/spec/fixtures/event_categories.yml +55 -0
- data/spec/fixtures/events.yml +142 -0
- data/spec/fixtures/exemplifies.yml +19 -11
- data/spec/fixtures/item_has_use_restrictions.yml +61 -0
- data/spec/fixtures/items.yml +80 -9
- data/spec/fixtures/lending_policies.yml +99 -0
- data/spec/fixtures/libraries.yml +27 -25
- data/spec/fixtures/library_groups.yml +20 -20
- data/spec/fixtures/manifestation_checkout_stats.yml +31 -0
- data/spec/fixtures/manifestation_reserve_stats.yml +31 -0
- data/spec/fixtures/manifestations.yml +2 -137
- data/spec/fixtures/message_requests.yml +30 -0
- data/spec/fixtures/message_templates.yml +84 -0
- data/spec/fixtures/request_status_types.yml +4 -4
- data/spec/fixtures/request_types.yml +4 -4
- data/spec/fixtures/reserve_stat_has_manifestations.yml +24 -0
- data/spec/fixtures/reserve_stat_has_users.yml +24 -0
- data/spec/fixtures/reserves.yml +179 -0
- data/spec/fixtures/shelves.yml +6 -7
- data/spec/fixtures/use_restrictions.yml +93 -0
- data/spec/fixtures/user_checkout_stats.yml +31 -0
- data/spec/fixtures/user_group_has_checkout_types.yml +111 -0
- data/spec/fixtures/user_reserve_stats.yml +31 -0
- data/spec/fixtures/users.yml +14 -37
- data/spec/routing/baskets_routing_spec.rb +35 -0
- metadata +173 -26
- data/spec/dummy/solr/data/test/index/_j7.tis +0 -0
- /data/spec/dummy/solr/data/test/index/{_j7.fdt → _2w.fdt} +0 -0
- /data/spec/dummy/solr/data/test/index/{_j7.fdx → _2w.fdx} +0 -0
- /data/spec/dummy/solr/data/test/index/{_j7.fnm → _2w.fnm} +0 -0
- /data/spec/dummy/solr/data/test/index/{_j7.frq → _2w.frq} +0 -0
- /data/spec/dummy/solr/data/test/index/{_j7.nrm → _2w.nrm} +0 -0
- /data/spec/dummy/solr/data/test/index/{_j7.prx → _2w.prx} +0 -0
- /data/spec/dummy/solr/data/test/index/{_j7.tii → _2w.tii} +0 -0
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 0f7cfde1b8e93b96eece03f7081b72857bf4eb80
|
4
|
+
data.tar.gz: 7b1f0907c2ae67df9027d8b2c1c5e4e804d33fdc
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8d3bbffc2fc340e012fec8327ba47749bebac6aac7fc6f3b4a3da8ffc935555e0835c85eeb9b3b63af6b4c4a8e63339ba066708c384acca9c058f32f39167b85
|
7
|
+
data.tar.gz: ad7b50551d0f5adf2e460657c7ce10da6deb5285d30abda7f5cd4e4e1605fbb3304b52c7fab7d611b48273d1fe903b0ff4e9ee6eecbb4de04a947090b0284ffc
|
@@ -0,0 +1,109 @@
|
|
1
|
+
class BasketsController < ApplicationController
|
2
|
+
load_and_authorize_resource
|
3
|
+
cache_sweeper :circulation_sweeper, :only => [:create, :update, :destroy]
|
4
|
+
|
5
|
+
# GET /baskets
|
6
|
+
# GET /baskets.json
|
7
|
+
def index
|
8
|
+
if current_user.has_role?('Librarian')
|
9
|
+
@baskets = Basket.page(params[:page])
|
10
|
+
else
|
11
|
+
redirect_to new_basket_url
|
12
|
+
return
|
13
|
+
end
|
14
|
+
|
15
|
+
respond_to do |format|
|
16
|
+
format.html # index.html.erb
|
17
|
+
format.json { render :json => @baskets }
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
# GET /baskets/1
|
22
|
+
# GET /baskets/1.json
|
23
|
+
def show
|
24
|
+
respond_to do |format|
|
25
|
+
format.html # show.html.erb
|
26
|
+
format.json { render :json => @basket }
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
# GET /baskets/new
|
31
|
+
# GET /baskets/new.json
|
32
|
+
def new
|
33
|
+
@basket = Basket.new
|
34
|
+
@basket.user_number = params[:user_number]
|
35
|
+
|
36
|
+
respond_to do |format|
|
37
|
+
format.html # new.html.erb
|
38
|
+
format.json { render :json => @basket }
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
# GET /baskets/1/edit
|
43
|
+
def edit
|
44
|
+
end
|
45
|
+
|
46
|
+
# POST /baskets
|
47
|
+
# POST /baskets.json
|
48
|
+
def create
|
49
|
+
@basket = Basket.new(params[:basket])
|
50
|
+
@user = User.where(:user_number => @basket.user_number).first if @basket.user_number
|
51
|
+
if @user
|
52
|
+
if @user.user_number?
|
53
|
+
@basket.user = @user
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
respond_to do |format|
|
58
|
+
if @basket.save
|
59
|
+
format.html { redirect_to new_basket_checked_item_url(@basket), :notice => t('controller.successfully_created', :model => t('activerecord.models.basket')) }
|
60
|
+
format.json { render :json => @basket, :status => :created, :location => @basket }
|
61
|
+
else
|
62
|
+
format.html { render :action => "new" }
|
63
|
+
format.json { render :json => @basket.errors, :status => :unprocessable_entity }
|
64
|
+
end
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
68
|
+
# PUT /baskets/1
|
69
|
+
# PUT /baskets/1.json
|
70
|
+
def update
|
71
|
+
librarian = current_user
|
72
|
+
begin
|
73
|
+
unless @basket.basket_checkout(librarian)
|
74
|
+
redirect_to new_basket_checked_item_url(@basket)
|
75
|
+
return
|
76
|
+
end
|
77
|
+
rescue ActiveRecord::RecordInvalid
|
78
|
+
flash[:message] = t('checked_item.already_checked_out_try_again')
|
79
|
+
@basket.checked_items.delete_all
|
80
|
+
redirect_to new_basket_checked_item_url(@basket)
|
81
|
+
return
|
82
|
+
end
|
83
|
+
|
84
|
+
respond_to do |format|
|
85
|
+
#if @basket.update_attributes({})
|
86
|
+
if @basket.save(:validate => false)
|
87
|
+
# 貸出完了時
|
88
|
+
format.html { redirect_to user_checkouts_url(@basket.user), :notice => t('basket.checkout_completed') }
|
89
|
+
format.json { head :no_content }
|
90
|
+
else
|
91
|
+
format.html { redirect_to basket_checked_items_url(@basket) }
|
92
|
+
format.json { render :json => @basket.errors, :status => :unprocessable_entity }
|
93
|
+
end
|
94
|
+
end
|
95
|
+
|
96
|
+
end
|
97
|
+
|
98
|
+
# DELETE /baskets/1
|
99
|
+
# DELETE /baskets/1.json
|
100
|
+
def destroy
|
101
|
+
@basket.destroy
|
102
|
+
|
103
|
+
respond_to do |format|
|
104
|
+
#format.html { redirect_to(user_baskets_url(@user)) }
|
105
|
+
format.html { redirect_to user_checkouts_url(@basket.user) }
|
106
|
+
format.json { head :no_content }
|
107
|
+
end
|
108
|
+
end
|
109
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
<div id="content_detail" class="ui-corner-all">
|
2
|
+
<h1 class="title"><%= t('page.editing', :model => t('activerecord.models.basket')) -%></h1>
|
3
|
+
<div id="content_list">
|
4
|
+
|
5
|
+
<%= form_for(@basket) do |f| -%>
|
6
|
+
<%= f.error_messages -%>
|
7
|
+
<div class="field">
|
8
|
+
<%= f.label t('activerecord.models.user') -%><br />
|
9
|
+
<%= @basket.user.username -%>
|
10
|
+
<%= f.hidden_field :user_id -%>
|
11
|
+
</div>
|
12
|
+
|
13
|
+
<div class="field">
|
14
|
+
<%= f.label :note -%><br />
|
15
|
+
<%= f.text_area :note, :class => 'resource_textarea' -%>
|
16
|
+
</div>
|
17
|
+
|
18
|
+
<div class="actions">
|
19
|
+
<%= f.submit %>
|
20
|
+
</div>
|
21
|
+
<%- end -%>
|
22
|
+
</div>
|
23
|
+
</div>
|
24
|
+
|
25
|
+
<div id="submenu" class="ui-corner-all">
|
26
|
+
<ul>
|
27
|
+
<li><%= link_to t('page.show'), basket_path(@basket) -%></li>
|
28
|
+
<li><%= link_to t('page.back'), user_baskets_path(@basket.user) -%></li>
|
29
|
+
</ul>
|
30
|
+
</div>
|
@@ -0,0 +1,31 @@
|
|
1
|
+
<div id="content_detail" class="ui-corner-all">
|
2
|
+
<h1 class="title"><%= t('page.listing', :model => t('activerecord.models.basket')) -%></h1>
|
3
|
+
<div id="content_list">
|
4
|
+
|
5
|
+
<table class="table table-striped index">
|
6
|
+
<tr>
|
7
|
+
<th><%= t('activerecord.models.user') -%></th>
|
8
|
+
<th><%= t('activerecord.attributes.basket.note') -%></th>
|
9
|
+
<th><%= t('page.updated_at') -%></th>
|
10
|
+
</tr>
|
11
|
+
|
12
|
+
<%- @baskets.each do |basket| -%>
|
13
|
+
<tr class="line<%= cycle("0", "1") -%>">
|
14
|
+
<td><%= basket.user.username -%></td>
|
15
|
+
<td><%= basket.note -%></td>
|
16
|
+
<td><%= basket.updated_at -%></td>
|
17
|
+
<td><%= link_to t('page.show'), basket -%></td>
|
18
|
+
</tr>
|
19
|
+
<%- end -%>
|
20
|
+
</table>
|
21
|
+
|
22
|
+
<%= paginate(@baskets) -%>
|
23
|
+
|
24
|
+
</div>
|
25
|
+
</div>
|
26
|
+
|
27
|
+
<div id="submenu" class="ui-corner-all">
|
28
|
+
<ul>
|
29
|
+
<li><%= link_to t('page.new', :model => t('activerecord.models.basket')), new_basket_path -%></li>
|
30
|
+
</ul>
|
31
|
+
</div>
|
@@ -0,0 +1,29 @@
|
|
1
|
+
<div id="content_detail" class="ui-corner-all">
|
2
|
+
<h1 class="title"><%= t('page.new', :model => t('activerecord.models.basket')) -%></h1>
|
3
|
+
<div id="content_list">
|
4
|
+
|
5
|
+
<%= form_for(@basket, :html => {:name => 'basket_form'}) do |f| -%>
|
6
|
+
<%= f.error_messages -%>
|
7
|
+
<div class="field">
|
8
|
+
<%= f.label t('activerecord.attributes.user.user_number') -%>
|
9
|
+
<%= f.search_field :user_number, :class => 'resource_user_number' -%>
|
10
|
+
|
11
|
+
<!--
|
12
|
+
<div class="field">
|
13
|
+
<%= f.label :note -%><br />
|
14
|
+
<%= f.text_area :note, :class => 'resource_textarea' -%>
|
15
|
+
</div>
|
16
|
+
-->
|
17
|
+
<%= f.submit t('page.read') -%>
|
18
|
+
</div>
|
19
|
+
<%- end -%>
|
20
|
+
<%= javascript_tag("$(function(){$('#basket_user_number').focus().select()})") %>
|
21
|
+
</div>
|
22
|
+
</div>
|
23
|
+
|
24
|
+
<div id="submenu" class="ui-corner-all">
|
25
|
+
<ul>
|
26
|
+
<li><%= link_to t('activerecord.models.checkin'), new_checkin_path -%></li>
|
27
|
+
<li><%= link_to t('page.search_resource', :model => t('activerecord.models.user')), users_path -%></li>
|
28
|
+
</ul>
|
29
|
+
</div>
|
@@ -0,0 +1,23 @@
|
|
1
|
+
<div id="content_list">
|
2
|
+
<h1 class="title"><%= t('page.showing', :model => t('activerecord.models.basket')) -%></h1>
|
3
|
+
<div id="content_detail" class="ui-corner-all">
|
4
|
+
<p id="notice"><%= notice %></p>
|
5
|
+
|
6
|
+
<p>
|
7
|
+
<strong><%= t('activerecord.models.user') -%>:</strong>
|
8
|
+
<%= @basket.user.username -%>
|
9
|
+
</p>
|
10
|
+
|
11
|
+
<p>
|
12
|
+
<strong><%= t('activerecord.attributes.basket.note') -%>:</strong>
|
13
|
+
<%= @basket.note -%>
|
14
|
+
</p>
|
15
|
+
</div>
|
16
|
+
</div>
|
17
|
+
|
18
|
+
<div id="submenu" class="ui-corner-all">
|
19
|
+
<ul>
|
20
|
+
<li><%= link_to t('page.edit'), edit_basket_path(@basket) -%></li>
|
21
|
+
<li><%= link_to t('page.back'), user_baskets_path(@basket.user) -%></li>
|
22
|
+
</ul>
|
23
|
+
</div>
|
data/lib/enju_library/version.rb
CHANGED
@@ -0,0 +1,379 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe BasketsController do
|
4
|
+
fixtures :all
|
5
|
+
|
6
|
+
describe "GET index" do
|
7
|
+
describe "When logged in as Administrator" do
|
8
|
+
login_admin
|
9
|
+
|
10
|
+
it "assigns all baskets as @baskets" do
|
11
|
+
get :index, :user_id => users(:user1).username
|
12
|
+
assigns(:baskets).should_not be_empty
|
13
|
+
response.should be_success
|
14
|
+
end
|
15
|
+
|
16
|
+
it "should get index without user_id" do
|
17
|
+
get :index
|
18
|
+
response.should be_success
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
describe "When logged in as Librarian" do
|
23
|
+
login_librarian
|
24
|
+
|
25
|
+
it "assigns all baskets as @baskets" do
|
26
|
+
get :index, :user_id => users(:user1).username
|
27
|
+
assigns(:baskets).should_not be_empty
|
28
|
+
response.should be_success
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
describe "When logged in as User" do
|
33
|
+
login_user
|
34
|
+
|
35
|
+
it "assigns all baskets as @baskets" do
|
36
|
+
get :index, :user_id => users(:user1).username
|
37
|
+
assigns(:baskets).should be_empty
|
38
|
+
response.should be_forbidden
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
describe "When not logged in" do
|
43
|
+
it "assigns all baskets as @baskets" do
|
44
|
+
get :index, :user_id => users(:user1).username
|
45
|
+
assigns(:baskets).should be_empty
|
46
|
+
response.should redirect_to(new_user_session_url)
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
describe "GET show" do
|
52
|
+
describe "When logged in as Administrator" do
|
53
|
+
login_admin
|
54
|
+
|
55
|
+
it "assigns the requested basket as @basket" do
|
56
|
+
get :show, :id => 1, :user_id => users(:admin).username
|
57
|
+
assigns(:basket).should eq(Basket.find(1))
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
describe "When logged in as Librarian" do
|
62
|
+
login_librarian
|
63
|
+
|
64
|
+
it "assigns the requested basket as @basket" do
|
65
|
+
get :show, :id => 1, :user_id => users(:admin).username
|
66
|
+
assigns(:basket).should eq(Basket.find(1))
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
70
|
+
describe "When logged in as User" do
|
71
|
+
login_user
|
72
|
+
|
73
|
+
it "assigns the requested basket as @basket" do
|
74
|
+
get :show, :id => 1, :user_id => users(:admin).username
|
75
|
+
assigns(:basket).should eq(Basket.find(1))
|
76
|
+
response.should be_forbidden
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
80
|
+
describe "When not logged in" do
|
81
|
+
it "assigns the requested basket as @basket" do
|
82
|
+
get :show, :id => 1, :user_id => users(:admin).username
|
83
|
+
assigns(:basket).should eq(Basket.find(1))
|
84
|
+
response.should redirect_to(new_user_session_url)
|
85
|
+
end
|
86
|
+
end
|
87
|
+
end
|
88
|
+
|
89
|
+
describe "GET new" do
|
90
|
+
describe "When logged in as Administrator" do
|
91
|
+
login_admin
|
92
|
+
|
93
|
+
it "assigns the requested basket as @basket" do
|
94
|
+
get :new
|
95
|
+
assigns(:basket).should_not be_valid
|
96
|
+
end
|
97
|
+
end
|
98
|
+
|
99
|
+
describe "When logged in as Librarian" do
|
100
|
+
login_librarian
|
101
|
+
|
102
|
+
it "assigns the requested basket as @basket" do
|
103
|
+
get :new
|
104
|
+
assigns(:basket).should_not be_valid
|
105
|
+
end
|
106
|
+
end
|
107
|
+
|
108
|
+
describe "When logged in as User" do
|
109
|
+
login_user
|
110
|
+
|
111
|
+
it "should not assign the requested basket as @basket" do
|
112
|
+
get :new
|
113
|
+
assigns(:basket).should_not be_valid
|
114
|
+
response.should be_forbidden
|
115
|
+
end
|
116
|
+
end
|
117
|
+
|
118
|
+
describe "When not logged in" do
|
119
|
+
it "should not assign the requested basket as @basket" do
|
120
|
+
get :new
|
121
|
+
assigns(:basket).should_not be_valid
|
122
|
+
response.should redirect_to(new_user_session_url)
|
123
|
+
end
|
124
|
+
end
|
125
|
+
end
|
126
|
+
|
127
|
+
describe "GET edit" do
|
128
|
+
describe "When logged in as Administrator" do
|
129
|
+
login_admin
|
130
|
+
before(:each) do
|
131
|
+
@basket = baskets(:basket_00001)
|
132
|
+
end
|
133
|
+
|
134
|
+
it "assigns the requested basket as @basket" do
|
135
|
+
get :edit, :id => @basket.id
|
136
|
+
assigns(:basket).should eq(@basket)
|
137
|
+
end
|
138
|
+
end
|
139
|
+
|
140
|
+
describe "When logged in as Librarian" do
|
141
|
+
login_librarian
|
142
|
+
before(:each) do
|
143
|
+
@basket = baskets(:basket_00001)
|
144
|
+
end
|
145
|
+
|
146
|
+
it "assigns the requested basket as @basket" do
|
147
|
+
get :edit, :id => @basket.id
|
148
|
+
assigns(:basket).should eq(@basket)
|
149
|
+
end
|
150
|
+
end
|
151
|
+
|
152
|
+
describe "When logged in as User" do
|
153
|
+
login_user
|
154
|
+
before(:each) do
|
155
|
+
@basket = baskets(:basket_00001)
|
156
|
+
end
|
157
|
+
|
158
|
+
it "should not assign the requested basket as @basket" do
|
159
|
+
get :edit, :id => @basket.id
|
160
|
+
assigns(:basket).should eq(@basket)
|
161
|
+
response.should be_forbidden
|
162
|
+
end
|
163
|
+
end
|
164
|
+
|
165
|
+
describe "When not logged in" do
|
166
|
+
before(:each) do
|
167
|
+
@basket = baskets(:basket_00001)
|
168
|
+
end
|
169
|
+
|
170
|
+
it "should not assign the requested basket as @basket" do
|
171
|
+
get :edit, :id => @basket.id
|
172
|
+
assigns(:basket).should eq(@basket)
|
173
|
+
response.should redirect_to new_user_session_url
|
174
|
+
end
|
175
|
+
end
|
176
|
+
end
|
177
|
+
|
178
|
+
describe "POST create" do
|
179
|
+
before(:each) do
|
180
|
+
@attrs = {:user_number => users(:user1).user_number }
|
181
|
+
@invalid_attrs = {:user_number => 'invalid'}
|
182
|
+
end
|
183
|
+
|
184
|
+
describe "When logged in as Administrator" do
|
185
|
+
login_admin
|
186
|
+
|
187
|
+
describe "with valid params" do
|
188
|
+
it "assigns a newly created basket as @basket" do
|
189
|
+
post :create, :basket => {:user_number => users(:user1).user_number }
|
190
|
+
assigns(:basket).should be_valid
|
191
|
+
end
|
192
|
+
end
|
193
|
+
|
194
|
+
describe "with blank params" do
|
195
|
+
it "assigns a newly created basket as @basket" do
|
196
|
+
post :create, :basket => { }
|
197
|
+
assigns(:basket).should_not be_valid
|
198
|
+
end
|
199
|
+
end
|
200
|
+
|
201
|
+
describe "with invalid params" do
|
202
|
+
it "assigns a newly created basket as @basket" do
|
203
|
+
post :create, :basket => @invalid_attrs
|
204
|
+
assigns(:basket).should_not be_valid
|
205
|
+
end
|
206
|
+
end
|
207
|
+
end
|
208
|
+
|
209
|
+
describe "When logged in as Librarian" do
|
210
|
+
login_librarian
|
211
|
+
|
212
|
+
describe "with valid params" do
|
213
|
+
it "assigns a newly created basket as @basket" do
|
214
|
+
post :create, :basket => {:user_number => users(:user1).user_number }
|
215
|
+
assigns(:basket).should be_valid
|
216
|
+
end
|
217
|
+
end
|
218
|
+
|
219
|
+
describe "with blank params" do
|
220
|
+
it "assigns a newly created basket as @basket" do
|
221
|
+
post :create, :basket => { }
|
222
|
+
assigns(:basket).should_not be_valid
|
223
|
+
end
|
224
|
+
end
|
225
|
+
|
226
|
+
describe "with invalid params" do
|
227
|
+
it "assigns a newly created basket as @basket" do
|
228
|
+
post :create, :basket => @invalid_attrs
|
229
|
+
assigns(:basket).should_not be_valid
|
230
|
+
end
|
231
|
+
end
|
232
|
+
|
233
|
+
it "should not create basket when user is suspended" do
|
234
|
+
post :create, :basket => {:user_number => users(:user4).user_number }
|
235
|
+
assigns(:basket).should_not be_valid
|
236
|
+
assigns(:basket).errors["base"].include?(I18n.t('basket.this_account_is_suspended')).should be_true
|
237
|
+
response.should be_success
|
238
|
+
end
|
239
|
+
|
240
|
+
it "should not create basket when user is not found" do
|
241
|
+
post :create, :basket => {:user_number => 'not found' }
|
242
|
+
assigns(:basket).should_not be_valid
|
243
|
+
assigns(:basket).errors["base"].include?(I18n.t('user.not_found')).should be_true
|
244
|
+
response.should be_success
|
245
|
+
end
|
246
|
+
|
247
|
+
it "should not create basket without user_number" do
|
248
|
+
post :create, :basket => { }
|
249
|
+
assigns(:basket).should_not be_valid
|
250
|
+
response.should be_success
|
251
|
+
end
|
252
|
+
|
253
|
+
it "should create basket" do
|
254
|
+
post :create, :basket => {:user_number => users(:user1).user_number }
|
255
|
+
assigns(:basket).should be_valid
|
256
|
+
response.should redirect_to new_basket_checked_item_url(assigns(:basket))
|
257
|
+
end
|
258
|
+
|
259
|
+
it "should not create basket without user_number" do
|
260
|
+
post :create, :basket => { }
|
261
|
+
assigns(:basket).should_not be_valid
|
262
|
+
response.should be_success
|
263
|
+
end
|
264
|
+
end
|
265
|
+
|
266
|
+
describe "When logged in as User" do
|
267
|
+
login_user
|
268
|
+
|
269
|
+
describe "with valid params" do
|
270
|
+
it "assigns a newly created basket as @basket" do
|
271
|
+
post :create, :basket => {:user_number => users(:user1).user_number }
|
272
|
+
assigns(:basket).should_not be_valid
|
273
|
+
end
|
274
|
+
|
275
|
+
it "should be forbidden" do
|
276
|
+
post :create, :basket => {:user_number => users(:user1).user_number }
|
277
|
+
response.should be_forbidden
|
278
|
+
end
|
279
|
+
end
|
280
|
+
|
281
|
+
it "should not create basket" do
|
282
|
+
post :create, :basket => {:user_number => users(:user1).user_number }
|
283
|
+
response.should be_forbidden
|
284
|
+
end
|
285
|
+
end
|
286
|
+
|
287
|
+
describe "When not logged in" do
|
288
|
+
describe "with blank params" do
|
289
|
+
it "assigns a newly created basket as @basket" do
|
290
|
+
post :create, :basket => { }
|
291
|
+
assigns(:basket).should_not be_valid
|
292
|
+
end
|
293
|
+
|
294
|
+
it "should be redirected to new_user_session_url" do
|
295
|
+
post :create, :basket => { }
|
296
|
+
assigns(:basket).should_not be_valid
|
297
|
+
assert_response :redirect
|
298
|
+
response.should redirect_to new_user_session_url
|
299
|
+
end
|
300
|
+
end
|
301
|
+
end
|
302
|
+
end
|
303
|
+
|
304
|
+
describe "PUT update" do
|
305
|
+
before(:each) do
|
306
|
+
@attrs = {:user_id => users(:user1).username}
|
307
|
+
end
|
308
|
+
|
309
|
+
describe "When logged in as Librarian" do
|
310
|
+
login_librarian
|
311
|
+
|
312
|
+
describe "with valid params" do
|
313
|
+
it "updates the requested basket" do
|
314
|
+
put :update, :id => 8, :basket => @attrs
|
315
|
+
end
|
316
|
+
|
317
|
+
it "assigns the requested basket as @basket" do
|
318
|
+
put :update, :id => 8, :basket => @attrs
|
319
|
+
assigns(:basket).checkouts.order('created_at DESC').first.item.circulation_status.name.should eq 'On Loan'
|
320
|
+
response.should redirect_to(user_checkouts_url(assigns(:basket).user))
|
321
|
+
end
|
322
|
+
end
|
323
|
+
end
|
324
|
+
end
|
325
|
+
|
326
|
+
describe "DELETE destroy" do
|
327
|
+
before(:each) do
|
328
|
+
@basket = FactoryGirl.create(:basket)
|
329
|
+
end
|
330
|
+
|
331
|
+
describe "When logged in as Administrator" do
|
332
|
+
login_fixture_admin
|
333
|
+
|
334
|
+
it "should destroy basket without user_id" do
|
335
|
+
delete :destroy, :id => 1, :basket => {:user_id => nil}, :user_id => users(:user1).username
|
336
|
+
response.should redirect_to user_checkouts_url(assigns(:basket).user)
|
337
|
+
end
|
338
|
+
|
339
|
+
it "should destroy basket" do
|
340
|
+
delete :destroy, :id => 1, :basket => { }, :user_id => users(:user1).username
|
341
|
+
response.should redirect_to user_checkouts_url(assigns(:basket).user)
|
342
|
+
end
|
343
|
+
end
|
344
|
+
|
345
|
+
describe "When logged in as Librarian" do
|
346
|
+
login_fixture_librarian
|
347
|
+
|
348
|
+
it "should destroy basket without user_id" do
|
349
|
+
delete :destroy, :id => 1, :basket => {:user_id => nil}, :user_id => users(:user1).username
|
350
|
+
response.should redirect_to user_checkouts_url(assigns(:basket).user)
|
351
|
+
end
|
352
|
+
|
353
|
+
it "should destroy basket" do
|
354
|
+
delete :destroy, :id => 1, :basket => { }, :user_id => users(:user1).username
|
355
|
+
response.should redirect_to user_checkouts_url(assigns(:basket).user)
|
356
|
+
end
|
357
|
+
end
|
358
|
+
|
359
|
+
describe "When logged in as User" do
|
360
|
+
login_fixture_user
|
361
|
+
|
362
|
+
it "should not destroy basket" do
|
363
|
+
delete :destroy, :id => 3, :user_id => users(:user1).username
|
364
|
+
response.should be_forbidden
|
365
|
+
end
|
366
|
+
end
|
367
|
+
|
368
|
+
describe "When not logged in" do
|
369
|
+
it "destroys the requested basket" do
|
370
|
+
delete :destroy, :id => @basket.id
|
371
|
+
end
|
372
|
+
|
373
|
+
it "should be forbidden" do
|
374
|
+
delete :destroy, :id => @basket.id
|
375
|
+
response.should redirect_to new_user_session_url
|
376
|
+
end
|
377
|
+
end
|
378
|
+
end
|
379
|
+
end
|
@@ -2,14 +2,10 @@
|
|
2
2
|
|
3
3
|
# Add new inflection rules using the following format
|
4
4
|
# (all these examples are active by default):
|
5
|
-
|
5
|
+
ActiveSupport::Inflector.inflections do |inflect|
|
6
6
|
# inflect.plural /^(ox)$/i, '\1en'
|
7
7
|
# inflect.singular /^(ox)en/i, '\1'
|
8
8
|
# inflect.irregular 'person', 'people'
|
9
|
+
inflect.irregular 'reserve', 'reserves'
|
9
10
|
# inflect.uncountable %w( fish sheep )
|
10
|
-
|
11
|
-
#
|
12
|
-
# These inflection rules are supported but not enabled by default:
|
13
|
-
# ActiveSupport::Inflector.inflections do |inflect|
|
14
|
-
# inflect.acronym 'RESTful'
|
15
|
-
# end
|
11
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
class CreateCheckins < ActiveRecord::Migration
|
2
|
+
def self.up
|
3
|
+
create_table :checkins do |t|
|
4
|
+
t.integer :item_id, :null => false
|
5
|
+
t.integer :librarian_id
|
6
|
+
t.integer :basket_id
|
7
|
+
t.timestamps
|
8
|
+
end
|
9
|
+
add_index :checkins, :item_id
|
10
|
+
add_index :checkins, :librarian_id
|
11
|
+
add_index :checkins, :basket_id
|
12
|
+
end
|
13
|
+
|
14
|
+
def self.down
|
15
|
+
drop_table :checkins
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
class CreateReserves < ActiveRecord::Migration
|
2
|
+
def self.up
|
3
|
+
create_table :reserves do |t|
|
4
|
+
t.integer :user_id, :null => false
|
5
|
+
t.integer :manifestation_id, :null => false
|
6
|
+
t.integer :item_id
|
7
|
+
t.integer :request_status_type_id, :null => false
|
8
|
+
t.datetime :checked_out_at
|
9
|
+
t.timestamps
|
10
|
+
t.datetime :canceled_at
|
11
|
+
t.datetime :expired_at
|
12
|
+
t.datetime :deleted_at
|
13
|
+
t.string :state
|
14
|
+
t.boolean :expiration_notice_to_patron, :default => false
|
15
|
+
t.boolean :expiration_notice_to_library, :default => false
|
16
|
+
end
|
17
|
+
|
18
|
+
add_index :reserves, :user_id
|
19
|
+
add_index :reserves, :manifestation_id
|
20
|
+
add_index :reserves, :item_id
|
21
|
+
add_index :reserves, :request_status_type_id
|
22
|
+
end
|
23
|
+
|
24
|
+
def self.down
|
25
|
+
drop_table :reserves
|
26
|
+
end
|
27
|
+
end
|