Sha256: 32858ead3985d9cd26e01adf0de6c60b2854f8a0a47fba279d0e372e47496dd8

Contents?: true

Size: 1.77 KB

Versions: 8

Compression:

Stored size: 1.77 KB

Contents

require 'spec_helper'

describe ActiveFedora::ModelClassifier do
  module ParentClass
    class SiblingClass
    end
    class OtherSiblingClass
    end
    class SubclassClass < SiblingClass
    end
  end

  let(:class_names) { ["ParentClass::SiblingClass", "ParentClass::OtherSiblingClass", "ParentClass::SubclassClass", "ParentClass::NoSuchClass"] }
  subject(:classifier) { described_class.new class_names }

  describe ".class_from_string" do
    it "returns class constants based on strings" do
      expect(described_class.class_from_string("String")).to eq String
      expect(described_class.class_from_string("ActiveFedora::RDF::IndexingService")).to eq ActiveFedora::RDF::IndexingService
      expect(described_class.class_from_string("IndexingService", ActiveFedora::RDF)).to eq ActiveFedora::RDF::IndexingService
    end

    it "finds sibling classes" do
      expect(described_class.class_from_string("SiblingClass", ParentClass::OtherSiblingClass)).to eq ParentClass::SiblingClass
    end

    it "raises a NameError if the class isn't found" do
      expect {
        described_class.class_from_string("FooClass", ParentClass::OtherSiblingClass)
      }.to raise_error NameError, /uninitialized constant (Object::)?FooClass/
    end
  end

  describe '#models' do
    it 'converts class names to classes' do
      expect(classifier.models).to match_array [ParentClass::SiblingClass, ParentClass::OtherSiblingClass, ParentClass::SubclassClass]
    end
  end

  describe '#best_model' do
    it 'selects the most specific matching model' do
      expect(classifier.best_model(default: nil)).to eq ParentClass::SubclassClass
    end

    it 'filters models to subclasses of the default' do
      expect(classifier.best_model(default: ActiveFedora::Base)).to eq ActiveFedora::Base
    end
  end
end

Version data entries

8 entries across 8 versions & 1 rubygems

Version Path
active-fedora-11.1.4 spec/unit/model_classifier_spec.rb
active-fedora-11.1.3 spec/unit/model_classifier_spec.rb
active-fedora-11.1.2 spec/unit/model_classifier_spec.rb
active-fedora-11.1.1 spec/unit/model_classifier_spec.rb
active-fedora-11.1.0 spec/unit/model_classifier_spec.rb
active-fedora-11.0.1 spec/unit/model_classifier_spec.rb
active-fedora-11.0.0 spec/unit/model_classifier_spec.rb
active-fedora-11.0.0.rc7 spec/unit/model_classifier_spec.rb