リンクの修正
コントローラのテストが終了したので、再度受入テストを確認してみる。Guard でリターンを押すと以下のようなエラーになっている。これは年度を変更するリンクが作成されていないためである。
Failure/Error: ならば "[平成27年度]"と表示されていること expected to find text "[平成27年度]" in "[校務支援システムv3] 品川 ●[品川] [荒川] 前期中間 ●[前期中間] [前期] [後期中間] [後期] [学年末] メニュー [クラス] [教職員] [学生] 教務 [成績処理] [時間割] 室関係 [入試・広報] [進路] 共通 [会計] [施設] [統計] [設定] [ログアウト] 平成26年度・ユーザ名 [Home] 年度変更 × 平成27年度を作成しました。 年度一覧 和暦 西暦 デフォルト年度 平成27年度 2015 × 平成26年度 2014 ○"
まず、app/views/teacher/years/index.html.haml に注釈を追加する。
%p 年度を変更するには、和暦のリンクをクリックしてください。
さらに、和暦の部分をリンクに変更する。さまざまな権限のページで年度変更処理を書くのは面倒なので、すべての権限への振り分けを行っている root_path で処理を行う。
%td= link_to lh(year.wareki_nendo), root_path(year_id:year.id)
リンクが修正されたので、テストは進むが実際の変更処理はしていないので、平成26年度のままである。
Failure/Error: ならば "平成27年度・"と表示されていること expected to find text "平成27年度・" in "[校務支援システムv3] 品川 ●[品川] [荒川] 前期中間 ●[前期中間] [前期] [後期中間] [後期] [学年末] メニュー [クラス] [教職員] [学生] 教務 [成績処理] [時間割] 室関係 [入試・広報] [進路] 共通 [会計] [施設] [統計] [設定] [ログアウト] 平成26年度・ユーザ名 [Home] 教務室トップページ 年度に関する情報 リンク 内容 権限 [年度変更] 処理年度を変更します。 教務室 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19"
年度変更処理の追加
welcome#index にて年度が変更できるように修正する。実装の前にテストを記述する。
describe 'GET index' do context 'for :skyoumu' do before do login_user_as :skyoumu, controller end context 'without year_id' do before do expect(controller).to_not receive(:set_to_each_session) get :index end it { expect(response).to redirect_to(teacher_kyoumus_path) } end context 'with year_id and can obtain year' do before do expect(Year).to receive(:find).with('1') { double(Year, year: 2015) } expect(controller).to receive(:set_to_each_session).with('now_year_id', '1') get :index, year_id: '1' end it { expect(response).to redirect_to(teacher_kyoumus_path) } end context 'with year_id and can not obtain year' do before do expect(Year).to receive(:find).with('1') { nil } expect(controller).to_not receive(:set_to_each_session) get :index, year_id: '1' end it { expect(response).to redirect_to(teacher_kyoumus_path) } end
このテストを通過させるために、実装を修正する。year_id がある場合には、対応する year を取得し、見つかれば session に設定する。
if yid = params[:year_id] year = Year.find(yid) each_session['now_year_id'] = yid if year end
# @param [Symbol] key セットする session キー # @param [Object] セットする値 def set_to_each_session(key, value) session = each_session session[key] = value if session end
この結果、受入テストは以下のようにすべて通過した。
年度の追加、変更 教務室のトップページから年度変更に飛び、新規年度を作成し、年度を変更する 前提教務室でログインする -> ならば"平成26年度・"と表示されていること -> もし"[年度変更]"リンクをクリックする -> ならば年度一覧と表示されていること -> もし"平成27年度を作成"ボタンをクリックする -> ならば"[平成27年度]"と表示されていること -> もし"[平成27年度]"リンクをクリックする -> ならば"平成27年度・"と表示されていること
LDAP エラーのテスト
コードカバレッジを調べたところ LDAP サーバのエラーが合ったときの実装が未通過であった。ほとんど起こることはないがちゃんとテストをしておく。stub で LdapException を発生させて、該当部分が動作することを確認した。
context 'when LDAP server has errors' do it 'should render status:500' do login_user_as :skyoumu, controller expect(controller).to receive(:user_signed_in?).and_raise DeviseLdapAuthenticatable::LdapException get :index expect(response.status).to eq 500 end end
written by iHatenaSync