1 # -*- encoding: utf-8 -*-
5 describe BalloonsController do
7 @admin = FactoryGirl.create :admin
8 @user = FactoryGirl.create( :user_yas)
9 @author = FactoryGirl.create :author, :user_id => @user.id
10 @artist = FactoryGirl.create :artist_yas, :author_id => @author.id
11 @sp = FactoryGirl.create :system_picture
12 @lg = FactoryGirl.create :license_group
13 @license = FactoryGirl.create :license, :license_group_id => @lg.id, :system_picture_id => @sp.id
15 @speech_balloon_template = FactoryGirl.create :speech_balloon_template, "name" => "circle@pettan.com", "classname" => "CircleSpeechBalloon", "caption" => "cc", "system_picture_id" => @sp.id, "settings" => '{}'
16 @writing_format = FactoryGirl.create :writing_format
17 @panel = FactoryGirl.create :panel, :author_id => @author.id
20 if MagicNumber['run_mode'] == 1
21 describe '一覧表示に於いて' do
23 @sb = FactoryGirl.build :speech_balloon, :panel_id => @panel.id, :speech_balloon_template_id => @speech_balloon_template.id
24 @speech = @sb.build_speech(
25 FactoryGirl.attributes_for(:speech, :writing_format_id => @writing_format.id)
27 @balloon = @sb.build_balloon(
28 FactoryGirl.attributes_for(:balloon, :system_picture_id => @sp.id)
33 Balloon.stub(:list).and_return([@balloon, @balloon, @balloon])
35 context 'パラメータpageについて' do
37 get :index, :page => 5
38 assigns(:page).should eq 5
40 it '省略されると@pageに1値が入る' do
42 assigns(:page).should eq 1
44 it '与えられたpage_sizeがセットされている' do
45 get :index, :page_size => 15
46 assigns(:page_size).should eq 15
48 it '省略されると@page_sizeにデフォルト値が入る' do
50 assigns(:page_size).should eq Balloon.default_page_size
52 it '最大を超えると@page_sizeにデフォルト最大値が入る' do
53 get :index, :page_size => 1500
54 assigns(:page_size).should eq Balloon.max_page_size
56 it '不正な値が入ると@page_sizeにデフォルト最大値が入る' do
57 get :index, :page_size => 0
58 assigns(:page_size).should eq Balloon.default_page_size
61 context 'つつがなく終わるとき' do
62 it 'ステータスコード200 OKを返す' do
64 response.should be_success
66 it 'フキダシ枠モデルに一覧を問い合わせている' do
67 Balloon.should_receive(:list).exactly(1)
70 it '@balloonsにリストを取得している' do
72 assigns(:balloons).should have_at_least(3).items
75 it 'indexテンプレートを描画する' do
77 response.should render_template("index")
82 get :index, :format => :json
83 lambda{JSON.parse(response.body)}.should_not raise_error(JSON::ParserError)
85 it 'フキダシ枠モデルにjson一覧出力オプションを問い合わせている' do
86 Balloon.should_receive(:list_json_opt).exactly(1)
87 get :index, :format => :json
89 it 'データがリスト構造になっている' do
90 get :index, :format => :json
91 json = JSON.parse response.body
92 json.should have_at_least(3).items
94 it 'リストの先頭くらいはフキダシ枠っぽいものであって欲しい' do
95 get :index, :format => :json
96 json = JSON.parse response.body
97 json.first.has_key?("speech_balloon_id").should be_true
98 json.first.has_key?("x").should be_true
99 json.first.has_key?("system_picture_id").should be_true
103 context 'ユーザ権限がないとき' do
108 it 'ステータスコード302 Foundを返す' do
110 response.status.should eq 302
112 it 'サインインページへ遷移する' do
114 response.should redirect_to '/users/sign_in'
118 it 'ステータスコード401 Unauthorizedを返す' do
119 get :index, :format => :json
120 response.status.should eq 401
122 it '応答メッセージにUnauthorizedを返す' do
123 get :index, :format => :json
124 response.message.should match(/Unauthorized/)
128 context 'ユーザ権限はないが管理者権限があるとき' do
133 it 'ステータスコード200 OKを返す' do
135 response.should be_success
138 context 'ユーザだが作家登録していないとき' do
142 it 'ステータスコード200 OKを返す' do
144 response.should be_success
149 describe '単体表示に於いて' do
152 @sb = FactoryGirl.build :speech_balloon, :panel_id => @panel.id, :speech_balloon_template_id => @speech_balloon_template.id
153 @speech = @sb.build_speech(
154 FactoryGirl.attributes_for(:speech, :writing_format_id => @writing_format.id)
156 @balloon = @sb.build_balloon(
157 FactoryGirl.attributes_for(:balloon, :system_picture_id => @sp.id)
161 Balloon.stub(:show).and_return(@balloon)
163 context 'つつがなく終わるとき' do
164 it 'ステータスコード200 OKを返す' do
165 get :show, :id => @balloon.id
166 response.should be_success
168 it 'フキダシ枠モデルに単体取得を問い合わせている' do
169 Balloon.should_receive(:show).exactly(1)
172 it '@balloonにアレを取得している' do
173 get :show, :id => @balloon.id
174 assigns(:balloon).should eq(@balloon)
177 it 'showテンプレートを描画する' do
178 get :show, :id => @balloon.id
179 response.should render_template("show")
184 get :show, :id => @balloon.id, :format => :json
185 lambda{JSON.parse(response.body)}.should_not raise_error(JSON::ParserError)
187 it 'フキダシ枠モデルにjson単体出力オプションを問い合わせている' do
188 Balloon.should_receive(:show_json_opt).exactly(1)
189 get :show, :id => @balloon.id, :format => :json
192 get :show, :id => @balloon.id, :format => :json
193 json = JSON.parse response.body
194 json["speech_balloon_id"].should_not be_nil
195 json["x"].should_not be_nil
196 json["system_picture_id"].should_not be_nil
200 context 'ユーザ権限がないとき' do
205 it 'ステータスコード302 Foundを返す' do
206 get :show, :id => @balloon.id
207 response.status.should eq 302
209 it 'サインインページへ遷移する' do
210 get :show, :id => @balloon.id
211 response.body.should redirect_to '/users/sign_in'
215 it 'ステータスコード401 Unauthorizedを返す' do
216 get :show, :id => @balloon.id, :format => :json
217 response.status.should eq 401
219 it '応答メッセージにUnauthorizedを返す' do
220 get :show, :id => @balloon.id, :format => :json
221 response.message.should match(/Unauthorized/)
225 context 'ユーザ権限はないが管理者権限があるとき' do
230 it 'ステータスコード200 OKを返す' do
231 get :show, :id => @balloon.id
232 response.should be_success
235 context 'ユーザだが作家登録していないとき' do
239 it 'ステータスコード200 OKを返す' do
240 get :show, :id => @balloon.id
241 response.should be_success
247 describe '一覧表示に於いて' do
249 @sb = FactoryGirl.build :speech_balloon, :panel_id => @panel.id, :speech_balloon_template_id => @speech_balloon_template.id
250 @speech = @sb.build_speech(
251 FactoryGirl.attributes_for(:speech, :writing_format_id => @writing_format.id)
253 @balloon = @sb.build_balloon(
254 FactoryGirl.attributes_for(:balloon, :system_picture_id => @sp.id)
259 Balloon.stub(:list).and_return([@balloon, @balloon, @balloon])
261 context 'つつがなく終わるとき' do
262 it 'ステータスコード200 OKを返す' do
264 response.should be_success
267 it 'indexテンプレートを描画する' do
269 response.should render_template("index")
274 get :index, :format => :json
275 lambda{JSON.parse(response.body)}.should_not raise_error(JSON::ParserError)
279 context 'ユーザ権限がないとき' do
283 it 'ステータスコード200 OKを返す' do
285 response.should be_success
288 it 'indexテンプレートを描画する' do
290 response.should render_template("index")
295 get :index, :format => :json
296 lambda{JSON.parse(response.body)}.should_not raise_error(JSON::ParserError)
302 describe '単体表示に於いて' do
305 @sb = FactoryGirl.build :speech_balloon, :panel_id => @panel.id, :speech_balloon_template_id => @speech_balloon_template.id
306 @speech = @sb.build_speech(
307 FactoryGirl.attributes_for(:speech, :writing_format_id => @writing_format.id)
309 @balloon = @sb.build_balloon(
310 FactoryGirl.attributes_for(:balloon, :system_picture_id => @sp.id)
314 Balloon.stub(:show).and_return(@balloon)
316 context 'つつがなく終わるとき' do
317 it 'ステータスコード200 OKを返す' do
318 get :show, :id => @balloon.id
319 response.should be_success
322 it 'showテンプレートを描画する' do
323 get :show, :id => @balloon.id
324 response.should render_template("show")
329 get :show, :id => @balloon.id, :format => :json
330 lambda{JSON.parse(response.body)}.should_not raise_error(JSON::ParserError)
334 context 'ユーザ権限がないとき' do
338 it 'ステータスコード200 OKを返す' do
339 get :show, :id => @balloon.id
340 response.should be_success
343 it 'showテンプレートを描画する' do
344 get :show, :id => @balloon.id
345 response.should render_template("show")
350 get :show, :id => @balloon.id, :format => :json
351 lambda{JSON.parse(response.body)}.should_not raise_error(JSON::ParserError)