makevoid-taza 0.8.6

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 (70) hide show
  1. data/History.txt +74 -0
  2. data/Manifest.txt +61 -0
  3. data/README +79 -0
  4. data/README.textile +1 -0
  5. data/VERSION.yml +4 -0
  6. data/bin/taza +17 -0
  7. data/generators/flow/flow_generator.rb +57 -0
  8. data/generators/flow/templates/flow.rb.erb +9 -0
  9. data/generators/page/page_generator.rb +58 -0
  10. data/generators/page/templates/functional_page_spec.rb.erb +8 -0
  11. data/generators/page/templates/page.rb.erb +8 -0
  12. data/generators/partial/partial_generator.rb +57 -0
  13. data/generators/partial/templates/partial.rb.erb +7 -0
  14. data/generators/site/site_generator.rb +56 -0
  15. data/generators/site/templates/site.rb.erb +10 -0
  16. data/generators/site/templates/site.yml.erb +3 -0
  17. data/lib/app_generators/taza/taza_generator.rb +74 -0
  18. data/lib/app_generators/taza/templates/config.yml.erb +3 -0
  19. data/lib/app_generators/taza/templates/rakefile.rb.erb +10 -0
  20. data/lib/app_generators/taza/templates/spec_helper.rb.erb +11 -0
  21. data/lib/extensions/array.rb +10 -0
  22. data/lib/extensions/hash.rb +15 -0
  23. data/lib/extensions/object.rb +33 -0
  24. data/lib/extensions/string.rb +11 -0
  25. data/lib/taza.rb +24 -0
  26. data/lib/taza/browser.rb +53 -0
  27. data/lib/taza/entity.rb +55 -0
  28. data/lib/taza/fixture.rb +68 -0
  29. data/lib/taza/fixtures.rb +24 -0
  30. data/lib/taza/flow.rb +40 -0
  31. data/lib/taza/page.rb +128 -0
  32. data/lib/taza/settings.rb +33 -0
  33. data/lib/taza/site.rb +150 -0
  34. data/lib/taza/tasks.rb +54 -0
  35. data/spec/array_spec.rb +17 -0
  36. data/spec/browser_spec.rb +86 -0
  37. data/spec/entity_spec.rb +35 -0
  38. data/spec/fixture_spec.rb +51 -0
  39. data/spec/fixtures_spec.rb +47 -0
  40. data/spec/flow_generator_spec.rb +50 -0
  41. data/spec/hash_spec.rb +15 -0
  42. data/spec/object_spec.rb +29 -0
  43. data/spec/page_generator_spec.rb +56 -0
  44. data/spec/page_module_spec.rb +165 -0
  45. data/spec/page_spec.rb +105 -0
  46. data/spec/partial_generator_spec.rb +38 -0
  47. data/spec/project_generator_spec.rb +56 -0
  48. data/spec/sandbox/config.yml +3 -0
  49. data/spec/sandbox/config/config.yml +1 -0
  50. data/spec/sandbox/config/site_name.yml +5 -0
  51. data/spec/sandbox/fixtures/examples.yml +15 -0
  52. data/spec/sandbox/fixtures/foo_site/bars.yml +2 -0
  53. data/spec/sandbox/fixtures/foos.yml +3 -0
  54. data/spec/sandbox/fixtures/users.yml +3 -0
  55. data/spec/sandbox/flows/batman.rb +5 -0
  56. data/spec/sandbox/flows/robin.rb +4 -0
  57. data/spec/sandbox/pages/foo/bar.rb +9 -0
  58. data/spec/sandbox/pages/foo/bay.rb +10 -0
  59. data/spec/sandbox/pages/foo/baz.rb +11 -0
  60. data/spec/sandbox/pages/foo/partials/partial_the_reckoning.rb +2 -0
  61. data/spec/settings_spec.rb +92 -0
  62. data/spec/site_fixtures_spec.rb +17 -0
  63. data/spec/site_generator_spec.rb +56 -0
  64. data/spec/site_spec.rb +268 -0
  65. data/spec/spec_helper.rb +57 -0
  66. data/spec/string_spec.rb +8 -0
  67. data/spec/taza_bin_spec.rb +13 -0
  68. data/spec/taza_tasks_spec.rb +56 -0
  69. data/taza.gemspec +46 -0
  70. metadata +196 -0
