simple_deploy 0.7.2 → 0.7.3

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.
Files changed (89) hide show
  1. data/.gitignore +3 -0
  2. data/CHANGELOG.md +6 -0
  3. data/lib/simple_deploy/aws/cloud_formation/error.rb +32 -0
  4. data/lib/simple_deploy/aws/cloud_formation.rb +76 -0
  5. data/lib/simple_deploy/aws/instance_reader.rb +59 -0
  6. data/lib/simple_deploy/aws/simpledb.rb +52 -0
  7. data/lib/simple_deploy/aws.rb +4 -0
  8. data/lib/simple_deploy/cli/attributes.rb +7 -18
  9. data/lib/simple_deploy/cli/clone.rb +9 -19
  10. data/lib/simple_deploy/cli/create.rb +5 -14
  11. data/lib/simple_deploy/cli/deploy.rb +8 -11
  12. data/lib/simple_deploy/cli/destroy.rb +4 -10
  13. data/lib/simple_deploy/cli/environments.rb +1 -1
  14. data/lib/simple_deploy/cli/events.rb +5 -11
  15. data/lib/simple_deploy/cli/execute.rb +6 -9
  16. data/lib/simple_deploy/cli/instances.rb +4 -9
  17. data/lib/simple_deploy/cli/list.rb +5 -10
  18. data/lib/simple_deploy/cli/outputs.rb +5 -11
  19. data/lib/simple_deploy/cli/parameters.rb +5 -11
  20. data/lib/simple_deploy/cli/protect.rb +5 -10
  21. data/lib/simple_deploy/cli/resources.rb +5 -11
  22. data/lib/simple_deploy/cli/shared.rb +6 -6
  23. data/lib/simple_deploy/cli/status.rb +5 -11
  24. data/lib/simple_deploy/cli/template.rb +8 -13
  25. data/lib/simple_deploy/cli/update.rb +6 -10
  26. data/lib/simple_deploy/configuration.rb +102 -0
  27. data/lib/simple_deploy/entry.rb +71 -0
  28. data/lib/simple_deploy/entry_lister.rb +30 -0
  29. data/lib/simple_deploy/exceptions.rb +8 -0
  30. data/lib/simple_deploy/misc/attribute_merger.rb +2 -5
  31. data/lib/simple_deploy/notifier/campfire.rb +15 -12
  32. data/lib/simple_deploy/notifier.rb +6 -11
  33. data/lib/simple_deploy/stack/deployment/status.rb +5 -3
  34. data/lib/simple_deploy/stack/deployment.rb +8 -10
  35. data/lib/simple_deploy/stack/execute.rb +2 -3
  36. data/lib/simple_deploy/stack/output_mapper.rb +1 -4
  37. data/lib/simple_deploy/stack/ssh.rb +4 -4
  38. data/lib/simple_deploy/stack/{stack_attribute_formater.rb → stack_attribute_formatter.rb} +4 -6
  39. data/lib/simple_deploy/stack/stack_creator.rb +46 -0
  40. data/lib/simple_deploy/stack/stack_destroyer.rb +19 -0
  41. data/lib/simple_deploy/stack/stack_formatter.rb +25 -0
  42. data/lib/simple_deploy/stack/stack_lister.rb +18 -0
  43. data/lib/simple_deploy/stack/stack_reader.rb +56 -0
  44. data/lib/simple_deploy/stack/stack_updater.rb +67 -0
  45. data/lib/simple_deploy/stack/status.rb +53 -0
  46. data/lib/simple_deploy/stack.rb +89 -37
  47. data/lib/simple_deploy/version.rb +1 -1
  48. data/lib/simple_deploy.rb +31 -1
  49. data/simple_deploy.gemspec +6 -3
  50. data/spec/aws/cloud_formation/error_spec.rb +50 -0
  51. data/spec/aws/cloud_formation_spec.rb +207 -0
  52. data/spec/aws/instance_reader_spec.rb +96 -0
  53. data/spec/aws/simpledb_spec.rb +89 -0
  54. data/spec/cli/attributes_spec.rb +5 -15
  55. data/spec/cli/clone_spec.rb +14 -27
  56. data/spec/cli/create_spec.rb +11 -18
  57. data/spec/cli/deploy_spec.rb +24 -63
  58. data/spec/cli/destroy_spec.rb +7 -25
  59. data/spec/cli/outputs_spec.rb +12 -17
  60. data/spec/cli/protect_spec.rb +68 -106
  61. data/spec/cli/shared_spec.rb +12 -15
  62. data/spec/cli/update_spec.rb +9 -27
  63. data/spec/config_spec.rb +47 -14
  64. data/spec/contexts/config_contexts.rb +28 -0
  65. data/spec/contexts/logger_contexts.rb +9 -0
  66. data/spec/contexts/stack_contexts.rb +40 -0
  67. data/spec/entry_lister_spec.rb +31 -0
  68. data/spec/entry_spec.rb +86 -0
  69. data/spec/misc/attribute_merger_spec.rb +3 -8
  70. data/spec/notifier/campfire_spec.rb +21 -61
  71. data/spec/notifier_spec.rb +18 -40
  72. data/spec/spec_helper.rb +10 -0
  73. data/spec/stack/deployment/status_spec.rb +13 -13
  74. data/spec/stack/deployment_spec.rb +26 -21
  75. data/spec/stack/execute_spec.rb +7 -3
  76. data/spec/stack/output_mapper_spec.rb +3 -15
  77. data/spec/stack/ssh_spec.rb +14 -13
  78. data/spec/stack/{stack_attribute_formater_spec.rb → stack_attribute_formatter_spec.rb} +19 -16
  79. data/spec/stack/stack_creator_spec.rb +46 -0
  80. data/spec/stack/stack_destroyer_spec.rb +18 -0
  81. data/spec/stack/stack_formatter_spec.rb +37 -0
  82. data/spec/stack/stack_lister_spec.rb +17 -0
  83. data/spec/stack/stack_reader_spec.rb +81 -0
  84. data/spec/stack/stack_updater_spec.rb +79 -0
  85. data/spec/stack/status_spec.rb +106 -0
  86. data/spec/stack_spec.rb +160 -133
  87. metadata +112 -19
  88. data/.rvmrc +0 -1
  89. data/lib/simple_deploy/config.rb +0 -87
