Sha256: d3783a903ae98497c0bb57e07a721e1dc1601ddaf8c32d1457627c59cbaff159

Contents?: true

Size: 1.53 KB

Versions: 1

Compression:

Stored size: 1.53 KB

Contents

require 'helper'

class RoleTest < NeoDCICase
  module Human
    extend Neo::DCI::Role

    def live!
      :live
    end
  end

  module CryBaby
    extend Neo::DCI::Role
    include Human

    def self.assignable_to?(user, emo=false)
      emo || user.gender == :female
    end

    def cry!
      :me_a_river
    end
  end

  module EmoCore
    extend Neo::DCI::Role

    def self.role_assigned(user, *args)
      user.role_as(CryBaby, *args)
    end

    def growl!
      :breee
    end
  end

  User = Struct.new(:gender) do
    include Neo::DCI::Data
  end

  let(:male) { User.new(:male) }
  let(:emo) { User.new(:male) }
  let(:female) { User.new(:female) }

  context :usage do
    test "all humans can live" do
      male.role_as Human
      female.role_as Human
      assert_equal :live, male.live!
      assert_equal :live, female.live!
    end

    test "female can cry!" do
      female.role_as CryBaby
      assert_equal :me_a_river, female.cry!
    end

    test "emo can cry!" do
      emo.role_as CryBaby, true
      assert_equal :me_a_river, emo.cry!
    end

    test "boys don't cry!" do
      assert_raises Neo::DCI::Role::NotAssignable, :role => CryBaby, :object => male do
        male.role_as CryBaby
      end
    end

    test "emo cores can cry! and growl!" do
      emo.role_as EmoCore, true
      assert_equal :me_a_river, emo.cry!
      assert_equal :breee, emo.growl!
    end
  end

  context :role_as do
    test "returns object itself" do
      actual = female.role_as CryBaby
      assert_same female, actual
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
neo-dci-0.0.1 test/role_test.rb