Skip to content

Commit

Permalink
user_nameをposterに変更、テストのitブロックをまとめる
Browse files Browse the repository at this point in the history
  • Loading branch information
kuri0616 committed Sep 17, 2024
1 parent dfec0bf commit d730e05
Show file tree
Hide file tree
Showing 12 changed files with 86 additions and 98 deletions.
4 changes: 2 additions & 2 deletions backend/app/controllers/memos_controller.rb
Original file line number Diff line number Diff line change
Expand Up @@ -45,10 +45,10 @@ def destroy
private

def memo_params
params.require(:memo).permit(:title, :content, :user_name)
params.require(:memo).permit(:title, :content, :poster)
end

def update_memo_params
params.require(:memo).permit(:content, :user_name)
params.require(:memo).permit(:content, :poster)
end
end
17 changes: 9 additions & 8 deletions backend/app/models/memo.rb
Original file line number Diff line number Diff line change
Expand Up @@ -4,16 +4,17 @@
#
# Table name: memos
#
# id :bigint not null, primary key
# content(メモの本文) :text(65535) not null
# title(メモのタイトル) :string(255) not null
# user_name(Slackのユーザー名) :string(21) not null
# created_at :datetime not null
# updated_at :datetime not null
# id :bigint not null, primary key
# content(メモの本文) :text(65535) not null
# poster(Slackのユーザー名) :string(50) not null
# title(メモのタイトル) :string(255) not null
# created_at :datetime not null
# updated_at :datetime not null
#
class Memo < ApplicationRecord
validates :title, :content, presence: true
validates :user_name, presence: true, length: { maximum: 21 }
validates :title, presence: true
validates :content, presence: true
validates :poster, presence: true, length: { maximum: 50 }
has_many :comments, dependent: :destroy
has_many :memo_tags, dependent: :destroy
has_many :tags, through: :memo_tags
Expand Down
2 changes: 1 addition & 1 deletion backend/app/views/memos/show.json.jbuilder
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ json.memo do
json.id @memo.id
json.title @memo.title
json.content @memo.content
json.user_name @memo.user_name
json.poster @memo.poster
json.created_at @memo.created_at
json.updated_at @memo.updated_at

Expand Down
2 changes: 1 addition & 1 deletion backend/config/locales/models/memo/ja.yml
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ ja:
memo:
title: タイトル
content: コンテンツ
user_name: ユーザ名
poster: Slackでの投稿者名
comment:
content: 内容
user:
Expand Down
2 changes: 1 addition & 1 deletion backend/db/Schemafile
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ end
create_table 'memos', charset: 'utf8mb4', collation: 'utf8mb4_0900_ai_ci', force: :cascade do |t|
t.string 'title', null: false, comment: 'メモのタイトル'
t.text 'content', null: false, comment: 'メモの本文'
t.string 'user_name', limit: 21, null: false, comment: 'Slackのユーザー名'
t.string 'poster', limit: 50, null: false, comment: 'Slackのユーザー名'
t.timestamp 'created_at', null: false
t.timestamp 'updated_at', null: false
end
Expand Down
2 changes: 1 addition & 1 deletion backend/db/schema.rb

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