@@ -2,27 +2,17 @@ require 'spec_helper'
2
2
  require 'simple_deploy/cli'
3
3
 
4
4
  describe SimpleDeploy::CLI::Attributes do
5
+ include_context 'cli config'
6
+ include_context 'double stubbed logger'
7
+ include_context 'double stubbed stack', :name => 'my_stack',
8
+ :environment => 'my_env'
5
9
 
6
10
  describe 'show' do
7
11
  before do
8
- @config = mock 'config'
9
- @logger = stub 'logger'
10
12
  @options = { :environment => 'my_env',
11
13
  :log_level => 'debug',
12
14
  :name => 'my_stack' }
13
- @stack = stub :attributes => { 'foo' => 'bar', 'baz' => 'blah' }
14
-
15
- SimpleDeploy::Config.stub(:new).and_return(@config)
16
- @config.should_receive(:environment).with('my_env').and_return(@config)
17
- SimpleDeploy::SimpleDeployLogger.should_receive(:new).
18
- with(:log_level => 'debug').
19
- and_return(@logger)
20
- SimpleDeploy::Stack.should_receive(:new).
21
- with(:config => @config,
22
- :environment => 'my_env',
23
- :logger => @logger,
24
- :name => 'my_stack').
25
- and_return(@stack)
15
+ @stack_stub.stub(:attributes).and_return({ 'foo' => 'bar', 'baz' => 'blah' })
26
16
  end
27
17
 
28
18
  it 'should output the attributes' do
@@ -2,6 +2,12 @@ require 'spec_helper'
2
2
  require 'simple_deploy/cli'
3
3
 
4
4
  describe SimpleDeploy::CLI::Clone do
5
+ include_context 'cli config'
6
+ include_context 'double stubbed logger'
7
+ include_context 'clone stack pair', :source_name => 'source_stack',
8
+ :source_env => 'my_env',
9
+ :new_name => 'new_stack',
10
+ :new_env => 'my_env'
5
11
 
