ppl 4.0.1 → 4.0.2
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/.github/workflows/build.yml +1 -0
- data/features/step_definitions/ppl_steps.rb +3 -3
- data/ppl.gemspec +1 -1
- data/spec/ppl/adapter/color/colored_spec.rb +3 -3
- data/spec/ppl/adapter/email_scraper/mail_spec.rb +13 -13
- data/spec/ppl/adapter/output_spec.rb +7 -7
- data/spec/ppl/adapter/storage/disk_spec.rb +18 -18
- data/spec/ppl/adapter/storage/factory_spec.rb +3 -3
- data/spec/ppl/adapter/storage/git_spec.rb +31 -31
- data/spec/ppl/adapter/storage_spec.rb +3 -3
- data/spec/ppl/adapter/vcard/greencard_spec.rb +45 -45
- data/spec/ppl/application/bootstrap_spec.rb +128 -128
- data/spec/ppl/application/command_spec.rb +8 -8
- data/spec/ppl/application/command_suite_spec.rb +7 -7
- data/spec/ppl/application/configuration_spec.rb +16 -16
- data/spec/ppl/application/input_spec.rb +2 -2
- data/spec/ppl/application/router_spec.rb +8 -8
- data/spec/ppl/application/shell_spec.rb +39 -39
- data/spec/ppl/command/add_spec.rb +6 -6
- data/spec/ppl/command/age_spec.rb +7 -7
- data/spec/ppl/command/attribute_spec.rb +22 -22
- data/spec/ppl/command/bday_spec.rb +11 -11
- data/spec/ppl/command/completion_spec.rb +7 -7
- data/spec/ppl/command/email_spec.rb +19 -19
- data/spec/ppl/command/external_spec.rb +7 -7
- data/spec/ppl/command/help_spec.rb +15 -15
- data/spec/ppl/command/init_spec.rb +5 -5
- data/spec/ppl/command/ls_spec.rb +12 -12
- data/spec/ppl/command/mutt_spec.rb +33 -33
- data/spec/ppl/command/mv_spec.rb +11 -11
- data/spec/ppl/command/name_spec.rb +17 -17
- data/spec/ppl/command/nick_spec.rb +1 -1
- data/spec/ppl/command/org_spec.rb +1 -1
- data/spec/ppl/command/phone_spec.rb +15 -15
- data/spec/ppl/command/post_spec.rb +29 -29
- data/spec/ppl/command/rm_spec.rb +3 -3
- data/spec/ppl/command/scrape_spec.rb +24 -24
- data/spec/ppl/command/shell_spec.rb +41 -41
- data/spec/ppl/command/show_spec.rb +4 -4
- data/spec/ppl/command/url_spec.rb +1 -1
- data/spec/ppl/command/version_spec.rb +4 -4
- data/spec/ppl/entity/address_book_spec.rb +1 -1
- data/spec/ppl/entity/contact_spec.rb +16 -16
- data/spec/ppl/entity/email_address_spec.rb +3 -3
- data/spec/ppl/entity/name_spec.rb +1 -1
- data/spec/ppl/entity/phone_number_spec.rb +5 -5
- data/spec/ppl/entity/postal_address_spec.rb +2 -2
- data/spec/ppl/format/address_book/ages_spec.rb +3 -3
- data/spec/ppl/format/address_book/birthdays_spec.rb +3 -3
- data/spec/ppl/format/address_book/email_addresses_spec.rb +3 -3
- data/spec/ppl/format/address_book/mutt_query_spec.rb +3 -3
- data/spec/ppl/format/address_book/names_spec.rb +3 -3
- data/spec/ppl/format/address_book/nicknames_spec.rb +4 -4
- data/spec/ppl/format/address_book/one_line_spec.rb +5 -5
- data/spec/ppl/format/address_book/organizations_spec.rb +3 -3
- data/spec/ppl/format/address_book/phone_numbers_spec.rb +3 -3
- data/spec/ppl/format/address_book/postal_addresses_spec.rb +2 -2
- data/spec/ppl/format/address_book/urls_spec.rb +3 -3
- data/spec/ppl/format/contact/age_spec.rb +8 -8
- data/spec/ppl/format/contact/birthday_spec.rb +4 -4
- data/spec/ppl/format/contact/email_addresses_spec.rb +3 -3
- data/spec/ppl/format/contact/full_spec.rb +11 -11
- data/spec/ppl/format/contact/nicknames_spec.rb +4 -4
- data/spec/ppl/format/contact/organization_spec.rb +4 -4
- data/spec/ppl/format/contact/phone_number_spec.rb +4 -4
- data/spec/ppl/format/contact/postal_address_spec.rb +1 -1
- data/spec/ppl/format/contact/postal_addresses_spec.rb +3 -3
- data/spec/ppl/format/contact/urls_spec.rb +4 -4
- data/spec/ppl/format/custom/contact_spec.rb +13 -13
- data/spec/ppl/format/custom/email_address_spec.rb +3 -3
- data/spec/ppl/format/custom/phone_number_spec.rb +4 -4
- data/spec/ppl/format/custom_spec.rb +6 -6
- data/spec/ppl/format/name/full_only_spec.rb +4 -4
- data/spec/ppl/format/postal_address/multi_line_spec.rb +10 -10
- data/spec/ppl/format/postal_address/one_line_spec.rb +9 -9
- data/spec/ppl/format/table_spec.rb +11 -11
- data/spec/ppl/service/email_address_spec.rb +13 -13
- data/spec/ppl/service/name_spec.rb +9 -9
- data/spec/ppl/service/phone_number_spec.rb +11 -11
- data/spec/ppl/service/postal_address_spec.rb +20 -20
- data/spec/spec_helper.rb +3 -0
- metadata +1 -1
@@ -14,7 +14,7 @@ describe Ppl::Application::Command do
|
|
14
14
|
it "should accept a storage adapter" do
|
15
15
|
storage = double(Ppl::Adapter::Storage)
|
16
16
|
@command.storage = storage
|
17
|
-
@command.storage.
|
17
|
+
expect(@command.storage).to be storage
|
18
18
|
end
|
19
19
|
end
|
20
20
|
|
@@ -30,7 +30,7 @@ describe Ppl::Application::Command do
|
|
30
30
|
add_property :some_property
|
31
31
|
some_property "a value"
|
32
32
|
end
|
33
|
-
TestCommand456.some_property.
|
33
|
+
expect(TestCommand456.some_property).to eq "a value"
|
34
34
|
end
|
35
35
|
|
36
36
|
it "should expose properties as instance variables too" do
|
@@ -39,7 +39,7 @@ describe Ppl::Application::Command do
|
|
39
39
|
some_property "a value"
|
40
40
|
end
|
41
41
|
instance = TestCommand789.new
|
42
|
-
instance.some_property.
|
42
|
+
expect(instance.some_property).to eq "a value"
|
43
43
|
end
|
44
44
|
|
45
45
|
it "should allow properties to be overwritten by instance variables" do
|
@@ -49,21 +49,21 @@ describe Ppl::Application::Command do
|
|
49
49
|
end
|
50
50
|
instance = TestCommand901.new
|
51
51
|
instance.some_property = "different"
|
52
|
-
instance.some_property.
|
52
|
+
expect(instance.some_property).to eq "different"
|
53
53
|
end
|
54
54
|
end
|
55
55
|
|
56
56
|
describe "#name=" do
|
57
57
|
it "should allow the name to be set as an instance variable" do
|
58
58
|
@command.name = "testing"
|
59
|
-
@command.name.
|
59
|
+
expect(@command.name).to eq "testing"
|
60
60
|
end
|
61
61
|
end
|
62
62
|
|
63
63
|
describe "#description=" do
|
64
64
|
it "should allow the description to be set as an instance variable" do
|
65
65
|
@command.description = "testing"
|
66
|
-
@command.description.
|
66
|
+
expect(@command.description).to eq "testing"
|
67
67
|
end
|
68
68
|
end
|
69
69
|
|
@@ -73,7 +73,7 @@ describe Ppl::Application::Command do
|
|
73
73
|
name "new_for_test"
|
74
74
|
end
|
75
75
|
command = TestCommand123.new
|
76
|
-
command.name.
|
76
|
+
expect(command.name).to eq "new_for_test"
|
77
77
|
end
|
78
78
|
end
|
79
79
|
|
@@ -83,7 +83,7 @@ describe Ppl::Application::Command do
|
|
83
83
|
description "desc_for_test"
|
84
84
|
end
|
85
85
|
command = TestCommand123.new
|
86
|
-
command.description.
|
86
|
+
expect(command.description).to eq "desc_for_test"
|
87
87
|
end
|
88
88
|
end
|
89
89
|
|
@@ -16,23 +16,23 @@ describe Ppl::Application::CommandSuite do
|
|
16
16
|
describe "#add_command" do
|
17
17
|
it "should accept a command" do
|
18
18
|
@command_suite.add_command(Ppl::Application::Command.new)
|
19
|
-
@command_suite.count.
|
19
|
+
expect(@command_suite.count).to be 3
|
20
20
|
end
|
21
21
|
end
|
22
22
|
|
23
23
|
describe "#find_command" do
|
24
24
|
it "should find a command matching the given name" do
|
25
|
-
@command_suite.find_command("foo").
|
25
|
+
expect(@command_suite.find_command("foo")).to be @foo_command
|
26
26
|
end
|
27
27
|
it "should return nil if no commands match the given name" do
|
28
|
-
@command_suite.find_command("baz").
|
28
|
+
expect(@command_suite.find_command("baz")).to be nil
|
29
29
|
end
|
30
30
|
end
|
31
31
|
|
32
32
|
describe "#each" do
|
33
33
|
it "should yield commands" do
|
34
|
-
@command_suite
|
35
|
-
.
|
34
|
+
expect(@command_suite)
|
35
|
+
.to receive(:each)
|
36
36
|
.and_yield(@foo_command)
|
37
37
|
.and_yield(@bar_command)
|
38
38
|
@command_suite.each do |c| end
|
@@ -42,8 +42,8 @@ describe Ppl::Application::CommandSuite do
|
|
42
42
|
describe "#sort_by_name" do
|
43
43
|
it "should sort the commands alphabetically by name" do
|
44
44
|
@command_suite.sort_by_name
|
45
|
-
@command_suite[0].name.
|
46
|
-
@command_suite[1].name.
|
45
|
+
expect(@command_suite[0].name).to eq "bar"
|
46
|
+
expect(@command_suite[1].name).to eq "foo"
|
47
47
|
end
|
48
48
|
end
|
49
49
|
|
@@ -11,44 +11,44 @@ describe Ppl::Application::Configuration do
|
|
11
11
|
|
12
12
|
describe "#address_book_path" do
|
13
13
|
it "should default to the current working directory" do
|
14
|
-
@config.address_book_path.
|
14
|
+
expect(@config.address_book_path).to eq Dir.pwd
|
15
15
|
end
|
16
16
|
it "should be configurable by the user's config file" do
|
17
|
-
@config.
|
17
|
+
allow(@config).to receive(:user_configuration) do
|
18
18
|
{"address book" => {"path" => "/contacts"}}
|
19
19
|
end
|
20
|
-
@config.address_book_path.
|
20
|
+
expect(@config.address_book_path).to eq "/contacts"
|
21
21
|
end
|
22
22
|
end
|
23
23
|
|
24
24
|
describe "#aliases" do
|
25
25
|
it "should return a hash" do
|
26
|
-
@config.aliases.
|
26
|
+
expect(@config.aliases).to be_a(Hash)
|
27
27
|
end
|
28
28
|
end
|
29
29
|
|
30
30
|
describe "#color_enabled" do
|
31
31
|
|
32
32
|
it "should return true if color is explicitly enabled" do
|
33
|
-
@config.
|
33
|
+
allow(@config).to receive(:user_configuration).and_return({
|
34
34
|
"color" => {
|
35
35
|
"cmd" => "true",
|
36
36
|
},
|
37
37
|
})
|
38
|
-
@config.color_enabled("cmd").
|
38
|
+
expect(@config.color_enabled("cmd")).to eq true
|
39
39
|
end
|
40
40
|
|
41
41
|
it "should return false if color is not explicitly enabled" do
|
42
|
-
@config.color_enabled("cmd").
|
42
|
+
expect(@config.color_enabled("cmd")).to eq false
|
43
43
|
end
|
44
44
|
|
45
45
|
it "should return false if color is explicitly disabled" do
|
46
|
-
@config.
|
46
|
+
allow(@config).to receive(:user_configuration).and_return({
|
47
47
|
"color" => {
|
48
48
|
"cmd" => "false",
|
49
49
|
},
|
50
50
|
})
|
51
|
-
@config.color_enabled("cmd").
|
51
|
+
expect(@config.color_enabled("cmd")).to eq false
|
52
52
|
end
|
53
53
|
|
54
54
|
end
|
@@ -56,8 +56,8 @@ describe Ppl::Application::Configuration do
|
|
56
56
|
describe "#command_colors" do
|
57
57
|
|
58
58
|
before(:each) do
|
59
|
-
@config.
|
60
|
-
@config.
|
59
|
+
allow(@config).to receive(:color_enabled).and_return(true)
|
60
|
+
allow(@config).to receive(:user_configuration).and_return({
|
61
61
|
"color \"ls\"" => {
|
62
62
|
"id" => "blue",
|
63
63
|
},
|
@@ -65,19 +65,19 @@ describe Ppl::Application::Configuration do
|
|
65
65
|
end
|
66
66
|
|
67
67
|
it "should return the colors configured for the given command" do
|
68
|
-
@config.command_colors("ls").
|
68
|
+
expect(@config.command_colors("ls")).to eq({
|
69
69
|
"id" => "blue",
|
70
70
|
})
|
71
71
|
end
|
72
72
|
|
73
73
|
it "should return an empty hash if colors aren't enabled for the command" do
|
74
|
-
@config.
|
75
|
-
@config.command_colors("ls").
|
74
|
+
allow(@config).to receive(:color_enabled).and_return(false)
|
75
|
+
expect(@config.command_colors("ls")).to eq({})
|
76
76
|
end
|
77
77
|
|
78
78
|
it "should return nil if no colors are configured for the given command" do
|
79
|
-
@config.
|
80
|
-
@config.command_colors("show").
|
79
|
+
allow(@config).to receive(:user_configuration).and_return({})
|
80
|
+
expect(@config.command_colors("show")).to eq(nil)
|
81
81
|
end
|
82
82
|
|
83
83
|
end
|
@@ -6,13 +6,13 @@ describe Ppl::Application::Input do
|
|
6
6
|
|
7
7
|
describe "#arguments" do
|
8
8
|
it "should be an array" do
|
9
|
-
@input.arguments.
|
9
|
+
expect(@input.arguments).to be_an(Array)
|
10
10
|
end
|
11
11
|
end
|
12
12
|
|
13
13
|
describe "#options" do
|
14
14
|
it "should be a hash" do
|
15
|
-
@input.options.
|
15
|
+
expect(@input.options).to be_a(Hash)
|
16
16
|
end
|
17
17
|
end
|
18
18
|
|
@@ -20,35 +20,35 @@ describe Ppl::Application::Router do
|
|
20
20
|
describe "#default=" do
|
21
21
|
it "should accept the name of the default command" do
|
22
22
|
@router.default = "one"
|
23
|
-
@router.default.
|
23
|
+
expect(@router.default).to eq "one"
|
24
24
|
end
|
25
25
|
end
|
26
26
|
|
27
27
|
describe "#route" do
|
28
28
|
|
29
29
|
it "should return the command whose name matches the given argument" do
|
30
|
-
@router.route("two").
|
30
|
+
expect(@router.route("two")).to be @cmd_two
|
31
31
|
end
|
32
32
|
|
33
33
|
it "should return nil if no matching command can be found" do
|
34
|
-
@router.route("three").
|
34
|
+
expect(@router.route("three")).to be nil
|
35
35
|
end
|
36
36
|
|
37
37
|
it "should fall back to the default command if the given one isn't found" do
|
38
38
|
@router.default = "one"
|
39
|
-
@router.route("three").
|
39
|
+
expect(@router.route("three")).to be @cmd_one
|
40
40
|
end
|
41
41
|
|
42
42
|
it "should apply the aliases if the argument doesn't match a command" do
|
43
43
|
@router.aliases = {"t" => "two"}
|
44
|
-
@router.route("t").
|
44
|
+
expect(@router.route("t")).to be @cmd_two
|
45
45
|
end
|
46
46
|
|
47
47
|
it "should return a Ppl::Command::External if the input matches a bang alias" do
|
48
|
-
@external.
|
49
|
-
@external.
|
48
|
+
expect(@external).to receive(:name=).with("t")
|
49
|
+
expect(@external).to receive(:command=).with("two")
|
50
50
|
@router.aliases = {"t" => "!two"}
|
51
|
-
@router.route("t").
|
51
|
+
expect(@router.route("t")).to be @external
|
52
52
|
end
|
53
53
|
|
54
54
|
end
|
@@ -15,94 +15,94 @@ describe Ppl::Application::Shell do
|
|
15
15
|
|
16
16
|
it "should return false if the given command isn't found" do
|
17
17
|
@input.arguments = ["foo"]
|
18
|
-
@router
|
19
|
-
.
|
18
|
+
expect(@router)
|
19
|
+
.to receive(:route)
|
20
20
|
.with("foo")
|
21
21
|
.and_return(nil)
|
22
|
-
@shell.run(@input, @output).
|
22
|
+
expect(@shell.run(@input, @output)).to eq false
|
23
23
|
end
|
24
24
|
|
25
25
|
it "should execute the given command" do
|
26
26
|
@input.arguments = ["foo"]
|
27
|
-
@router
|
28
|
-
.
|
27
|
+
expect(@router)
|
28
|
+
.to receive(:route)
|
29
29
|
.with("foo")
|
30
30
|
.and_return(@command)
|
31
31
|
|
32
|
-
@command.
|
33
|
-
@command
|
34
|
-
.
|
32
|
+
expect(@command).to receive(:options)
|
33
|
+
expect(@command)
|
34
|
+
.to receive(:execute)
|
35
35
|
.and_return(true)
|
36
36
|
|
37
|
-
@shell.run(@input, @output).
|
37
|
+
expect(@shell.run(@input, @output)).to eq true
|
38
38
|
end
|
39
39
|
|
40
40
|
it "should not pass the command name in the input to the command itself" do
|
41
41
|
@input.arguments = ["mv", "foo", "bar"]
|
42
|
-
@router
|
43
|
-
.
|
42
|
+
expect(@router)
|
43
|
+
.to receive(:route)
|
44
44
|
.with("mv")
|
45
45
|
.and_return(@command)
|
46
46
|
|
47
|
-
@command.
|
48
|
-
@command.
|
49
|
-
input.arguments.
|
47
|
+
expect(@command).to receive(:options)
|
48
|
+
expect(@command).to receive(:execute) do |input, output|
|
49
|
+
expect(input.arguments).to eq ["foo", "bar"]
|
50
50
|
end
|
51
51
|
@shell.run(@input, @output)
|
52
52
|
end
|
53
53
|
|
54
54
|
it "should return false if the command throws an exception" do
|
55
|
-
@command.
|
56
|
-
@command
|
57
|
-
.
|
55
|
+
expect(@command).to receive(:options)
|
56
|
+
expect(@command)
|
57
|
+
.to receive(:execute)
|
58
58
|
.and_raise(StandardError)
|
59
59
|
|
60
|
-
@router
|
61
|
-
.
|
60
|
+
expect(@router)
|
61
|
+
.to receive(:route)
|
62
62
|
.and_return(@command)
|
63
63
|
|
64
|
-
@output.
|
64
|
+
expect(@output).to receive(:error)
|
65
65
|
|
66
66
|
@shell.run(@input, @output)
|
67
67
|
end
|
68
68
|
|
69
69
|
it "should not do any option parsing for Ppl::Command::External instances" do
|
70
70
|
external = Ppl::Command::External.new("ls", "ls", "List directory contents")
|
71
|
-
external.
|
72
|
-
@shell.
|
73
|
-
external.
|
71
|
+
allow(external).to receive(:execute).and_return(true)
|
72
|
+
expect(@shell).to receive(:select_command).and_return(external)
|
73
|
+
expect(external).not_to receive(:options)
|
74
74
|
@shell.run(@input, @output)
|
75
75
|
end
|
76
76
|
|
77
77
|
it "should send exception messages to stderr" do
|
78
|
-
@command.
|
79
|
-
@command.
|
80
|
-
@router.
|
81
|
-
@output.
|
78
|
+
expect(@command).to receive(:options)
|
79
|
+
expect(@command).to receive(:execute) { raise "Pool's Closed" }
|
80
|
+
expect(@router).to receive(:route).and_return(@command)
|
81
|
+
expect(@output).to receive(:error).with("ppl: Pool's Closed")
|
82
82
|
@shell.run(@input, @output)
|
83
83
|
end
|
84
84
|
|
85
85
|
it "should handle ContactNotFound errors nicely" do
|
86
|
-
@command.
|
87
|
-
@command.
|
88
|
-
@router.
|
89
|
-
@output.
|
86
|
+
allow(@command).to receive(:options)
|
87
|
+
expect(@command).to receive(:execute) { raise Ppl::Error::ContactNotFound, "example" }
|
88
|
+
expect(@router).to receive(:route).and_return(@command)
|
89
|
+
expect(@output).to receive(:error).with("ppl: Contact 'example' not found")
|
90
90
|
@shell.run(@input, @output)
|
91
91
|
end
|
92
92
|
|
93
93
|
it "should handle CompletionNotFound errors nicely" do
|
94
|
-
@command.
|
95
|
-
@command.
|
96
|
-
@router.
|
97
|
-
@output.
|
94
|
+
allow(@command).to receive(:options)
|
95
|
+
expect(@command).to receive(:execute) { raise Ppl::Error::CompletionNotFound, "example" }
|
96
|
+
expect(@router).to receive(:route).and_return(@command)
|
97
|
+
expect(@output).to receive(:error).with("ppl: No completion function available for 'example'")
|
98
98
|
@shell.run(@input, @output)
|
99
99
|
end
|
100
100
|
|
101
101
|
it "should handle PostalAddressNotFound errors nicely" do
|
102
|
-
@command.
|
103
|
-
@command.
|
104
|
-
@router.
|
105
|
-
@output.
|
102
|
+
allow(@command).to receive(:options)
|
103
|
+
expect(@command).to receive(:execute) { raise Ppl::Error::PostalAddressNotFound, "example" }
|
104
|
+
expect(@router).to receive(:route).and_return(@command)
|
105
|
+
expect(@output).to receive(:error).with("ppl: Postal address 'example' not found")
|
106
106
|
@shell.run(@input, @output)
|
107
107
|
end
|
108
108
|
|
@@ -12,7 +12,7 @@ describe Ppl::Command::Add do
|
|
12
12
|
|
13
13
|
describe "#name" do
|
14
14
|
it "should be 'add'" do
|
15
|
-
@command.name.
|
15
|
+
expect(@command.name).to eq "add"
|
16
16
|
end
|
17
17
|
end
|
18
18
|
|
@@ -28,12 +28,12 @@ describe Ppl::Command::Add do
|
|
28
28
|
end
|
29
29
|
|
30
30
|
it "should save a new contact" do
|
31
|
-
@storage.
|
32
|
-
contact.id.
|
33
|
-
contact.name.
|
31
|
+
expect(@storage).to receive(:save_contact) do |contact|
|
32
|
+
expect(contact.id).to eq "john"
|
33
|
+
expect(contact.name).to be_a(Ppl::Entity::Name)
|
34
34
|
end
|
35
|
-
@name_service
|
36
|
-
.
|
35
|
+
expect(@name_service)
|
36
|
+
.to receive(:parse)
|
37
37
|
.with("John Doe")
|
38
38
|
.and_return(Ppl::Entity::Name.new)
|
39
39
|
@input.arguments = ["john", "John Doe"]
|
@@ -15,24 +15,24 @@ describe Ppl::Command::Age do
|
|
15
15
|
|
16
16
|
describe "#name" do
|
17
17
|
it "should be 'age'" do
|
18
|
-
@command.name.
|
18
|
+
expect(@command.name).to eq "age"
|
19
19
|
end
|
20
20
|
end
|
21
21
|
|
22
22
|
describe "#execute" do
|
23
23
|
|
24
24
|
it "should list contacts' ages if no arguments are given" do
|
25
|
-
@storage.
|
26
|
-
@list_format.
|
27
|
-
@output.
|
25
|
+
expect(@storage).to receive(:load_address_book)
|
26
|
+
expect(@list_format).to receive(:process)
|
27
|
+
expect(@output).to receive(:line)
|
28
28
|
@command.execute(@input, @output)
|
29
29
|
end
|
30
30
|
|
31
31
|
it "should show a single contact's ages if one is specified" do
|
32
32
|
@input.arguments = ["jdoe"]
|
33
|
-
@storage.
|
34
|
-
@show_format.
|
35
|
-
@output.
|
33
|
+
expect(@storage).to receive(:require_contact)
|
34
|
+
expect(@show_format).to receive(:process)
|
35
|
+
expect(@output).to receive(:line)
|
36
36
|
@command.execute(@input, @output)
|
37
37
|
end
|
38
38
|
|