generic_test 0.2.2 → 0.3.1

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
  SHA256:
3
- metadata.gz: f6379c81a2dea26407fa5633791cb839909581636ae394a3f691e89a25a0d6c6
4
- data.tar.gz: a2baae840463737782dc39a89a91b1cc34a4c865b4e1e542a9e67c647797e337
3
+ metadata.gz: fa5ac1b64df0509fe04187e155f7a5ea61d91abe6e69118f907128dd5debd536
4
+ data.tar.gz: 0d969885b9c68bc367ef7a0e2f3e57e273106fb23850247c42ca9df58af69d01
5
5
  SHA512:
6
- metadata.gz: 10440d8210e40574dba8ec815443bed05a640ec3bd303f5a78ee8d035767e1c8faa03711446664083b4a2b6196b5f06b9db1e28b4477614965e3e8774b94afd6
7
- data.tar.gz: ad67a5d1996580967d7deda6970a15a99cb86d96bedbb6168e5c0420c6e117bb13f62751ed14661a4cbd45f9364388bbe4a1e337ffc05da154c80cf1a8e222de
6
+ metadata.gz: bafdce738fd92376ee241cf140413ff55e82def63a08a26ff7288714daa424f588dce326f66729d5b7aa3647593c4c6351bc89956e7af02161553d664fa3220c
7
+ data.tar.gz: b0c8409d760eed8c9df56837c8b98652e7166f801faf7cb4d66abd3d520c109804e6222ec1c6b9f9ed42ff55f344937c97c36ce016e21a8af50c383126ed0be9
data/.gitlab-ci.yml CHANGED
@@ -8,7 +8,7 @@ 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: test # Part of a later stage
11
+ stage: deploy # Part of a later stage
12
12
  services:
13
13
  - docker:20.10.11-dind
14
14
  image: docker:20.10.11
@@ -18,12 +18,10 @@ docker_build:
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
21
- # only:
22
- # - master
23
- # needs: ["test"]
24
- except:
25
- changes:
26
- - "*.md"
21
+ only:
22
+ - master
23
+ needs: ["test"]
24
+ when: manual
27
25
 
28
26
  test:
29
27
  image: registry.gitlab.com/samuel-garratt/generic_test
@@ -51,7 +49,7 @@ example_test:
51
49
  artifacts:
52
50
  paths:
