generic_test 0.1.9 → 0.1.10
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 +4 -4
- data/.gitlab-ci.yml +2 -2
- data/ChangeLog +6 -1
- data/Dockerfile +1 -1
- data/README.md +1 -1
- data/exe/generic_test +7 -1
- data/generic_test.gemspec +13 -11
- data/lib/generic_test/checker.rb +9 -5
- data/lib/generic_test/html_reporter.rb +11 -0
- data/lib/generic_test/page.rb +8 -2
- data/lib/generic_test/version.rb +1 -1
- data/spec/generic_test_spec.rb +13 -6
- data/spec/spec_helper.rb +10 -0
- data/spec/test_gem_spec.rb +28 -6
- data/test_site/index.html +6 -0
- metadata +37 -8
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 3cd6c9a3fb72be1be7624ef067e5240d37cd95607a62f1a18214de73e589be63
|
4
|
+
data.tar.gz: ee175d1814512d5dfb07582dd733e06525e7b3c324c42a9922e6eb50cf69b33f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8c6f165cba804d210657ef544a83da5de6bb21b664ea446b18f87ba817b0fdcc29ca80883518427a1ffc5b3ea4117271ecf65290bbdb0134115657577da373d3
|
7
|
+
data.tar.gz: a960a256ecbd5d8c951458936323c8e8a55ef5c4855a614f21fa29adda402b191e265adfe3de7ba62700568ee831bee9b3c2ba92efd9be2e1b90b24a8620ecd8
|
data/.gitlab-ci.yml
CHANGED
@@ -8,13 +8,13 @@ docker_build:
|
|
8
8
|
# Use TLS https://docs.gitlab.com/ee/ci/docker/using_docker_build.html#tls-enabled
|
9
9
|
DOCKER_HOST: tcp://docker:2376
|
10
10
|
DOCKER_TLS_CERTDIR: "/certs"
|
11
|
-
stage:
|
11
|
+
stage: deploy # Part of a later stage
|
12
12
|
services:
|
13
13
|
- docker:19.03.5-dind
|
14
14
|
image: docker:19.03.5
|
15
15
|
script:
|
16
16
|
- docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY
|
17
|
-
- docker pull $CI_REGISTRY_IMAGE:latest || true
|
17
|
+
- docker pull --quiet $CI_REGISTRY_IMAGE:latest || true
|
18
18
|
- docker build -t $CI_REGISTRY_IMAGE:latest .
|
19
19
|
- docker run -t $CI_REGISTRY_IMAGE:latest generic_test page samuel-garratt.gitlab.io/generic_test/about.html
|
20
20
|
- docker push $CI_REGISTRY_IMAGE:latest
|
data/ChangeLog
CHANGED
@@ -1,6 +1,11 @@
|
|
1
|
+
Version 0.1.10
|
2
|
+
* Bug fix
|
3
|
+
* Add custom file implementing mock of what's needed for RSpecHtmlReporter
|
4
|
+
* Split email addresses into separate list and add validation for them using 'email_address' gem
|
5
|
+
|
1
6
|
Version 0.1.9
|
2
7
|
* Bug fix
|
3
|
-
* rspec-legacy_formatters
|
8
|
+
* rspec-legacy_formatters will be needed for RSpecHtmlFormatter
|
4
9
|
|
5
10
|
Version 0.1.8
|
6
11
|
* Bug fix
|
data/Dockerfile
CHANGED
data/README.md
CHANGED
@@ -4,7 +4,7 @@ This gem provides an easy way to run generic tests for a website/api
|
|
4
4
|
|
5
5
|
Test site is at https://samuel-garratt.gitlab.io/generic_test
|
6
6
|
|
7
|
-
Run test gem through docker against this with
|
7
|
+
Run test gem through docker against this website with (Note it is an example that has some failures)
|
8
8
|
|
9
9
|
`docker run -t registry.gitlab.com/samuel-garratt/generic_test generic_test page samuel-garratt.gitlab.io/generic_test`
|
10
10
|
|
data/exe/generic_test
CHANGED
@@ -16,10 +16,16 @@ class Exe < Thor
|
|
16
16
|
desc = ENV['PAGE_URL'].split('://').last.tr('/', '_')
|
17
17
|
junit_format = "-f RspecJunitFormatter --out logs/page_#{desc}.xml"
|
18
18
|
ENV['REPORT_PATH'] = "reports/#{desc}"
|
19
|
-
html_format = '--require
|
19
|
+
html_format = '--require generic_test/html_reporter -f RspecHtmlReporter'
|
20
20
|
command = "rspec #{test_file_path} --format documentation --color #{junit_format} #{html_format}"
|
21
21
|
raise $CHILD_STATUS.to_s unless system command
|
22
22
|
end
|
23
|
+
|
24
|
+
desc 'version', 'Version of generic_test'
|
25
|
+
def version
|
26
|
+
require 'generic_test'
|
27
|
+
puts "GenericTest version #{GenericTest::VERSION}"
|
28
|
+
end
|
23
29
|
end
|
24
30
|
|
25
31
|
Exe.start(ARGV)
|
data/generic_test.gemspec
CHANGED
@@ -15,7 +15,7 @@ Gem::Specification.new do |spec|
|
|
15
15
|
spec.required_ruby_version = Gem::Requirement.new('>= 2.6.0')
|
16
16
|
spec.metadata['homepage_uri'] = spec.homepage
|
17
17
|
spec.metadata['source_code_uri'] = 'https://gitlab.com/samuel-garratt/generic_test'
|
18
|
-
spec.metadata['changelog_uri'] = 'https://gitlab.com/samuel-garratt/
|
18
|
+
spec.metadata['changelog_uri'] = 'https://gitlab.com/samuel-garratt/generic_test/blob/master/ChangeLog'
|
19
19
|
|
20
20
|
# Specify which files should be added to the gem when it is released.
|
21
21
|
# The `git ls-files -z` loads the files in the RubyGem that have been added into git.
|
@@ -27,15 +27,17 @@ Gem::Specification.new do |spec|
|
|
27
27
|
spec.require_paths = ['lib']
|
28
28
|
# Development dependencies are installed too since running external tests within gem
|
29
29
|
spec.add_development_dependency 'jekyll' # For hosting test website
|
30
|
-
spec.
|
31
|
-
|
32
|
-
spec.add_dependency 'rest-client'
|
33
|
-
spec.add_dependency 'rspec'
|
30
|
+
spec.add_development_dependency 'rake'
|
34
31
|
spec.add_dependency 'rspec-legacy_formatters' # Needed for rspec_html_reporter after RSpec 3
|
35
|
-
spec.add_dependency 'rspec_html_reporter'
|
36
|
-
spec.add_dependency 'rspec_junit_formatter' # Needed for nicer reporting of rspec for use in
|
37
|
-
spec.add_dependency '
|
38
|
-
|
39
|
-
spec.add_dependency '
|
40
|
-
spec.add_dependency '
|
32
|
+
spec.add_dependency 'rspec_html_reporter' # Pretty HTML reports
|
33
|
+
spec.add_dependency 'rspec_junit_formatter' # Needed for nicer reporting of rspec for use in CI
|
34
|
+
spec.add_dependency 'simplecov' # Code coverage
|
35
|
+
|
36
|
+
spec.add_dependency 'email_address' # Verify email address
|
37
|
+
spec.add_dependency 'rest-client' # Verify links
|
38
|
+
spec.add_dependency 'rspec' # Test framework
|
39
|
+
spec.add_dependency 'spellcheck' # Check for common spelling errors
|
40
|
+
spec.add_dependency 'thor' # Command line utility
|
41
|
+
spec.add_dependency 'watir' # UI interaction
|
42
|
+
spec.add_dependency 'webdrivers' # Download chromedriver automatically
|
41
43
|
end
|
data/lib/generic_test/checker.rb
CHANGED
@@ -1,18 +1,17 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
require 'rest-client'
|
4
|
+
require 'email_address'
|
4
5
|
|
5
6
|
# Module for checking parts on a site
|
6
7
|
module Checker
|
7
8
|
class << self
|
8
|
-
|
9
|
-
!href.start_with?('mailto:')
|
10
|
-
end
|
11
|
-
|
12
|
-
# Usign Javascript fetch to retrieve URL. See https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API/Using_Fetch and
|
9
|
+
# Using Javascript fetch to retrieve URL. See https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API/Using_Fetch and
|
13
10
|
# https://developer.mozilla.org/en-US/docs/Web/API/WindowOrWorkerGlobalScope/fetch#Parameters for details
|
14
11
|
# @return [Integer] Status code
|
15
12
|
def link_status(href)
|
13
|
+
return unless href
|
14
|
+
|
16
15
|
init_options = "const myInit = {
|
17
16
|
method: 'GET',
|
18
17
|
credentials: 'same-origin',
|
@@ -27,6 +26,11 @@ module Checker
|
|
27
26
|
raise GenericTest::Error, "Failed to fetch url '#{href}'"
|
28
27
|
end
|
29
28
|
|
29
|
+
# @return [Nil, String] Nil if valid, string if error
|
30
|
+
def valid_email?(email_address)
|
31
|
+
EmailAddress.error email_address
|
32
|
+
end
|
33
|
+
|
30
34
|
# Use rest-client to try and get status of URL
|
31
35
|
def call_via_rest_client(href)
|
32
36
|
RestClient.get(href).code
|
data/lib/generic_test/page.rb
CHANGED
@@ -3,6 +3,8 @@ module GenericTest
|
|
3
3
|
class Page
|
4
4
|
# @return [Array] List of links
|
5
5
|
attr_accessor :links
|
6
|
+
# @return [Array] List of emails
|
7
|
+
attr_accessor :emails
|
6
8
|
attr_accessor :url
|
7
9
|
attr_accessor :html
|
8
10
|
attr_accessor :title
|
@@ -10,11 +12,15 @@ module GenericTest
|
|
10
12
|
# Store state of page when it is loaded
|
11
13
|
# @param [Watir::Browser] browser Watir browser
|
12
14
|
def initialize(browser)
|
13
|
-
self.links = browser.links
|
15
|
+
self.emails, self.links = browser.links.partition do |link|
|
16
|
+
link.href.start_with?('mailto:')
|
17
|
+
end
|
18
|
+
links.reject! { |link| link.href.empty? }
|
19
|
+
emails.collect! { |link| link.href.split(':').last }
|
14
20
|
self.url = browser.url
|
15
21
|
self.html = browser.html
|
16
22
|
self.title = browser.title
|
17
|
-
puts "Found #{links.count} links at #{url} (#{title})"
|
23
|
+
puts "Found #{links.count} links, #{emails.count} emails at #{url} (#{title})"
|
18
24
|
end
|
19
25
|
end
|
20
26
|
end
|
data/lib/generic_test/version.rb
CHANGED
data/spec/generic_test_spec.rb
CHANGED
@@ -1,25 +1,32 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
+
# Used by executable to verify a particular web page
|
3
4
|
require 'generic_test/setup'
|
4
5
|
page = GenericTest.pages.first
|
5
6
|
links = page.links
|
6
7
|
RSpec.describe "#{page.title} Links respond" do
|
7
8
|
links.each_with_index do |link, index|
|
8
|
-
next unless link.href && !link.href.empty?
|
9
|
-
|
10
9
|
link_text = link.text.to_s.empty? ? '' : " \"#{link.text}\""
|
11
10
|
it "Link (#{index + 1})#{link_text} to '#{link.href}' succeeds" do
|
12
|
-
|
13
|
-
expect(Checker.link_status(link.href)).to be_between 200, 399
|
14
|
-
end
|
11
|
+
expect(Checker.link_status(link.href)).to be_between 200, 399
|
15
12
|
end
|
16
13
|
end
|
17
14
|
end
|
15
|
+
|
16
|
+
emails = page.emails
|
17
|
+
RSpec.describe "#{page.title} Emails are valid" do
|
18
|
+
emails.each do |email|
|
19
|
+
it "Email (#{email}) is valid" do
|
20
|
+
expect(Checker.valid_email?(email)).to be nil
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
18
25
|
RSpec.describe "#{page.title} Page content" do
|
19
26
|
spellcheck_report = SpellCheck::ProofReader.check(page.html)
|
20
27
|
context 'does not have common spelling mistakes' do
|
21
28
|
it 'has no mistakes' do
|
22
|
-
expect(spellcheck_report.
|
29
|
+
expect(spellcheck_report.errata.size).to eq 0
|
23
30
|
end
|
24
31
|
spellcheck_report.errata.group_by(&:line_number).each do |line_number, mistakes|
|
25
32
|
context "Line #{line_number}" do
|
data/spec/spec_helper.rb
CHANGED
@@ -1,6 +1,16 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
require 'bundler/setup'
|
4
|
+
require 'simplecov'
|
5
|
+
SimpleCov.start do
|
6
|
+
add_filter 'spec'
|
7
|
+
end
|
8
|
+
|
9
|
+
SimpleCov.at_exit do
|
10
|
+
SimpleCov.result.format!
|
11
|
+
SimpleCov.minimum_coverage 85
|
12
|
+
end
|
13
|
+
|
4
14
|
require 'generic_test/setup'
|
5
15
|
|
6
16
|
RSpec.configure do |config|
|
data/spec/test_gem_spec.rb
CHANGED
@@ -1,15 +1,37 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
# Test gem works
|
3
|
+
# Test gem works
|
4
4
|
|
5
5
|
page = GenericTest.pages.first
|
6
6
|
links = page.links
|
7
|
-
|
8
|
-
RSpec.describe 'Links
|
9
|
-
it '
|
10
|
-
expect(
|
7
|
+
|
8
|
+
RSpec.describe 'Links' do
|
9
|
+
it 'counts correctly (not include )' do
|
10
|
+
expect(links.size).to eq 3
|
11
|
+
end
|
12
|
+
context 'successful' do
|
13
|
+
it 'external page' do
|
14
|
+
expect(Checker.link_status(links[0].href)).to be_between 200, 399
|
15
|
+
end
|
16
|
+
it 'internal link' do
|
17
|
+
expect(Checker.link_status(links[2].href)).to be_between 200, 399
|
18
|
+
end
|
11
19
|
end
|
12
|
-
it 'broken
|
20
|
+
it 'broken causes failure' do
|
13
21
|
expect(Checker.link_status(links[1].href)).to eq 404
|
14
22
|
end
|
15
23
|
end
|
24
|
+
puts page.emails
|
25
|
+
RSpec.describe 'Emails' do
|
26
|
+
it 'counts correctly' do
|
27
|
+
expect(page.emails.size).to eq 2
|
28
|
+
end
|
29
|
+
context 'validate' do
|
30
|
+
it 'accepts valid email' do
|
31
|
+
expect(Checker.valid_email?(page.emails[0])).to be nil
|
32
|
+
end
|
33
|
+
it 'returns invalid email error' do
|
34
|
+
expect(Checker.valid_email?(page.emails[1])).to eq 'Domain name not registered'
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
data/test_site/index.html
CHANGED
@@ -12,6 +12,12 @@
|
|
12
12
|
<p id="broken_link">
|
13
13
|
<a href="broken_link.html">Broken link</a>
|
14
14
|
</p>
|
15
|
+
<h2><a id="special_links"></a> Special links</h2>
|
16
|
+
<p>
|
17
|
+
<a href="mailto:samuel.garratt@integrationqa.com">Email me</a>
|
18
|
+
<a href="#special_links">Link to heading</a>
|
19
|
+
<a href="mailto:invalid.person@bad-d0main.com">Don't try to email this</a>
|
20
|
+
</p>
|
15
21
|
<p>hello world.
|
16
22
|
|
17
23
|
I create aplication now.
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: generic_test
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.10
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Samuel Garratt
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-02-
|
11
|
+
date: 2020-02-18 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: jekyll
|
@@ -26,6 +26,20 @@ dependencies:
|
|
26
26
|
version: '0'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: rake
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ">="
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: rspec-legacy_formatters
|
29
43
|
requirement: !ruby/object:Gem::Requirement
|
30
44
|
requirements:
|
31
45
|
- - ">="
|
@@ -39,7 +53,7 @@ dependencies:
|
|
39
53
|
- !ruby/object:Gem::Version
|
40
54
|
version: '0'
|
41
55
|
- !ruby/object:Gem::Dependency
|
42
|
-
name:
|
56
|
+
name: rspec_html_reporter
|
43
57
|
requirement: !ruby/object:Gem::Requirement
|
44
58
|
requirements:
|
45
59
|
- - ">="
|
@@ -53,7 +67,7 @@ dependencies:
|
|
53
67
|
- !ruby/object:Gem::Version
|
54
68
|
version: '0'
|
55
69
|
- !ruby/object:Gem::Dependency
|
56
|
-
name:
|
70
|
+
name: rspec_junit_formatter
|
57
71
|
requirement: !ruby/object:Gem::Requirement
|
58
72
|
requirements:
|
59
73
|
- - ">="
|
@@ -67,7 +81,7 @@ dependencies:
|
|
67
81
|
- !ruby/object:Gem::Version
|
68
82
|
version: '0'
|
69
83
|
- !ruby/object:Gem::Dependency
|
70
|
-
name:
|
84
|
+
name: simplecov
|
71
85
|
requirement: !ruby/object:Gem::Requirement
|
72
86
|
requirements:
|
73
87
|
- - ">="
|
@@ -81,7 +95,7 @@ dependencies:
|
|
81
95
|
- !ruby/object:Gem::Version
|
82
96
|
version: '0'
|
83
97
|
- !ruby/object:Gem::Dependency
|
84
|
-
name:
|
98
|
+
name: email_address
|
85
99
|
requirement: !ruby/object:Gem::Requirement
|
86
100
|
requirements:
|
87
101
|
- - ">="
|
@@ -95,7 +109,21 @@ dependencies:
|
|
95
109
|
- !ruby/object:Gem::Version
|
96
110
|
version: '0'
|
97
111
|
- !ruby/object:Gem::Dependency
|
98
|
-
name:
|
112
|
+
name: rest-client
|
113
|
+
requirement: !ruby/object:Gem::Requirement
|
114
|
+
requirements:
|
115
|
+
- - ">="
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: '0'
|
118
|
+
type: :runtime
|
119
|
+
prerelease: false
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
requirements:
|
122
|
+
- - ">="
|
123
|
+
- !ruby/object:Gem::Version
|
124
|
+
version: '0'
|
125
|
+
- !ruby/object:Gem::Dependency
|
126
|
+
name: rspec
|
99
127
|
requirement: !ruby/object:Gem::Requirement
|
100
128
|
requirements:
|
101
129
|
- - ">="
|
@@ -189,6 +217,7 @@ files:
|
|
189
217
|
- generic_test.gemspec
|
190
218
|
- lib/generic_test.rb
|
191
219
|
- lib/generic_test/checker.rb
|
220
|
+
- lib/generic_test/html_reporter.rb
|
192
221
|
- lib/generic_test/page.rb
|
193
222
|
- lib/generic_test/setup.rb
|
194
223
|
- lib/generic_test/version.rb
|
@@ -203,7 +232,7 @@ licenses:
|
|
203
232
|
metadata:
|
204
233
|
homepage_uri: https://gitlab.com/samuel-garratt/generic_test
|
205
234
|
source_code_uri: https://gitlab.com/samuel-garratt/generic_test
|
206
|
-
changelog_uri: https://gitlab.com/samuel-garratt/
|
235
|
+
changelog_uri: https://gitlab.com/samuel-garratt/generic_test/blob/master/ChangeLog
|
207
236
|
post_install_message:
|
208
237
|
rdoc_options: []
|
209
238
|
require_paths:
|