tddium-preview 0.1.4 → 0.1.5

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.
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- tddium-preview (0.1.3)
4
+ tddium-preview (0.1.4)
5
5
  bundler
6
6
  highline
7
7
  json
data/lib/tddium.rb CHANGED
@@ -22,11 +22,6 @@ require File.expand_path("../tddium/constant", __FILE__)
22
22
  # tddium account # View/Manage account information
23
23
  # tddium account:password # Change password
24
24
  #
25
- # tddium dev # Enter "dev" mode, for single-test quick-turnaround debugging.
26
- # tddium stopdev # Leave "dev" mode.
27
- #
28
- # tddium clean # Clean up test results, especially large objects like videos
29
- #
30
25
  # tddium help # Print this usage message
31
26
 
32
27
  class Tddium < Thor
@@ -131,7 +126,7 @@ class Tddium < Thor
131
126
  method_option :test_pattern, :type => :string, :default => Default::TEST_PATTERN
132
127
  def spec
133
128
  set_default_environment(options[:environment])
134
- return unless git_repo? && tddium_settings && suite_for_current_branch?
129
+ exit_failure unless git_repo? && tddium_settings && suite_for_current_branch?
135
130
 
136
131
  test_execution_params = {}
137
132
 
@@ -144,8 +139,7 @@ class Tddium < Thor
144
139
  test_execution_params[:user_data_text] = Base64.encode64(user_data)
145
140
  test_execution_params[:user_data_filename] = File.basename(user_data_file_path)
146
141
  else
147
- say Text::Error::NO_USER_DATA_FILE % user_data_file_path
148
- return
142
+ exit_failure Text::Error::NO_USER_DATA_FILE % user_data_file_path
149
143
  end
150
144
  end
151
145
 
@@ -170,14 +164,13 @@ class Tddium < Thor
170
164
  suite_details = call_api(:get, current_suite_path)
171
165
 
172
166
  # Push the latest code to git
173
- return unless update_git_remote_and_push(suite_details)
167
+ exit_failure unless update_git_remote_and_push(suite_details)
174
168
 
175
169
  # Get a list of files to be tested
176
170
  test_files = Dir.glob(test_pattern).collect {|file_path| {:test_name => file_path}}
177
171
 
178
172
  if test_files.empty?
179
- say Text::Error::NO_MATCHING_FILES % test_pattern
180
- return
173
+ exit_failure Text::Error::NO_MATCHING_FILES % test_pattern
181
174
  end
182
175
 
183
176
  # Create a session
@@ -224,7 +217,11 @@ class Tddium < Thor
224
217
  end
225
218
 
226
219
  # If all tests finished, exit the loop else sleep
227
- finished_tests.size == current_test_executions["tests"].size ? tests_not_finished_yet = false : sleep(Default::SLEEP_TIME_BETWEEN_POLLS)
220
+ if finished_tests.size == current_test_executions["tests"].size
221
+ tests_not_finished_yet = false
222
+ else
223
+ sleep(Default::SLEEP_TIME_BETWEEN_POLLS)
224
+ end
228
225
  end
229
226
 
230
227
  # Print out the result
@@ -236,6 +233,8 @@ class Tddium < Thor
236
233
  write_suite(current_suite_id, {"user_data_file" => user_data_file_path,
237
234
  "max_parallelism" => max_parallelism,
238
235
  "test_pattern" => test_pattern})
236
+
237
+ exit_failure if test_statuses["failed"] > 0 || test_statuses["errors"] > 0
239
238
  rescue TddiumClient::Error::Base
240
239
  end
241
240
  end
@@ -389,6 +388,10 @@ class Tddium < Thor
389
388
  tddium_client.environment.to_sym
390
389
  end
391
390
 
391
+ def exit_failure(msg='')
392
+ abort msg
393
+ end
394
+
392
395
  def get_user
393
396
  call_api(:get, Api::Path::USERS, {}, nil, false) rescue nil
394
397
  end
@@ -3,5 +3,5 @@ Copyright (c) 2011 Solano Labs All Rights Reserved
3
3
  =end
4
4
 
5
5
  module TddiumVersion
6
- VERSION = "0.1.4"
6
+ VERSION = "0.1.5"
7
7
  end
data/spec/tddium_spec.rb CHANGED
@@ -5,6 +5,8 @@ Copyright (c) 2011 Solano Labs All Rights Reserved
5
5
 
6
6
  require 'spec_helper'
7
7
 
8
+ class EXIT_FAILURE_EXCEPTION < RuntimeError; end
9
+
8
10
  describe Tddium do
9
11
  include FakeFS::SpecHelpers
10
12
  include TddiumSpecHelpers
