From: yasushiito Date: Sat, 27 Apr 2013 05:16:12 +0000 (+0900) Subject: Merge branch 'v05' of git.sourceforge.jp:/gitroot/pettanr/pettanr into v05 X-Git-Url: http://git.osdn.net/view?p=pettanr%2Fpettanr.git;a=commitdiff_plain;h=refs%2Fheads%2Fv05;hp=b30b8330a83a9b5fb4e1a3810d4b61d98725eb92 Merge branch 'v05' of git.sourceforge.jp:/gitroot/pettanr/pettanr into v05 --- diff --git a/app/controllers/artists_controller.rb b/app/controllers/artists_controller.rb index 032a98a8..51543bb1 100644 --- a/app/controllers/artists_controller.rb +++ b/app/controllers/artists_controller.rb @@ -4,7 +4,7 @@ class ArtistsController < ApplicationController before_filter :authenticate_user, :only => [:new, :create, :edit, :update, :destroy] before_filter :authenticate_author, :only => [:new, :create, :edit, :update, :destroy] else - before_filter :authenticate_resource_reader, :only => [:index, :show] + before_filter :authenticate_resource_reader, :only => [:index, :show, :resource_pictures] before_filter :authenticate_user, :only => [:new, :create, :edit, :update, :destroy] before_filter :authenticate_author, :only => [:new, :create, :edit, :update, :destroy] end @@ -34,6 +34,19 @@ class ArtistsController < ApplicationController end end + def resource_pictures + @ar = Artist.show(params[:id], [@user, @admin, @demand_user]) + + @page = Author.page params[:page] + @page_size = Author.resource_picture_page_size params[:page_size] + @resource_pictures = ResourcePicture.mylist(@ar, @page, @page_size) + + respond_to do |format| + format.html # index.html.erb + format.json { render json: @resource_pictures.to_json(ResourcePicture.list_json_opt) } + end + end + def count @ar = {:count => Artist.visible_count} respond_to do |format| diff --git a/app/controllers/authors_controller.rb b/app/controllers/authors_controller.rb index 5e8632e6..531f46d9 100644 --- a/app/controllers/authors_controller.rb +++ b/app/controllers/authors_controller.rb @@ -4,7 +4,7 @@ class AuthorsController < ApplicationController before_filter :authenticate_user, :only => [:new, :create, :edit, :update] before_filter :authenticate_author, :only => [:edit, :update] else - before_filter :authenticate_reader, :only => [:index, :show] + before_filter :authenticate_reader, :only => [:index, :show, :comics, :panels] before_filter :authenticate_user, :only => [:new, :create, :edit, :update] before_filter :authenticate_author, :only => [:edit, :update] end @@ -30,6 +30,32 @@ class AuthorsController < ApplicationController end end + def comics + @au = Author.show(params[:id], [@user, @admin]) + + @page = Author.page params[:page] + @page_size = Author.comic_page_size params[:page_size] + @comics = Comic.mylist(@au, @page, @page_size) + + respond_to do |format| + format.html # index.html.erb + format.json { render json: @comics.to_json(Comic.list_json_opt) } + end + end + + def panels + @au = Author.show(params[:id], [@user, @admin]) + + @page = Author.page params[:page] + @page_size = Author.panel_page_size params[:page_size] + @panels = Panel.mylist(@au, @page, @page_size) + + respond_to do |format| + format.html # index.html.erb + format.json { render text: Panel.list_as_json_text(@panels) } + end + end + def count @au = {:count => Author.visible_count} respond_to do |format| diff --git a/app/controllers/home_controller.rb b/app/controllers/home_controller.rb index 92a2b13a..3d8c537e 100644 --- a/app/controllers/home_controller.rb +++ b/app/controllers/home_controller.rb @@ -86,7 +86,7 @@ class HomeController < ApplicationController def panel_color @page = Author.page params[:page] - @page_size = Author.panel_page_size params[:page_size] + @page_size = Author.panel_color_page_size params[:page_size] @panel_colors = PanelColor.mylist(@author, @page, @page_size) respond_to do |format| @@ -97,7 +97,7 @@ class HomeController < ApplicationController def ground_picture @page = Author.page params[:page] - @page_size = Author.panel_page_size params[:page_size] + @page_size = Author.ground_picture_page_size params[:page_size] @ground_pictures = GroundPicture.mylist(@author, @page, @page_size) respond_to do |format| @@ -108,7 +108,7 @@ class HomeController < ApplicationController def ground_color @page = Author.page params[:page] - @page_size = Author.panel_page_size params[:page_size] + @page_size = Author.ground_color_page_size params[:page_size] @ground_colors = GroundColor.mylist(@author, @page, @page_size) respond_to do |format| @@ -119,8 +119,8 @@ class HomeController < ApplicationController def resource_picture @page = Author.page params[:page] - @page_size = Author.panel_page_size params[:page_size] - @resource_pictures = ResourcePicture.mylist(@author, @page, @page_size) + @page_size = Author.resource_picture_page_size params[:page_size] + @resource_pictures = ResourcePicture.mylist(@artist, @page, @page_size) respond_to do |format| format.html # index.html.erb diff --git a/app/models/author.rb b/app/models/author.rb index b234a797..2281293d 100644 --- a/app/models/author.rb +++ b/app/models/author.rb @@ -216,7 +216,7 @@ class Author < ActiveRecord::Base end def self.default_resource_picture_page_size - 25 + 100 end def self.resource_picture_max_page_size diff --git a/app/models/resource_picture.rb b/app/models/resource_picture.rb index 99cd82c9..f85e866b 100644 --- a/app/models/resource_picture.rb +++ b/app/models/resource_picture.rb @@ -88,7 +88,7 @@ class ResourcePicture < ActiveRecord::Base end def self.default_page_size - 25 + 100 end def self.max_page_size diff --git a/app/views/artists/resource_pictures.html.erb b/app/views/artists/resource_pictures.html.erb new file mode 100644 index 00000000..ead33de3 --- /dev/null +++ b/app/views/artists/resource_pictures.html.erb @@ -0,0 +1,38 @@ +

