diff --git a/Gemfile b/Gemfile index bc12412..1fd08c0 100644 --- a/Gemfile +++ b/Gemfile @@ -8,4 +8,5 @@ group :development, :test do gem "rake" gem "pry" gem "rspec-rails", "~> 2.0" + gem "factory_girl_rails" end diff --git a/Gemfile.lock b/Gemfile.lock index bf1bc1c..a56132c 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -61,6 +61,11 @@ GEM unf (>= 0.0.5, < 1.0.0) erubis (2.7.0) execjs (2.0.2) + factory_girl (4.4.0) + activesupport (>= 3.0.0) + factory_girl_rails (4.4.1) + factory_girl (~> 4.4.0) + railties (>= 3.0.0) fluentd (0.10.46) cool.io (>= 1.1.1, < 2.0.0, != 1.2.0) http_parser.rb (>= 0.5.1, < 0.7.0) @@ -188,6 +193,7 @@ PLATFORMS ruby DEPENDENCIES + factory_girl_rails fluentd-ui! pry rake diff --git a/app/models/user.rb b/app/models/user.rb index f573c0d..70c745a 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -1,6 +1,9 @@ class User < ActiveRecord::Base has_secure_password + validates :name, uniqueness: true, presence: true + validates :remember_token, uniqueness: true, allow_nil: true + def generate_remember_token begin token = SecureRandom.base64(32) diff --git a/spec/factories/user.rb b/spec/factories/user.rb new file mode 100644 index 0000000..a61564b --- /dev/null +++ b/spec/factories/user.rb @@ -0,0 +1,7 @@ +FactoryGirl.define do + factory :user do + sequence(:name) {|n| "user#{n}" } + password "passw0rd" + password_confirmation "passw0rd" + end +end diff --git a/spec/models/user_spec.rb b/spec/models/user_spec.rb index 44032b4..b16884b 100644 --- a/spec/models/user_spec.rb +++ b/spec/models/user_spec.rb @@ -1,5 +1,56 @@ require 'spec_helper' describe User do - pending "add some examples to (or delete) #{__FILE__}" + let(:user) { FactoryGirl.build(:user) } + + describe "#generate_remember_token" do + subject { user.generate_remember_token } + it { User.find_by(remember_token: subject).should be_nil } + end + + describe "#valid?" do + it { user.should be_valid } + + describe "name" do + it "nil is invalid" do + user.name = nil + user.should_not be_valid + end + + it "taken name is invalid" do + another_user = FactoryGirl.create(:user) + user.name = another_user.name + user.should_not be_valid + end + end + + describe "password" do + it "password != password_confirmation is invalid" do + user.password = "a" + user.password_confirmation = "b" + user.should_not be_valid + end + end + + describe "remember_token" do + let(:token) { "xxx" } + + it "nil is valid" do + user.remember_token = nil + user.should be_valid + end + + it "nil and taken is valid " do + FactoryGirl.create(:user, remember_token: nil) + user.remember_token = nil + user.should be_valid + end + + it "taken token is invalid" do + FactoryGirl.create(:user, remember_token: token) + user.remember_token = token + user.should_not be_valid + end + end + end end