-
Notifications
You must be signed in to change notification settings - Fork 0
[Feature/55] :: flexibility improvements #56
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Changes from all commits
fabf003
142eb1f
a96d202
3210fba
eb0888a
91aab8b
56b9a12
08822c5
5271c30
16f572d
e1f0a5a
be5fa77
77e2a11
b0312bc
4e47588
c0c8d64
d91eaed
0eb7d86
9eaa1d1
c3ea7f7
af49045
249ae8c
182ddc2
3ccd1c1
d6f5d0e
7171964
309dbc7
0a0f5b0
afba396
1b00511
fe63265
bfc1a8e
e691a0f
2cccf5f
3f37b99
3e56b39
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change | ||||||
|---|---|---|---|---|---|---|---|---|
|
|
@@ -2,6 +2,8 @@ | |||||||
|
|
||||||||
|  | ||||||||
|
|
||||||||
| #### [README (English)](/README.md) | ||||||||
|
|
||||||||
|
Comment on lines
+5
to
+6
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Corrija o nível do heading para manter a hierarquia correta. O static analysis (markdownlint) indica que o heading na linha 5 usa 📝 Correção sugerida-#### [README (English)](/README.md)
+## [README (English)](/README.md)📝 Committable suggestion
Suggested change
🧰 Tools🪛 markdownlint-cli2 (0.22.0)[warning] 5-5: Heading levels should only increment by one level at a time (MD001, heading-increment) 🤖 Prompt for AI Agents |
||||||||
| Uma biblioteca Go para geração de dados de teste, permitindo criar mocks de entidades de forma simples e eficiente. | ||||||||
|
|
||||||||
| ## 📖 Descrição | ||||||||
|
|
@@ -19,11 +21,11 @@ O nome Mocai é uma homenagem à iniciativa brasileira por trás da biblioteca. | |||||||
|
|
||||||||
| ## 📦 Entidades Suportadas | ||||||||
| - Pessoa (com gênero, idade, CPF) | ||||||||
| - Gênero (geração independente) | ||||||||
| - Endereço (rua, número, cidade, estado, UF, CEP) | ||||||||
| - Telefone (DDD, número) | ||||||||
| - Empresa (nome, CNPJ) | ||||||||
| - CPF (Cadastro de Pessoa Física) | ||||||||
| - CNPJ (Cadastro Nacional de Pessoa Jurídica) | ||||||||
| - Certidões (Nascimento, Casamento, Óbito) | ||||||||
| - RG (Identidade) | ||||||||
| - Título de Eleitor | ||||||||
|
|
@@ -62,54 +64,90 @@ import ( | |||||||
|
|
||||||||
| func main() { | ||||||||
| // Cria uma instância do Mocker para português do Brasil | ||||||||
| mocker := mocai.NewMocker("ptbr", true, nil) // isFormatted: true para documentos formatados (ex: CPF/CNPJ) | ||||||||
| mocker := mocai.NewMocker( | ||||||||
| mocai.WithLanguage("ptbr"), | ||||||||
| mocai.WithFormatted(true), | ||||||||
| ) | ||||||||
|
|
||||||||
| // Gera um endereço fictício | ||||||||
| address, err := mocker.NewAddress() | ||||||||
| if err != nil { | ||||||||
| // As mensagens de erro são localizadas quando há chave de tradução disponível | ||||||||
| log.Fatal(err) | ||||||||
| } | ||||||||
| fmt.Printf("Endereço: %s, %d - %s, %s (%s) - %s\n", address.Street, address.Number, address.City, address.State, address.UF, address.ZIP) | ||||||||
|
|
||||||||
| // Gera uma pessoa fictícia | ||||||||
| person, err := mocker.NewPerson() | ||||||||
| if err != nil { | ||||||||
| // As mensagens de erro são localizadas quando há chave de tradução disponível | ||||||||
| log.Fatal(err) | ||||||||
| } | ||||||||
| fmt.Printf("Pessoa: %s %s, Gênero: %s, Idade: %d, CPF: %s\n", person.FirstNameMale, person.LastName, person.Gender.Identity, person.Age, person.CPF.Number) | ||||||||
|
|
||||||||
| // Gera uma empresa fictícia | ||||||||
| company, err := mocker.NewCompany() | ||||||||
| if err != nil { | ||||||||
| // As mensagens de erro são localizadas quando há chave de tradução disponível | ||||||||
| log.Fatal(err) | ||||||||
| } | ||||||||
| fmt.Printf("Empresa: %s, CNPJ: %s\n", company.BrazilianCompany.Name, company.BrazilianCompany.CNPJ) | ||||||||
| } | ||||||||
|
|
||||||||
| ``` | ||||||||
|
|
||||||||
| ### Mensagens de Erro e Localização | ||||||||
|
|
||||||||
| As mensagens de erro são localizadas quando há chave de tradução disponível. Quando ocorre um erro (ex: dados inválidos, idioma não suportado ou falha na geração), a mensagem será apresentada no idioma configurado para a instância do `Mocker`, se houver tradução. Em alguns casos, mensagens fixas podem aparecer caso a cobertura de traduções não seja completa. | ||||||||
|
|
||||||||
| Não é necessário realizar nenhuma etapa extra para a localização das mensagens de erro — o Mocai faz isso automaticamente para todos os idiomas suportados onde há chave de tradução. | ||||||||
| ``` | ||||||||
|
|
||||||||
| > **Nota:** Cada chamada de método como `NewPerson()` ou `NewAddress()` gera um novo mock com dados aleatórios. A instância do `Mocker` é imutável quanto à configuração (idioma, formatação, fonte de aleatoriedade). | ||||||||
|
|
||||||||
| #### Sobre Idiomas | ||||||||
| Atualmente, apenas "ptbr" está implementado. Para suportar outros idiomas, contribua com novos arquivos de tradução e mocks. | ||||||||
|
|
||||||||
| #### Sobre Formatação | ||||||||
| O parâmetro `isFormatted` controla se documentos como CPF/CNPJ são retornados formatados (ex: `123.456.789-00`) ou apenas números (`12345678900`). | ||||||||
| A opção `WithFormatted` controla se documentos como CPF/CNPJ são retornados formatados (ex: `123.456.789-00`) ou apenas números (`12345678900`). | ||||||||
|
|
||||||||
| ### Uso Avançado | ||||||||
|
|
||||||||
| #### Interface MockGenerator | ||||||||
| A interface `MockGenerator` define o contrato para geração de dados fictícios. Use-a para injeção de dependência nos seus testes: | ||||||||
|
|
||||||||
| ```go | ||||||||
| func CreateUser(generator mocai.MockGenerator) (*User, error) { | ||||||||
| person, err := generator.NewPerson() | ||||||||
| if err != nil { | ||||||||
| return nil, err | ||||||||
| } | ||||||||
| return &User{Name: person.FirstNameMale + " " + person.LastName}, nil | ||||||||
| } | ||||||||
| ``` | ||||||||
|
|
||||||||
| #### Providers Customizados | ||||||||
| Você pode injetar providers customizados para Address, Person e Company, integrando com APIs externas ou bancos de dados: | ||||||||
|
|
||||||||
| ```go | ||||||||
| mocker := mocai.NewMocker( | ||||||||
| mocai.WithLanguage("ptbr"), | ||||||||
| mocai.WithAddressProvider(meuProviderDeEndereco), | ||||||||
| mocai.WithPersonProvider(meuProviderDePessoa), | ||||||||
| mocai.WithCompanyProvider(meuProviderDeEmpresa), | ||||||||
| ) | ||||||||
| ``` | ||||||||
|
|
||||||||
| #### Geração Determinística | ||||||||
| Use `WithRandSource` para fornecer uma fonte de aleatoriedade customizada para dados reproduzíveis em testes: | ||||||||
|
|
||||||||
| ```go | ||||||||
| rnd := translations.NewSafeRandSource(meuRandFixo) | ||||||||
| mocker := mocai.NewMocker( | ||||||||
| mocai.WithLanguage("ptbr"), | ||||||||
| mocai.WithRandSource(rnd), | ||||||||
| ) | ||||||||
| ``` | ||||||||
|
|
||||||||
| ### Exemplos | ||||||||
| O diretório ***examples*** contém exemplos de uso: | ||||||||
|
|
||||||||
| - `mocker/`: Exemplo usando o ponto de entrada principal `mocai.NewMocker(lang string, isFormatted bool, rnd RandSource)` para gerar mocks de maneira fluida e simplificada. | ||||||||
| - `mocker/`: Exemplo usando o ponto de entrada principal `mocai.NewMocker(opts ...Option)` com functional options para gerar mocks de maneira fluida e simplificada. | ||||||||
|
|
||||||||
| Para executar um exemplo: | ||||||||
| ```sh | ||||||||
|
|
||||||||
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
A lista de entidades suportadas ficou incompleta.
O CNPJ standalone saiu daqui, mas a própria PR ainda refatora/adiciona cobertura para esse gerador. Isso passa a impressão de que a geração direta de CNPJ não faz mais parte da API pública.
🤖 Prompt for AI Agents