vmesel/PyJobs

View on GitHub
pyjobs/core/tests/test_forms.py

Summary

Maintainability
F
4 days
Test Coverage
from django.test import TestCase, override_settings
from model_mommy import mommy
from datetime import timedelta

import responses

from pyjobs.core.forms import *
from pyjobs.core.models import Skill, Profile, Job, Country, Currency
from unittest.mock import patch
from django.contrib.auth.models import User


class RegisterFormTest(TestCase):
    @responses.activate
    def test_empty_form_is_not_valid(self):
        responses.add(
            responses.POST,
            "https://www.google.com/recaptcha/api/siteverify",
            json={"success": True},
            status=200,
        )
        form = RegisterForm(data={})
        self.assertTrue(form.is_valid("test") == False)

    def test_form_is_valid(self):
        skills = mommy.make("core.Skill", _quantity=1, _fill_optional=True)
        form = RegisterForm(
            data={
                "first_name": "Vinicius",
                "last_name": "Mesel",
                "email": "fakeemail@somewhere.com",
                "username": "foobar",
                "password1": "foopass123",
                "password2": "foopass123",
                "github": "http://www.google.com",
                "linkedin": "http://www.google.com",
                "portfolio": "http://www.google.com",
                "cellphone": "(11)987485552",
                "skills_": skills,
                "agree_privacy_policy": True,
            }
        )

        self.assertTrue(form.is_valid() == True)


class JobApplicationFormTest(TestCase):
    def test_empty_form_is_valid(self):
        form = JobApplicationForm(data={})
        self.assertTrue(form.is_valid())

    def test_filled_form_is_valid(self):
        form = JobApplicationForm(
            data={"challenge_response_link": "http://www.google.com"}
        )
        self.assertTrue(form.is_valid())


class JobApplicationFormWithContentTest(TestCase):
    @patch("pyjobs.marketing.triggers.send_group_notification")
    @patch("pyjobs.marketing.triggers.send_job_to_github_issues")
    @patch("pyjobs.marketing.triggers.post_telegram_channel")
    def setUp(
        self, _mocked_send_group_push, _mock_github, _mocked_post_telegram_channel
    ):
        self.job = mommy.make(
            Job, _fill_optional=False, public=True, is_challenging=False
        )
        self.job.generate_slug()
        self.profile = mommy.make(Profile, _fill_optional=True)

        self.job_application = JobApplication.objects.create(
            job=self.job,
            user=self.profile.user,
            email_sent_at=datetime.now() - timedelta(days=4),
            challenge_resent=False,
            challenge_response_at=None,
        )

    def test_form_saving(self):
        form = JobApplicationForm(instance=self.job_application)
        form.save()
        self.assertTrue(self.job_application.challenge_response_at is not None)


class RegisterFormTest(TestCase):
    def setUp(self):
        self.skills = mommy.make(Skill, _quantity=5)

    @responses.activate
    def test_invalid_form(self):
        responses.add(
            responses.POST,
            "https://www.google.com/recaptcha/api/siteverify",
            json={"success": True},
            status=200,
        )
        form = RegisterForm(data={})
        self.assertFalse(form.is_valid("test"))

    @responses.activate
    @patch("pyjobs.marketing.triggers.subscribe_user_to_mailer")
    def test_valid_form(self, _mocked_subscription):
        responses.add(
            responses.POST,
            "https://www.google.com/recaptcha/api/siteverify",
            json={"success": True},
            status=200,
        )
        data = {
            "github": "http://www.google.com",
            "linkedin": "http://www.google.com",
            "portfolio": "http://www.google.com",
            "cellphone": "11981435390",
            "skills_": self.skills,
            "first_name": "Vvv",
            "last_name": "Mmm",
            "email": "v@m.com",
            "password1": "#T3st3123!",
            "username": "test_user",
            "on_mailing_list": True,
            "agree_privacy_policy": True,
        }
        data["password2"] = data["password1"]
        form = RegisterForm(data=data)
        self.assertTrue(form.is_valid("test"))
        form.save()
        self.user = User.objects.all().first()
        self.profile = Profile.objects.filter(user=self.user).first()
        self.assertTrue(self.profile.github == data["github"])
        self.assertTrue(_mocked_subscription.called)

    @responses.activate
    @patch("pyjobs.marketing.triggers.subscribe_user_to_mailer")
    def test_valid_form_but_without_mailer(self, _mocked_subscription):
        responses.add(
            responses.POST,
            "https://www.google.com/recaptcha/api/siteverify",
            json={"success": True},
            status=200,
        )
        data = {
            "github": "http://www.google.com",
            "linkedin": "http://www.google.com",
            "portfolio": "http://www.google.com",
            "cellphone": "11981435390",
            "skills_": self.skills,
            "first_name": "Vvv",
            "last_name": "Mmm",
            "email": "v@m.com",
            "password1": "#T3st3123!",
            "username": "test_user",
            "on_mailing_list": False,
            "agree_privacy_policy": True,
        }
        data["password2"] = data["password1"]
        form = RegisterForm(data=data)
        self.assertTrue(form.is_valid("test"))
        form.save()
        self.user = User.objects.all().first()
        self.profile = Profile.objects.filter(user=self.user).first()
        self.assertTrue(self.profile.github == data["github"])
        self.assertFalse(_mocked_subscription.called)


class JobApplicationFeedbackFormTest(TestCase):
    @responses.activate
    @patch("pyjobs.marketing.triggers.send_group_notification")
    @patch("pyjobs.marketing.triggers.send_job_to_github_issues")
    @patch("pyjobs.marketing.triggers.post_telegram_channel")
    def setUp(
        self, _mocked_send_group_push, _mock_github, _mocked_post_telegram_channel
    ):
        self.country = mommy.make(Country)
        self.currency = mommy.make(Currency)
        self.job = mommy.make(
            Job,
            public=True,
            country=self.country,
            currency=self.currency,
            is_challenging=False,
        )
        self.profile = mommy.make(Profile, _fill_optional=True)

        self.job_application = JobApplication.objects.create(
            job=self.job,
            user=self.profile.user,
            email_sent_at=datetime.now() - timedelta(days=4),
            challenge_resent=False,
            challenge_response_at=None,
        )

    def test_form_without_feedback(self):
        self.assertTrue(self.job_application.company_feedback is None)

    def test_saving_with_content(self):
        data = {
            "company_feedback": "Teste",
            "company_feedback_type": 1,
        }
        form = JobApplicationFeedbackForm(instance=self.job_application, data=data)
        self.assertTrue(form.is_valid())
        form.save()
        self.assertTrue(
            self.job_application.company_feedback == data["company_feedback"]
        )
        self.assertTrue(
            self.job_application.company_feedback_type == data["company_feedback_type"]
        )


class EditProfileFormTest(TestCase):
    def setUp(self):
        self.profile = mommy.make(Profile, _fill_optional=True)
        self.skills = mommy.make("core.Skill", _quantity=1, _fill_optional=True)

    def test_email_change_on_form(self):
        data = {
            "email": "zezinho@huguinho.com",
            "cellphone": "11912345678",
            "skills": self.skills,
        }
        past_email = self.profile.user.email
        form = EditProfileForm(instance=self.profile, data=data)
        self.assertTrue(form.is_valid())
        form.save()
        new_email = self.profile.user.email
        self.assertTrue(past_email != new_email)

    def test_form_is_empty_failing(self):
        form = EditProfileForm(instance=self.profile, data={})
        self.assertFalse(form.is_valid())