6
12
  describe 'clone' do
7
13
  context 'filter_attributes' do
@@ -117,8 +123,6 @@ describe SimpleDeploy::CLI::Clone do
117
123
 
118
124
  context 'stack creation' do
119
125
  before do
120
- @config = mock 'config'
121
- @logger = stub 'logger', :info => 'true'
122
126
  @options = { :environment => 'my_env',
123
127
  :log_level => 'debug',
124
128
  :source_name => 'source_stack',
@@ -127,7 +131,7 @@ describe SimpleDeploy::CLI::Clone do
127
131
  'chef_repo_domain=updated_community_chef_repo',
128
132
  'SolrClientTrafficContainer=solr-client-traffic-container'] }
129
133
 
130
- @source_stack = stub :attributes => {
134
+ @source_stack_stub.stub(:attributes).and_return(
131
135
  'AmiId' => 'ami-7b6a4e3e',
132
136
  'AppEnv' => 'pod-2-cd-1',
133
137
  'MaximumAppInstances' => 1,
@@ -135,36 +139,19 @@ describe SimpleDeploy::CLI::Clone do
135
139
  'chef_repo_bucket_prefix' => 'intu-lc',
136
140
  'chef_repo_domain' => 'live_community_chef_repo',
137
141
  'deployment_user' => 'rmendes'
138
- }, :template => { 'foo' => 'bah' }
139
- @new_stack = stub :attributes => {}
140
-
141
- SimpleDeploy::Config.stub(:new).and_return(@config)
142
- @config.should_receive(:environment).with('my_env').and_return(@config)
143
- SimpleDeploy::SimpleDeployLogger.should_receive(:new).
144
- with(:log_level => 'debug').
145
- and_return(@logger)
146
-
147
- SimpleDeploy::Stack.should_receive(:new).
148
- with(:config => @config,
149
- :environment => 'my_env',
150
- :logger => @logger,
151
- :name => 'source_stack').
152
- and_return(@source_stack)
153
- SimpleDeploy::Stack.should_receive(:new).
154
- with(:config => @config,
155
- :environment => 'my_env',
156
- :logger => @logger,
157
- :name => 'new_stack').
158
- and_return(@new_stack)
142
+ )
143
+ @source_stack_stub.stub(:template).and_return('foo' => 'bah')
144
+ @new_stack_mock.stub(:attributes).and_return({})
159
145
  end
160
-
146
+
161
147
  it 'should create the new stack using the filtered, merged and added attributes' do
162
148
  subject.should_receive(:valid_options?).
163
149
  with(:provided => @options,
164
150
  :required => [:environment, :source_name, :new_name])
165
151
  Trollop.stub(:options).and_return(@options)
152
+ @new_stack_mock.stub(:template).and_return('foo' => 'bah')
166
153
 
167
- @new_stack.should_receive(:create) do |options|
154
+ @new_stack_mock.should_receive(:create) do |options|
168
155
  options[:attributes].should == [{ 'AmiId' => 'ami-7b6a4e3e' },
169
156
  { 'AppEnv' => 'pod-2-cd-1' },
170
157
  { 'MaximumAppInstances' => 1 },
@@ -186,7 +173,7 @@ describe SimpleDeploy::CLI::Clone do
186
173
  :required => [:environment, :source_name, :new_name])
187
174
  Trollop.stub(:options).and_return(@options)
188
175
 
