stickyflag 0.3.0 → 0.3.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (60) hide show
  1. data/TODO.md +2 -1
  2. data/lib/stickyflag/version.rb +1 -1
  3. data/stickyflag.gemspec +5 -4
  4. metadata +8 -116
  5. data/.gitignore +0 -7
  6. data/.rspec +0 -4
  7. data/.simplecov +0 -9
  8. data/.travis.yml +0 -13
  9. data/features/clear.feature +0 -14
  10. data/features/clear_quietly.feature +0 -23
  11. data/features/configuration.feature +0 -14
  12. data/features/get.feature +0 -14
  13. data/features/get_quietly.feature +0 -23
  14. data/features/set.feature +0 -14
  15. data/features/set_quietly.feature +0 -22
  16. data/features/step_definitions/configuration_steps.rb +0 -31
  17. data/features/step_definitions/database_steps.rb +0 -41
  18. data/features/step_definitions/pending_steps.rb +0 -5
  19. data/features/step_definitions/tag_steps.rb +0 -62
  20. data/features/support/cukegem.rb +0 -82
  21. data/features/support/env.rb +0 -37
  22. data/features/tags.feature +0 -18
  23. data/features/unset.feature +0 -14
  24. data/features/unset_quietly.feature +0 -23
  25. data/spec/spec_helper.rb +0 -22
  26. data/spec/stickyflag/configuration_spec.rb +0 -132
  27. data/spec/stickyflag/database_spec.rb +0 -331
  28. data/spec/stickyflag/external_cmds_spec.rb +0 -175
  29. data/spec/stickyflag/patches/tempfile_encoding_spec.rb +0 -26
  30. data/spec/stickyflag/patches/tmpnam_spec.rb +0 -35
  31. data/spec/stickyflag/paths_spec.rb +0 -29
  32. data/spec/stickyflag/tag_factory_spec.rb +0 -126
  33. data/spec/stickyflag/tags/c_spec.rb +0 -14
  34. data/spec/stickyflag/tags/mkv_spec.rb +0 -54
  35. data/spec/stickyflag/tags/mmd_spec.rb +0 -40
  36. data/spec/stickyflag/tags/pdf_spec.rb +0 -39
  37. data/spec/stickyflag/tags/png_spec.rb +0 -6
  38. data/spec/stickyflag/tags/tex_spec.rb +0 -6
  39. data/spec/stickyflag_spec.rb +0 -482
  40. data/spec/support/examples.rb +0 -32
  41. data/spec/support/examples/c_all_comments.c +0 -3
  42. data/spec/support/examples/c_no_tags.c +0 -5
  43. data/spec/support/examples/c_with_tag.c +0 -6
  44. data/spec/support/examples/mkv_no_tags.mkv +0 -0
  45. data/spec/support/examples/mkv_with_tag.mkv +0 -0
  46. data/spec/support/examples/mmd_all_meta.mmd +0 -6
  47. data/spec/support/examples/mmd_crazy_keys.mmd +0 -8
  48. data/spec/support/examples/mmd_crazy_tags.mmd +0 -9
  49. data/spec/support/examples/mmd_no_tags.mmd +0 -1
  50. data/spec/support/examples/mmd_with_tag.mmd +0 -3
  51. data/spec/support/examples/pdf_no_tags.pdf +0 -0
  52. data/spec/support/examples/pdf_with_tag.pdf +0 -0
  53. data/spec/support/examples/png_no_tags.png +0 -0
  54. data/spec/support/examples/png_with_tag.png +0 -0
  55. data/spec/support/examples/tex_no_tags.tex +0 -10
  56. data/spec/support/examples/tex_with_tag.tex +0 -11
  57. data/spec/support/examples/untaggable.txt +0 -0
  58. data/spec/support/run_with_args.rb +0 -36
  59. data/spec/support/silence_stream.rb +0 -12
  60. data/spec/support/tag_handler_behavior.rb +0 -125
