require 'pathname'
__dir__ = Pathname(__FILE__).dirname.expand_path

# global first, then local to length validators
require __dir__.parent.parent + "spec_helper"
require __dir__ + 'spec_helper'

describe "entity with wrong destination MAC address length", :shared => true do
  it "has error message with range bounds" do
    @model.errors.on(:destination_mac).should include('Destination mac must be 6 characters long')
  end
end


describe DataMapper::Validate::Fixtures::EthernetFrame do
  before :all do
    @model = DataMapper::Validate::Fixtures::EthernetFrame.valid_instance
    @model.link_support_fragmentation = false
  end

  it_should_behave_like "valid model"

  describe "with destination MAC 3 'bits' long" do
    before :all do
      @model.destination_mac = "123"
      @model.valid?
    end

    it_should_behave_like "invalid model"

    it_should_behave_like "entity with wrong destination MAC address length"
  end

  describe "with destination MAC 8 'bits' long" do
    before :all do
      @model.destination_mac = "123abce8"
      @model.valid?
    end

    it_should_behave_like "invalid model"

    it_should_behave_like "entity with wrong destination MAC address length"
  end


  # arguable but reasonable for 80% of cases
  # to treat nil as a 0 lengh value
  # reported in
  # http://datamapper.lighthouseapp.com/projects/20609/tickets/646
  describe "that has no destination MAC address" do
    before :all do
      @model.destination_mac = nil
      @model.valid?
    end

    it_should_behave_like "invalid model"

    it_should_behave_like "entity with wrong destination MAC address length"
  end



  describe "with a 6 'bits' destination MAC address" do
    before :all do
      @model.destination_mac = "a1b2c3"
      @model.valid?
    end

    it_should_behave_like "valid model"
  end
end
