RORLabNew/rorla_api — pull request #67 by Majestin (2014-03-21 07:37:14+00:00)
Title: Post 모델 Column 추가 및 Spec 추가

Post Model after_create 메소드 추가
- factory의 after(:create) -> model의 after_create

app/models/post.rb

```
after_create :set_plaza_post
def set_plaza_post
self.create_plaza
end
```

Post Migration 생성
rails g migration add_column_to_post published_at:datetime hit:integer

Post Model Column Hit 변경

db/migrate/add_column_to_post.rb

add_column :posts, :hit, :integer, default: 0

Post Model DB Column 업데이트
```
rake db:migrate
rake db:test:clone
```

Post Hit 관련 Spec 추가
```
it "> Post 생성시 hit의 기본값은 0이다." do
expect(build(:post).hit).to eq(0)
end
```

Post Spec 추가 (published_at 관련)

models/post.rb

- published가 활성화시 현재시간을 넣고, 비활성화시 nil을 넣습니다.

private
def set_published_at
if (published == true || published == "true" || published == "1") && published_at.nil?
self.published_at = Time.now
elsif (published != true && published != "true" && published != "1") && published_at
self.published_at = nil
end
end

spec/post_spec.rb

it "> published가 false일때 published_at은 nil이다." do
post = create(:post, published: false)
expect(post.published_at).to be_nil
end
it "> published가 true일때 published_at에 Time이 입력된다." do
post = create(:post, published: true)
expect(post.published_at).to be_a_kind_of(Time)
end

Post Spec 추가 (title, content 관련)

models/post.rb

- title과 content의 최소, 최대 길이 조절

validates :title, presence: true, :length => { :minimum => 3, :maximum => 255 }
validates :content, presence: true, :length => { :minimum => 0, :maximum => 10000 }

spec/factories/posts.rb

- Facker의 characters를 이용하여 title과 content의 길이를 정합니다.

factory :invalid_post_by_min_title do
title Faker::Lorem.characters(2)
end
factory :invalid_post_by_max_title do
title Faker::Lorem.characters(256)
end
factory :invalid_post_by_max_content do
content Faker::Lorem.characters(10001)
end

spec/models/post_spec.rb

- Spec에서 확인합니다.

it "> Title이 3글자 미만이면 유효하지 않다." do
expect(build(:invalid_post_by_min_title)).to_not be_valid
end
it "> Title이 255자를 초과하면 유효하지 않다." do
expect(build(:invalid_post_by_max_title)).to_not be_valid
end
it "> Content가 10000자를 초과하면 유효하지 않다." do
expect(build(:invalid_post_by_max_content)).to_not be_valid
end