# frozen_string_literal: true

require "spec_helper"

describe Bookmark do
  it "has a valid factory" do
    expect(build(:bookmark)).to be_valid
  end

  it "has a valid factory for external work bookmarks" do
    expect(build(:external_work_bookmark)).to be_valid
  end

  it "has a valid factory for series bookmarks" do
    expect(build(:series_bookmark)).to be_valid
  end

  it "is invalid without a pseud_id" do
    bookmark = build(:bookmark, pseud_id: nil)
    expect(bookmark).to_not be_valid
    expect(bookmark.errors[:pseud].first).to eq("can't be blank")
  end

  it "can be tagged if has an id larger than unsigned int" do
    bookmark = build(:bookmark, tag_string: "Huge", id: 5_294_967_295)
    expect(bookmark).to be_valid
    expect(bookmark.save).to be_truthy
    expect(bookmark.reload.taggings.last.tagger.name).to eq("Huge")
  end

  it "can be collected if has an id larger than unsigned int" do
    collection = create(:collection)
    bookmark = build(:bookmark, collection_names: collection.name, id: 5_294_967_295)
    expect(bookmark).to be_valid
    expect(bookmark.save).to be_truthy
    expect(bookmark.collections).to include(collection)
    expect(collection.bookmarks).to include(bookmark)
  end

  it "can be hidden if has an id larger than unsigned int" do
    bookmark = create(:bookmark, id: 5_294_967_295)
    admin = create(:admin)
    activity = build(:admin_activity, admin: admin, target: bookmark)

    expect(activity).to be_valid
    expect(activity.save).to be_truthy
    expect(activity.target_name).to eq("Bookmark #{bookmark.id}")
  end
end
