OSDN Git Service

'sync'
[pettanr/pettanr.git] / spec / controllers / stories_controller_spec.rb
1 # -*- encoding: utf-8 -*-
2 require 'spec_helper'
3 #ストーリー
4 describe StoriesController do
5
6   describe '閲覧に於いて' do
7     before do
8       @comic = Factory :comic, :author_id => @user.author.id
9       Comic.stub(:show).and_return(@comic)
10       sign_in @user
11     end
12     context '事前チェックする' do
13       before do
14         Panel.stub(:count).and_return(10)
15       end
16       it '与えられたoffsetがセットされている' do
17         get :play, :id => @comic.id, :offset => 7
18         assigns(:offset).should eq 7
19       end
20       it '省略されると@offsetに0値が入る' do
21         get :play, :id => @comic.id
22         assigns(:offset).should eq 0
23       end
24       it 'コマ数以上が与えられるとコマ数-1が入る' do
25         get :play, :id => @comic.id, :offset => 10
26         assigns(:offset).should eq 9
27       end
28       it '負の値が与えられると末尾(コマ数)からさかのぼった値が入る' do
29         get :play, :id => @comic.id, :offset => -3
30         assigns(:offset).should eq 7
31       end
32       it 'コマ数以上の負の値が与えられると計算できないので0値が入る' do
33         get :play, :id => @comic.id, :offset => -13
34         assigns(:offset).should eq 0
35       end
36       it '与えられたcountがセットされている' do
37         get :play, :id => @comic.id, :count => 18
38         assigns(:panel_count).should eq 18
39       end
40       it '省略されると@countにデフォルト値が入る' do
41         get :play, :id => @comic.id
42         assigns(:panel_count).should eq Comic.default_panel_size
43       end
44       it '最大を超えると@countにデフォルト最大値が入る' do
45         get :play, :id => @comic.id, :count => 1500
46         assigns(:panel_count).should eq Comic.max_panel_size
47       end
48       it '不正な値が入ると@countにデフォルト最大値が入る' do
49         get :play, :id => @comic.id, :page_size => 0
50         assigns(:panel_count).should eq Comic.default_panel_size
51       end
52     end
53     context 'つつがなく終わるとき' do
54       it 'ステータスコード200 OKを返す' do
55         get :play, :id => @comic.id
56         response.should be_success
57       end
58       it 'コミックモデルに単体取得を問い合わせている' do
59         Comic.should_receive(:show).exactly(1)
60         get :play, :id => @comic.id
61       end
62       it '@comicにアレを取得している' do
63         get :play, :id => @comic.id
64         assigns(:comic).id.should eq(@comic.id)
65       end
66       context 'html形式' do
67         it 'playテンプレートを描画する' do
68           get :play, :id => @comic.id
69           response.should render_template("play")
70         end
71       end
72       context 'json形式' do
73         it 'jsonデータを返す' do
74           get :play, :id => @comic.id, :format => :json
75           lambda{JSON.parse(response.body)}.should_not raise_error(JSON::ParserError)
76         end
77         it 'データがアレになっている' do
78           get :play, :id => @comic.id, :format => :json
79           json = JSON.parse response.body
80           json["title"].should match(/normal/)
81         end
82       end
83     end
84     context '作家権限がないとき' do
85       before do
86         sign_out @user
87       end
88       context 'html形式' do
89         it 'ステータスコード302 Foundを返す' do
90           get :play, :id => @comic.id
91           response.status.should eq 302
92         end
93         it 'サインインページへ遷移する' do
94           get :play, :id => @comic.id
95           response.body.should redirect_to '/users/sign_in'
96         end
97       end
98       context 'json形式' do
99         it 'ステータスコード401 Unauthorizedを返す' do
100           get :play, :id => @comic.id, :format => :json
101           response.status.should eq 401
102         end
103         it '応答メッセージにUnauthorizedを返す' do
104           get :play, :id => @comic.id, :format => :json
105           response.message.should match(/Unauthorized/)
106         end
107       end
108     end
109   end
110
111 end