hackpad-cli 0.0.7 → 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.rubocop.yml +14 -0
- data/.travis.yml +1 -0
- data/CHANGELOG.md +19 -9
- data/README.md +14 -13
- data/Rakefile +6 -6
- data/bin/hpcli +1 -1
- data/hackpad-cli.gemspec +20 -20
- data/lib/hackpad/cli/api.rb +7 -17
- data/lib/hackpad/cli/client.rb +29 -20
- data/lib/hackpad/cli/config.rb +19 -24
- data/lib/hackpad/cli/pad.rb +13 -14
- data/lib/hackpad/cli/padlist.rb +19 -15
- data/lib/hackpad/cli/plain_colors.rb +1 -1
- data/lib/hackpad/cli/runner.rb +49 -34
- data/lib/hackpad/cli/store.rb +17 -9
- data/lib/hackpad/cli/version.rb +1 -1
- data/spec/lib/hackpad/cli/api_spec.rb +89 -0
- data/spec/lib/hackpad/cli/client_spec.rb +162 -65
- data/spec/lib/hackpad/cli/config_spec.rb +15 -14
- data/spec/lib/hackpad/cli/pad_spec.rb +81 -25
- data/spec/lib/hackpad/cli/padlist_spec.rb +70 -0
- data/spec/lib/hackpad/cli/runner_spec.rb +36 -8
- data/spec/lib/hackpad/cli/store_spec.rb +94 -13
- data/spec/spec_helper.rb +13 -3
- metadata +7 -2
@@ -1,7 +1,7 @@
|
|
1
1
|
# encoding: utf-8
|
2
2
|
|
3
3
|
require 'spec_helper'
|
4
|
-
require
|
4
|
+
require 'hackpad/cli/config'
|
5
5
|
|
6
6
|
describe Hackpad::Cli::Config do
|
7
7
|
|
@@ -10,21 +10,22 @@ describe Hackpad::Cli::Config do
|
|
10
10
|
let(:options) { { configdir: configdir, workspace: 'default' } }
|
11
11
|
|
12
12
|
before :each do
|
13
|
-
FileUtils.mkdir_p configdir unless Dir.
|
13
|
+
FileUtils.mkdir_p configdir unless Dir.exist?(configdir)
|
14
14
|
end
|
15
15
|
|
16
16
|
after :each do
|
17
|
-
FileUtils.rm configfile if File.
|
17
|
+
FileUtils.rm configfile if File.exist?(configfile)
|
18
18
|
end
|
19
19
|
|
20
|
-
describe
|
21
|
-
let(:config) { {'xx' => 'oo'} }
|
20
|
+
describe '.load' do
|
21
|
+
let(:config) { { 'xx' => 'oo' } }
|
22
22
|
|
23
|
-
context
|
24
|
-
it
|
25
|
-
|
26
|
-
|
27
|
-
|
23
|
+
context 'when there is no config file,' do
|
24
|
+
it 'calls for setup' do
|
25
|
+
Dir.stub(:exists?).and_return false
|
26
|
+
subject.stub(:setup).with(configfile, STDIN, STDOUT)
|
27
|
+
File.open(configfile, 'w') do |f|
|
28
|
+
f.write YAML.dump(config)
|
28
29
|
end
|
29
30
|
expect(subject.load options).to eq config
|
30
31
|
end
|
@@ -32,12 +33,12 @@ describe Hackpad::Cli::Config do
|
|
32
33
|
|
33
34
|
end
|
34
35
|
|
35
|
-
describe
|
36
|
-
context
|
36
|
+
describe '.setup' do
|
37
|
+
context 'when normal input is provided,' do
|
37
38
|
let(:input) { StringIO.new }
|
38
39
|
let(:output) { StringIO.new }
|
39
|
-
it
|
40
|
-
input.stub(:gets).and_return(
|
40
|
+
it 'handles setup interactively' do
|
41
|
+
input.stub(:gets).and_return('client_id', 'secret', 'site')
|
41
42
|
subject.send :setup, configfile, input, output
|
42
43
|
expect(File.read configfile).to eq "---\nclient_id: client_id\nsecret: secret\nsite: site\n"
|
43
44
|
end
|
@@ -1,41 +1,97 @@
|
|
1
1
|
# encoding: utf-8
|
2
2
|
|
3
3
|
require 'spec_helper'
|
4
|
-
require
|
5
|
-
require
|
6
|
-
require
|
7
|
-
require
|
4
|
+
require 'hackpad/cli'
|
5
|
+
require 'hackpad/cli/pad'
|
6
|
+
require 'hackpad/cli/api'
|
7
|
+
require 'hackpad/cli/store'
|
8
8
|
|
9
9
|
describe Hackpad::Cli::Pad do
|
10
10
|
|
11
|
-
|
12
|
-
Hackpad::Cli::Api.stub(:read).with('123', 'txt').and_return("content\nand body")
|
13
|
-
Hackpad::Cli::Api.stub(:read_options).with('123').and_return({"success" => "true", "options" => {}})
|
14
|
-
options = {
|
15
|
-
configdir: File.expand_path('../../../../files', __FILE__),
|
16
|
-
workspace: 'default'
|
17
|
-
}
|
18
|
-
Hackpad::Cli::Store.prepare options
|
19
|
-
@pad = Hackpad::Cli::Pad.new "123"
|
20
|
-
@pad.load 'txt'
|
21
|
-
end
|
11
|
+
let(:pad) { Hackpad::Cli::Pad.new '123' }
|
22
12
|
|
23
|
-
|
24
|
-
|
13
|
+
describe '.new' do
|
14
|
+
it { expect(pad.id).to eq '123' }
|
25
15
|
end
|
26
16
|
|
27
|
-
|
28
|
-
|
17
|
+
describe '.cached?' do
|
18
|
+
before { Hackpad::Cli::Store.stub(:exists?).and_return true }
|
19
|
+
it { expect(pad.cached?).to be_true }
|
29
20
|
end
|
30
21
|
|
31
|
-
|
32
|
-
|
22
|
+
context 'when the pad has no data,' do
|
23
|
+
describe '.title' do
|
24
|
+
it { expect(pad.title).to eq nil }
|
25
|
+
end
|
26
|
+
describe '.chars' do
|
27
|
+
it { expect(pad.chars).to eq nil }
|
28
|
+
end
|
29
|
+
describe '.lines' do
|
30
|
+
it { expect(pad.lines).to eq nil }
|
31
|
+
end
|
33
32
|
end
|
34
|
-
|
35
|
-
|
33
|
+
|
34
|
+
context 'when the pad has only a content,' do
|
35
|
+
before { pad.instance_variable_set(:@content, "This\nis\nInformation!") }
|
36
|
+
describe '.title' do
|
37
|
+
it { expect(pad.title).to eq 'This' }
|
38
|
+
end
|
39
|
+
describe '.chars' do
|
40
|
+
it { expect(pad.chars).to eq 20 }
|
41
|
+
end
|
42
|
+
describe '.lines' do
|
43
|
+
it { expect(pad.lines).to eq 3 }
|
44
|
+
end
|
36
45
|
end
|
37
|
-
|
38
|
-
|
46
|
+
|
47
|
+
context 'when a pad is cached,' do
|
48
|
+
before { Hackpad::Cli::Store.stub(:exists?).and_return true }
|
49
|
+
context "when we don't want a refresh," do
|
50
|
+
describe '.load' do
|
51
|
+
context 'when unknown format is asked,' do
|
52
|
+
it { expect { pad.load 'xxx' }.to raise_error(Hackpad::Cli::UnknownFormat) }
|
53
|
+
end
|
54
|
+
context 'when pad has no id,' do
|
55
|
+
before { pad.send(:remove_instance_variable, :@id) }
|
56
|
+
it { expect { pad.load 'txt' }.to raise_error(Hackpad::Cli::UndefinedPad) }
|
57
|
+
end
|
58
|
+
context 'when all is ok,' do
|
59
|
+
before { pad.stub(:load_from_cache) }
|
60
|
+
it { expect { pad.load 'txt' }.not_to raise_error }
|
61
|
+
end
|
62
|
+
end
|
63
|
+
describe '.load_from_cache' do
|
64
|
+
let(:meta) { { 'options' => { 'guestPolicy' => 'open', 'isModerated' => false }, 'cached_at' => 'some time' } }
|
65
|
+
before { Hackpad::Cli::Store.stub(:read).with('123', 'txt').and_return("This\nis\nInformation!") }
|
66
|
+
before { Hackpad::Cli::Store.stub(:read_options).with('123').and_return(meta) }
|
67
|
+
before { pad.load_from_cache 'txt' }
|
68
|
+
it { expect(pad.content).to eq "This\nis\nInformation!" }
|
69
|
+
it { expect(pad.guest_policy).to eq 'open' }
|
70
|
+
it { expect(pad.moderated).to be_false }
|
71
|
+
it { expect(pad.cached_at).to eq 'some time' }
|
72
|
+
end
|
73
|
+
end
|
74
|
+
context 'when we want a refresh,' do
|
75
|
+
describe '.load' do
|
76
|
+
before { pad.stub(:load_from_api) }
|
77
|
+
it { expect { pad.load 'txt', true }.not_to raise_error }
|
78
|
+
end
|
79
|
+
describe '.load_from_api' do
|
80
|
+
let(:meta) { { 'options' => { 'guestPolicy' => 'open', 'isModerated' => false }, 'cached_at' => 'some time' } }
|
81
|
+
before { Hackpad::Cli::Api.stub(:read).with('123', 'txt').and_return("This\nis\nInformation!") }
|
82
|
+
before { Hackpad::Cli::Api.stub(:read_options).with('123').and_return(meta) }
|
83
|
+
context 'when we want to save to cache,' do
|
84
|
+
before { Hackpad::Cli::Store.stub(:save) }
|
85
|
+
before { Hackpad::Cli::Store.stub(:save_options) }
|
86
|
+
before { pad.load_from_api 'txt' }
|
87
|
+
it { expect(pad.content).to eq "This\nis\nInformation!" }
|
88
|
+
end
|
89
|
+
context "when we don't want to save to cache," do
|
90
|
+
before { pad.load_from_api 'txt', false }
|
91
|
+
it { expect(pad.content).to eq "This\nis\nInformation!" }
|
92
|
+
end
|
93
|
+
end
|
94
|
+
end
|
39
95
|
end
|
40
96
|
|
41
97
|
end
|
@@ -0,0 +1,70 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
require 'spec_helper'
|
4
|
+
require 'hackpad/cli/padlist'
|
5
|
+
|
6
|
+
describe Hackpad::Cli::Padlist do
|
7
|
+
|
8
|
+
describe '.get_list' do
|
9
|
+
let(:output) { StringIO.new }
|
10
|
+
|
11
|
+
context 'when no refresh is asked and cache exists,' do
|
12
|
+
before { Hackpad::Cli::Store.stub(:exists?).and_return(true) }
|
13
|
+
before { Hackpad::Cli::Store.stub(:read_list).and_return(Array.new) }
|
14
|
+
it { expect(subject.get_list).to be_an(Array) }
|
15
|
+
end
|
16
|
+
|
17
|
+
context "when no refresh is asked and cache don't exist," do
|
18
|
+
let(:pad1) { OpenStruct.new(id: '123', title: 'title1') }
|
19
|
+
let(:pad2) { OpenStruct.new(id: '456', title: 'title2') }
|
20
|
+
before { Hackpad::Cli::Api.stub(:list).and_return(%w(123 456)) }
|
21
|
+
before { Hackpad::Cli::Store.stub(:exists?).and_return(false, false) }
|
22
|
+
before { Hackpad::Cli::Padlist.stub(:get_pad).and_return(pad1, pad2) }
|
23
|
+
before { Hackpad::Cli::Store.stub(:save_list) }
|
24
|
+
it { expect(subject.get_list(false, output)).to be_an(Array) }
|
25
|
+
it { expect(subject.get_list(false, output).count).to be 2 }
|
26
|
+
it { expect(subject.get_list(false, output)[1].title).to eq 'title2' }
|
27
|
+
end
|
28
|
+
|
29
|
+
end
|
30
|
+
|
31
|
+
describe '.get_pad' do
|
32
|
+
context 'when no refresh is asked,' do
|
33
|
+
let(:pad1) { OpenStruct.new(id: '123', title: 'title1') }
|
34
|
+
let(:pad) { double Hackpad::Cli::Pad }
|
35
|
+
before { Hackpad::Cli::Pad.stub(:new).and_return pad }
|
36
|
+
before { pad.stub(:load) }
|
37
|
+
before { pad.stub(:title).and_return('title1') }
|
38
|
+
it { expect(subject.get_pad('123')).to eq pad1 }
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
describe '.check_list' do
|
43
|
+
before { Hackpad::Cli::Api.stub(:list).and_return(%w(123 456)) }
|
44
|
+
let(:pad) { double Hackpad::Cli::Pad }
|
45
|
+
before { Hackpad::Cli::Pad.stub(:new).and_return(pad, pad) }
|
46
|
+
|
47
|
+
context 'when there is no new pad,' do
|
48
|
+
before { pad.stub(:cached?).and_return(true, true) }
|
49
|
+
it { expect(subject.check_list).to eq [] }
|
50
|
+
end
|
51
|
+
|
52
|
+
context 'when there is no one new pad,' do
|
53
|
+
let(:pad2) { OpenStruct.new(id: '456', title: 'title2') }
|
54
|
+
before { pad.stub(:cached?).and_return(true, false) }
|
55
|
+
before { pad.stub(:load) }
|
56
|
+
before { pad.stub(:title).and_return('title2') }
|
57
|
+
it { expect(subject.check_list).to eq [pad2] }
|
58
|
+
end
|
59
|
+
|
60
|
+
context 'when there is no 2 new pads,' do
|
61
|
+
let(:pad1) { OpenStruct.new(id: '123', title: 'title1') }
|
62
|
+
let(:pad2) { OpenStruct.new(id: '456', title: 'title2') }
|
63
|
+
before { pad.stub(:cached?).and_return(false, false) }
|
64
|
+
before { pad.stub(:load).and_return(nil, nil) }
|
65
|
+
before { pad.stub(:title).and_return('title1', 'title2') }
|
66
|
+
it { expect(subject.check_list).to eq [pad1, pad2] }
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
70
|
+
end
|
@@ -1,8 +1,8 @@
|
|
1
1
|
# encoding: utf-8
|
2
2
|
|
3
3
|
require 'spec_helper'
|
4
|
-
require
|
5
|
-
require
|
4
|
+
require 'hackpad/cli/runner'
|
5
|
+
require 'hackpad/cli/client'
|
6
6
|
|
7
7
|
describe Hackpad::Cli::Runner do
|
8
8
|
|
@@ -12,39 +12,67 @@ describe Hackpad::Cli::Runner do
|
|
12
12
|
Hackpad::Cli::Client.stub(:new, {}).and_return(Object)
|
13
13
|
end
|
14
14
|
|
15
|
-
it
|
15
|
+
it 'calls the stats method in client class' do
|
16
|
+
Object.stub(:stats)
|
17
|
+
cli.shell.mute do
|
18
|
+
cli.stats
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
it 'calls the search method in client class' do
|
16
23
|
Object.stub(:search)
|
17
24
|
cli.shell.mute do
|
18
|
-
cli.search
|
25
|
+
cli.search 'xxx'
|
19
26
|
end
|
20
27
|
end
|
21
28
|
|
22
|
-
it
|
29
|
+
it 'calls the list method in client class' do
|
23
30
|
Object.stub(:list)
|
24
31
|
cli.shell.mute do
|
25
32
|
cli.list
|
26
33
|
end
|
27
34
|
end
|
28
35
|
|
29
|
-
it
|
36
|
+
it 'calls the list method in client class' do
|
30
37
|
Object.stub(:list)
|
31
38
|
cli.shell.mute do
|
32
39
|
cli.list
|
33
40
|
end
|
34
41
|
end
|
35
42
|
|
36
|
-
it
|
43
|
+
it 'calls the check method in client class' do
|
44
|
+
Object.stub(:check)
|
45
|
+
cli.shell.mute do
|
46
|
+
cli.check
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
it 'calls the version method in client class' do
|
51
|
+
STDOUT.stub(:puts).with(Hackpad::Cli::VERSION)
|
52
|
+
cli.shell.mute do
|
53
|
+
cli.version
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
it 'calls the info method in client class' do
|
37
58
|
Object.stub(:info)
|
38
59
|
cli.shell.mute do
|
39
60
|
cli.info 'pad'
|
40
61
|
end
|
41
62
|
end
|
42
63
|
|
43
|
-
it
|
64
|
+
it 'calls the show method in client class' do
|
44
65
|
Object.stub(:show)
|
45
66
|
cli.shell.mute do
|
46
67
|
cli.show 'pad', 'md'
|
47
68
|
end
|
48
69
|
end
|
49
70
|
|
71
|
+
it 'calls the colors method in client class' do
|
72
|
+
String.stub(:color_matrix).with(' xoxo ')
|
73
|
+
cli.shell.mute do
|
74
|
+
cli.colors
|
75
|
+
end
|
76
|
+
end
|
77
|
+
|
50
78
|
end
|
@@ -1,7 +1,8 @@
|
|
1
1
|
# encoding: utf-8
|
2
2
|
|
3
3
|
require 'spec_helper'
|
4
|
-
require
|
4
|
+
require 'hackpad/cli/store'
|
5
|
+
require 'hackpad/cli/pad'
|
5
6
|
|
6
7
|
describe Hackpad::Cli::Store do
|
7
8
|
|
@@ -12,36 +13,36 @@ describe Hackpad::Cli::Store do
|
|
12
13
|
subject.prepare options
|
13
14
|
end
|
14
15
|
|
15
|
-
describe
|
16
|
+
describe '.read_list' do
|
16
17
|
before { File.stub(:read).and_return("gy23ui first one\ngy3u4 second one\n23489g [some time] third") }
|
17
18
|
let(:list) { subject.read_list }
|
18
19
|
it { expect(list).to be_an Array }
|
19
20
|
it { expect(list[0]).to be_an OpenStruct }
|
20
|
-
it { expect(list[0].id).to eq
|
21
|
-
it { expect(list[0].title).to eq
|
22
|
-
it { expect(list[2].id).to eq
|
23
|
-
it { expect(list[2].title).to eq
|
24
|
-
it { expect(list[2].cached_at).to eq
|
21
|
+
it { expect(list[0].id).to eq 'gy23ui' }
|
22
|
+
it { expect(list[0].title).to eq 'first one' }
|
23
|
+
it { expect(list[2].id).to eq '23489g' }
|
24
|
+
it { expect(list[2].title).to eq 'third' }
|
25
|
+
it { expect(list[2].cached_at).to eq 'some time' }
|
25
26
|
end
|
26
27
|
|
27
|
-
describe
|
28
|
+
describe '.exists?' do
|
28
29
|
|
29
|
-
context
|
30
|
+
context 'when refresh option is set,' do
|
30
31
|
let(:options) { { configdir: configdir, workspace: 'default', refresh: true } }
|
31
|
-
before
|
32
|
+
before do
|
32
33
|
subject.prepare options
|
33
34
|
FileUtils.touch File.join(configdir, 'default', 'pads', 'txt', 'xxx')
|
34
|
-
|
35
|
+
end
|
35
36
|
after { FileUtils.rm File.join(configdir, 'default', 'pads', 'txt', 'xxx') }
|
36
37
|
it { expect(subject.exists? 'txt', 'xxx').to be false }
|
37
38
|
end
|
38
39
|
|
39
|
-
context
|
40
|
+
context 'when refresh option is not set,' do
|
40
41
|
context "when config file don't exist," do
|
41
42
|
it { expect(subject.exists? 'txt', 'xxx').to be false }
|
42
43
|
end
|
43
44
|
|
44
|
-
context
|
45
|
+
context 'when configfile exists,' do
|
45
46
|
before { FileUtils.touch File.join(configdir, 'default', 'pads', 'txt', 'xxx') }
|
46
47
|
after { FileUtils.rm File.join(configdir, 'default', 'pads', 'txt', 'xxx') }
|
47
48
|
it { expect(subject.exists? 'txt', 'xxx').to be true }
|
@@ -50,4 +51,84 @@ describe Hackpad::Cli::Store do
|
|
50
51
|
|
51
52
|
end
|
52
53
|
|
54
|
+
describe '.save' do
|
55
|
+
let(:padfile) { File.join(configdir, 'default', 'pads', 'txt', 'xxx') }
|
56
|
+
let(:content) { "This is content\n" }
|
57
|
+
before { subject.prepare options }
|
58
|
+
let(:pad) { double Hackpad::Cli::Pad }
|
59
|
+
before { pad.stub(:id).and_return 'xxx' }
|
60
|
+
before { pad.stub(:content).and_return content }
|
61
|
+
after { FileUtils.rm padfile }
|
62
|
+
it do
|
63
|
+
subject.save pad, 'txt'
|
64
|
+
expect(File.read(padfile)).to eq content
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
68
|
+
describe '.save_options' do
|
69
|
+
let(:padfile) { File.join(configdir, 'default', 'pads', 'meta', 'xxx') }
|
70
|
+
let(:content) { { thing: '123', other: 'option' } }
|
71
|
+
before { subject.prepare options }
|
72
|
+
after { FileUtils.rm padfile }
|
73
|
+
it do
|
74
|
+
subject.save_options 'xxx', content
|
75
|
+
expect(File.read(padfile)).to eq "{\n \"thing\": \"123\",\n \"other\": \"option\"\n}\n"
|
76
|
+
end
|
77
|
+
end
|
78
|
+
|
79
|
+
describe '.save_list' do
|
80
|
+
let(:padfile) { File.join(configdir, 'default', 'pads', 'padlist') }
|
81
|
+
let(:pads) { [OpenStruct.new(id: '123', cached_at: 'some time', title: 'title1')] }
|
82
|
+
before { subject.prepare options }
|
83
|
+
after { FileUtils.rm padfile }
|
84
|
+
it do
|
85
|
+
subject.save_list pads
|
86
|
+
expect(File.read(padfile)).to eq "123 [some time] title1\n"
|
87
|
+
end
|
88
|
+
end
|
89
|
+
|
90
|
+
describe '.read' do
|
91
|
+
let(:padfile) { File.join(configdir, 'default', 'pads', 'txt', 'xxx') }
|
92
|
+
let(:content) { "This is content\n" }
|
93
|
+
before { subject.prepare options }
|
94
|
+
let(:pad) { double Hackpad::Cli::Pad }
|
95
|
+
before { pad.stub(:id).and_return 'xxx' }
|
96
|
+
before { pad.stub(:content).and_return content }
|
97
|
+
before { subject.save pad, 'txt' }
|
98
|
+
after { FileUtils.rm padfile }
|
99
|
+
|
100
|
+
it { expect(subject.read 'xxx', 'txt').to eq content }
|
101
|
+
end
|
102
|
+
|
103
|
+
describe '.read_option' do
|
104
|
+
let(:padfile) { File.join(configdir, 'default', 'pads', 'meta', 'xxx') }
|
105
|
+
let(:content) { { 'thing' => '123', 'other' => 'option' } }
|
106
|
+
before { subject.prepare options }
|
107
|
+
before { subject.save_options 'xxx', content }
|
108
|
+
after { FileUtils.rm padfile }
|
109
|
+
it { expect(subject.read_options 'xxx').to eq content }
|
110
|
+
end
|
111
|
+
|
112
|
+
describe '.count_pads' do
|
113
|
+
let(:padfile) { File.join(configdir, 'default', 'pads', 'meta', 'xxx') }
|
114
|
+
let(:content) { { 'thing' => '123', 'other' => 'option' } }
|
115
|
+
before { subject.prepare options }
|
116
|
+
before { subject.save_options 'xxx', content }
|
117
|
+
after { FileUtils.rm padfile }
|
118
|
+
it { expect(subject.count_pads).to be 1 }
|
119
|
+
end
|
120
|
+
|
121
|
+
describe '.last_refresh' do
|
122
|
+
let(:timestamp) { Time.new(2012, 10, 31) }
|
123
|
+
let(:padlist) { File.join(configdir, 'default', 'pads', 'padlist') }
|
124
|
+
let(:pads) { [OpenStruct.new(id: '123', cached_at: 'some time', title: 'title1')] }
|
125
|
+
before { subject.prepare options }
|
126
|
+
before do
|
127
|
+
subject.save_list pads
|
128
|
+
FileUtils.touch padlist, mtime: timestamp
|
129
|
+
end
|
130
|
+
after { FileUtils.rm padlist }
|
131
|
+
it { expect(subject.last_refresh).to eq timestamp }
|
132
|
+
end
|
133
|
+
|
53
134
|
end
|