From ef4b56fac71488392acba6610e84e438696a1aa3 Mon Sep 17 00:00:00 2001 From: Vitor Oliveira Date: Thu, 27 Sep 2018 08:03:09 -0300 Subject: [PATCH] Changed: functions do not generate `'` & `"` anymore in Faker::Internet (#200) * Add private method to remove special characters * Update CHANGELOG.md * Remove unnecessary special characters * Add tests for special character methods - Faker.Internet * Update CHANGELOG.md * Fix regex expression * Use refute instead of assert --- CHANGELOG.md | 1 + lib/faker/internet.ex | 27 +++++++++++++++------- test/faker/internet_test.exs | 44 ++++++++++++++++++++++++++++++++++++ 3 files changed, 64 insertions(+), 8 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 98e5aa0ae..143e2c8e3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -25,6 +25,7 @@ Change log itself follows [Keep a CHANGELOG](http://keepachangelog.com) format. ### Changed +* Remove `'` and `"` from generated names in `Faker::Internet` [[@vbrazo][]] * Codebase been reformated with elixir formatter [[@vbrazo][]] and [[@igas][]] * Documentation moved to hexdocs.pm [[@MarcusSky][]], [[@vbrazo][]], and [[@igas][]] * Updated dependencies [[@igas][]] diff --git a/lib/faker/internet.ex b/lib/faker/internet.ex index 737c75071..047d973d9 100644 --- a/lib/faker/internet.ex +++ b/lib/faker/internet.ex @@ -64,13 +64,15 @@ defmodule Faker.Internet do def user_name, do: user_name(Faker.random_between(0, 1)) defp user_name(0) do - "#{Name.first_name() |> String.replace(~s( ), ~s()) |> String.downcase()}#{ - Faker.random_between(1900, 2100) - }" + "#{ + remove_special_characters(Name.first_name()) + |> String.replace(~s( ), ~s()) + |> String.downcase() + }#{Faker.random_between(1900, 2100)}" end defp user_name(1) do - [Name.first_name(), Name.last_name()] + [remove_special_characters(Name.first_name()), remove_special_characters(Name.last_name())] |> Enum.map_join(Util.pick(~w(. _)), &String.replace(&1, ~s( ), ~s())) |> String.downcase() end @@ -91,7 +93,12 @@ defmodule Faker.Internet do """ @spec domain_word() :: String.t() def domain_word do - "#{Name.last_name() |> String.split(["'"]) |> Enum.join() |> String.downcase()}" + "#{ + remove_special_characters(Name.last_name()) + |> String.split(["'"]) + |> Enum.join() + |> String.downcase() + }" end @doc """ @@ -110,7 +117,7 @@ defmodule Faker.Internet do """ @spec email() :: String.t() def email do - "#{user_name()}@#{domain_name()}" + "#{remove_special_characters(user_name())}@#{domain_name()}" end @doc """ @@ -129,7 +136,7 @@ defmodule Faker.Internet do """ @spec free_email() :: String.t() def free_email do - "#{user_name()}@#{free_email_service()}" + "#{remove_special_characters(user_name())}@#{free_email_service()}" end @doc """ @@ -148,7 +155,7 @@ defmodule Faker.Internet do """ @spec safe_email() :: String.t() def safe_email do - "#{user_name()}@example.#{Util.pick(~w(org com net))}" + "#{remove_special_characters(user_name())}@example.#{Util.pick(~w(org com net))}" end @doc """ @@ -328,4 +335,8 @@ defmodule Faker.Internet do end defp localised_module, do: Module.concat(__MODULE__, Faker.mlocale()) + + defp remove_special_characters(string) do + String.replace(string, ~s('"), "") + end end diff --git a/test/faker/internet_test.exs b/test/faker/internet_test.exs index 645a3cd9f..f9bcf6b35 100644 --- a/test/faker/internet_test.exs +++ b/test/faker/internet_test.exs @@ -1,11 +1,15 @@ defmodule Faker.InternetTest do use ExUnit.Case, async: true + import Faker.Internet + doctest Faker.Internet doctest Faker.Internet.En doctest Faker.Internet.Es doctest Faker.Internet.PtBr + @iterations 10_000 + test "ip_v4_address/0" do assert Regex.match?(~r/^(\d+\.){3}\d+$/, Faker.Internet.ip_v4_address()) end @@ -37,4 +41,44 @@ defmodule Faker.InternetTest do assert Regex.match?(~r/\A((hello|world)-)(hello|world)\z/, slug) end + + test "user_name/0" do + Stream.repeatedly(&user_name/0) + |> Enum.take(@iterations) + |> Enum.each(fn generated_value -> + refute String.contains?(generated_value, ~s('")) + end) + end + + test "email/0" do + Stream.repeatedly(&email/0) + |> Enum.take(@iterations) + |> Enum.each(fn generated_value -> + refute String.contains?(generated_value, ~s('")) + end) + end + + test "safe_email/0" do + Stream.repeatedly(&safe_email/0) + |> Enum.take(@iterations) + |> Enum.each(fn generated_value -> + refute String.contains?(generated_value, ~s('")) + end) + end + + test "free_email/0" do + Stream.repeatedly(&free_email/0) + |> Enum.take(@iterations) + |> Enum.each(fn generated_value -> + refute String.contains?(generated_value, ~s('")) + end) + end + + test "domain_word/0" do + Stream.repeatedly(&domain_word/0) + |> Enum.take(@iterations) + |> Enum.each(fn generated_value -> + refute String.contains?(generated_value, ~s('")) + end) + end end