<%= t '.title' -%>

+ + + + + + + + + + + +<% @resource_pictures.each do |resource_picture| %> + + + + + + + + + +<% end %> +
<%= t_m 'ResourcePicture.artist_id' -%><%= t_m 'ResourcePicture.ext' -%><%= t_m 'ResourcePicture.width' -%><%= t_m 'ResourcePicture.height' -%><%= t_m 'ResourcePicture.filesize' -%>
+ <%= link_to tag(:img, resource_picture.tmb_opt_img_tag), resource_picture_path(resource_picture) %> + + <%= render resource_picture.credit_template, :picture => resource_picture %> + + <%= link_to(h(truncate(resource_picture.artist.name, :length => 8)), artist_path(resource_picture.artist)) %> + + <%= h resource_picture.ext %> + + <%= resource_picture.width %>px + + <%= resource_picture.height %>px + + <%= resource_picture.filesize %>bytes +
diff --git a/app/views/artists/show.html.erb b/app/views/artists/show.html.erb index 6c58138c..96cc8f2c 100644 --- a/app/views/artists/show.html.erb +++ b/app/views/artists/show.html.erb @@ -17,6 +17,10 @@ <%= l @ar.updated_at %>

+

+ <%= link_to t('artists.show.to_resource_pictures'), resource_pictures_artist_path(@ar) %> +

+ <% if @ar.own?(@artist) %> <%= link_to t('link.edit'), edit_artist_path(@ar) %> <% end %> diff --git a/app/views/authors/_list_item.html.erb b/app/views/authors/_list_item.html.erb new file mode 100644 index 00000000..1bf947a0 --- /dev/null +++ b/app/views/authors/_list_item.html.erb @@ -0,0 +1,20 @@ + + + <%= link_to comic_icon(:object => comic, :size => 25), comic_path(comic) %> + <%= link_to h(truncate(comic.title, :length => 40)), :controller => 'stories', :action => :comic, :id => comic.id %> + (<%= comic.stories.size -%>) + + + <%= distance_of_time_in_words_to_now comic.updated_at %> + + + <%= link_to author_icon(:object => comic.author, :size => 25), comic_path(comic.author) %> + <%= link_to h(truncate(comic.author.name, :length => 12)), author_path(comic.author) %> + + + <% if comic.own? author %> + <%= link_to t('link.edit'), edit_comic_path(comic) %> + <%= link_to t('link.destroy'), comic_path(comic), :method => :delete %> + <% end %> + + diff --git a/app/views/authors/comics.html.erb b/app/views/authors/comics.html.erb new file mode 100644 index 00000000..b132d0be --- /dev/null +++ b/app/views/authors/comics.html.erb @@ -0,0 +1,27 @@ +

