require 'faker'
FactoryBot.define do

  factory :work do
    title { "My title is long enough" }
    fandom_string { "Testing" }
    rating_string { ArchiveConfig.RATING_DEFAULT_TAG_NAME }
    archive_warning_string { ArchiveConfig.WARNING_NONE_TAG_NAME }
    language_id { Language.default.id }
    chapter_info = { content: "This is some chapter content for my work." }
    chapter_attributes { chapter_info }
    posted { true }

    transient do
      authors { [build(:pseud)] }
    end

    after(:build) do |work, evaluator|
      evaluator.authors.each do |pseud|
        work.creatorships.build(pseud: pseud)
      end
    end

    factory :no_authors do
      authors { [] }
    end

    factory :custom_work_skin do
      work_skin_id { 1 }
    end

    factory :draft do
      posted { false }
    end

    trait :guest_comments_on do
      comment_permissions { :enable_all }
    end
  end

  factory :external_work do
    title { "An External Work" }
    author { "An Author" }
    url { "http://www.example.org" }

    after(:build) do |work|
      work.fandoms = [FactoryBot.build(:fandom)] if work.fandoms.blank?
    end
  end

  factory :moderated_work do
    work_id { create(:work).id }
  end

  factory :external_author do |f|
    f.sequence(:email) { |n| "foo#{n}@external.com" }
  end

  factory :external_author_name do |f|
    f.association :external_author
    name { Faker::Name.first_name }
  end

  factory :external_creatorship do |f|
    f.creation_type { 'Work' }
    f.association :external_author_name
  end
end