189
- @new_stack.should_receive(:create) do |options|
176
+ @new_stack_mock.should_receive(:create) do |options|
190
177
  options[:attributes].should == [{ 'AmiId' => 'ami-7b6a4e3e' },
191
178
  { 'AppEnv' => 'pod-2-cd-1' },
192
179
  { 'MaximumAppInstances' => 1 },
@@ -1,12 +1,15 @@
1
1
  require 'spec_helper'
2
+ require 'simple_deploy/cli'
2
3
 
3
4
  describe SimpleDeploy::CLI::Create do
5
+ include_context 'cli config'
6
+ include_context 'double stubbed logger'
7
+ include_context 'stubbed stack', :name => 'mytest',
8
+ :environment => 'test'
9
+
4
10
  before do
5
- @config_object = mock 'config'
6
11
  @config_env = mock 'environment config'
7
- @stack_mock = mock 'stack'
8
12
  @attribute_merger_mock = mock 'attribute merger'
9
- @logger = stub 'logger', :info => true
10
13
 
11
14
  @options = { :attributes => [ 'attr1=val1' ],
12
15
  :input_stack => [ 'stack1' ],
@@ -15,23 +18,13 @@ describe SimpleDeploy::CLI::Create do
15
18
  :log_level => 'info',
16
19
  :template => '/tmp/test.json' }
17
20
  Trollop.stub :options => @options
18
- SimpleDeploy::Config.stub :new => @config_object
19
- SimpleDeploy::SimpleDeployLogger.should_receive(:new).
20
- with(:log_level => 'info').
21
- and_return @logger
22
- @config_object.stub :environments => { 'test' => 'config_data' }
23
- @config_object.should_receive(:environment).with('test').
24
- and_return 'config_data'
25
- SimpleDeploy::Stack.should_receive(:new).
26
- with(:environment => 'test',
27
- :name => 'mytest',
28
- :config => 'config_data',
29
- :logger => @logger).
30
- and_return(@stack_mock)
21
+
22
+ SimpleDeploy.stub(:environments).and_return(@config_env)
23
+ @config_env.should_receive(:keys).and_return(['test'])
24
+
31
25
  SimpleDeploy::Misc::AttributeMerger.stub :new => @attribute_merger_mock
26
+
32
27
  merge_options = { :attributes => [ { "attr1" => "val1" } ],
33
- :config => 'config_data',
34
- :logger => @logger,
35
28
  :environment => 'test',
36
29
  :template => '/tmp/test.json',
37
30
  :input_stacks => ["stack1"] }
@@ -3,15 +3,16 @@ require 'spec_helper'
3
3
  require 'simple_deploy/cli'
4
4
 
5
5
  describe SimpleDeploy::CLI::Deploy do
6
+ include_context 'cli config'
7
+ include_context 'double stubbed logger'
8
+ include_context 'stubbed stack', :name => 'my_stack',
9
+ :environment => 'my_env',
10
+ :internal => false
11
+
6
12
  describe 'deploy' do
7
13
  before do
8
- @logger = stub 'logger', 'info' => 'true', 'error' => 'true'
9
- @stack = stub :attributes => {}
14
+ @stack_mock.stub(:attributes).and_return({})
10
15
  @notifier = stub
11
-
12
- SimpleDeploy::SimpleDeployLogger.should_receive(:new).
13
- with(:log_level => 'debug').
14
- and_return(@logger)
15
16
  end
16
17
 
17
18
  it "should notify on success" do
@@ -29,19 +30,11 @@ describe SimpleDeploy::CLI::Deploy do
29
30
 
30
31
  SimpleDeploy::Notifier.should_receive(:new).
31
32
  with(:stack_name => 'my_stack',
32
- :environment => 'my_env',
33
- :logger => @logger).
33
+ :environment => 'my_env').
34
34
  and_return(@notifier)
35
35
 
36
- SimpleDeploy::Stack.should_receive(:new).
37
- with(:environment => 'my_env',
38
- :logger => @logger,
39
- :name => 'my_stack',
40
- :internal => false).
41
- and_return(@stack)
42
-
43
- @stack.should_receive(:wait_for_stable)
44
- @stack.should_receive(:deploy).with(true).and_return(true)
36
+ @stack_mock.should_receive(:wait_for_stable)
37
+ @stack_mock.should_receive(:deploy).with(true).and_return(true)
45
38
  @notifier.should_receive(:send_deployment_start_message)
46
39
  @notifier.should_receive(:send_deployment_complete_message)
47
40
 
@@ -63,19 +56,11 @@ describe SimpleDeploy::CLI::Deploy do
63
56
 
64
57
  SimpleDeploy::Notifier.should_receive(:new).
65
58
  with(:stack_name => 'my_stack',
66
- :environment => 'my_env',
67
- :logger => @logger).
59
+ :environment => 'my_env').
68
60
  and_return(@notifier)
69
61
 
