browse-everything 0.15.1 → 0.16.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- data/.rubocop.yml +61 -9
- data/.rubocop_todo.yml +2 -15
- data/.travis.yml +19 -19
- data/CONTRIBUTING.md +6 -6
- data/Gemfile +12 -8
- data/README.md +30 -0
- data/Rakefile +2 -1
- data/app/assets/javascripts/browse_everything/behavior.js.coffee +5 -0
- data/app/controllers/browse_everything_controller.rb +75 -23
- data/app/helpers/browse_everything_helper.rb +2 -8
- data/app/helpers/font_awesome_version_helper.rb +9 -8
- data/app/services/browse_everything_session.rb +10 -0
- data/app/services/browse_everything_session/provider_session.rb +42 -0
- data/app/services/browser_factory.rb +25 -0
- data/app/views/browse_everything/_files.html.erb +56 -6
- data/browse-everything.gemspec +29 -25
- data/config/routes.rb +7 -2
- data/lib/browse-everything.rb +2 -0
- data/lib/browse_everything.rb +45 -12
- data/lib/browse_everything/auth/google/credentials.rb +28 -0
- data/lib/browse_everything/auth/google/request_parameters.rb +61 -0
- data/lib/browse_everything/browser.rb +11 -4
- data/lib/browse_everything/driver/authentication_factory.rb +22 -0
- data/lib/browse_everything/driver/base.rb +72 -19
- data/lib/browse_everything/driver/box.rb +46 -17
- data/lib/browse_everything/driver/dropbox.rb +36 -10
- data/lib/browse_everything/driver/file_system.rb +14 -26
- data/lib/browse_everything/driver/google_drive.rb +187 -54
- data/lib/browse_everything/driver/s3.rb +81 -75
- data/lib/browse_everything/engine.rb +3 -2
- data/lib/browse_everything/file_entry.rb +3 -1
- data/lib/browse_everything/retriever.rb +103 -31
- data/lib/browse_everything/version.rb +3 -1
- data/lib/generators/browse_everything/assets_generator.rb +3 -2
- data/lib/generators/browse_everything/config_generator.rb +11 -9
- data/lib/generators/browse_everything/install_generator.rb +3 -2
- data/lib/generators/browse_everything/templates/browse_everything_providers.yml.example +12 -11
- data/spec/controllers/browse_everything_controller_spec.rb +80 -0
- data/spec/features/select_files_spec.rb +13 -13
- data/spec/features/test_compiling_stylesheets_spec.rb +2 -0
- data/spec/fixtures/vcr_cassettes/google_drive.yml +331 -0
- data/spec/fixtures/vcr_cassettes/retriever.yml +93 -0
- data/spec/helper/browse_everything_controller_helper_spec.rb +21 -7
- data/spec/javascripts/jasmine_spec.rb +2 -0
- data/spec/javascripts/support/jasmine_helper.rb +1 -0
- data/spec/lib/browse_everything/auth/google/credentials_spec.rb +41 -0
- data/spec/{unit → lib/browse_everything}/browse_everything_helper_spec.rb +2 -0
- data/spec/lib/browse_everything/browser_spec.rb +109 -0
- data/spec/{unit → lib/browse_everything/driver}/base_spec.rb +5 -4
- data/spec/{unit → lib/browse_everything/driver}/box_spec.rb +20 -5
- data/spec/{unit → lib/browse_everything/driver}/dropbox_spec.rb +15 -18
- data/spec/{unit → lib/browse_everything/driver}/file_system_spec.rb +32 -26
- data/spec/lib/browse_everything/driver/google_drive_spec.rb +171 -0
- data/spec/{unit → lib/browse_everything/driver}/s3_spec.rb +38 -21
- data/spec/lib/browse_everything/driver_spec.rb +38 -0
- data/spec/{unit → lib/browse_everything}/file_entry_spec.rb +4 -1
- data/spec/lib/browse_everything/retriever_spec.rb +200 -0
- data/spec/lib/browse_everything_spec.rb +67 -0
- data/spec/services/browse_everything_session/provider_session_spec.rb +50 -0
- data/spec/services/browser_factory_spec.rb +40 -0
- data/spec/spec_helper.rb +39 -18
- data/spec/support/app/controllers/file_handler_controller.rb +4 -4
- data/spec/support/app/views/file_handler/main.html.erb +1 -1
- data/spec/support/capybara.rb +17 -0
- data/spec/support/rake.rb +3 -1
- data/spec/support/wait_for_ajax.rb +14 -0
- data/spec/test_app_templates/Gemfile.extra +1 -0
- data/spec/test_app_templates/lib/generators/test_app_generator.rb +10 -4
- data/spec/views/browse_everything/{_file.html.erb_spec.rb → _files.html.erb_spec.rb} +24 -18
- data/tasks/ci.rake +2 -0
- metadata +159 -107
- data/app/views/browse_everything/_file.html.erb +0 -52
- data/app/views/browse_everything/resolve.html.erb +0 -1
- data/spec/unit/browser_spec.rb +0 -76
- data/spec/unit/retriever_spec.rb +0 -109
@@ -0,0 +1,41 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
describe BrowseEverything::Auth::Google::Credentials do
|
4
|
+
subject(:credentials) { described_class.new }
|
5
|
+
|
6
|
+
describe '#fetch_access_token' do
|
7
|
+
let(:response) { double }
|
8
|
+
before do
|
9
|
+
WebMock.disable!
|
10
|
+
|
11
|
+
allow(response).to receive(:status_code).and_return('200')
|
12
|
+
allow(response).to receive(:body).and_return('{}')
|
13
|
+
allow(response).to receive(:header).and_return({ content_type: 'application/json' })
|
14
|
+
|
15
|
+
connection = instance_double(Faraday::Connection)
|
16
|
+
allow(connection).to receive(:post).and_return(response)
|
17
|
+
faraday = class_double('Faraday').as_stubbed_const(transfer_nested_constants: true)
|
18
|
+
allow(faraday).to receive(:default_connection).and_return(connection)
|
19
|
+
|
20
|
+
end
|
21
|
+
|
22
|
+
context 'when an access has already been retrieved' do
|
23
|
+
before do
|
24
|
+
credentials.access_token = 'test-token'
|
25
|
+
end
|
26
|
+
it 'generates a Hash if an access token has already been set' do
|
27
|
+
expect(credentials.fetch_access_token).to be_a Hash
|
28
|
+
expect(credentials.fetch_access_token).to include('access_token' => 'test-token')
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
it 'requests a new token from the OAuth provider' do
|
33
|
+
expect(credentials.fetch_access_token).to be_a Hash
|
34
|
+
expect(credentials.fetch_access_token).to eq({})
|
35
|
+
end
|
36
|
+
|
37
|
+
after do
|
38
|
+
WebMock.enable!
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
@@ -0,0 +1,109 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
include BrowserConfigHelper
|
4
|
+
|
5
|
+
describe BrowseEverything::Browser do
|
6
|
+
let(:file_config) do
|
7
|
+
"file_system:\n home: '/file/config/home'\ndropbox:\n client_id: 'DropboxId'\n client_secret: 'DropboxClientSecret'"
|
8
|
+
end
|
9
|
+
|
10
|
+
let(:global_config) do
|
11
|
+
{
|
12
|
+
file_system: {
|
13
|
+
home: '/global/config/home'
|
14
|
+
},
|
15
|
+
dropbox: {
|
16
|
+
client_id: 'DropboxId',
|
17
|
+
client_secret: 'DropboxClientSecret'
|
18
|
+
}
|
19
|
+
}
|
20
|
+
end
|
21
|
+
|
22
|
+
let(:local_config) do
|
23
|
+
{
|
24
|
+
file_system: {
|
25
|
+
home: '/local/config/home'
|
26
|
+
},
|
27
|
+
dropbox: {
|
28
|
+
client_id: 'DropboxId',
|
29
|
+
client_secret: 'DropboxClientSecret'
|
30
|
+
},
|
31
|
+
url_options: url_options
|
32
|
+
}
|
33
|
+
end
|
34
|
+
|
35
|
+
describe 'file config' do
|
36
|
+
let(:browser) { described_class.new(url_options) }
|
37
|
+
|
38
|
+
before do
|
39
|
+
BrowseEverything.config = nil
|
40
|
+
allow(File).to receive(:read).and_return file_config
|
41
|
+
end
|
42
|
+
|
43
|
+
it 'has 2 providers' do
|
44
|
+
expect(browser.providers.keys).to eq(%w[file_system dropbox])
|
45
|
+
expect(browser.providers[:file_system]).to be_a BrowseEverything::Driver::FileSystem
|
46
|
+
expect(browser.providers[:dropbox]).to be_a BrowseEverything::Driver::Dropbox
|
47
|
+
end
|
48
|
+
|
49
|
+
it 'uses the file configuration' do
|
50
|
+
expect(browser.providers[:file_system].config[:home]).to eq('/file/config/home')
|
51
|
+
expect(browser.providers['file_system'].config['home']).to eq('/file/config/home')
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
describe 'global config' do
|
56
|
+
let(:browser) { described_class.new(url_options) }
|
57
|
+
|
58
|
+
before { BrowseEverything.configure(global_config) }
|
59
|
+
|
60
|
+
it 'has 2 providers' do
|
61
|
+
expect(browser.providers.keys).to eq(%w[file_system dropbox])
|
62
|
+
expect(browser.providers[:file_system]).to be_a BrowseEverything::Driver::FileSystem
|
63
|
+
expect(browser.providers[:dropbox]).to be_a BrowseEverything::Driver::Dropbox
|
64
|
+
end
|
65
|
+
|
66
|
+
it 'uses the global configuration' do
|
67
|
+
expect(browser.providers[:file_system].config[:home]).to eq('/global/config/home')
|
68
|
+
expect(browser.providers['file_system'].config['home']).to eq('/global/config/home')
|
69
|
+
end
|
70
|
+
end
|
71
|
+
|
72
|
+
describe 'local config' do
|
73
|
+
let(:browser) { described_class.new(local_config) }
|
74
|
+
|
75
|
+
it 'has 2 providers' do
|
76
|
+
expect(browser.providers.keys).to eq(%w[file_system dropbox])
|
77
|
+
expect(browser.providers[:file_system]).to be_a BrowseEverything::Driver::FileSystem
|
78
|
+
expect(browser.providers[:dropbox]).to be_a BrowseEverything::Driver::Dropbox
|
79
|
+
end
|
80
|
+
|
81
|
+
it 'uses the local configuration' do
|
82
|
+
file_provider = browser.providers[:file_system]
|
83
|
+
expect(file_provider.config[:home]).to eq('/local/config/home')
|
84
|
+
expect(file_provider.config['home']).to eq('/local/config/home')
|
85
|
+
end
|
86
|
+
end
|
87
|
+
|
88
|
+
context 'with an unknown provider' do
|
89
|
+
let(:browser) do
|
90
|
+
described_class.new(foo: { key: 'bar', secret: 'baz' }, url_options: url_options)
|
91
|
+
end
|
92
|
+
|
93
|
+
before do
|
94
|
+
allow(Rails.logger).to receive(:warn)
|
95
|
+
end
|
96
|
+
|
97
|
+
it 'logs a warning' do
|
98
|
+
browser
|
99
|
+
expect(Rails.logger).to have_received(:warn).with('Unknown provider: foo')
|
100
|
+
end
|
101
|
+
end
|
102
|
+
|
103
|
+
describe '#first_provider' do
|
104
|
+
subject(:browser) { described_class.new(url_options) }
|
105
|
+
it 'retrieves the first configured provider' do
|
106
|
+
expect(browser.first_provider).to be_a BrowseEverything::Driver::FileSystem
|
107
|
+
end
|
108
|
+
end
|
109
|
+
end
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
include BrowserConfigHelper
|
2
4
|
|
3
5
|
describe BrowseEverything::Driver::Base do
|
@@ -14,18 +16,17 @@ describe BrowseEverything::Driver::Base do
|
|
14
16
|
end
|
15
17
|
describe '#connect' do
|
16
18
|
subject { driver.connect({}, {}) }
|
19
|
+
|
17
20
|
it { is_expected.to be_blank }
|
18
21
|
end
|
19
22
|
describe '#contents' do
|
20
23
|
subject { driver.contents('') }
|
24
|
+
|
21
25
|
it { is_expected.to be_empty }
|
22
26
|
end
|
23
|
-
describe '#details' do
|
24
|
-
subject { driver.details('/path/to/foo.txt') }
|
25
|
-
it { is_expected.to be_nil }
|
26
|
-
end
|
27
27
|
describe '#link_for' do
|
28
28
|
subject { driver.link_for('/path/to/foo.txt') }
|
29
|
+
|
29
30
|
it { is_expected.to contain_exactly('/path/to/foo.txt', file_name: 'foo.txt') }
|
30
31
|
end
|
31
32
|
end
|
@@ -1,9 +1,8 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
include BrowserConfigHelper
|
2
4
|
|
3
5
|
describe BrowseEverything::Driver::Box, vcr: { cassette_name: 'box', record: :none } do
|
4
|
-
before(:all) { stub_configuration }
|
5
|
-
after(:all) { unstub_configuration }
|
6
|
-
|
7
6
|
let(:browser) { BrowseEverything::Browser.new(url_options) }
|
8
7
|
let(:provider) { browser.providers['box'] }
|
9
8
|
let(:auth_params) do
|
@@ -33,7 +32,15 @@ describe BrowseEverything::Driver::Box, vcr: { cassette_name: 'box', record: :no
|
|
33
32
|
}
|
34
33
|
end
|
35
34
|
|
36
|
-
subject
|
35
|
+
subject { provider }
|
36
|
+
|
37
|
+
before do
|
38
|
+
stub_configuration
|
39
|
+
end
|
40
|
+
|
41
|
+
after do
|
42
|
+
unstub_configuration
|
43
|
+
end
|
37
44
|
|
38
45
|
its(:name) { is_expected.to eq('Box') }
|
39
46
|
its(:key) { is_expected.to eq('box') }
|
@@ -55,6 +62,7 @@ describe BrowseEverything::Driver::Box, vcr: { cassette_name: 'box', record: :no
|
|
55
62
|
|
56
63
|
describe '#authorized?' do
|
57
64
|
subject { provider.authorized? }
|
65
|
+
|
58
66
|
context 'when the access token is not registered' do
|
59
67
|
it { is_expected.to be(false) }
|
60
68
|
end
|
@@ -73,9 +81,13 @@ describe BrowseEverything::Driver::Box, vcr: { cassette_name: 'box', record: :no
|
|
73
81
|
end
|
74
82
|
|
75
83
|
describe '#connect' do
|
84
|
+
before do
|
85
|
+
allow(provider).to receive(:register_access_token)
|
86
|
+
end
|
87
|
+
|
76
88
|
it 'registers new tokens' do
|
77
|
-
expect(provider).to receive(:register_access_token).with(kind_of(OAuth2::AccessToken))
|
78
89
|
provider.connect(auth_params, 'data')
|
90
|
+
expect(provider).to have_received(:register_access_token).with(kind_of(OAuth2::AccessToken))
|
79
91
|
end
|
80
92
|
end
|
81
93
|
|
@@ -90,6 +102,7 @@ describe BrowseEverything::Driver::Box, vcr: { cassette_name: 'box', record: :no
|
|
90
102
|
|
91
103
|
describe 'the first item' do
|
92
104
|
subject { long_file }
|
105
|
+
|
93
106
|
its(:name) { is_expected.to start_with('A very looooooooooooong box folder') }
|
94
107
|
its(:location) { is_expected.to eq('box:20375782799') }
|
95
108
|
it { is_expected.to be_container }
|
@@ -97,6 +110,7 @@ describe BrowseEverything::Driver::Box, vcr: { cassette_name: 'box', record: :no
|
|
97
110
|
|
98
111
|
describe 'the SaS - Development Team directory' do
|
99
112
|
subject { sas_directory }
|
113
|
+
|
100
114
|
its(:name) { is_expected.to eq('SaS - Development Team') }
|
101
115
|
its(:location) { is_expected.to eq('box:2459961273') }
|
102
116
|
its(:id) { is_expected.to eq('2459961273') }
|
@@ -105,6 +119,7 @@ describe BrowseEverything::Driver::Box, vcr: { cassette_name: 'box', record: :no
|
|
105
119
|
|
106
120
|
describe 'a file' do
|
107
121
|
subject { tar_file }
|
122
|
+
|
108
123
|
its(:name) { is_expected.to eq('failed.tar.gz') }
|
109
124
|
its(:size) { is_expected.to eq(28_650_839) }
|
110
125
|
its(:location) { is_expected.to eq('box:25581309763') }
|
@@ -1,9 +1,8 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
include BrowserConfigHelper
|
2
4
|
|
3
5
|
describe BrowseEverything::Driver::Dropbox, vcr: { cassette_name: 'dropbox', record: :none } do
|
4
|
-
before(:all) { stub_configuration }
|
5
|
-
after(:all) { unstub_configuration }
|
6
|
-
|
7
6
|
let(:browser) { BrowseEverything::Browser.new(url_options) }
|
8
7
|
let(:provider) { browser.providers['dropbox'] }
|
9
8
|
let(:provider_yml) do
|
@@ -13,6 +12,14 @@ describe BrowseEverything::Driver::Dropbox, vcr: { cassette_name: 'dropbox', rec
|
|
13
12
|
}
|
14
13
|
end
|
15
14
|
|
15
|
+
before do
|
16
|
+
stub_configuration
|
17
|
+
end
|
18
|
+
|
19
|
+
after do
|
20
|
+
unstub_configuration
|
21
|
+
end
|
22
|
+
|
16
23
|
describe '#validate_config' do
|
17
24
|
it 'raises and error with an incomplete configuration' do
|
18
25
|
expect { BrowseEverything::Driver::Dropbox.new({}) }.to raise_error(BrowseEverything::InitializationError)
|
@@ -25,6 +32,7 @@ describe BrowseEverything::Driver::Dropbox, vcr: { cassette_name: 'dropbox', rec
|
|
25
32
|
|
26
33
|
describe 'simple properties' do
|
27
34
|
subject { provider }
|
35
|
+
|
28
36
|
its(:name) { is_expected.to eq('Dropbox') }
|
29
37
|
its(:key) { is_expected.to eq('dropbox') }
|
30
38
|
its(:icon) { is_expected.to be_a(String) }
|
@@ -32,20 +40,23 @@ describe BrowseEverything::Driver::Dropbox, vcr: { cassette_name: 'dropbox', rec
|
|
32
40
|
|
33
41
|
context 'with a valid configuration' do
|
34
42
|
let(:driver) { described_class.new(provider_yml) }
|
43
|
+
|
35
44
|
before { driver.connect({ code: 'code' }, {}) }
|
36
45
|
|
37
46
|
describe '#auth_link' do
|
38
47
|
subject { driver.auth_link }
|
48
|
+
|
39
49
|
it { is_expected.to start_with('https://www.dropbox.com/oauth2/authorize') }
|
40
50
|
end
|
41
51
|
|
42
52
|
describe '#authorized?' do
|
43
53
|
subject { driver }
|
54
|
+
|
44
55
|
it { is_expected.to be_authorized }
|
45
56
|
end
|
46
57
|
|
47
58
|
describe '#contents' do
|
48
|
-
context '
|
59
|
+
context 'when in the root folder' do
|
49
60
|
let(:contents) { driver.contents }
|
50
61
|
|
51
62
|
it 'retrieves all folders the root folders' do
|
@@ -62,20 +73,6 @@ describe BrowseEverything::Driver::Dropbox, vcr: { cassette_name: 'dropbox', rec
|
|
62
73
|
end
|
63
74
|
end
|
64
75
|
|
65
|
-
describe '#details' do
|
66
|
-
subject(:file_metadata) { driver.details('/Getting Started.pdf') }
|
67
|
-
|
68
|
-
it 'retrieves the metadata for a file' do
|
69
|
-
expect(file_metadata).to be_a BrowseEverything::FileEntry
|
70
|
-
expect(file_metadata.id).to eq '/Getting Started.pdf'
|
71
|
-
expect(file_metadata.location).to eq 'dropbox:/Getting Started.pdf'
|
72
|
-
expect(file_metadata.name).to eq 'Getting Started.pdf'
|
73
|
-
expect(file_metadata.size).to eq 249159
|
74
|
-
expect(file_metadata.mtime).to be_a Time
|
75
|
-
expect(file_metadata.container?).to eq false
|
76
|
-
end
|
77
|
-
end
|
78
|
-
|
79
76
|
describe '#link_for' do
|
80
77
|
subject(:link_args) { driver.link_for('/Getting Started.pdf') }
|
81
78
|
|
@@ -1,18 +1,27 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
include BrowserConfigHelper
|
2
4
|
|
3
5
|
describe BrowseEverything::Driver::FileSystem do
|
4
|
-
before(:all) { stub_configuration }
|
5
|
-
after(:all) { unstub_configuration }
|
6
6
|
let(:home) { File.expand_path(BrowseEverything.config['file_system'][:home]) }
|
7
7
|
let(:browser) { BrowseEverything::Browser.new(url_options) }
|
8
8
|
let(:provider) { browser.providers['file_system'] }
|
9
9
|
|
10
|
+
before do
|
11
|
+
stub_configuration
|
12
|
+
end
|
13
|
+
|
14
|
+
after do
|
15
|
+
unstub_configuration
|
16
|
+
end
|
17
|
+
|
10
18
|
it '#validate_config' do
|
11
19
|
expect { described_class.new({}) }.to raise_error(BrowseEverything::InitializationError)
|
12
20
|
end
|
13
21
|
|
14
22
|
describe 'simple properties' do
|
15
23
|
subject { provider }
|
24
|
+
|
16
25
|
its(:name) { is_expected.to eq('File System') }
|
17
26
|
its(:key) { is_expected.to eq('file_system') }
|
18
27
|
its(:icon) { is_expected.to be_a(String) }
|
@@ -20,50 +29,44 @@ describe BrowseEverything::Driver::FileSystem do
|
|
20
29
|
end
|
21
30
|
|
22
31
|
describe '#contents' do
|
23
|
-
context 'root directory' do
|
32
|
+
context 'when in a root directory' do
|
24
33
|
let(:contents) { provider.contents('/') }
|
25
|
-
|
34
|
+
|
35
|
+
context 'when there is one directory' do
|
26
36
|
subject { contents[0] }
|
37
|
+
|
27
38
|
its(:name) { is_expected.to eq('dir_1') }
|
28
39
|
specify { is_expected.to be_container }
|
29
40
|
end
|
30
|
-
context '
|
41
|
+
context 'when there are multiple directories' do
|
31
42
|
subject { contents[1] }
|
43
|
+
|
32
44
|
its(:name) { is_expected.to eq('dir_2') }
|
33
45
|
specify { is_expected.to be_container }
|
34
46
|
end
|
35
|
-
context '
|
47
|
+
context 'when there is a PDF' do
|
36
48
|
subject { contents[2] }
|
49
|
+
|
37
50
|
its(:name) { is_expected.to eq('file 1.pdf') }
|
38
51
|
its(:size) { is_expected.to eq(2256) }
|
39
52
|
its(:location) { is_expected.to eq("file_system:#{File.join(home, 'file 1.pdf')}") }
|
40
53
|
its(:type) { is_expected.to eq('application/pdf') }
|
41
54
|
specify { is_expected.not_to be_container }
|
42
55
|
end
|
43
|
-
context '[3]' do
|
44
|
-
subject { contents[3] }
|
45
|
-
its(:name) { is_expected.to eq('file_1.pdf') }
|
46
|
-
its(:size) { is_expected.to eq(2256) }
|
47
|
-
its(:location) { is_expected.to eq("file_system:#{File.join(home, 'file_1.pdf')}") }
|
48
|
-
its(:type) { is_expected.to eq('application/pdf') }
|
49
|
-
specify { is_expected.not_to be_container }
|
50
|
-
end
|
51
56
|
end
|
52
57
|
|
53
|
-
context 'subdirectory' do
|
58
|
+
context 'when there is a subdirectory' do
|
54
59
|
let(:contents) { provider.contents('/dir_1') }
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
end
|
60
|
-
context '[1]' do
|
61
|
-
subject { contents[1] }
|
60
|
+
|
61
|
+
context 'when there is a directory' do
|
62
|
+
subject { contents.first }
|
63
|
+
|
62
64
|
its(:name) { is_expected.to eq('dir_3') }
|
63
65
|
specify { is_expected.to be_container }
|
64
66
|
end
|
65
|
-
context '
|
66
|
-
subject { contents
|
67
|
+
context 'when there is a text file' do
|
68
|
+
subject { contents.last }
|
69
|
+
|
67
70
|
its(:name) { is_expected.to eq('file_2.txt') }
|
68
71
|
its(:location) { is_expected.to eq("file_system:#{File.join(home, 'dir_1/file_2.txt')}") }
|
69
72
|
its(:type) { is_expected.to eq('text/plain') }
|
@@ -71,10 +74,12 @@ describe BrowseEverything::Driver::FileSystem do
|
|
71
74
|
end
|
72
75
|
end
|
73
76
|
|
74
|
-
context 'single file' do
|
77
|
+
context 'when there is a single file' do
|
75
78
|
let(:contents) { provider.contents('/dir_1/dir_3/file_3.m4v') }
|
76
|
-
|
79
|
+
|
80
|
+
context 'when there is a m4v file' do
|
77
81
|
subject { contents[0] }
|
82
|
+
|
78
83
|
its(:name) { is_expected.to eq('file_3.m4v') }
|
79
84
|
its(:location) { is_expected.to eq("file_system:#{File.join(home, 'dir_1/dir_3/file_3.m4v')}") }
|
80
85
|
its(:size) { is_expected.to eq(3879) }
|
@@ -86,6 +91,7 @@ describe BrowseEverything::Driver::FileSystem do
|
|
86
91
|
|
87
92
|
describe "#link_for('/path/to/file')" do
|
88
93
|
subject { provider.link_for('/path/to/file') }
|
94
|
+
|
89
95
|
it { is_expected.to eq(['file:///path/to/file', { file_name: 'file', file_size: 0 }]) }
|
90
96
|
end
|
91
97
|
end
|