require "spec_helper" module Hexx describe Coercible do # ========================================================================== # Prepare environment # ========================================================================== before { class TestModel; extend Coercible; end } before { module TestModule; end } before { class TestCoersion < Struct.new(:string); end } let(:test_model) { TestModel } let(:test_module) { TestModule } let(:test_coersion) { TestCoersion } after { Hexx.send :remove_const, :TestCoersion } after { Hexx.send :remove_const, :TestModule } after { Hexx.send :remove_const, :TestModel } # ========================================================================== # Run tests # ========================================================================== describe ".coersion" do it "is defined" do expect(test_model).to respond_to :coersion end it "is set by default" do expect(test_model.coersion).to be_kind_of Module end end describe ".coersion=" do it "sets the .coersion" do expect { test_model.coersion = test_module } .to change { test_model.coersion }.to test_module end end describe ".attr_coerced" do before { test_model.send :attr_coerced, :name, type: test_coersion } subject { test_model.new } it "coerces an attribute with given type" do subject.name = "some name" expect(subject.name).to be_kind_of test_coersion end end end end