ffaker 2.12.0 → 2.13.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (51) hide show
  1. checksums.yaml +4 -4
  2. data/Changelog.md +7 -0
  3. data/REFERENCE.md +32 -2
  4. data/ffaker.gemspec +2 -2
  5. data/lib/ffaker.rb +4 -1
  6. data/lib/ffaker/address_us.rb +22 -2
  7. data/lib/ffaker/bank.rb +15 -3
  8. data/lib/ffaker/color_pl.rb +14 -0
  9. data/lib/ffaker/data/address_ja/city +0 -23
  10. data/lib/ffaker/data/address_us/state_abbr +0 -1
  11. data/lib/ffaker/data/bank/card_types +12 -0
  12. data/lib/ffaker/data/book/nouns +2 -2
  13. data/lib/ffaker/data/color_pl/names_list +122 -0
  14. data/lib/ffaker/data/movie/nouns +2 -2
  15. data/lib/ffaker/data/name/first_names_female +0 -230
  16. data/lib/ffaker/data/name/first_names_male +0 -37
  17. data/lib/ffaker/data/sport_pl/summer +53 -0
  18. data/lib/ffaker/data/sport_pl/winter +14 -0
  19. data/lib/ffaker/data/vehicle/color_prefixes +25 -0
  20. data/lib/ffaker/identification_kr.rb +1 -1
  21. data/lib/ffaker/identification_pl.rb +77 -0
  22. data/lib/ffaker/internet.rb +3 -5
  23. data/lib/ffaker/sport_pl.rb +25 -0
  24. data/lib/ffaker/utils/random_utils.rb +2 -0
  25. data/lib/ffaker/vehicle.rb +1 -6
  26. data/test/helper.rb +35 -0
  27. data/test/test_address_us.rb +9 -0
  28. data/test/test_bank.rb +41 -5
  29. data/test/test_color_pl.rb +13 -0
  30. data/test/test_identification_co.rb +1 -1
  31. data/test/test_identification_pl.rb +28 -0
  32. data/test/test_internet.rb +9 -9
  33. data/test/test_job_cn.rb +1 -1
  34. data/test/test_job_ja.rb +1 -1
  35. data/test/test_job_kr.rb +1 -1
  36. data/test/test_job_vn.rb +1 -1
  37. data/test/test_lorem_cn.rb +6 -6
  38. data/test/test_lorem_ja.rb +3 -3
  39. data/test/test_name_da.rb +3 -3
  40. data/test/test_phone_number_se.rb +2 -2
  41. data/test/test_sport_pl.rb +30 -0
  42. data/test/test_ssn_se.rb +4 -6
  43. data/test/test_time.rb +13 -6
  44. data/test/test_tweet.rb +6 -6
  45. metadata +18 -9
  46. data/lib/ffaker/data/address_jp/city +0 -127
  47. data/lib/ffaker/data/address_jp/designated_city +0 -20
  48. data/lib/ffaker/data/address_jp/street +0 -37
  49. data/lib/ffaker/data/address_jp/tokyo_ward +0 -23
  50. data/lib/ffaker/data/address_jp/village +0 -183
  51. data/lib/ffaker/data/address_jp/ward +0 -188
@@ -20,6 +20,8 @@ module FFaker
20
20
  def fetch_sample(list, options = {})
21
21
  if (count = options.delete(:count))
22
22
  list.sample(count, random: FFaker::Random)
23
+ elsif list.is_a?(Range)
24
+ FFaker::Random.rand(list)
23
25
  else
24
26
  list.sample(random: FFaker::Random)
25
27
  end
@@ -6,12 +6,7 @@ module FFaker
6
6
  extend self
7
7
 
8
8
  DRIVETRAINS = %w[4WD 4X4 AWD FWD RWD].freeze
9
- YEARS = [*'1900'..(Date.today.year + 1).to_s].freeze
10
- COLOR_PREFIXES = k(%w[
11
- beautiful bright calm dangerous dark dull fast magnetic magnificent
12
- majestic melodic metallic mundane mute mysterious new pleasant pretty
13
- resonant royal slate soft tranquil vibrant weak
14
- ])
9
+ YEARS = [*'1900'..(::Time.now.year + 1).to_s].freeze
15
10
  TRANSMISSIONS_ABBR = %w[AT MT AM CVT].freeze
16
11
  CYLINDERS = %w[2 5 6 8].freeze
17
12
 
@@ -28,6 +28,41 @@ module DeterministicHelper
28
28
  assert(returns.uniq.length == 1, options[:message])
