webアプリ開発　テストケース作成

# 初めに
webアプリ開発でデプロイする前に入力フォームが正しく動作するのかを確認するためにテストケースを作成しました。

# テストケース
## 1. 入力ができるかを確認
これは使われそうな入力内容で本当に入力できてデータベースに登録されるのかを確認するために実施しました。

実施箇所は
- ユーザー登録
- ログイン
- パスワードリセットメール登録
- パスワードリセット画面
- プロフィール情報の変更
- パスワード更新
- アカウントの削除
- 新規記事登録
- 記事の変更
- コメント

## 2. SQLインジェクション対策
入力フォームを使うのでSQLインジェクション対策で各項目に(INSERT INTO users VALUES ('1', 'タカシ’);を入れてデータベースに不正なデータが入れられないかを確かめました。

実施箇所
- ユーザー登録
- ログイン
- パスワードリセットメール登録
- パスワードリセット画面
- プロフィール情報の変更
- パスワード更新
- アカウントの削除
- 新規記事登録
- 記事の変更
- コメント入力

## 3.XSS攻撃対策
webアプリの脆弱性を狙って外部からhtmlが実行するようにする攻撃がXSS攻撃ですが、変数が使われている部分には{{ }}で< >などの特殊文字をエスケープするようにしました。
確認場所

- プロフィール情報の変更
この項目はユーザーネームの欄に
```html
<input type="file" />
```
を入れて表示されるユーザーネームにファイル入力が表示されないことを確認しました。

- 新規記事登録
- 記事の変更
- コメント入力

これらの入力フォームには各項目の入力時に
```html
<input type="file" />
```
を入力後画面に表示される結果を見てファイル入力が表示されないことを確認しました。

## 4. バリデーション
### 1. ユーザー登録
ユーザー登録で確認すべき項目は
- ユーザーネーム
- メールアドレス
- パスワード

でした。

ユーザーネームで意識したことは
- 必須項目である
- ユーザーネームで権限を指定するので重複不可にした
- 長さの設定

です。

必須項目であることはドロップダウンを出すことや新規登録ができたことを確認するためには必要だと考えて入れました。  
重複不可でuniqueを使ったのは記事を書くことができるユーザーを限定したかったので同じユーザーネームで登録されると運用上不都合が起こるので設定しました。  
長さの設定では最低限ユーザーが判別できる長さでレイアウト上表示しやすい長さに調整しました。

メールアドレスで意識したことは
- 必須項目である
- メールアドレス形式で登録してもらう
- ユーザーの判別を行うために重複不可にした

です。
必須項目であることはメールアドレスはログイン時やパスワードリセットに使用するので必要だと考えて入れました。  
メールアドレス形式で設定してもらうことでパスワードリセットメールを送信しやすいので設定しました。
重複不可でuniqueを使ったのは同じメールアドレスで登録されるとパスワードリセットメールを送るともし重複していると運用上不都合が起こるので設定しました。  

### 2. ログイン

ログインで確認すべき項目は
- メールアドレス
- パスワード

でした。

メールアドレスで意識したことは
- 必須項目である
- メールアドレス形式で入力してもらう

です。  

メールアドレスはログイン時の必須項目にしました。メールアドレス形式で登録してもらったのでそのメールアドレスでログインしてもらうようにしました。

パスワードで意識したことは
- 必須項目である

です。  

パスワードはログイン時の必須項目にしました。  

ログイン全体で確認する項目でデータベースに登録されているのかがあると思います。それをauthへルパで確認しました。メールアドレスとパスワードどちらも間違えている場合やどちらかが間違えている場合があるのでどちらかの項目で登録されていなかったらエラーを出すようにしました。

### 3. パスワードリセット
パスワードリセットで確認すべき項目は
- メールアドレス
- パスワード

でした。

メールアドレスで意識したことは
- 必須項目である
- メールアドレス形式
- 登録されているかの確認

です。

必須項目であることはパスワードリセットメールを送るのに必須ですし、新しくパスワードを作成する時に本人か確認するのに必要だと考えたので追加しました。  
メールアドレス形式ではこの形式でないとパスワードリセットメールを送ることができないので追加しました。  
登録されているかの確認は登録されていないメールアドレスにパスワードリセットメールを送っても意味がないですし、本人確認のために追加しました。

パスワードで意識したことは
- 必須項目である
- 長さの指定
- 新しいパスワードと確認のパスワードが一致しているかの確認

です。

必須項目にしたのはパスワードを再設定してほしかったので追加しました。  
長さの指定ではセキュリティ的に最低限の長さで登録してほしかったので追加しました。  
新しいパスワードと確認で同じパスワードを入力してもらって本当に登録してもいいのかを確認するために追加しました。

### 4. プロフィール情報

プロフィール情報の変更で確認すべき項目は
- ユーザーネーム
- メールアドレス

でした。

ユーザーネームで意識したことは
- 必須項目である
- ユーザーネームで権限を指定するので重複不可にした
- 長さの指定

です。

新規登録のユーザーネームと同じです。

メールアドレスで意識したことは
- 必須項目である
- メールアドレス形式で登録してもらう
- ユーザーの判別を行うために重複不可にした

です。

新規登録のメールアドレスと同じです。


パスワードリセットで確認すべき項目は
- メールアドレス
- パスワード

でした。

### 5. パスワードの更新

パスワードの更新で確認すべき項目は

- パスワード

でした。


パスワードで意識したことは
- 必須項目である
- 長さの指定
- 新しいパスワードと確認のパスワードが一致しているかの確認
- データベースに登録されているか

です。

データベースに登録されているか以外はパスワードリセットと同じです。  
データベースに登録されているかは現在のパスワードの判定に使いました。

### 6. アカウント削除

アカウント削除で確認すべき項目は

- パスワード

でした。


パスワードで意識したことは
- 必須項目である
- データベースに登録されているか

です。

必須項目はアカウント削除は全てのデータが消えるので本当に消していいのかの確認として入力してほしいと考えたので追加しました。
データベースに登録されているかは現在のパスワードの判定に使いました。

### 7. 新規記事の登録


アカウント削除で確認すべき項目は

- タイトル
- サムネイル
- スラッグ
- 要約
- 内容
- カテゴリー

でした。  

タイトルで意識したことは
- 必須項目である
- 長さの指定

です。  

必須項目に指定したのは記事の表示するのにタイトルがほしいと考えたのとタイトル検索で必要になるから設定しました。  
長さを指定したのはブラウザに表示する時にレイアウトの調整がしやすいからです。

サムネイルで意識したことは
- 必須項目である

です。  

必須項目に指定したのは画像を添付したかったからです。

スラッグで意識したことは
- 必須項目である
- 重複不可
- 日本語不可
- 大文字不可
- 長さ指定

です。

必須項目に指定したのは記事を判別するためにスラッグが指定されるので必要だと考えたので追加しました。  
重複不可にしたのは記事を判別するために使用するためです。  
日本語不可にしたのはURLに日本語があると文字化けが起こる可能性があるのでそれをなくすために指定しました。  
大文字不可にしたのはURLで大文字を使わないからです。  
長さ指定をしたのはURLをあまり長くしたくなかったからです。  
要約で意識したことは
- 必須項目である
- 長さ指定

です。  

必須項目は記事の内容を軽く説明するのにあったらわかりやすいと考えたので設定しました。  
長さ指定はブラウザでのレイアウトを意識して設定しました。

要約で意識したことは
- 必須項目である
- 長さ指定

です。  

必須項目は記事の内容がメインで伝えたいところなので設定しました。  
長さ指定はブラウザでのレイアウトを意識して設定しました。

カテゴリーで意識したことは
- 必須項目である
- 設定したカテゴリーを表示すること

です。  

必須項目はカテゴリー別検索機能があるから設定しました。
設定したカテゴリーを表示とはカテゴリーはあらかじめ登録したカテゴリーを選択する形式なのでそれがしっかり機能するかを確認しました。

### 8. 新規記事の編集

新規登録と同じバリデーションを使用しました。

### 9. コメント入力

コメント入力で確認すべき項目は

- 内容

でした。 

コメント入力で意識したことは
- 必須項目である
- 長さの指定

です。  

必須項目は空入力を防止しようと考えていたからです。  
長さの指定はブラウザのレイアウト上の構成を考えて設定しました。

# 5. フォーム以外の動作確認

## 1. アイコンを押すとホーム画面に戻るか
ホーム画面にもどることができるか確認しました。

## 2. カテゴリー検索
自分で設定したカテゴリーが表示されてカテゴリーごとに記事が表示されるかを確認しました。

## 3. タイトル検索
タイトルを入力したら記事が表示されるかを確認しました。

## 4. ログアウト
ログアウトできるかを確認しました。

## 5. この記事にコメントするにはユーザー登録 か ログインしてください。 から移動できるか

ログインや新規登録をしていない時に記事を読むとこの記事にコメントするにはユーザー登録 か ログインしてください。 の表示があるのでそれぞれ移動できるかを確認しました。

## 6. パスワードリセットメールからパスワードリセット画面に移動できるか

パスワードリセットメールからパスワードリセット画面に移動してパスワードを設定できるかを確認しました。