前回の続き。
求人を一旦公開してしまったら、その後の編集は行うことができません。
直接該当のtokenを指定してURLを辿っても、現れるリンクは削除用だけになります。
http://symfony.localhost/frontend_dev.php/job/token
が、実はエディット画面のURLを直接指定すれば平然と編集ができてしまいます。
http://symfony.localhost/frontend_dev.php/job/token/edit
公開後に編集とかされるとブラック的に色々とアレなので防ぎましょう。
まず自動投稿を行うJobeetTestFunctional::createJob()に公開機能を付けてみます。
/lib/test/JobeetTestFunctional.class.php
第二引数$publishにtrueを指定すると、新たな投稿を行ったあとでPublishリンクを踏んで公開状態にまでしてくれます。
次にテストを書くわけですが、公開完了ページには編集画面へのリンクがありません。
投稿内容からtokenを拾ってきてURLに突っ込む仕組みを作りましょう。
/test/functional/frontend/jobActionsTest.php
求人を作成、投稿した後、エディット画面を拾ってきて、そのステータスコードが404であることを確認するという流れになります。
エディット画面はリンクがないので、/job/:token/editってURLを直接作って取得してきます。
tokenを取得するために、JobeetJobオブジェクトを取得するgetJobByPosition()メソッドを新設します。
/lib/test/JobeetTestFunctional.class.php
さっくりできました。
さて実行。
>php test/functional/frontend/jobActionsTest.php
> 3.5 - When a job is published, it cannot be edited anymore
# get /job/new
# post /job
# put /job/03586d0f02dd19df6158eee0ccd0369529fb48e2/publish
# get /job/03586d0f02dd19df6158eee0ccd0369529fb48e2/editnot ok 1 - status code is 404
# Failed test (symfony/test/sfTesterResponse.class.php at line 412)
# got: 200
# expected: 404
404が返ってくるはずなのに200が返ってきました。
現状ではエディット画面に行けてしまいます。
公開後の求人は編集できないようにしましょう。
エディット画面のURLは/job/:token/editとなり、ルーティングのjob:sfDoctrineRouteCollectionにひっかかってjobモジュールのeditアクションが実行されます。
/apps/frontend/modules/job/actions/actions.class.php
$job->getIsActivated()がtrueであれば404という処理を追加しました。
>php test/functional/frontend/jobActionsTest.php
> 3.5 - When a job is published, it cannot be edited anymore
# get /job/new
# post /job
# put /job/38bd3acdf34b045c27f69b53d02e48fe10efdf42/publish
# get /job/38bd3acdf34b045c27f69b53d02e48fe10efdf42/edit
ok 1 - status code is 404
きちんと404がかえってきました。
ブラウザで見ても一旦公開した求人はエディットできません。
求人を一旦公開してしまったら、その後の編集は行うことができません。
直接該当のtokenを指定してURLを辿っても、現れるリンクは削除用だけになります。
http://symfony.localhost/frontend_dev.php/job/token
が、実はエディット画面のURLを直接指定すれば平然と編集ができてしまいます。
http://symfony.localhost/frontend_dev.php/job/token/edit
公開後に編集とかされるとブラック的に色々とアレなので防ぎましょう。
まず自動投稿を行うJobeetTestFunctional::createJob()に公開機能を付けてみます。
/lib/test/JobeetTestFunctional.class.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
|
public function createJob($values = array(), $publish = false){
$this->
get('/job/new')->
click('Preview your job', array('job' => array_merge(array(
'company' => 'Sensio Labs',
'url' => 'http://www.sensio.com/',
'position' => 'Developer',
'location' => 'Atlanta, USA',
'description' => 'You will work with symfony',
'how_to_apply' => 'Send me an email',
'email' => 'for.a.job@example.com',
'is_public' => false,
'type' => 'freelance',
), $values)))->
followRedirect()
;
if ($publish){
$this->
click('Publish', array(),
array('method' => 'put', '_with_csrf' => true))->
followRedirect()
;
}
return $this;
}
|
第二引数$publishにtrueを指定すると、新たな投稿を行ったあとでPublishリンクを踏んで公開状態にまでしてくれます。
次にテストを書くわけですが、公開完了ページには編集画面へのリンクがありません。
投稿内容からtokenを拾ってきてURLに突っ込む仕組みを作りましょう。
/test/functional/frontend/jobActionsTest.php
1
2
3
4
5
6
7
8
9
|
$browser->info('3.5 - When a job is published, it cannot be edited anymore')->
createJob(array('position' => 'FOO3'), true)->
get(sprintf('/job/%s/edit',
$browser->getJobByPosition('FOO3')->getToken()))->
with('response')->begin()->
isStatusCode(404)->
end()
;
|
求人を作成、投稿した後、エディット画面を拾ってきて、そのステータスコードが404であることを確認するという流れになります。
エディット画面はリンクがないので、/job/:token/editってURLを直接作って取得してきます。
tokenを取得するために、JobeetJobオブジェクトを取得するgetJobByPosition()メソッドを新設します。
/lib/test/JobeetTestFunctional.class.php
1
2
3
4
5
6
7
|
public function getJobByPosition($position){
$q = Doctrine_Query::create()
->from('JobeetJob j')
->where('j.position = ?', $position);
return $q->fetchOne();
}
|
さっくりできました。
さて実行。
>php test/functional/frontend/jobActionsTest.php
> 3.5 - When a job is published, it cannot be edited anymore
# get /job/new
# post /job
# put /job/03586d0f02dd19df6158eee0ccd0369529fb48e2/publish
# get /job/03586d0f02dd19df6158eee0ccd0369529fb48e2/editnot ok 1 - status code is 404
# Failed test (symfony/test/sfTesterResponse.class.php at line 412)
# got: 200
# expected: 404
404が返ってくるはずなのに200が返ってきました。
現状ではエディット画面に行けてしまいます。
公開後の求人は編集できないようにしましょう。
エディット画面のURLは/job/:token/editとなり、ルーティングのjob:sfDoctrineRouteCollectionにひっかかってjobモジュールのeditアクションが実行されます。
/apps/frontend/modules/job/actions/actions.class.php
1
2
3
4
5
6
7
8
9
10
11
12
|
/*
* フォームのエディット
*/
public function executeEdit(sfWebRequest $request){
//オブジェクト取得
$job = $this->getRoute()->getObject();
//is_activatedがtrueであれば404
$this->forward404If($job->getIsActivated());
//フォームに投入
$this->form = new JobeetJobForm($job);
}
|
$job->getIsActivated()がtrueであれば404という処理を追加しました。
>php test/functional/frontend/jobActionsTest.php
> 3.5 - When a job is published, it cannot be edited anymore
# get /job/new
# post /job
# put /job/38bd3acdf34b045c27f69b53d02e48fe10efdf42/publish
# get /job/38bd3acdf34b045c27f69b53d02e48fe10efdf42/edit
ok 1 - status code is 404
きちんと404がかえってきました。
ブラウザで見ても一旦公開した求人はエディットできません。
PR
トラックバック
トラックバックURL: