cezanne 0.0.1 → 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 3b042161b943e9c613765446eb96de02c932c1ed
4
- data.tar.gz: ea2b8b6803ed4cb416da7dc9d031265f8ce368f4
3
+ metadata.gz: 891c5e89caa9580135d9536f8406e58e50f6e994
4
+ data.tar.gz: 8d7762429284a5570dbe0d219894a50ebaa85c13
5
5
  SHA512:
6
- metadata.gz: f839e12234ddb4d54248264aa6d974191d129c705652eb01f98d860463e6a9e47d1f68e9bf77c981e7e41253aecd4546fceb3f86002d3fe6a290a8643a372b3f
7
- data.tar.gz: 42f2832a17ce4a8cc10bed8ae5bedaca3c334ef953da157a8e30751e90597b26605a53cc2b9eb9ef3966290a0fef77533b01c2e8e7ef0d7e05fbbc4e2ee875e5
6
+ metadata.gz: 71972499b7cf750c379041e50728cf8088ddf23b7caa860e8bed713cda0fa288c1b14e8a572662a5e374d8bf8c696f0a03b5d56fc98f7faf28ff4686f79de302
7
+ data.tar.gz: 4540b47068fb2e735337656082c3bd6f825d85c88626bb5c6fc4061efd36822489d95cafd9e320e88ed56ccfd568565c59abdb56e051d0cf29f7cca65bbeef8f
data/.travis.yml ADDED
@@ -0,0 +1,3 @@
1
+ language: ruby
2
+ rvm:
3
+ - 2.1.2
data/README.md CHANGED
@@ -1,3 +1,5 @@
1
+ [![Build Status](https://travis-ci.org/bskyb-commerce/cezanne.svg?branch=master)](https://travis-ci.org/bskyb-commerce/cezanne)
2
+
1
3
  # Cezanne
2
4
 
3
5
  Visual regression testing tool
@@ -16,9 +18,66 @@ Or install it yourself as:
16
18
 
17
19
  $ gem install cezanne
18
20
 
19
- ## Usage
21
+ ## Usage - RSpec
22
+
23
+ In your spec_helper.rb
24
+
25
+ require 'cezanne/rspec'
26
+
27
+ RSpec.configure do |config|
28
+ config.include Cezanne
29
+ config.cezanne = { uid: ENV['build_number'], project_name: 'awesome_app' }
30
+ end
31
+
32
+ The uid should be a unique identifier. We use the build number, but it can be a static string if you don't need
33
+ to keep multiple versions of the screenshots.
34
+
35
+ In your tests
36
+
37
+
38
+ describe 'Mont Sainte-Victoire', screenshots: true do
39
+ it 'is a masterpiece' do
40
+ visit 'url-to-painting'
41
+ check_visual_regression_for 'mont-sainte-victoire'
42
+ end
43
+ end
44
+
45
+ Make sure to use a unique name for each screenshot.
46
+ The associate file will be a gif image named after the parameter ('mont-sainte-victoire' in the example above)
47
+ and the browser name & version, to make it easy to check visual regressions on multiple browsers.
48
+
49
+ ## Dependencies
50
+
51
+ Cezanne uses ImageMagick to compare images. Check with your package manager.
20
52
 
21
- coming soon
53
+ Screenshots are stored on Dropbox through the Dropscreen gem. Follow the instructions at https://github.com/bskyb-commerce/dropscreen and make sure to export the access_token
54
+
55
+ export DROPBOX_ACCESS_TOKEN=**insert dropbox access token here**
56
+
57
+ Screenshots are taken using Capybara.
58
+
59
+ ## (Opinionated) Workflow
60
+
61
+ * Reference screenshots are stored on Dropbox
62
+ * New and different screenshots will be synced to Dropbox at the end of the test suite
63
+
64
+
65
+ ```
66
+ project_name
67
+ |
68
+ +-- reference_screenshots
69
+ |
70
+ +-- uid
71
+ | |
72
+ | +-- new_screenshots
73
+ | |
74
+ | +-- different_screenshots
75
+ |
76
+ |
77
+ +-- uid_2
78
+ |
79
+ ...
80
+ ```
22
81
 
23
82
  ## Contributing
24
83
 
@@ -27,3 +86,7 @@ coming soon
27
86
  3. Commit your changes (`git commit -am 'Add some feature'`)
28
87
  4. Push to the branch (`git push origin my-new-feature`)
29
88
  5. Create new Pull Request
89
+
90
+ ## Authors
91
+
92
+ Made with <3 by the Sky Haiku team
data/Rakefile CHANGED
@@ -1 +1,8 @@
1
1
  require "bundler/gem_tasks"
2
+ require 'rspec/core/rake_task'
3
+
4
+ RSpec::Core::RakeTask.new(:spec) do |t|
5
+ t.rspec_opts = '--tag ~integration'
6
+ end
7
+
8
+ task :default => :spec
@@ -1,3 +1,3 @@
1
1
  module Cezanne
2
- VERSION = "0.0.1"
2
+ VERSION = "0.0.2"
3
3
  end
data/lib/cezanne.rb CHANGED
@@ -39,7 +39,7 @@ module Cezanne
39
39
  end
40
40
 
41
41
  def file_name_for page_name
42
- "#{page_name}_#{page.driver.browser.browser.to_s}.gif"
42
+ "#{page_name}_#{page.driver.browser.capabilities.browser_name}_#{page.driver.browser.capabilities.version}.gif"
43
43
  end
44
44
 
45
45
  def mark_as_new screenshot
@@ -2,7 +2,7 @@ require 'spec_helper'
2
2
 
3
3
  describe Cezanne::Image do
4
4
 
5
- let(:image) { Cezanne::Image.new('spec/images/page_name_browser.gif') }
5
+ let(:image) { Cezanne::Image.new('spec/images/page_name_browser_version.gif') }
6
6
 
7
7
  describe '#initialize' do
8
8
 
@@ -12,7 +12,7 @@ RSpec.configure do |config|
12
12
  config.cezanne = { uid: 'test', project_name: 'cezanne' }
13
13
  end
14
14
 
15
- describe 'Cezanne RSpec integration', type: :feature, screenshots: true do
15
+ describe 'Cezanne RSpec integration', type: :feature, screenshots: true, integration: true do
16
16
 
17
17
  # wrap each test with before(:all) and after(:all)
18
18
 
@@ -44,8 +44,8 @@ describe 'Cezanne RSpec integration', type: :feature, screenshots: true do
44
44
 
45
45
 
46
46
  it 'pull reference_screenshots' do
47
- expect(File.exist?('artifacts/reference_screenshots/similar_firefox.gif')).to be true
48
- expect(File.exist?('artifacts/reference_screenshots/different_firefox.gif')).to be true
47
+ expect(File.exist?('artifacts/reference_screenshots/similar_firefox_31.0.gif')).to be true
48
+ expect(File.exist?('artifacts/reference_screenshots/different_firefox_31.0.gif')).to be true
49
49
  end
50
50
 
51
51
  end
data/spec/cezanne_spec.rb CHANGED
@@ -7,14 +7,17 @@ describe Cezanne do
7
7
  let(:page) { double('page') }
8
8
  let(:driver) { double('driver') }
9
9
  let(:browser) { double('browser') }
10
+ let(:capabilities) { double('capabilities') }
10
11
  # RMagick mocks
11
12
  let(:picture) { double('Magick::Image') }
12
13
  # Cezanne classes mocks
13
14
  let(:local_files) { double('local_files') }
14
15
  let(:image) { double('Cezanne::Image') }
15
-
16
+
16
17
  before(:each) do
17
- allow(browser).to receive('browser').and_return(:browser)
18
+ allow(capabilities).to receive('browser_name').and_return('browser')
19
+ allow(capabilities).to receive('version').and_return('version')
20
+ allow(browser).to receive('capabilities').and_return(capabilities)
18
21
  allow(browser).to receive('save_screenshot')
19
22
  allow(driver).to receive('browser').and_return(browser)
20
23
  allow(page).to receive('driver').and_return(driver)
@@ -91,8 +94,8 @@ describe Cezanne do
91
94
 
92
95
  describe '#file_name_for' do
93
96
 
94
- it 'contains page_name and browser' do
95
- expect(class_with_cezanne.send(:file_name_for, 'fancy_page_name')).to eq('fancy_page_name_browser.gif')
97
+ it 'contains page_name, browser and version' do
98
+ expect(class_with_cezanne.send(:file_name_for, 'fancy_page_name')).to eq('fancy_page_name_browser_version.gif')
96
99
  end
97
100
 
98
101
  end
@@ -102,7 +105,7 @@ describe Cezanne do
102
105
  let(:screenshot) { image }
103
106
 
104
107
  before(:each) do
105
- allow(image).to receive('path').and_return('spec/images/page_name_browser.gif')
108
+ allow(image).to receive('path').and_return('spec/images/page_name_browser_version.gif')
106
109
  end
107
110
 
108
111
  it 'moves screenshot to the diff folder' do
@@ -112,7 +115,7 @@ describe Cezanne do
112
115
  end
113
116
 
114
117
  after(:each) do
115
- FileUtils.mv('spec/images/different.gif', 'spec/images/page_name_browser.gif')
118
+ FileUtils.mv('spec/images/different.gif', 'spec/images/page_name_browser_version.gif')
116
119
  end
117
120
 
118
121
  end
@@ -123,7 +126,7 @@ describe Cezanne do
123
126
  let(:screenshot) { image }
124
127
 
125
128
  before(:each) do
126
- allow(image).to receive('path').and_return('spec/images/page_name_browser.gif')
129
+ allow(image).to receive('path').and_return('spec/images/page_name_browser_version.gif')
127
130
  end
128
131
 
129
132
  it 'moves screenshot to the new folder' do
@@ -133,7 +136,7 @@ describe Cezanne do
133
136
  end
134
137
 
135
138
  after(:each) do
136
- FileUtils.mv('spec/images/new.gif', 'spec/images/page_name_browser.gif')
139
+ FileUtils.mv('spec/images/new.gif', 'spec/images/page_name_browser_version.gif')
137
140
  end
138
141
 
139
142
  end
@@ -145,7 +148,7 @@ describe Cezanne do
145
148
  end
146
149
 
147
150
  it 'return a Cezanne::Image' do
148
- path = 'spec/images/page_name_browser.gif'
151
+ path = 'spec/images/page_name_browser_version.gif'
149
152
  expect(class_with_cezanne.send(:image, path)).to be_instance_of(Cezanne::Image)
150
153
  end
151
154
 
@@ -154,13 +157,13 @@ describe Cezanne do
154
157
  describe '#check_visual_regression_for' do
155
158
 
156
159
  before(:each) do
157
- allow(class_with_cezanne).to receive('get_reference_screenshot_for').and_return(Cezanne::Image.new('spec/images/page_name_browser.gif'))
160
+ allow(class_with_cezanne).to receive('get_reference_screenshot_for').and_return(Cezanne::Image.new('spec/images/page_name_browser_version.gif'))
158
161
  end
159
162
 
160
163
  context 'succesful match' do
161
164
 
162
165
  it 'does not raise an error' do
163
- allow(class_with_cezanne).to receive('take_screenshot').and_return(Cezanne::Image.new('spec/images/page_name_browser.gif'))
166
+ allow(class_with_cezanne).to receive('take_screenshot').and_return(Cezanne::Image.new('spec/images/page_name_browser_version.gif'))
164
167
  expect { class_with_cezanne.check_visual_regression_for 'page_name' }.not_to raise_error
165
168
  end
166
169
 
@@ -168,7 +171,7 @@ describe Cezanne do
168
171
 
169
172
  context 'failed match' do
170
173
 
171
- let(:screenshot) { Cezanne::Image.new('spec/images/page_name_2_browser.gif') }
174
+ let(:screenshot) { Cezanne::Image.new('spec/images/page_name_2_browser_version.gif') }
172
175
 
173
176
  before(:each) do
174
177
  allow(class_with_cezanne).to receive('take_screenshot').and_return(screenshot)
@@ -190,7 +193,7 @@ describe Cezanne do
190
193
 
191
194
  context 'new screenshot' do
192
195
 
193
- let(:screenshot) { Cezanne::Image.new('spec/images/page_name_browser.gif') }
196
+ let(:screenshot) { Cezanne::Image.new('spec/images/page_name_browser_version.gif') }
194
197
 
195
198
  before(:each) do
196
199
  allow(class_with_cezanne).to receive('get_reference_screenshot_for').and_return(false)
@@ -4,6 +4,6 @@
4
4
  <title>DIFFERENT</title>
5
5
  </head>
6
6
  <body>
7
- <img src="page_name_browser.gif" />
7
+ <img src="page_name_browser_version.gif" />
8
8
  </body>
9
9
  </html>
data/spec/images/new.html CHANGED
@@ -4,6 +4,6 @@
4
4
  <title>NEW</title>
5
5
  </head>
6
6
  <body>
7
- <img src="page_name_2_browser.gif" />
7
+ <img src="page_name_2_browser_version.gif" />
8
8
  </body>
9
9
  </html>
@@ -4,6 +4,6 @@
4
4
  <title>SIMILAR</title>
5
5
  </head>
6
6
  <body>
7
- <img src="page_name_browser.gif" />
7
+ <img src="page_name_browser_version.gif" />
8
8
  </body>
9
9
  </html>
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cezanne
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sky Haiku
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-07-29 00:00:00.000000000 Z
11
+ date: 2014-08-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -130,6 +130,7 @@ extensions: []
130
130
  extra_rdoc_files: []
131
131
  files:
132
132
  - ".gitignore"
133
+ - ".travis.yml"
133
134
  - Gemfile
134
135
  - LICENSE.txt
135
136
  - README.md
@@ -148,8 +149,8 @@ files:
148
149
  - spec/cezanne_spec.rb
149
150
  - spec/images/different.html
150
151
  - spec/images/new.html
151
- - spec/images/page_name_2_browser.gif
152
- - spec/images/page_name_browser.gif
152
+ - spec/images/page_name_2_browser_version.gif
153
+ - spec/images/page_name_browser_version.gif
153
154
  - spec/images/similar.html
154
155
  - spec/spec_helper.rb
155
156
  homepage: ''
@@ -183,7 +184,7 @@ test_files:
183
184
  - spec/cezanne_spec.rb
184
185
  - spec/images/different.html
185
186
  - spec/images/new.html
186
- - spec/images/page_name_2_browser.gif
187
- - spec/images/page_name_browser.gif
187
+ - spec/images/page_name_2_browser_version.gif
188
+ - spec/images/page_name_browser_version.gif
188
189
  - spec/images/similar.html
189
190
  - spec/spec_helper.rb