FactoryBot.define do factory :user do sequence(:nome) { |n| "Usuario Teste #{n}" } sequence(:email) { |n| "user#{n}@gade.com" } password { 'Gade@2026!' } role { :operador } ativo { true } factory :admin do role { :admin } end factory :gerente do role { :gerente } end factory :operador do role { :operador } end factory :externo do role { :externo } end factory :motorista do role { :motorista } # email é NOT NULL + único no banco; motorista real não tem e-mail, então # usamos um placeholder único (mesma estratégia do db/seeds.rb). sequence(:email) { |n| "motorista#{n}@motorista.local" } password { nil } sequence(:nome) { |n| "Motorista #{n}" } sequence(:pin_code) { |n| format('%04d', n % 10000) } end end factory :perfil_acesso do sequence(:nome) { |n| "Perfil #{n}" } # Um conjunto pequeno e realista: ver e fechar, sem pagar nem administrar. permissoes { %w[consolidacao.ver consolidacao.editar consolidacao.finalizar] } end factory :configuracao do chave { 'empresa_nome' } valor { 'Reem Transporte' } end factory :consolidacao do sequence(:nome) { |n| "Consolidacao #{n}" } data_inicio { Date.new(2026, 6, 1) } data_fim { Date.new(2026, 6, 30) } association :criador, factory: :gerente status { :rascunho } end factory :consolidacao_motorista do association :consolidacao sequence(:motorista_nome) { |n| "Motorista #{n}" } end factory :consolidacao_veiculo do association :consolidacao sequence(:motorista_nome) { |n| "Motorista #{n}" } sequence(:vehicle) { |n| "GADE_#{format('%03d', n)}" } end factory :consolidacao_entrega do association :consolidacao sequence(:tracking_id) { |n| "TRK-#{n}" } motorista_nome { 'Joao Silva' } tipo { :entrega_normal } valor_aplicado { 15.0 } end factory :variavel_personalizada do sequence(:chave) { |n| "variavel_#{n}" } valor { 'Valor de teste' } ativo { true } end factory :grupo_contato do sequence(:nome) { |n| "Grupo #{n}" } ativo { true } end factory :contato do sequence(:nome) { |n| "Contato #{n}" } sequence(:telefone) { |n| format('11 9%04d-%04d', n % 10000, (n * 7) % 10000) } ativo { true } association :grupo_contato end factory :evento_notificacao do sequence(:nome) { |n| "Evento #{n}" } sequence(:chave) { |n| "evento_#{n}" } gatilho { 'manual' } ativo { true } notificar_envolvido { true } hora { 8 } end factory :grupo_evento_assinatura do association :grupo_contato association :evento_notificacao canal { 'ambos' } ativo { true } end factory :historico_estimado do data_hora { Time.current } valor_total_estimado { 150.0 } entregas_contadas { 10 } end end FactoryBot.define do factory :romaneio do planned_date { Date.new(2026, 8, 31) } operacao_tabela { '' } rotulo_plano { 'EMAD 09.2026' } origem { 'planilha' } end factory :romaneio_linha do romaneio veiculo { 'GADE_001' } sequence(:ordem) sequence(:nota_fiscal) { |n| (90_000 + n).to_s } chave_origem { nota_fiscal } nome { 'FULANO DE TAL' } endereco { 'RUA X, 1, BAIRRO, SÃO PAULO, SP' } aparelho { '' } telefones { '(11) 90000-0000' } origem do { 'nota_fiscal' => nota_fiscal, 'nome' => nome, 'endereco' => endereco, 'aparelho' => aparelho, 'telefones' => telefones } end campos_editados { [] } end factory :romaneio_veiculo do romaneio veiculo { 'GADE_001' } motorista { '' } posicao { 0 } end end