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.
Files changed (105) hide show
  1. checksums.yaml +4 -4
  2. data/app/controllers/baskets_controller.rb +109 -0
  3. data/app/views/baskets/edit.html.erb +30 -0
  4. data/app/views/baskets/index.html.erb +31 -0
  5. data/app/views/baskets/new.html.erb +29 -0
  6. data/app/views/baskets/show.html.erb +23 -0
  7. data/lib/enju_library/version.rb +1 -1
  8. data/spec/controllers/baskets_controller_spec.rb +379 -0
  9. data/spec/dummy/config/initializers/inflections.rb +3 -7
  10. data/spec/dummy/db/migrate/032_create_checkins.rb +17 -0
  11. data/spec/dummy/db/migrate/035_create_reserves.rb +27 -0
  12. data/spec/dummy/db/migrate/113_create_events.rb +23 -0
  13. data/spec/dummy/db/migrate/114_create_event_categories.rb +16 -0
  14. data/spec/dummy/db/migrate/121_create_checked_items.rb +17 -0
  15. data/spec/dummy/db/migrate/127_create_use_restrictions.rb +16 -0
  16. data/spec/dummy/db/migrate/129_create_item_has_use_restrictions.rb +16 -0
  17. data/spec/dummy/db/migrate/149_create_message_templates.rb +18 -0
  18. data/spec/dummy/db/migrate/154_create_messages.rb +24 -0
  19. data/spec/dummy/db/migrate/20080819181903_create_message_requests.rb +20 -0
  20. data/spec/dummy/db/migrate/20081028093607_create_event_import_files.rb +27 -0
  21. data/spec/dummy/db/migrate/20081030023615_create_carrier_type_has_checkout_types.rb +18 -0
  22. data/spec/dummy/db/migrate/20081212075554_create_checkout_stat_has_manifestations.rb +17 -0
  23. data/spec/dummy/db/migrate/20081212080038_create_manifestation_checkout_stats.rb +16 -0
  24. data/spec/dummy/db/migrate/20081215094302_create_user_checkout_stats.rb +16 -0
  25. data/spec/dummy/db/migrate/20081215094955_create_checkout_stat_has_users.rb +17 -0
  26. data/spec/dummy/db/migrate/20081216190517_create_reserve_stat_has_manifestations.rb +17 -0
  27. data/spec/dummy/db/migrate/20081216190724_create_manifestation_reserve_stats.rb +16 -0
  28. data/spec/dummy/db/migrate/20081220023628_create_user_reserve_stats.rb +16 -0
  29. data/spec/dummy/db/migrate/20081220034117_create_reserve_stat_has_users.rb +17 -0
  30. data/spec/dummy/db/migrate/20090321130448_add_completed_at_to_user_checkout_stat.rb +27 -0
  31. data/spec/dummy/db/migrate/20090519203307_create_participates.rb +17 -0
  32. data/spec/dummy/db/migrate/20090831220301_create_lending_policies.rb +21 -0
  33. data/spec/dummy/db/migrate/20100925074639_create_event_import_results.rb +15 -0
  34. data/spec/dummy/db/migrate/20110301134521_add_expire_date_to_reserve.rb +9 -0
  35. data/spec/dummy/db/migrate/20110621093332_remove_expire_date_from_reserve.rb +9 -0
  36. data/spec/dummy/db/migrate/20110913115320_add_lft_and_rgt_to_message.rb +11 -0
  37. data/spec/dummy/db/migrate/20111217234412_add_save_checkout_history_to_user.rb +5 -0
  38. data/spec/dummy/db/migrate/20111218002349_add_checkout_icalendar_token_to_user.rb +6 -0
  39. data/spec/dummy/db/migrate/20120125050502_add_depth_to_message.rb +6 -0
  40. data/spec/dummy/db/migrate/20120413051535_add_event_import_fingerprint_to_event_import_file.rb +5 -0
  41. data/spec/dummy/db/migrate/20120413170734_add_error_message_to_event_import_file.rb +5 -0
  42. data/spec/dummy/db/migrate/20120415060342_rename_event_import_file_imported_at_to_executed_at.rb +9 -0
  43. data/spec/dummy/db/migrate/20120424103932_add_librarian_id_to_checked_item.rb +5 -0
  44. data/spec/dummy/db/migrate/20130303104849_add_state_index_to_reserve.rb +5 -0
  45. data/spec/dummy/db/migrate/20130303124821_add_retained_at_to_reserve.rb +5 -0
  46. data/spec/dummy/db/migrate/20130304015019_add_postponed_at_to_reserve.rb +5 -0
  47. data/spec/dummy/db/migrate/20130519065638_add_lock_version_to_reserve.rb +5 -0
  48. data/spec/dummy/db/migrate/20130519065837_add_lock_version_to_checkin.rb +5 -0
  49. data/spec/dummy/db/schema.rb +393 -83
  50. data/spec/dummy/db/test.sqlite3 +0 -0
  51. data/spec/dummy/solr/conf/schema.xml +15 -2
  52. data/spec/dummy/solr/data/test/index/_2w.tis +0 -0
  53. data/spec/dummy/solr/data/test/index/segments.gen +0 -0
  54. data/spec/dummy/solr/data/test/index/{segments_18r → segments_6n} +0 -0
  55. data/spec/dummy/solr/data/test/spellchecker/segments_1 +0 -0
  56. data/spec/dummy/tmp/cache/assets/test/sprockets/169f4ead801f350c94685db6343b613a +0 -0
  57. data/spec/dummy/tmp/cache/assets/test/sprockets/254f2ef29215d4091bfe5949fe8f725f +0 -0
  58. data/spec/dummy/tmp/cache/assets/test/sprockets/5c6c9015e14271822fcfdcce5fca127d +0 -0
  59. data/spec/dummy/tmp/cache/assets/test/sprockets/82147708959cf940a0db9210985926fd +0 -0
  60. data/spec/dummy/tmp/cache/assets/test/sprockets/b216037296f015f88a15e209c81fe1d3 +0 -0
  61. data/spec/dummy/tmp/cache/assets/test/sprockets/bbe2834cdae4786a530e40e14f846805 +0 -0
  62. data/spec/dummy/tmp/cache/assets/test/sprockets/c60042eb39c8ef7a95f8926ca5648a9d +0 -0
  63. data/spec/dummy/tmp/cache/assets/test/sprockets/d005c609dd44fbca49a45a652887a53d +0 -0
  64. data/spec/fixtures/agent_types.yml +35 -0
  65. data/spec/fixtures/agents.yml +338 -0
  66. data/spec/fixtures/carrier_type_has_checkout_types.yml +31 -0
  67. data/spec/fixtures/checked_items.yml +35 -0
  68. data/spec/fixtures/checkins.yml +55 -0
  69. data/spec/fixtures/checkout_stat_has_manifestations.yml +24 -0
  70. data/spec/fixtures/checkout_stat_has_users.yml +24 -0
  71. data/spec/fixtures/circulation_statuses.yml +14 -0
  72. data/spec/fixtures/event_categories.yml +55 -0
  73. data/spec/fixtures/events.yml +142 -0
  74. data/spec/fixtures/exemplifies.yml +19 -11
  75. data/spec/fixtures/item_has_use_restrictions.yml +61 -0
  76. data/spec/fixtures/items.yml +80 -9
  77. data/spec/fixtures/lending_policies.yml +99 -0
  78. data/spec/fixtures/libraries.yml +27 -25
  79. data/spec/fixtures/library_groups.yml +20 -20
  80. data/spec/fixtures/manifestation_checkout_stats.yml +31 -0
  81. data/spec/fixtures/manifestation_reserve_stats.yml +31 -0
  82. data/spec/fixtures/manifestations.yml +2 -137
  83. data/spec/fixtures/message_requests.yml +30 -0
  84. data/spec/fixtures/message_templates.yml +84 -0
  85. data/spec/fixtures/request_status_types.yml +4 -4
  86. data/spec/fixtures/request_types.yml +4 -4
  87. data/spec/fixtures/reserve_stat_has_manifestations.yml +24 -0
  88. data/spec/fixtures/reserve_stat_has_users.yml +24 -0
  89. data/spec/fixtures/reserves.yml +179 -0
  90. data/spec/fixtures/shelves.yml +6 -7
  91. data/spec/fixtures/use_restrictions.yml +93 -0
  92. data/spec/fixtures/user_checkout_stats.yml +31 -0
  93. data/spec/fixtures/user_group_has_checkout_types.yml +111 -0
  94. data/spec/fixtures/user_reserve_stats.yml +31 -0
  95. data/spec/fixtures/users.yml +14 -37
  96. data/spec/routing/baskets_routing_spec.rb +35 -0
  97. metadata +173 -26
  98. data/spec/dummy/solr/data/test/index/_j7.tis +0 -0
  99. /data/spec/dummy/solr/data/test/index/{_j7.fdt → _2w.fdt} +0 -0
  100. /data/spec/dummy/solr/data/test/index/{_j7.fdx → _2w.fdx} +0 -0
  101. /data/spec/dummy/solr/data/test/index/{_j7.fnm → _2w.fnm} +0 -0
  102. /data/spec/dummy/solr/data/test/index/{_j7.frq → _2w.frq} +0 -0
  103. /data/spec/dummy/solr/data/test/index/{_j7.nrm → _2w.nrm} +0 -0
  104. /data/spec/dummy/solr/data/test/index/{_j7.prx → _2w.prx} +0 -0
  105. /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: a70963b9b78b60e24a7d5c7a68a1f5d5fbdfa5b7
4
- data.tar.gz: f0b5e158c03b6738a3f6ecb8e1b0672c452af2f4
3
+ metadata.gz: 0f7cfde1b8e93b96eece03f7081b72857bf4eb80
4
+ data.tar.gz: 7b1f0907c2ae67df9027d8b2c1c5e4e804d33fdc
5
5
  SHA512:
6
- metadata.gz: b9cc71c94baef4a58ca58ae407601002b3a94d15e2dea0b21baccde24782763742ab9c996888a5cf1a3a5271873caa6596254a2465fbef5866005fe84b2eeb6e
7
- data.tar.gz: b6e7d2bbe8667c77fef544b3ea379c2fdd19d71c7096911838ede7f4d8638b75ded40621ae35639eee25612b61fef048ed5201b3df139a90786d44d918766744
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>
@@ -1,3 +1,3 @@
1
1
  module EnjuLibrary
2
- VERSION = "0.1.0.pre25"
2
+ VERSION = "0.1.0.pre26"
3
3
  end
@@ -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
- # ActiveSupport::Inflector.inflections do |inflect|
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
- # end
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