<%= t '.title' -%>

+ + + <% @comics.each do |comic| %> + + + + + + + <% end %> +
+ <%= link_to comic_icon(:object => comic, :size => 25), comic_path(comic) %> + <%= link_to h(truncate(comic.title, :length => 40)), :controller => 'stories', :action => :comic, :id => comic.id %> + (<%= comic.stories.size -%>) + + <%= distance_of_time_in_words_to_now comic.updated_at %> + + <%= link_to author_icon(:object => comic.author, :size => 25), comic_path(comic.author) %> + <%= link_to h(truncate(comic.author.name, :length => 12)), author_path(comic.author) %> + + <% if comic.own? @author %> + <%= link_to t('link.edit'), edit_comic_path(comic) %> + <%= link_to t('link.destroy'), comic_path(comic), :method => :delete %> + <% end %> +
+<%= link_to t('comics.new.title'), new_comic_path %> diff --git a/app/views/authors/panels.html.erb b/app/views/authors/panels.html.erb new file mode 100644 index 00000000..34ee4da2 --- /dev/null +++ b/app/views/authors/panels.html.erb @@ -0,0 +1,5 @@ +

<%= t '.title' -%>

+<% @panels.each do |panel| %> + <%= render 'panels/standard', :panel => panel, :author => @author %> +<% end %> +<%= link_to t('panels.new.title'), new_panel_path %> diff --git a/app/views/authors/show.html.erb b/app/views/authors/show.html.erb index a203fec3..97f54d22 100644 --- a/app/views/authors/show.html.erb +++ b/app/views/authors/show.html.erb @@ -17,6 +17,14 @@ <%= l @au.updated_at %>

+

+ <%= link_to t('authors.show.to_comics'), comics_author_path(@au) %> +

+ +

+ <%= link_to t('authors.show.to_panels'), panels_author_path(@au) %> +