4 changes: 2 additions & 2 deletions backend/doc/components/memoSchema.yml
Original file line number Diff line number Diff line change
Expand Up @@ -13,9 +13,9 @@ components:
content:
type: string
example: メモの内容
user_name:
poster:
type: string
example: ユーザ名
example: Slackでの投稿者名
created_at:
type: string
format: date-time
Expand Down
4 changes: 2 additions & 2 deletions backend/doc/paths/memo.yml
Original file line number Diff line number Diff line change
Expand Up @@ -33,9 +33,9 @@ paths:
content:
type: string
example: メモの内容
user_name:
poster:
type: string
example: ユーザ名
example: Slackでの投稿者名
responses:
'204' :
description: No Content
Expand Down
14 changes: 7 additions & 7 deletions backend/spec/factories/memos.rb
Original file line number Diff line number Diff line change
Expand Up @@ -4,17 +4,17 @@
#
# Table name: memos
#
# id :bigint not null, primary key
# content(メモの本文) :text(65535) not null
# title(メモのタイトル) :string(255) not null
# user_name(Slackのユーザー名) :string(21) not null
# created_at :datetime not null
# updated_at :datetime not null
# id :bigint not null, primary key
# content(メモの本文) :text(65535) not null
# poster(Slackのユーザー名) :string(50) not null
# title(メモのタイトル) :string(255) not null
# created_at :datetime not null
# updated_at :datetime not null
#
FactoryBot.define do
factory :memo do
title { Faker::Lorem.sentence(word_count: 3) }
content { Faker::Lorem.paragraph(sentence_count: 5) }
user_name { Faker::Name.name }
poster { Faker::Name.name }
end
end
112 changes: 49 additions & 63 deletions backend/spec/models/memo_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -4,18 +4,18 @@
#
# Table name: memos
#
# id :bigint not null, primary key
# content(メモの本文) :text(65535) not null
# title(メモのタイトル) :string(255) not null
# user_name(Slackのユーザー名) :string(21) not null
# created_at :datetime not null
# updated_at :datetime not null
# id :bigint not null, primary key
# content(メモの本文) :text(65535) not null
# poster(Slackのユーザー名) :string(50) not null
# title(メモのタイトル) :string(255) not null
# created_at :datetime not null
# updated_at :datetime not null
#
RSpec.describe Memo do
subject(:memo) { build(:memo) }
let(:memo) { build(:memo) }

describe 'バリデーションのテスト' do
context 'title と content と user_name が有効な場合' do
context '属性が有効な場合' do
it 'valid?メソッドがtrueを返すこと' do
expect(memo).to be_valid
end
Expand All @@ -24,91 +24,77 @@
context 'titleが空文字の場合' do
before { memo.title = '' }

it 'valid?メソッドがfalseを返すこと' do
expect(memo).not_to be_valid
end

it 'errorsに「タイトルを入力してください」と格納されること' do
memo.valid?
expect(memo.errors.full_messages).to eq ['タイトルを入力してください']
it 'valid?メソッドがfalseを返し、エラーメッセージが格納される' do
aggregate_failures do
expect(memo).not_to be_valid
expect(memo.errors.full_messages).to eq ['タイトルを入力してください']
end
end
end

context 'titleがnilの場合' do
before { memo.title = nil }

it 'valid?メソッドがfalseを返すこと' do
expect(memo).not_to be_valid
end

it 'errorsに「タイトルを入力してください」と格納されること' do
memo.valid?
expect(memo.errors.full_messages).to eq ['タイトルを入力してください']
it 'valid?メソッドがfalseを返し、エラーメッセージが格納される' do
aggregate_failures do
expect(memo).not_to be_valid
expect(memo.errors.full_messages).to eq ['タイトルを入力してください']
end
end
end

context 'contentが空文字の場合' do
before { memo.content = '' }

it 'valid?メソッドがfalseを返すこと' do
expect(memo).not_to be_valid
end

it 'errorsに「コンテンツを入力してください」と格納されること' do
memo.valid?
expect(memo.errors.full_messages).to eq ['コンテンツを入力してください']
it 'valid?メソッドがfalseを返し、エラーメッセージが格納される' do
aggregate_failures do
expect(memo).not_to be_valid
expect(memo.errors.full_messages).to eq ['コンテンツを入力してください']
end
end
end

context 'contentがnilの場合' do
before { memo.content = nil }

it 'valid?メソッドがfalseを返すこと' do
expect(memo).not_to be_valid
end

it 'errorsに「コンテンツを入力してください」と格納されること' do
memo.valid?
expect(memo.errors.full_messages).to eq ['コンテンツを入力してください']
it 'valid?メソッドがfalseを返し、エラーメッセージが格納される' do
aggregate_failures do
expect(memo).not_to be_valid
expect(memo.errors.full_messages).to eq ['コンテンツを入力してください']
end
end
end