29
29
  end
30
30
 
31
+ %w[< > <= >=].each do |operator|
32
+ operator_name =
33
+ case operator[0]
34
+ when '<' then 'less_than'
35
+ when '>' then 'greater_than'
36
+ else raise 'Unexpected operator'
37
+ end
38
+ operator_name += '_or_equal_to' if operator[1] == '='
39
+
40
+ define_method "assert_#{operator_name}" do |got, expected|
41
+ assert(
42
+ got.public_send(operator, expected),
43
+ "Expected #{operator} \"#{expected}\", but got #{got}"
44
+ )
45
+ end
46
+ end
47
+
48
+ def assert_between(got, from, to, exclude_end: false)
49
+ assert_greater_than_or_equal_to got, from
50
+ public_send "assert_less_than#{'_or_equal_to' unless exclude_end}", got, to
51
+ end
52
+
53
+ def assert_random(original_block, *args)
54
+ 100.times do
55
+ yield(*args)
56
+ assert_deterministic(&original_block)
57
+ end
58
+ end
59
+
60
+ %w[less_than_or_equal_to between].each do |method_name|
61
+ define_method "assert_random_#{method_name}" do |*args, &block|
62
+ assert_random(block) { send "assert_#{method_name}", block.call, *args }
63
+ end
64
+ end
65
+
31
66
  # Methods to be called outside of individual examples.
32
67
  module ClassMethods
33
68
  # Shorthand method to quickly test the determinability of multiple methods.
@@ -18,6 +18,15 @@ class TestAddressUSUS < Test::Unit::TestCase
18
18
 
19
19
  def test_us_state_abbr
20
20
  assert_match(/[A-Z]/, FFaker::AddressUS.state_abbr)
21
+ %w[California california CALIFORNIA].each do |state|
22
+ assert_match('CA', FFaker::AddressUS.state_abbr(state))
23
+ end
24
+ ['South Carolina', 'south carolina'].each do |state|
25
+ assert_match('SC', FFaker::AddressUS.state_abbr(state))
26
+ end
27
+ assert_raise ArgumentError, "Unexpected state: 'unknown'" do
28
+ FFaker::AddressUS.state_abbr('unknown')
29
+ end
21
30
  end
22
31
 
23
32
  def test_us_state_and_territories_abbr
@@ -5,14 +5,50 @@ require 'helper'
5
5
  class TestBank < Test::Unit::TestCase
6
6
  include DeterministicHelper
7
7
 
8
- assert_methods_are_deterministic(FFaker::Bank, :iban)
8
+ assert_methods_are_deterministic(
9
+ FFaker::Bank,
10
+ :iban, :card_number, :card_expiry_date, :card_type
11
+ )
12
+
13
+ def setup
14
+ @tester = FFaker::Bank
15
+ end
9
16
 
10
17
  def test_iban
11
- assert_match(/[A-Z]{2}\d+([A-Z]+)?\d+/, FFaker::Bank.iban)
12
- assert_match(/[A-Z]{2}\d+([A-Z]+)?\d+/, FFaker::Bank.iban(country_code: 'by'))
13
- assert_match(/[A-Z]{2}\d+([A-Z]+)?\d+/, FFaker::Bank.iban(country_code: 'BY'))
18
+ assert_match(/[A-Z]{2}\d+([A-Z]+)?\d+/, @tester.iban)
19
+ assert_match(/[A-Z]{2}\d+([A-Z]+)?\d+/, @tester.iban(country_code: 'by'))
20
+ assert_match(/[A-Z]{2}\d+([A-Z]+)?\d+/, @tester.iban(country_code: 'BY'))
14
21
  assert_raise ArgumentError, "Unexpected country code: 'unknown'" do
15
- FFaker::Bank.iban(country_code: 'unknown')
22
+ @tester.iban(country_code: 'unknown')
16
23
  end
17
24
  end
25
+
26
+ def test_card_number
27
+ assert_match(/\A(\d{4} ){3}\d{4}\z/, @tester.card_number)
28
+ end
29
+
30
+ def test_card_expiry_date
31
+ assert_instance_of String, @tester.card_expiry_date
32
+
33
+ date_today = ::DateTime.now
34
+
35
+ assert_random_between(
36
+ date_today.strftime('%y'), date_today.next_year(5).strftime('%y')
37
+ ) do
38
+ @tester.card_expiry_date.split('/').pop
39
+ end
40
+
41
+ year_range = 4
42
+ year_latest = 8
43
+ assert_random_between(
44
+ date_today.prev_year(year_latest + year_range).strftime('%y'),
45
+ date_today.prev_year(year_latest).strftime('%y')
46
+ ) do
47
+ @tester.card_expiry_date(year_range: year_range, year_latest: year_latest).split('/').pop
48
+ end
49
+ end
50
+
51
+ def test_card_type
52
+ assert_include @tester::CARD_TYPES, @tester.card_type
53
+ end
18
54
  end
