spec/date_spec.rb in icu_utils-1.2.0 vs spec/date_spec.rb in icu_utils-1.2.1

- old
+ new

@@ -1,174 +1,212 @@ require File.expand_path(File.dirname(__FILE__) + '/spec_helper') module ICU describe Date do + let(:penny) { ::Date.new(1986, 6, 16) } + let(:mark) { ::Date.new(1955, 11, 9) } + let(:today) { ::Date.today } + let(:yesterday) { ::Date.today - 1 } + context "no constraints" do it "today" do - today = ICU::Date.new(::Date.today) - expect(today).to be_valid - expect(today.date).to eq ::Date.today - expect(today.reasons).to be_empty + d = ICU::Date.new(today) + expect(d).to be_valid + expect(d.date).to eq today + expect(d.reasons).to be_empty end it "now" do - now = ICU::Date.new(Time.now) - expect(now).to be_valid - expect(now.date).to eq ::Date.today - expect(now.reasons).to be_empty + d = ICU::Date.new(Time.now) + expect(d).to be_valid + expect(d.date).to eq today + expect(d.reasons).to be_empty end it "human" do - now = ICU::Date.new("9th November 1955") - expect(now).to be_valid - expect(now.date).to eq ::Date.new(1955, 11, 9) - expect(now.reasons).to be_empty + d = ICU::Date.new("9th November 1955") + expect(d).to be_valid + expect(d.date).to eq mark + expect(d.reasons).to be_empty end it "abbreviated" do - now = ICU::Date.new("June 16 1986") - expect(now).to be_valid - expect(now.date).to eq ::Date.new(1986, 6, 16) - expect(now.reasons).to be_empty + d = ICU::Date.new("June 16 1986") + expect(d).to be_valid + expect(d.date).to eq penny + expect(d.reasons).to be_empty end it "invalid" do - invalid = ICU::Date.new("rubbish") - expect(invalid).to_not be_valid - expect(invalid.reasons).to_not be_empty - expect(invalid.reasons.size).to eq 1 - expect(invalid.reasons.first).to eq "errors.messages.invalid_date" + d = ICU::Date.new("rubbish") + expect(d).to_not be_valid + expect(d.reasons).to_not be_empty + expect(d.reasons.size).to eq 1 + expect(d.reasons.first).to eq "errors.messages.invalid_date" end it "impossible" do - invalid = ICU::Date.new("2014-02-30") - expect(invalid).to_not be_valid - expect(invalid.reasons).to_not be_empty - expect(invalid.reasons.size).to eq 1 - expect(invalid.reasons.first).to eq "errors.messages.invalid_date" + d = ICU::Date.new("2014-02-30") + expect(d).to_not be_valid + expect(d.reasons).to_not be_empty + expect(d.reasons.size).to eq 1 + expect(d.reasons.first).to eq "errors.messages.invalid_date" end end context "after" do it "today/yesterday" do - d = ICU::Date.new(::Date.today, after: ::Date.today - 1) + d = ICU::Date.new(today, after: yesterday) expect(d).to be_valid - expect(d.date).to eq ::Date.today + expect(d.date).to eq today expect(d.reasons).to be_empty end it "yesterday/today" do - d = ICU::Date.new(::Date.today - 1, after: ::Date.today) + d = ICU::Date.new(yesterday, after: today) expect(d).to_not be_valid - expect(d.date).to eq ::Date.today - 1 + expect(d.date).to eq yesterday expect(d.reasons[0]).to eq "errors.messages.after" - expect(d.reasons[1]).to eq restriction: ::Date.today.to_s + expect(d.reasons[1]).to eq restriction: today.to_s end it "today/today" do - d = ICU::Date.new(::Date.today, after: ::Date.today) + d = ICU::Date.new(today, after: today) expect(d).to_not be_valid - expect(d.date).to eq ::Date.today + expect(d.date).to eq today expect(d.reasons[0]).to eq "errors.messages.after" - expect(d.reasons[1]).to eq restriction: ::Date.today.to_s + expect(d.reasons[1]).to eq restriction: today.to_s end it "invalid" do - expect{ICU::Date.new(::Date.today, after: "rubbish")}.to raise_error(/invalid/) + expect{ICU::Date.new(today, after: "rubbish")}.to raise_error(/invalid/) end end context "on or after" do it "today/yesterday" do - d = ICU::Date.new(::Date.today, on_or_after: ::Date.today - 1) + d = ICU::Date.new(today, on_or_after: yesterday) expect(d).to be_valid - expect(d.date).to eq ::Date.today + expect(d.date).to eq today expect(d.reasons).to be_empty end it "yesterday/today" do - d = ICU::Date.new(::Date.today - 1, on_or_after: ::Date.today) + d = ICU::Date.new(yesterday, on_or_after: today) expect(d).to_not be_valid - expect(d.date).to eq ::Date.today - 1 + expect(d.date).to eq yesterday expect(d.reasons[0]).to eq "errors.messages.on_or_after" - expect(d.reasons[1]).to eq restriction: ::Date.today.to_s + expect(d.reasons[1]).to eq restriction: today.to_s end it "today/today" do - d = ICU::Date.new(::Date.today, on_or_after: ::Date.today) + d = ICU::Date.new(today, on_or_after: today) expect(d).to be_valid - expect(d.date).to eq ::Date.today + expect(d.date).to eq today expect(d.reasons).to be_empty end it "impossible" do - expect{ICU::Date.new(::Date.today, on_or_after: ::Date.new(1955, 2, 29))}.to raise_error(/invalid/) + expect{ICU::Date.new(today, on_or_after: ::Date.new(1955, 2, 29))}.to raise_error(/invalid/) end end context "before" do it "yesterday/today" do - d = ICU::Date.new(::Date.today - 1, before: ::Date.today) + d = ICU::Date.new(yesterday, before: today) expect(d).to be_valid - expect(d.date).to eq ::Date.today - 1 + expect(d.date).to eq yesterday expect(d.reasons).to be_empty end it "today/yesterday" do - d = ICU::Date.new(::Date.today, before: ::Date.today - 1) + d = ICU::Date.new(today, before: yesterday) expect(d).to_not be_valid - expect(d.date).to eq ::Date.today + expect(d.date).to eq today expect(d.reasons[0]).to eq "errors.messages.before" - expect(d.reasons[1]).to eq restriction: (::Date.today - 1).to_s + expect(d.reasons[1]).to eq restriction: yesterday.to_s end it "today/today" do - d = ICU::Date.new(::Date.today, before: ::Date.today.to_s) + d = ICU::Date.new(today, before: today.to_s) expect(d).to_not be_valid - expect(d.date).to eq ::Date.today + expect(d.date).to eq today expect(d.reasons[0]).to eq "errors.messages.before" - expect(d.reasons[1]).to eq restriction: ::Date.today.to_s + expect(d.reasons[1]).to eq restriction: today.to_s end it "invalid" do - expect{ICU::Date.new(::Date.today, before: "")}.to raise_error(/invalid/) + expect{ICU::Date.new(today, before: "")}.to raise_error(/invalid/) end end context "on or before" do it "yesterday/today" do - d = ICU::Date.new(::Date.today - 1, on_or_before: ::Date.today.to_s) + d = ICU::Date.new(yesterday, on_or_before: today.to_s) expect(d).to be_valid - expect(d.date).to eq ::Date.today - 1 + expect(d.date).to eq yesterday expect(d.reasons).to be_empty end it "today/yesterday" do - d = ICU::Date.new(::Date.today, on_or_before: ::Date.today - 1) + d = ICU::Date.new(today, on_or_before: yesterday) expect(d).to_not be_valid - expect(d.date).to eq ::Date.today + expect(d.date).to eq today expect(d.reasons[0]).to eq "errors.messages.on_or_before" - expect(d.reasons[1]).to eq restriction: (::Date.today - 1).to_s + expect(d.reasons[1]).to eq restriction: yesterday.to_s end it "today/today" do - d = ICU::Date.new(::Date.today, on_or_before: ::Date.today) + d = ICU::Date.new(today, on_or_before: today) expect(d).to be_valid - expect(d.date).to eq ::Date.today + expect(d.date).to eq today expect(d.reasons).to be_empty end it "impossible" do - expect{ICU::Date.new(::Date.today, on_or_before: "2014-06-31")}.to raise_error(/invalid/) + expect{ICU::Date.new(today, on_or_before: "2014-06-31")}.to raise_error(/invalid/) end end - end - context "multiple constraints" do - it "today/today" do - d = ICU::Date.new(::Date.today, on_or_after: ::Date.today.to_s, on_or_before: ::Date.today) - expect(d).to be_valid - expect(d.date).to eq ::Date.today - expect(d.reasons).to be_empty + context "multiple constraints" do + it "today/today" do + d = ICU::Date.new(today, on_or_after: today.to_s, on_or_before: today) + expect(d).to be_valid + expect(d.date).to eq today + expect(d.reasons).to be_empty + end + end + + context "proc constraints" do + it "before" do + d = ICU::Date.new(penny, before: -> { ::Date.today }) + expect(d).to be_valid + expect(d.date).to eq penny + expect(d.reasons).to be_empty + end + + it "after" do + d = ICU::Date.new(yesterday, after: -> { ::Date.today }) + expect(d).to_not be_valid + expect(d.date).to eq yesterday + expect(d.reasons[0]).to eq "errors.messages.after" + expect(d.reasons[1]).to eq restriction: today.to_s + end + + it "on or before" do + d = ICU::Date.new(today, on_or_before: -> { ::Date.today - 1 }) + expect(d).to_not be_valid + expect(d.date).to eq today + expect(d.reasons[0]).to eq "errors.messages.on_or_before" + expect(d.reasons[1]).to eq restriction: yesterday.to_s + end + + it "on or after" do + d = ICU::Date.new(mark, on_or_after: -> { ::Date.new(1986, 6, 16) }) + expect(d).to_not be_valid + expect(d.date).to eq mark + expect(d.reasons[0]).to eq "errors.messages.on_or_after" + expect(d.reasons[1]).to eq restriction: penny.to_s + end end end end