126 lines
3.9 KiB
Ruby
126 lines
3.9 KiB
Ruby
require "spec_helper"
|
|
|
|
describe Pseud do
|
|
it { is_expected.to have_many(:gifts).conditions(rejected: false).dependent(:destroy) }
|
|
it { is_expected.to have_many(:rejected_gifts).conditions(rejected: true).dependent(:destroy) }
|
|
|
|
it "has a valid factory" do
|
|
expect(build(:pseud)).to be_valid
|
|
end
|
|
|
|
it "is invalid without a name" do
|
|
expect(build(:pseud, name: nil)).to be_invalid
|
|
end
|
|
|
|
it "is invalid if there are special characters" do
|
|
expect(build(:pseud, name: "*pseud*")).to be_invalid
|
|
end
|
|
|
|
describe "save" do
|
|
context "when the pseud is valid" do
|
|
let(:pseud) { build(:pseud) }
|
|
|
|
it "succeeds" do
|
|
expect(pseud).to be_valid_verbose
|
|
expect(pseud.save).to be_truthy
|
|
expect(pseud.errors).to be_empty
|
|
end
|
|
end
|
|
|
|
context "when the icon alt text is too long" do
|
|
let(:pseud) { build(:pseud, icon_alt_text: "a" * 251) }
|
|
|
|
it "fails" do
|
|
expect(pseud.save).to be_falsey
|
|
expect(pseud.errors[:icon_alt_text]).not_to be_empty
|
|
end
|
|
end
|
|
|
|
context "when the icon comment text is too long" do
|
|
let(:pseud) { build(:pseud, icon_comment_text: "a" * 51) }
|
|
|
|
it "fails" do
|
|
expect(pseud.save).to be_falsey
|
|
expect(pseud.errors[:icon_comment_text]).not_to be_empty
|
|
end
|
|
end
|
|
end
|
|
|
|
describe "touch_comments" do
|
|
let(:pseud) { create(:pseud) }
|
|
let!(:comment) { create(:comment, pseud: pseud) }
|
|
|
|
it "modifies the updated_at of associated comments" do
|
|
# Without this, the in-memory pseud has 0 comments and the test fails.
|
|
pseud.reload
|
|
travel(1.day)
|
|
expect do
|
|
pseud.update!(name: "New Name")
|
|
end.to change { comment.reload.updated_at }
|
|
end
|
|
end
|
|
|
|
describe ".default_alphabetical" do
|
|
let(:user) { create(:user, login: "Zaphod") }
|
|
let(:subject) { user.pseuds.default_alphabetical }
|
|
|
|
before do
|
|
create(:pseud, user: user, name: "Slartibartfast")
|
|
create(:pseud, user: user, name: "Agrajag")
|
|
create(:pseud, user: user, name: "Betelgeuse")
|
|
allow(ArchiveConfig).to receive(:ITEMS_PER_PAGE).and_return(3)
|
|
end
|
|
|
|
it "gets default pseud, then all pseuds in alphabetical order" do
|
|
expect(subject.map(&:name)).to eq(%w[Zaphod Agrajag Betelgeuse Slartibartfast])
|
|
end
|
|
end
|
|
|
|
describe ".abbreviated_list" do
|
|
let(:user) { create(:user, login: "Zaphod") }
|
|
let(:subject) { user.pseuds.abbreviated_list }
|
|
|
|
before do
|
|
create(:pseud, user: user, name: "Slartibartfast")
|
|
create(:pseud, user: user, name: "Agrajag")
|
|
create(:pseud, user: user, name: "Betelgeuse")
|
|
allow(ArchiveConfig).to receive(:ITEMS_PER_PAGE).and_return(3)
|
|
end
|
|
|
|
it "gets default pseud, then shortened alphabetical list of other pseuds" do
|
|
expect(subject.map(&:name)).to eq(%w[Zaphod Agrajag Betelgeuse])
|
|
expect(subject.map(&:name)).not_to include("Slartibartfast")
|
|
expect(subject.length).to eq(ArchiveConfig.ITEMS_PER_PAGE)
|
|
end
|
|
end
|
|
|
|
describe "#clear_icon" do
|
|
subject { create(:pseud, icon_alt_text: "icon alt", icon_comment_text: "icon comment") }
|
|
|
|
before do
|
|
subject.icon.attach(io: File.open(Rails.root.join("features/fixtures/icon.gif")), filename: "icon.gif", content_type: "image/gif")
|
|
end
|
|
|
|
context "when delete_icon is false" do
|
|
it "does not clear the icon, icon alt, or icon comment" do
|
|
subject.clear_icon
|
|
expect(subject.icon.attached?).to be(true)
|
|
expect(subject.icon_alt_text).to eq("icon alt")
|
|
expect(subject.icon_comment_text).to eq("icon comment")
|
|
end
|
|
end
|
|
|
|
context "when delete_icon is true" do
|
|
before do
|
|
subject.delete_icon = 1
|
|
end
|
|
|
|
it "clears the icon, icon alt, and icon comment" do
|
|
subject.clear_icon
|
|
expect(subject.icon.attached?).to be(false)
|
|
expect(subject.icon_alt_text).to be_nil
|
|
expect(subject.icon_comment_text).to be_nil
|
|
end
|
|
end
|
|
end
|
|
end
|