Gera entidades de formulários (usuários, produtos, categorias etc) e envia para o body da requisição post de sua API
- axios : https://axios-http.com/docs/intro
- npm random : https://github.com/transitive-bullshit/random
- npm cross-env : https://www.npmjs.com/package/cross-env
> git init
> git clone https://github.com/Noctho01/EntityFactory.git
> npm install
O diretorio deste programa está em /src, dentro voce encontrara o arquivo index.js que possui um pequeno codigo que vai automatizar o envio das requisiçoes POST para o endereço endpoint especificado.
em um terminal windows com cross-env...
a dependencia cross-env
permite que seja possivel a declaração de varias variaveis de ambiente no CLI do windows
> set SCHEME_ENV=usuario&& set QUANTITY_ENV=50&& set ROUTE_ENV=http://localhost:3000/registrar/usuario&& node src/index.js
em um terminal linux...
$ sudo SCHEME_ENV=usuario QUANTITY_ENV=50 ROUTE_ENV=http://localhost:3000/registrar/usuario node src/index.js
Dentro do diretorio do programa (fora de src) escreva este comando a cima. É preciso declarar as variaveis de ambiente para que o EntityFactor seja executado corretamente.
Variaveis de Ambiente:
SCHEME_ENV
: recebe o nome do esquema a ser usadoQUANTITY_ENV
: recebe o numero de entidades que seram criadasROUTE_ENV
: recebe a url da rota POST que recebera os dadosO proposito final deste programa é aumotaizar o preenchimento de aplicações json usadas para enviar dados no corpo da requisição (atualmente suporta apenas o formato JSON). Para isso EntityFactory faz juiz ao nome criando (fabricando) entidades especificadas pelo desenvolvedor, assim criando dados ficticios para serem enviados ao corpo da requisição POST/PUT/PATH... A chave para que EntityFactory crie essas entidades está nos esquemas
Encarregados de armazenar as regras de negocio da entidade, especificando quais são os campos para os fomularios/json e as regras para gerar seu valor aleatoriamente.
dentro do diretorio /src/schemes, crie um arquivo com o nome da entidade que pretende criar
Exemplo: user.js
Este arquivo deve exportar um objeto que possua as regras (contrato), este objeto é o esquema da sua entidade
module.exports = {
name: {
require: false,
models: ['Jhon', 'Mike', 'Sarah', 'Lessie']
},
email: {
require: true,
type: 'email',
description: {
minMax: [5, 10],
include: ['aeioubdc', '123'],
domainModels: ['gmail', 'hotmail', 'outlook']
}
},
password: {
require: true,
type: 'string',
description: {
minMax: [8, 15],
include: 'abc123',
space: false,
case: 'textCase'
}
}
}
// possivel resultado:
// {
// name: 'Sarah',
// email: 'aooiu2213@hotmail.com',
// password: 'A2ccb1a3221'
// }
especifica se o campo é obrigatorio ou não, caso não seja, o campo pode ser ou não criado, a decisao é feita aleatoriamente
usando DataTypes, deve informar qual será o tipo do valor deste campo
- email ==> abc123@foo.com
- cpf ==> gera um cpf valido sem pontos "xxxxxxxxxxx"
- date ==> 1999/01/12 gera apenas datas, não gera horarios
- string ==> valores em string, podem conter letras, numeros ou caracteres especiais (isso é determinado na propriedade include de string)
- inter ==> valores inteiros do tipo numero
- float ==> valores float do tipo numero
- booleano ==> valores booleanos true, false || 1, 0
Especifica as regras aplicadas naquele campo, porem elas seguem o seu tipo. Casa tipo de dados possui um grupo especifico de descriços
campo | type | valores | função |
---|---|---|---|
space | string Modelos | true/false or null | especifica se o texto na string deve conter espaços entre palavras ex: space:true >> "Vitoria Reges" / space:false >> "VitoriaReges" |
minMax | string/inter/float | [valMin, valMax] | valMin: valor minimo que pode ser gerado pelo programa valMax: valor maximo que pode ser gerado pelo programa (obs: para o tipo string possui a funcionalidade de limitar o tamanho da string) |
leng | string | numero inteiro | valor fixo do tamanho da string |
case | string | 'camiCase', 'upperCase', 'lowerCase', 'textCase' | valor em string dos tipos de case da string ex case: camiCase || "camiCase" >> "FubarDeMilho" |
include | string/email | tipo email: ['abc', '123', '...'] tipo string: 'abc123...' | campo obrigatorio, especifica os caracteres que serão usados para gerar o valor do campo ex: include: "bo15" >> "b1oob55" include: ["bo", "15"] >> boob515@email.com |
dominionsModels | ['gmail', 'hotmail', 'yahoo', '...'] | campo obrigatorio para tipo email, especifica em um array os host de email | |
yMinMax | date | [anoMinimo, anoMaximo] | especifica o ano minimo e maximo a ser gerado pelo programa ex: yMinMax: [2002, 2004] >> 2002 || 2003 || 2004 |
mMinMax | date | [mesMinimo, mesMaximo] | especifica o mes minimo e maximo a ser gerado pelo programa ex: mMinMax: [1, 12] >> 8 || ... |
dMinMax | date | [diaMinimo, diaMaximo] | especifica o dia minimo e maximo a ser gerado pelo programa ex: dMinMax: [1, 31] >> 19 || ... |
Os modelos são valores que voce estabelece para que sejam escolhidos aleatoriamente para aquele campo em especifico, campos que possuem modelos não precisam ter um tipo, apenas usando a propriedade modelos
e nele passando um array com os possiveis valores a serem escolhidos.
Dentro de /src/models voce deve criar um arquivo chamado models.js
// Exemplo de um arquivo modelos.js
module.exports = {
// Modelos aqui ...
nomes: {
primeiro: [
'Gabriel', 'Gustavo', 'Pedro', 'Maria',
'Rafael', 'Lucas', 'Alex', 'Barbara',
'Natalia', 'Geni', 'Jose', 'Antonio',
'Marcia'
],
segundo: [
'Dos Santos', 'Da Silva', 'Alencar',
'De Nobrega', 'Diniz', 'Oliveira',
'Dos Anjos', 'Gomes', 'Cunha',
'Souza', 'Rodrigues'
]
},
emails: [
'gmail', 'hotmail', 'alura',
'yahoo', 'outlook', 'apple'
],
paises: [
'Brasil', 'Estados Unidos',
'Argentina', 'China'
],
}
O mesmo deve exportar um objeto que possua chaves que voce possa usar como referencia, e seus valores devem ser arrays ou objetos com arrays. os valores dentro de cada array seram usados pelo EntityFactory para gerar strigns com valores aleatorios baseado nos modelos.
const Models = require('../models/models_examples')
module.exports = {
nome: {
require: true,
space: true,
models: Models.nomes || ['Pedro', 'Carla', 'Marcos', 'Felipe', 'Angela'] || { primeiroNome: ['Pedro', 'Marcos'], segundoNome: ['Da Silva', 'Dos Santos'] }
},
tecnologias: {
require: true,
isArray: true,
models: Models.tecnologias || {
['Java', 'Python', 'JavaScript', 'Go', 'TypeScript', 'PHP'],
['MySql', 'MongoDb', 'Postgree', 'SqlServer'],
['AWS', 'Google Cloud', 'Azure', 'Heroku'],
}
}
}
// resultado possivel:
// {
// nome: "Pedro Da Silva",
// tecnologias: ['Python', 'MySql', 'Azure']
// }
Na primeira linha importamos um modulo que possui os Modelos de dados que voce deve especificar em /src/modelos/modelo.js
como dito antes, ao criar um campo que utiliza modelos, não é informado o tipo do mesmo, require
e space
possuem a mesma função em campos tipados porem space
não é uma propriedade de description
quando se trata de um campo com modelos.
veja tambem que no segundo campo 'tecnologias', temo a propriedade isArray
.
ela diz ao EntityFactory que aquele campo é um array, assim voce pode definir o tamanho do array de uma maneira simples. Voce precisa especificar um modelo do tipo objeto e o numero de chaves sera o numero do tamanho deste array.
exemplo:
// esquema com um campo do tipo array
const frutas = {
require: true,
isArray: true,
models: {
alimentosChave1: ['Banana', 'Melancia', 'Melão', 'Maçã'],
alimentosChave2: ['Amora', 'Uva', 'Mnga', 'Abacaxi'],
alimentosChave3: ['Açaí', 'Abacate', 'Laranja', 'Morando'],
alimentosChave4: ['Acerola', 'Cacau', 'Cajá', 'Caqui']
}
}
// possivel resultado:
// {
// frutas: ['Melancia', 'Uva', 'Açai', 'Caqui']
// {
como foram declaras 4 chaves no objeto em models, o resultado será um array com 4 campos
Thanks goes to these wonderful people (emoji key):
Vinicius dos Santos Rodrigues 🚇 |
This project follows the all-contributors specification. Contributions of any kind welcome!