忍者ブログ
[PR]
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。



2024/11/23 21:49 |
Symfony1.4 11日目その5
前回の続き。

求人を一旦公開してしまったら、その後の編集は行うことができません。
直接該当の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
<?php
  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
<?php
$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
<?php
  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
<?php
    /*
     * フォームのエディット
     */
    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


2011/01/17 21:54 | Comments(0) | TrackBack() | PHP

トラックバック

トラックバックURL:

コメント

コメントを投稿する






Vodafone絵文字 i-mode絵文字 Ezweb絵文字 (絵文字)



<<twitterauth.phpでログイン | HOME | 買ったものリスト 2011/01/16>>
忍者ブログ[PR]