spec/lib/hackpad/cli/client_spec.rb in hackpad-cli-0.0.7 vs spec/lib/hackpad/cli/client_spec.rb in hackpad-cli-0.1.0
- old
+ new
@@ -1,122 +1,219 @@
# encoding: utf-8
require 'spec_helper'
-require "hackpad/cli/client"
+require 'hackpad/cli/client'
describe Hackpad::Cli::Client do
let(:configdir) { File.expand_path('../../../../files', __FILE__) }
let(:options) { { configdir: configdir, workspace: 'default' } }
+ let(:format) { "%-20s %s\n" }
- describe ".new" do
+ describe '.new' do
before { Hackpad::Cli::Api.stub(:prepare) }
before { Hackpad::Cli::Store.stub(:prepare) }
before { Hackpad::Cli::Config.stub(:load) }
- context "when default options are passed," do
+ context 'when default options are passed,' do
let(:client) { Hackpad::Cli::Client.new options }
it { expect(client).to be_a Hackpad::Cli::Client }
- context "when colorization is expected," do
- it { expect("x".blue).to eq "\e[0;34;49mx\e[0m" }
+ context 'when colorization is expected,' do
+ it { expect('x'.blue).to eq "\e[0;34;49mx\e[0m" }
end
end
- context "when plain text is required," do
- context "when colorization is not expected," do
- before { Hackpad::Cli::Client.new options.merge({plain: true}) }
- after { load "colorize.rb" }
- it { expect("x".blue).to eq "x" }
+ context 'when plain text is required,' do
+ context 'when colorization is not expected,' do
+ before { Hackpad::Cli::Client.new options.merge(plain: true) }
+ after { load 'colorize.rb' }
+ it { expect('x'.blue).to eq 'x' }
end
end
end
- describe ".search" do
+ describe '.stats' do
+ let(:timestamp) { Time.new(2013, 10, 2) }
+ before { Hackpad::Cli::Store.stub(:prepare) }
+ before { Hackpad::Cli::Config.stub(:load).and_return('site' => 'http://test.dev') }
+ before { Hackpad::Cli::Store.stub(:count_pads).and_return(12) }
+ before { Hackpad::Cli::Store.stub(:last_refresh).and_return(timestamp) }
+ let(:client) { Hackpad::Cli::Client.new options }
+ it do
+ expect(STDOUT).to receive(:printf).with(format, 'Site', "\e[0;34;49mhttp://test.dev\e[0m")
+ expect(STDOUT).to receive(:printf).with(format, 'Cached Pads', 12)
+ expect(STDOUT).to receive(:printf).with(format, 'Last Refresh', timestamp)
+ client.stats
+ end
+ end
+
+ describe '.search' do
before { Hackpad::Cli::Api.stub(:prepare) }
before { Hackpad::Cli::Store.stub(:prepare) }
- before { Hackpad::Cli::Config.stub(:load).and_return({'site' => 'http://test.dev'}) }
- before {
- Hackpad::Cli::Api.stub(:search).with("xxx",0).and_return(
- [ {
- "title" => "xtitle",
- "id" => "xxxxxx",
- "snippet" => "context <b class=\"hit\">x</b> context"
- } ]
- )
- }
- context "when default options are used," do
+ before { Hackpad::Cli::Config.stub(:load).and_return('site' => 'http://test.dev') }
+ before do
+ Hackpad::Cli::Api.stub(:search)
+ .with('xxx', 0)
+ .and_return(
+ [{
+ 'title' => 'xtitle',
+ 'id' => 'xxxxxx',
+ 'snippet' => 'context <b class="hit">x</b> context'
+ }]
+ )
+ end
+ context 'when default options are used,' do
let(:client) { Hackpad::Cli::Client.new options }
- it {
+ it do
expect(STDOUT).to receive(:puts).with("\e[1;39;49mxxxxxx\e[0m - \e[0;33;49mxtitle\e[0m")
expect(STDOUT).to receive(:puts).with(" context \e[1;36;49mx\e[0m context")
- client.search "xxx"
- }
+ client.search 'xxx'
+ end
end
- context "when options sets urls to true," do
- let(:client) { Hackpad::Cli::Client.new options.merge({urls: true}) }
- it {
+ context 'when options sets urls to true,' do
+ let(:client) { Hackpad::Cli::Client.new options.merge(urls: true) }
+ it do
expect(STDOUT).to receive(:puts).with("http://test.dev/\e[1;39;49mxxxxxx\e[0m - \e[0;33;49mxtitle\e[0m")
expect(STDOUT).to receive(:puts).with(" context \e[1;36;49mx\e[0m context")
- client.search "xxx"
- }
+ client.search 'xxx'
+ end
end
end
- describe ".list" do
+ describe '.list' do
before { Hackpad::Cli::Api.stub(:prepare) }
before { Hackpad::Cli::Store.stub(:prepare) }
- before { Hackpad::Cli::Config.stub(:load).and_return({'site' => 'http://test.dev'}) }
- before { Hackpad::Cli::Padlist.stub(:get_list).and_return( [ OpenStruct.new( id: 'xxxxxx', title: 'xtitle' ) ] ) }
- context "when default options are used," do
+ before { Hackpad::Cli::Config.stub(:load).and_return('site' => 'http://test.dev') }
+ before do
+ Hackpad::Cli::Padlist.stub(:get_list)
+ .and_return([OpenStruct.new(id: 'xxxxxx', title: 'xtitle')])
+ end
+ context 'when default options are used,' do
let(:client) { Hackpad::Cli::Client.new options }
- it {
- expect(STDOUT).to receive(:puts).with(["xxxxxx - xtitle"])
+ it do
+ expect(STDOUT).to receive(:puts).with(['xxxxxx - xtitle'])
client.list
- }
+ end
end
- context "when options sets urls to true," do
- let(:client) { Hackpad::Cli::Client.new options.merge({urls: true}) }
- it {
- expect(STDOUT).to receive(:puts).with(["http://test.dev/xxxxxx - xtitle"])
+ context 'when options sets urls to true,' do
+ let(:client) { Hackpad::Cli::Client.new options.merge(urls: true) }
+ it do
+ expect(STDOUT).to receive(:puts).with(['http://test.dev/xxxxxx - xtitle'])
client.list
- }
+ end
end
end
- describe ".check" do
+ describe '.check' do
before { Hackpad::Cli::Api.stub(:prepare) }
before { Hackpad::Cli::Store.stub(:prepare) }
- before { Hackpad::Cli::Config.stub(:load).and_return({'site' => 'http://test.dev'}) }
- before { Hackpad::Cli::Padlist.stub(:check_list).and_return( [ OpenStruct.new( id: 'xxxxxx', title: 'xtitle' ) ] ) }
- context "when default options are used," do
+ before { Hackpad::Cli::Config.stub(:load).and_return('site' => 'http://test.dev') }
+
+ context 'when there is a new pad,' do
+ before do
+ Hackpad::Cli::Padlist.stub(:check_list)
+ .and_return([OpenStruct.new(id: 'xxxxxx', title: 'xtitle')])
+ end
+ context 'when default options are used,' do
+ let(:client) { Hackpad::Cli::Client.new options }
+ it do
+ expect(STDOUT).to receive(:puts).with('New pads:')
+ expect(STDOUT).to receive(:puts).with(['xxxxxx - xtitle'])
+ client.check
+ end
+ end
+ context 'when options sets urls to true,' do
+ let(:client) { Hackpad::Cli::Client.new options.merge(urls: true) }
+ it do
+ expect(STDOUT).to receive(:puts).with('New pads:')
+ expect(STDOUT).to receive(:puts).with(['http://test.dev/xxxxxx - xtitle'])
+ client.check
+ end
+ end
+ end
+ context 'when there is no new pad,' do
+ before { Hackpad::Cli::Padlist.stub(:check_list).and_return([]) }
let(:client) { Hackpad::Cli::Client.new options }
- it {
- expect(STDOUT).to receive(:puts).with("New pads:")
- expect(STDOUT).to receive(:puts).with(["xxxxxx - xtitle"])
+ it do
+ expect(STDOUT).to receive(:puts).with('New pads:')
+ expect(STDOUT).to receive(:puts).with('There is no new pad.')
client.check
- }
+ end
end
- context "when options sets urls to true," do
- let(:client) { Hackpad::Cli::Client.new options.merge({urls: true}) }
- it {
- expect(STDOUT).to receive(:puts).with("New pads:")
- expect(STDOUT).to receive(:puts).with(["http://test.dev/xxxxxx - xtitle"])
- client.check
- }
- end
end
- describe ".info" do
+ describe '.info' do
before { Hackpad::Cli::Api.stub(:prepare) }
before { Hackpad::Cli::Store.stub(:prepare) }
- before { Hackpad::Cli::Config.stub(:load).and_return({'site' => 'http://test.dev'}) }
- context "when unknown id is given" do
- pending "todo"
+ before { Hackpad::Cli::Config.stub(:load).and_return('site' => 'http://test.dev') }
+ let(:client) { Hackpad::Cli::Client.new options }
+ let(:pad) { double Hackpad::Cli::Pad }
+ before { Hackpad::Cli::Pad.stub(:new).with('123').and_return pad }
+
+ context 'when unknown id is given,' do
+ before { pad.stub(:load).and_raise Hackpad::Cli::UndefinedPad }
+ it { expect { client.info('123') }.to raise_error(Hackpad::Cli::UndefinedPad) }
end
- context "when id is an existing pad" do
+ context 'when id is an existing pad,' do
+ before { pad.stub(:load) }
+ before { pad.stub(:title).and_return('title1') }
+ before { pad.stub(:chars).and_return(20) }
+ before { pad.stub(:lines).and_return(2) }
+ before { pad.stub(:guest_policy).and_return('open') }
+ before { pad.stub(:moderated).and_return('false') }
+ before { pad.stub(:cached_at).and_return }
+ it do
+ expect(STDOUT).to receive(:printf).with(format, 'Id', "\e[1;39;49m123\e[0m")
+ expect(STDOUT).to receive(:printf).with(format, 'Title', "\e[0;33;49mtitle1\e[0m")
+ expect(STDOUT).to receive(:printf).with(format, 'URI', 'http://test.dev/123')
+ expect(STDOUT).to receive(:printf).with(format, 'Chars', '20')
+ expect(STDOUT).to receive(:printf).with(format, 'Lines', '2')
+ expect(STDOUT).to receive(:printf).with(format, 'Guest Policy', 'open')
+ expect(STDOUT).to receive(:printf).with(format, 'Moderated', 'false')
+ expect(STDOUT).to receive(:printf).with(format, 'Cached', 'unknown')
+ client.info '123'
+ end
end
+
end
- pending "Hackpad::Cli::Client.info"
- pending "Hackpad::Cli::Client.show"
+ describe '.show' do
+ before { Hackpad::Cli::Api.stub(:prepare) }
+ before { Hackpad::Cli::Store.stub(:prepare) }
+ before { Hackpad::Cli::Config.stub(:load).and_return('site' => 'http://test.dev') }
+ let(:client) { Hackpad::Cli::Client.new options }
+ let(:pad) { double Hackpad::Cli::Pad }
+ before { Hackpad::Cli::Pad.stub(:new).with('123').and_return pad }
+ before { pad.stub(:load) }
+
+ context 'when a txt version is asked,' do
+ before { pad.stub(:content).and_return('this is content') }
+ it do
+ expect(STDOUT).to receive(:puts).with('this is content')
+ client.show '123', 'txt'
+ end
+ end
+
+ context 'when a html version is asked,' do
+ before { pad.stub(:content).and_return('<ul><li>this is content</li></ul>') }
+ it do
+ expect(STDOUT).to receive(:puts).with('<ul><li>this is content</li></ul>')
+ client.show '123', 'html'
+ end
+ end
+
+ context 'when a markdown version is asked,' do
+ before { pad.stub(:content).and_return('<ul><li>this is content</li></ul>') }
+ before do
+ ReverseMarkdown.stub(:convert)
+ .with('<ul><li>this is content</li></ul>', github_flavored: true)
+ .and_return('- this is content')
+ end
+ it do
+ expect(STDOUT).to receive(:puts).with('- this is content')
+ client.show '123', 'md'
+ end
+ end
+
+ end
end