@@ -1,82 +0,0 @@
1
- # Copyright 2011 Solano Labs All Rights Reserved
2
-
3
- require 'aruba'
4
- require 'aruba/api'
5
-
6
- class CukeGem
7
- @setup_done = false
8
-
9
- class << self
10
- include Aruba::Api
11
-
12
- attr_reader :setup_done
13
-
14
- def setup(gemspec, once=true)
15
- gem_home = setup_env
16
- if !@setup_done || !once then
17
- @setup_done = true
18
- mkgemdir(gem_home)
19
- gem_install(gemspec)
20
- end
21
- end
22
-
23
- def teardown
24
- restore_env
25
- end
26
-
27
- def setup_env
28
- tid = ENV['TDDIUM_TID'] || ''
29
- gem_home = File.expand_path(File.join(Dir.tmpdir, "aruba-gem"))
30
-
31
- set_env('GEM_HOME', gem_home)
32
- set_env('GEM_PATH', gem_home)
33
- set_env('BUNDLE_PATH', gem_home)
34
- unset_bundler_env_vars
35
-
36
- paths = (ENV['PATH'] || "").split(File::PATH_SEPARATOR)
37
- paths.unshift(File.join(gem_home, 'bin'))
38
- set_env('PATH', paths.uniq.join(File::PATH_SEPARATOR))
39
-
40
- return gem_home
41
- end
42
-
43
- def mkgemdir(gem_home)
44
- FileUtils::rm_rf(gem_home)
45
- FileUtils::mkdir_p(gem_home)
46
-
47
- output = `gem install bundler`
48
- if $?.exitstatus != 0 then
49
- raise "unable to install bundler into #{gem_home}: #{output}"
50
- end
51
- end
52
-
53
- def gem_install(gemspec)
54
- gem_file = nil
55
- begin
56
- pwd = Dir.pwd
57
- gemspec_dir = File.dirname(gemspec)
58
- Dir.chdir(gemspec_dir)
59
- output = `gem build #{File.basename(gemspec)}`
60
- Dir.chdir(pwd)
61
-
62
- if $?.exitstatus != 0 then
63
- raise "unable to build gem: #{output}"
64
- end
65
-
66
- if output =~ /File:\s+([A-Za-z0-9_.-]+[.]gem)/ then
67
- gem_file = $1
68
- output = `gem install #{File.join(gemspec_dir, gem_file)}`
69
- if $?.exitstatus != 0 then
70
- raise "unable to install gem: #{output}"
71
- end
72
- else
73
- raise "garbled gem build output: #{output}"
74
- end
75
- ensure
76
- if gem_file then
77
- FileUtils.rm_f(File.join(gemspec_dir, gem_file))
78
- end
79
- end
80
- end
81
- end
82
- end
@@ -1,37 +0,0 @@
1
- # -*- encoding : utf-8 -*-
2
- $:.unshift File.expand_path("../../../lib", __FILE__)
3
-
4
- require 'rubygems'
5
- require 'bundler/setup'
6
-
7
- require 'backports'
8
- require 'aruba/cucumber'
9
- require 'stickyflag'
10
- require 'fileutils'
11
- require_relative './cukegem'
12
-
13
- # JRuby is slow to start up
14
- Before do
15
- @aruba_timeout_seconds = 10
16
- end
17
-
18
- # Back up and restore the user's configuration and database
19
- $backup_db = File.tmpnam('.sqlite')
20
- $backup_config = File.tmpnam('.yml')
21
-
22
- class GetPaths
23
- include StickyFlag::Paths
24
- end
25
- $paths = GetPaths.new
26
-
27
- FileUtils.mv $paths.config_path, $backup_config if File.exist? $paths.config_path
28
- FileUtils.mv $paths.database_path, $backup_db if File.exist? $paths.database_path
29
-
30
- CukeGem.setup(File.expand_path('../../../stickyflag.gemspec', __FILE__))
31
-
32
- at_exit do
33
- CukeGem.teardown
34
-
35
- FileUtils.mv $backup_config, $paths.config_path if File.exist? $backup_config
36
- FileUtils.mv $backup_db, $paths.database_path if File.exist? $backup_db
37
- end
@@ -1,18 +0,0 @@
1
- Feature: Get List of Tags in Use
2
- In order to know which tags I've already used
3
- As a user with some tagged files
4
- I want to be able to get a list of all file tags
5
-
6
- Scenario: Get list of tags
7
- Given the example database
8
- When I get the list of tags in use
9
- Then the output should contain " test"
10
- And the output should contain " asdf"
11
- And the output should contain "Tags currently in use:"
12
- And the output should not contain "rspec"
13
-
14
- Scenario: Get bare list of tags for scripting
15
- Given the example database
16
- When I quietly get the list of tags in use
17
- Then the output should not contain "Tags currently in use:"
18
- And the output should contain "\ntest\n"
@@ -1,14 +0,0 @@
1
- Feature: Unset File Tags
2
- In order to be able to change my mind
3
- As a user
4
- I want to be able to unset or remove tags from files
5
-
6
- Scenario: Unset tags from a file with multiple tags
7
- Given the example configuration
8
- When I unset the tag "asdf" for "mmd_crazy_tags.mmd"
9
- Then the output should match /New tags for .*mmd_crazy_tags.mmd: sdfg, dfgh, fghj, qwer/
10
-
11
- Scenario: Unset tags from a file with one tag
12
- Given the example configuration
13
- When I unset the tag "test" for "mmd_with_tag.mmd"
14
- Then the output should match /New tags for .*mmd_with_tag.mmd: no tags/
@@ -1,23 +0,0 @@
1
- Feature: Silence Extraneous Output on Unset
2
- In order to use StickyFlag in scripts
3
- As a power user
4
- I want to be able to unset tags without any output at all
5
-
6
- Scenario: Unset tags with no output at all
7
- Given the example configuration
8
- When I quietly unset the tag "asdf" for "mmd_crazy_tags.mmd"
9
- Then the output should not contain "mmd_crazy_tags.mmd"
10
- And the output should not contain "sdfg"
11
-
12
- Scenario: Determine quiet unset tag success from return value
13
- Given the example configuration
14
- Given PENDING: figure out how to get Thor to do exit codes
15
- When I quietly unset the tag "asdf" for "mmd_crazy_tags.mmd"
16
- Then the exit status should be 0
17
-
18
- Scenario: Determine quiet unset tag failure from return value
19
- Given the example configuration
20
- Given PENDING: figure out how to get Thor to do exit codes
21
- When I quietly unset the tag "test" for "nonexistent.mmd"
22
- Then the exit status should not be 0
23
-
@@ -1,22 +0,0 @@
1
- # -*- encoding : utf-8 -*-
2
- $KCODE = 'U' if RUBY_VERSION < "1.9.0"
3
- ENV['RSPEC_TESTING'] = 'true'
4
-
5
- require 'rubygems'
6
- require 'bundler/setup'
7
- require 'simplecov' unless ENV["CI"] == 'true'
8
-
9
- require 'backports'
10
- require 'rspec/autorun'
11
- require 'stickyflag'
12
-
13
- Dir['./spec/support/**/*.rb'].map { |f| require f }
14
-
15
- RSpec.configure do |c|
16
- c.before(:each) do
17
- # Don't write anything to the console
18
- Thor::Shell::Basic.any_instance.stub(:say) { }
19
- Thor::Shell::Basic.any_instance.stub(:say_status) { }
20
- end
21
- end
22
-
@@ -1,132 +0,0 @@
1
- # -*- encoding : utf-8 -*-
2
- require 'stickyflag/paths'
3
- require 'stickyflag/configuration'
4
-
5
- class ConfigTester < Thor
6
- include StickyFlag::Paths
7
- include StickyFlag::Configuration
8
- end
9
-
10
- describe 'StickyFlag::Configuration' do
11
- describe '#initialize' do
12
- it 'loads default configuration values' do
13
- @obj = ConfigTester.new
14
- @obj.stub(:load_config!) { }
15
- @obj.stub(:save_config!) { }
16
-
17
- StickyFlag::Configuration::DEFAULT_CONFIG.keys.each do |k|
18
- @obj.get_config(k).should eq(StickyFlag::Configuration::DEFAULT_CONFIG[k])
19
- end
20
- end
21
- end
22
-
23
- describe '.get_config' do
24
- before(:each) do
25
- @obj = ConfigTester.new
26
-
27
- @obj.stub(:load_config!) { }
28
- @obj.stub(:save_config!) { }
29
- end
30
-
31
- context 'with good keys' do
32
- it 'reads default values' do
33
- @obj.get_config(:have_pdftk).should eq(false)
34
- end
35
-
36
- it 'reads updated values' do
37
- @obj.set_config :have_pdftk, true
38
- @obj.get_config(:have_pdftk).should eq(true)
39
- end
40
- end
41
-
42
- context 'with bad keys' do
43
- it 'raises an error on get' do
44
- expect { @obj.get_config(:bad_key) }.to raise_error
45
- end
46
-
47
- it 'raises an error on set' do
48
- expect { @obj.set_config(:bad_key, 'test') }.to raise_error
49
- end
50
- end
51
- end
52
-
53
- describe '.reset_config!' do
54
- before(:each) do
55
- @obj = ConfigTester.new
56
-
57
- @obj.stub(:load_config!) { }
58
- @obj.stub(:save_config!) { }
59
-
60
- @obj.set_config :have_pdftk, true
61
- end
62
-
63
- it 'resets changed values to defaults' do
64
- @obj.reset_config!
65
- @obj.get_config(:have_pdftk).should eq(false)
66
- end
67
- end
68
-
69
- describe '.dump_config' do
70
- before(:each) do
71
- @obj = ConfigTester.new
72
-
73
- @obj.stub(:load_config!) { }
74
- @obj.stub(:save_config!) { }
75
-
76
- @obj.set_config :pdftk_path, 'wut'
77
- end
78
-
79
- it 'prints out the set configuration values' do
80
- @obj.stub(:say) {}
81
- @obj.should_receive(:say).with(/pdftk_path: 'wut'/)
82
- @obj.dump_config
83
- end
84
- end
85
-
86
- describe '.load_config!' do
87
- before(:each) do
88
- @obj = ConfigTester.new
89
-
90
- @obj.stub(:save_config!) { }
91
-
92
- @config_file = File.join(File.dirname(__FILE__), 'config.yml')
93
- @obj.stub(:config_path) { @config_file }
94
- end
95
-
96
- it 'should load from the requested YAML file' do
97
- config = {
98
- :have_pdftk => true,
99
- :pdftk_path => 'wut'
100
- }
101
- File.open(@config_file, 'w:UTF-8') do |f|
102
- YAML.dump(config, f)
103
- end
104
-
105
- @obj.load_config!
106
- @obj.get_config(:pdftk_path).should eq('wut')
107
-
108
- File.delete(@config_file)
109
- end
110
- end
111
-
112
- describe '.save_config!' do
113
- before(:each) do
114
- @obj = ConfigTester.new
115
-
116
- @obj.stub(:load_config!) { }
117
-
118
- @config_file = File.join(File.dirname(__FILE__), 'config.yml')
119
- @obj.stub(:config_path) { @config_file }
120
- end
121
-
122
- it 'should save to the requested YAML file' do
123
- @obj.set_config :pdftk_path, 'wut'
124
- @obj.save_config!
125
-
126
- config = YAML::load(File.open(@config_file, 'r:UTF-8'))
127
- config[:pdftk_path].should eq('wut')
128
-
129
- File.delete(@config_file)
130
- end
131
- end
132
- end
@@ -1,331 +0,0 @@
1
- # -*- encoding : utf-8 -*-
2
- require 'stickyflag/paths'
3
- require 'stickyflag/configuration'
4
- require 'stickyflag/external_cmds'
5
- require 'stickyflag/tag_factory'
6
- require 'stickyflag/database'
7
-
8
- class DatabaseTester < Thor
9
- include StickyFlag::Paths
10
- include StickyFlag::Configuration
11
- include StickyFlag::ExternalCmds
12
- include StickyFlag::TagFactory
13
- include StickyFlag::Database
14
- end
15
-
16
- describe 'StickyFlag::Database' do
17
- before(:each) do
18
- @obj = DatabaseTester.new
19
-
20
- @obj.stub(:load_config!) { }
21
- @obj.stub(:save_config!) { }
22
- @obj.stub(:database_path) { ":memory:" }
23
-
24
- @obj.find_external_cmds
25
- @obj.load_database
26
-
27
- # Save this out for (lots of) later use
28
- @database = @obj.instance_variable_get(:@database)
29
- end
30
-
31
- after(:each) do
32
- # We've disabled automatic cleanup, so make sure we do this
33
- @database.disconnect
34
- end
35
-
36
- describe '.load_database' do
37
- it 'sets the member variable' do
38
- @database.should be
39
- end
40
- end
41
-
42
- describe '.update_database_from_files' do
43
- context 'without a specific directory' do
44
- before(:each) do
45
- @obj.update_database_from_files
46
- end
47
-
48
- it 'has some files in the database' do
49
- @database[:tagged_files].should_not be_empty
50
- end
51
-
52
- it 'has found the test and asdf tags' do
53
- @obj.tag_list.should include('asdf')
54
- @obj.tag_list.should include('test')
55
- end
56
-
57
- it 'has found a sample markdown file' do
58
- path = example_path 'mmd_crazy_keys.mmd'
59
- @obj.files_for_tags(['test']).map { |f| File.expand_path(f) }.should include(path)
60
- end
61
- end
62
-
63
- context 'with an empty directory' do
64
- before(:each) do
65
- @dir = File.tmpnam('.dir')
66
- Dir.mkdir(@dir)
67
-
68
- @obj.update_database_from_files(@dir)
69
- end
70
-
71
- after(:each) do
72
- Dir.rmdir(@dir)
73
- end
74
-
75
- it 'has no files in the database' do
76
- @database[:tagged_files].should be_empty
77
- end
78
- end
79
-
80
- context 'with some bad files in the directory' do
81
- before(:each) do
82
- @dir = File.tmpnam('.dir')
83
- Dir.mkdir(@dir)
84
-
85
- file = File.new(File.join(@dir, 'bad.pdf'), 'w:UTF-8')
86
- file.puts('test bad')
87
- file.close
88
- end
89
-
90
- after(:each) do
91
- File.unlink(File.join(@dir, 'bad.pdf'))
92
- Dir.rmdir(@dir)
93
- end
94
-
95
- it 'does not throw an exception' do
96
- expect { @obj.update_database_from_files(@dir) }.to_not raise_error
97
- end
98
-
99
- it 'prints a warning' do
100
- @obj.should_receive(:say_status).with(:warning, kind_of(String), kind_of(Symbol))
101
- @obj.update_database_from_files(@dir)
102
- end
103
- end
104
-
105
- context 'with a full directory' do
106
- before(:each) do
107
- @obj.update_database_from_files(example_root)
108
- end
109
-
110
- it 'has some files in the database' do
111
- @database[:tagged_files].should_not be_empty
112
- end
113
-
114
- it 'has found the test and asdf tags' do
115
- @obj.tag_list.should include('asdf')
116
- @obj.tag_list.should include('test')
117
- end
118
-
119
- it 'has found a sample markdown file' do
120
- path = example_path 'mmd_crazy_keys.mmd'
121
- @obj.files_for_tags(['test']).map { |f| File.expand_path(f) }.should include(path)
122
- end
123
- end
124
- end
125
-
126
- describe '.set_database_tag' do
127
- context 'with an already extant tag' do
128
- before(:each) do
129
- @obj.update_database_from_files example_root
130
- @path = example_path 'mmd_with_tag.mmd'
131
- @obj.set_database_tag(@path, 'asdf')
132
- end
133
-
134
- it "adds the record for the tagged file" do
135
- file_id = @database[:file_list].where(:file_name => @path).get(:id)
136
- file_id.should_not be_nil
137
-
138
- tag_id = @database[:tag_list].where(:tag_name => 'asdf').get(:id)
139
- tag_id.should_not be_nil
140
-
141
- ds = @database[:tagged_files].where(:file => file_id).and(:tag => tag_id)
142
- ds.should_not be_empty
143
- ds.count.should eq(1)
144
- end
145
-
146
- it "doesn't duplicate the entry for the tag" do
147
- ds = @database[:tag_list].where(:tag_name => 'asdf')
148
- ds.count.should eq(1)
149
- end
150
- end
151
-
152
- context 'with a new tag' do
153
- before(:each) do
154
- @obj.update_database_from_files example_root
155
- @path = example_path 'mmd_with_tag.mmd'
156
- @obj.set_database_tag(@path, 'zuzzax')
157
- end
158
-
159
- it "adds a new record for the new tag" do
160
- ds = @database[:tag_list].where(:tag_name => 'zuzzax')
161
- ds.should_not be_empty
162
- ds.count.should eq(1)
163
- end
164
-
165
- it "adds the record for the tagged file" do
166
- file_id = @database[:file_list].where(:file_name => @path).get(:id)
167
- file_id.should_not be_nil
168
-
169
- tag_id = @database[:tag_list].where(:tag_name => 'zuzzax').get(:id)
170
- tag_id.should_not be_nil
171
-
172
- ds = @database[:tagged_files].where(:file => file_id).and(:tag => tag_id)
173
- ds.should_not be_empty
174
- ds.count.should eq(1)
175
- end
176
- end
177
- end
178
-
179
- describe '.unset_database_tag' do
180
- context 'with a multiply-present tag' do
181
- before(:each) do
182
- @obj.update_database_from_files example_root
183
- @path = example_path 'mmd_with_tag.mmd'
184
- end
185
-
186
- it 'removes the record for the tagged file' do
187
- @obj.unset_database_tag(@path, 'test')
188
-
189
- file_id = @database[:file_list].where(:file_name => @path).get(:id)
190
- file_id.should_not be_nil
191
-
192
- tag_id = @database[:tag_list].where(:tag_name => 'test').get(:id)
193
- tag_id.should_not be_nil
194
-
195
- ds = @database[:tagged_files].where(:file => file_id).and(:tag => tag_id)
196
- ds.should be_empty
197
- end
198
- end
199
-
200
- context 'with a singly-present tag' do
201
- before(:each) do
202
- @obj.update_database_from_files example_root
203
- @path = example_path 'mmd_crazy_tags.mmd'
204
- end
205
-
206
- it 'removes the record for the tagged file' do
207
- file_id = @database[:file_list].where(:file_name => @path).get(:id)
208
- file_id.should_not be_nil
209
-
210
- tag_id = @database[:tag_list].where(:tag_name => 'qwer').get(:id)
211
- tag_id.should_not be_nil
212
-
213
- @obj.unset_database_tag(@path, 'qwer')
214
-
215
- ds = @database[:tagged_files].where(:file => file_id).and(:tag => tag_id)
216
- ds.should be_empty
217
- end
218
-
219
- it 'removes the record of the tag' do
220
- @obj.unset_database_tag(@path, 'qwer')
221
- ds = @database[:tag_list].where(:tag_name => 'qwer')
222
- ds.should be_empty
223
- end
224
- end
225
- end
226
-
227
- describe '.clear_database_tags' do
228
- before(:each) do
229
- @obj.update_database_from_files example_root
230
- @path = example_path 'mmd_crazy_tags.mmd'
231
- @obj.clear_database_tags(@path)
232
- end
233
-
234
- it 'removes all tag records for the file' do
235
- file_id = @database[:file_list].where(:file_name => @path).get(:id)
236
- file_id.should_not be_nil
237
-
238
- ds = @database[:tagged_files].where(:file => file_id)
239
- ds.should be_empty
240
- end
241
-
242
- it 'removes the tag after clearing single-instance tags' do
243
- ds = @database[:tag_list].where(:tag_name => 'qwer')
244
- ds.should be_empty
245
- end
246
- end
247
-
248
- describe '.files_for_tags' do
249
- before(:each) do
250
- @obj.update_database_from_files example_root
251
- end
252
-
253
- context 'with good, single tags' do
254
- it 'includes one of the markdown files' do
255
- path = example_path 'mmd_crazy_keys.mmd'
256
- @obj.files_for_tags([ 'test' ]).should include(path)
257
- end
258
-
259
- it 'does not include files that lack a tag' do
260
- path = example_path 'mmd_with_tag.mmd'
261
- @obj.files_for_tags([ 'asdf' ]).should_not include(path)
262
- end
263
-
264
- it 'does not include untaggable files' do
265
- path = example_path 'untaggable.txt'
266
- @obj.files_for_tags([ 'test' ]).should_not include(path)
267
- end
268
- end
269
-
270
- context 'with multiple tags' do
271
- it 'combines with boolean AND' do
272
- path1 = example_path 'mmd_crazy_tags.mmd'
273
- path2 = example_path 'mmd_with_tag.mmd'
274
-
275
- files = @obj.files_for_tags([ 'sdfg', 'asdf', 'qwer' ])
276
- files.should include(path1)
277
- files.should_not include(path2)
278
- end
279
-
280
- it 'prints a warning if no files have all those tags' do
281
- @obj.should_receive(:say_status).with(:warning, kind_of(String), kind_of(Symbol))
282
- @obj.files_for_tags([ 'asdf', 'test' ])
283
- end
284
-
285
- it 'returns an empty array if no files have all those tags' do
286
- @obj.files_for_tags([ 'asdf', 'test' ]).should be_empty
287
- end
288
- end
289
-
290
- context 'with missing tags' do
291
- it "doesn't throw" do
292
- expect { @obj.files_for_tags([ 'zuzzax' ]) }.to_not raise_error
293
- end
294
-
295
- it 'prints a warning' do
296
- @obj.should_receive(:say_status).with(:warning, kind_of(String), kind_of(Symbol))
297
- @obj.files_for_tags([ 'zuzzax' ])
298
- end
299
-
300
- it 'returns an empty array' do
301
- @obj.files_for_tags([ 'zuzzax', 'test' ]).should be_empty
302
- end
303
- end
304
- end
305
-
306
- describe '.tag_list' do
307
- context 'prior to loading anything into the database' do
308
- it 'is empty' do
309
- @obj.tag_list.should be_empty
310
- end
311
- end
312
-
313
- context 'after loading files into the database' do
314
- before(:each) do
315
- @obj.update_database_from_files example_root
316
- end
317
-
318
- it 'includes multiply-present tags' do
319
- @obj.tag_list.should include('test')
320
- end
321
-
322
- it 'includes singly-present tags' do
323
- @obj.tag_list.should include('qwer')
324
- end
325
-
326
- it 'does not include absent tags' do
327
- @obj.tag_list.should_not include('zuzzax')
328
- end
329
- end
330
- end
331
- end