@@ -54,7 +56,8 @@ describe Tddium do
54
56
  end
55
57
 
56
58
  def run(tddium, options = {:test_pattern => DEFAULT_TEST_PATTERN, :environment => "test"})
57
- send("run_#{example.example_group.ancestors.map(&:description)[-2][1..-1]}", tddium, options)
59
+ method = example.example_group.ancestors.map(&:description)[-2][1..-1]
60
+ send("run_#{method}", tddium, options)
58
61
  end
59
62
 
60
63
  [:suite, :spec, :status, :account, :login, :logout, :password].each do |method|
@@ -62,10 +65,14 @@ describe Tddium do
62
65
  options = params.first || {}
63
66
  if method == :spec
64
67
  options[:test_pattern] = DEFAULT_TEST_PATTERN unless options.has_key?(:test_pattern)
68
+ stub_exit_failure
65
69
  end
66
70
  options[:environment] = "test" unless options.has_key?(:environment)
67
71
  stub_cli_options(tddium, options)
68
- tddium.send(method)
72
+ begin
73
+ tddium.send(method)
74
+ rescue EXIT_FAILURE_EXCEPTION
75
+ end
69
76
  end
70
77
  end
71
78
 
@@ -143,6 +150,10 @@ describe Tddium do
143
150
  tddium.stub(:sleep).with(Tddium::Default::SLEEP_TIME_BETWEEN_POLLS)
144
151
  end
145
152
 
153
+ def stub_exit_failure
154
+ tddium.stub(:exit_failure).and_raise(EXIT_FAILURE_EXCEPTION)
155
+ end
156
+
146
157
  def stub_tddium_client
147
158
  TddiumClient::Client.stub(:new).and_return(tddium_client)
148
159
  tddium_client.stub(:environment).and_return("test")
@@ -646,17 +657,38 @@ describe Tddium do
646
657
  stub_config_file(:api_key => true, :branches => true)
647
658
  end
648
659
 
649
- it_should_behave_like "set the default environment"
660
+ it_should_behave_like "set the default environment" do
661
+ let(:run_function) {spec_should_fail}
662
+ end
650
663
  it_should_behave_like "git repo has not been initialized"
651
664
  it_should_behave_like ".tddium file is missing or corrupt"
652
665
  it_should_behave_like "suite has not been initialized"
653
666
 
667
+ def spec_should_fail(options={})
668
+ options[:test_pattern] = DEFAULT_TEST_PATTERN unless options.has_key?(:test_pattern)
669
+ options[:environment] = "test" unless options.has_key?(:environment)
670
+ stub_cli_options(tddium, options)
671
+ tddium.stub(:exit_failure).and_raise(SystemExit)
672
+ yield if block_given?
673
+ expect { tddium.spec }.to raise_error(SystemExit)
674
+ end
675
+
676
+ def spec_should_pass(options={})
677
+ options[:test_pattern] = DEFAULT_TEST_PATTERN unless options.has_key?(:test_pattern)
678
+ options[:environment] = "test" unless options.has_key?(:environment)
679
+ stub_cli_options(tddium, options)
680
+ tddium.stub(:exit_failure).and_raise(SystemExit)
681
+ yield if block_given?
682
+ expect { tddium.spec }.not_to raise_error
683
+ end
684
+
654
685
  context "user-data-file" do
655
686
  context "does not exist" do
656
687
  context "from command line option" do
657
688
  it "should be picked first" do
658
- tddium.should_receive(:say).with(Tddium::Text::Error::NO_USER_DATA_FILE % SAMPLE_FILE_PATH)
659
- run_spec(tddium, :user_data_file => SAMPLE_FILE_PATH)
689
+ spec_should_fail(:user_data_file => SAMPLE_FILE_PATH) do
690
+ tddium.should_receive(:exit_failure).with(Tddium::Text::Error::NO_USER_DATA_FILE % SAMPLE_FILE_PATH)
691
+ end
660
692
  end
661
693
  end
662
694
 
@@ -664,19 +696,20 @@ describe Tddium do
664
696
  before { stub_config_file(:branches => {SAMPLE_BRANCH_NAME => {"id" => SAMPLE_SUITE_ID, "options" => {"user_data_file" => SAMPLE_FILE_PATH2}}}) }
665
697
 
666
698
  it "should be picked if no command line option" do
667
- tddium.should_receive(:say).with(Tddium::Text::Error::NO_USER_DATA_FILE % SAMPLE_FILE_PATH2)
668
- run_spec(tddium)
699
+ spec_should_fail do
700
+ tddium.should_receive(:exit_failure).with(Tddium::Text::Error::NO_USER_DATA_FILE % SAMPLE_FILE_PATH2)
701
+ end
669
702
  end
