external_person_test.rb 3.63 KB
# encoding: UTF-8
require_relative "../test_helper"

class ExternalPersonTest < ActiveSupport::TestCase
  fixtures :environments

  def setup
    @external_person = ExternalPerson.create!(identifier: 'johnlock',
                                     name: 'John Lock',
                                     source: 'anerenvironment.org',
                                     email: 'john@lock.org',
                                     created_at: Date.yesterday
                                    )
  end

  should 'have no permissions' do
    assert_equivalent [], @external_person.role_assignments
    refute @external_person.has_permission?(:manage_friends)
  end

  should 'have no suggested profiles' do
    assert_equivalent [], @external_person.suggested_communities
    assert_equivalent [], @external_person.suggested_people
    assert_equivalent [], @external_person.suggested_profiles
  end

  should 'have no friendships' do
    refute @external_person.add_friend(fast_create(Person))
    assert_equivalent [], @external_person.friendships
  end

  should 'not be a member of any communities' do
    community = fast_create(Community)
    refute community.add_member(@external_person)
    assert_equivalent [], @external_person.memberships
  end

  should 'not have any favorite enterprises' do
    assert_equivalent [], @external_person.favorite_enterprises
  end

  should 'be a person' do
    assert @external_person.person?
  end

  should 'not be a community, organization or enterprise' do
    refute @external_person.community?
    refute @external_person.enterprise?
    refute @external_person.organization?
  end

  should 'never be an admin for environments' do
    refute @external_person.is_admin?
    env = Environment.default
    env.add_admin @external_person
    refute @external_person.is_admin?(env)
    assert_equivalent [], env.admins
  end

  should 'redirect after login based on environment settings' do
    assert_respond_to ExternalPerson.new, :preferred_login_redirection
    environment = fast_create(Environment, :redirection_after_login => 'site_homepage')
    profile = fast_create(ExternalPerson, :environment_id => environment.id)
    assert_equal 'site_homepage', profile.preferred_login_redirection
  end

  should 'have an avatar from its original environment' do
    assert_match /http:\/\/#{@external_person.source}\/.*/, @external_person.avatar
  end

  should 'generate a custom profile icon based on its avatar' do
  end

  should 'have an url to its profile on its original environment' do
  end

  should 'have a public profile url' do
  end

  should 'have an admin url to its profile on its original environment' do
  end

  should 'respond to lat and lng' do
    assert_respond_to ExternalPerson.new, :lat
    assert_respond_to ExternalPerson.new, :lng
    assert_nil @external_person.lat
    assert_nil @external_person.lng
  end

  should 'never be a friend of another person' do
  end

  should 'never send a friend request to another person' do
  end

  should 'not follow another profile' do
  end

  should 'have an image' do
  end

  should 'profile image has public filename and mimetype' do
  end

  should 'respond to all instance methods in Profile' do
    methods = Profile.public_instance_methods(false)
    methods.each do |method|
      # We test if ExternalPerson responds to same methods as Profile, but we
      # skip methods generated by plugins, libs and validations, which are
      # usually only used internally
      assert_respond_to ExternalPerson.new, method.to_sym unless method =~ /type_name|^autosave_.*|^after_.*|^before_.*|validate_.*|^attribute_.*|.*_?tags?_?.*|^custom_value.*|^custom_context.*|^xss.*|bar/
    end
  end

end