70
- SimpleDeploy::Stack.should_receive(:new).
71
- with(:environment => 'my_env',
72
- :logger => @logger,
73
- :name => 'my_stack',
74
- :internal => false).
75
- and_return(@stack)
76
-
77
- @stack.should_receive(:wait_for_stable)
78
- @stack.should_receive(:deploy).with(true).and_return(false)
62
+ @stack_mock.should_receive(:wait_for_stable)
63
+ @stack_mock.should_receive(:deploy).with(true).and_return(false)
79
64
  @notifier.should_receive(:send_deployment_start_message)
80
65
 
81
66
  begin
@@ -100,20 +85,12 @@ describe SimpleDeploy::CLI::Deploy do
100
85
 
101
86
  SimpleDeploy::Notifier.should_receive(:new).
102
87
  with(:stack_name => 'my_stack',
103
- :environment => 'my_env',
104
- :logger => @logger).
88
+ :environment => 'my_env').
105
89
  and_return(@notifier)
106
90
 
107
- SimpleDeploy::Stack.should_receive(:new).
108
- with(:environment => 'my_env',
109
- :logger => @logger,
110
- :name => 'my_stack',
111
- :internal => false).
112
- and_return(@stack)
113
-
114
- @stack.should_receive(:update).with(hash_including(:force => true, :attributes => [{'foo' => 'bah'}])).and_return(true)
115
- @stack.should_receive(:wait_for_stable)
116
- @stack.should_receive(:deploy).with(true).and_return(true)
91
+ @stack_mock.should_receive(:update).with(hash_including(:force => true, :attributes => [{'foo' => 'bah'}])).and_return(true)
92
+ @stack_mock.should_receive(:wait_for_stable)
93
+ @stack_mock.should_receive(:deploy).with(true).and_return(true)
117
94
  @notifier.should_receive(:send_deployment_start_message)
118
95
  @notifier.should_receive(:send_deployment_complete_message)
119
96
 
@@ -135,20 +112,12 @@ describe SimpleDeploy::CLI::Deploy do
135
112
 
136
113
  SimpleDeploy::Notifier.should_receive(:new).
137
114
  with(:stack_name => 'my_stack',
138
- :environment => 'my_env',
139
- :logger => @logger).
115
+ :environment => 'my_env').
140
116
  and_return(@notifier)
141
117
 
142
- SimpleDeploy::Stack.should_receive(:new).
143
- with(:environment => 'my_env',
144
- :logger => @logger,
145
- :name => 'my_stack',
146
- :internal => false).
147
- and_return(@stack)
148
-
149
- @stack.should_receive(:update).with(hash_including(:force => true,
118
+ @stack_mock.should_receive(:update).with(hash_including(:force => true,
150
119
  :attributes => [{'foo' => 'bah'}])).and_return(false)
151
- @stack.should_receive(:wait_for_stable)
120
+ @stack_mock.should_receive(:wait_for_stable)
152
121
 
153
122
  begin
154
123
  subject.deploy
@@ -172,20 +141,12 @@ describe SimpleDeploy::CLI::Deploy do
172
141
 
173
142
  SimpleDeploy::Notifier.should_receive(:new).
174
143
  with(:stack_name => 'my_stack',
175
- :environment => 'my_env',
176
- :logger => @logger).
144
+ :environment => 'my_env').
177
145
  and_return(@notifier)
178
146
 
179
- SimpleDeploy::Stack.should_receive(:new).
180
- with(:environment => 'my_env',
181
- :logger => @logger,
182
- :name => 'my_stack',
183
- :internal => false).
184
- and_return(@stack)
185
-
186
- @stack.should_not_receive(:update)
187
- @stack.should_receive(:wait_for_stable)
188
- @stack.should_receive(:deploy).with(true).and_return(true)
147
+ @stack_mock.should_not_receive(:update)
148
+ @stack_mock.should_receive(:wait_for_stable)
149
+ @stack_mock.should_receive(:deploy).with(true).and_return(true)
189
150
  @notifier.should_receive(:send_deployment_start_message)
190
151
  @notifier.should_receive(:send_deployment_complete_message)
191
152
 
@@ -3,21 +3,17 @@ require 'spec_helper'
3
3
  require 'simple_deploy/cli'
4
4
 
5
5
  describe SimpleDeploy::CLI::Destroy do
6
+ include_context 'cli config'
7
+ include_context 'double stubbed logger'
8
+ include_context 'stubbed stack', :name => 'my_stack',
9
+ :environment => 'my_env'
6
10
 
7
11
  describe 'destroy' do
8
12
  before do
9
- @config = mock 'config'
10
- @logger = stub 'logger', 'info' => 'true'
11
13
  @options = { :environment => 'my_env',
12
14
  :log_level => 'debug',
13
15
  :name => 'my_stack' }
14
- @stack = stub :attributes => {}
15
-
16
- SimpleDeploy::Config.stub(:new).and_return(@config)
17
- @config.should_receive(:environment).with('my_env').and_return(@config)
18
- SimpleDeploy::SimpleDeployLogger.should_receive(:new).
19
- with(:log_level => 'debug').
20
- and_return(@logger)
16
+ @stack_mock.stub(:attributes).and_return({})
21
17
  end
22
18
 
23
19
  it "should exit with 0" do
@@ -26,14 +22,7 @@ describe SimpleDeploy::CLI::Destroy do
26
22
  :required => [:environment, :name])