53
51
  - logs/*.xml
54
- - reports
52
+ - logs/*.html
55
53
  reports:
56
54
  junit: logs/*.xml
57
55
  expire_in: 1 week
data/.rspec CHANGED
@@ -1,5 +1,5 @@
1
1
  --format documentation
2
- --format html --out report.html
2
+ --format html --out logs/report.html
3
3
  --color
4
4
  --require spec_helper
5
5
  --format RspecJunitFormatter --out logs/page_<%= ENV['PAGE_URL'].split('://').last.tr('/', '_') %>.xml
data/ChangeLog CHANGED
@@ -1,3 +1,12 @@
1
+ Version 0.3.1
2
+ * Going through subpages goes 1 level deeper to subpages of subpages
3
+
4
+ Version 0.3.0
5
+ * Added option to test all subpages and skip spellcheck
6
+
7
+ Version 0.2.3
8
+ * Put HTML report into logs folder and mention sourcing it
9
+
1
10
  Version 0.2.2
2
11
  * Ignore telephone numbers in links
3
12
 
data/README.md CHANGED
@@ -16,6 +16,18 @@ To get a log of your tests share a volume with the container.
16
16
 
17
17
  > Please share this volume from an empty folder. Running from within another gem might cause an issue
18
18
 
19
+ To test test links on all subpages of a site add `--all-subpages` to the command.
20
+
21
+ To test without performing spellchecking of common spelling add `--no-spellcheck`
22
+
23
+ E.g
24
+
25
+ `docker run -t registry.gitlab.com/samuel-garratt/generic_test generic_test page samuel-garratt.gitlab.io/generic_test --all-subpages --no-spellcheck`
26
+
27
+ You can see all options by running
28
+
29
+ `docker run -t registry.gitlab.com/samuel-garratt/generic_test generic_test help page`
30
+
19
31
  ## Add to gitlab CI for your website
20
32
 
21
33
  Add the following `YAML` to test against a website
@@ -30,7 +42,7 @@ example_test:
30
42
  artifacts:
31
43
  paths:
32
44
  - logs/*.xml
33
- - reports # HTML reports
45
+ - logs/*.html # HTML reports
34
46
  reports:
35
47
  junit: logs/*.xml
36
48
  expire_in: 1 week
data/exe/generic_test CHANGED
@@ -12,17 +12,22 @@ class Exe < Thor
12
12
  end
13
13
 
14
14
  desc 'page page_url', 'Test web page'
15
+ method_options all_subpages: false
16
+ method_options spellcheck: true
15
17
  def page(page_url)
16
18
  ENV['PAGE_URL'] = page_url
19
+ ENV['ALL_SUBPAGES'] ||= options.all_subpages?.to_s
20
+ ENV['SPELLCHECK_ON'] = options.spellcheck?.to_s
17
21
  test_file_path = File.join(File.dirname(__FILE__), '..', 'spec', 'generic_test_spec.rb')
18
22
  raise "no file at #{test_file_path}" unless File.exist? test_file_path
19
23
 
20
24
  desc = ENV['PAGE_URL'].split('://').last.tr('/', '_')
21
25
  junit_format = "-f RspecJunitFormatter --out logs/page_#{desc}.xml"
22
26
  ENV['REPORT_PATH'] = "reports/#{desc}"
23
- html_format = '--format html --out report.html'
27
+ html_format = '--format html --out logs/report.html'
24
28
  command = "rspec #{test_file_path} --format documentation --color #{junit_format} #{html_format}"
25
- raise $CHILD_STATUS.to_s unless system command
29
+ exit(1) unless system command
30
+ #raise $CHILD_STATUS.to_s unless system command
26
31
  end
27
32
 
28
33
  desc 'version', 'Version of generic_test'
@@ -3,8 +3,10 @@
3
3
  module GenericTest
4
4
  # Represents a web page state at a particular point of time
5
5
  class Page
6
- # @return [Array] List of links
6
+ # @return [Array] List of links elements on the page
7
7
  attr_accessor :links
8
+ # @return [Array] List of urls that include domain being tested
9
+ attr_accessor :internal_links
8
10
  # @return [Array] List of emails
9
11
  attr_accessor :emails
10
12
  attr_accessor :url
@@ -18,8 +20,11 @@ module GenericTest
18
20
  self.emails, self.links = browser.links.partition do |link|
19
21
  link.href.start_with?('mailto:')
20
22
  end
21
- links.reject! { |link| link.href.empty? || link.href.start_with?('javascript:') || link.href.start_with?('tel:') }
23
+ links.reject! { |link| link.href.empty? || link.href.start_with?('javascript:') || link.href.include?('tel:') }
22
24
  emails.collect! { |link| link.href.split(':').last }
25
+ self.internal_links = links.filter do |link|
26
+ link.href.include? ENV["PAGE_URL"]
27
+ end.collect { |link| link.href }.uniq
23
28
  self.url = browser.url
24
29
  self.html = browser.html
25
30
  self.text = browser.text
@@ -34,8 +34,13 @@ if ENV[GT_LOGIN_URL] && ENV[GT_USERNAME] && ENV[GT_PASSWORD]
34
34
  puts "Login through #{ENV[GT_LOGIN_URL]} successful!"
35
35
  end
36
36
 
37
+ GenericTest.all_subpages = true if ENV['ALL_SUBPAGES'] == 'true'
37
38
  ENV['PAGE_URL'] = RestClient.get(ENV['PAGE_URL']).request.url # Check page exists
38
- puts "Checking #{ENV['PAGE_URL']}"
39
+ puts "Loading..."
39
40
  browser.goto ENV['PAGE_URL']
40
41
  sleep 2.5 # Give a bit of time for page to load
42
+ puts "Checking #{ENV['PAGE_URL']} (#{browser.title})"
41
43
  GenericTest.pages << GenericTest::Page.new(browser)
44
+ if GenericTest.all_subpages
45
+ puts "Subpages include #{GenericTest.pages.first.internal_links.count } links"
46
+ end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module GenericTest
4
- VERSION = '0.2.2'
4
+ VERSION = '0.3.1'
5
5
  end
data/lib/generic_test.rb CHANGED
@@ -19,7 +19,10 @@ module GenericTest
19
19
  attr_accessor :browser
20
20
  attr_accessor :pages
21
21
  attr_accessor :tested_links
22
+ # @return [Boolean]
22
23
  attr_accessor :only_javascript
24
+ # @return [Boolean] Whether to check all subpages of initial page
25
+ attr_accessor :all_subpages
23
26
  end
24
27
  end
25
28
 
@@ -3,6 +3,7 @@
3
3
  # Used by executable to verify a particular web page
4
4
  require 'generic_test/setup'
5
5
  page = GenericTest.pages.first
6
+ checkmark = "\u2713"
6
7
  links = page.links
7
8
  RSpec.describe "#{page.title} Links respond" do
8
9
  links.each_with_index do |link, index|
@@ -10,13 +11,60 @@ RSpec.describe "#{page.title} Links respond" do
10
11
  next if GenericTest.tested_links.include? link.href
11
12
 
12
13
  GenericTest.tested_links << link.href
13
- it "Link (#{index + 1})#{link_text} to '#{link.href}' succeeds" do
14
- expect(Checker.link_status(link.href)).to be_between 200, 399
14
+ link_href = link.href
15
+ it "Link (#{GenericTest.tested_links.count})#{link_text} to '#{link.href}' succeeds" do
16
+ expect(Checker.link_status(link_href)).to be_between 200, 399
15
17
  end
16
18
  end
17
19
  puts "Checking #{GenericTest.tested_links.count} non duplicate links"
18
20
  end
19
21
 
22
+ if GenericTest.all_subpages
23
+ extra_subpage_links = []
24
+ browser = GenericTest.browser
25
+ page.internal_links.each do |href|
26
+ browser.goto href
27
+ sub_page = GenericTest::Page.new(browser)
28
+ sub_page.internal_links.each do |internal_link|
29
+ extra_subpage_links << internal_link unless page.internal_links.include? internal_link
30
+ end
31
+ extra_subpage_links.uniq!
32
+ puts "Extra subpage links #{extra_subpage_links.count}"
33
+ RSpec.describe "Subpage #{browser.title} #{href}" do
34
+ sub_page.links.each_with_index do |link, index|
35
+ link_text = link.text.to_s.empty? ? '' : " \"#{link.text}\""
36
+ next if GenericTest.tested_links.include? link.href
37
+
38
+ GenericTest.tested_links << link.href
39
+ link_href = link.href
40
+ it "Link (#{GenericTest.tested_links.count})#{link_text} to '#{link.href}' succeeds" do
41
+ expect(Checker.link_status(link_href)).to be_between 200, 399
42
+ end
43
+ end
44
+ puts "#{checkmark} Checking #{GenericTest.tested_links.count} non duplicate links"
45
+ end
46
+ end
47
+
48
+ extra_subpage_links.each do |href|
49
+ browser.goto href
50
+ sub_page = GenericTest::Page.new(browser)
51
+
52
+ RSpec.describe "Subpage lv 2 #{browser.title} #{href}" do
53
+ sub_page.links.each_with_index do |link, index|
54
+ link_text = link.text.to_s.empty? ? '' : " \"#{link.text}\""
55
+ next if GenericTest.tested_links.include? link.href
56
+
57
+ GenericTest.tested_links << link.href
58
+ link_href = link.href
59
+ it "Link (#{GenericTest.tested_links.count})#{link_text} to '#{link.href}' succeeds" do
60
+ expect(Checker.link_status(link_href)).to be_between 200, 399
61
+ end
62
+ end
63
+ puts "#{checkmark} Checking #{GenericTest.tested_links.count} non duplicate links (lv2)"
64
+ end
65
+ end
66
+ end
67
+
20
68
  emails = page.emails
21
69
  RSpec.describe "#{page.title} Emails are valid" do
22
70
  emails.each do |email|
@@ -26,17 +74,19 @@ RSpec.describe "#{page.title} Emails are valid" do
26
74
  end
27
75
  end
28
76
 
29
- RSpec.describe "#{page.title} Page content" do
30
- spellcheck_report = SpellCheck::ProofReader.check(page.text)
31
- context 'does not have common spelling mistakes' do
32
- it 'has no mistakes' do
33
- expect(spellcheck_report.errata.size).to eq 0
34
- end
35
- spellcheck_report.errata.group_by(&:line_number).each do |line_number, mistakes|
36
- context "Line #{line_number}" do
37
- mistakes.each_with_index do |mistake, index|
38
- it "(#{index + 1}) #{mistake.pattern}" do
39
- expect(mistake.pattern).to eq mistake.expected
77
+ if ENV['SPELLCHECK_ON'] == 'true'
78
+ RSpec.describe "#{page.title} Page content spelling" do
79
+ spellcheck_report = SpellCheck::ProofReader.check(page.text)
80
+ context 'does not have common spelling mistakes' do
81
+ it 'has no mistakes' do
82
+ expect(spellcheck_report.errata.size).to eq 0
83
+ end
84
+ spellcheck_report.errata.group_by(&:line_number).each do |line_number, mistakes|
85
+ context "Line #{line_number}" do
86
+ mistakes.each_with_index do |mistake, index|
87
+ it "(#{index + 1}) #{mistake.pattern}" do
88
+ expect(mistake.pattern).to eq mistake.expected
89
+ end
40
90
  end
41
91
  end
42
92
  end
data/test_site/about.html CHANGED
@@ -10,7 +10,8 @@
10
10
  Generic test page makes things easy
11
11
  All tests in this page work
12
12
  </p>
13
- <a href="index.html">Index page</a>
13
+ <a href="sub_page.html">Sub page</a>
14
14
  <a href="mailto:samuel.garratt@integrationqa.com">Email me</a>
15
+ <a href="tel:021234567">Ignore telephone</a>
15
16
  </body>
16
17
  </html>
@@ -0,0 +1,14 @@
1
+ <html>
2
+ <head>
3
+ <title>Sub page</title>
4
+ </head>
5
+ <body>
6
+ <header>
7
+ <h1>Sub page</h1>
8
+ </header>
9
+ <p>
10
+ This is a sub page
11
+ </p>
12
+ <a href="about.html">About</a>
13
+ </body>
14
+ </html>
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.2.2
4
+ version: 0.3.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Samuel Garratt
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2024-07-09 00:00:00.000000000 Z
11
+ date: 2024-07-11 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: jekyll
@@ -201,6 +201,7 @@ files:
201
201
  - test_site/about.html
202
202
  - test_site/index.html
203
203
  - test_site/login_page.html
204
+ - test_site/sub_page.html
204
205
  homepage: https://gitlab.com/samuel-garratt/generic_test
205
206
  licenses:
206
207
  - MIT