OSDN Git Service

t#29312:any update
[pettanr/pettanr.git] / spec / models / ground_color_spec.rb
1 # -*- encoding: utf-8 -*-
2 require 'spec_helper'
3 #コマの背景間接
4
5 describe GroundColor do
6   before do
7     FactoryGirl.create :admin
8     @user = FactoryGirl.create( :user_yas)
9     @author = @user.author
10     @artist = FactoryGirl.create :artist_yas, :author_id => @author.id
11     @other_user = FactoryGirl.create( :user_yas)
12     @other_author = @other_user.author
13     @other_artist = FactoryGirl.create :artist_yas, :author_id => @other_author.id
14     @sp = FactoryGirl.create :system_picture
15     @lg = FactoryGirl.create :license_group
16     @license = FactoryGirl.create :license, :license_group_id => @lg.id, :system_picture_id => @sp.id
17     @op = FactoryGirl.create :original_picture, :artist_id => @artist.id
18     @p = FactoryGirl.create :picture, :original_picture_id => @op.id, :license_id => @license.id, :artist_id => @artist.id
19     @rp = FactoryGirl.create :resource_picture, :artist_id => @artist.id, :license_id => @license.id, :original_picture_id => @op.id, :picture_id => @p.id
20     @panel = FactoryGirl.create :panel, :author_id => @author.id
21     @color = FactoryGirl.create :color
22   end
23   
24   describe '検証に於いて' do
25     before do
26       @gc = FactoryGirl.build :ground_color, :panel_id => @panel.id, :color_id => @color.id
27     end
28     it 'オーソドックスなデータなら通る' do
29       @gc.save
30       @gc.should be_valid
31     end
32     
33     context 'panel_idを検証するとき' do
34       #ネストの保存はnilを許可しなければならないので数値チェックだけ
35       it 'テストデータの確認' do
36         @gc.panel_id = @panel.id
37         @gc.should be_valid
38       end
39       it '数値でなければ失敗する' do
40         @gc.panel_id = 'a'
41         @gc.should_not be_valid
42       end
43     end
44     context 'color_idを検証するとき' do
45       it 'テストデータの確認' do
46         @gc.color_id = @color.id
47         @gc.should be_valid
48       end
49       it 'nullなら失敗する' do
50         @gc.color_id = nil
51         @gc.should_not be_valid
52       end
53       it '数値でなければ失敗する' do
54         @gc.color_id = 'a'
55         @gc.should_not be_valid
56       end
57       it '存在する実素材でなければ失敗する' do
58         @gc.color_id = 0
59         @gc.should_not be_valid
60       end
61     end
62     context 'zを検証するとき' do
63       it 'テストデータの確認' do
64         @gc.z = 1
65         @gc.should be_valid
66       end
67       it 'nullなら失敗する' do
68         @gc.z = nil
69         @gc.should_not be_valid
70       end
71       it '数値でなければ失敗する' do
72         @gc.z = 'a'
73         @gc.should_not be_valid
74       end
75       it '負なら失敗する' do
76         @gc.z = -1
77         @gc.should_not be_valid
78       end
79       it '負なら失敗する' do
80         @gc.z = 0
81         @gc.should_not be_valid
82       end
83     end
84   end
85   describe '一覧取得に於いて' do
86     before do
87       @gc = FactoryGirl.create :ground_color, :panel_id => @panel.id, :color_id => @color.id
88     end
89     context 'page補正について' do
90       it '文字列から数値に変換される' do
91         GroundColor.page('8').should eq 8
92       end
93       it 'nilの場合は1になる' do
94         GroundColor.page().should eq 1
95       end
96       it '0以下の場合は1になる' do
97         GroundColor.page('0').should eq 1
98       end
99     end
100     context 'page_size補正について' do
101       it '文字列から数値に変換される' do
102         GroundColor.page_size('7').should eq 7
103       end
104       it 'nilの場合はGroundColor.default_page_sizeになる' do
105         GroundColor.page_size().should eq GroundColor.default_page_size
106       end
107       it '0以下の場合はGroundColor.default_page_sizeになる' do
108         GroundColor.page_size('0').should eq GroundColor.default_page_size
109       end
110       it 'GroundColor.max_page_sizeを超えた場合はGroundColor.max_page_sizeになる' do
111         GroundColor.page_size('1000').should eq GroundColor.max_page_size
112       end
113     end
114     it 'リストを返す' do
115       pl = GroundColor.list
116       pl.should eq [@gc]
117     end
118     it '時系列で並んでいる' do
119       npl = FactoryGirl.create :ground_color, :panel_id => @panel.id, :color_id => @color.id, :z => 2, :updated_at => Time.now + 100
120       pl = GroundColor.list
121       pl.should eq [npl, @gc]
122     end
123     it '非公開のコマの景色は含まない' do
124       hpl = FactoryGirl.create :panel, :author_id => @author.id, :publish => 0
125       npl = FactoryGirl.create :ground_color, :panel_id => hpl.id, :color_id => @color.id, :updated_at => Time.now + 100
126       pl = GroundColor.list
127       pl.should eq [@gc]
128     end
129     context 'DBに5件あって1ページの件数を2件に変えたとして' do
130       before do
131         @npl2 = FactoryGirl.create :ground_color, :panel_id => @panel.id, :z => 1, :color_id => @color.id, :updated_at => Time.now + 100
132         @npl3 = FactoryGirl.create :ground_color, :panel_id => @panel.id, :z => 2, :color_id => @color.id, :updated_at => Time.now + 200
133         @npl4 = FactoryGirl.create :ground_color, :panel_id => @panel.id, :z => 3, :color_id => @color.id, :updated_at => Time.now + 300
134         @npl5 = FactoryGirl.create :ground_color, :panel_id => @panel.id, :z => 4, :color_id => @color.id, :updated_at => Time.now + 400
135         GroundColor.stub(:default_page_size).and_return(2)
136       end
137       it '通常は2件を返す' do
138         pl = GroundColor.list
139         pl.should have(2).items 
140       end
141       it 'page=1なら末尾2件を返す' do
142         #時系列で並んでいる
143         pl = GroundColor.list( {}, 1)
144         pl.should eq [@npl5, @npl4]
145       end
146       it 'page=2なら中間2件を返す' do
147         pl = GroundColor.list({}, 2)
148         pl.should eq [@npl3, @npl2]
149       end
150       it 'page=3なら先頭1件を返す' do
151         pl = GroundColor.list({}, 3)
152         pl.should eq [@gc]
153       end
154     end
155   end
156   describe 'list関連テーブルプションに於いて' do
157     it 'includeキーを含んでいる' do
158       r = GroundColor.list_opt
159       r.has_key?(:include).should be_true
160     end
161     it '2つの項目を含んでいる' do
162       r = GroundColor.list_opt[:include]
163       r.should have(2).items
164     end
165     it 'コマを含んでいる' do
166       r = GroundColor.list_opt[:include]
167       r.has_key?(:panel).should be_true
168     end
169       it 'コマは作家を含んでいる' do
170         r = GroundColor.list_opt[:include]
171         r[:panel].has_key?(:author).should be_true
172       end
173     it '色を含んでいる' do
174       r = GroundColor.list_opt[:include]
175       r.has_key?(:color).should be_true
176     end
177   end
178   describe 'json一覧出力オプションに於いて' do
179     it 'includeキーを含んでいる' do
180       r = GroundColor.list_json_opt
181       r.has_key?(:include).should be_true
182     end
183     it '2つの項目を含んでいる' do
184       r = GroundColor.list_json_opt[:include]
185       r.should have(2).items
186     end
187     it 'コマを含んでいる' do
188       r = GroundColor.list_json_opt[:include]
189       r.has_key?(:panel).should be_true
190     end
191       it 'コマは作家を含んでいる' do
192         r = GroundColor.list_json_opt[:include]
193         r[:panel].has_key?(:author).should be_true
194       end
195     it '色を含んでいる' do
196       r = GroundColor.list_json_opt[:include]
197       r.has_key?(:color).should be_true
198     end
199   end
200   
201   describe '自分のコマで使った色一覧取得に於いて' do
202     before do
203       @gc = FactoryGirl.create :ground_color, :panel_id => @panel.id, :color_id => @color.id
204     end
205     it 'リストを返す' do
206       pl = GroundColor.mylist @author
207       pl.should eq [@gc]
208     end
209     it '時系列で並んでいる' do
210       npl = FactoryGirl.create :ground_color, :panel_id => @panel.id, :color_id => @color.id, :z => 2, :updated_at => Time.now + 100
211       pl = GroundColor.mylist @author
212       pl.should eq [npl, @gc]
213     end
214     it '他人のコマの景色は公開でも含まない' do
215       hpl = FactoryGirl.create :panel, :author_id => @other_author.id, :publish => 1
216       npl = FactoryGirl.create :ground_color, :panel_id => hpl.id, :color_id => @color.id
217       pl = GroundColor.mylist @author
218       pl.should eq [@gc]
219     end
220   end
221   
222 end