27
23
  Trollop.stub(:options).and_return(@options)
28
24
 
29
- @stack.should_receive(:destroy).and_return(true)
30
-
31
- SimpleDeploy::Stack.should_receive(:new).
32
- with(:config => @config,
33
- :environment => 'my_env',
34
- :logger => @logger,
35
- :name => 'my_stack').
36
- and_return(@stack)
25
+ @stack_mock.should_receive(:destroy).and_return(true)
37
26
 
38
27
  begin
39
28
  subject.destroy
@@ -48,14 +37,7 @@ describe SimpleDeploy::CLI::Destroy do
48
37
  :required => [:environment, :name])
49
38
  Trollop.stub(:options).and_return(@options)
50
39
 
51
- @stack.should_receive(:destroy).and_return(false)
52
-
53
- SimpleDeploy::Stack.should_receive(:new).
54
- with(:config => @config,
55
- :environment => 'my_env',
56
- :logger => @logger,
57
- :name => 'my_stack').
58
- and_return(@stack)
40
+ @stack_mock.should_receive(:destroy).and_return(false)
59
41
 
60
42
  begin
61
43
  subject.destroy
@@ -2,35 +2,30 @@ require 'spec_helper'
2
2
  require 'simple_deploy/cli'
3
3
 
4
4
  describe SimpleDeploy::CLI::Outputs do
5
+ include_context 'cli config'
6
+ include_context 'double stubbed logger'
7
+ include_context 'stubbed stack', :name => 'mytest',
8
+ :environment => 'test'
5
9
 
6
10
  before do
7
- @config_object = mock 'config'
8
11
  @config_env = mock 'environment config'
9
- @stack = mock 'stack'
10
- @logger = stub 'logger'
11
12
  @options = { :environment => 'test',
12
13
  :log_level => 'info',
13
14
  :name => 'mytest' }
14
15
  @data = [{ 'OutputKey' => 'key1', 'OutputValue' => 'value1' },
15
16
  { 'OutputKey' => 'key2', 'OutputValue' => 'value2' }]
16
17
  Trollop.stub :options => @options
17
- @config_object.stub(:environments => { 'test' => 'data' })
18
- SimpleDeploy::Config.stub :new => @config_object
19
- SimpleDeploy::SimpleDeployLogger.should_receive(:new).
20
- with(:log_level => 'info').
21
- and_return @logger
22
- SimpleDeploy::Stack.should_receive(:new).
23
- with(:environment => 'test',
24
- :name => 'mytest',
25
- :config => @config_env,
26
- :logger => @logger).
27
- and_return(@stack)
28
- @stack.stub :outputs => @data
29
- @config_object.should_receive(:environment).with('test').
30
- and_return @config_env
18
+ @config_mock.stub(:environments => { 'test' => 'data' })
19
+ SimpleDeploy.stub(:environments).and_return(@config_env)
20
+ @config_env.should_receive(:keys).and_return(['test'])
21
+ @stack_mock.stub(:outputs).and_return(@data)
31
22
  @outputs = SimpleDeploy::CLI::Outputs.new
