lazy-check 1.0.2 → 1.2.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README-fr.md +150 -0
- data/README.md +8 -8
- data/lib/lazy/check/locales/en/errors.yaml +124 -0
- data/lib/lazy/check/locales/en/messages.yaml +23 -0
- data/lib/lazy/check/locales/fr/messages.yaml +5 -0
- data/lib/lazy/check/reporter.rb +7 -2
- data/lib/lazy/check/version.rb +1 -1
- metadata +4 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 01b26c8325189a7f9eb1fd7267c017fb85462466363d698dc85925292ff77204
|
4
|
+
data.tar.gz: c4e0094b36134478cbed092b1a94d00fc7ec89e9439e452ef958c908680e27da
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 0c5e860db28567e05f96909b080a723e8a7b2c047ad72e53a01f46126db543557beb492f02283b4e17d9328a3790d6e4546e1b81cc502090d5971ca4046dd429
|
7
|
+
data.tar.gz: 13e3bb1d81c208c74702f47df3dbcf37b1f0be82b474311e8456c486dc97673fe2f0cc6be676a95b4899d6f0ba73eb0fef16c2cd1c9accd93ed4cd17ca4ad897
|
data/README-fr.md
ADDED
@@ -0,0 +1,150 @@
|
|
1
|
+
# Lazy::Check
|
2
|
+
|
3
|
+
Ce gem permet de tester de façon paresseuse un site web.
|
4
|
+
|
5
|
+
## Installation
|
6
|
+
|
7
|
+
Add this line to your application's Gemfile:
|
8
|
+
|
9
|
+
```ruby
|
10
|
+
gem 'lazy-check'
|
11
|
+
require 'lazy/check'
|
12
|
+
```
|
13
|
+
|
14
|
+
And then execute:
|
15
|
+
|
16
|
+
$ bundle install
|
17
|
+
|
18
|
+
Or install it yourself as:
|
19
|
+
|
20
|
+
$ gem install lazy-check
|
21
|
+
|
22
|
+
## Usage
|
23
|
+
|
24
|
+
### Pour un test simple (sans recette)
|
25
|
+
|
26
|
+
Si on a juste du code XML-like à tester, on peut utiliser la méthode `Lazy::Checker.check`.
|
27
|
+
|
28
|
+
~~~ruby
|
29
|
+
gem 'lazy-check'
|
30
|
+
require 'lazy/check'
|
31
|
+
|
32
|
+
code = "<root><div class="contient">du texte</div></root>"
|
33
|
+
check = {tag: 'div.contient', text: "du texte"}
|
34
|
+
Lazy::Checker.check(code, check)
|
35
|
+
# => Écrit :
|
36
|
+
# -------------------------------------
|
37
|
+
# Succès 1 Failure 0 Temps ...
|
38
|
+
~~~
|
39
|
+
|
40
|
+
On peut aussi obtenir les résultats en retour de méthode (c'est un `Lazy::Checker::Reporter`)
|
41
|
+
|
42
|
+
~~~ruby
|
43
|
+
Lazy::Checker.check(code, check, **{return_result: true})
|
44
|
+
# => Reporter
|
45
|
+
~~~
|
46
|
+
|
47
|
+
> Noter que dans ce cas-là, rien n'est écrit en console.
|
48
|
+
|
49
|
+
## Pour un test avec recette
|
50
|
+
|
51
|
+
Une « recette » est un fichier `YAML` qui définit l'url d'une page internet, ainsi que les checks à effectuer dessus. Cf. ci-dessous.
|
52
|
+
|
53
|
+
~~~ruby
|
54
|
+
require "lazy-check"
|
55
|
+
|
56
|
+
checker = Lazy::Checker.new("path/to/recipe.yaml")
|
57
|
+
checker.check
|
58
|
+
# => Produit le résultat
|
59
|
+
~~~
|
60
|
+
|
61
|
+
Si la recette se trouve là où le terminal se trouve, il suffit de faire :
|
62
|
+
|
63
|
+
~~~ruby
|
64
|
+
require "lazy-check"
|
65
|
+
|
66
|
+
Lazy::Checker.new.check
|
67
|
+
~~~
|
68
|
+
|
69
|
+
La recette (`recipe.yaml`) définit les vérifications qu'il faut effectuer.
|
70
|
+
|
71
|
+
~~~yaml
|
72
|
+
---
|
73
|
+
name: "Nom général de la recette"
|
74
|
+
base: https://www.mon.domaine.net
|
75
|
+
tests:
|
76
|
+
- name: "Le premier test"
|
77
|
+
url: "" # donc la base
|
78
|
+
checks:
|
79
|
+
- name: "Existence du DIV#content avec du texte"
|
80
|
+
tag: 'div#content'
|
81
|
+
empty: false
|
82
|
+
- name: "Existence du SPAN#range sans texte"
|
83
|
+
tag: 'span#range'
|
84
|
+
empty: true
|
85
|
+
|
86
|
+
- name: "Une redirection"
|
87
|
+
url: "redirection.html"
|
88
|
+
redirect_to: "https://nouvelle.url.net"
|
89
|
+
|
90
|
+
- name: "Une page erronée"
|
91
|
+
url: "page_inexistante.html"
|
92
|
+
response: 404
|
93
|
+
~~~
|
94
|
+
|
95
|
+
### Check Properties
|
96
|
+
|
97
|
+
~~~yaml
|
98
|
+
tag: [String] Le sélector
|
99
|
+
count: [Integer] Nombre attendu d'éléments
|
100
|
+
empty: [Bool] Si true, doit être vide ou non vide
|
101
|
+
direct_child: [Bool] Si true, doit être un enfant direct
|
102
|
+
text: [String] Le texte qui doit être contenu
|
103
|
+
contains: [String|Array] Ce que doit contenir la page
|
104
|
+
min_length: [Integer] La longueur minimum du contenu (text seulement)
|
105
|
+
max_length: [Integer] La longueur maximum du contenu (text seulement)
|
106
|
+
~~~
|
107
|
+
|
108
|
+
## Exemples
|
109
|
+
|
110
|
+
Simplement vérifier qu’une page réponde correctement :
|
111
|
+
|
112
|
+
~~~yaml
|
113
|
+
# recipe.yaml
|
114
|
+
---
|
115
|
+
name: "La page existe"
|
116
|
+
base: 'https://monsite.net'
|
117
|
+
tests:
|
118
|
+
- name: "La page index.html existe et répond correctement"
|
119
|
+
url: 'index.html'
|
120
|
+
response: 200
|
121
|
+
~~~
|
122
|
+
|
123
|
+
Vérifier qu’une page contient les éléments de base
|
124
|
+
|
125
|
+
~~~yaml
|
126
|
+
# recipe.yaml
|
127
|
+
---
|
128
|
+
name: "Check simple de l'existence des éléments de base"
|
129
|
+
base: 'https://monsite.net'
|
130
|
+
tests:
|
131
|
+
- name: "La page base.html contient les éléments de base"
|
132
|
+
url: 'index.html'
|
133
|
+
checks:
|
134
|
+
- tag: 'header'
|
135
|
+
- tag: 'section#body'
|
136
|
+
- tag: 'footer'
|
137
|
+
~~~
|
138
|
+
|
139
|
+
|
140
|
+
|
141
|
+
## Development
|
142
|
+
|
143
|
+
After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake test` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
|
144
|
+
|
145
|
+
To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).
|
146
|
+
|
147
|
+
## Contributing
|
148
|
+
|
149
|
+
Bug reports and pull requests are welcome on GitHub at https://github.com/PhilippePerret/lazy-check.
|
150
|
+
|
data/README.md
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
# Lazy::Check
|
2
2
|
|
3
|
-
|
3
|
+
This gem allows you to lazily test a website.
|
4
4
|
|
5
5
|
## Installation
|
6
6
|
|
@@ -8,7 +8,7 @@ Add this line to your application's Gemfile:
|
|
8
8
|
|
9
9
|
```ruby
|
10
10
|
gem 'lazy-check'
|
11
|
-
|
11
|
+
require 'lazy/check'
|
12
12
|
```
|
13
13
|
|
14
14
|
And then execute:
|
@@ -21,20 +21,20 @@ Or install it yourself as:
|
|
21
21
|
|
22
22
|
## Usage
|
23
23
|
|
24
|
-
###
|
24
|
+
### For a simple test (without a recipe)
|
25
25
|
|
26
|
-
|
26
|
+
If you only have XML-like code to test, you can use the `Lazy::Checker#check` method.
|
27
27
|
|
28
28
|
~~~ruby
|
29
29
|
gem 'lazy-check'
|
30
30
|
require 'lazy/check'
|
31
31
|
|
32
|
-
code = "<root><div class="
|
33
|
-
check = {tag: 'div.
|
32
|
+
code = "<root><div class="contains">some text</div></root>"
|
33
|
+
check = {tag: 'div.contains', text: "some text"}
|
34
34
|
Lazy::Checker.check(code, check)
|
35
|
-
# =>
|
35
|
+
# => Output:
|
36
36
|
# -------------------------------------
|
37
|
-
#
|
37
|
+
# Success 1 Failures 0 Duration ...
|
38
38
|
~~~
|
39
39
|
|
40
40
|
On peut aussi obtenir les résultats en retour de méthode (c'est un `Lazy::Checker::Reporter`)
|
@@ -1,4 +1,56 @@
|
|
1
1
|
---
|
2
|
+
# -- Erreurs de recette --
|
3
|
+
200: |
|
4
|
+
The recipe file '%{path}' could not be found.
|
5
|
+
201: |
|
6
|
+
The data %{a} is not valid for instantiating a Checker::Url. It should
|
7
|
+
be either a (valid) URL or valid HTML code.
|
8
|
+
202: |
|
9
|
+
The recipe file does not contain any data.
|
10
|
+
203: |
|
11
|
+
The recipe data should be a table (Hash), not a %{c}.
|
12
|
+
204: |
|
13
|
+
The recipe should define the key :tests. It only defines the keys %{ks}.
|
14
|
+
205: |
|
15
|
+
The :tests data should be an Array, not a %{c}.
|
16
|
+
206: |
|
17
|
+
The recipe should define its name with the key :name.
|
18
|
+
|
19
|
+
# -- Errors in test definition. --
|
20
|
+
|
21
|
+
300: |
|
22
|
+
The test data should be a Hash table, not a %{c}.
|
23
|
+
301: |
|
24
|
+
The test table should define the :url property, which is the page to reach.
|
25
|
+
I only find the %{ks} properties.
|
26
|
+
302: |
|
27
|
+
The provided URL (%{u}) is not valid: %{e}.
|
28
|
+
303: |
|
29
|
+
it must be defined, not nil.
|
30
|
+
304: |
|
31
|
+
it must be a string, not a %{c}.
|
32
|
+
305: |
|
33
|
+
it must start with 'http' or 'https' necessarily.
|
34
|
+
306: |
|
35
|
+
it should not contain any spaces.
|
36
|
+
307: |
|
37
|
+
A test must define its name (in :name); it only defines the keys %{ks}.
|
38
|
+
308: |
|
39
|
+
A test must define the checks to perform in a property called, specifically,
|
40
|
+
:checks. The test only defines the %{ks} properties.
|
41
|
+
309: |
|
42
|
+
The checks to be performed for the test (:checks) should be a list (Array),
|
43
|
+
not a %{c}.
|
44
|
+
310: |
|
45
|
+
The redirection %{a} should be a string, not a %{c}.
|
46
|
+
311: |
|
47
|
+
The redirection %{a} should start with 'http[s]'.
|
48
|
+
312: |
|
49
|
+
To test the HTTP response, you must provide the expected status code, which should
|
50
|
+
be an Integer. However, %{a} is a %{c}.
|
51
|
+
For example, you can use: 404.
|
52
|
+
800: |
|
53
|
+
-- UNUSED --
|
2
54
|
1000: |
|
3
55
|
Lazy::Checker::CheckCase instanciation requires a Lazy::Checker::Url (first argument).
|
4
56
|
Actual value is %{a}::%{c}.
|
@@ -11,3 +63,75 @@
|
|
11
63
|
1003: |
|
12
64
|
:tag value of the CheckCase data should define at least a id (tagName#id) or a css
|
13
65
|
class (tagName.css_class). '%{a}' defines neither.
|
66
|
+
1004: |
|
67
|
+
In the :tag data, :count (%{a}) should be a number, not a %{c}.
|
68
|
+
2000: |
|
69
|
+
The definition of :contains is incorrect. It should be a table (defining at
|
70
|
+
least :tag), a string (text to be contained or a tag with an identifier and/or
|
71
|
+
CSS class), or a list of these elements. The class of the element, in any case,
|
72
|
+
cannot be %{c}.
|
73
|
+
|
74
|
+
# --- Errors in page check. ---
|
75
|
+
|
76
|
+
4999: |
|
77
|
+
No %{tag} element was found when %{e} were expected.
|
78
|
+
5000: |
|
79
|
+
Wrong count. We expected %{e} %{tag} elements, but found %{a} on the page.
|
80
|
+
5001: |
|
81
|
+
The content of %{tag} should be empty, but it contains the text
|
82
|
+
"%{a}".
|
83
|
+
5002: |
|
84
|
+
The content of %{tag} should not be empty, but it is.
|
85
|
+
5003: |
|
86
|
+
The content of %{tag} should not contain any text, but it
|
87
|
+
contains %{a}.
|
88
|
+
5004: |
|
89
|
+
The content of %{tag} should contain text, but it doesn't display any.
|
90
|
+
5010: |
|
91
|
+
We should find %{tag} containing %{e}. The following issues were
|
92
|
+
encountered: %{a}.
|
93
|
+
5011: |
|
94
|
+
We should find %{tag} containing the text %{e}.
|
95
|
+
5020: |
|
96
|
+
should contain the string %{e}
|
97
|
+
5021: |
|
98
|
+
should contain the tag defined by %{e}
|
99
|
+
5030: |
|
100
|
+
should define the attributes
|
101
|
+
5031: |
|
102
|
+
missing or unequal attributes: %{e}.
|
103
|
+
5032: |
|
104
|
+
the content is not long enough. It should be at least %{e} characters long,
|
105
|
+
but it is %{a} characters long.
|
106
|
+
5033: |
|
107
|
+
the content is too long. It should be less than %{e} characters, but it
|
108
|
+
is %{a} characters long.
|
109
|
+
|
110
|
+
5500: |
|
111
|
+
The URL is not redirected. It should have been redirected to
|
112
|
+
%{e}.
|
113
|
+
5501: |
|
114
|
+
The URL is redirected to the wrong address. It should have been redirected to: %{e}.
|
115
|
+
It is redirected to: %{a}.
|
116
|
+
5502: |
|
117
|
+
The expected HTTP Response is not correct...
|
118
|
+
We were expecting the response: %{e}
|
119
|
+
We received the response: %{a}
|
120
|
+
5503: |
|
121
|
+
Error 404. The page %{e} could not be found.
|
122
|
+
6000: |
|
123
|
+
The first argument of Lazy::Checker.check must be valid XML code.
|
124
|
+
However, %{se}.
|
125
|
+
6001: |
|
126
|
+
%{a} is not a String; it's a %{c}.
|
127
|
+
6002: |
|
128
|
+
a valid XML code should be wrapped in a root node. This is not the case
|
129
|
+
for %{a}.
|
130
|
+
6003: |
|
131
|
+
the data is null (nil).
|
132
|
+
6010: |
|
133
|
+
The second argument of Lazy::Checker.check must be a valid Hash table, containing
|
134
|
+
the correct keys: %{se}.
|
135
|
+
6011: |
|
136
|
+
%{a} is not a Hash; it's a %{c}.
|
137
|
+
|
@@ -0,0 +1,23 @@
|
|
1
|
+
---
|
2
|
+
# -- Termes de messages --
|
3
|
+
10: 'count '
|
4
|
+
11: 'length '
|
5
|
+
12: 'min length '
|
6
|
+
13: 'max length '
|
7
|
+
14: 'empty'
|
8
|
+
15: 'not empty'
|
9
|
+
16: 'containing'
|
10
|
+
17: 'containing the string'
|
11
|
+
20: 'only as direct child'
|
12
|
+
21: 'with attributes'
|
13
|
+
|
14
|
+
Success: 'Success'
|
15
|
+
Failures: 'Failures'
|
16
|
+
Duration: 'Duration'
|
17
|
+
PleaseWait: 'Please wait…'
|
18
|
+
|
19
|
+
# -- Les messages de retour des checks --
|
20
|
+
|
21
|
+
4999: |
|
22
|
+
%{tag} tag found with expected data:
|
23
|
+
%{f_data}
|
data/lib/lazy/check/reporter.rb
CHANGED
@@ -17,6 +17,7 @@ class Checker
|
|
17
17
|
# Affichage du rapport
|
18
18
|
#
|
19
19
|
def display
|
20
|
+
clear unless debug?
|
20
21
|
puts "\n\n"
|
21
22
|
puts "#{checker.name}".jaune
|
22
23
|
puts "-"* checker.name.length
|
@@ -28,7 +29,7 @@ class Checker
|
|
28
29
|
display_list_resultats(success = false)
|
29
30
|
end
|
30
31
|
color = nombre_erreurs > 0 ? :red : :vert
|
31
|
-
msg = "Success #{@successs.count} Failures #{@failures.count}
|
32
|
+
msg = "#{MESSAGES[:Success]} #{@successs.count} #{MESSAGES[:Failures]} #{@failures.count} #{MESSAGES[:Duration]} #{formated_duree}"
|
32
33
|
puts "-" * msg.length
|
33
34
|
puts msg.send(color)
|
34
35
|
end
|
@@ -45,7 +46,7 @@ class Checker
|
|
45
46
|
methode = success ? :message : :errors
|
46
47
|
color = success ? :vert : :red
|
47
48
|
liste = success ? @successs : @failures
|
48
|
-
prefix = success ? '
|
49
|
+
prefix = success ? '👍' : '👎'
|
49
50
|
|
50
51
|
max_index = liste.count + 1
|
51
52
|
max_len_index = "[#{prefix} #{max_index}] ".length
|
@@ -57,6 +58,10 @@ class Checker
|
|
57
58
|
end
|
58
59
|
|
59
60
|
def start
|
61
|
+
clear unless debug?
|
62
|
+
puts "\n\n"
|
63
|
+
puts "#{checker.name}".jaune
|
64
|
+
puts MESSAGES[:PleaseWait].bleu
|
60
65
|
@start_time = Time.now
|
61
66
|
@successs = []
|
62
67
|
@failures = []
|
data/lib/lazy/check/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: lazy-check
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0
|
4
|
+
version: 1.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- PhilippePerret
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2023-09-
|
11
|
+
date: 2023-09-30 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: minitest
|
@@ -80,6 +80,7 @@ files:
|
|
80
80
|
- Gemfile
|
81
81
|
- Gemfile.lock
|
82
82
|
- Notes-developper.md
|
83
|
+
- README-fr.md
|
83
84
|
- README.md
|
84
85
|
- Rakefile
|
85
86
|
- bin/console
|
@@ -96,6 +97,7 @@ files:
|
|
96
97
|
- lib/lazy/check/checker_url.rb
|
97
98
|
- lib/lazy/check/constants.rb
|
98
99
|
- lib/lazy/check/locales/en/errors.yaml
|
100
|
+
- lib/lazy/check/locales/en/messages.yaml
|
99
101
|
- lib/lazy/check/locales/fr/errors.yaml
|
100
102
|
- lib/lazy/check/locales/fr/messages.yaml
|
101
103
|
- lib/lazy/check/reporter.rb
|