page_magic 0.11.0.alpha7 → 0.11.0.alpha8

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: aea679cbb291387aa604e03d5d0e3cb5adf28141
4
- data.tar.gz: 52fde80f96207b3632b89fbd98d4cb16e083ffb8
3
+ metadata.gz: 3b3b5bae4a08579ffe198524fb160791d40c75d0
4
+ data.tar.gz: cfbcade44965019d6614dbd8a397cb717d0d608b
5
5
  SHA512:
6
- metadata.gz: e67be00ed38102cf53891a69fb815042020cbe51e6f8a5d82c83ca0a0041ddbe688b69061174a2ab00946410648a13202320abcc48a3311019b2019b6871c48d
7
- data.tar.gz: 13b0e6b736234d5f48d6669b3b39a75f6c32e869c3710ec4efdffe0dde5a543bb117bdb5384b56542961416a06d8aeb977239d5bc45d7ce0cebda3f9212c927e
6
+ metadata.gz: 9802999ea9cafdbe9c1104784047ae65734cfc5bef00f6da87b0da30c4b143c3add0e5cd0be4fd1e1655ce39290ce3884d53816e61c2c3f979fdad9a47312bc2
7
+ data.tar.gz: 1382773ba5e71d48604da93565ff477eaf3bdc901a1735ad6eca8859bb968bcc9b67704c81c53a7398cc28794200786c63714222bfd9282ec6603131e934d9d6
data/README.md CHANGED
@@ -1,5 +1,4 @@
1
- [![Build Status](https://travis-ci.org/Ladtech/page_magic.png)](https://travis-ci.org/Ladtech/page_magic)
2
- #PageMagic
1
+ #PageMagic
3
2
  PageMagic is an API for testing web applications.
4
3
 
5
4
  It has a simple but powerful DSL which makes modelling and interacting with your pages easy.
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.11.0.alpha7
1
+ 0.11.0.alpha8
@@ -28,19 +28,15 @@ module PageMagic
28
28
  element_locator = element_locator_factory.call(@page_element, *args)
29
29
  end
30
30
 
31
- result = element_locator.browser_element
32
-
33
- return element_locator if element_locator.section?
34
-
35
31
  [:set, :select_option, :unselect_option, :click].each do |action_method|
36
- apply_hooks(page_element: result,
32
+ apply_hooks(page_element: element_locator.browser_element,
37
33
  capybara_method: action_method,
38
34
  before_hook: element_locator.before,
39
35
  after_hook: element_locator.after,
40
36
  )
41
37
  end
42
38
 
43
- result
39
+ element_locator.section? ? element_locator : element_locator.browser_element
44
40
  end
45
41
 
46
42
  def apply_hooks(options)
@@ -1,34 +1,53 @@
1
1
  require 'wait'
2
2
  module PageMagic
3
3
  class Session
4
- attr_accessor :current_page, :raw_session
4
+ attr_accessor :current_page, :raw_session, :transitions
5
5
 
6
6
  def initialize browser
7
7
  @raw_session = browser
8
8
  end
9
9
 
10
- def define_transitions transitions
10
+ def define_page_mappings transitions
11
11
  @transitions = transitions
12
12
  end
13
13
 
14
- def visit page
15
- @raw_session.visit page.url
14
+ def current_page
15
+ if transitions
16
+ mapping = find_mapped_page(current_path)
17
+ @current_page = mapping.new(self) if mapping
18
+ end
19
+ @current_page
20
+ end
21
+
22
+ def find_mapped_page path
23
+ mapping = transitions.keys.find do |key|
24
+ string_matches?(path, key)
25
+ end
26
+ transitions[mapping]
27
+ end
28
+
29
+ def string_matches?(string, matcher)
30
+ if matcher.is_a?(Regexp)
31
+ string =~ matcher
32
+ elsif matcher.is_a?(String)
33
+ string == matcher
34
+ else
35
+ false
36
+ end
37
+ end
38
+
39
+ def visit(page, url: nil)
40
+ raw_session.visit url || page.url
16
41
  @current_page = page.new self
17
42
  self
18
43
  end
19
44
 
20
45
  def current_path
21
- @raw_session.current_path
46
+ raw_session.current_path
22
47
  end
23
48
 
24
49
  def current_url
25
- @raw_session.current_url
26
- end
27
-
28
- def move_to page_class
29
- page_class = eval(page_class) if page_class.is_a?(String)
30
- @current_page = page_class.new self
31
- wait_until { raw_session.current_url == page_class.url }
50
+ raw_session.current_url
32
51
  end
33
52
 
34
53
  def wait_until &block
@@ -37,7 +56,7 @@ module PageMagic
37
56
  end
38
57
 
39
58
  def method_missing name, *args, &block
40
- @current_page.send(name, *args, &block)
59
+ current_page.send(name, *args, &block)
41
60
  end
42
61
 
43
62
  end
@@ -87,23 +87,40 @@ describe PageMagic::ElementContext do
87
87
 
88
88
  describe 'hooks' do
89
89
 
90
+ subject(:page) do
91
+ elements_page.new.tap do|p|
92
+ p.visit
93
+ end
94
+ end
90
95
 
91
- #it 'only applies them if browser element supports event' do
92
- # page = elements_page.new
93
- #end
94
-
95
- it 'should execute a before and after action that gives access to the browser' do
96
-
97
- page = elements_page.new
98
- page.visit
99
-
100
- selector = {text: 'a link'}
96
+ before do
101
97
  browser = page.browser
102
98
  browser.should_receive(:call_in_before_hook)
103
99
  browser.should_receive(:call_in_after_before_hook)
100
+ end
104
101
 
105
102
 
106
- elements_page.link(:create, selector) do
103
+ context 'section' do
104
+ it 'applies the hooks' do
105
+
106
+ elements_page.section(:form, id: 'form') do
107
+ link :form_link, id: 'form_link'
108
+
109
+ before do |page_browser|
110
+ page_browser.call_in_before_hook
111
+ end
112
+
113
+ after do |page_browser|
114
+ page_browser.call_in_after_before_hook
115
+ end
116
+ end
117
+
118
+ described_class.new(page, page.browser, self).form.click
119
+ end
120
+ end
121
+
122
+ it 'should execute a before and after action that gives access to the browser' do
123
+ elements_page.link(:create, text: 'a link') do
107
124
  before do |page_browser|
108
125
  page_browser.call_in_before_hook
109
126
  end
@@ -3,7 +3,7 @@ describe PageMagic::Session do
3
3
  let(:page) do
4
4
  Class.new do
5
5
  include PageMagic
6
- url :url
6
+ url '/page1'
7
7
 
8
8
  def my_method
9
9
  :called
@@ -20,48 +20,82 @@ describe PageMagic::Session do
20
20
 
21
21
  let(:browser) { double('browser', current_url: 'url') }
22
22
 
23
- it 'should visit the given url' do
24
- browser.should_receive(:visit).with(page.url)
25
- session = PageMagic::Session.new(browser).visit(page)
26
- session.current_page.should be_a(page)
27
- end
23
+ describe '#current_page' do
24
+ subject do
25
+ PageMagic::Session.new(browser).tap do |session|
26
+ session.define_page_mappings '/another_page1' => another_page_class
27
+ end
28
+ end
29
+ context 'page url has not changed' do
30
+ it 'returns the original page' do
31
+ browser.should_receive(:visit).with(page.url)
32
+ allow(browser).to receive(:current_path).and_return('/page1')
33
+ subject.visit(page)
34
+ expect(subject.current_page).to be_an_instance_of(page)
35
+ end
36
+ end
28
37
 
29
- it 'should return the current url' do
30
- session = PageMagic::Session.new(browser)
31
- session.current_url.should == 'url'
38
+ context 'page url has changed' do
39
+ it 'returns the mapped page object' do
40
+ browser.should_receive(:visit).with(page.url)
41
+ subject.visit(page)
42
+ allow(browser).to receive(:current_path).and_return('/another_page1')
43
+ expect(subject.current_page).to be_an_instance_of(another_page_class)
44
+ end
45
+ end
32
46
  end
33
47
 
34
- context 'method_missing' do
35
- it 'should delegate to current page' do
36
- browser.stub(:visit)
37
- session = PageMagic::Session.new(browser).visit(page)
38
- session.my_method.should be(:called)
48
+ describe '#find_mapped_page' do
49
+ subject do
50
+ described_class.new(nil).tap do |session|
51
+ session.define_page_mappings '/page' => :mapped_page_using_string, /page\d/ => :mapped_page_using_regex
52
+ end
53
+ end
54
+
55
+ context 'mapping is string' do
56
+ it 'returns the page class' do
57
+ expect(subject.find_mapped_page('/page')).to be(:mapped_page_using_string)
58
+ end
59
+ end
60
+ context 'mapping is regex' do
61
+ it 'returns the page class' do
62
+ expect(subject.find_mapped_page('/page2')).to be(:mapped_page_using_regex)
63
+ end
39
64
  end
40
- end
41
65
 
42
- context 'move_to moves the session object to another page' do
43
- it 'can take a class' do
44
- page_magic_session = PageMagic::Session.new(double(:browser, current_url: '/another_page1'))
45
- page_magic_session.move_to(another_page_class)
46
- page_magic_session.current_page.should be_a(another_page_class)
66
+ context 'mapping is not found' do
67
+ it 'returns nil' do
68
+ expect(subject.find_mapped_page('/fake_page')).to be(nil)
69
+ end
47
70
  end
71
+ end
48
72
 
49
- it 'can take the name of the class as a string' do
50
- class ThePage
51
- include PageMagic
52
- url '/the_page'
73
+ describe '#visit' do
74
+ context 'url supplied' do
75
+ it 'uses this url instead of the one defined on the page class' do
76
+ expect(browser).to receive(:visit).with(:custom_url)
77
+ session = PageMagic::Session.new(browser).visit(page, url: :custom_url)
78
+ session.current_page.should be_a(page)
53
79
  end
80
+ end
54
81
 
55
- page_magic_session = PageMagic::Session.new(double(:browser, current_url: '/the_page'))
56
- page_magic_session.move_to("ThePage")
57
- page_magic_session.current_page.should be_a(ThePage)
82
+ it 'visits the url on defined on the page class' do
83
+ browser.should_receive(:visit).with(page.url)
84
+ session = PageMagic::Session.new(browser).visit(page)
85
+ session.current_page.should be_a(page)
58
86
  end
87
+ end
59
88
 
60
- it 'should wait until the browser url has changed' do
61
- mock_browser = double(:browser, current_url: 'a')
62
- page_magic_session = PageMagic::Session.new(mock_browser)
89
+ it 'should return the current url' do
90
+ session = PageMagic::Session.new(browser)
91
+ session.current_url.should == 'url'
92
+ end
63
93
 
64
- expect { page_magic_session.move_to(another_page_class) }.to raise_error(Wait::ResultInvalid)
94
+ context 'method_missing' do
95
+ it 'should delegate to current page' do
96
+ browser.stub(:visit)
97
+ session = PageMagic::Session.new(browser).visit(page)
98
+ session.my_method.should be(:called)
65
99
  end
66
100
  end
67
101
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: page_magic
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.11.0.alpha7
4
+ version: 0.11.0.alpha8
5
5
  platform: ruby
6
6
  authors:
7
7
  - Leon Davis
@@ -104,7 +104,6 @@ files:
104
104
  - ".rspec"
105
105
  - ".ruby-gemset"
106
106
  - ".ruby-version"
107
- - ".travis.yml"
108
107
  - Gemfile
109
108
  - Gemfile.lock
110
109
  - Guardfile
data/.travis.yml DELETED
@@ -1,4 +0,0 @@
1
- rvm:
2
- - '2.1'
3
- - '2.2
4
-