@@ -0,0 +1,105 @@
1
+ require 'spec/spec_helper'
2
+ require 'taza/page'
3
+
4
+ describe Taza::Page do
5
+
6
+ class ElementAndFilterContextExample < Taza::Page
7
+ element(:sample_element) {browser}
8
+ filter:sample_filter, :sample_element
9
+ def sample_filter
10
+ browser
11
+ end
12
+ end
13
+
14
+ class RecursiveFilterExample < Taza::Page
15
+ element(:foo) {}
16
+ filter :sample_filter
17
+ def sample_filter
18
+ foo
19
+ true
20
+ end
21
+ end
22
+
23
+ it "should not enter a infinite loop if you call a filtered element inside of a filter" do
24
+ page = RecursiveFilterExample.new
25
+ lambda { page.foo }.should_not raise_error
26
+ end
27
+
28
+ it "should execute an element's block with the params provided for its method" do
29
+ Taza::Page.element(:boo){|baz| baz}
30
+ Taza::Page.new.boo("rofl").should == "rofl"
31
+ end
32
+
33
+ it "should execute elements and filters in the context of the page instance" do
34
+ page = ElementAndFilterContextExample.new
35
+ page.browser = :something
36
+ page.sample_element.should eql(:something)
37
+ end
38
+
39
+ it "should add a filter to the classes filters" do
40
+ ElementAndFilterContextExample.filters.size.should eql(1)
41
+ end
42
+
43
+ it "should store the block given to the element method in a method with the name of the parameter" do
44
+ Taza::Page.element(:foo) do
45
+ "bar"
46
+ end
47
+ Taza::Page.new.foo.should == "bar"
48
+ end
49
+
50
+ class FilterAllElements < Taza::Page
51
+ element(:foo) {}
52
+ element(:apple) {}
53
+ filter :false_filter
54
+
55
+ def false_filter
56
+ false
57
+ end
58
+ end
59
+
60
+ it "should filter all elements if element argument is not provided" do
61
+ lambda { FilterAllElements.new.apple }.should raise_error(Taza::FilterError)
62
+ lambda { FilterAllElements.new.foo }.should raise_error(Taza::FilterError)
63
+ end
64
+
65
+ it "should have empty elements on a new class" do
66
+ foo = Class::new(superclass=Taza::Page)
67
+ foo.elements.should_not be_nil
68
+ foo.elements.should be_empty
69
+ end
70
+
71
+ it "should have empty filters on a new class" do
72
+ foo = Class::new(superclass=Taza::Page)
73
+ foo.filters.should_not be_nil
74
+ foo.filters.should be_empty
75
+ end
76
+
77
+ class FilterAnElement < Taza::Page
78
+ attr_accessor :called_element_method
79
+ element(:false_item) { @called_element_method = true}
80
+ filter :false_filter, :false_item
81
+
82
+ def false_filter
83
+ false
84
+ end
85
+ end
86
+
87
+ it "should raise a error if an elements is called and its filter returns false" do
88
+ lambda { FilterAnElement.new.false_item }.should raise_error(Taza::FilterError)
89
+ end
90
+
91
+ it "should not call element block if filters fail" do
92
+ page = FilterAnElement.new
93
+ lambda { page.false_item }.should raise_error
94
+ page.called_element_method.should_not be_true
95
+ end
96
+
97
+ it "should not allow more than one element descriptor with the same element name" do
98
+ lambda{
99
+ class DuplicateElements < Taza::Page
100
+ element(:foo) { true }
101
+ element(:foo) { false }
102
+ end
103
+ }.should raise_error(Taza::ElementError)
104
+ end
105
+ end
@@ -0,0 +1,38 @@
1
+ require 'spec/spec_helper'
2
+ require 'rubygems'
3
+ require 'fileutils'
4
+ require 'taza/page'
5
+
6
+ describe "Partial Generation" do
7
+ include RubiGen::GeneratorTestHelper
8
+ include Helpers::Generator
9
+ include Helpers::Taza
10
+
11
+ before :all do
12
+ @site_name = "Foo"
13
+ @site_folder = File.join(PROJECT_FOLDER,'lib','sites',"gap")
14
+ @site_file = File.join(PROJECT_FOLDER,'lib','sites',"gap.rb")
15
+ @partial_name = "Header"
16
+ end
17
+
18
+ before :each do
19
+ run_generator('taza', [APP_ROOT], generator_sources)
20
+ @site_class = generate_site(@site_name)
21
+ end
22
+
23
+ after :each do
24
+ bare_teardown
25
+ end
26
+
27
+ it "should give you usage if you do not give two arguments" do
28
+ PartialGenerator.any_instance.expects(:usage)
29
+ lambda { run_generator('partial', [@partial_name], generator_sources) }.should raise_error
30
+ end
31
+
32
+ it "should give you usage if you give a site that does not exist" do
33
+ PartialGenerator.any_instance.expects(:usage)
34
+ $stderr.expects(:puts).with(regexp_matches(/NoSuchSite/))
35
+ lambda { run_generator('partial', [@partial_name,"NoSuchSite"], generator_sources) }.should raise_error
36
+ end
37
+
38
+ end
@@ -0,0 +1,56 @@
1
+ require 'spec/spec_helper'
2
+ require 'rubygems'
3
+ require 'rake'
4
+ require 'fileutils'
5
+
6
+ describe "Project Generator" do
7
+ include RubiGen::GeneratorTestHelper
8
+
9
+ before :all do
10
+ @spec_helper = File.join(TMP_ROOT,PROJECT_NAME,'spec','spec_helper.rb')
11
+ @rakefile = File.join(TMP_ROOT,PROJECT_NAME,'rakefile')
12
+ end
13
+
14
+ before :each do
15
+ bare_setup
16
+ end
17
+
18
+ after :each do
19
+ bare_teardown
20
+ end
21
+
22
+ it "should generate a spec helper that can be required" do
23
+ run_generator('taza', [APP_ROOT], generator_sources)
24
+ system("ruby -c #{@spec_helper} > #{null_device}").should be_true
25
+ end
26
+
27
+ it "should generate a rakefile that can be required" do
28
+ run_generator('taza', [APP_ROOT], generator_sources)
29
+ system("ruby -c #{@spec_helper} > #{null_device}").should be_true
30
+ end
31
+
32
+ it "spec helper should set the TAZA_ENV variable if it is not provided" do
33
+ ENV['TAZA_ENV'] = nil
34
+ run_generator('taza', [APP_ROOT], generator_sources)
35
+ load @spec_helper
36
+ ENV['TAZA_ENV'].should eql("isolation")
37
+ end
38
+
39
+ it "spec helper should not override the TAZA_ENV variable if was provided" do
40
+ ENV['TAZA_ENV'] = 'orange pie? is there such a thing?'
41
+ run_generator('taza', [APP_ROOT], generator_sources)
42
+ load @spec_helper
43
+ ENV['TAZA_ENV'].should eql('orange pie? is there such a thing?')
44
+ end
45
+
46
+ it "should generate a console script" do
47
+ run_generator('taza', [APP_ROOT], generator_sources)
48
+ File.exists?(File.join(APP_ROOT,'script','console')).should be_true
49
+ end
50
+
51
+ it "should generate a windows console script" do
52
+ run_generator('taza', [APP_ROOT], generator_sources)
53
+ File.exists?(File.join(APP_ROOT,'script','console.cmd')).should be_true
54
+ end
55
+
56
+ end
@@ -0,0 +1,3 @@
1
+ ---
2
+ :browser: :default_browser
3
+ :driver: :default_driver
@@ -0,0 +1 @@
1
+ nothing: something
@@ -0,0 +1,5 @@
1
+ ---
2
+ isolation:
3
+ :url: http://google.com
4
+ clown_shoes:
5
+ :url: http://clownshoes.com
@@ -0,0 +1,15 @@
1
+ first_example:
2
+ name: first
3
+ user: shatner
4
+ price: 1
5
+ second_example:
6
+ name: second
7
+ price: 2
8
+ user: shatner
9
+ third_example:
10
+ name: third
11
+ price: 3
12
+ user: shatner
13
+ forth_example:
14
+ something:
15
+ user: shatner
@@ -0,0 +1,2 @@
1
+ foo:
2
+ name: "foo"
@@ -0,0 +1,3 @@
1
+ gap:
2
+ examples: first_example, second_example
3
+
@@ -0,0 +1,3 @@
1
+ shatner:
2
+ name: William Shatner
3
+ age: <%=65+1%>
@@ -0,0 +1,5 @@
1
+ class Barz
2
+ def batman_flow
3
+ "i am batman"
4
+ end
5
+ end
@@ -0,0 +1,4 @@
1
+ class Robin < ::Taza::Flow
2
+ def run(params)
3
+ end
4
+ end
@@ -0,0 +1,9 @@
1
+ class Bar < Taza::Page
2
+ element :foo do
3
+ browser
4
+ end
5
+
6
+ filter :name => :baz, :elements => [:foo] do
7
+ true
8
+ end
9
+ end
@@ -0,0 +1,10 @@
1
+ class Baz < Taza::Page
2
+ page_module :another_module do
3
+ element(:some_element) { :another_some_element_value }
4
+ end
5
+
6
+ filter :bay, :another_module
7
+ def bay
8
+ true
9
+ end
10
+ end
@@ -0,0 +1,11 @@
1
+ class Baz < Taza::Page
2
+ page_module :module do
3
+ element(:some_element) { :some_element_value }
4
+ element(:other_element) { :other_element_value }
5
+ end
6
+
7
+ filter :boo, :module
8
+ def boo
9
+ true
10
+ end
11
+ end
@@ -0,0 +1,2 @@
1
+ class PartialTheReckoning < Taza::Page
2
+ end
@@ -0,0 +1,92 @@
1
+ require 'spec/spec_helper'
2
+ require 'rubygems'
3
+ require 'taza/settings'
4
+ require 'taza/options'
5
+ require 'taza/site'
6
+
7
+ describe Taza::Settings do
8
+
9
+ before :all do
10
+ @site_name = 'SiteName'
11
+ end
12
+
13
+ before :each do
14
+ ENV['TAZA_ENV'] = 'isolation'
15
+ ENV['BROWSER'] = nil
16
+ ENV['DRIVER'] = nil
17
+ ENV['ATTACH'] = nil
18
+ end
19
+
20
+ it "should use environment variable for browser settings" do
21
+ Taza::Settings.stubs(:path).returns("spec/sandbox")
22
+ ENV['BROWSER'] = 'foo'
23
+ Taza::Settings.config(@site_name)[:browser].should eql('foo')
24
+ end
25
+
26
+ it "should provide default values if no config file or environment settings provided" do
27
+ Taza::Settings.stubs(:path).returns("spec/sandbox")
28
+ Taza::Settings.config(@site_name)[:driver].should eql('selenium')
29
+ Taza::Settings.config(@site_name)[:browser].should eql('firefox')
30
+ Taza::Settings.config(@site_name)[:attach].should eql(false)
31
+ end
32
+
33
+ it "should use environment variable for driver settings" do
34
+ Taza::Settings.stubs(:path).returns("spec/sandbox")
35
+ ENV['DRIVER'] = 'bar'
36
+ Taza::Settings.config(@site_name)[:driver].should eql('bar')
37
+ end
38
+
39
+ it "should be able to load the site yml" do
40
+ Taza::Settings.stubs(:path).returns("spec/sandbox")
41
+ Taza::Settings.config("SiteName")[:url].should eql('http://google.com')
42
+ end
43
+
44
+ it "should be able to load a alternate site url" do
45
+ ENV['TAZA_ENV'] = 'clown_shoes'
46
+ Taza::Settings.stubs(:path).returns("spec/sandbox")
47
+ Taza::Settings.config("SiteName")[:url].should eql('http://clownshoes.com')
48
+ end
49
+
50
+ it "should use the config file's variable for browser settings if no environment variable is set" do
51
+ UserChoices::YamlConfigFileSource.any_instance.stubs(:format_specific_reading).returns({'browser' => 'fu'})
52
+ Taza::Settings.stubs(:path).returns("./spec/sandbox")
53
+ Taza::Settings.config(@site_name)[:browser].should eql('fu')
54
+ end
55
+
56
+ it "should use the ENV variables if specfied instead of config files" do
57
+ ENV['BROWSER'] = 'opera'
58
+ UserChoices::YamlConfigFileSource.any_instance.stubs(:format_specific_reading).returns({'browser' => 'fu'})
59
+ Taza::Settings.stubs(:path).returns("spec/sandbox")
60
+ Taza::Settings.config(@site_name)[:browser].should eql('opera')
61
+ end
62
+
63
+ it "should use the correct config file to set defaults" do
64
+ Taza::Settings.stubs(:path).returns("spec/sandbox")
65
+ Taza::Settings.stubs(:config_file_path).returns('spec/sandbox/config.yml')
66
+ end
67
+
68
+ it "should raise error for a config file that doesnot exist" do
69
+ Taza::Settings.stubs(:path).returns('spec/sandbox/file_not_exists.yml')
70
+ lambda {Taza::Settings.config}.should raise_error
71
+ end
72
+
73
+ it "should path point at root directory" do
74
+ Taza::Settings.path.should eql('.')
75
+ end
76
+
77
+ it "should use the config file's variable for driver settings if no environment variable is set" do
78
+ UserChoices::YamlConfigFileSource.any_instance.stubs(:format_specific_reading).returns({'driver' => 'fun'})
79
+ Taza::Settings.stubs(:path).returns("spec/sandbox")
80
+ Taza::Settings.config(@site_name)[:driver].should eql('fun')
81
+ end
82
+
83
+ class SiteName < Taza::Site
84
+
85
+ end
86
+
87
+ it "a site should be able to load its settings" do
88
+ Taza::Settings.stubs(:path).returns("spec/sandbox")
89
+ SiteName.settings[:url].should eql('http://google.com')
90
+ end
91
+
92
+ end
@@ -0,0 +1,17 @@
1
+ require 'spec/spec_helper'
2
+ require 'taza/fixture'
3
+
4
+ describe "Site Specific Fixtures" do
5
+ Taza::Fixture.stubs(:base_path).returns(File.join('.','spec','sandbox','fixtures',''))
6
+ require 'taza/fixtures'
7
+ include Taza::Fixtures::FooSite
8
+
9
+ it "should be able to access fixtures in sub-folders" do
10
+ bars(:foo).name.should eql("foo")
11
+ end
12
+
13
+ it "should not be able to access non-site-specific fixtures" do
14
+ lambda{foos(:gap)}.should raise_error(NoMethodError)
15
+ end
16
+
17
+ end
@@ -0,0 +1,56 @@
1
+ require 'spec/spec_helper'
2
+ require 'rubygems'
3
+ require 'fileutils'
4
+
5
+ describe "Site Generation" do
6
+ include RubiGen::GeneratorTestHelper
7
+ include Helpers::Generator
8
+ include Helpers::Taza
9
+
10
+ before :all do
11
+ @spec_helper = File.join(TMP_ROOT,PROJECT_NAME,'spec','spec_helper.rb')
12
+ @site_name = "WikipediaFoo"
13
+ @site_file = File.join(PROJECT_FOLDER,'lib','sites' , "wikipedia_foo.rb")
14
+ @site_folder = File.join(PROJECT_FOLDER,'lib','sites' , "wikipedia_foo")
15
+ end
16
+
17
+ before :each do
18
+ bare_setup
19
+ run_generator('taza', [APP_ROOT], generator_sources)
20
+ end
21
+
22
+ after :each do
23
+ bare_teardown
24
+ end
25
+
26
+ it "should generate configuration file for a site" do
27
+ run_generator('site', [@site_name], generator_sources)
28
+ File.exists?(File.join(PROJECT_FOLDER,'config','wikipedia_foo.yml')).should be_true
29
+ end
30
+
31
+ it "should generate a site path for pages" do
32
+ run_generator('site', [@site_name], generator_sources)
33
+ File.directory?(@site_folder).should be_true
34
+ end
35
+
36
+ it "should generate a partials folder under pages" do
37
+ run_generator('site', [@site_name], generator_sources)
38
+ File.directory?(File.join(@site_folder,"pages","partials")).should be_true
39
+ end
40
+
41
+ it "should generate a folder for a sites isolation tests" do
42
+ run_generator('site', [@site_name], generator_sources)
43
+ File.directory?(File.join(PROJECT_FOLDER,'spec','isolation','wikipedia_foo')).should be_true
44
+ end
45
+
46
+ it "generated site that uses the block given in new" do
47
+ @site_class = generate_site(@site_name)
48
+ stub_settings
49
+ stub_browser
50
+ foo = nil
51
+ @site_class.new {|site| foo = site}
52
+ foo.should_not be_nil
53
+ foo.should be_a_kind_of(Taza::Site)
54
+ end
55
+
56
+ end