From eee33fe2f307cb01881ddc8fc9d0baa9c4215667 Mon Sep 17 00:00:00 2001 From: Ashish Rao Date: Fri, 6 Sep 2019 11:04:11 +0530 Subject: [PATCH] Add user generator that accepts arguments (#1671) The new user class method will now allow you to do this ``` user = Faker::Internet.user('name', 'email', password') => {'name' => 'John Doe', 'email' => 'fake_email@test.com', 'password' => 'pass123' } ``` --- doc/default/internet.md | 4 ++++ lib/faker/default/internet.rb | 7 +++++++ test/faker/default/test_faker_internet.rb | 19 +++++++++++++++++++ 3 files changed, 30 insertions(+) diff --git a/doc/default/internet.md b/doc/default/internet.md index d702e6e4dd..4241d057b5 100644 --- a/doc/default/internet.md +++ b/doc/default/internet.md @@ -1,6 +1,10 @@ # Faker::Internet ```ruby +# Keyword arguments: name, username, email, password, domain_name, user_agent, uuid etc... +Faker::Internet.user #=> { username: 'alexie', email: 'alexie@example.net' } +Faker::Internet.user('username', 'email', 'password') #=> { username: 'alexie', email: 'alexie@example.net', password: 'DtEf9P8wS31iMyC' } + # Keyword arguments: name, separators Faker::Internet.email #=> "eliza@mann.net" Faker::Internet.email(name: 'Nancy') #=> "nancy@terry.biz" diff --git a/lib/faker/default/internet.rb b/lib/faker/default/internet.rb index 8ac771e9fa..cf4adceb70 100644 --- a/lib/faker/default/internet.rb +++ b/lib/faker/default/internet.rb @@ -282,6 +282,13 @@ def uuid '%08x-%04x-%04x-%04x-%04x%08x' % ary # rubocop:disable Style/FormatString end + def user(*args) + user_hash = {} + args = %w[username email] if args.empty? + args.each { |arg| user_hash[:"#{arg}"] = send(arg) } + user_hash + end + alias user_name username end end diff --git a/test/faker/default/test_faker_internet.rb b/test/faker/default/test_faker_internet.rb index 5590dfb74a..856b6b0b6d 100644 --- a/test/faker/default/test_faker_internet.rb +++ b/test/faker/default/test_faker_internet.rb @@ -295,4 +295,23 @@ def test_uuid assert_equal(36, uuid.size) assert_match(/\A\h{8}-\h{4}-4\h{3}-\h{4}-\h{12}\z/, uuid) end + + def test_user_with_args + user = @tester.user('username', 'email', 'password') + assert user[:username].match(/[a-z]+((_|\.)[a-z]+)?/) + assert user[:email].match(/.+@.+\.\w+/) + assert user[:password].match(/\w{3}/) + end + + def test_user_without_args + user = @tester.user + assert user[:username].match(/[a-z]+((_|\.)[a-z]+)?/) + assert user[:email].match(/.+@.+\.\w+/) + end + + def test_user_with_invalid_args + assert_raises NoMethodError do + @tester.user('xyx') + end + end end