spec/readable_spec.rb in unread-0.5.0 vs spec/readable_spec.rb in unread-0.6.0
- old
+ new
@@ -19,10 +19,12 @@
it "should return unread records" do
@email1.mark_as_read! :for => @reader
expect(Email.unread_by(@reader)).to eq [@email2]
expect(Email.unread_by(@reader).count).to eq 1
+
+ expect(Email.unread_by(@other_reader)).to eq [@email1, @email2]
end
it "should not allow invalid parameter" do
[ 42, nil, 'foo', :foo, {} ].each do |not_a_reader|
expect {
@@ -36,12 +38,123 @@
expect {
Email.unread_by(unsaved_reader)
}.to raise_error(ArgumentError)
end
+
+ describe "should work without any read_marks" do
+ before do
+ ReadMark.delete_all
+ end
+
+ it "should return all objects" do
+ expect(Email.unread_by(@reader)).to eq [@email1, @email2]
+ expect(Email.unread_by(@other_reader)).to eq [@email1, @email2]
+ end
+
+ it "should return unread records" do
+ @email1.mark_as_read! :for => @reader
+
+ expect(Email.unread_by(@reader)).to eq [@email2]
+ expect(Email.unread_by(@reader).count).to eq 1
+ end
+
+ it "should not allow invalid parameter" do
+ [ 42, nil, 'foo', :foo, {} ].each do |not_a_reader|
+ expect {
+ Email.unread_by(not_a_reader)
+ }.to raise_error(ArgumentError)
+ end
+ end
+
+ it "should not allow unsaved reader" do
+ unsaved_reader = Reader.new
+
+ expect {
+ Email.unread_by(unsaved_reader)
+ }.to raise_error(ArgumentError)
+ end
+ end
end
+ describe :read_by do
+ it "should return an empty array" do
+ expect(Email.read_by(@reader)).to be_empty
+ expect(Email.read_by(@other_reader)).to be_empty
+ end
+
+ it "should return read records" do
+ @email1.mark_as_read! :for => @reader
+
+ expect(Email.read_by(@reader)).to eq [@email1]
+ expect(Email.read_by(@reader).count).to eq 1
+ end
+
+ it "should return all records when all read" do
+ Email.mark_as_read! :all, :for => @reader
+
+ expect(Email.read_by(@reader)).to eq [@email1, @email2]
+ end
+
+ it "should not allow invalid parameter" do
+ [ 42, nil, 'foo', :foo, {} ].each do |not_a_reader|
+ expect {
+ Email.read_by(not_a_reader)
+ }.to raise_error(ArgumentError)
+ end
+ end
+
+ it "should not allow unsaved reader" do
+ unsaved_reader = Reader.new
+
+ expect {
+ Email.read_by(unsaved_reader)
+ }.to raise_error(ArgumentError)
+ end
+
+ describe "should work without any read_marks" do
+ before do
+ ReadMark.delete_all
+ end
+
+ it "should return an empty array" do
+ expect(Email.read_by(@reader)).to be_empty
+ expect(Email.read_by(@other_reader)).to be_empty
+ end
+
+ it "should return read records" do
+ @email1.mark_as_read! :for => @reader
+
+ expect(Email.read_by(@reader)).to eq [@email1]
+ expect(Email.read_by(@reader).count).to eq 1
+ end
+
+ it "should return all records when all read" do
+ Email.mark_as_read! :all, :for => @reader
+
+ expect(Email.read_by(@reader)).to eq [@email1, @email2]
+ end
+
+ it "should not allow invalid parameter" do
+ [ 42, nil, 'foo', :foo, {} ].each do |not_a_reader|
+ expect {
+ Email.read_by(not_a_reader)
+ }.to raise_error(ArgumentError)
+ end
+ end
+
+ it "should not allow unsaved reader" do
+ unsaved_reader = Reader.new
+
+ expect {
+ Email.read_by(unsaved_reader)
+ }.to raise_error(ArgumentError)
+ end
+ end
+ end
+
+
describe :with_read_marks_for do
it "should return readables" do
expect(Email.with_read_marks_for(@reader).to_a).to eq([@email1, @email2])
end
@@ -95,10 +208,26 @@
expect(emails[0].unread?(@reader)).to be_falsey
expect(emails[1].unread?(@reader)).to be_truthy
}.to perform_queries(1)
end
+
+ it "should work without any read_marks" do
+ ReadMark.delete_all
+
+ emails = Email.with_read_marks_for(@reader).to_a
+ expect(emails[0].unread?(@reader)).to be_truthy
+ expect(emails[1].unread?(@reader)).to be_truthy
+ end
+
+ it "should work with eager-loaded read marks for the correct reader" do
+ @email1.mark_as_read! :for => @reader
+
+ emails = Email.with_read_marks_for(@reader).to_a
+ expect(emails[0].unread?(@reader)).to be_falsey
+ expect(emails[0].unread?(@other_reader)).to be_truthy
+ end
end
describe '#mark_as_read!' do
it "should mark a single object as read" do
@email1.mark_as_read! :for => @reader
@@ -156,10 +285,17 @@
@email1.mark_as_read! :for => @reader
expect(@reader.read_marks.single).to eq []
end
+ it "should reset memoized global read mark" do
+ rm_global = @reader.read_mark_global(Email)
+
+ Email.mark_as_read! :all, :for => @reader
+ expect(@reader.read_mark_global(Email)).not_to eq(rm_global)
+ end
+
it "should not allow invalid arguments" do
expect {
Email.mark_as_read! :foo, :for => @reader
}.to raise_error(ArgumentError)
@@ -203,10 +339,15 @@
expect(@reader.read_marks.single.count).to eq 0
end
it "should not delete read marks from other readables" do
- other_read_mark = @reader.read_marks.create! :readable_type => 'Foo', :readable_id => 42, :timestamp => 5.years.ago
+ other_read_mark = @reader.read_marks.create! do |rm|
+ rm.readable_type = 'Foo'
+ rm.readable_id = 42
+ rm.timestamp = 5.years.ago
+ end
+
Email.cleanup_read_marks!
expect(ReadMark.exists?(other_read_mark.id)).to be_truthy
end
end