@@ -0,0 +1,13 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'helper'
4
+
5
+ class TestColorPL < Test::Unit::TestCase
6
+ include DeterministicHelper
7
+
8
+ assert_methods_are_deterministic(FFaker::ColorPL, :name)
9
+
10
+ def test_name
11
+ assert_match(/\A[a-ząćęłńóśźżé]+\z/, FFaker::ColorPL.name)
12
+ end
13
+ end
@@ -36,6 +36,6 @@ class TestFakerIdentificationESCO < Test::Unit::TestCase
36
36
  end
37
37
 
38
38
  def test_expedition_date
39
- assert(Date.today >= @tester.expedition_date)
39
+ assert_less_than @tester.expedition_date, Date.today
40
40
  end
41
41
  end
@@ -0,0 +1,28 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative 'helper'
4
+
5
+ class TestFakerIdentificationPL < Test::Unit::TestCase
6
+ include DeterministicHelper
7
+
8
+ assert_methods_are_deterministic(
9
+ FFaker::IdentificationPL,
10
+ :pesel, :identity_card, :drivers_license
11
+ )
12
+
13
+ def setup
14
+ @tester = FFaker::IdentificationPL
15
+ end
16
+
17
+ def test_pesel
18
+ assert_match(/\A\d{11}\z/, @tester.pesel)
19
+ end
20
+
21
+ def test_identity_card
22
+ assert_match(/\A[A-Z]{3}\d{6}\z/, @tester.identity_card)
23
+ end
24
+
25
+ def test_drivers_license
26
+ assert_match(%r{\A\d{5}/\d{2}/\d{4}\z}, @tester.drivers_license)
27
+ end
28
+ end
@@ -93,15 +93,15 @@ class TestFakerInternet < Test::Unit::TestCase
93
93
  end
94
94
 
95
95
  def test_password_min_length
96
- assert @tester.password(3).length > 2
97
- assert @tester.password(6).length > 5
98
- assert @tester.password(15).length > 14
96
+ assert_greater_than @tester.password(3).length, 2
97
+ assert_greater_than @tester.password(6).length, 5
98
+ assert_greater_than @tester.password(15).length, 14
99
99
  end
100
100
 
101
101
  def test_password_max_length
102
- assert @tester.password(3, 10).length < 11
103
- assert @tester.password(7, 15).length < 16
104
- assert @tester.password(1, 3).length < 4
102
+ assert_less_than @tester.password(3, 10).length, 11
103
+ assert_less_than @tester.password(7, 15).length, 16
104
+ assert_less_than @tester.password(1, 3).length, 4
105
105
  end
106
106
 
107
107
  def test_password_fixed_length
@@ -109,9 +109,9 @@ class TestFakerInternet < Test::Unit::TestCase
109
109
  end
110
110
 
111
111
  def test_password_strange_argument
112
- assert @tester.password(10, 2).length > 9
113
- assert @tester.password(3, 1).length > 2
114
- assert @tester.password(8, 5).length > 7
112
+ assert_greater_than @tester.password(10, 2).length, 9
113
+ assert_greater_than @tester.password(3, 1).length, 2
114
+ assert_greater_than @tester.password(8, 5).length, 7
115
115
  end
116
116
 
117
117
  def test_mac
@@ -12,7 +12,7 @@ class TestFakerJobCN < Test::Unit::TestCase
12
12
  end
13
13
 
14
14
  def test_title
15
- assert @tester.title.length >= 1
15
+ assert_greater_than_or_equal_to @tester.title.length, 1
16
16
  end
17
17
 
18
18
  def test_nouns
@@ -12,7 +12,7 @@ class TestFakerJobJA < Test::Unit::TestCase
12
12
  end
13
13
 
14
14
  def test_title
15
- assert @tester.title.length >= 1
15
+ assert_greater_than_or_equal_to @tester.title.length, 1
16
16
  end
17
17
 
18
18
  def test_nouns
@@ -12,7 +12,7 @@ class TestFakerJobKR < Test::Unit::TestCase
12
12
  end
