kameleon 0.0.5 → 0.0.6

Sign up to get free protection for your applications and to get access to all the features.
Files changed (54) hide show
  1. data/lib/kameleon/dsl/act.rb +73 -22
  2. data/lib/kameleon/dsl/see.rb +101 -20
  3. data/lib/kameleon/session/capybara.rb +11 -0
  4. data/lib/kameleon/user/abstract.rb +78 -6
  5. data/spec/sample_rack_app/hey.rb +11 -4
  6. data/spec/spec_helper.rb +12 -0
  7. data/spec/support/deferred_garbage_collection.rb +20 -0
  8. data/spec/unit/act/click_spec.rb +52 -0
  9. data/spec/unit/act/fill_in/attach_file_spec.rb +27 -0
  10. data/spec/unit/act/fill_in/checkbox_spec.rb +87 -0
  11. data/spec/unit/act/fill_in/date_ranges_spec.rb +24 -0
  12. data/spec/unit/act/fill_in/multiple_select_spec.rb +42 -0
  13. data/spec/unit/act/fill_in/radio_button_spec.rb +35 -0
  14. data/spec/unit/act/fill_in/select_spec.rb +35 -0
  15. data/spec/unit/act/fill_in/text_area_spec.rb +52 -0
  16. data/spec/unit/act/fill_in/text_input_spec.rb +52 -0
  17. data/spec/unit/act/on_hover_spec.rb +34 -0
  18. data/spec/unit/dsl/not_see/form_elements/fields/empty_spec.rb +38 -0
  19. data/spec/unit/dsl/not_see/form_elements/fields/readonly_spec.rb +38 -0
  20. data/spec/unit/dsl/not_see/form_elements/fields_spec.rb +24 -0
  21. data/spec/unit/dsl/not_see/form_elements/textareas_spec.rb +25 -0
  22. data/spec/unit/dsl/not_see/form_elements/texts_spec.rb +26 -0
  23. data/spec/unit/dsl/not_see/in_scopes_spec.rb +61 -0
  24. data/spec/unit/dsl/not_see/special_elements/buttons_spec.rb +24 -0
  25. data/spec/unit/dsl/not_see/special_elements/error_message_for_spec.rb +24 -0
  26. data/spec/unit/dsl/not_see/special_elements/images_spec.rb +24 -0
  27. data/spec/unit/dsl/not_see/special_elements/links_spec.rb +46 -0
  28. data/spec/unit/dsl/not_see/special_elements/ordered_texts_spec.rb +21 -0
  29. data/spec/unit/dsl/not_see/special_selectors_spec.rb +35 -0
  30. data/spec/unit/dsl/not_see/texts_spec.rb +24 -0
  31. data/spec/unit/dsl/see/counted_elements_spec.rb +26 -0
  32. data/spec/unit/dsl/see/form_elements/checkboxes_spec.rb +45 -0
  33. data/spec/unit/dsl/see/form_elements/fields/disabled_spec.rb +30 -0
  34. data/spec/unit/dsl/see/form_elements/fields/empty_spec.rb +28 -0
  35. data/spec/unit/dsl/see/form_elements/fields/readonly_spec.rb +38 -0
  36. data/spec/unit/dsl/see/form_elements/fields_spec.rb +28 -0
  37. data/spec/unit/dsl/see/form_elements/multiple_selects_spec.rb +47 -0
  38. data/spec/unit/dsl/see/form_elements/radio_buttons_spec.rb +35 -0
  39. data/spec/unit/dsl/see/form_elements/selects_spec.rb +40 -0
  40. data/spec/unit/dsl/see/form_elements/textareas_spec.rb +29 -0
  41. data/spec/unit/dsl/see/form_elements/texts_spec.rb +29 -0
  42. data/spec/unit/dsl/see/in_scopes_spec.rb +83 -0
  43. data/spec/unit/dsl/see/special_elements/buttons_spec.rb +28 -0
  44. data/spec/unit/dsl/see/special_elements/error_message_for_spec.rb +24 -0
  45. data/spec/unit/dsl/see/special_elements/images_spec.rb +28 -0
  46. data/spec/unit/dsl/see/special_elements/links_spec.rb +55 -0
  47. data/spec/unit/dsl/see/special_elements/ordered_texts_spec.rb +21 -0
  48. data/spec/unit/dsl/see/special_selectors_spec.rb +53 -0
  49. data/spec/unit/dsl/see/texts_spec.rb +24 -0
  50. data/spec/unit/guest_spec.rb +24 -45
  51. data/spec/unit/user_base_spec.rb +1 -1
  52. metadata +78 -13
  53. data/spec/unit/act_spec.rb +0 -99
  54. data/spec/unit/see_spec.rb +0 -242
