acceptance_test2 0.9.0 → 0.10.1

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.
@@ -5,14 +5,16 @@ require 'capybara/rspec'
5
5
  require 'capybara/dsl'
6
6
 
7
7
  require 'singleton'
8
+ require 'file_utils'
8
9
 
9
10
  require 'acceptance_test/capybara/capybara_helper'
10
11
 
11
12
  class RspecHelper
12
13
  include Singleton
13
14
 
14
- def configure(app_host:, driver: CapybaraHelper::DEFAULT_DRIVER, browser: CapybaraHelper::DEFAULT_BROWSER,
15
- wait_time: CapybaraHelper::DEFAULT_WAIT_TIME)
15
+ def configure(app_host:, driver: CapybaraHelper::DEFAULT_DRIVER,
16
+ browser: CapybaraHelper::DEFAULT_BROWSER,
17
+ wait_time: CapybaraHelper::DEFAULT_WAIT_TIME)
16
18
  register_extensions
17
19
 
18
20
  RSpec.configure do |rspec_config|
@@ -25,8 +27,9 @@ class RspecHelper
25
27
  def create_shared_context(name)
26
28
  register_extensions
27
29
 
28
- RSpec.shared_context name do |app_host:, driver: CapybaraHelper::DEFAULT_DRIVER, browser: CapybaraHelper::DEFAULT_BROWSER,
29
- wait_time: CapybaraHelper::DEFAULT_WAIT_TIME|
30
+ RSpec.shared_context name do |app_host:, driver: CapybaraHelper::DEFAULT_DRIVER,
31
+ browser: CapybaraHelper::DEFAULT_BROWSER,
32
+ wait_time: CapybaraHelper::DEFAULT_WAIT_TIME|
30
33
  self.define_singleton_method(:include_context, lambda do
31
34
  params = {app_host: app_host, driver: driver, browser: browser, wait_time: wait_time}
32
35
 
@@ -37,8 +40,9 @@ class RspecHelper
37
40
  end
38
41
  end
39
42
 
40
- def configure_rspec(rspec_config, app_host:, driver: CapybaraHelper::DEFAULT_DRIVER, browser: CapybaraHelper::DEFAULT_BROWSER,
41
- wait_time: CapybaraHelper::DEFAULT_WAIT_TIME)
43
+ def configure_rspec(rspec_config, app_host:, driver: CapybaraHelper::DEFAULT_DRIVER,
44
+ browser: CapybaraHelper::DEFAULT_BROWSER,
45
+ wait_time: CapybaraHelper::DEFAULT_WAIT_TIME)
42
46
  rspec_config.around(:each) do |example|
43
47
  params = {metadata: example.metadata, app_host: app_host, driver: driver, browser: browser, wait_time: wait_time}
44
48
 
@@ -46,8 +50,18 @@ class RspecHelper
46
50
 
47
51
  example.run
48
52
 
49
- RspecHelper.instance.after_test metadata: example.metadata, exception: example.exception
53
+ RspecHelper.instance.after_test metadata: example.metadata, exception: example.exception
50
54
  end
55
+
56
+ # rspec_config.before do |example|
57
+ # params = {metadata: example.metadata, app_host: app_host, driver: driver, browser: browser, wait_time: wait_time}
58
+ #
59
+ # RspecHelper.instance.before_test params
60
+ # end
61
+
62
+ # rspec_config.after do |example|
63
+ # RspecHelper.instance.after_test metadata: example.metadata, exception: example.exception
64
+ # end
51
65
  end
52
66
 
53
67
  def before_test metadata:, app_host:, driver:, browser:, wait_time:
@@ -60,9 +74,6 @@ class RspecHelper
60
74
 
61
75
  CapybaraHelper.instance.before_test params
62
76
 
63
- # puts "Using driver: #{Capybara.current_driver}."
64
- # puts "Default wait time: #{Capybara.default_max_wait_time }."
65
-
66
77
  new_driver = Capybara.current_driver
67
78
 
68
79
  Capybara.current_session.instance_variable_set(:@mode, new_driver)
@@ -73,20 +84,47 @@ class RspecHelper
73
84
  end
74
85
  end
75
86
 
76
- def after_test(metadata: metadata, exception: exception)
77
- CapybaraHelper.instance.after_test metadata: metadata, exception: exception
87
+ def after_test(metadata: nil, exception: nil)
88
+ selected_driver = RspecHelper.instance.get_driver(metadata, driver: nil)
78
89
 
79
- # driver = driver(example.metadata)
80
- #
81
- # if driver and exception and page and not [:webkit].include? driver
82
- # screenshot_maker.basedir = File.expand_path(config[:screenshots_dir])
83
- #
84
- # screenshot_maker.make page, example.metadata
85
- #
86
- # puts example.metadata[:full_description]
87
- # puts "Screenshot: #{screenshot_maker.screenshot_url(example.metadata)}"
88
- # end
89
- #
90
+ if selected_driver and exception
91
+ path = build_screenshot_name 'screenshots', metadata[:file_path], metadata[:line_number]
92
+
93
+ Capybara.current_session.save_screenshot(path)
94
+
95
+ puts metadata[:description]
96
+ end
97
+
98
+ CapybaraHelper.instance.after_test name: File.basename(metadata[:file_path]), exception: exception
99
+ end
100
+
101
+ def build_screenshot_name basedir, file_path, line_number=nil
102
+ FileUtils.mkdir_p basedir unless File.exist? basedir
103
+
104
+ name = "#{build_name(file_path)}#{line_number ? '-'+line_number.to_s : ''}.png"
105
+
106
+ File.expand_path("#{basedir}/#{name}")
107
+ end
108
+
109
+ def build_name path
110
+ full_path = File.expand_path(path)
111
+
112
+ spec_index = full_path.index("/spec")
113
+
114
+ if spec_index
115
+ extension = File.extname(path)
116
+ ext_index = extension.size == 0 ? -1 : full_path.index(extension)-1
117
+
118
+ name = full_path[spec_index+1..ext_index].gsub("/", "_")
119
+
120
+ name = name[5..-1] if name =~ /^spec_/
121
+ name = name[9..-1] if name =~ /^features_/
122
+ name = name[11..-1] if name =~ /^acceptance_/
123
+ else
124
+ name = path
125
+ end
126
+
127
+ name
90
128
  end
91
129
 
92
130
  def register_extensions
@@ -99,15 +137,13 @@ class RspecHelper
99
137
  config.include Capybara::RSpecMatchers
100
138
  config.include Capybara::DSL
101
139
  end
102
-
103
- # RSpec::Core::ExampleGroup.send :include, Capybara::DSL
104
140
  end
105
141
 
106
142
  def get_driver(metadata, driver:)
107
- #driver = ENV['DRIVER'].nil? ? nil : ENV['DRIVER'].to_sym
108
-
109
143
  driver_name = driver
110
144
 
145
+ driver_name = ENV['DRIVER'].nil? ? nil : ENV['DRIVER'].to_sym unless driver_name
146
+
111
147
  driver_name = metadata[:driver] unless driver_name
112
148
 
113
149
  supported_drivers.each do |supported_driver|
@@ -121,10 +157,10 @@ class RspecHelper
121
157
  end
122
158
 
123
159
  def get_browser(metadata, browser:)
124
- #browser_name = ENV['BROWSER'].nil? ? nil : ENV['BROWSER'].to_sym
125
-
126
160
  browser_name = browser
127
161
 
162
+ browser_name = ENV['BROWSER'].nil? ? nil : ENV['BROWSER'].to_sym unless browser_name
163
+
128
164
  browser_name = metadata[:browser] unless browser_name
129
165
 
130
166
  supported_browsers.each do |supported_browser|
@@ -138,7 +174,7 @@ class RspecHelper
138
174
  end
139
175
 
140
176
  def supported_drivers
141
- [:selenium, :webkit]
177
+ [:selenium]
142
178
  end
143
179
 
144
180
  def supported_browsers
@@ -174,4 +210,5 @@ class RspecHelper
174
210
  # end
175
211
  # end
176
212
  end
177
- end
213
+ end
214
+
@@ -1,3 +1,3 @@
1
1
  class AcceptanceTest
2
- VERSION = "0.9.0"
2
+ VERSION = "0.10.1"
3
3
  end
@@ -0,0 +1,20 @@
1
+ {
2
+ "name": "acceptance-demo",
3
+ "version": "1.0.0",
4
+ "description": "npm package for acceptance-demo",
5
+ "author": "Alexander Shvets",
6
+ "repository": {
7
+ "url": ""
8
+ },
9
+ "engines": {
10
+ "node": ">= 0.10.32"
11
+ },
12
+ "devDependencies": {
13
+ "protractor": "~2.5.1"
14
+ },
15
+ "scripts": {
16
+ "webdriver-manager-update": "node_modules/.bin/webdriver-manager update --standalone",
17
+ "webdriver-manager-start": "node_modules/.bin/webdriver-manager start",
18
+ "protractor": "node_modules/.bin/protractor protractor.conf.js --suite angularDemo"
19
+ }
20
+ }
@@ -0,0 +1,47 @@
1
+ // protractor.conf.js
2
+
3
+ exports.config = {
4
+ //seleniumAddress: '', // The address of a running selenium server.
5
+ framework: 'jasmine2',
6
+
7
+ directConnect: true,
8
+
9
+ // Capabilities to be passed to the webdriver instance.
10
+ capabilities: {
11
+ browserName: 'chrome'
12
+ },
13
+
14
+ suites: {
15
+ angularDemo: 'spec/js/angularSiteSpec.js'
16
+ },
17
+
18
+ // Options to be passed to Jasmine-node.
19
+ jasmineNodeOpts: {
20
+ showColors: true, // Use colors in the command line report.
21
+
22
+ // If true, display spec names.
23
+ isVerbose: true,
24
+
25
+ // If true, include stack traces in failures.
26
+ includeStackTrace: true,
27
+ // Default time to wait in ms before a test fails.
28
+ defaultTimeoutInterval: 350000
29
+ },
30
+
31
+ allScriptsTimeout: 300000,
32
+
33
+ onPrepare: function() {
34
+ require('./spec/js/support/extend.js');
35
+ var env = require('./spec/js/support/env.js');
36
+
37
+ console.log("Environment: " + env.name());
38
+ console.log("webappUrl: " + env.webappUrl());
39
+ },
40
+
41
+ /**
42
+ * onComplete will be called just before the driver quits.
43
+ */
44
+ onComplete: function () {
45
+ console.log("Completed");
46
+ }
47
+ };
@@ -0,0 +1,20 @@
1
+ var env = require('./support/env.js');
2
+
3
+ describe('angularjs homepage todo list', function() {
4
+ it('should add a todo', function() {
5
+ browser.get(env.webappUrl());
6
+
7
+ element(by.model('todoList.todoText')).sendKeys('write first protractor test');
8
+ element(by.css('[value="add"]')).click();
9
+
10
+ var todoList = element.all(by.repeater('todo in todoList.todos'));
11
+ expect(todoList.count()).toEqual(2);
12
+
13
+ expect(todoList.get(1).getText()).toEqual('build an angular app');
14
+
15
+ // You wrote your first test, cross it off the list
16
+ todoList.get(1).element(by.css('input')).click();
17
+ var completedAmount = element.all(by.css('.done-true'));
18
+ expect(completedAmount.count()).toEqual(2);
19
+ });
20
+ });
@@ -0,0 +1,13 @@
1
+ var env = {
2
+
3
+ name: function() {
4
+ return (!process.env.BUILD_ENV) ? 'development' : process.env.BUILD_ENV;
5
+ },
6
+
7
+ webappUrl: function() {
8
+ return 'https://angularjs.org';
9
+ }
10
+
11
+ };
12
+
13
+ module.exports = env;
@@ -0,0 +1,48 @@
1
+ // add subclass to Object with proper inheritance
2
+ // use this._super to access an overridden method.
3
+
4
+ var initializing = false;
5
+ var superPattern = /xyz/.test(function() { xyz; }) ? /\b_super\b/ : /.*/;
6
+
7
+ Object.subClass = function(properties) {
8
+ var _super = this.prototype;
9
+
10
+ initializing = true;
11
+ var proto = new this();
12
+ initializing = false;
13
+
14
+ for (var name in properties) {
15
+ proto[name] = typeof properties[name] == "function" &&
16
+ typeof _super[name] == "function" &&
17
+ superPattern.test(properties[name]) ?
18
+ (function(name, fn) {
19
+ return function() {
20
+ var tmp = this._super;
21
+
22
+ this._super = _super[name];
23
+
24
+ var ret = fn.apply(this, arguments);
25
+ this._super = tmp;
26
+
27
+ return ret;
28
+ };
29
+ })(name, properties[name]) :
30
+ properties[name];
31
+ }
32
+
33
+ function Class() {
34
+ // All construction is actually done in the init method
35
+ if (!initializing && this.init)
36
+ this.init.apply(this, arguments);
37
+ }
38
+
39
+ Class.prototype = proto;
40
+
41
+ Class.constructor = Class;
42
+
43
+ Class.subClass = arguments.callee;
44
+
45
+ return Class;
46
+ };
47
+
48
+ module.exports = Object;
@@ -7,5 +7,7 @@ require 'minitest/reporters'
7
7
 
8
8
  Minitest::Reporters.use! Minitest::Reporters::SpecReporter.new # spec-like progress
9
9
 
10
+ $LOAD_PATH.unshift File.expand_path("../lib", File.dirname(__FILE__))
11
+
10
12
  require 'acceptance_test/minitest/acceptance_spec'
11
13
  require 'acceptance_test/capybara/capybara_helper'
@@ -15,7 +15,7 @@ class GoogleSearchTest < AcceptanceSpec
15
15
  end
16
16
 
17
17
  after do
18
- CapybaraHelper.instance.after_test
18
+ CapybaraHelper.instance.after_test name: __name__.gsub(' ', '_')
19
19
  end
20
20
 
21
21
  it "finding the answer to the question of life", js: true do
@@ -2,18 +2,64 @@ require_relative '../rspec_helper'
2
2
 
3
3
  config = {app_host: "http://wikipedia.org", wait_time: 15}
4
4
 
5
+ # CapybaraHelper.instance.register_driver(:webkit)
6
+ # CapybaraHelper.instance.register_driver(:poltergeist)
7
+
5
8
  RspecHelper.instance.create_shared_context "WikipediaSearch"
6
9
 
7
10
  RSpec.describe 'Wikipedia Search' do
8
11
  include_context "WikipediaSearch", config
9
12
 
10
- it "searches on wikipedia web site" do
13
+ it "searches on wikipedia web site (selenium)" do
14
+ expect(Capybara.current_driver).to equal(:selenium_chrome)
15
+
11
16
  visit('/')
12
17
 
13
18
  fill_in "searchInput", :with => "Capybara"
14
19
 
15
- find(".formBtn", match: :first).click
20
+ find(".pure-button", match: :first).click
16
21
 
17
22
  expect(page).to have_content "Hydrochoerus hydrochaeris"
18
23
  end
24
+
25
+ # describe do
26
+ # before do
27
+ # Capybara::Webkit.configure do |c|
28
+ # c.allow_url("upload.wikimedia.org")
29
+ # c.allow_url("en.wikipedia.org")
30
+ # c.allow_url("wikipedia.org")
31
+ # c.allow_url("meta.wikimedia.org")
32
+ # c.allow_url("login.wikimedia.org")
33
+ # end
34
+ # end
35
+ #
36
+ # it "searches on wikipedia web site (webkit)", driver: :webkit do
37
+ # puts "driver: #{Capybara.current_driver}"
38
+ # expect(Capybara.current_driver).to equal(:webkit)
39
+ #
40
+ # visit('/')
41
+ #
42
+ # fill_in "searchInput", :with => "Capybara"
43
+ #
44
+ # find(".formBtn", match: :first).click
45
+ #
46
+ # expect(page).to have_content "Hydrochoerus hydrochaeris"
47
+ # end
48
+ # end
49
+
50
+ # it "searches on wikipedia web site (poltergeist)", driver: :poltergeist do
51
+ # if Gem::Platform.local.os.to_sym == :darwin
52
+ # puts "This OS: #{Gem::Platform.local.os} doesn't support phantomjs."
53
+ # else
54
+ # expect(Capybara.current_driver).to equal(:poltergeist)
55
+ #
56
+ # visit('/')
57
+ #
58
+ # fill_in "searchInput", :with => "Capybara"
59
+ #
60
+ # find(".formBtn", match: :first).click
61
+ #
62
+ # expect(page).to have_content "Hydrochoerus hydrochaeris"
63
+ # end
64
+ # end
19
65
  end
@@ -19,13 +19,11 @@ class WikipediaSearchTest < AcceptanceSpec
19
19
  end
20
20
 
21
21
  it "finding the information about capybara", js: true do
22
- skip
23
-
24
22
  visit "/"
25
23
 
26
24
  fill_in "searchInput", :with => "capybara"
27
25
 
28
- find(".formBtn", match: :first).click # submit
26
+ find(".pure-button", match: :first).click # submit
29
27
 
30
28
  page.must_have_content('capybara')
31
29
  end
@@ -0,0 +1,89 @@
1
+ #!/usr/bin/env bash
2
+
3
+ #######################################
4
+ # [chrome]
5
+
6
+ wget -q -O - https://dl-ssl.google.com/linux/linux_signing_key.pub | sudo apt-key add -
7
+
8
+ sudo sh -c 'echo "deb http://dl.google.com/linux/chrome/deb/ stable main" >> /etc/apt/sources.list.d/google.list'
9
+
10
+ sudo apt-get update
11
+
12
+ sudo apt-get install -y google-chrome-stable
13
+
14
+
15
+ #######################################
16
+ # [chromedriver]
17
+
18
+ sudo apt-get install -y unzip
19
+
20
+ wget -N http://chromedriver.storage.googleapis.com/2.20/chromedriver_linux64.zip -P ~/Downloads
21
+
22
+ unzip ~/Downloads/chromedriver_linux64.zip -d ~/Downloads
23
+
24
+ chmod +x ~/Downloads/chromedriver
25
+
26
+ sudo mv -f ~/Downloads/chromedriver /usr/local/share/chromedriver
27
+
28
+ sudo ln -s /usr/local/share/chromedriver /usr/local/bin/chromedriver
29
+
30
+ sudo ln -s /usr/local/share/chromedriver /usr/bin/chromedriver
31
+
32
+
33
+ #######################################
34
+ # [ffmpeg]
35
+
36
+ sudo apt-get install -y ffmpeg
37
+ sudo apt-get install -y libav-tools
38
+
39
+
40
+ ##############################
41
+ # [firefox]
42
+
43
+ sudo apt-get install -y firefox
44
+
45
+
46
+ ##############################
47
+ # [phantomjs]
48
+
49
+ #sudo apt-get install phantomjs
50
+
51
+ cd /usr/local/share
52
+
53
+ sudo wget https://bitbucket.org/ariya/phantomjs/downloads/phantomjs-1.9.8-linux-x86_64.tar.bz2
54
+
55
+ sudo tar xjf phantomjs-1.9.8-linux-x86_64.tar.bz2
56
+
57
+ sudo ln -s /usr/local/share/phantomjs-1.9.8-linux-x86_64/bin/phantomjs /usr/local/share/phantomjs
58
+ sudo ln -s /usr/local/share/phantomjs-1.9.8-linux-x86_64/bin/phantomjs /usr/local/bin/phantomjs
59
+ sudo ln -s /usr/local/share/phantomjs-1.9.8-linux-x86_64/bin/phantomjs /usr/bin/phantomjs
60
+
61
+
62
+ ##############################
63
+ # [imagemagick]
64
+
65
+ sudo apt-get install -y imagemagick
66
+ sudo apt-get install -y X11-apps
67
+
68
+
69
+ ##############################
70
+ # [apache]
71
+
72
+ sudo apt-get install -y apache2
73
+
74
+
75
+ #######################################
76
+ # [node]
77
+ # Installs node
78
+
79
+ sudo apt-get install -y node
80
+
81
+
82
+ #######################################
83
+ # [rbenv]
84
+ # Installs node
85
+
86
+ sudo apt-get install -y rbenv
87
+ git clone git://github.com/jf/rbenv-gemset.git $HOME/.rbenv/plugins/rbenv-gemset
88
+
89
+