13
13
 
14
14
  def test_title
15
- assert @tester.title.length >= 1
15
+ assert_greater_than_or_equal_to @tester.title.length, 1
16
16
  end
17
17
 
18
18
  def test_nouns
@@ -12,7 +12,7 @@ class TestFakerJobVN < Test::Unit::TestCase
12
12
  end
13
13
 
14
14
  def test_title
15
- assert @tester.title.length >= 1
15
+ assert_greater_than_or_equal_to @tester.title.length, 1
16
16
  end
17
17
 
18
18
  def test_nouns
@@ -11,15 +11,15 @@ class TestLoremCN < Test::Unit::TestCase
11
11
  )
12
12
 
13
13
  def test_paragraph
14
- assert FFaker::LoremCN.paragraph.length >= 3 * 4 * 2
14
+ assert_greater_than_or_equal_to FFaker::LoremCN.paragraph.length, 3 * 4 * 2
15
15
  end
16
16
 
17
17
  def test_sentence
18
- assert FFaker::LoremCN.sentence.length >= 4 * 2
18
+ assert_greater_than_or_equal_to FFaker::LoremCN.sentence.length, 4 * 2
19
19
  end
20
20
 
21
21
  def test_paragraphs
22
- assert FFaker::LoremCN.paragraphs.length >= 2
22
+ assert_greater_than_or_equal_to FFaker::LoremCN.paragraphs.length, 2
23
23
  end
24
24
 
25
25
  def test_paragraphs_is_not_a_string_representation_of_an_array
@@ -31,7 +31,7 @@ class TestLoremCN < Test::Unit::TestCase
31
31
  end
32
32
 
33
33
  def test_sentences
34
- assert FFaker::LoremCN.sentences.length >= 2
34
+ assert_greater_than_or_equal_to FFaker::LoremCN.sentences.length, 2
35
35
  end
36
36
 
37
37
  def test_sentences_is_an_array
@@ -45,10 +45,10 @@ class TestLoremCN < Test::Unit::TestCase
45
45
  end
46
46
 
47
47
  def test_words
48
- assert FFaker::LoremCN.words.length >= 2
48
+ assert_greater_than_or_equal_to FFaker::LoremCN.words.length, 2
49
49
  end
50
50
 
51
51
  def test_word
52
- assert FFaker::LoremCN.word.length >= 1
52
+ assert_greater_than_or_equal_to FFaker::LoremCN.word.length, 1
53
53
  end
54
54
  end
@@ -33,7 +33,7 @@ class TestLoremJA < Test::Unit::TestCase
33
33
  end
34
34
 
35
35
  def test_word
36
- assert @subject.word.length >= 1
36
+ assert_greater_than_or_equal_to @subject.word.length, 1
37
37
  assert_kind_of String, @subject.word
38
38
  end
39
39
 
@@ -48,7 +48,7 @@ class TestLoremJA < Test::Unit::TestCase
48
48
  end
49
49
 
50
50
  def test_sentence
51
- assert @subject.sentence.length >= 1
51
+ assert_greater_than_or_equal_to @subject.sentence.length, 1
52
52
  end
53
53
 
54
54
  def test_sentences
@@ -62,7 +62,7 @@ class TestLoremJA < Test::Unit::TestCase
62
62
  end
63
63
 
64
64
  def test_paragraph
65
- assert @subject.paragraph.length >= 1
65
+ assert_greater_than_or_equal_to @subject.paragraph.length, 1
66
66
  end
67
67
 
68
68
  def test_paragraphs
@@ -23,18 +23,18 @@ class TestFakerNameDA < Test::Unit::TestCase
23
23
  end
24
24
 
25
25
  def test_any_name
26
- assert @tester.any_name.count(' ') < 3
26
+ assert_less_than @tester.any_name.count(' '), 3
27
27
  end
28
28
 
29
29
  def test_male_name
30
30
  regexp = /#{@tester::MALE_FIRST_NAMES.join('|')}/
31
- assert @tester.male_name.count(' ') < 3
31
+ assert_less_than @tester.male_name.count(' '), 3
32
32
  assert_match(regexp, @tester.male_name)
33
33
  end
34
34
 
35
35
  def test_female_name
36
36
  regexp = /#{@tester::FEMALE_FIRST_NAMES.join('|')}/
37
- assert @tester.female_name.count(' ') < 3
37
+ assert_less_than @tester.female_name.count(' '), 3
38
38
  assert_match(regexp, @tester.female_name)
