Fippiyのプログラム学習内容アウトプットBlog

日々の学習内容をアウトプットして振り返りを実施する。

Larave開発、書籍管理アプリ作成

ポートフォリオサイト

fippiy.github.io

 

 

PHPとLaravelによるアプリを開発しながら、学習しています。

 

開発中アプリ:book-property-management

protected-fortress-61913.herokuapp.com

 

趣旨

コード学習に加えて、自身に必要な物、やってみたいことをコンセプトに開発。

所有している本の整理ができていないので、アプリとして作成し実用化をする。

 

ゴール

初期段階で検討した仕様を全て達成するアプリを作成する。

その後、必要に応じて追加実装を行う。

 

検討した主な仕様

  • 本の情報を登録・編集・検索・削除できる
  • 本の画像が任意で登録できる
  • 登録書籍の中から、所有している本を登録・編集・検索・削除できる
  • ユーザーを登録・編集・削除できる
  • ユーザー新規登録・パスワードリセット・メールアドレス変更時にメールによる認証を行う
  • APIを利用した簡単書籍登録ができる

コード

github.com

Laravel開発、複数削除処理に対応する【3】複数削除テストを作成する

本情報の複数削除を作成が完了しましたので、テストによるチェックをおこなってプログラムが問題ないか確認を実施します。

今回の目的

複数削除仕様についてテストを作成し、問題なく処理できることを確認する

なぜやるか

テスト処理によって問題なく動作することを担保するため

やりたいこと

  • 削除用ダミーデータを複数用意する
  • 削除データをpost送信し、正常に削除できること
  • bookとpropertyそれぞれで正常動作すること

やったこと

  • bookとpropertyそれぞれで処理ができていることを確認する
  • factoryで複数件数データを作成する
  • post送信用データに連番配列を利用する
  • 削除結果が全て表示されていることを確認する

実施内容

書籍情報削除をテストする

まずは本の情報自体を消すページからテストしました。

# ~/tests/Feature/BookdataTest.php

// 複数削除
public function test_bookControll_ok_someDelete(){
 //// ユーザー生成
 $user = factory(User::class)->create(); // ユーザーを作成
 $this->actingAs($user); // ログイン済み
 $this->assertTrue(Auth::check()); // Auth認証済であることを確認
 // faker 自動生成
 $delete_bookdatas = factory(Bookdata::class, 20)->create();
 // 送信フォームパス
 $formpath = 'book/somedelete';
 // 削除データ
 $deletedata = ['select_books' => range(1, 20)];
 //// 削除
 $response = $this->from($formpath)->post($formpath, $deletedata); // 削除実施
 $response->assertSessionHasNoErrors(); // エラーメッセージがないこと
 $response->assertStatus(200); // 200ステータスであること
 $response->assertViewIs('book.delete_result'); // book.delete_resultビューであること
 // 削除されていることの確認(resultページ)
 $response->assertSeeText('書籍削除結果'); // 削除結果ページが出力されていること
 $response->assertStatus(200); // 200ステータスであること
 foreach($delete_bookdatas as $deletebook){
  $response->assertSeeText($deletebook->title); // 削除タイトルが結果に反映されていること
 }
}

書籍情報を複数削除した際に正常に削除されていることを確認しています。

factoryで複数データを作成する

初めにログイン状態にしておき、factoryを使用して本の情報を作成します。複数まとめて作成うる為に第二引数に数を指定しています。

連番配列を使う

フォームからselect_books配列に削除する本のidを指定してpost送信します。

本のidは書籍作成時に自動採番されるので、作成した本の数だけ配列として作成しています。

今回は20件の本をfactoryで作成しているので、rangeを利用して連番配列としました。

range(1,20) = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20]となっています。

20になっているのは、削除に関しても上限設定をしていたので、それに合わせています。

削除タイトルを確認する

削除後は結果表示を確認します。

factoryで作成時のデータを利用して、削除タイトル名がリストとして表示されていれば正常に結果表示されていることになります。

 

所有書籍情報削除をテストする

ユーザーが所有している本の情報に対しても削除機能をつけましたので、所有情報が解除できているかもテストを行います。

# ~/tests/Feature/PropertyTest.php

// 複数削除
public function test_propertySomeControll_ok_someDelete(){
 //// ユーザー生成
 $user = factory(User::class)->create(); // ユーザーを作成
 $this->actingAs($user); // ログイン済み
 $this->assertTrue(Auth::check()); // Auth認証済であることを確認
 // faker 自動生成
 $delete_propertydatas = factory(Property::class, 20)->create([
  'user_id' => $user->id,
 ]);
 // 送信フォームパス
 $formpath = 'property/somedelete';
 // 削除データ
 $deletedatas = ['select_books' => range(1, 20)];
 //// 削除
 $response = $this->from($formpath)->post($formpath, $deletedatas); // 削除実施
 $response->assertSessionHasNoErrors(); // エラーメッセージがないこと
 $response->assertStatus(200); // 200ステータスであること
 $response->assertViewIs('property.delete_result');
 // property.delete_resultビューであること

 // 削除されていることの確認(resultページ)
 $response->assertSeeText('所有書籍情報解除結果'); // 削除結果ページが出力されていること
 $response->assertStatus(200); // 200ステータスであること
 foreach($delete_propertydatas as $deleteproperty){
  $response->assertSeeText($deleteproperty->bookdata->title);
 // 削除タイトルが結果に反映されていること
 }
}

基本的には書籍削除と同じです。

ユーザーは固定する

factoryは所有情報が必要となるので、Property::classとして作成しています。

