X-Git-Url: http://git.osdn.net/view?p=pettanr%2Fpettanr.git;a=blobdiff_plain;f=spec%2Fcontrollers%2Fstories_controller_spec.rb;fp=spec%2Fcontrollers%2Fstories_controller_spec.rb;h=0000000000000000000000000000000000000000;hp=7e7a4d48af69aa9808972d2cca04249637ea4af5;hb=305f415a00ff3da658a5ee77cf966e7f76f8230f;hpb=000b5d5ef4f3cf02793ae6a06855b7bd3cd9a78f diff --git a/spec/controllers/stories_controller_spec.rb b/spec/controllers/stories_controller_spec.rb deleted file mode 100644 index 7e7a4d48..00000000 --- a/spec/controllers/stories_controller_spec.rb +++ /dev/null @@ -1,1456 +0,0 @@ -# -*- encoding: utf-8 -*- -require 'spec_helper' -#ストーリー -describe StoriesController do - before do - @admin = FactoryGirl.create :admin - @sp = FactoryGirl.create :system_picture - @lg = FactoryGirl.create :license_group - @license = FactoryGirl.create :license, :license_group_id => @lg.id, :system_picture_id => @sp.id - @user = FactoryGirl.create :user_yas - @author = FactoryGirl.create :author, :user_id => @user.id - @comic = FactoryGirl.create :comic, :author_id => @user.author.id - @panel = FactoryGirl.create :panel, :author_id => @author.id - end - -if MagicNumber['run_mode'] == 1 - describe '一覧表示に於いて' do - before do - sign_in @user - @story = FactoryGirl.create :story, :t => 0, :comic_id => @comic.id, :panel_id => @panel.id, :author_id => @author.id - Story.stub(:list).and_return([@story, @story, @story]) - end - context 'パラメータpageについて' do - it '@pageに値が入る' do - get :index, :page => 5 - assigns(:page).should eq 5 - end - it '省略されると@pageに1値が入る' do - get :index - assigns(:page).should eq 1 - end - it '与えられたpage_sizeがセットされている' do - get :index, :page_size => 15 - assigns(:page_size).should eq 15 - end - it '省略されると@page_sizeにデフォルト値が入る' do - get :index - assigns(:page_size).should eq Story.default_page_size - end - it '最大を超えると@page_sizeにデフォルト最大値が入る' do - get :index, :page_size => 1500 - assigns(:page_size).should eq Story.max_page_size - end - it '不正な値が入ると@page_sizeにデフォルト最大値が入る' do - get :index, :page_size => 0 - assigns(:page_size).should eq Story.default_page_size - end - end - context 'つつがなく終わるとき' do - it 'ステータスコード200 OKを返す' do - get :index - response.should be_success - end - it 'ストーリーモデルに一覧を問い合わせている' do - Story.should_receive(:list).exactly(1) - get :index - end - it '@storiesにリストを取得している' do - get :index - assigns(:stories).should have_at_least(3).items - end - context 'html形式' do - it '@paginateにページ制御を取得している' do - get :index - assigns(:paginate).is_a?(Kaminari::PaginatableArray).should be_true - end - it 'indexテンプレートを描画する' do - get :index - response.should render_template("index") - end - end - context 'json形式' do - it 'jsonデータを返す' do - get :index, :format => :json - lambda{JSON.parse(response.body)}.should_not raise_error(JSON::ParserError) - end - it 'ストーリーモデルにjson一覧出力オプションを問い合わせている' do - Story.should_receive(:list_json_opt).exactly(1) - get :index, :format => :json - end - it 'データがリスト構造になっている' do - get :index, :format => :json - json = JSON.parse response.body - json.should have_at_least(3).items - end - it 'リストの先頭くらいはストーリーっぽいものであって欲しい' do - get :index, :format => :json - json = JSON.parse response.body - json.first.has_key?("panel_id").should be_true - json.first.has_key?("comic_id").should be_true - json.first.has_key?("t").should be_true - end - end - end - context 'ユーザ権限がないとき' do - before do - sign_out @user - end - context 'html形式' do - it 'ステータスコード302 Foundを返す' do - get :index - response.status.should eq 302 - end - it 'サインインページへ遷移する' do - get :index - response.should redirect_to '/users/sign_in' - end - end - context 'json形式' do - it 'ステータスコード401 Unauthorizedを返す' do - get :index, :format => :json - response.status.should eq 401 - end - it '応答メッセージにUnauthorizedを返す' do - get :index, :format => :json - response.message.should match(/Unauthorized/) - end - end - end - context 'ユーザ権限はないが管理者権限があるとき' do - before do - sign_out @user - sign_in @admin - end - it 'ステータスコード200 OKを返す' do - get :index - response.should be_success - end - end - context 'ユーザだが作家登録していないとき' do - before do - @author.destroy - end - it 'ステータスコード200 OKを返す' do - get :index - response.should be_success - end - end - end - - describe '単体表示に於いて' do - before do - sign_in @user - @story = FactoryGirl.create :story, :t => 0, :comic_id => @comic.id, :panel_id => @panel.id, :author_id => @author.id - Comic.stub(:show).with(@comic.id.to_s, [@user, nil]).and_return(@comic) - Comic.stub(:show).with(@comic.id.to_s, [nil, @admin]).and_return(@comic) - Story.stub(:show).with(@story.id.to_s, [@user, nil]).and_return(@story) - Story.stub(:show).with(@story.id.to_s, [nil, @admin]).and_return(@story) - end - context 'つつがなく終わるとき' do - it 'ストーリーモデルに単体取得を問い合わせている' do - Story.should_receive(:show).with(@story.id.to_s, [@user, nil]).exactly(1) - get :show, :id => @story.id - end - it '@storyにアレを取得している' do - get :show, :id => @story.id - assigns(:story).should eq @story - end - context 'html形式' do - it 'ステータスコード200 OKを返す' do - get :show, :id => @story.id - response.should be_success - end - it 'showテンプレートを描画する' do - get :show, :id => @story.id - response.should render_template("show") - end - end - context 'json形式' do - it 'ステータスコード200 OKを返す' do - get :show, :id => @story.id, :format => :json - response.should be_success - end - it 'jsonデータを返す' do - get :show, :id => @story.id, :format => :json - lambda{JSON.parse(response.body)}.should_not raise_error(JSON::ParserError) - end - it 'ストーリーモデルにストーリーjson出力を問い合わせている' do - Story.any_instance.should_receive(:story_as_json).exactly(1) - get :show, :id => @story.id, :format => :json - end - it 'データがアレになっている' do - get :show, :id => @story.id, :format => :json - json = JSON.parse response.body - json.has_key?("panel_id").should be_true - json.has_key?("comic_id").should be_true - json.has_key?("author_id").should be_true - end - end - end - context 'ユーザ権限がないとき' do - before do - sign_out @user - end - context 'html形式' do - it 'ステータスコード302 Foundを返す' do - get :show, :id => @story.id - response.status.should eq 302 - end - it 'サインインページへ遷移する' do - get :show, :id => @story.id - response.body.should redirect_to '/users/sign_in' - end - end - context 'json形式' do - it 'ステータスコード401 Unauthorizedを返す' do - get :show, :id => @story.id, :format => :json - response.status.should eq 401 - end - it '応答メッセージにUnauthorizedを返す' do - get :show, :id => @story.id, :format => :json - response.message.should match(/Unauthorized/) - end - end - end - context 'ユーザ権限はないが管理者権限があるとき' do - before do - sign_out @user - sign_in @admin - end - it 'ステータスコード200 OKを返す' do - get :show, :id => @story.id - response.should be_success - end - end - context 'ユーザだが作家登録していないとき' do - before do - @author.destroy - end - it 'ステータスコード200 OKを返す' do - get :show, :id => @story.id - response.should be_success - end - end - end - - describe '閲覧に於いて' do - before do - @story = FactoryGirl.create :story, :t => 0, :comic_id => @comic.id, :panel_id => @panel.id, :author_id => @author.id - Comic.stub(:show).with(@comic.id.to_s, [@user, nil]).and_return(@comic) - Comic.stub(:show).with(@comic.id.to_s, [nil, @admin]).and_return(@comic) - Story.stub(:count).and_return(10) - Story.stub(:play_list).with(any_args).and_return([@story, @story, @story]) - sign_in @user - end - context 'パラメータチェックする' do - it '与えられたoffsetがセットされている' do - get :comic, :id => @comic.id, :offset => 5 - assigns(:offset).should eq 5 - end - it '省略されると@offsetに0値が入る' do - get :comic, :id => @comic.id - assigns(:offset).should eq 0 - end - it '与えられたcountがセットされている' do - get :comic, :id => @comic.id, :count => 4 - assigns(:panel_count).should eq 4 - end - it '省略されると@panel_countにデフォルト値が入る' do - get :comic, :id => @comic.id - assigns(:panel_count).should eq Story.default_panel_size - end - it '最大を超えると@panel_countにデフォルト最大値が入る' do - get :comic, :id => @comic.id, :count => 1500 - assigns(:panel_count).should eq Story.max_panel_size - end - it '不正な値が入ると@panel_countにデフォルト最大値が入る' do - get :comic, :id => @comic.id, :count => -1 - assigns(:panel_count).should eq Story.default_panel_size - end - end - context '事前チェックする' do - it 'コミックモデルに単体取得を問い合わせている' do - Comic.should_receive(:show).with(@comic.id.to_s, [@user, nil]).exactly(1) - get :comic, :id => @comic.id - end - it 'ストーリーモデルにプレイリスト取得を問い合わせている' do - Story.should_receive(:play_list).with(@comic, @author, 0, 30).exactly(1) - get :comic, :id => @comic.id - end - end - context 'つつがなく終わるとき' do - it '@storiesにリストを取得している' do - get :comic, :id => @comic.id - assigns(:stories).should have_at_least(3).items - end - context 'html形式' do - it 'ステータスコード200 OKを返す' do - get :comic, :id => @comic.id - response.should be_success - end - it 'comicテンプレートを描画する' do - get :comic, :id => @comic.id - response.should render_template("comic") - end - end - context 'json形式' do - it 'ステータスコード200 OKを返す' do - get :comic, :id => @comic.id, :format => :json - response.should be_success - end - it 'jsonデータを返す' do - get :comic, :id => @comic.id, :format => :json - lambda{JSON.parse(response.body)}.should_not raise_error(JSON::ParserError) - end - it 'ストーリーモデルにストーリーリストのjson出力を問い合わせている' do - Story.should_receive(:list_as_json_text).exactly(1) - get :comic, :id => @comic.id, :format => :json - end - it 'データがリスト構造になっている' do - get :comic, :id => @comic.id, :format => :json - json = JSON.parse response.body - json.should have_at_least(3).items - end - it 'リストの先頭くらいはストーリーっぽいものであって欲しい' do - get :comic, :id => @comic.id, :format => :json - json = JSON.parse response.body - json.first.has_key?("panel_id").should be_true - json.first.has_key?("comic_id").should be_true - json.first.has_key?("author_id").should be_true - end - end - end - context 'ユーザ権限がないとき' do - before do - sign_out @user - end - context 'html形式' do - it 'ステータスコード302 Foundを返す' do - get :comic, :id => @comic.id - response.status.should eq 302 - end - it 'サインインページへ遷移する' do - get :comic, :id => @comic.id - response.should redirect_to '/users/sign_in' - end - end - context 'json形式' do - it 'ステータスコード401 Unauthorizedを返す' do - get :comic, :id => @comic.id, :format => :json - response.status.should eq 401 - end - it '応答メッセージにUnauthorizedを返す' do - get :comic, :id => @comic.id, :format => :json - response.message.should match(/Unauthorized/) - end - end - end - context 'ユーザ権限はないが管理者権限があるとき' do - before do - sign_out @user - sign_in @admin - end - it 'ステータスコード200 OKを返す' do - get :comic, :id => @comic.id - response.should be_success - end - end - context 'ユーザだが作家登録していないとき' do - before do - @author.destroy - end - it 'ステータスコード200 OKを返す' do - get :comic, :id => @comic.id - response.should be_success - end - end - end - - describe '新規作成フォーム表示に於いて' do - before do - sign_in @user - end - context 'つつがなく終わるとき' do - it '@storyに新規データを用意している' do - get :new - assigns(:story).should be_a_new(Story) - end - it 'モデルにデフォルト値補充を依頼している' do - Story.any_instance.should_receive(:supply_default).exactly(1) - get :new - end - context 'html形式' do - it 'ステータスコード200 OKを返す' do - get :new - response.should be_success - end - it 'newテンプレートを描画する' do - get :new - response.should render_template("new") - end - end - context 'js形式' do - it 'ステータスコード200 OKを返す' do - get :new, :format => :js - response.should be_success - end - it 'new.jsテンプレートを描画する' do - get :new, :format => :js - response.should render_template("new") - end - end - context 'json形式' do - it 'ステータスコード200 OKを返す' do - get :new, :format => :json - response.should be_success - end - it 'jsonデータを返す' do - get :new, :format => :json - lambda{JSON.parse(response.body)}.should_not raise_error(JSON::ParserError) - end - it 'ストーリーモデルのストーリーのjson出力を問い合わせている' do - Story.any_instance.should_receive(:story_as_json).exactly(1) - get :new, :format => :json - end - it 'データがアレになっている' do - get :new, :format => :json - json = JSON.parse response.body - json.has_key?("panel_id").should be_true - json.has_key?("comic_id").should be_true - json.has_key?("author_id").should be_true - end - end - end - context 'ユーザ権限がないとき' do - before do - sign_out @user - end - context 'html形式' do - it 'ステータスコード302 Foundを返す' do - get :new - response.status.should eq 302 - end - it 'サインインページへ遷移する' do - get :new - response.body.should redirect_to '/users/sign_in' - end - end - context 'json形式' do - it 'ステータスコード401 Unauthorizedを返す' do - get :new, :format => :json - response.status.should eq 401 - end - it '応答メッセージにUnauthorizedを返す' do - get :new, :format => :json - response.message.should match(/Unauthorized/) - end - end - end - context 'ユーザ権限はないが管理者権限があるとき' do - before do - sign_out @user - sign_in @admin - end - context 'html形式' do - it 'ステータスコード302 Foundを返す' do - get :new - response.status.should eq 302 - end - it 'サインインページへ遷移する' do - get :new - response.body.should redirect_to '/users/sign_in' - end - end - end - context 'ユーザだが作家登録していないとき' do - before do - @author.destroy - end - context 'html形式' do - it 'ステータスコード302 Foundを返す' do - get :new - response.status.should eq 302 - end - it '作家登録ページへ遷移する' do - get :new - response.body.should redirect_to new_author_path - end - end - end - end - - describe '新規作成に於いて' do - before do - @attr = FactoryGirl.attributes_for(:story, :t => nil, :comic_id => @comic.id, :panel_id => @panel.id, :author_id => @author.id) - sign_in @user - end - context 'つつがなく終わるとき' do - it 'デフォルト値補充を依頼する' do - Story.any_instance.should_receive(:supply_default).exactly(1) - post :create, :story => @attr - end - it 'POSTデータから、カラム値を復元している' do - Story.any_instance.stub(:store).and_return(true) - post :create, :story => @attr - assigns(:story).comic_id.should eq @comic.id - assigns(:story).panel_id.should eq @panel.id - end - it '上書き補充を依頼する' do - Story.any_instance.should_receive(:overwrite).exactly(1) - post :create, :story => @attr - end - it 'コミックモデルに編集取得を依頼している' do - Comic.should_receive(:edit).with(@comic.id, @author).exactly(1) - post :create, :story => @attr - end - it 'コマモデルに単体取得を依頼している' do - Panel.should_receive(:show).with(@panel.id, @author).exactly(1) - post :create, :story => @attr - end - it 'モデルに保存依頼する' do - Story.any_instance.should_receive(:store).exactly(1) - post :create, :story => @attr - end - it "@storyに作成されたコマを保持していて、それがDBにある" do - post :create, :story => @attr - assigns(:story).should be_a(Story) - assigns(:story).should be_persisted - end - context 'html形式' do - it 'ステータスコード302 Foundを返す' do - Story.any_instance.stub(:store).and_return(true) - post :create, :story => @attr - response.status.should eq 302 - end - it 'コミックのストーリー表示へ遷移する' do -# Story.any_instance.stub(:store).and_return(true) - post :create, :story => @attr - response.should redirect_to(:action => :comic, :id => @attr[:comic_id]) - end - end - context 'json形式' do - it 'ステータスコード200 OKを返す' do -# Story.any_instance.stub(:store).and_return(true) - post :create, :story => @attr, :format => :json - response.should be_success - end - it '作成されたコマをjsonデータで返す' do - post :create, :story => @attr, :format => :json - lambda{JSON.parse(response.body)}.should_not raise_error(JSON::ParserError) - end - it 'ストーリーモデルのストーリーのjson出力を問い合わせている' do - Story.any_instance.should_receive(:story_as_json).exactly(1) - post :create, :story => @attr, :format => :json - end - it 'データがアレになっている' do - post :create, :story => @attr, :format => :json - json = JSON.parse response.body - json["t"].should eq 0 - end - end - end - context 'ユーザ権限がないとき' do - before do - sign_out @user - end - context 'html形式' do - it 'ステータスコード302 Foundを返す' do - post :create, :story => @attr - response.status.should eq 302 - end - it 'サインインページへ遷移する' do - post :create, :story => @attr - response.body.should redirect_to '/users/sign_in' - end - end - context 'json形式' do - it 'ステータスコード401 Unauthorizedを返す' do - post :create, :story => @attr, :format => :json - response.status.should eq 401 - end - it '応答メッセージにUnauthorizedを返す' do - post :create, :story => @attr, :format => :json - response.message.should match(/Unauthorized/) - end - end - end - context 'ユーザ権限はないが管理者権限があるとき' do - before do - sign_out @user - sign_in @admin - end - context 'html形式' do - it 'ステータスコード302 Foundを返す' do - post :create, :story => @attr - response.status.should eq 302 - end - it 'サインインページへ遷移する' do - post :create, :story => @attr - response.body.should redirect_to '/users/sign_in' - end - end - end - context 'ユーザだが作家登録していないとき' do - before do - @author.destroy - end - context 'html形式' do - it 'ステータスコード302 Foundを返す' do - post :create, :story => @attr - response.status.should eq 302 - end - it '作家登録ページへ遷移する' do - post :create, :story => @attr - response.body.should redirect_to new_author_path - end - end - end - context '検証、保存に失敗した' do - before do - Story.any_instance.stub(:store).and_return(false) - end - it "未保存のコマを保持している" do - post :create, :story => @attr - assigns(:story).should be_a_new(Story) - end - context 'html形式' do - it 'ステータスコード200 OKを返す' do - post :create, :story => @attr - response.status.should eq 200 - end - it '新規ページを描画する' do - post :create, :story => @attr - response.should render_template("new") - end - end - context 'json形式' do - it 'ステータスコード422 unprocessable_entity を返す' do - post :create, :story => @attr, :format => :json - response.status.should eq 422 - end - it '応答メッセージUnprocessable Entityを返す' do - post :create, :story => @attr, :format => :json - response.message.should match(/Unprocessable/) - end - end - end - end - - describe '編集フォーム表示に於いて' do - before do - @story = FactoryGirl.create :story, :author_id => @author.id - sign_in @user - Story.stub(:show).and_return(@story) - end - context 'つつがなく終わるとき' do - it 'ストーリーモデルに編集取得を問い合わせている' do - Story.should_receive(:edit).exactly(1) - get :edit, :id => @story.id - end - it '@storyにデータを用意している' do - get :edit, :id => @story.id - assigns(:story).should eq @story - end - context 'html形式' do - it 'ステータスコード200 OKを返す' do - get :edit, :id => @story.id - response.should be_success - end - it 'editテンプレートを描画する' do - get :edit, :id => @story.id - response.should render_template("edit") - end - end - context 'js形式' do - it 'ステータスコード200 OKを返す' do - get :edit, :id => @story.id, :format => :js - response.should be_success - end - it 'edit.jsテンプレートを描画する' do - get :edit, :id => @story.id, :format => :js - response.should render_template("edit") - end - end - end - context 'ユーザ権限がないとき' do - before do - sign_out @user - end - context 'html形式' do - it 'ステータスコード302 Foundを返す' do - get :edit, :id => @story.id - response.status.should eq 302 - end - it 'サインインページへ遷移する' do - get :edit, :id => @story.id - response.body.should redirect_to '/users/sign_in' - end - end - context 'js形式' do - it 'ステータスコード401 Unauthorizedを返す' do - get :edit, :id => @story.id, :format => :js - response.status.should eq 401 - end - it '応答メッセージにUnauthorizedを返す' do - get :edit, :id => @story.id, :format => :js - response.message.should match(/Unauthorized/) - end - end - end - context 'ユーザ権限はないが管理者権限があるとき' do - before do - sign_out @user - sign_in @admin - end - context 'html形式' do - it 'ステータスコード302 Foundを返す' do - get :edit, :id => @story.id - response.status.should eq 302 - end - it 'サインインページへ遷移する' do - get :edit, :id => @story.id - response.body.should redirect_to '/users/sign_in' - end - end - end - context 'ユーザだが作家登録していないとき' do - before do - @author.destroy - end - context 'html形式' do - it 'ステータスコード302 Foundを返す' do - get :edit, :id => @story.id - response.status.should eq 302 - end - it '作家登録ページへ遷移する' do - get :edit, :id => @story.id - response.body.should redirect_to new_author_path - end - end - end - end - - describe '更新に於いて' do - before do - @story = FactoryGirl.create :story, :author_id => @user.author.id - @attr = FactoryGirl.attributes_for(:story, :author_id => @author.id) - sign_in @user - end - context 'つつがなく終わるとき' do - it 'モデルに編集取得依頼する' do - Story.stub(:edit).with(any_args).and_return(@story) - Story.should_receive(:edit).exactly(1) - put :update, :id => @story.id, :story => @attr - end - it 'POSTデータから、カラム値を復元している' do - Story.any_instance.stub(:store).and_return(true) - Story.any_instance.should_receive(:attributes=).exactly(1) - put :update, :id => @story.id, :story => @attr - end - it '上書き補充を依頼する' do - Story.any_instance.should_receive(:overwrite).exactly(1) - put :update, :id => @story.id, :story => @attr - end - it 'モデルに保存依頼する' do - Story.any_instance.should_receive(:store).exactly(1) - put :update, :id => @story.id, :story => @attr - end - it "@storyに作成されたストーリーを保持していて、それがDBにある" do - put :update, :id => @story.id, :story => @attr - assigns(:story).should be_a(Story) - assigns(:story).should be_persisted - end - context 'html形式' do - it 'ステータスコード302 Foundを返す' do - Story.any_instance.stub(:store).and_return(true) - put :update, :id => @story.id, :story => @attr - response.status.should eq 302 - end - it 'ストーリー表示へ遷移する' do -# Story.any_instance.stub(:store).and_return(true) - put :update, :id => @story.id, :story => @attr - response.should redirect_to(:action => :comic, :id => @attr[:comic_id]) - end - end - context 'json形式' do - it 'ステータスコード200 OKを返す' do -# Story.any_instance.stub(:store).and_return(true) - put :update, :id => @story.id, :story => @attr, :format => :json - response.should be_success - end - end - end - context 'ユーザ権限がないとき' do - before do - sign_out @user - end - context 'html形式' do - it 'ステータスコード302 Foundを返す' do - put :update, :id => @story.id, :story => @attr - response.status.should eq 302 - end - it 'サインインページへ遷移する' do - put :update, :id => @story.id, :story => @attr - response.body.should redirect_to '/users/sign_in' - end - end - context 'json形式' do - it 'ステータスコード401 Unauthorizedを返す' do - put :update, :id => @story.id, :story => @attr, :format => :json - response.status.should eq 401 - end - it '応答メッセージにUnauthorizedを返す' do - put :update, :id => @story.id, :story => @attr, :format => :json - response.message.should match(/Unauthorized/) - end - end - end - context 'ユーザ権限はないが管理者権限があるとき' do - before do - sign_out @user - sign_in @admin - end - context 'html形式' do - it 'ステータスコード302 Foundを返す' do - put :update, :id => @story.id, :story => @attr - response.status.should eq 302 - end - it 'サインインページへ遷移する' do - put :update, :id => @story.id, :story => @attr - response.body.should redirect_to '/users/sign_in' - end - end - end - context 'ユーザだが作家登録していないとき' do - before do - @author.destroy - end - context 'html形式' do - it 'ステータスコード302 Foundを返す' do - put :update, :id => @story.id, :story => @attr - response.status.should eq 302 - end - it '作家登録ページへ遷移する' do - put :update, :id => @story.id, :story => @attr - response.body.should redirect_to new_author_path - end - end - end - context '検証、保存に失敗した' do - before do - Story.any_instance.stub(:store).and_return(false) - end - it "指定のコマを保持している" do - put :update, :id => @story.id, :story => @attr - assigns(:story).should eq @story - end - context 'html形式' do - it 'ステータスコード200 OKを返す' do - put :update, :id => @story.id, :story => @attr - response.status.should eq 200 - end - it '編集ページを描画する' do - put :update, :id => @story.id, :story => @attr - response.should render_template("edit") - end - end - context 'json形式' do - it 'ステータスコード422 unprocessable_entity を返す' do - put :update, :id => @story.id, :story => @attr, :format => :json - response.status.should eq 422 - end - it '応答メッセージUnprocessable Entityを返す' do - put :update, :id => @story.id, :story => @attr, :format => :json - response.message.should match(/Unprocessable/) - end - end - end - end - - describe '削除に於いて' do - before do - @story = FactoryGirl.create :story, :author_id => @author.id - sign_in @user - Story.stub(:edit).and_return(@story) - end - context '事前チェックしておく' do - before do - Story.stub(:edit).with(any_args()).and_return @story - Story.any_instance.stub(:destroy_and_shorten).with(any_args()).and_return(true) - end - it 'ストーリーモデルに編集取得を問い合わせている' do - Story.should_receive(:edit).exactly(1) - delete :destroy, :id => @story.id - end - it 'モデルに削除を依頼する' do - Story.any_instance.should_receive(:destroy_and_shorten).exactly(1) - delete :destroy, :id => @story.id - end - it '@storyにアレを取得している' do - delete :destroy, :id => @story.id - assigns(:story).id.should eq(@story.id) - end - end - context 'つつがなく終わるとき' do - before do - Story.any_instance.stub(:destroy_and_shorten).with(any_args()).and_return(true) - end - context 'html形式' do - it 'ステータスコード302 Foundを返す' do - delete :destroy, :id => @story.id - response.status.should eq 302 - end - it '閲覧ページへ遷移する' do - delete :destroy, :id => @story.id - response.should redirect_to(:controller => 'stories', :action => :comic, :id => @story.comic_id) - end - end - context 'json形式' do - it 'ステータスコード200 OKを返す' do - delete :destroy, :id => @story.id, :format => :json - response.should be_success - end - end - end - context 'ユーザ権限がないとき' do - before do - sign_out @user - end - context 'html形式' do - it 'ステータスコード302 Foundを返す' do - delete :destroy, :id => @story.id - response.status.should eq 302 - end - it 'サインインページへ遷移する' do - delete :destroy, :id => @story.id - response.body.should redirect_to '/users/sign_in' - end - end - context 'json形式' do - it 'ステータスコード401 Unauthorizedを返す' do - delete :destroy, :id => @story.id, :format => :json - response.status.should eq 401 - end - it '応答メッセージにUnauthorizedを返す' do - delete :destroy, :id => @story.id, :format => :json - response.message.should match(/Unauthorized/) - end - end - end - context 'ユーザ権限はないが管理者権限があるとき' do - before do - sign_out @user - sign_in @admin - end - context 'html形式' do - it 'ステータスコード302 Foundを返す' do - delete :destroy, :id => @story.id - response.status.should eq 302 - end - it 'サインインページへ遷移する' do - delete :destroy, :id => @story.id - response.body.should redirect_to '/users/sign_in' - end - end - end - context 'ユーザだが作家登録していないとき' do - before do - @author.destroy - end - context 'html形式' do - it 'ステータスコード302 Foundを返す' do - delete :destroy, :id => @story.id - response.status.should eq 302 - end - it '作家登録ページへ遷移する' do - delete :destroy, :id => @story.id - response.body.should redirect_to new_author_path - end - end - end - context '削除に失敗したとき' do - before do - Story.any_instance.stub(:destroy_and_shorten).with(any_args()).and_return(false) - end - context 'html形式' do - it 'ステータスコード302 Foundを返す' do - delete :destroy, :id => @story.id - response.status.should eq 302 - end - it 'そのコミックの詳細ページへ遷移する' do - delete :destroy, :id => @story.id - response.should redirect_to(story_path(@story)) - end - end - context 'json形式' do - it 'ステータスコード422 unprocessable_entity を返す' do - delete :destroy, :id => @story.id, :format => :json - response.status.should eq 422 - end - it '応答メッセージUnprocessable Entityを返す' do - delete :destroy, :id => @story.id, :format => :json - response.message.should match(/Unprocessable/) - end - end - end -=begin - context '対象ストーリーがないとき' do - end - context '他人のストーリーだったとき' do - end -=end - end - -else - describe '一覧表示に於いて' do - before do - sign_in @user - @story = FactoryGirl.create :story, :t => 0, :comic_id => @comic.id, :panel_id => @panel.id, :author_id => @author.id - Story.stub(:list).and_return([@story, @story, @story]) - end - context 'つつがなく終わるとき' do - it 'ステータスコード200 OKを返す' do - get :index - response.should be_success - end - context 'html形式' do - it 'indexテンプレートを描画する' do - get :index - response.should render_template("index") - end - end - context 'json形式' do - it 'jsonデータを返す' do - get :index, :format => :json - lambda{JSON.parse(response.body)}.should_not raise_error(JSON::ParserError) - end - end - end - context 'ユーザ権限がないとき' do - before do - sign_out @user - end - it 'ステータスコード200 OKを返す' do - get :index - response.should be_success - end - context 'html形式' do - it 'indexテンプレートを描画する' do - get :index - response.should render_template("index") - end - end - context 'json形式' do - it 'jsonデータを返す' do - get :index, :format => :json - lambda{JSON.parse(response.body)}.should_not raise_error(JSON::ParserError) - end - end - end - end - - describe '単体表示に於いて' do - before do - sign_in @user - @story = FactoryGirl.create :story, :t => 0, :comic_id => @comic.id, :panel_id => @panel.id, :author_id => @author.id - Comic.stub(:show).with(@comic.id.to_s, [nil, nil]).and_return(@comic) - Comic.stub(:show).with(@comic.id.to_s, [@user, nil]).and_return(@comic) - Comic.stub(:show).with(@comic.id.to_s, [nil, @admin]).and_return(@comic) - Story.stub(:show).with(@story.id.to_s, [nil, nil]).and_return(@story) - Story.stub(:show).with(@story.id.to_s, [@user, nil]).and_return(@story) - Story.stub(:show).with(@story.id.to_s, [nil, @admin]).and_return(@story) - end - context 'つつがなく終わるとき' do - context 'html形式' do - it 'ステータスコード200 OKを返す' do - get :show, :id => @story.id - response.should be_success - end - it 'showテンプレートを描画する' do - get :show, :id => @story.id - response.should render_template("show") - end - end - context 'json形式' do - it 'ステータスコード200 OKを返す' do - get :show, :id => @story.id, :format => :json - response.should be_success - end - it 'jsonデータを返す' do - get :show, :id => @story.id, :format => :json - lambda{JSON.parse(response.body)}.should_not raise_error(JSON::ParserError) - end - end - end - context 'ユーザ権限がないとき' do - before do - sign_out @user - end - context 'html形式' do - it 'ステータスコード200 OKを返す' do - get :show, :id => @story.id - response.should be_success - end - it 'showテンプレートを描画する' do - get :show, :id => @story.id - response.should render_template("show") - end - end - context 'json形式' do - it 'ステータスコード200 OKを返す' do - get :show, :id => @story.id, :format => :json - response.should be_success - end - it 'jsonデータを返す' do - get :show, :id => @story.id, :format => :json - lambda{JSON.parse(response.body)}.should_not raise_error(JSON::ParserError) - end - end - end - end - - describe '閲覧に於いて' do - before do - @story = FactoryGirl.create :story, :t => 0, :comic_id => @comic.id, :panel_id => @panel.id, :author_id => @author.id - Comic.stub(:show).with(@comic.id.to_s, [nil, nil]).and_return(@comic) - Comic.stub(:show).with(@comic.id.to_s, [@user, nil]).and_return(@comic) - Comic.stub(:show).with(@comic.id.to_s, [nil, @admin]).and_return(@comic) - Story.stub(:count).and_return(10) - Story.stub(:play_list).with(any_args).and_return([@story, @story, @story]) - sign_in @user - end - context 'つつがなく終わるとき' do - context 'html形式' do - it 'ステータスコード200 OKを返す' do - get :comic, :id => @comic.id - response.should be_success - end - it 'comicテンプレートを描画する' do - get :comic, :id => @comic.id - response.should render_template("comic") - end - end - context 'json形式' do - it 'ステータスコード200 OKを返す' do - get :comic, :id => @comic.id, :format => :json - response.should be_success - end - it 'jsonデータを返す' do - get :comic, :id => @comic.id, :format => :json - lambda{JSON.parse(response.body)}.should_not raise_error(JSON::ParserError) - end - end - end - context 'ユーザ権限がないとき' do - before do - sign_out @user - end - context 'html形式' do - it 'ステータスコード200 OKを返す' do - get :comic, :id => @comic.id - response.should be_success - end - it 'comicテンプレートを描画する' do - get :comic, :id => @comic.id - response.should render_template("comic") - end - end - context 'json形式' do - it 'ステータスコード200 OKを返す' do - get :comic, :id => @comic.id, :format => :json - response.should be_success - end - it 'jsonデータを返す' do - get :comic, :id => @comic.id, :format => :json - lambda{JSON.parse(response.body)}.should_not raise_error(JSON::ParserError) - end - end - end - end - - describe '新規作成フォーム表示に於いて' do - before do - sign_in @user - end - context 'つつがなく終わるとき' do - context 'html形式' do - it 'ステータスコード200 OKを返す' do - get :new - response.should be_success - end - it 'newテンプレートを描画する' do - get :new - response.should render_template("new") - end - end - context 'js形式' do - it 'ステータスコード200 OKを返す' do - get :new, :format => :js - response.should be_success - end - it 'new.jsテンプレートを描画する' do - get :new, :format => :js - response.should render_template("new") - end - end - context 'json形式' do - it 'ステータスコード200 OKを返す' do - get :new, :format => :json - response.should be_success - end - it 'jsonデータを返す' do - get :new, :format => :json - lambda{JSON.parse(response.body)}.should_not raise_error(JSON::ParserError) - end - end - end - context 'ユーザ権限がないとき' do - before do - sign_out @user - end - context 'html形式' do - it 'ステータスコード302 Foundを返す' do - get :new - response.status.should eq 302 - end - it 'サインインページへ遷移する' do - get :new - response.body.should redirect_to '/users/sign_in' - end - end - context 'json形式' do - it 'ステータスコード401 Unauthorizedを返す' do - get :new, :format => :json - response.status.should eq 401 - end - it '応答メッセージにUnauthorizedを返す' do - get :new, :format => :json - response.message.should match(/Unauthorized/) - end - end - end - end - - describe '新規作成に於いて' do - before do - @attr = FactoryGirl.attributes_for(:story, :t => nil, :comic_id => @comic.id, :panel_id => @panel.id, :author_id => @author.id) - sign_in @user - end - context 'つつがなく終わるとき' do - context 'html形式' do - it 'ステータスコード302 Foundを返す' do - Story.any_instance.stub(:store).and_return(true) - post :create, :story => @attr - response.status.should eq 302 - end - it 'コミックのストーリー表示へ遷移する' do -# Story.any_instance.stub(:store).and_return(true) - post :create, :story => @attr - response.should redirect_to(:action => :comic, :id => @attr[:comic_id]) - end - end - context 'json形式' do - it 'ステータスコード200 OKを返す' do -# Story.any_instance.stub(:store).and_return(true) - post :create, :story => @attr, :format => :json - response.should be_success - end - it '作成されたコマをjsonデータで返す' do - post :create, :story => @attr, :format => :json - lambda{JSON.parse(response.body)}.should_not raise_error(JSON::ParserError) - end - end - end - context 'ユーザ権限がないとき' do - before do - sign_out @user - end - context 'html形式' do - it 'ステータスコード302 Foundを返す' do - post :create, :story => @attr - response.status.should eq 302 - end - it 'サインインページへ遷移する' do - post :create, :story => @attr - response.body.should redirect_to '/users/sign_in' - end - end - context 'json形式' do - it 'ステータスコード401 Unauthorizedを返す' do - post :create, :story => @attr, :format => :json - response.status.should eq 401 - end - it '応答メッセージにUnauthorizedを返す' do - post :create, :story => @attr, :format => :json - response.message.should match(/Unauthorized/) - end - end - end - end - - describe '編集フォーム表示に於いて' do - before do - @story = FactoryGirl.create :story, :author_id => @author.id - sign_in @user - Story.stub(:show).and_return(@story) - end - context 'つつがなく終わるとき' do - context 'html形式' do - it 'ステータスコード200 OKを返す' do - get :edit, :id => @story.id - response.should be_success - end - it 'editテンプレートを描画する' do - get :edit, :id => @story.id - response.should render_template("edit") - end - end - context 'js形式' do - it 'ステータスコード200 OKを返す' do - get :edit, :id => @story.id, :format => :js - response.should be_success - end - it 'edit.jsテンプレートを描画する' do - get :edit, :id => @story.id, :format => :js - response.should render_template("edit") - end - end - end - context 'ユーザ権限がないとき' do - before do - sign_out @user - end - context 'html形式' do - it 'ステータスコード302 Foundを返す' do - get :edit, :id => @story.id - response.status.should eq 302 - end - it 'サインインページへ遷移する' do - get :edit, :id => @story.id - response.body.should redirect_to '/users/sign_in' - end - end - context 'js形式' do - it 'ステータスコード401 Unauthorizedを返す' do - get :edit, :id => @story.id, :format => :js - response.status.should eq 401 - end - it '応答メッセージにUnauthorizedを返す' do - get :edit, :id => @story.id, :format => :js - response.message.should match(/Unauthorized/) - end - end - end - end - - describe '更新に於いて' do - before do - @story = FactoryGirl.create :story, :author_id => @user.author.id - @attr = FactoryGirl.attributes_for(:story, :author_id => @author.id) - sign_in @user - end - context 'つつがなく終わるとき' do - context 'html形式' do - it 'ステータスコード302 Foundを返す' do - Story.any_instance.stub(:store).and_return(true) - put :update, :id => @story.id, :story => @attr - response.status.should eq 302 - end - it 'ストーリー表示へ遷移する' do -# Story.any_instance.stub(:store).and_return(true) - put :update, :id => @story.id, :story => @attr - response.should redirect_to(:action => :comic, :id => @attr[:comic_id]) - end - end - context 'json形式' do - it 'ステータスコード200 OKを返す' do -# Story.any_instance.stub(:store).and_return(true) - put :update, :id => @story.id, :story => @attr, :format => :json - response.should be_success - end - end - end - context 'ユーザ権限がないとき' do - before do - sign_out @user - end - context 'html形式' do - it 'ステータスコード302 Foundを返す' do - put :update, :id => @story.id, :story => @attr - response.status.should eq 302 - end - it 'サインインページへ遷移する' do - put :update, :id => @story.id, :story => @attr - response.body.should redirect_to '/users/sign_in' - end - end - context 'json形式' do - it 'ステータスコード401 Unauthorizedを返す' do - put :update, :id => @story.id, :story => @attr, :format => :json - response.status.should eq 401 - end - it '応答メッセージにUnauthorizedを返す' do - put :update, :id => @story.id, :story => @attr, :format => :json - response.message.should match(/Unauthorized/) - end - end - end - end - - describe '削除に於いて' do - before do - @story = FactoryGirl.create :story, :author_id => @author.id - sign_in @user - Story.stub(:edit).and_return(@story) - end - context 'つつがなく終わるとき' do - before do - Story.any_instance.stub(:destroy_and_shorten).with(any_args()).and_return(true) - end - context 'html形式' do - it 'ステータスコード302 Foundを返す' do - delete :destroy, :id => @story.id - response.status.should eq 302 - end - it '閲覧ページへ遷移する' do - delete :destroy, :id => @story.id - response.should redirect_to(:controller => 'stories', :action => :comic, :id => @story.comic_id) - end - end - context 'json形式' do - it 'ステータスコード200 OKを返す' do - delete :destroy, :id => @story.id, :format => :json - response.should be_success - end - end - end - context 'ユーザ権限がないとき' do - before do - sign_out @user - end - context 'html形式' do - it 'ステータスコード302 Foundを返す' do - delete :destroy, :id => @story.id - response.status.should eq 302 - end - it 'サインインページへ遷移する' do - delete :destroy, :id => @story.id - response.body.should redirect_to '/users/sign_in' - end - end - context 'json形式' do - it 'ステータスコード401 Unauthorizedを返す' do - delete :destroy, :id => @story.id, :format => :json - response.status.should eq 401 - end - it '応答メッセージにUnauthorizedを返す' do - delete :destroy, :id => @story.id, :format => :json - response.message.should match(/Unauthorized/) - end - end - end - end - -end -end