39
39
  end
40
40
 
@@ -33,13 +33,13 @@ class TestPhoneNumberSE < Test::Unit::TestCase
33
33
  def test_mobile_phone_number
34
34
  assert_match(ALLOWED_CHARS, FFaker::PhoneNumberSE.mobile_phone_number)
35
35
  assert_match(/\d{3}/, FFaker::PhoneNumberSE.mobile_phone_number)
36
- assert FFaker::PhoneNumberSE.mobile_phone_number.length > 9
36
+ assert_greater_than FFaker::PhoneNumberSE.mobile_phone_number.length, 9
37
37
  end
38
38
 
39
39
  def test_home_work_phone_number
40
40
  assert_match(ALLOWED_CHARS, FFaker::PhoneNumberSE.home_work_phone_number)
41
41
  assert_match(/\d{1} \d{2}/, FFaker::PhoneNumberSE.home_work_phone_number)
42
- assert FFaker::PhoneNumberSE.mobile_phone_number.length > 9
42
+ assert_greater_than FFaker::PhoneNumberSE.mobile_phone_number.length, 9
43
43
  end
44
44
 
45
45
  def test_phone_number
@@ -0,0 +1,30 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'helper'
4
+
5
+ class TestSportPL < Test::Unit::TestCase
6
+ include DeterministicHelper
7
+
8
+ assert_methods_are_deterministic(
9
+ FFaker::SportPL,
10
+ :name,
11
+ :summer,
12
+ :winter
13
+ )
14
+
15
+ def setup
16
+ @tester = FFaker::SportPL
17
+ end
18
+
19
+ def test_name
20
+ assert_include(@tester::ALL, @tester.name)
21
+ end
22
+
23
+ def test_summer
24
+ assert_include(@tester::SUMMER, @tester.summer)
25
+ end
26
+
27
+ def test_winter
28
+ assert_include(@tester::WINTER, @tester.winter)
29
+ end
30
+ end
@@ -29,17 +29,15 @@ class TestSSNSE < Test::Unit::TestCase
29
29
  end
30
30
 
31
31
  def test_ssn_with_from_to
32
- 10.times do
33
- from = Time.local(1980, 2, 28)
34
- to = Time.local(2000, 2, 28)
32
+ from = Time.local(1980, 2, 28)
33
+ to = Time.local(2000, 2, 28)
35
34
 
35
+ assert_random_between(from, to, exclude_end: true) do
36
36
  ssn = FFaker::SSNSE.ssn(from: from, to: to)
37
37
  year = ssn[0..3].to_i
38
38
  month = ssn[4..5].to_i
39
39
  day = ssn[6..7].to_i
40
- ssn_birth_date = Time.local(year, month, day)
41
- assert ssn_birth_date < to
42
- assert ssn_birth_date >= from
40
+ Time.local(year, month, day)
43
41
  end
44
42
  end
45
43
  end
@@ -40,6 +40,18 @@ class TestFakerTime < Test::Unit::TestCase
40
40
  assert_deterministic { @tester.datetime(hours: 4, minutes: 20) }
41
41
  end
42
42
 
43
+ def test_datetime_year_range_and_year_latest
44
+ current_year = ::DateTime.now.year
45
+ [[0, 0], [1, 1], [2, 4], [8, 6]].each do |year_range, year_latest|
46
+ assert_random_between(
47
+ current_year - year_range - year_latest,
48
+ current_year - year_latest
49
+ ) do
50
+ @tester.datetime(year_range: year_range, year_latest: year_latest).year
51
+ end
52
+ end
53
+ end
54
+
43
55
  def test_month
44
56
  month_regex = /\A(?:January|February|March|April|May|June|July|August|September|October|November|December)\z/
45
57
  assert_match(month_regex, @tester.month)
@@ -49,12 +61,7 @@ class TestFakerTime < Test::Unit::TestCase
49
61
  from = Time.local(2015, 1, 1)
50
62
  to = Time.local(2016, 1, 1)
51
63
 
52
- 100.times do
53
- random_date = @tester.between(from, to)
54
- assert random_date >= from, "Expected >= \"#{from}\", but got #{random_date}"
55
- assert random_date <= to, "Expected <= \"#{to}\", but got #{random_date}"
56
- assert_deterministic { @tester.between(from, to) }
57
- end
64
+ assert_random_between(from, to) { @tester.between(from, to) }
58
65
  end
59
66
 
60
67
  def test_between_for_string