670
703
  end
671
704
 
672
705
  it "should not try to git push" do
673
706
  tddium.should_not_receive(:system).with(/^git push/)
674
- run_spec(tddium, :user_data_file => SAMPLE_FILE_PATH)
707
+ spec_should_fail(:user_data_file => SAMPLE_FILE_PATH)
675
708
  end
676
709
 
677
710
  it "should not call the api" do
678
711
  tddium_client.should_not_receive(:call_api)
679
- run_spec(tddium, :user_data_file => SAMPLE_FILE_PATH)
712
+ spec_should_fail(:user_data_file => SAMPLE_FILE_PATH)
680
713
  end
681
714
  end
682
715
  end
@@ -699,6 +732,7 @@ describe Tddium do
699
732
  context "git push was unsuccessful" do
700
733
  before { stub_git_push(tddium, false) }
701
734
  it "should not try to create a new session" do
735
+ tddium.should_receive(:exit_failure)
702
736
  tddium_client.should_not_receive(:call_api).with(:post, Tddium::Api::Path::SESSIONS)
703
737
  run_spec(tddium)
704
738
  end
@@ -856,7 +890,7 @@ describe Tddium do
856
890
  end
857
891
 
858
892
  it "should show the user a summary of all the tests" do
859
- tddium.should_receive(:say).with("3 examples, 1 failures, 0 errors, 1 pending")
893
+ tddium.should_receive(:say).with("3 tests, 1 failures, 0 errors, 1 pending")
860
894
  run_spec(tddium)
861
895
  end
862
896
 
@@ -864,48 +898,98 @@ describe Tddium do
864
898
  end
865
899
 
866
900
  context "'GET #{Tddium::Api::Path::TEST_EXECUTIONS}' is successful" do
867
- before do
868
- get_test_executions_response_all_finished = {"report"=>SAMPLE_REPORT_URL, "tests"=>{"spec/mouse_spec.rb"=>{"finished" => true, "status"=>"pending"}, "spec/pig_spec.rb"=>{"finished" => true, "status"=>"error"}, "spec/dog_spec.rb"=>{"finished" => true, "status"=>"failed"}, "spec/cat_spec.rb"=>{"finished" => true, "status"=>"passed"}}}
869
- stub_call_api_response(:get, "#{Tddium::Api::Path::SESSIONS}/#{SAMPLE_SESSION_ID}/#{Tddium::Api::Path::TEST_EXECUTIONS}", get_test_executions_response, get_test_executions_response_all_finished)
870
- stub_sleep(tddium)
871
- end
901
+ context "with mixed results" do
902
+ before do
903
+ get_test_executions_response_all_finished = {"report"=>SAMPLE_REPORT_URL, "tests"=>{"spec/mouse_spec.rb"=>{"finished" => true, "status"=>"pending"}, "spec/pig_spec.rb"=>{"finished" => true, "status"=>"error"}, "spec/dog_spec.rb"=>{"finished" => true, "status"=>"failed"}, "spec/cat_spec.rb"=>{"finished" => true, "status"=>"passed"}}}
904
+ stub_call_api_response(:get, "#{Tddium::Api::Path::SESSIONS}/#{SAMPLE_SESSION_ID}/#{Tddium::Api::Path::TEST_EXECUTIONS}", get_test_executions_response, get_test_executions_response_all_finished)
905
+ stub_sleep(tddium)
906
+ end
872
907
 
873
- it "should sleep for #{Tddium::Default::SLEEP_TIME_BETWEEN_POLLS} seconds" do
874
- tddium.should_receive(:sleep).exactly(1).times.with(Tddium::Default::SLEEP_TIME_BETWEEN_POLLS)
875
- run_spec(tddium)
876
- end
908
+ it "should sleep for #{Tddium::Default::SLEEP_TIME_BETWEEN_POLLS} seconds" do
909
+ tddium.should_receive(:sleep).exactly(1).times.with(Tddium::Default::SLEEP_TIME_BETWEEN_POLLS)
910
+ run_spec(tddium)
911
+ end
877
912
 
878
- it "should display a green '.'" do
879
- tddium.should_receive(:say).with(".", :green, false)
880
- run_spec(tddium)
881
- end
913
+ it "should display a green '.'" do
914
+ tddium.should_receive(:say).with(".", :green, false)
915
+ run_spec(tddium)
916
+ end
882
917
 
883
- it "should display a red 'F'" do
884
- tddium.should_receive(:say).with("F", :red, false)
885
- run_spec(tddium)
886
- end
918
+ it "should display a red 'F'" do
919
+ tddium.should_receive(:say).with("F", :red, false)
920
+ run_spec(tddium)
921
+ end
887
922
 
