spec/cukedep/feature-model_spec.rb in cukedep-0.1.11 vs spec/cukedep/feature-model_spec.rb in cukedep-0.2.00

- old
+ new

@@ -1,100 +1,100 @@ -# File: feature-model_spec.rb - -require_relative '../spec_helper' - - -require_relative 'file-parsing' -require_relative '../../lib/cukedep/gherkin-listener' - -# Load the class under testing -require_relative '../../lib/cukedep/feature-model' - -module Cukedep # Open module to get rid of long qualified names -describe FeatureModel do - # An array of FeatureFile objects created after parsing sample files. - FeatureFiles = begin - listener = GherkinListener.new - extend(FileParsing) # Add behaviour from mixin module - parse_for(listener) # Method from mixin to parse sample feature files - listener.feature_files - end - - # Default instantiation rule - subject { FeatureModel.new(FeatureFiles) } - - context 'Creation and initialization:' do - it 'should be created with a list of feature files' do - expect { FeatureModel.new(FeatureFiles) }.not_to raise_error - end - - it 'should know its feature file objects' do - expect(subject.feature_files).to eq(FeatureFiles) - end - end # context - - context 'Provided services:' do - it 'should list all features without identifiers' do - unidentified = subject.anonymous_features - expect(unidentified.size).to eq(1) - expect(unidentified[0].filepath).to match(/standalone\.feature$/) - end - - it 'should retrieve a feature file given its identifier' do - # Case of a single id argument - one_id = 'foo' - found = subject.select_by_ids(one_id) - expect(found.size).to eq(1) - expect(found[0].feature.identifier).to eq(one_id) - - # Case of multiple id arguments - second_id = 'qux' - found = subject.select_by_ids(one_id, second_id) - expect(found.size).to eq(2) - actual_ids = found.map { |ff| ff.feature.identifier } - expected_ids = [one_id, second_id] - expect(actual_ids.sort).to eq(expected_ids.sort) - - # Case of unknown id - wrong_id = 'does_not_exist' - err_type = StandardError - err_msg = "No feature file with identifier 'does_not_exist'." - expect { subject.select_by_ids(wrong_id) } - .to raise_error(err_type, err_msg) - end - - - it 'should resolve dependency links' do - mapping = subject.send(:id2features) - deps = subject.dependency_links - expect(deps).not_to be_empty - - # Case of an identified feature without dependencies - case1 = deps.find { |a_dep| a_dep.dependee == mapping['baz'] } - expect(case1.dependents).to be_empty - - # Case of a feature having dependencies - case2 = deps.find { |a_dep| a_dep.dependee == mapping['foo'] } - expectations = subject.select_by_ids('bar', 'qux') - expect(case2.dependents).to eq(expectations) - end - - it 'should sort the feature files' do - sorted_files = subject.sort_features_by_dep - actual_order = sorted_files.map { |f| f.feature.identifier } - expected_order = %w(qux baz quux bar foo) - expect(actual_order).to eq(expected_order) - end - - it 'should generate mapping reports' do - subject.mapping_reports('feature2id.csv', 'id2feature.csv') - end - - it 'should generate dependency graph' do - subject.dependency_links - subject.draw_dependency_graph('dependencies.dot') - end - end # context -end # describe -end # module - -# End of file +# File: feature-model_spec.rb + +require_relative '../spec_helper' + + +require_relative 'file-parsing' +require_relative '../../lib/cukedep/gherkin-listener' + +# Load the class under testing +require_relative '../../lib/cukedep/feature-model' + +module Cukedep # Open module to get rid of long qualified names +describe FeatureModel do + # An array of FeatureFile objects created after parsing sample files. + FeatureFiles = begin + listener = GherkinListener.new + extend(FileParsing) # Add behaviour from mixin module + parse_for(listener) # Method from mixin to parse sample feature files + listener.feature_files + end + + # Default instantiation rule + subject { FeatureModel.new(FeatureFiles) } + + context 'Creation and initialization:' do + it 'should be created with a list of feature files' do + expect { FeatureModel.new(FeatureFiles) }.not_to raise_error + end + + it 'should know its feature file objects' do + expect(subject.feature_files).to eq(FeatureFiles) + end + end # context + + context 'Provided services:' do + it 'should list all features without identifiers' do + unidentified = subject.anonymous_features + expect(unidentified.size).to eq(1) + expect(unidentified[0].filepath).to match(/standalone\.feature$/) + end + + it 'should retrieve a feature file given its identifier' do + # Case of a single id argument + one_id = 'foo' + found = subject.select_by_ids(one_id) + expect(found.size).to eq(1) + expect(found[0].feature.identifier).to eq(one_id) + + # Case of multiple id arguments + second_id = 'qux' + found = subject.select_by_ids(one_id, second_id) + expect(found.size).to eq(2) + actual_ids = found.map { |ff| ff.feature.identifier } + expected_ids = [one_id, second_id] + expect(actual_ids.sort).to eq(expected_ids.sort) + + # Case of unknown id + wrong_id = 'does_not_exist' + err_type = StandardError + err_msg = "No feature file with identifier 'does_not_exist'." + expect { subject.select_by_ids(wrong_id) } + .to raise_error(err_type, err_msg) + end + + + it 'should resolve dependency links' do + mapping = subject.send(:id2features) + deps = subject.dependency_links + expect(deps).not_to be_empty + + # Case of an identified feature without dependencies + case1 = deps.find { |a_dep| a_dep.dependee == mapping['baz'] } + expect(case1.dependents).to be_empty + + # Case of a feature having dependencies + case2 = deps.find { |a_dep| a_dep.dependee == mapping['foo'] } + expectations = subject.select_by_ids('bar', 'qux') + expect(case2.dependents).to eq(expectations) + end + + it 'should sort the feature files' do + sorted_files = subject.sort_features_by_dep + actual_order = sorted_files.map { |f| f.feature.identifier } + expected_order = %w(qux baz quux bar foo) + expect(actual_order).to eq(expected_order) + end + + it 'should generate mapping reports' do + subject.mapping_reports('feature2id.csv', 'id2feature.csv') + end + + it 'should generate dependency graph' do + subject.dependency_links + subject.draw_dependency_graph('dependencies.dot') + end + end # context +end # describe +end # module + +# End of file