# # Author:: Enrico Stahn # # Copyright 2014, Zanui, # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # describe GitHubChangelogGenerator::Reader do before(:all) do @reader = GitHubChangelogGenerator::Reader.new end describe '#parse_heading' do context 'when heading is empty' do subject { @reader.parse_heading('## ') } it { is_expected.to be_a(Hash) } it { is_expected.to include('version', 'url', 'date') } it { is_expected.to include('version' => nil, 'url' => nil, 'date' => nil) } # TODO: Doesn't work? # it { is_expected.to have_all_string_keys } end context 'when given version, url and date' do subject { @reader.parse_heading('## [1.3.10](https://github.com/skywinder/Github-Changelog-Generator/tree/1.3.10) (2015-03-18)') } it { is_expected.to include('version' => '1.3.10') } it { is_expected.to include('url' => 'https://github.com/skywinder/Github-Changelog-Generator/tree/1.3.10') } it { is_expected.to include('date' => '2015-03-18') } end context 'when no url and date is provided' do subject { @reader.parse_heading('## foobar') } it { is_expected.to include('version' => 'foobar', 'url' => nil, 'date' => nil) } end end describe '#parse' do context 'when file is empty' do subject { @reader.parse('') } it { is_expected.to be_an(Array) } it { is_expected.to be_empty } end context 'when file has only the header' do subject { @reader.parse('# Change Log') } it { is_expected.to be_an(Array) } it { is_expected.to be_empty } end end describe 'example CHANGELOG files' do subject { @reader.read(File.expand_path(File.join(File.dirname(__FILE__), '..', 'files', self.class.description))) } context 'github-changelog-generator.md' do it { is_expected.to be_an(Array) } it { is_expected.not_to be_empty } it { expect(subject.count).to eq(28) } it { expect(subject.first).to include('version' => '1.3.10') } it { expect(subject.first).to include('url' => 'https://github.com/skywinder/Github-Changelog-Generator/tree/1.3.10') } it { expect(subject.first).to include('date' => '2015-03-18') } it { expect(subject.first).to include('content') } it 'content should not be empty' do expect(subject.first['content']).not_to be_empty end end context 'bundler.md' do it { is_expected.to be_an(Array) } it { is_expected.not_to be_empty } it { expect(subject.count).to eq(151) } it { expect(subject.first).to include('version' => '1.9.1') } it { expect(subject.first).to include('url' => nil) } it { expect(subject.first).to include('date' => '2015-03-21') } it { expect(subject.first).to include('content') } it 'content should not be empty' do expect(subject.first['content']).not_to be_empty end end context 'angular.js.md' do it { is_expected.to be_an(Array) } it { is_expected.not_to be_empty } it do pending('Implement heading_level for parser.') expect(subject.count).to eq(134) end # it do # pending('Implement heading_level for parser.') # expect(subject.first).to include('version' => '1.4.0-beta.6 cookie-liberation') # end # it do # pending('Implement heading_level for parser.') # expect(subject.first).to include('url' => nil) # end # it do # pending('Implement heading_level for parser.') # expect(subject.first).to include('date' => '2015-03-17') # end # it do # pending('Implement heading_level for parser.') # expect(subject.first).to include('content') # end # it 'content should not be empty' do # pending('Implement heading_level for parser.') # expect(subject.first['content']).not_to be_empty # end end end end