forgery 0.2.2
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.
- data/README.markdown +99 -0
- data/VERSION.yml +4 -0
- data/generators/forgery/USAGE +6 -0
- data/generators/forgery/forgery_generator.rb +12 -0
- data/lib/dictionaries.rb +24 -0
- data/lib/dictionaries/cities +478 -0
- data/lib/dictionaries/colors +19 -0
- data/lib/dictionaries/company_names +400 -0
- data/lib/dictionaries/countries +249 -0
- data/lib/dictionaries/female_first_names +100 -0
- data/lib/dictionaries/frequencies +8 -0
- data/lib/dictionaries/genders +2 -0
- data/lib/dictionaries/languages +97 -0
- data/lib/dictionaries/last_names +250 -0
- data/lib/dictionaries/lorem_ipsum +151 -0
- data/lib/dictionaries/male_first_names +100 -0
- data/lib/dictionaries/name_suffixes +5 -0
- data/lib/dictionaries/name_titles +6 -0
- data/lib/dictionaries/province_abbrevs +13 -0
- data/lib/dictionaries/provinces +13 -0
- data/lib/dictionaries/races +93 -0
- data/lib/dictionaries/shirt_sizes +7 -0
- data/lib/dictionaries/state_abbrevs +50 -0
- data/lib/dictionaries/states +50 -0
- data/lib/dictionaries/street_suffixes +21 -0
- data/lib/dictionaries/streets +500 -0
- data/lib/dictionaries/top_level_domains +9 -0
- data/lib/extensions/array.rb +11 -0
- data/lib/extensions/hash.rb +12 -0
- data/lib/extensions/range.rb +9 -0
- data/lib/extensions/string.rb +48 -0
- data/lib/file_reader.rb +53 -0
- data/lib/forgeries/address_forgery.rb +136 -0
- data/lib/forgeries/basic_forgery.rb +71 -0
- data/lib/forgeries/internet_forgery.rb +17 -0
- data/lib/forgeries/lorem_ipsum_forgery.rb +112 -0
- data/lib/forgeries/monetary_forgery.rb +13 -0
- data/lib/forgeries/name_forgery.rb +34 -0
- data/lib/forgeries/personal_forgery.rb +22 -0
- data/lib/forgery.rb +47 -0
- data/lib/formats.rb +24 -0
- data/lib/formats/phone +1 -0
- data/lib/formats/street_number +5 -0
- data/lib/formats/zip +2 -0
- data/spec/dictionaries_spec.rb +35 -0
- data/spec/extensions/array_spec.rb +25 -0
- data/spec/extensions/range_spec.rb +26 -0
- data/spec/extensions/string_spec.rb +29 -0
- data/spec/file_reader_spec.rb +11 -0
- data/spec/forgeries/address_forgery_spec.rb +79 -0
- data/spec/forgeries/basic_forgery_spec.rb +175 -0
- data/spec/forgeries/internet_forgery_spec.rb +30 -0
- data/spec/forgeries/lorem_ipsum_forgery_spec.rb +128 -0
- data/spec/forgeries/monetary_forgery_spec.rb +4 -0
- data/spec/forgeries/name_forgery_spec.rb +4 -0
- data/spec/forgeries/personal_forgery_spec.rb +15 -0
- data/spec/forgery_spec.rb +42 -0
- data/spec/formats_spec.rb +35 -0
- data/spec/spec_helper.rb +32 -0
- metadata +114 -0
@@ -0,0 +1,13 @@
|
|
1
|
+
class MonetaryForgery < Forgery
|
2
|
+
def self.formatted_money(options={})
|
3
|
+
"$%1.2f" % money(options)
|
4
|
+
end
|
5
|
+
|
6
|
+
def self.money(options={})
|
7
|
+
options = {:max => 10,
|
8
|
+
:min => 0}.merge(options)
|
9
|
+
|
10
|
+
value = ((options[:min] * 100)..(options[:max] * 100)).random
|
11
|
+
"%1.2f" % (value.to_f / 100)
|
12
|
+
end
|
13
|
+
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
class NameForgery < Forgery
|
2
|
+
|
3
|
+
def self.last_name
|
4
|
+
dictionaries[:last_names].random
|
5
|
+
end
|
6
|
+
|
7
|
+
def self.first_name
|
8
|
+
[dictionaries[:male_first_names], dictionaries[:female_first_names]].random.random
|
9
|
+
end
|
10
|
+
|
11
|
+
def self.full_name
|
12
|
+
"#{self.first_name} #{self.last_name}"
|
13
|
+
end
|
14
|
+
|
15
|
+
def self.male_first_name
|
16
|
+
dictionaries[:male_first_names].random
|
17
|
+
end
|
18
|
+
|
19
|
+
def self.female_first_name
|
20
|
+
dictionaries[:female_first_names].random
|
21
|
+
end
|
22
|
+
|
23
|
+
def self.company_name
|
24
|
+
dictionaries[:company_names].random
|
25
|
+
end
|
26
|
+
|
27
|
+
def self.title
|
28
|
+
dictionaries[:name_titles].random
|
29
|
+
end
|
30
|
+
|
31
|
+
def self.suffix
|
32
|
+
dictionaries[:name_suffixes].random
|
33
|
+
end
|
34
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
class PersonalForgery < Forgery
|
2
|
+
|
3
|
+
def self.gender
|
4
|
+
dictionaries[:genders].random
|
5
|
+
end
|
6
|
+
|
7
|
+
def self.abbreviated_gender
|
8
|
+
gender[0,1]
|
9
|
+
end
|
10
|
+
|
11
|
+
def self.shirt_size
|
12
|
+
dictionaries[:shirt_sizes].random
|
13
|
+
end
|
14
|
+
|
15
|
+
def self.race
|
16
|
+
dictionaries[:races].random
|
17
|
+
end
|
18
|
+
|
19
|
+
def self.language
|
20
|
+
dictionaries[:languages].random
|
21
|
+
end
|
22
|
+
end
|
data/lib/forgery.rb
ADDED
@@ -0,0 +1,47 @@
|
|
1
|
+
# Require forgeries at the bottom of the file so Forgery works as a gem both
|
2
|
+
# within rails and outside of it.
|
3
|
+
|
4
|
+
# Loading forgery helpers.
|
5
|
+
require File.expand_path(File.dirname(__FILE__) + '/file_reader')
|
6
|
+
require File.expand_path(File.dirname(__FILE__) + '/dictionaries')
|
7
|
+
require File.expand_path(File.dirname(__FILE__) + '/formats')
|
8
|
+
|
9
|
+
# Loading class extensions
|
10
|
+
Dir[File.expand_path(File.dirname(__FILE__) + '/extensions/**/*.rb')].uniq.each do |file|
|
11
|
+
require file
|
12
|
+
end
|
13
|
+
|
14
|
+
class Forgery
|
15
|
+
|
16
|
+
def self.dictionaries
|
17
|
+
@@dictionaries ||= Dictionaries.new
|
18
|
+
end
|
19
|
+
|
20
|
+
def self.formats
|
21
|
+
@@formats ||= Formats.new
|
22
|
+
end
|
23
|
+
|
24
|
+
end
|
25
|
+
|
26
|
+
# Alternate Forgery api, see spec/forgery_spec.rb for examples.
|
27
|
+
def Forgery(forgery, method=nil, *args)
|
28
|
+
klass = "#{forgery.to_s.camelize}Forgery".constantize
|
29
|
+
if method
|
30
|
+
klass.send(method, *args)
|
31
|
+
else
|
32
|
+
klass
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
# Loading the other forgeries AFTER the initial Forgery class is defined.
|
37
|
+
Dir[File.expand_path(File.dirname(__FILE__) + '/forgeries/**/*.rb')].uniq.each do |file|
|
38
|
+
require file
|
39
|
+
end
|
40
|
+
|
41
|
+
# Loading rails forgeries to override current forgery methods and add new
|
42
|
+
# forgeries
|
43
|
+
if defined?(RAILS_ROOT)
|
44
|
+
Dir[File.expand_path(RAILS_ROOT + '/lib/forgery/**/*.rb')].uniq.each do |file|
|
45
|
+
require file
|
46
|
+
end
|
47
|
+
end
|
data/lib/formats.rb
ADDED
@@ -0,0 +1,24 @@
|
|
1
|
+
class Formats
|
2
|
+
|
3
|
+
def initialize
|
4
|
+
@formats = {}
|
5
|
+
end
|
6
|
+
|
7
|
+
def [](key)
|
8
|
+
symbolized_key = key.to_sym
|
9
|
+
if @formats.has_key?(symbolized_key)
|
10
|
+
@formats[symbolized_key]
|
11
|
+
else
|
12
|
+
@formats[symbolized_key] = FileReader.read_format(symbolized_key)
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
def loaded?(key)
|
17
|
+
@formats.has_key?(key.to_sym)
|
18
|
+
end
|
19
|
+
|
20
|
+
def reset!
|
21
|
+
@formats = {}
|
22
|
+
end
|
23
|
+
|
24
|
+
end
|
data/lib/formats/phone
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
#-(###)###-####
|
data/lib/formats/zip
ADDED
@@ -0,0 +1,35 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/spec_helper'
|
2
|
+
|
3
|
+
describe Dictionaries do
|
4
|
+
it "should check if the dictionary is loaded" do
|
5
|
+
dictionaries = Dictionaries.new
|
6
|
+
|
7
|
+
dictionaries[:colors]
|
8
|
+
|
9
|
+
dictionaries.should be_loaded(:colors)
|
10
|
+
end
|
11
|
+
|
12
|
+
it "should load a dictionary when called by the key" do
|
13
|
+
dictionaries = Dictionaries.new
|
14
|
+
|
15
|
+
dictionaries.reset!
|
16
|
+
|
17
|
+
dictionaries.should_not be_loaded(:colors)
|
18
|
+
|
19
|
+
dictionaries[:colors]
|
20
|
+
|
21
|
+
dictionaries.should be_loaded(:colors)
|
22
|
+
end
|
23
|
+
|
24
|
+
it "should clear the loaded dictionaries when calling reset!" do
|
25
|
+
dictionaries = Dictionaries.new
|
26
|
+
|
27
|
+
dictionaries[:colors]
|
28
|
+
|
29
|
+
dictionaries.should be_loaded(:colors)
|
30
|
+
|
31
|
+
dictionaries.reset!
|
32
|
+
|
33
|
+
dictionaries.should_not be_loaded(:colors)
|
34
|
+
end
|
35
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/../spec_helper'
|
2
|
+
|
3
|
+
describe Array do
|
4
|
+
before do
|
5
|
+
@array = [0,1,2,3,4,5,6,7,8,9]
|
6
|
+
end
|
7
|
+
|
8
|
+
it "should get a random item out of the array" do
|
9
|
+
10.times { @array.should include(@array.random) }
|
10
|
+
end
|
11
|
+
|
12
|
+
it "should return nil if the array is empty" do
|
13
|
+
[].random.should be_nil
|
14
|
+
end
|
15
|
+
|
16
|
+
it "should return a random subset of the array" do
|
17
|
+
@array.random_subset(5).each do |i|
|
18
|
+
@array.should include(i)
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
it "should return a random subset of the array that is 3 long" do
|
23
|
+
@array.random_subset(3).size.should == 3
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/../spec_helper'
|
2
|
+
require 'timeout'
|
3
|
+
|
4
|
+
describe Range do
|
5
|
+
it "should get a random number out of the range" do
|
6
|
+
range = (0..9)
|
7
|
+
10.times { range.should include(range.random) }
|
8
|
+
end
|
9
|
+
|
10
|
+
it "should not take a long time when the range is huge" do
|
11
|
+
Timeout.timeout(1){(1234567890..12345678901234567890).random}.should_not raise_error(Timeout::Error)
|
12
|
+
end
|
13
|
+
|
14
|
+
it "should return nil for a random number from a reverse range" do
|
15
|
+
10.times { (9..0).random.should be_nil }
|
16
|
+
end
|
17
|
+
|
18
|
+
it "should get a random string our of the range" do
|
19
|
+
range = ("a".."z")
|
20
|
+
10.times { range.should include(range.random) }
|
21
|
+
end
|
22
|
+
|
23
|
+
it "should return nil if the maximum is less than the minimum" do
|
24
|
+
("z".."a").random.should be_nil
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/../spec_helper'
|
2
|
+
|
3
|
+
describe String do
|
4
|
+
it "should change a single # to a number 0-9" do
|
5
|
+
(0..9).should include(Integer("#".to_numbers))
|
6
|
+
end
|
7
|
+
|
8
|
+
it "should change two #'s to two numbers 0-9" do
|
9
|
+
"##".to_numbers.split("").each do |s|
|
10
|
+
(0..9).should include(Integer(s))
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
it "should only replace #'s in the string with numbers 0-9" do
|
15
|
+
s = '###-###-####'
|
16
|
+
n = s.to_numbers
|
17
|
+
0.upto(s.size - 1) do |i|
|
18
|
+
if s[i, 1] == "#"
|
19
|
+
('0'..'9').should include(n[i, 1])
|
20
|
+
else
|
21
|
+
('0'..'9').should_not include(n[i, 1])
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
it "should allow the replacing of a different character" do
|
27
|
+
(0..9).should include(Integer("-".to_numbers("-")))
|
28
|
+
end
|
29
|
+
end
|
@@ -0,0 +1,11 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/spec_helper'
|
2
|
+
|
3
|
+
describe FileReader do
|
4
|
+
it "should return an array when calling read_dictionary" do
|
5
|
+
FileReader.read_dictionary(:colors).should be_is_a(Array)
|
6
|
+
end
|
7
|
+
|
8
|
+
it "should return an array when calling read_format" do
|
9
|
+
FileReader.read_format(:phone).should be_is_a(Array)
|
10
|
+
end
|
11
|
+
end
|
@@ -0,0 +1,79 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/../spec_helper'
|
2
|
+
|
3
|
+
describe AddressForgery do
|
4
|
+
it "should return a random street" do
|
5
|
+
Forgery.dictionaries[:streets].should include(AddressForgery.street_name)
|
6
|
+
end
|
7
|
+
|
8
|
+
it "should return a random street number" do
|
9
|
+
original_format = AddressForgery.street_number.gsub(/\d/, '#')
|
10
|
+
Forgery.formats[:street_number].should include(original_format)
|
11
|
+
end
|
12
|
+
|
13
|
+
it "should return a random street suffix" do
|
14
|
+
Forgery.dictionaries[:street_suffixes].should include(AddressForgery.street_suffix)
|
15
|
+
end
|
16
|
+
|
17
|
+
describe ".street_address" do
|
18
|
+
before do
|
19
|
+
@split_address = AddressForgery.street_address.split
|
20
|
+
end
|
21
|
+
|
22
|
+
it "should return a random street suffix" do
|
23
|
+
street_suffix = @split_address.pop
|
24
|
+
Forgery.dictionaries[:street_suffixes].should include(street_suffix)
|
25
|
+
end
|
26
|
+
|
27
|
+
it "should return a random street number" do
|
28
|
+
street_number_format = @split_address.shift.gsub(/\d/, '#')
|
29
|
+
Forgery.formats[:street_number].should include(street_number_format)
|
30
|
+
end
|
31
|
+
|
32
|
+
it "should return a random street" do
|
33
|
+
@split_address.pop
|
34
|
+
@split_address.shift
|
35
|
+
street = @split_address.join(" ")
|
36
|
+
Forgery.dictionaries[:streets].should include(street)
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
it "should return a random city" do
|
41
|
+
city = AddressForgery.city
|
42
|
+
Forgery.dictionaries[:cities].should include(city)
|
43
|
+
end
|
44
|
+
|
45
|
+
it "should return a random state" do
|
46
|
+
state = AddressForgery.state
|
47
|
+
Forgery.dictionaries[:states].should include(state)
|
48
|
+
end
|
49
|
+
|
50
|
+
it "should return a random state abbreviation" do
|
51
|
+
state_abbrev = AddressForgery.state_abbrev
|
52
|
+
Forgery.dictionaries[:state_abbrevs].should include(state_abbrev)
|
53
|
+
end
|
54
|
+
|
55
|
+
it "should return a random Canadian province or territory" do
|
56
|
+
province = AddressForgery.province
|
57
|
+
Forgery.dictionaries[:provinces].should include(province)
|
58
|
+
end
|
59
|
+
|
60
|
+
it "should return a random Canadian province or territory abbreviation" do
|
61
|
+
province_abbrev = AddressForgery.province_abbrev
|
62
|
+
Forgery.dictionaries[:province_abbrevs].should include(province_abbrev)
|
63
|
+
end
|
64
|
+
|
65
|
+
it "should return a random country" do
|
66
|
+
country = AddressForgery.country
|
67
|
+
Forgery.dictionaries[:countries].should include(country)
|
68
|
+
end
|
69
|
+
|
70
|
+
it "should return a random zip code" do
|
71
|
+
zip_format = AddressForgery.zip.gsub(/\d/, '#')
|
72
|
+
Forgery.formats[:zip].should include(zip_format)
|
73
|
+
end
|
74
|
+
|
75
|
+
it "should return a random phone number" do
|
76
|
+
phone_format = AddressForgery.phone.gsub(/\d/, '#')
|
77
|
+
Forgery.formats[:phone].should include(phone_format)
|
78
|
+
end
|
79
|
+
end
|
@@ -0,0 +1,175 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/../spec_helper'
|
2
|
+
|
3
|
+
describe BasicForgery do
|
4
|
+
describe ".password" do
|
5
|
+
it "should only uppercase characters" do
|
6
|
+
BasicForgery.password(:allow_lower => false,
|
7
|
+
:allow_upper => true,
|
8
|
+
:allow_numeric => false,
|
9
|
+
:allow_special => false).should only_contain(BasicForgery::UPPER_ALPHA)
|
10
|
+
end
|
11
|
+
|
12
|
+
it "should only contain lowercase characters" do
|
13
|
+
BasicForgery.password(:allow_lower => true,
|
14
|
+
:allow_upper => false,
|
15
|
+
:allow_numeric => false,
|
16
|
+
:allow_special => false).should only_contain(BasicForgery::LOWER_ALPHA)
|
17
|
+
end
|
18
|
+
|
19
|
+
it "should only contain numeric characters" do
|
20
|
+
BasicForgery.password(:allow_lower => false,
|
21
|
+
:allow_upper => false,
|
22
|
+
:allow_numeric => true,
|
23
|
+
:allow_special => false).should only_contain(BasicForgery::NUMERIC)
|
24
|
+
end
|
25
|
+
|
26
|
+
it "should only contain special characters" do
|
27
|
+
BasicForgery.password(:allow_lower => false,
|
28
|
+
:allow_upper => false,
|
29
|
+
:allow_numeric => false,
|
30
|
+
:allow_special => true).should only_contain(BasicForgery::SPECIAL_CHARACTERS)
|
31
|
+
end
|
32
|
+
|
33
|
+
it "should only contain lower and uppercase characters" do
|
34
|
+
BasicForgery.password(:allow_lower => true,
|
35
|
+
:allow_upper => true,
|
36
|
+
:allow_numeric => false,
|
37
|
+
:allow_special => false).should only_contain(BasicForgery::LOWER_ALPHA,
|
38
|
+
BasicForgery::UPPER_ALPHA)
|
39
|
+
end
|
40
|
+
|
41
|
+
it "should only contain numeric and special characters" do
|
42
|
+
BasicForgery.password(:allow_lower => false,
|
43
|
+
:allow_upper => false,
|
44
|
+
:allow_numeric => true,
|
45
|
+
:allow_special => true).should only_contain(BasicForgery::NUMERIC,
|
46
|
+
BasicForgery::SPECIAL_CHARACTERS)
|
47
|
+
end
|
48
|
+
|
49
|
+
it "should contain any of the defined characters" do
|
50
|
+
BasicForgery.password(:allow_lower => true,
|
51
|
+
:allow_upper => true,
|
52
|
+
:allow_numeric => true,
|
53
|
+
:allow_special => true).should only_contain(BasicForgery::NUMERIC,
|
54
|
+
BasicForgery::SPECIAL_CHARACTERS,
|
55
|
+
BasicForgery::LOWER_ALPHA,
|
56
|
+
BasicForgery::UPPER_ALPHA)
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
describe ".encrypt" do
|
61
|
+
it "should encrypt to hex digits" do
|
62
|
+
BasicForgery.encrypt("something").should only_contain(BasicForgery::HEX_DIGITS)
|
63
|
+
end
|
64
|
+
|
65
|
+
it "should encrypt different words to different output" do
|
66
|
+
BasicForgery.encrypt("foo").should_not == BasicForgery.encrypt("bar")
|
67
|
+
end
|
68
|
+
|
69
|
+
it "should allow a salt that changes the output" do
|
70
|
+
BasicForgery.encrypt("foo", "baz").should_not == BasicForgery.encrypt("foo", "bar")
|
71
|
+
end
|
72
|
+
|
73
|
+
it "should have the same output when encrypting twice" do
|
74
|
+
BasicForgery.encrypt("foo", "bar").should == BasicForgery.encrypt("foo", "bar")
|
75
|
+
end
|
76
|
+
end
|
77
|
+
|
78
|
+
describe ".boolean" do
|
79
|
+
it "should return true or false" do
|
80
|
+
[true, false].should include(BasicForgery.boolean)
|
81
|
+
end
|
82
|
+
end
|
83
|
+
|
84
|
+
describe ".color" do
|
85
|
+
it "should return a random color" do
|
86
|
+
Forgery.dictionaries[:colors].should include(BasicForgery.color)
|
87
|
+
end
|
88
|
+
end
|
89
|
+
|
90
|
+
describe ".hex_color" do
|
91
|
+
it "should return a 6-character hex color" do
|
92
|
+
BasicForgery.hex_color.should match(/#(#{BasicForgery::HEX_DIGITS.join('|')}){6}/)
|
93
|
+
end
|
94
|
+
end
|
95
|
+
|
96
|
+
describe ".short_hex_color" do
|
97
|
+
it "should return a 3-character hex color" do
|
98
|
+
BasicForgery.short_hex_color.should match(/#(#{BasicForgery::HEX_DIGITS.join('|')}){3}/)
|
99
|
+
end
|
100
|
+
end
|
101
|
+
|
102
|
+
describe ".number" do
|
103
|
+
it "should return a number >= the at_least option" do
|
104
|
+
BasicForgery.number(:at_least => 2).should >= 2
|
105
|
+
end
|
106
|
+
|
107
|
+
it "should return a number <= the at_most option" do
|
108
|
+
BasicForgery.number(:at_most => 12).should <= 12
|
109
|
+
end
|
110
|
+
end
|
111
|
+
|
112
|
+
describe ".text" do
|
113
|
+
it "should return text whose length is >= the at_least option" do
|
114
|
+
BasicForgery.text(:at_least => 5).size.should >= 5
|
115
|
+
end
|
116
|
+
|
117
|
+
it "should return text whose length is <= the at_most option" do
|
118
|
+
BasicForgery.text(:at_least => 15).size.should <= 15
|
119
|
+
end
|
120
|
+
|
121
|
+
it "should only uppercase characters" do
|
122
|
+
BasicForgery.text(:allow_lower => false,
|
123
|
+
:allow_upper => true,
|
124
|
+
:allow_numeric => false,
|
125
|
+
:allow_special => false).should only_contain(BasicForgery::UPPER_ALPHA)
|
126
|
+
end
|
127
|
+
|
128
|
+
it "should only contain lowercase characters" do
|
129
|
+
BasicForgery.text(:allow_lower => true,
|
130
|
+
:allow_upper => false,
|
131
|
+
:allow_numeric => false,
|
132
|
+
:allow_special => false).should only_contain(BasicForgery::LOWER_ALPHA)
|
133
|
+
end
|
134
|
+
|
135
|
+
it "should only contain numeric characters" do
|
136
|
+
BasicForgery.text(:allow_lower => false,
|
137
|
+
:allow_upper => false,
|
138
|
+
:allow_numeric => true,
|
139
|
+
:allow_special => false).should only_contain(BasicForgery::NUMERIC)
|
140
|
+
end
|
141
|
+
|
142
|
+
it "should only contain special characters" do
|
143
|
+
BasicForgery.text(:allow_lower => false,
|
144
|
+
:allow_upper => false,
|
145
|
+
:allow_numeric => false,
|
146
|
+
:allow_special => true).should only_contain(BasicForgery::SPECIAL_CHARACTERS)
|
147
|
+
end
|
148
|
+
|
149
|
+
it "should only contain lower and uppercase characters" do
|
150
|
+
BasicForgery.text(:allow_lower => true,
|
151
|
+
:allow_upper => true,
|
152
|
+
:allow_numeric => false,
|
153
|
+
:allow_special => false).should only_contain(BasicForgery::LOWER_ALPHA,
|
154
|
+
BasicForgery::UPPER_ALPHA)
|
155
|
+
end
|
156
|
+
|
157
|
+
it "should only contain numeric and special characters" do
|
158
|
+
BasicForgery.text(:allow_lower => false,
|
159
|
+
:allow_upper => false,
|
160
|
+
:allow_numeric => true,
|
161
|
+
:allow_special => true).should only_contain(BasicForgery::NUMERIC,
|
162
|
+
BasicForgery::SPECIAL_CHARACTERS)
|
163
|
+
end
|
164
|
+
|
165
|
+
it "should contain any of the defined characters" do
|
166
|
+
BasicForgery.text(:allow_lower => true,
|
167
|
+
:allow_upper => true,
|
168
|
+
:allow_numeric => true,
|
169
|
+
:allow_special => true).should only_contain(BasicForgery::NUMERIC,
|
170
|
+
BasicForgery::SPECIAL_CHARACTERS,
|
171
|
+
BasicForgery::LOWER_ALPHA,
|
172
|
+
BasicForgery::UPPER_ALPHA)
|
173
|
+
end
|
174
|
+
end
|
175
|
+
end
|