@@ -0,0 +1,45 @@
1
+ #encoding: utf-8
2
+ require 'spec_helper'
3
+
4
+ describe '#see form elements - checkboxes' do
5
+ before do
6
+ Capybara.app = Hey.new('form_elements.html')
7
+ @user = Kameleon::User::Guest.new(self)
8
+ end
9
+
10
+ context 'when status checked' do
11
+ it 'should verify by label' do
12
+ @user.see :checked => 'Option two can also be checked and included in form results'
13
+ end
14
+
15
+ it 'should verify by name' do
16
+ @user.see :checked => 'optionsCheckboxes_two'
17
+ end
18
+
19
+ it 'should verify many at once' do
20
+ @user.see :checked => ['Appended checkbox', 'appendedInput', 'optionsCheckboxes_two']
21
+ end
22
+ end
23
+
24
+ context 'when status unchecked' do
25
+ it 'should verify by label' do
26
+ @user.see :unchecked => "Option one is this and that—be sure to include why it's great"
27
+ end
28
+
29
+ it 'should verify by name' do
30
+ @user.see :unchecked => 'optionsCheckboxes_one'
31
+ end
32
+
33
+ it 'should verify many at once' do
34
+ @user.see :unchecked => ['Prepended checkbox', 'optionsCheckboxes', 'optionsCheckboxes_one']
35
+ end
36
+ end
37
+
38
+ context 'when at least one has other status than other checkboxes' do
39
+ it 'should raise error' do
40
+ expect do
41
+ @user.see :checked =>['Appended checkbox', 'appendedInput', 'optionsCheckboxes_one']
42
+ end.to raise_error(RSpec::Expectations::ExpectationNotMetError)
43
+ end
44
+ end
45
+ end
@@ -0,0 +1,30 @@
1
+ require 'spec_helper'
2
+
3
+ describe '#see disabled fields' do
4
+ before do
5
+ Capybara.app = Hey.new('form_elements.html')
6
+ @user = Kameleon::User::Guest.new(self)
7
+ end
8
+
9
+ it 'should verify status for id' do
10
+ @user.see :disabled => 'disabledInput'
11
+ end
12
+
13
+ it 'should verify status for label' do
14
+ @user.see :disabled => 'Disabled input'
15
+ end
16
+
17
+ context 'when many disabled fields at once' do
18
+ it 'should verify status' do
19
+ @user.see :disabled => ['Disabled input', 'Disabled textarea']
20
+ end
21
+
22
+ context 'when at least one is enabled' do
23
+ it 'should raise error' do
24
+ expect do
25
+ @user.see :disabled => ['Disabled input', 'Disabled textarea', 'X-Large input']
26
+ end.to raise_error(RSpec::Expectations::ExpectationNotMetError)
27
+ end
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,28 @@
1
+ require 'spec_helper'
2
+
3
+ describe '#see empty fields' do
4
+ before do
5
+ Capybara.app = Hey.new('form_elements.html')
6
+ @user = Kameleon::User::Guest.new(self)
7
+ end
8
+
9
+ it 'should verify status for id' do
10
+ @user.see :empty => 'prependedInput'
11
+ end
12
+
13
+ it 'should verify status for label' do
14
+ @user.see :empty => 'Prepended text'
15
+ end
16
+
17
+ it 'should verify status for many fields' do
18
+ @user.see :empty => ['Prepended text', 'Textarea']
19
+ end
20
+
21
+ context 'when at least one is not empty' do
22
+ it 'should raise error' do
23
+ expect do
24
+ @user.see :empty => ['Prepended text', 'Sample Input']
25
+ end.to raise_error(RSpec::Expectations::ExpectationNotMetError)
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,38 @@
1
+ require 'spec_helper'
2
+
3
+ describe '#see readonly fields' do
4
+ before do
5
+ Capybara.app = Hey.new('form_elements.html')
6
+ @user = Kameleon::User::Guest.new(self)
7
+ end
8
+
9
+ context 'when text inside fields is not provied' do
10
+ it 'should verify status for id' do
11
+ @user.see :readonly => 'readonlyInput'
12
+ end
13
+
14
+ it 'should verify status for label' do
15
+ @user.see :readonly => 'Readonly input'
16
+ end
17
+
18
+ it 'should verify many fields at once' do
19
+ @user.see :readonly => ['Readonly input', 'Readonly textarea']
20
+ end
21
+
22
+ context 'when field does not exist' do
23
+ it 'should raise error' do
24
+ expect do
25
+ @user.see :readonly => 'DoesNotExist'
26
+ end.to raise_error(RSpec::Expectations::ExpectationNotMetError)
27
+ end
28
+ end
29
+
30
+ context 'when at least one is not readonly' do
31
+ it 'should raise error' do
32
+ expect do
33
+ @user.see :readonly => ['Readonly input', 'X-Large input']
34
+ end.to raise_error(RSpec::Expectations::ExpectationNotMetError)
35
+ end
36
+ end
37
+ end
38
+ end
@@ -0,0 +1,28 @@
1
+ require 'spec_helper'
2
+
3
+ describe '#see form elements - fields' do
4
+ before do
5
+ Capybara.app = Hey.new('form_elements.html')
6
+ @user = Kameleon::User::Guest.new(self)
7
+ end
8
+
9
+ it 'should see by label' do
10
+ @user.see :field => 'X-Large input'
11
+ end
12
+
13
+ it 'should see by id' do
14
+ @user.see :field => 'xlInput'
15
+ end
16
+
17
+ it 'should see many at once' do
18
+ @user.see :fields => ['xlInput', 'multiSelect']
19
+ end
20
+
21
+ context 'when at least one does not exist' do
22
+ it 'should raise error' do
23
+ expect do
24
+ @user.see :field => 'doestNotExist'
25
+ end.to raise_error(RSpec::Expectations::ExpectationNotMetError)
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,47 @@
1
+ require 'spec_helper'
2
+
3
+ describe '#see form elements - multiple selects' do
4
+ before do
5
+ Capybara.app = Hey.new('form_elements.html')
6
+ @user = Kameleon::User::Guest.new(self)
7
+ end
8
+
9
+ context 'when status "selected"' do
10
+ it 'should verify by id' do
11
+ @user.see :selected => {'3' => 'normalSelect'}
12
+ end
13
+
14
+ it 'should verify by label' do
15
+ @user.see :selected => {'3' => 'Select one option'}
16
+ end
17
+
18
+ it 'should verify many at once' do
19
+ @user.see :selected => {'3' => 'Select one option',
20
+ 'second option' => 'Disabled select one option'}
21
+ end
22
+ end
23
+
24
+ context 'when status "unselected"' do
25
+ it 'should verify by id' do
26
+ @user.see :unselected => {'1' => 'Select one option'}
27
+ end
28
+
29
+ it 'should verify by label' do
30
+ @user.see :unselected => {'5' => 'normalSelect'}
31
+ end
32
+
33
+ it 'should verify many status at once' do
34
+ @user.see :unselected => {'5' => 'Select one option',
35
+ '2' => 'Select one option'}
36
+ end
37
+ end
38
+
39
+ context 'at least one has other status' do
40
+ it 'should raise error' do
41
+ expect do
42
+ @user.see :selected => {'5' => 'Select one option',
43
+ '3' => 'Select one option'}
44
+ end.to raise_error(RSpec::Expectations::ExpectationNotMetError)
45
+ end
46
+ end
47
+ end
@@ -0,0 +1,35 @@
1
+ #encoding: utf-8
2
+ require 'spec_helper'
3
+
4
+ describe '#see form elements - radio buttons' do
5
+ before do
6
+ Capybara.app = Hey.new('form_elements.html')
7
+ @user = Kameleon::User::Guest.new(self)
8
+ end
9
+
10
+ context 'status "checked"' do
11
+ it 'should verify checked status' do
12
+ @user.see :checked => "Option one is this and that—be sure to include why it's great"
13
+ end
14
+ end
15
+
16
+ context 'status "unchecked"' do
17
+ it 'should verify unchecked status' do
18
+ @user.see :unchecked => "Option two can is something else and selecting it will deselect options 1"
19
+ end
20
+
21
+ it 'should verify many radio buttons at once' do
22
+ @user.see :unchecked => ["Option two can is something else and selecting it will deselect options 1",
23
+ "Option three can is something else and selecting it will deselect options 1"]
24
+ end
25
+ end
26
+
27
+ context 'at least one has other status' do
28
+ it 'should raise error' do
29
+ expect do
30
+ @user.see :checked => ["Option one is this and that—be sure to include why it's great",
31
+ "Option two can is something else and selecting it will deselect options 1"]
32
+ end.to raise_error(RSpec::Expectations::ExpectationNotMetError)
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,40 @@
1
+ require 'spec_helper'
2
+
3
+ describe '#see form elements - selects' do
4
+ before do
5
+ Capybara.app = Hey.new('form_elements.html')
6
+ @user = Kameleon::User::Guest.new(self)
7
+ end
8
+
9
+ context 'status "selected"' do
10
+ it 'should verify by id' do
11
+ @user.see :selected => { '3' => 'normalSelect' }
12
+ end
13
+
14
+ it 'should verify by label' do
15
+ @user.see :selected => { '3' => 'Select' }
16
+ end
17
+ end
18
+
19
+ context 'status "unselected"' do
20
+ it 'should verify by id' do
21
+ @user.see :unselected => { '2' => 'normalSelect' }
22
+ end
23
+
24
+ it 'should verify by label' do
25
+ @user.see :unselected => { '4' => 'Select' }
26
+ end
27
+
28
+ it 'should verify many options at once' do
29
+ @user.see :unselected => { '1' => 'Select', '2' => 'Select' }
30
+ end
31
+ end
32
+
33
+ context 'at least one has other status' do
34
+ it 'should raise error' do
35
+ expect do
36
+ @user.see :selected => { '1' => 'Select', '3' => 'Select', '2' => 'Select' }
37
+ end.to raise_error(RSpec::Expectations::ExpectationNotMetError)
38
+ end
39
+ end
40
+ end
@@ -0,0 +1,29 @@
1
+ require 'spec_helper'
2
+
3
+ describe '#see form elements - textareas' do
4
+ before do
5
+ Capybara.app = Hey.new('form_elements.html')
6
+ @user = Kameleon::User::Guest.new(self)
7
+ end
8
+
9
+ it 'should see by id' do
10
+ @user.see 'sample text in textarea' => 'textarea3'
11
+ end
12
+
13
+ it 'should see by label' do
14
+ @user.see 'sample text in textarea' => 'Textarea 3'
15
+ end
16
+
17
+ it 'should see many at once' do
18
+ @user.see 'sample text in second textarea 2' => 'secondTextarea2',
19
+ 'sample text in textarea' => 'textarea3'
20
+ end
21
+
22
+ context 'when it does not exist' do
23
+ it 'should raise error' do
24
+ expect do
25
+ @user.see 'this is great value' => 'textareaDoesNotExist'
26
+ end.should raise_error(RSpec::Expectations::ExpectationNotMetError)
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,29 @@
1
+ require 'spec_helper'
2
+
3
+ describe '#see form elements - text inputs' do
4
+ before do
5
+ Capybara.app = Hey.new('form_elements.html')
6
+ @user = Kameleon::User::Guest.new(self)
7
+ end
8
+
9
+ it 'should see by id' do
10
+ @user.see 'this is great value' => 'xlInput'
11
+ end
12
+
13
+ it 'should see by label' do
14
+ @user.see 'this is great value' => 'X-Large input'
15
+ end
16
+
17
+ it 'should see many at once' do
18
+ @user.see 'this is great value' => 'xlInput',
19
+ 'sample default value' => 'secondInput'
20
+ end
21
+
22
+ context 'when it does not exist' do
23
+ it 'should raise error' do
24
+ expect do
25
+ @user.see 'this is gread value' => 'fieldDoesNotExist'
26
+ end.should raise_error(RSpec::Expectations::ExpectationNotMetError)
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,83 @@
1
+ require 'spec_helper'
2
+
3
+ describe '#see in scopes' do
4
+ before do
5
+ Capybara.app = Hey.new('scopes.html')
6
+ @user = Kameleon::User::Guest.new(self)
7
+ end
8
+
9
+ # TODO
10
+ # would be nice to be possible in future
11
+ # it's hard because of block closing
12
+ # it "should see within specific selector" do
13
+ # @user.within("#some_div").see "This is It"
14
+ # @user.within("#some_div").not_see "Hello"
15
+ # end
16
+ #
17
+ # it "should see within default selector" do
18
+ # @user.stub!(:page_areas).and_return({:main => '#some_div'})
19
+ # @user.will.see "This is It"
20
+ # @user.will.not_see "Hello"
21
+ # end
22
+
23
+ context '#will' do
24
+ context 'when main selector was defined' do
25
+ before { @user.stub!(:page_areas).and_return({:main => '#main'}) }
26
+
27
+ it 'should see in main selector scope' do
28
+ @user.will do
29
+ see 'Sample text in main part of page', 'Left side', 'Right side'
30
+ end
31
+ end
32
+ end
33
+
34
+ context 'main selector was not defined' do
35
+ it 'should see in whole page scope' do
36
+ @user.will do
37
+ see 'Sample title for page', 'Sample text in top of page', 'Left side'
38
+ end
39
+ end
40
+ end
41
+ end
42
+
43
+ context '#within' do
44
+ it 'should see in css scope' do
45
+ @user.within('#top h1') do
46
+ see 'Sample title for page'
47
+ end
48
+ end
49
+
50
+ context 'when scope by xpath' do
51
+ it 'should see in one selector scope' do
52
+ @user.within(:xpath, '//div[@id="footer"]/span') do
53
+ see 'Simple text'
54
+ end
55
+ end
56
+
57
+ it 'should see in many selctors scope' do
58
+ @user.within(:xpath, '//div[@id="footer"]/span | //div[@id="main"]/div[@id="left"]', :select_multiple) do
59
+ see 'Simple text', 'Left side'
60
+ end
61
+ end
62
+ end
63
+
64
+ context 'when scope by default selector type' do
65
+ before do
66
+ @user.stub!(:page_areas).and_return({:top => '#top',
67
+ :footer => [:xpath, '//div[@id="footer"]']})
68
+ end
69
+
70
+ it 'should see in top selector scope' do
71
+ @user.within(:top) do
72
+ see 'Sample title for page', 'Sample text in top of page'
73
+ end
74
+ end
75
+
76
+ it 'should see in footer selector scope' do
77
+ @user.within(:footer) do
78
+ see 'Sample text in footer', 'Simple text'
79
+ end
80
+ end
81
+ end
82
+ end
83
+ end