32
23
  end
33
24
 
25
+ after do
26
+ SimpleDeploy.release_config
27
+ end
28
+
34
29
  it "should successfully return the show command with default values" do
35
30
  @outputs.should_receive(:puts).with('key1: value1')
36
31
  @outputs.should_receive(:puts).with('key2: value2')
@@ -3,127 +3,89 @@ require 'spec_helper'
3
3
  require 'simple_deploy/cli'
4
4
 
5
5
  describe SimpleDeploy::CLI::Protect do
6
+ include_context 'cli config'
7
+ include_context 'double stubbed logger'
6
8
 
7
9
  describe 'protect' do
8
10
  before do
9
- @config_mock = mock 'config'
10
- @logger = stub 'logger', 'info' => 'true'
11
-
12
- SimpleDeploy::Config.stub(:new).and_return(@config_mock)
13
- @config_mock.should_receive(:environment).with('my_env').and_return(@config)
14
- SimpleDeploy::SimpleDeployLogger.should_receive(:new).
15
- with(:log_level => 'debug').
16
- and_return(@logger)
17
- end
18
-
19
- it "should enable protection" do
20
- options = { :environment => 'my_env',
11
+ @options = { :environment => 'my_env',
21
12
  :log_level => 'debug',
22
- :name => ['my_stack'],
13
+ :name => ['my_stack1'],
23
14
  :protection => 'on' }
24
-
25
- subject.should_receive(:valid_options?).
26
- with(:provided => options,
27
- :required => [:environment, :name])
28
- Trollop.stub(:options).and_return(options)
29
-
30
- stack = stub :attributes => { 'protection' => 'on' }
31
- stack.should_receive(:update).with(hash_including(:attributes => [{ 'protection' => 'on' }]))
32
-
33
- SimpleDeploy::Stack.should_receive(:new).
34
- with(:config => @config,
35
- :environment => 'my_env',
36
- :logger => @logger,
37
- :name => 'my_stack').
38
- and_return(stack)
39
-
40
- subject.protect
41
15
  end
42
16
 
43
- it "should enable protection for multiple stacks" do
44
- options = { :environment => 'my_env',
45
- :log_level => 'debug',
46
- :name => ['my_stack1', 'my_stack2'],
47
- :protection => 'on' }
17
+ context "single stack" do
18
+ include_context 'received stack array', 'my_stack', 'my_env', 1
19
+
20
+ it "should enable protection" do
21
+ subject.should_receive(:valid_options?).
22
+ with(:provided => @options,
23
+ :required => [:environment, :name])
24
+ Trollop.stub(:options).and_return(@options)
48
25
 
49
- subject.should_receive(:valid_options?).
50
- with(:provided => options,
51
- :required => [:environment, :name])
52
- Trollop.stub(:options).and_return(options)
53
-
54
- stack = stub :attributes => { 'protection' => 'on' }
55
- stack.should_receive(:update).twice.with(hash_including(:attributes => [{ 'protection' => 'on' }]))
56
-
57
- SimpleDeploy::Stack.should_receive(:new).
58
- with(:config => @config,
59
- :environment => 'my_env',
60
- :logger => @logger,
61
- :name => 'my_stack1').
62
- and_return(stack)
63
-
64
- SimpleDeploy::Stack.should_receive(:new).
65
- with(:config => @config,
66
- :environment => 'my_env',
67
- :logger => @logger,
68
- :name => 'my_stack2').
69
- and_return(stack)
70
-
71
- subject.protect
72
- end
26
+ @stack_mock1.stub(:attributes).and_return('protection' => 'on')
27
+ @stack_mock1.should_receive(:update).with(
28
+ hash_including(:attributes => [{ 'protection' => 'on' }]))
73
29
 
74
- it "should disable protection" do
75
- options = { :environment => 'my_env',
76
- :log_level => 'debug',
77
- :name => ['my_stack'],
78
- :protection => 'off' }
30
+ subject.protect
31
+ end
79
32
 
80
- subject.should_receive(:valid_options?).
81
- with(:provided => options,
82
- :required => [:environment, :name])
83
- Trollop.stub(:options).and_return(options)
33
+ it "should disable protection" do
34
+ @options[:protection]= 'off'
84
35
 
85
- stack = stub :attributes => { 'protection' => 'off' }
86
- stack.should_receive(:update).with(hash_including(:attributes => [{ 'protection' => 'off' }]))
36
+ subject.should_receive(:valid_options?).
37
+ with(:provided => @options,
38
+ :required => [:environment, :name])
39
+ Trollop.stub(:options).and_return(@options)
87
40
 
88
- SimpleDeploy::Stack.should_receive(:new).
89
- with(:config => @config,
90
- :environment => 'my_env',
91
- :logger => @logger,
92
- :name => 'my_stack').
93
- and_return(stack)
41
+ @stack_mock1.stub(:attributes).and_return('protection' => 'off')
42
+ @stack_mock1.should_receive(:update).with(
43
+ hash_including(:attributes => [{ 'protection' => 'off' }]))
94
44
 
95
- subject.protect
45
+ subject.protect
46
+ end
96
47
  end
97
48
 
98
- it "should disable protection for multiple stacks" do
99
- options = { :environment => 'my_env',
100
- :log_level => 'debug',
101
- :name => ['my_stack1', 'my_stack2'],
102
- :protection => 'off' }
103
-
104
- subject.should_receive(:valid_options?).
105
- with(:provided => options,
106
- :required => [:environment, :name])
107
- Trollop.stub(:options).and_return(options)
108
-
109
- stack = stub :attributes => { 'protection' => 'off' }
110
- stack.should_receive(:update).twice.with(hash_including(:attributes => [{ 'protection' => 'off' }]))
111
-
112
- SimpleDeploy::Stack.should_receive(:new).
113
- with(:config => @config,
114
- :environment => 'my_env',
115
- :logger => @logger,
116
- :name => 'my_stack1').
117
- and_return(stack)
118
-
119
- SimpleDeploy::Stack.should_receive(:new).
120
- with(:config => @config,
121
- :environment => 'my_env',
122
- :logger => @logger,
123
- :name => 'my_stack2').
124
- and_return(stack)
125
-
126
- subject.protect
49
+ context "multiple stacks" do
50
+ include_context 'received stack array', 'my_stack', 'my_env', 2
51
+
52
+ it "should enable protection" do
53
+ @options[:name] = ['my_stack1', 'my_stack2']
54
+
55
+ subject.should_receive(:valid_options?).
56
+ with(:provided => @options,
57
+ :required => [:environment, :name])
58
+ Trollop.stub(:options).and_return(@options)
59
+
60
+ @stack_mock1.stub(:attributes).and_return('protection' => 'on')
61
+ @stack_mock1.should_receive(:update).with(
62
+ hash_including(:attributes => [{ 'protection' => 'on' }]))
63
+ @stack_mock2.stub(:attributes).and_return('protection' => 'on')
64
+ @stack_mock2.should_receive(:update).with(
65
+ hash_including(:attributes => [{ 'protection' => 'on' }]))
66
+
67
+ subject.protect
68
+ end
69
+
70
+ it "should disable protection" do
71
+ @options[:name] = ['my_stack1', 'my_stack2']
72
+ @options[:protection]= 'off'
73
+
74
+ subject.should_receive(:valid_options?).
75
+ with(:provided => @options,
76
+ :required => [:environment, :name])
77
+ Trollop.stub(:options).and_return(@options)
78
+
79
+ @stack_mock1.stub(:attributes).and_return('protection' => 'off')
80
+ @stack_mock1.should_receive(:update).with(
81
+ hash_including(:attributes => [{ 'protection' => 'off' }]))
82
+ @stack_mock2.stub(:attributes).and_return('protection' => 'off')
83
+ @stack_mock2.should_receive(:update).with(
84
+ hash_including(:attributes => [{ 'protection' => 'off' }]))
85
+
86
+ subject.protect
87
+ end
127
88
  end
89
+
128
90
  end
129
91
  end