+ <% if @au.own?(@author) %> <%= link_to t('link.edit'), edit_author_path(@au) %> <% end %> diff --git a/config/locales/pettanr.ja.yml b/config/locales/pettanr.ja.yml index 39a025a8..ee9fc453 100644 --- a/config/locales/pettanr.ja.yml +++ b/config/locales/pettanr.ja.yml @@ -668,6 +668,12 @@ ja: title: 作家一覧 show: title: 作家詳細 + to_comics: 最近更新したコミック + to_panels: 最近更新したコマ + comics: + title: 最近更新したコミック + panels: + title: 最近更新したコマ new: title: 作家登録 announce: 作家登録してください @@ -688,6 +694,9 @@ ja: title: 絵師一覧 show: title: 絵師詳細 + to_resource_pictures: 最近更新した素材 + resource_pictures: + title: 最近更新した素材 new: title: 絵師登録 edit: diff --git a/config/routes.rb b/config/routes.rb index 003ea567..3c48f086 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -23,6 +23,8 @@ Pettanr::Application.routes.draw do put :update delete :destroy get :browse + get :comics + get :panels end end resources :artists do @@ -40,6 +42,7 @@ Pettanr::Application.routes.draw do put :update delete :destroy get :browse + get :resource_pictures end end resources :speech_balloon_templates do diff --git a/spec/controllers/artists_controller_spec.rb b/spec/controllers/artists_controller_spec.rb index d1f7a3a2..f36d7542 100644 --- a/spec/controllers/artists_controller_spec.rb +++ b/spec/controllers/artists_controller_spec.rb @@ -256,6 +256,134 @@ if MagicNumber['run_mode'] == 1 =end end + describe '対象絵師の素材一覧表示に於いて' do + before do + @other_user = FactoryGirl.create( :user_yas) + @other_author = FactoryGirl.create :author, :user_id => @other_user.id + @other_artist = FactoryGirl.create :artist_yas, :author_id => @other_author.id + @op = FactoryGirl.create :original_picture, :artist_id => @other_artist.id + @p = FactoryGirl.create :picture, :original_picture_id => @op.id, :license_id => @license.id, :artist_id => @other_artist.id + @rp = FactoryGirl.create :resource_picture, :artist_id => @other_artist.id, :license_id => @license.id, :original_picture_id => @op.id, :picture_id => @p.id + ResourcePicture.stub(:mylist).and_return([@rp, @rp, @rp]) + sign_in @user + end + context 'パラメータpageについて' do + it '@pageに値が入る' do + get :resource_pictures, :id => @other_artist.id, :page => 5 + assigns(:page).should eq 5 + end + it '省略されると@pageに1値が入る' do + get :resource_pictures, :id => @other_artist.id + assigns(:page).should eq 1 + end + it '与えられたpage_sizeがセットされている' do + get :resource_pictures, :id => @other_artist.id, :page_size => 15 + assigns(:page_size).should eq 15 + end + it '省略されると@page_sizeにデフォルト値が入る' do + get :resource_pictures, :id => @other_artist.id + assigns(:page_size).should eq Author.default_resource_picture_page_size + end + it '最大を超えると@page_sizeにデフォルト最大値が入る' do + get :resource_pictures, :id => @other_artist.id, :page_size => 1500 + assigns(:page_size).should eq Author.resource_picture_max_page_size + end + it '不正な値が入ると@page_sizeにデフォルト最大値が入る' do + get :resource_pictures, :id => @other_artist.id, :page_size => 0 + assigns(:page_size).should eq Author.default_resource_picture_page_size + end + end + context 'つつがなく終わるとき' do + it 'ステータスコード200 OKを返す' do + get :resource_pictures, :id => @other_artist.id + response.should be_success + end + it '絵師モデルに単体取得を問い合わせている' do + Artist.should_receive(:show).exactly(1) + get :resource_pictures, :id => @other_artist.id + end + it '素材モデルに一覧を問い合わせている' do + ResourcePicture.should_receive(:mylist).exactly(1) + get :resource_pictures, :id => @other_artist.id + end + it '@resource_picturesにリストを取得している' do + get :resource_pictures, :id => @other_artist.id + assigns(:resource_pictures).should have_at_least(3).items + end + context 'html形式' do + it 'resource_pictureテンプレートを描画する' do + get :resource_pictures, :id => @other_artist.id + response.should render_template("resource_pictures") + end + end + context 'json形式' do + it 'jsonデータを返す' do + get :resource_pictures, :id => @other_artist.id, :format => :json + lambda{JSON.parse(response.body)}.should_not raise_error(JSON::ParserError) + end + it '素材モデルにコマリストのjson出力を問い合わせている' do + ResourcePicture.should_receive(:list_json_opt).exactly(1) + get :resource_pictures, :id => @other_artist.id, :format => :json + end + it 'データがリスト構造になっている' do + get :resource_pictures, :id => @other_artist.id, :format => :json + json = JSON.parse response.body + json.should have_at_least(3).items + end + it 'リストの先頭くらいは素材っぽいものであって欲しい' do + get :resource_pictures, :id => @other_artist.id, :format => :json + json = JSON.parse response.body + json.first.has_key?("original_picture_id").should be_true + json.first.has_key?("license_id").should be_true + end + end + end + context 'ユーザ権限がないとき' do + before do + sign_out @user + end + context 'html形式' do + it 'ステータスコード302 Foundを返す' do + get :resource_pictures, :id => @other_artist.id + response.status.should eq 302 + end + it 'サインインページへ遷移する' do + get :resource_pictures, :id => @other_artist.id + response.should redirect_to '/users/sign_in' + end + end + context 'json形式' do + it 'ステータスコード401 Unauthorizedを返す' do + get :resource_pictures, :id => @other_artist.id, :format => :json + response.status.should eq 401 + end + it '応答メッセージにUnauthorizedを返す' do + get :resource_pictures, :id => @other_artist.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 :resource_pictures, :id => @other_artist.id + response.should be_success + end + end + context 'ユーザだが作家登録していないとき' do + before do + @artist.destroy + end + it 'ステータスコード200 OKを返す' do + get :resource_pictures, :id => @other_artist.id + response.should be_success + end + end + end + describe '絵師数取得に於いて' do before do Artist.should_receive(:visible_count).and_return(3) @@ -857,6 +985,58 @@ else end end + describe '対象絵師の素材一覧表示に於いて' do + before do + @other_user = FactoryGirl.create( :user_yas) + @other_author = FactoryGirl.create :author, :user_id => @other_user.id + @other_artist = FactoryGirl.create :artist_yas, :author_id => @other_author.id + @op = FactoryGirl.create :original_picture, :artist_id => @other_artist.id + @p = FactoryGirl.create :picture, :original_picture_id => @op.id, :license_id => @license.id, :artist_id => @other_artist.id + @rp = FactoryGirl.create :resource_picture, :artist_id => @other_artist.id, :license_id => @license.id, :original_picture_id => @op.id, :picture_id => @p.id + ResourcePicture.stub(:mylist).and_return([@rp, @rp, @rp]) + sign_in @user + end + context 'つつがなく終わるとき' do + it 'ステータスコード200 OKを返す' do + get :resource_pictures, :id => @other_artist.id + response.should be_success + end + context 'html形式' do + it 'resource_pictureテンプレートを描画する' do + get :resource_pictures, :id => @other_artist.id + response.should render_template("resource_pictures") + end + end + context 'json形式' do + it 'jsonデータを返す' do + get :resource_pictures, :id => @other_artist.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 + it 'ステータスコード200 OKを返す' do + get :resource_pictures, :id => @other_artist.id + response.should be_success + end + context 'html形式' do + it 'resource_pictureテンプレートを描画する' do + get :resource_pictures, :id => @other_artist.id + response.should render_template("resource_pictures") + end + end + context 'json形式' do + it 'jsonデータを返す' do + get :resource_pictures, :id => @other_artist.id, :format => :json + lambda{JSON.parse(response.body)}.should_not raise_error(JSON::ParserError) + end + end + end + end + describe '絵師数取得に於いて' do before do Artist.should_receive(:visible_count).and_return(3) diff --git a/spec/controllers/authors_controller_spec.rb b/spec/controllers/authors_controller_spec.rb index b0e68170..2ef27019 100644 --- a/spec/controllers/authors_controller_spec.rb +++ b/spec/controllers/authors_controller_spec.rb @@ -238,6 +238,257 @@ if MagicNumber['run_mode'] == 1 =end end + describe '対象作家のコミック一覧表示に於いて' do + before do + @other_user = FactoryGirl.create( :user_yas) + @other_author = FactoryGirl.create :author, :user_id => @other_user.id + @other_artist = FactoryGirl.create :artist_yas, :author_id => @other_author.id + @comic = FactoryGirl.create :comic, :author_id => @other_user.author.id + Comic.stub(:mylist).and_return([@comic, @comic, @comic]) + sign_in @user + end + context 'パラメータpageについて' do + it '@pageに値が入る' do + get :comics, :id => @other_author.id, :page => 5 + assigns(:page).should eq 5 + end + it '省略されると@pageに1値が入る' do + get :comics, :id => @other_author.id + assigns(:page).should eq 1 + end + it '与えられたpage_sizeがセットされている' do + get :comics, :id => @other_author.id, :page_size => 15 + assigns(:page_size).should eq 15 + end + it '省略されると@page_sizeにデフォルト値が入る' do + get :comics, :id => @other_author.id + assigns(:page_size).should eq Author.default_comic_page_size + end + it '最大を超えると@page_sizeにデフォルト最大値が入る' do + get :comics, :id => @other_author.id, :page_size => 1500 + assigns(:page_size).should eq Author.comic_max_page_size + end + it '不正な値が入ると@page_sizeにデフォルト最大値が入る' do + get :comics, :id => @other_author.id, :page_size => 0 + assigns(:page_size).should eq Author.default_comic_page_size + end + end + context 'つつがなく終わるとき' do + it 'ステータスコード200 OKを返す' do + get :comics, :id => @other_author.id + response.should be_success + end + it '作家モデルに単体取得を問い合わせている' do + Author.should_receive(:show).exactly(1) + get :comics, :id => @other_author.id + end + it 'コミックモデルに一覧を問い合わせている' do + Comic.should_receive(:mylist).exactly(1) + get :comics, :id => @other_author.id + end + it '@comicsにリストを取得している' do + get :comics, :id => @other_author.id + assigns(:comics).should have_at_least(3).items + end + context 'html形式' do + it 'comicテンプレートを描画する' do + get :comics, :id => @other_author.id + response.should render_template("comic") + end + end + context 'json形式' do + it 'jsonデータを返す' do + get :comics, :id => @other_author.id, :format => :json + lambda{JSON.parse(response.body)}.should_not raise_error(JSON::ParserError) + end + it 'コミックモデルにjson一覧出力オプションを問い合わせている' do + Comic.should_receive(:list_json_opt).exactly(1) + get :comics, :id => @other_author.id, :format => :json + end + it 'データがリスト構造になっている' do + get :comics, :id => @other_author.id, :format => :json + json = JSON.parse response.body + json.should have_at_least(3).items + end + it 'リストの先頭くらいはコミックっぽいものであって欲しい' do + get :comics, :id => @other_author.id, :format => :json + json = JSON.parse response.body + json.first.has_key?("title").should be_true + json.first.has_key?("visible").should be_true + end + end + end + context 'ユーザ権限がないとき' do + before do + sign_out @user + end + context 'html形式' do + it 'ステータスコード302 Foundを返す' do + get :comics, :id => @other_author.id + response.status.should eq 302 + end + it 'サインインページへ遷移する' do + get :comics, :id => @other_author.id + response.should redirect_to '/users/sign_in' + end + end + context 'json形式' do + it 'ステータスコード401 Unauthorizedを返す' do + get :comics, :id => @other_author.id, :format => :json + response.status.should eq 401 + end + it '応答メッセージにUnauthorizedを返す' do + get :comics, :id => @other_author.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 :comics, :id => @other_author.id + response.should be_success + end + end + context 'ユーザだが作家登録していないとき' do + before do + @author.destroy + end + it 'ステータスコード200 OKを返す' do + get :comics, :id => @other_author.id + response.should be_success + end + end + end + + describe '対象作家のコマ一覧表示に於いて' do + before do + @other_user = FactoryGirl.create( :user_yas) + @other_author = FactoryGirl.create :author, :user_id => @other_user.id + @other_artist = FactoryGirl.create :artist_yas, :author_id => @other_author.id + @panel = FactoryGirl.create :panel, :author_id => @other_author.id + Panel.stub(:mylist).and_return([@panel, @panel, @panel]) + sign_in @user + end + context 'パラメータpageについて' do + it '@pageに値が入る' do + get :panels, :id => @other_author.id, :page => 5 + assigns(:page).should eq 5 + end + it '省略されると@pageに1値が入る' do + get :panels, :id => @other_author.id + assigns(:page).should eq 1 + end + it '与えられたpage_sizeがセットされている' do + get :panels, :id => @other_author.id, :page_size => 15 + assigns(:page_size).should eq 15 + end + it '省略されると@page_sizeにデフォルト値が入る' do + get :panels, :id => @other_author.id + assigns(:page_size).should eq Author.default_panel_page_size + end + it '最大を超えると@page_sizeにデフォルト最大値が入る' do + get :panels, :id => @other_author.id, :page_size => 1500 + assigns(:page_size).should eq Author.panel_max_page_size + end + it '不正な値が入ると@page_sizeにデフォルト最大値が入る' do + get :panels, :id => @other_author.id, :page_size => 0 + assigns(:page_size).should eq Author.default_panel_page_size + end + end + context 'つつがなく終わるとき' do + it 'ステータスコード200 OKを返す' do + get :panels, :id => @other_author.id + response.should be_success + end + it '作家モデルに単体取得を問い合わせている' do + Author.should_receive(:show).exactly(1) + get :panels, :id => @other_author.id + end + it 'コマモデルに一覧を問い合わせている' do + Panel.should_receive(:mylist).exactly(1) + get :panels, :id => @other_author.id + end + it '@panelsにリストを取得している' do + get :panels, :id => @other_author.id + assigns(:panels).should have_at_least(3).items + end + context 'html形式' do + it 'comicテンプレートを描画する' do + get :panels, :id => @other_author.id + response.should render_template("panels") + end + end + context 'json形式' do + it 'jsonデータを返す' do + get :panels, :id => @other_author.id, :format => :json + lambda{JSON.parse(response.body)}.should_not raise_error(JSON::ParserError) + end + it 'コマモデルにコマリストのjson出力を問い合わせている' do + Panel.should_receive(:list_as_json_text).exactly(1) + get :panels, :id => @other_author.id, :format => :json + end + it 'データがリスト構造になっている' do + get :panels, :id => @other_author.id, :format => :json + json = JSON.parse response.body + json.should have_at_least(3).items + end + it 'リストの先頭くらいはコマっぽいものであって欲しい' do + get :panels, :id => @other_author.id, :format => :json + json = JSON.parse response.body + json.first.has_key?("z").should be_true + end + end + end + context 'ユーザ権限がないとき' do + before do + sign_out @user + end + context 'html形式' do + it 'ステータスコード302 Foundを返す' do + get :panels, :id => @other_author.id + response.status.should eq 302 + end + it 'サインインページへ遷移する' do + get :panels, :id => @other_author.id + response.should redirect_to '/users/sign_in' + end + end + context 'json形式' do + it 'ステータスコード401 Unauthorizedを返す' do + get :panels, :id => @other_author.id, :format => :json + response.status.should eq 401 + end + it '応答メッセージにUnauthorizedを返す' do + get :panels, :id => @other_author.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 :panels, :id => @other_author.id + response.should be_success + end + end + context 'ユーザだが作家登録していないとき' do + before do + @author.destroy + end + it 'ステータスコード200 OKを返す' do + get :panels, :id => @other_author.id + response.should be_success + end + end + end + describe '作家数取得に於いて' do before do Author.should_receive(:visible_count).and_return(3) @@ -828,6 +1079,106 @@ else end end + describe '対象作家のコミック一覧表示に於いて' do + before do + @other_user = FactoryGirl.create( :user_yas) + @other_author = FactoryGirl.create :author, :user_id => @other_user.id + @other_artist = FactoryGirl.create :artist_yas, :author_id => @other_author.id + @comic = FactoryGirl.create :comic, :author_id => @other_user.author.id + Comic.stub(:mylist).and_return([@comic, @comic, @comic]) + sign_in @user + end + context 'つつがなく終わるとき' do + it 'ステータスコード200 OKを返す' do + get :comics, :id => @other_author.id + response.should be_success + end + context 'html形式' do + it 'comicテンプレートを描画する' do + get :comics, :id => @other_author.id + response.should render_template("comic") + end + end + context 'json形式' do + it 'jsonデータを返す' do + get :comics, :id => @other_author.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 + it 'ステータスコード200 OKを返す' do + get :comics, :id => @other_author.id + response.should be_success + end + context 'html形式' do + it 'comicテンプレートを描画する' do + get :comics, :id => @other_author.id + response.should render_template("comic") + end + end + context 'json形式' do + it 'jsonデータを返す' do + get :comics, :id => @other_author.id, :format => :json + lambda{JSON.parse(response.body)}.should_not raise_error(JSON::ParserError) + end + end + end + end + + describe '対象作家のコマ一覧表示に於いて' do + before do + @other_user = FactoryGirl.create( :user_yas) + @other_author = FactoryGirl.create :author, :user_id => @other_user.id + @other_artist = FactoryGirl.create :artist_yas, :author_id => @other_author.id + @panel = FactoryGirl.create :panel, :author_id => @other_author.id + Panel.stub(:mylist).and_return([@panel, @panel, @panel]) + sign_in @user + end + context 'つつがなく終わるとき' do + it 'ステータスコード200 OKを返す' do + get :panels, :id => @other_author.id + response.should be_success + end + context 'html形式' do + it 'comicテンプレートを描画する' do + get :panels, :id => @other_author.id + response.should render_template("panels") + end + end + context 'json形式' do + it 'jsonデータを返す' do + get :panels, :id => @other_author.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 + it 'ステータスコード200 OKを返す' do + get :panels, :id => @other_author.id + response.should be_success + end + context 'html形式' do + it 'comicテンプレートを描画する' do + get :panels, :id => @other_author.id + response.should render_template("panels") + end + end + context 'json形式' do + it 'jsonデータを返す' do + get :panels, :id => @other_author.id, :format => :json + lambda{JSON.parse(response.body)}.should_not raise_error(JSON::ParserError) + end + end + end + end + describe '作家数取得に於いて' do before do Author.should_receive(:visible_count).and_return(3) diff --git a/spec/controllers/home_controller_spec.rb b/spec/controllers/home_controller_spec.rb index feba48d5..ac609e44 100644 --- a/spec/controllers/home_controller_spec.rb +++ b/spec/controllers/home_controller_spec.rb @@ -345,15 +345,15 @@ if MagicNumber['run_mode'] == 1 end it '省略されると@page_sizeにデフォルト値が入る' do get :panel_color - assigns(:page_size).should eq PanelColor.default_page_size + assigns(:page_size).should eq Author.default_panel_color_page_size end it '最大を超えると@page_sizeにデフォルト最大値が入る' do get :panel_color, :page_size => 1500 - assigns(:page_size).should eq PanelColor.max_page_size + assigns(:page_size).should eq Author.panel_color_max_page_size end it '不正な値が入ると@page_sizeにデフォルト最大値が入る' do get :panel_color, :page_size => 0 - assigns(:page_size).should eq PanelColor.default_page_size + assigns(:page_size).should eq Author.default_panel_color_page_size end end context 'つつがなく終わるとき' do @@ -446,15 +446,15 @@ if MagicNumber['run_mode'] == 1 end it '省略されると@page_sizeにデフォルト値が入る' do get :ground_picture - assigns(:page_size).should eq GroundPicture.default_page_size + assigns(:page_size).should eq Author.default_ground_picture_page_size end it '最大を超えると@page_sizeにデフォルト最大値が入る' do get :ground_picture, :page_size => 1500 - assigns(:page_size).should eq GroundPicture.max_page_size + assigns(:page_size).should eq Author.ground_picture_max_page_size end it '不正な値が入ると@page_sizeにデフォルト最大値が入る' do get :ground_picture, :page_size => 0 - assigns(:page_size).should eq GroundPicture.default_page_size + assigns(:page_size).should eq Author.default_ground_picture_page_size end end context 'つつがなく終わるとき' do @@ -547,15 +547,15 @@ if MagicNumber['run_mode'] == 1 end it '省略されると@page_sizeにデフォルト値が入る' do get :ground_color - assigns(:page_size).should eq GroundColor.default_page_size + assigns(:page_size).should eq Author.default_ground_color_page_size end it '最大を超えると@page_sizeにデフォルト最大値が入る' do get :ground_color, :page_size => 1500 - assigns(:page_size).should eq GroundColor.max_page_size + assigns(:page_size).should eq Author.ground_color_max_page_size end it '不正な値が入ると@page_sizeにデフォルト最大値が入る' do get :ground_color, :page_size => 0 - assigns(:page_size).should eq GroundColor.default_page_size + assigns(:page_size).should eq Author.default_ground_color_page_size end end context 'つつがなく終わるとき' do @@ -650,15 +650,15 @@ if MagicNumber['run_mode'] == 1 end it '省略されると@page_sizeにデフォルト値が入る' do get :resource_picture - assigns(:page_size).should eq Author.default_comic_page_size + assigns(:page_size).should eq Author.default_resource_picture_page_size end it '最大を超えると@page_sizeにデフォルト最大値が入る' do get :resource_picture, :page_size => 1500 - assigns(:page_size).should eq Author.comic_max_page_size + assigns(:page_size).should eq Author.resource_picture_max_page_size end it '不正な値が入ると@page_sizeにデフォルト最大値が入る' do get :resource_picture, :page_size => 0 - assigns(:page_size).should eq Author.default_comic_page_size + assigns(:page_size).should eq Author.default_resource_picture_page_size end end context 'つつがなく終わるとき' do