888
- it "should display a yellow '*'" do
889
- tddium.should_receive(:say).with("*", :yellow, false)
890
- run_spec(tddium)
891
- end
923
+ it "should display a yellow '*'" do
924
+ tddium.should_receive(:say).with("*", :yellow, false)
925
+ run_spec(tddium)
926
+ end
892
927
 
893
- it "should display 'E' with no color" do
894
- tddium.should_receive(:say).with("E", nil, false)
895
- run_spec(tddium)
896
- end
928
+ it "should display 'E' with no color" do
929
+ tddium.should_receive(:say).with("E", nil, false)
930
+ run_spec(tddium)
931
+ end
897
932
 
898
- it "should display a summary of all the tests" do
899
- tddium.should_receive(:say).with("4 examples, 1 failures, 1 errors, 1 pending")
900
- run_spec(tddium)
901
- end
933
+ it "should display a summary of all the tests" do
934
+ tddium.should_receive(:say).with("4 tests, 1 failures, 1 errors, 1 pending")
935
+ spec_should_fail do
936
+ tddium.should_receive(:exit_failure).once
937
+ end
938
+ end
902
939
 
903
- it "should save the spec options" do
904
- tddium.should_receive(:write_suite).with(SAMPLE_SUITE_ID, {"user_data_file" => nil, "max_parallelism" => 3, "test_pattern" => DEFAULT_TEST_PATTERN})
905
- run_spec(tddium, {:max_parallelism => 3})
940
+ it "should save the spec options" do
941
+ tddium.should_receive(:write_suite).with(SAMPLE_SUITE_ID, {"user_data_file" => nil, "max_parallelism" => 3, "test_pattern" => DEFAULT_TEST_PATTERN})
942
+ run_spec(tddium, {:max_parallelism => 3})
943
+ end
944
+
945
+ it_should_behave_like("test output summary")
906
946
  end
947
+ context "with no errors" do
948
+ before do
949
+ get_test_executions_response_all_passed = {
950
+ "report"=>SAMPLE_REPORT_URL,
951
+ "tests"=>{"spec/mouse_spec.rb"=>{"finished" => true, "status"=>"passed"},
952
+ "spec/pig_spec.rb"=>{"finished" => true, "status"=>"passed"},
953
+ "spec/dog_spec.rb"=>{"finished" => true, "status"=>"passed"},
954
+ "spec/cat_spec.rb"=>{"finished" => true, "status"=>"passed"}}}
955
+ stub_call_api_response(:get, "#{Tddium::Api::Path::SESSIONS}/#{SAMPLE_SESSION_ID}/#{Tddium::Api::Path::TEST_EXECUTIONS}", get_test_executions_response_all_passed)
956
+ stub_sleep(tddium)
957
+ end
907
958
 
908
- it_should_behave_like("test output summary")
959
+ it "should display a green '.'" do
960
+ tddium.should_receive(:say).with(".", :green, false)
961
+ run_spec(tddium)
962
+ end
963
+
964
+ it "should not display a red 'F'" do
965
+ tddium.should_not_receive(:say).with("F", :red, false)
966
+ run_spec(tddium)
967
+ end
968
+
969
+ it "should not display a yellow '*'" do
970
+ tddium.should_not_receive(:say).with("*", :yellow, false)
971
+ run_spec(tddium)
972
+ end
973
+
974
+ it "should not display 'E' with no color" do
975
+ tddium.should_not_receive(:say).with("E", nil, false)
976
+ run_spec(tddium)
977
+ end
978
+
979
+ it "should display a summary of all the tests" do
980
+ tddium.should_receive(:say).with("4 tests, 0 failures, 0 errors, 0 pending")
981
+ spec_should_pass do
982
+ tddium.should_not_receive(:exit_failure)
983
+ end
984
+ end
985
+
986
+ it "should save the spec options" do
987
+ tddium.should_receive(:write_suite).with(SAMPLE_SUITE_ID, {"user_data_file" => nil, "max_parallelism" => 3, "test_pattern" => DEFAULT_TEST_PATTERN})
988
+ run_spec(tddium, {:max_parallelism => 3})
989
+ end
990
+
991
+ it_should_behave_like("test output summary")
992
+ end
909
993
  end
910
994
 
911
995
  it_should_behave_like "an unsuccessful api call"
metadata CHANGED
@@ -2,7 +2,7 @@
2
2
  name: tddium-preview
3
3
  version: !ruby/object:Gem::Version
4
4
  prerelease:
5
- version: 0.1.4
5
+ version: 0.1.5
6
6
  platform: ruby
7
7
  authors:
8
8
  - Solano Labs