# coding: utf-8 require 'test_helper' class MailFormBaseTest < ActiveSupport::TestCase def setup ActionMailer::Base.deliveries = [] end def test_id_is_nil assert_nil ContactForm.new.id end def test_is_always_a_new_record assert ContactForm.new.new_record? end def test_initialize_with_options form = ContactForm.new(name: 'José', email: 'jose@my.email.com') assert_equal 'José', form.name assert_equal 'jose@my.email.com', form.email end def test_spam_is_true_when_captcha_field_is_set form = ContactForm.new(nickname: 'not_blank') assert form.spam? assert !form.not_spam? end def test_spam_is_false_when_captcha_field_is_not_set form = ContactForm.new assert !form.spam? assert form.not_spam? end def test_is_not_valid_when_validatable_attributes_are_blank form = ContactForm.new assert !form.valid? assert form.invalid? assert_equal 2, form.errors.count assert_equal ["can't be blank"], form.errors[:email] assert_equal ["can't be blank"], form.errors[:name] end def test_is_not_valid_when_validatable_regexp_does_not_match form = ContactForm.new(name: 'Jose', email: 'not_valid') assert !form.valid? assert form.invalid? assert_equal(1, form.errors.count) assert_equal ["is invalid"], form.errors[:email] end def test_is_valid_when_validatable_attributes_are_valid form = ContactForm.new(name: 'Jose', email: 'is.valid@email.com') assert form.valid? assert !form.invalid? end def test_symbols_given_to_validate_are_called form = ContactForm.new assert !form.callback_run? form.valid? assert form.callback_run? end def test_deliver_is_false_when_is_a_spam form = ContactForm.new(name: 'Jose', email: 'is.valid@email.com', nickname: 'not_blank') assert form.valid? assert form.spam? assert !form.deliver assert_empty ActionMailer::Base.deliveries end def test_deliver_is_false_when_is_invalid form = ContactForm.new(name: 'Jose', email: 'is.com') assert form.invalid? assert form.not_spam? assert !form.deliver assert_empty ActionMailer::Base.deliveries end def test_deliver_is_true_when_is_not_spam_and_valid form = ContactForm.new(name: 'Jose', email: 'is.valid@email.com') assert form.valid? assert form.not_spam? assert form.deliver assert_equal 1, ActionMailer::Base.deliveries.size end def test_human_name_returns_a_humanized_name assert_equal 'Contact form', ContactForm.model_name.human end def test_human_name_can_be_localized I18n.backend.store_translations(:en, mail_form: { models: { contact_form: 'Formulário de contato' } }) assert_equal 'Formulário de contato', ContactForm.model_name.human end def test_human_attribute_name_returns_a_humanized_attribute assert_equal 'Message', ContactForm.human_attribute_name(:message) end def test_human_attribute_name_can_be_localized I18n.backend.store_translations(:en, mail_form: { attributes: { contact_form: { message: 'Mensagem' } } }) assert_equal 'Mensagem', ContactForm.human_attribute_name(:message) end def test_activemodel_linked_errors form = ContactForm.new(email: 'not_valid', category: "invalid") form.valid? assert_equal ["can't be blank"], form.errors[:name] assert_equal ["is invalid"], form.errors[:email] assert_equal ["is not included in the list"], form.errors[:category] assert_equal [], form.errors[:message] end def test_activemodel_errors_lookups_model_keys I18n.backend.store_translations(:en, mail_form: { errors: { models: { contact_form: { attributes: { email: { invalid: 'fill in the email' }, name: { blank: 'fill in the name' } } } }}}) form = ContactForm.new(email: 'not_valid') form.valid? assert_equal ["fill in the name"], form.errors[:name] assert_equal ["fill in the email"], form.errors[:email] end def teardown I18n.reload! end end