context 'user_nameが空文字の場合' do
before { memo.user_name = '' }

it 'valid?メソッドがfalseを返すこと' do
expect(memo).not_to be_valid
end
context 'posterが空文字の場合' do
before { memo.poster = '' }

it 'errorsに「ユーザー名を入力してください」と格納されること' do
memo.valid?
expect(memo.errors.full_messages).to eq ['ユーザ名を入力してください']
it 'valid?メソッドがfalseを返し、エラーメッセージが格納される' do
aggregate_failures do
memo.valid?
expect(memo.errors.full_messages).to eq ['Slackでの投稿者名を入力してください']
end
end
end

context 'user_nameがnilの場合' do
before { memo.user_name = nil }

it 'valid?メソッドがfalseを返すこと' do
expect(memo).not_to be_valid
end
context 'posterがnilの場合' do
before { memo.poster = nil }

it 'errorsに「ユーザ名を入力してください」と格納されること' do
memo.valid?
expect(memo.errors.full_messages).to eq ['ユーザ名を入力してください']
it 'valid?メソッドがfalseを返し、エラーメッセージが格納される' do
aggregate_failures do
expect(memo).not_to be_valid
expect(memo.errors.full_messages).to eq ['Slackでの投稿者名を入力してください']
end
end
end

context 'user_nameが21文字以上の場合' do
before { memo.user_name = 'a' * 22 }
context 'posterが50文字以上の場合' do
before { memo.poster = 'a' * 51 }

it 'valid?メソッドがfalseを返すこと' do
expect(memo).not_to be_valid
end

it 'errorsに「ユーザ名は21文字以内で入力してください」と格納されること' do
memo.valid?
expect(memo.errors.full_messages).to eq ['ユーザ名は21文字以内で入力してください']
it 'valid?メソッドがfalseを返し、エラーメッセージが格納される' do
aggregate_failures do
expect(memo).not_to be_valid
expect(memo.errors.full_messages).to eq ['Slackでの投稿者名は50文字以内で入力してください']
end
end
end
end
Expand Down
9 changes: 5 additions & 4 deletions backend/spec/requests/memos_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -70,10 +70,11 @@
end

describe 'POST /memos' do
context 'ログイン中かつタイトルとコンテンツとユーザ名が有効な場合' do
context 'ログイン中かつタイトルとコンテンツと投稿者が有効な場合' do
let(:valid_memo_params) do
{ title: Faker::Lorem.sentence(word_count: 3), content: Faker::Lorem.paragraph(sentence_count: 5),
user_name: Faker::Name.name }
{ title: Faker::Lorem.sentence(word_count: 3),
content: Faker::Lorem.paragraph(sentence_count: 5),
poster: Faker::Name.name }
end

before { sign_in(user) }
Expand All @@ -100,7 +101,7 @@
assert_request_schema_confirm
expect(response).to have_http_status(:unprocessable_content)
assert_response_schema_confirm(422)
expect(response.parsed_body['errors']).to eq(%w[タイトルを入力してください コンテンツを入力してください ユーザ名を入力してください])
expect(response.parsed_body['errors']).to eq(%w[タイトルを入力してください コンテンツを入力してください Slackでの投稿者名を入力してください])
end
end
end
Expand Down
12 changes: 6 additions & 6 deletions backend/test/fixtures/memos.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,12 +2,12 @@
#
# Table name: memos
#
# id :bigint not null, primary key
# content(メモの本文) :text(65535) not null
# title(メモのタイトル) :string(255) not null
# user_name(Slackのユーザー名) :string(21) not null
# created_at :datetime not null
# updated_at :datetime not null
# id :bigint not null, primary key
# content(メモの本文) :text(65535) not null
# poster(Slackのユーザー名) :string(50) not null
# title(メモのタイトル) :string(255) not null
# created_at :datetime not null
# updated_at :datetime not null
#

one:
Expand Down

0 comments on commit d730e05

Please sign in to comment.