OSDN Git Service

t#29312:any update
[pettanr/pettanr.git] / spec / controllers / panel_colors_controller_spec.rb
1 # -*- encoding: utf-8 -*-
2 require 'spec_helper'
3 #コマの色背景
4
5 describe PanelColorsController do
6   before do
7     @admin = FactoryGirl.create :admin
8     @user = FactoryGirl.create( :user_yas)
9     @sp = FactoryGirl.create :system_picture
10     @lg = FactoryGirl.create :license_group, :name => 'peta'
11     @license = FactoryGirl.create :license, :license_group_id => @lg.id, :system_picture_id => @sp.id
12     @author = @user.author
13     @artist = FactoryGirl.create :artist_yas, :author_id => @author.id
14     @panel = FactoryGirl.create :panel, :author_id => @author.id
15   end
16
17   describe '一覧表示に於いて' do
18     before do
19       sign_in @user
20       @pc = FactoryGirl.create :panel_color, :panel_id => @panel.id
21       PanelColor.stub(:list).and_return([@pc, @pc, @pc])
22     end
23     context 'パラメータpageについて' do
24       it '@pageに値が入る' do
25         get :index, :page => 5
26         assigns(:page).should eq 5
27       end
28       it '省略されると@pageに1値が入る' do
29         get :index
30         assigns(:page).should eq 1
31       end
32       it '与えられたpage_sizeがセットされている' do
33         get :index, :page_size => 15
34         assigns(:page_size).should eq 15
35       end
36       it '省略されると@page_sizeにデフォルト値が入る' do
37         get :index
38         assigns(:page_size).should eq PanelColor.default_page_size
39       end
40       it '最大を超えると@page_sizeにデフォルト最大値が入る' do
41         get :index, :page_size => 1500
42         assigns(:page_size).should eq PanelColor.max_page_size
43       end
44       it '不正な値が入ると@page_sizeにデフォルト最大値が入る' do
45         get :index, :page_size => 0
46         assigns(:page_size).should eq PanelColor.default_page_size
47       end
48     end
49     context 'つつがなく終わるとき' do
50       it 'ステータスコード200 OKを返す' do
51         get :index
52         response.should be_success 
53       end
54       it '色背景モデルに一覧を問い合わせている' do
55         PanelColor.should_receive(:list).exactly(1)
56         get :index
57       end
58       it '@panel_colorsにリストを取得している' do
59         get :index
60         assigns(:panel_colors).should have_at_least(3).items
61       end
62       context 'html形式' do
63         it 'indexテンプレートを描画する' do
64           get :index
65           response.should render_template("index")
66         end
67       end
68       context 'json形式' do
69         it 'jsonデータを返す' do
70           get :index, :format => :json
71           lambda{JSON.parse(response.body)}.should_not raise_error(JSON::ParserError)
72         end
73         it 'データがリスト構造になっている' do
74           get :index, :format => :json
75           json = JSON.parse response.body
76           json.should have_at_least(3).items
77         end
78         it 'リストの先頭くらいは色背景っぽいものであって欲しい' do
79           get :index, :format => :json
80           json = JSON.parse response.body
81           json.first.has_key?("panel_id").should be_true
82           json.first.has_key?("code").should be_true
83           json.first.has_key?("z").should be_true
84         end
85       end
86     end
87     context '作家権限がないとき' do
88       before do
89         sign_out @user
90       end
91       context 'html形式' do
92         it 'ステータスコード302 Foundを返す' do
93           get :index
94           response.status.should eq 302
95         end
96         it 'サインインページへ遷移する' do
97           get :index
98           response.should redirect_to '/users/sign_in'
99         end
100       end
101       context 'json形式' do
102         it 'ステータスコード401 Unauthorizedを返す' do
103           get :index, :format => :json
104           response.status.should eq 401
105         end
106         it '応答メッセージにUnauthorizedを返す' do
107           get :index, :format => :json
108           response.message.should match(/Unauthorized/)
109         end
110       end
111     end
112   end
113   
114 end