OSDN Git Service

ef7dd7c2229b91155419a752ead4e203dea358ba
[pettanr/pettanr.git] / spec / support / controller_macros.rb
1 module ControllerMacros\r
2   def list_should_return_filer_or_json action, params = {}\r
3     # html形式: \r
4     # ステータスコード200 OKを返す\r
5     # filerテンプレートを描画する\r
6     get action, params\r
7     expect(response).to be_success\r
8     expect(response).to render_template("templates/r/filer/filer")\r
9     # json形式\r
10     # ステータスコード200 OKを返す\r
11     # jsonデータを返す\r
12     get action, params.merge(:format => :json)\r
13     expect(response).to be_success\r
14     expect {JSON.parse(response.body)}.not_to raise_error\r
15   end\r
16   \r
17   # ゲストが画面からコンテンツにアクセスしようとした時の動作を確認する\r
18   def announce_sign_in_for_html\r
19     # html形式: ステータスコード302 Foundを返す\r
20     expect(response.status).to eq(302)\r
21     expect(response).to redirect_to '/users/sign_in'\r
22   end\r
23   \r
24   # ゲストがapiからコンテンツにアクセスしようとした時の動作を確認する\r
25   def announce_sign_in_for_json\r
26     # json形式: ステータスコード401 Unauthorizedを返す\r
27     expect(response.status).to eq(401)\r
28     expect(response.message).to match(/Unauthorized/)\r
29   end\r
30   \r
31   # ゲストがコンテンツにアクセスしようとしたとき、サインインページに遷移する。\r
32   # ほとんどすべての機能から利用されるので、 htmlとjsonをまとめて処理している。\r
33   # 作成と更新はメソッドが違うので、個別にチェックする。\r
34   def announce_sign_in_at_get action, params = {}\r
35     get action, params\r
36     announce_sign_in_for_html\r
37     get action, params.merge(:format => :json)\r
38     announce_sign_in_for_json\r
39   end\r
40   \r
41   # 作家活動をしていないユーザーが画面から創作活動をしようとしたとき、作家登録ページに遷移する\r
42   def announce_regist_author_for_html\r
43     expect(response.status).to eq(302)\r
44     expect(response).to redirect_to new_author_path\r
45   end\r
46   \r
47   # 作家活動していないユーザーがAPIから創作活動をしようとしたとき、例外を発生させる。\r
48   # 暫定的な仕様なので、良い方法があれば変えるかもしれない。メンテしやすいように切り分けてある。\r
49   # リクエストして例外が発生したところとらえるので、リクエストと検証を同時に行う\r
50   def announce_regist_author_for_json method, params = {}, action = :create\r
51     expect {__send__(method, action, params.merge(:format => :json))}.to raise_error\r
52   end\r
53   \r
54   def return_ok_at_get action, params = {}\r
55     # ステータスコード200 OKを返す\r
56     get action, params\r
57     expect(response).to be_success\r
58   end\r
59   \r
60   def post_save params, action = :create\r
61     post action, params\r
62   end\r
63   \r
64   def put_save params, action = :update\r
65     put action, params\r
66   end\r
67   \r
68   # 保存処理を成功したことにしてスキップする\r
69   def allow_save my_model_class\r
70     allow_any_instance_of(my_model_class).to receive(:save).and_return(true)\r
71   end\r
72   \r
73   # 保存処理を失敗したことにしてスキップする\r
74   def reject_save my_model_class\r
75     allow_any_instance_of(my_model_class).to receive(:save).and_return(false)\r
76   end\r
77   \r
78   def show_action_return_profiler item_id\r
79     # prof形式: ステータスコード200 OKを返す\r
80     get :show, :id => item_id, :format => :prof\r
81     expect(response).to be_success\r
82     # json形式: ステータスコード200 OKを返す\r
83     get action, params.merge(:format => :json)\r
84     expect(response).to be_success\r
85   end\r
86   \r
87   def announce_regist_owner_in_at_get action, params = {}\r
88     # html形式: ステータスコード302 Foundを返す\r
89     get action, params\r
90     expect(response.status).to eq(302)\r
91     expect(response).to redirect_to '/users/sign_in'\r
92     # json形式: ステータスコード401 Unauthorizedを返す\r
93     get action, params.merge(:format => :json)\r
94     expect(response.status).to eq(401)\r
95     expect(response.message).to match(/Unauthorized/)\r
96   end\r
97   \r
98   def factory_contents factory_name, author, count = 5\r
99     FactoryGirl.create_list(factory_name, count, author: author)\r
100   end\r
101   \r
102 end\r
103 \r