こちらのファクトリーは書籍情報、ユーザー、所有情報の3つがまとめて作成できるようにしていました。

しかし、そのまま作成するとbook.id=1,property.id=1,user.id=1とそれぞれに対してidが付与されます。

このまま作成してしまうと、ユーザーが20人分となり、1ユーザーが20書籍所持とはならないので、ユーザーだけは初めにログインしたユーザーで固定としました。

リレーションを利用する

最後は削除した所有書籍情報の結果を確認します。

作成したPropertyデータからタイトルを取得して確認できれば完了です。リレーションを組んでいるので、$deletepropety->bookdata->titleとbookdataを中継してやることで、書籍情報にアクセスしてタイトルを取得しました。

 

以上で正常動作時のテストは完了です。

残りのエラー時のテストは次で実施します。

Laravel開発、複数削除処理に対応する【2】コンポーネント変更による、表示先に対応する

前回記事にて書籍情報の一括削除処理を完成させました。

しかし、一覧表示はコンポーネントとして作成していましたので、book.indexページからみた一覧表示に対しての削除処理は行えますが、他のページから同じコンポーネントを参照しても、作成したチェックボックス等が正常動作しません。

これらについても、正常動作出来るように対応させていきます。

  • 今回の目的
    • なぜやるか
    • やりたいこと
    • やったこと
  • 実施内容
    • コンポーネント使用ページを確認する
      • book.index
      • book.find
      • property.index
      • property.find
    • 検索ページを修正する
      • 書籍情報検索ページ
    • 所有書籍ページを修正する
      • 所有書籍一覧リストの動作をどうするか
      • コンポーネントを修正する
      • propertyコントローラーを作成する

今回の目的

書籍一覧コンポーネントを利用している他のページにもチェックボックスが表示されるので、正常動作するようにする

なぜやるか

全てのページにおいて正常動作する仕様とするため

やりたいこと

一覧表示コンポーネントで表示されるページを再度確認する

全てのページで用意したチェックボックスが正常動作し、扱える様にする

やったこと

一覧表示コンポーネント利用ページを確認する

書籍情報検索ページで使用出来るようにする

所有書籍ページでも使用出来るようにする

続きを読む

Laravel開発、複数削除処理に対応する【1】書籍情報削除処理を作成する

前回記事までで、書籍一括登録対応を完了させました。

まとめて登録ができたので、次はまとめて削除に対応させていきます。

登録時と同様に、複数件に対する処理ができれば実装できそうです。結果についても登録時と同様に一覧表示で結果を出力できればユーザーにも結果が分かりやすく伝えられそうです。

  • 今回の目的
    • なぜやるか
    • やりたいこと
    • やったこと
  • 実施内容
    • 複数削除をどう実現するか
      • 複数登録の手法から考える
      • 削除する本をリストから選ぶ
    • ビューを編集する
    •  
    • コントローラーを編集する
      • フォームデータを受け取る
      • 送信データがなければ処理しない
      • 受け取ったデータを処理する
      • 所有者の確認
      • 削除処理
    • 結果表示する

今回の目的

登録されている書籍情報を複数削除できるようにする

なぜやるか

現状は本1件の詳細画面からしか削除する手段がなく、個別削除しかできないので複数まとめて削除できるようにする

やりたいこと

  • 削除する本を複数選択して削除を行う
  • 所有者のいる本は削除できない

やったこと

  • 書籍一覧から削除したい本を選択できるようにする
  • 書籍一覧をフォーム化してデータ送信できるようにする
  • 処理ステータスを配列格納し、結果表示に使用する
続きを読む

Laravel開発、本番環境で書籍情報が削除できていなかったので対応する

本番環境で実際に動作することを確認していた時に、書籍情報が削除できないことが分かりましたので、今回はこの対処を行います。

  • 今回の目的
    • なぜやるか
    • やりたいこと
    • やったこと
  • 実施内容
    • 削除不可原因は
      • countによる判断
      • if判断基準を変更する

今回の目的

書籍情報削除を本番環境で正常に動作させる

なぜやるか

本番環境で動作不可事象をなくし、正常に動作させるため

やりたいこと

  • 本番環境で削除できない原因を見つける
  • 本番環境で削除ができるようにする

やったこと

  • 原因を探る
  • 原因を解決する
続きを読む

Laravel開発、ISBN一括で登録にて追加した機能をテストする

ISBNテキスト一括登録を追加しましたので、この時に実装した内容についてテストを作成しました。

複数ISBNとおなじアクションを使用しているので、重複部分についてはテストしていません。

  • 今回の目的
    • なぜやるか
    • やりたいこと
    • やったこと
  • 実施内容
    • 一括ISBN登録ができることを確認する 
      • まとめて登録して情報が取得できていることを確認する
      • ハイフン自動除去対応できていること
      • カンマ、改行削除に対応できていること 
    • 一括登録時のエラー出力を確認する 
      • ISBN登録0件でバリデーションエラーとなること
      • 上限超過登録は受け付けしていないことを確認する
      • 数値以外の受付をしていないこと

今回の目的

追加実装したISBN一括登録に関してのテストを実施し、問題なく動作することを確認する

なぜやるか

追加項目が正常に動作していることを確認するため

やりたいこと

既存コントローラに追加した項目に対しての動作テストを実施する

やったこと

  • 一括登録フォームから送信して登録ができ、結果表示されること
  • ハイフン自動除去対応できていること
  • 空文字改行除去対応できていること
  • ISBN登録0件でバリデーションエラーとなること
  • 上限超過登録は受け付けしていないこと
  • 数値以外の受付をしていないこと
続きを読む