From b0ab11d93dd09c513a1009a28325ff6efdddf9a2 Mon Sep 17 00:00:00 2001 From: Andrew Nduati Date: Mon, 5 Feb 2024 21:22:29 +0300 Subject: [PATCH 1/4] Add Kenya to supported countries (#2871) * Add Kenya to supported countries * Add tests for locale * clan up pull request * Add landline telephone numbers and cell phone formats --- lib/locales/en-KE.yml | 212 ++++++++++++++++++++++++++++++++++++++ test/test_en_ke_locale.rb | 42 ++++++++ 2 files changed, 254 insertions(+) create mode 100644 lib/locales/en-KE.yml create mode 100644 test/test_en_ke_locale.rb diff --git a/lib/locales/en-KE.yml b/lib/locales/en-KE.yml new file mode 100644 index 0000000000..d7e3e572d0 --- /dev/null +++ b/lib/locales/en-KE.yml @@ -0,0 +1,212 @@ +en-KE: + faker: + internet: + domain_suffix: + - ke + - co.ke + - org.ke + - or.ke + - go.ke + - ac.ke + - info.ke + address: + default_country: + - Republic of Kenya + default_country_code: + - KE + counties: + - Kiambu + - Siaya + - Bungoma + - Kericho + - Kilifi + - Kisumu + - Machakos + - Nakuru + - Kisii + - Busia + - Homa Bay + - Kajiado + - Kakamega + - Laikipia + - Migori + - Taita-Taveta + - Embu + - Kitui + - Meru + - Murang'a + - Nyamira + - Turkana + - Trans-Nzoia + - Uasin Gishu + - Vihiga + - Baringo + - Bomet + - Elgeyo-Marakwet + - Garissa + - Isiolo + - Kirinyaga + - Kwale + - Mandera + - Marsabit + - Mombasa + - Nairobi + - Nandi + - Narok + - Nyandarua + - Nyeri + - Samburu + - Tharaka-Nithi + - Wajir + - West Pokot + county: + - "#{counties}" + cities: + - Bungoma + - Busia + - El Wak + - Eldoret + - Emali + - Embu + - Gilgil + - Homa Bay + - Isiolo + - Juja + - Kakamega + - Karuri + - Kenol + - Kericho + - Kiambu + - Kikuyu + - Kilifi + - Kimilili + - Kiserian + - Kisii + - Kisumu + - Kitengela + - Limuru + - Lodwar + - Machakos + - Malindi + - Mandera + - Mavoko + - Meru + - Migori + - Mombasa + - Moyale + - Mtwapa + - Muranga + - Nairobi + - Naivasha + - Nakuru + - Nanyuki + - Narok + - Ngong + - Nyeri + - Ruiru + - Thika + - Ukunda + - Voi + - Wajir + - Wanguru + - Webuye + city: + - "#{cities}" + company: + company_names: + - ABSA Kenya + - ARM Cement + - Africa Development Bank (AfDB) + - B.O.C Kenya + - Bamburi Cement + - Britam Holdings + - British American Tobacco Kenya + - CIC Insurance Group + - Car & General (K) + - Carbacid Investments + - Centum Investment + - Crown Paints Kenya + - Deacons (East Africa) + - Diamond Trust Bank Kenya + - E.A Cables + - E.A Portland Cement + - Eaagads + - East African Breweries + - Equity Group Holdings + - Eveready East Africa + - Express Kenya + - Flame Tree Group Holdings + - HF Group + - Home Afrika + - Homeboyz Entertainment + - I & M Holdings + - ILAM Fahari I-REIT + - Jubilee Holdings + - KCB Group + - Kakuzi + - Kapchorua Tea Kenya + - KenGen + - Kenya Airways + - Kenya Orchards + - Kenya Power & Lighting + - Kenya Re-Insurance Corporation + - Kurwitu Ventures + - Liberty Kenya Holdings + - Limuru Tea + - Longhorn Publishers + - Mumias Sugar + - NCBA Group + - Nairobi Business Ventures + - Nairobi Securities Exchange + - Nation Media Group + - Olympia Capital Holdings + - Safaricom + - Sameer Africa + - Sanlam Kenya + - Sasini + - Stanbic Holdings + - Standard Chartered Bank Kenya + - Standard Group + - TPS Eastern Africa (Serena) + - The Co-operative Bank of Kenya + - Total Kenya + - Trans-Century + - Uchumi Supermarket + - Umeme + - Unga Group + - WPP Scangroup + - Williamson Tea Kenya + suffix: + - Co. + - Ltd + - Plc + - Trust + name: + - "#{company_names}" + phone_number: + country_code: + - "254" + area_code: + # area codes for Nairobi, Mombasa, Eldoret & Kisumu cities + - "20" + - "41" + - "51" + - "57" + formats: + - "### #######" + - "##########" + - "###-#######" + cell_phone: + formats: + # safaricom + - "0711 ######" + - "0722 ######" + # Airtel + - "010# ######" + - "0730 ######" + # Telkom + - "0770 ######" + - "0771 ######" + # Equitel + - "0763 ######" + - "0764 ######" \ No newline at end of file diff --git a/test/test_en_ke_locale.rb b/test/test_en_ke_locale.rb new file mode 100644 index 0000000000..ce088e8d0a --- /dev/null +++ b/test/test_en_ke_locale.rb @@ -0,0 +1,42 @@ +# frozen_string_literal: true + +require_relative 'test_helper' + +class TestEnKeLocale < Test::Unit::TestCase + def setup + Faker::Config.locale = 'en-KE' + end + + def teardown + Faker::Config.locale = nil + end + + def test_en_ke_address_methods + assert Faker::Address.city.is_a? String + assert Faker::Address.county.is_a? String + assert Faker::Address.default_country.is_a? String + assert Faker::Address.default_country_code.is_a? String + end + + def test_en_ke_company_methods + assert Faker::Company.name.is_a? String + assert Faker::Company.suffix.is_a? String + assert Faker::Company.company_names.is_a? String + end + + def test_en_ke_internet_methods + assert Faker::Internet.domain_suffix.is_a? String + end + + def test_en_ke_country_code_starts_with_254 + phone_number = Faker::PhoneNumber.country_code + + assert_equal '+254', phone_number[0..3] + end + + def test_en_ke_cell_phone_starts_with_0 + cell_number = Faker::PhoneNumber.cell_phone + + assert_equal '0', cell_number[0] + end +end From 723e3e7d2d366aa6e0f30ae0cb89a2ad7ab2244c Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 21 Feb 2024 17:01:32 -0700 Subject: [PATCH 2/4] Bump minitest from 5.21.2 to 5.22.2 (#2902) Bumps [minitest](https://github.com/minitest/minitest) from 5.21.2 to 5.22.2. - [Changelog](https://github.com/minitest/minitest/blob/master/History.rdoc) - [Commits](https://github.com/minitest/minitest/compare/v5.21.2...v5.22.2) --- updated-dependencies: - dependency-name: minitest dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- Gemfile | 2 +- Gemfile.lock | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Gemfile b/Gemfile index 4ae137e75a..6a4808d1f6 100644 --- a/Gemfile +++ b/Gemfile @@ -6,7 +6,7 @@ source 'https://rubygems.org' gemspec gem 'benchmark' -gem 'minitest', '5.21.2' +gem 'minitest', '5.22.2' gem 'pry', '0.14.2' gem 'rake', '13.1.0' gem 'rubocop', '1.60.2' diff --git a/Gemfile.lock b/Gemfile.lock index 715ca8b2fa..46daf42c23 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -17,7 +17,7 @@ GEM json (2.7.1) language_server-protocol (3.17.0.3) method_source (1.0.0) - minitest (5.21.2) + minitest (5.22.2) parallel (1.24.0) parser (3.3.0.5) ast (~> 2.4.1) @@ -69,7 +69,7 @@ PLATFORMS DEPENDENCIES benchmark faker! - minitest (= 5.21.2) + minitest (= 5.22.2) pry (= 0.14.2) rake (= 13.1.0) rubocop (= 1.60.2) From 3f7371e2eb8fe074823570a7fba5d0d9a42257f7 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 21 Feb 2024 17:01:58 -0700 Subject: [PATCH 3/4] Bump test-unit from 3.6.1 to 3.6.2 (#2906) Bumps [test-unit](https://github.com/test-unit/test-unit) from 3.6.1 to 3.6.2. - [Release notes](https://github.com/test-unit/test-unit/releases) - [Commits](https://github.com/test-unit/test-unit/compare/3.6.1...3.6.2) --- updated-dependencies: - dependency-name: test-unit dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- Gemfile | 2 +- Gemfile.lock | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Gemfile b/Gemfile index 6a4808d1f6..83c77b35ca 100644 --- a/Gemfile +++ b/Gemfile @@ -13,6 +13,6 @@ gem 'rubocop', '1.60.2' gem 'rubocop-minitest', '0.34.4' gem 'rubocop-rake', '0.6.0' gem 'simplecov', '0.22.0' -gem 'test-unit', '3.6.1' +gem 'test-unit', '3.6.2' gem 'timecop', '0.9.8' gem 'yard', '0.9.34' diff --git a/Gemfile.lock b/Gemfile.lock index 46daf42c23..d85df7c7a0 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -56,7 +56,7 @@ GEM simplecov_json_formatter (~> 0.1) simplecov-html (0.12.3) simplecov_json_formatter (0.1.4) - test-unit (3.6.1) + test-unit (3.6.2) power_assert timecop (0.9.8) unicode-display_width (2.5.0) @@ -76,7 +76,7 @@ DEPENDENCIES rubocop-minitest (= 0.34.4) rubocop-rake (= 0.6.0) simplecov (= 0.22.0) - test-unit (= 3.6.1) + test-unit (= 3.6.2) timecop (= 0.9.8) yard (= 0.9.34) From f586da74ebbf2eda105d3be5d22ccf2e4e031903 Mon Sep 17 00:00:00 2001 From: Jamal-A-Mohamed <37128483+Jamal-A-Mohamed@users.noreply.github.com> Date: Sun, 25 Feb 2024 15:01:38 -0600 Subject: [PATCH 4/4] Refactor `Faker::IDNumber` to `Faker::IdNumber` to be more consistent with other generator's naming convention. (#2858) * Deprecate IDNumber to IdNumber per issue#2787 * wip * Add a Faker::Deprecator module Co-authored-by: Thiago Araujo * Add more specs and improve warning message --------- Co-authored-by: jamal.mohamed Co-authored-by: Stefanni Brasil Co-authored-by: Thiago Araujo --- README.md | 2 +- doc/default/id_number.md | 40 +-- lib/faker/default/id_number.rb | 43 +-- lib/faker/default/south_africa.rb | 6 +- lib/helpers/deprecator.rb | 30 ++ lib/locales/en-US.yml | 2 +- lib/locales/en/id_number.yml | 2 +- test/faker/default/test_faker_id_number.rb | 329 ++++++++++++++++-- test/faker/default/test_faker_south_africa.rb | 6 +- test/test_determinism.rb | 44 ++- test/test_en_locale.rb | 8 +- test/test_en_us_locale.rb | 8 +- test/test_faker_deprecator.rb | 23 ++ 13 files changed, 464 insertions(+), 79 deletions(-) create mode 100644 lib/helpers/deprecator.rb create mode 100644 test/test_faker_deprecator.rb diff --git a/README.md b/README.md index a67d12d7cf..fa1f055491 100644 --- a/README.md +++ b/README.md @@ -248,7 +248,7 @@ gem 'faker', :git => 'https://github.com/faker-ruby/faker.git', :branch => 'main - [Faker::Hipster](doc/default/hipster.md) - [Faker::Hobby](doc/default/hobby.md) - [Faker::House](doc/default/house.md) - - [Faker::IDNumber](doc/default/id_number.md) + - [Faker::IdNumber](doc/default/id_number.md) - [Faker::IndustrySegments](doc/default/industry_segments.md) - [Faker::Internet](doc/default/internet.md) - [Faker::Invoice](doc/default/invoice.md) diff --git a/doc/default/id_number.md b/doc/default/id_number.md index e5fa858663..89216c0279 100644 --- a/doc/default/id_number.md +++ b/doc/default/id_number.md @@ -1,52 +1,52 @@ -# Faker::IDNumber +# Faker::IdNumber ```ruby # Generate a valid US Social Security number -Faker::IDNumber.valid #=> "552-56-3593" +Faker::IdNumber.valid #=> "552-56-3593" # Generate an invalid US Social Security number -Faker::IDNumber.invalid #=> "311-72-0000" +Faker::IdNumber.invalid #=> "311-72-0000" # Generate a Spanish citizen identifier (DNI) -Faker::IDNumber.spanish_citizen_number #=> "53290236-H" +Faker::IdNumber.spanish_citizen_number #=> "53290236-H" # Generate a Spanish foreign born citizen identifier (NIE) -Faker::IDNumber.spanish_foreign_citizen_number #=> "Z-1600870-Y" +Faker::IdNumber.spanish_foreign_citizen_number #=> "Z-1600870-Y" # Generate a valid South African ID Number -Faker::IDNumber.south_african_id_number #=> "8105128870184" +Faker::IdNumber.south_african_id_number #=> "8105128870184" # or -Faker::IDNumber.valid_south_african_id_number #=> "8105128870184" +Faker::IdNumber.valid_south_african_id_number #=> "8105128870184" # Generate an invalid South African ID Number -Faker::IDNumber.invalid_south_african_id_number #=> "1642972065088" +Faker::IdNumber.invalid_south_african_id_number #=> "1642972065088" # Generate a Brazilian citizen number (CPF) # Keyword arguments: formatted -Faker::IDNumber.brazilian_citizen_number #=> "53540542221" -Faker::IDNumber.brazilian_citizen_number(formatted: true) #=> "535.405.422-21" +Faker::IdNumber.brazilian_citizen_number #=> "53540542221" +Faker::IdNumber.brazilian_citizen_number(formatted: true) #=> "535.405.422-21" # Generate a Brazilian ID Number (RG) # Keyword arguments: formatted -Faker::IDNumber.brazilian_id #=> "493054029" -Faker::IDNumber.brazilian_id(formatted: true) #=> "49.305.402-9" +Faker::IdNumber.brazilian_id #=> "493054029" +Faker::IdNumber.brazilian_id(formatted: true) #=> "49.305.402-9" # Generate a Chilean ID (Rut with 8 digits) # For more advanced cases, please refer to Faker::ChileRut -Faker::IDNumber.chilean_id #=> "15620613-K" +Faker::IdNumber.chilean_id #=> "15620613-K" # Generate a Croatian ID number (OIB) # Keyword arguments: international -Faker::IDNumber.croatian_id #=> "88467617508" -Faker::IDNumber.croatian_id(international: true) #=> "HR88467617508" +Faker::IdNumber.croatian_id #=> "88467617508" +Faker::IdNumber.croatian_id(international: true) #=> "HR88467617508" # Generate a Danish ID number (CPR) # Keyword arguments: formatted, gender, birthday -Faker::IDNumber.danish_id_number #=> "050390-9980" -Faker::IDNumber.danish_id_number(formatted: true) #=> "050390-9980" -Faker::IDNumber.danish_id_number(birthday: Date.new(1990, 3, 5)) #=> "050390-9980" -Faker::IDNumber.danish_id_number(gender: :female) #=> "050390-9980" +Faker::IdNumber.danish_id_number #=> "050390-9980" +Faker::IdNumber.danish_id_number(formatted: true) #=> "050390-9980" +Faker::IdNumber.danish_id_number(birthday: Date.new(1990, 3, 5)) #=> "050390-9980" +Faker::IdNumber.danish_id_number(gender: :female) #=> "050390-9980" # Generate a valid French Social Security number (INSEE number) -Faker::IDNumber.french_insee_number #=> "22510589696868" +Faker::IdNumber.french_insee_number #=> "22510589696868" ``` diff --git a/lib/faker/default/id_number.rb b/lib/faker/default/id_number.rb index 5e08dfbeb9..b02c17b77e 100644 --- a/lib/faker/default/id_number.rb +++ b/lib/faker/default/id_number.rb @@ -1,7 +1,7 @@ # frozen_string_literal: true module Faker - class IDNumber < Base + class IdNumber < Base CHECKS = 'TRWAGMYFPDXBNJZSQVHLCKE' INVALID_SSN = [ /0{3}-\d{2}-\d{4}/, @@ -25,7 +25,7 @@ class << self # @return [String] # # @example - # Faker::IDNumber.valid #=> "552-56-3593" + # Faker::IdNumber.valid #=> "552-56-3593" # # @faker.version 1.6.0 def valid @@ -38,7 +38,7 @@ def valid # @return [String] # # @example - # Faker::IDNumber.invalid #=> "311-72-0000" + # Faker::IdNumber.invalid #=> "311-72-0000" # # @faker.version 1.6.0 def invalid @@ -71,7 +71,7 @@ def ssn_valid # @return [String] # # @example - # Faker::IDNumber.spanish_citizen_number #=> "53290236-H" + # Faker::IdNumber.spanish_citizen_number #=> "53290236-H" # # @faker.version 1.9.0 def spanish_citizen_number @@ -87,7 +87,7 @@ def spanish_citizen_number # @return [String] # # @example - # Faker::IDNumber.spanish_foreign_citizen_number #=> "Z-1600870-Y" + # Faker::IdNumber.spanish_foreign_citizen_number #=> "Z-1600870-Y" # # @faker.version 1.9.0 def spanish_foreign_citizen_number @@ -106,8 +106,8 @@ def spanish_foreign_citizen_number # @return [String] # # @example - # Faker::IDNumber.south_african_id_number #=> "8105128870184" - # Faker::IDNumber.valid_south_african_id_number #=> "8105128870184" + # Faker::IdNumber.south_african_id_number #=> "8105128870184" + # Faker::IdNumber.valid_south_african_id_number #=> "8105128870184" # # @faker.version 1.9.2 def valid_south_african_id_number @@ -129,7 +129,7 @@ def valid_south_african_id_number # @return [String] # # @example - # Faker::IDNumber.invalid_south_african_id_number #=> "1642972065088" + # Faker::IdNumber.invalid_south_african_id_number #=> "1642972065088" # # @faker.version 1.9.2 def invalid_south_african_id_number @@ -156,8 +156,8 @@ def invalid_south_african_id_number # @return [String] # # @example - # Faker::IDNumber.brazilian_citizen_number #=> "53540542221" - # Faker::IDNumber.brazilian_citizen_number(formatted: true) #=> "535.405.422-21" + # Faker::IdNumber.brazilian_citizen_number #=> "53540542221" + # Faker::IdNumber.brazilian_citizen_number(formatted: true) #=> "535.405.422-21" # # @faker.version 1.9.2 def brazilian_citizen_number(formatted: false) @@ -177,8 +177,8 @@ def brazilian_citizen_number(formatted: false) # @return [String] # # @example - # Faker::IDNumber.brazilian_id #=> "493054029" - # Faker::IDNumber.brazilian_id(formatted: true) #=> "49.305.402-9" + # Faker::IdNumber.brazilian_id #=> "493054029" + # Faker::IdNumber.brazilian_id(formatted: true) #=> "49.305.402-9" # # @faker.version 2.1.2 def brazilian_id(formatted: false) @@ -196,7 +196,7 @@ def brazilian_id(formatted: false) # @return [String] # # @example - # Faker::IDNumber.chilean_id #=> "15620613-K" + # Faker::IdNumber.chilean_id #=> "15620613-K" # # @faker.version 2.1.2 def chilean_id @@ -213,8 +213,8 @@ def chilean_id # @return [String] # # @example - # Faker::IDNumber.croatian_id #=> "88467617508" - # Faker::IDNumber.croatian_id(international: true) #=> "HR88467617508" + # Faker::IdNumber.croatian_id #=> "88467617508" + # Faker::IdNumber.croatian_id(international: true) #=> "HR88467617508" # # @faker.version next def croatian_id(international: false) @@ -238,10 +238,10 @@ def croatian_id(international: false) # @return [String] # # @example - # Faker::IDNumber.danish_id_number #=> "0503909980" - # Faker::IDNumber.danish_id_number(formatted: true) #=> "050390-9980" - # Faker::IDNumber.danish_id_number(birthday: Date.new(1990, 3, 5)) #=> "0503909980" - # Faker::IDNumber.danish_id_number(gender: :female) #=> "0503909980" + # Faker::IdNumber.danish_id_number #=> "0503909980" + # Faker::IdNumber.danish_id_number(formatted: true) #=> "050390-9980" + # Faker::IdNumber.danish_id_number(birthday: Date.new(1990, 3, 5)) #=> "0503909980" + # Faker::IdNumber.danish_id_number(gender: :female) #=> "0503909980" # # @faker.version next def danish_id_number(formatted: false, birthday: Faker::Date.birthday, gender: nil) @@ -275,7 +275,7 @@ def danish_id_number(formatted: false, birthday: Faker::Date.birthday, gender: n # @return [String] # # @example - # Faker::IDNumber.french_insee_number #=> "53290236-H" + # Faker::IdNumber.french_insee_number #=> "53290236-H" # # @faker.version next def french_insee_number @@ -421,4 +421,7 @@ def _translate(key) end end end + + include Faker::Deprecator + deprecate_generator('IDNumber', IdNumber) end diff --git a/lib/faker/default/south_africa.rb b/lib/faker/default/south_africa.rb index 09fdbd8bd5..db8cb3e143 100644 --- a/lib/faker/default/south_africa.rb +++ b/lib/faker/default/south_africa.rb @@ -13,7 +13,7 @@ class << self # # @faker.version 1.9.2 def id_number - Faker::IDNumber.south_african_id_number + Faker::IdNumber.south_african_id_number end ## @@ -26,7 +26,7 @@ def id_number # # @faker.version 1.9.2 def valid_id_number - Faker::IDNumber.valid_south_african_id_number + Faker::IdNumber.valid_south_african_id_number end ## @@ -39,7 +39,7 @@ def valid_id_number # # @faker.version 1.9.2 def invalid_id_number - Faker::IDNumber.invalid_south_african_id_number + Faker::IdNumber.invalid_south_african_id_number end ## diff --git a/lib/helpers/deprecator.rb b/lib/helpers/deprecator.rb new file mode 100644 index 0000000000..e280cf9423 --- /dev/null +++ b/lib/helpers/deprecator.rb @@ -0,0 +1,30 @@ +# frozen_string_literal: true + +# Based on Rails ActiveSupport Deprecator +# https://github.com/rails/rails/blob/6f0d1ad14b92b9f5906e44740fce8b4f1c7075dc/activesupport/lib/active_support/deprecation/constant_accessor.rb + +# rubocop:disable Style/ClassVars +module Faker + module Deprecator + def self.included(base) + extension = Module.new do + def const_missing(missing_const_name) + if class_variable_defined?(:@@_deprecated_constants) && (replacement = class_variable_get(:@@_deprecated_constants)[missing_const_name.to_s]) + $stdout.puts("DEPRECATION WARNING: #{name}::#{replacement[:old_generator]} is deprecated. Use #{replacement[:new_constant]} instead.") + return replacement[:new_constant] + end + + super + end + + def deprecate_generator(old_generator_name, new_generator_constant) + class_variable_set(:@@_deprecated_constants, {}) unless class_variable_defined?(:@@_deprecated_constants) + class_variable_get(:@@_deprecated_constants)[old_generator_name] = { new_constant: new_generator_constant, old_generator: old_generator_name } + end + end + + base.singleton_class.prepend extension + end + end +end +# rubocop:enable Style/ClassVars diff --git a/lib/locales/en-US.yml b/lib/locales/en-US.yml index a447eb5fef..2fed35282c 100644 --- a/lib/locales/en-US.yml +++ b/lib/locales/en-US.yml @@ -6960,7 +6960,7 @@ en-US: - "#{PhoneNumber.area_code}-#{PhoneNumber.exchange_code}-#{PhoneNumber.subscriber_number}" - "#{PhoneNumber.area_code}.#{PhoneNumber.exchange_code}.#{PhoneNumber.subscriber_number}" id_number: - valid: "#{IDNumber.ssn_valid}" + valid: "#{IdNumber.ssn_valid}" invalid: - 000-##-#### - "###-00-####" diff --git a/lib/locales/en/id_number.yml b/lib/locales/en/id_number.yml index ac1df752ce..597eab1690 100644 --- a/lib/locales/en/id_number.yml +++ b/lib/locales/en/id_number.yml @@ -1,5 +1,5 @@ en: faker: id_number: - valid: "#{IDNumber.ssn_valid}" + valid: "#{IdNumber.ssn_valid}" invalid: ['000-##-####', '###-00-####', '###-##-0000', '666-##-####', '9##-##-####'] diff --git a/test/faker/default/test_faker_id_number.rb b/test/faker/default/test_faker_id_number.rb index 21a2389ea9..3e66178367 100644 --- a/test/faker/default/test_faker_id_number.rb +++ b/test/faker/default/test_faker_id_number.rb @@ -3,6 +3,293 @@ require_relative '../../test_helper' class TestFakerIdNumber < Test::Unit::TestCase + def setup + @tester = Faker::IdNumber + end + + def test_valid_ssn + sample = @tester.valid + + assert_equal(11, sample.length) + assert_equal '-', sample[3] + assert_equal '-', sample[6] + assert sample[0..2].split.map { :to_i }.all? { :is_digit? } + assert sample[4..5].split.map { :to_i }.all? { :is_digit? } + assert sample[7..9].split.map { :to_i }.all? { :is_digit? } + end + + def test_invalid_ssn + sample = @tester.invalid + + assert_equal(11, sample.length) + assert_equal '-', sample[3] + assert_equal '-', sample[6] + assert sample[0..2].split.map { :to_i }.all? { :is_digit? } + assert sample[4..5].split.map { :to_i }.all? { :is_digit? } + assert sample[7..9].split.map { :to_i }.all? { :is_digit? } + end + + def test_spanish_dni + sample = @tester.spanish_citizen_number + + assert_equal 10, sample.length + assert sample[0..7].split.map { :to_i }.all? { :is_digit? } + assert_equal('-', sample[8]) + mod = sample[0..7].to_i % 23 + + assert_equal Faker::IdNumber::CHECKS[mod], sample[9] + end + + def test_spanish_nie + sample = @tester.spanish_foreign_citizen_number + + assert_equal 11, sample.length + assert_includes 'XYZ', sample[0] + assert_equal '-', sample[1] + assert sample[2..8].split.map { :to_i }.all? { :is_digit? } + assert_equal '-', sample[9] + prefix = 'XYZ'.index(sample[0]).to_s + mod = "#{prefix}#{sample[2..8]}".to_i % 23 + + assert_equal Faker::IdNumber::CHECKS[mod], sample[10] + end + + def test_south_african_id_number + assert_valid_south_african_id_number(@tester.south_african_id_number) + end + + def test_valid_south_african_id_number + assert_valid_south_african_id_number(@tester.valid_south_african_id_number) + end + + def test_invalid_south_african_id_number + sample = @tester.invalid_south_african_id_number + + assert_raises Date::Error do + Date.parse(south_african_id_number_to_date_of_birth_string(sample)) + end + end + + def test_brazilian_citizen_number + sample = @tester.brazilian_citizen_number + + assert_match(/^\d{11}$/, sample) + assert_match(/(\d)((?!\1)\d)+/, sample) + end + + def test_brazilian_citizen_number_formatted + sample = @tester.brazilian_citizen_number(formatted: true) + + assert_match(/^\d{3}\.\d{3}\.\d{3}-\d{2}$/, sample) + end + + def test_brazilian_id + sample = @tester.brazilian_id + + assert_match(/^\d{8}(X|\d)?$/, sample) + assert_match(/(\d)((?!\1)\d)+/, sample) + end + + def test_brazilian_id_formatted + sample = @tester.brazilian_id(formatted: true) + + assert_match(/^\d{1,2}.\d{3}.\d{3}-[\dX]$/, sample) + end + + def test_brazilian_citizen_number_checksum_digit + digits = '128991760' + checksum_digit = Faker::IdNumber.send(:brazilian_citizen_number_checksum_digit, digits) + + assert_equal('4', checksum_digit) + digits = '1289917604' + checksum_digit = Faker::IdNumber.send(:brazilian_citizen_number_checksum_digit, digits) + + assert_equal('8', checksum_digit) + end + + def test_brazilian_id_checksum_digit + digits = '41987080' + checksum_digit = Faker::IdNumber.send(:brazilian_id_checksum_digit, digits) + + assert_equal('5', checksum_digit) + end + + def test_brazilian_document_checksum + digits = '123456789' + checksum = Faker::IdNumber.send(:brazilian_document_checksum, digits) + + assert_equal(2100, checksum) + end + + def test_brazilian_document_digit + citizen_number_digit10 = Faker::IdNumber.send(:brazilian_document_digit, 10) + citizen_number_digit_other = Faker::IdNumber.send(:brazilian_document_digit, 9) + id_digit10 = Faker::IdNumber.send(:brazilian_document_digit, 1, id: true) + id_digit11 = Faker::IdNumber.send(:brazilian_document_digit, 0, id: true) + id_digit_other = Faker::IdNumber.send(:brazilian_document_digit, 2, id: true) + + assert_equal('0', citizen_number_digit10) + assert_equal('9', citizen_number_digit_other) + assert_equal('X', id_digit10) + assert_equal('0', id_digit11) + assert_equal('9', id_digit_other) + end + + def test_brazilian_citizen_number_digit + digit10 = Faker::IdNumber.send(:brazilian_citizen_number_digit, 10) + digit_other = Faker::IdNumber.send(:brazilian_citizen_number_digit, 9) + + assert_equal('0', digit10) + assert_equal('9', digit_other) + end + + def test_brazilian_id_digit + digit10 = Faker::IdNumber.send(:brazilian_id_digit, 1) + digit11 = Faker::IdNumber.send(:brazilian_id_digit, 0) + digit_other = Faker::IdNumber.send(:brazilian_id_digit, 2) + + assert_equal('X', digit10) + assert_equal('0', digit11) + assert_equal('9', digit_other) + end + + def test_chilean_id + sample = @tester.chilean_id + + assert_match(/^\d{8}-[K\d]$/, sample) + end + + def test_chilean_verification_code_k + verification_code = Faker::IdNumber.send(:chilean_verification_code, 20_680_873) + + assert_equal('K', verification_code) + end + + def test_chilean_verification_code_0 + verification_code = Faker::IdNumber.send(:chilean_verification_code, 13_196_022) + + assert_equal(0, verification_code) + end + + def test_croatian_id + sample = @tester.croatian_id + + assert_match(/^\d{11}$/, sample) + end + + def test_croatian_id_international + sample = @tester.croatian_id(international: true) + + assert_match(/^HR\d{11}$/, sample) + end + + def test_croatian_id_checksum_digit + digits = '8764670153' + checksum_digit = Faker::IdNumber.send(:croatian_id_checksum_digit, digits) + + assert_equal(5, checksum_digit) + end + + def test_danish_id_number + sample = @tester.danish_id_number + + assert_match(/^\d{10}$/, sample) + end + + def test_french_insee_number + sample = @tester.french_insee_number + + assert_match(/^(?\d{1})(?\d{2})(?\d{2})(?\d{1})(?[0-9AB]{1})(?\d{3})(?\d{3})(?\d{2})$/, sample) + end + + def test_danish_id_number_formatted + sample = @tester.danish_id_number(formatted: true) + + assert_match(/^\d{6}-\d{4}$/, sample) + end + + def test_danish_id_number_birthday + sample = @tester.danish_id_number(birthday: Date.new(1995, 1, 2)) + + assert_match(/^020195\d{4}$/, sample) + end + + def test_danish_id_number_birthday_early_1800 + assert_raises ArgumentError do + @tester.danish_id_number(birthday: Date.new(1815, 1, 2)) + end + end + + def test_danish_id_number_birthday_late_1800 + sample = @tester.danish_id_number(birthday: Date.new(1895, 1, 2)) + + assert_match(/^020195[5678]\d{3}$/, sample) + end + + def test_danish_id_number_birthday_early_1900 + sample = @tester.danish_id_number(birthday: Date.new(1915, 1, 2)) + + assert_match(/^020115[0123]\d{3}$/, sample) + end + + def test_danish_id_number_birthday_late_1900 + sample = @tester.danish_id_number(birthday: Date.new(1995, 1, 2)) + + assert_match(/^020195[012349]\d{3}$/, sample) + end + + def test_danish_id_number_birthday_early_2000 + sample = @tester.danish_id_number(birthday: Date.new(2015, 1, 2)) + + assert_match(/^020115[456789]\d{3}$/, sample) + end + + def test_danish_id_number_birthday_mid_2000 + sample = @tester.danish_id_number(birthday: Date.new(2055, 1, 2)) + + assert_match(/^020155[5678]\d{3}$/, sample) + end + + def test_danish_id_number_birthday_late_2000 + assert_raises ArgumentError do + @tester.danish_id_number(birthday: Date.new(2095, 1, 2)) + end + end + + def test_danish_id_number_gender_female + sample = @tester.danish_id_number(gender: :female) + + assert_predicate sample.chars.last.to_i, :even? + end + + def test_danish_id_number_gender_male + sample = @tester.danish_id_number(gender: :male) + + assert_predicate sample.chars.last.to_i, :odd? + end + + def test_danish_id_number_invalid_gender + assert_raises ArgumentError do + @tester.danish_id_number(gender: :invalid) + end + end + + private + + def south_african_id_number_to_date_of_birth_string(sample) + "19#{sample[0..1]}/#{sample[2..3]}/#{sample[4..5]}}" + end + + def assert_valid_south_african_id_number(sample) + assert_equal 13, sample.length + assert_match(/^\d{13}$/, sample) + assert_include Faker::IdNumber::ZA_CITIZENSHIP_DIGITS, sample[10] + assert_equal Faker::IdNumber::ZA_RACE_DIGIT, sample[11] + assert Date.parse(south_african_id_number_to_date_of_birth_string(sample)) + end +end + +class TestFakerIDNumber < Test::Unit::TestCase def setup @tester = Faker::IDNumber end @@ -37,7 +324,7 @@ def test_spanish_dni assert_equal('-', sample[8]) mod = sample[0..7].to_i % 23 - assert_equal Faker::IDNumber::CHECKS[mod], sample[9] + assert_equal Faker::IdNumber::CHECKS[mod], sample[9] end def test_spanish_nie @@ -51,7 +338,7 @@ def test_spanish_nie prefix = 'XYZ'.index(sample[0]).to_s mod = "#{prefix}#{sample[2..8]}".to_i % 23 - assert_equal Faker::IDNumber::CHECKS[mod], sample[10] + assert_equal Faker::IdNumber::CHECKS[mod], sample[10] end def test_south_african_id_number @@ -98,35 +385,35 @@ def test_brazilian_id_formatted def test_brazilian_citizen_number_checksum_digit digits = '128991760' - checksum_digit = Faker::IDNumber.send(:brazilian_citizen_number_checksum_digit, digits) + checksum_digit = Faker::IdNumber.send(:brazilian_citizen_number_checksum_digit, digits) assert_equal('4', checksum_digit) digits = '1289917604' - checksum_digit = Faker::IDNumber.send(:brazilian_citizen_number_checksum_digit, digits) + checksum_digit = Faker::IdNumber.send(:brazilian_citizen_number_checksum_digit, digits) assert_equal('8', checksum_digit) end def test_brazilian_id_checksum_digit digits = '41987080' - checksum_digit = Faker::IDNumber.send(:brazilian_id_checksum_digit, digits) + checksum_digit = Faker::IdNumber.send(:brazilian_id_checksum_digit, digits) assert_equal('5', checksum_digit) end def test_brazilian_document_checksum digits = '123456789' - checksum = Faker::IDNumber.send(:brazilian_document_checksum, digits) + checksum = Faker::IdNumber.send(:brazilian_document_checksum, digits) assert_equal(2100, checksum) end def test_brazilian_document_digit - citizen_number_digit10 = Faker::IDNumber.send(:brazilian_document_digit, 10) - citizen_number_digit_other = Faker::IDNumber.send(:brazilian_document_digit, 9) - id_digit10 = Faker::IDNumber.send(:brazilian_document_digit, 1, id: true) - id_digit11 = Faker::IDNumber.send(:brazilian_document_digit, 0, id: true) - id_digit_other = Faker::IDNumber.send(:brazilian_document_digit, 2, id: true) + citizen_number_digit10 = Faker::IdNumber.send(:brazilian_document_digit, 10) + citizen_number_digit_other = Faker::IdNumber.send(:brazilian_document_digit, 9) + id_digit10 = Faker::IdNumber.send(:brazilian_document_digit, 1, id: true) + id_digit11 = Faker::IdNumber.send(:brazilian_document_digit, 0, id: true) + id_digit_other = Faker::IdNumber.send(:brazilian_document_digit, 2, id: true) assert_equal('0', citizen_number_digit10) assert_equal('9', citizen_number_digit_other) @@ -136,17 +423,17 @@ def test_brazilian_document_digit end def test_brazilian_citizen_number_digit - digit10 = Faker::IDNumber.send(:brazilian_citizen_number_digit, 10) - digit_other = Faker::IDNumber.send(:brazilian_citizen_number_digit, 9) + digit10 = Faker::IdNumber.send(:brazilian_citizen_number_digit, 10) + digit_other = Faker::IdNumber.send(:brazilian_citizen_number_digit, 9) assert_equal('0', digit10) assert_equal('9', digit_other) end def test_brazilian_id_digit - digit10 = Faker::IDNumber.send(:brazilian_id_digit, 1) - digit11 = Faker::IDNumber.send(:brazilian_id_digit, 0) - digit_other = Faker::IDNumber.send(:brazilian_id_digit, 2) + digit10 = Faker::IdNumber.send(:brazilian_id_digit, 1) + digit11 = Faker::IdNumber.send(:brazilian_id_digit, 0) + digit_other = Faker::IdNumber.send(:brazilian_id_digit, 2) assert_equal('X', digit10) assert_equal('0', digit11) @@ -160,13 +447,13 @@ def test_chilean_id end def test_chilean_verification_code_k - verification_code = Faker::IDNumber.send(:chilean_verification_code, 20_680_873) + verification_code = Faker::IdNumber.send(:chilean_verification_code, 20_680_873) assert_equal('K', verification_code) end def test_chilean_verification_code_0 - verification_code = Faker::IDNumber.send(:chilean_verification_code, 13_196_022) + verification_code = Faker::IdNumber.send(:chilean_verification_code, 13_196_022) assert_equal(0, verification_code) end @@ -185,7 +472,7 @@ def test_croatian_id_international def test_croatian_id_checksum_digit digits = '8764670153' - checksum_digit = Faker::IDNumber.send(:croatian_id_checksum_digit, digits) + checksum_digit = Faker::IdNumber.send(:croatian_id_checksum_digit, digits) assert_equal(5, checksum_digit) end @@ -283,8 +570,8 @@ def south_african_id_number_to_date_of_birth_string(sample) def assert_valid_south_african_id_number(sample) assert_equal 13, sample.length assert_match(/^\d{13}$/, sample) - assert_include Faker::IDNumber::ZA_CITIZENSHIP_DIGITS, sample[10] - assert_equal Faker::IDNumber::ZA_RACE_DIGIT, sample[11] + assert_include Faker::IdNumber::ZA_CITIZENSHIP_DIGITS, sample[10] + assert_equal Faker::IdNumber::ZA_RACE_DIGIT, sample[11] assert Date.parse(south_african_id_number_to_date_of_birth_string(sample)) end end diff --git a/test/faker/default/test_faker_south_africa.rb b/test/faker/default/test_faker_south_africa.rb index 8e7e53e215..608121fbf2 100644 --- a/test/faker/default/test_faker_south_africa.rb +++ b/test/faker/default/test_faker_south_africa.rb @@ -10,7 +10,7 @@ def setup def test_id_number stubbed_id_number = '7201010001081' - Faker::IDNumber.stub :south_african_id_number, stubbed_id_number do + Faker::IdNumber.stub :south_african_id_number, stubbed_id_number do assert_equal stubbed_id_number, @tester.id_number end end @@ -18,7 +18,7 @@ def test_id_number def test_valid_id_number stubbed_id_number = '7201010001081' - Faker::IDNumber.stub :valid_south_african_id_number, stubbed_id_number do + Faker::IdNumber.stub :valid_south_african_id_number, stubbed_id_number do assert_equal stubbed_id_number, @tester.valid_id_number end end @@ -26,7 +26,7 @@ def test_valid_id_number def test_invalid_id_number stubbed_id_number = '9999990001081' - Faker::IDNumber.stub :invalid_south_african_id_number, stubbed_id_number do + Faker::IdNumber.stub :invalid_south_african_id_number, stubbed_id_number do assert_equal stubbed_id_number, @tester.invalid_id_number end end diff --git a/test/test_determinism.rb b/test/test_determinism.rb index 807852a0bd..69ddf28979 100644 --- a/test/test_determinism.rb +++ b/test/test_determinism.rb @@ -67,7 +67,7 @@ def all_methods def subclasses Faker.constants.delete_if do |subclass| - %i[Base Bank Books Cat Char Base58 ChileRut CLI Config Creature Date Dog DragonBall Dota ElderScrolls Fallout Games GamesHalfLife HeroesOfTheStorm Internet JapaneseMedia LeagueOfLegends Movies Myst Overwatch OnePiece Pokemon Religion Sports SwordArtOnline TvShows Time VERSION Witcher WorldOfWarcraft Zelda].include?(subclass) + skipped_classes.include?(subclass) end.sort end @@ -76,5 +76,47 @@ def subclass_methods(subclass) "Faker::#{subclass}.#{method}" end.sort end + + def skipped_classes + %i[ + Bank + Base + Base58 + Books + Cat + Char + ChileRut + CLI + Config + Creature + Date + Deprecator + Dog + DragonBall + Dota + ElderScrolls + Fallout + Games + GamesHalfLife + HeroesOfTheStorm + Internet + JapaneseMedia + LeagueOfLegends + Movies + Myst + Overwatch + OnePiece + Pokemon + Religion + Sports + SwordArtOnline + TvShows + Time + VERSION + Witcher + WorldOfWarcraft + Zelda + ] + end end # rubocop:enable Security/Eval,Style/EvalWithLocation diff --git a/test/test_en_locale.rb b/test/test_en_locale.rb index 3e530aa1bd..d6dec7eed5 100644 --- a/test/test_en_locale.rb +++ b/test/test_en_locale.rb @@ -23,15 +23,15 @@ def test_us_zip_codes end def test_valid_id_number - id_num = Faker::IDNumber.valid + id_num = Faker::IdNumber.valid - assert(Faker::IDNumber::INVALID_SSN.none? { |regex| id_num =~ regex }) + assert(Faker::IdNumber::INVALID_SSN.none? { |regex| id_num =~ regex }) end def test_invalid_id_number - id_num = Faker::IDNumber.invalid + id_num = Faker::IdNumber.invalid - assert(Faker::IDNumber::INVALID_SSN.any? { |regex| id_num =~ regex }) + assert(Faker::IdNumber::INVALID_SSN.any? { |regex| id_num =~ regex }) end def test_values_trimmed diff --git a/test/test_en_us_locale.rb b/test/test_en_us_locale.rb index c7c6a85362..f33a487e2d 100644 --- a/test/test_en_us_locale.rb +++ b/test/test_en_us_locale.rb @@ -85,14 +85,14 @@ def test_en_us_zip_codes_match_state end def test_en_us_valid_id_number - id_num = Faker::IDNumber.valid + id_num = Faker::IdNumber.valid - assert(Faker::IDNumber::INVALID_SSN.none? { |regex| id_num =~ regex }) + assert(Faker::IdNumber::INVALID_SSN.none? { |regex| id_num =~ regex }) end def test_en_us_invalid_id_number - id_num = Faker::IDNumber.invalid + id_num = Faker::IdNumber.invalid - assert(Faker::IDNumber::INVALID_SSN.any? { |regex| id_num =~ regex }) + assert(Faker::IdNumber::INVALID_SSN.any? { |regex| id_num =~ regex }) end end diff --git a/test/test_faker_deprecator.rb b/test/test_faker_deprecator.rb new file mode 100644 index 0000000000..0083a2203c --- /dev/null +++ b/test/test_faker_deprecator.rb @@ -0,0 +1,23 @@ +# frozen_string_literal: true + +require_relative 'test_helper' + +class TestFakerDeprecation < Test::Unit::TestCase + def test_using_a_deprecated_generator_returns_a_warning_message + actual_stdout, actual_stderr = capture_output do + Faker::IDNumber.valid + end + + assert_includes(actual_stdout, 'DEPRECATION WARNING: Faker::IDNumber is deprecated. Use Faker::IdNumber instead') + assert_empty(actual_stderr) + end + + def test_using_a_non_deprecated_generator_does_not_return_a_warning_message + actual_stdout, actual_stderr = capture_output do + Faker::IdNumber.valid + end + + assert_empty(actual_stdout) + assert_empty(actual_stderr) + end +end