spec/entities.rb
# frozen_string_literal: true

module DiasporaFederation
  module Entities
    class TestEntity < DiasporaFederation::Entity
      property :test, :string
    end

    class TestDefaultEntity < DiasporaFederation::Entity
      property :test1, :string
      property :test2, :string
      property :test3, :boolean, default: true
      property :test4, :boolean, default: -> { true }
    end

    class TestOptionalEntity < DiasporaFederation::Entity
      property :test1, :string, optional: true
      property :test2, :string
    end

    class OtherEntity < DiasporaFederation::Entity
      property :asdf, :string
    end

    class TestNestedEntity < DiasporaFederation::Entity
      property :asdf, :string
      entity :test, TestEntity, default: nil
      entity :multi, [OtherEntity]
    end

    class TestEntityWithRelatedEntity < DiasporaFederation::Entity
      property :test, :string
      entity :parent, RelatedEntity
    end

    class Entity < DiasporaFederation::Entity
      property :test, :string
    end

    class TestEntityWithBoolean < DiasporaFederation::Entity
      property :test, :boolean
    end

    class TestEntityWithInteger < DiasporaFederation::Entity
      property :test, :integer
    end

    class TestEntityWithTimestamp < DiasporaFederation::Entity
      property :test, :timestamp
    end

    class TestComplexEntity < DiasporaFederation::Entity
      property :test1, :string
      property :test2, :boolean
      property :test3, :string
      property :test4, :integer
      property :test5, :timestamp
      entity :test6, TestEntity
      property :test7, :string, optional: true
      entity :multi, [OtherEntity], optional: true
    end

    class TestEntityWithAuthorAndGuid < DiasporaFederation::Entity
      property :test, :string
      property :author, :string
      property :guid, :string
    end

    class SomeRelayable < DiasporaFederation::Entity
      PARENT_TYPE = "Parent"

      include Entities::Relayable

      property :property, :string, optional: true
    end

    class TestRelayableWithBoolean < DiasporaFederation::Entity
      PARENT_TYPE = "Parent"

      include Entities::Relayable

      property :test, :boolean
    end
  end

  module Validators
    class TestDefaultEntityValidator < Validation::Validator
      include Validation

      rule :test1, regular_expression: {regex: /\A[^;]{,32}\z/}
      rule :test2, :not_nil
      rule :test3, :boolean
    end

    class TestEntityWithAuthorAndGuidValidator < Validation::Validator
      include Validation

      rule :test, :boolean
      rule :author, %i[not_empty diaspora_id]
      rule :guid, :guid
    end

    class TestComplexEntityValidator < OptionalAwareValidator
      include Validation

      rule :test1, length: {minimum: 3}
      rule :test2, :boolean
      rule :test7, length: {minimum: 3}
      rule :multi, :not_nil
    end

    class TestUnknownEntityValidator < OptionalAwareValidator
      include Validation

      rule :test1, length: {minimum: 3}
    end
  end
end
