class RegisterTests(TestCase):
    def setUp(self):
        self.factory = RequestFactory()
        self.req = self.factory.get(reverse('registration_register'))
        SessionMiddleware().process_request(self.req)
        self.b = RegisterView()

    def test_register_no_email(self):
        with self.assertRaises(ValueError):
            self.b.register(self.req)

    def test_unusable_password(self):
        u = self.b.register(self.req, email='*****@*****.**')
        self.assertFalse(u.has_usable_password())

    def test_signal_sent(self):
        signal_user = set()
        def user_registered_signal_handler(sender, request, user, **kwargs):
            signal_user.add(user)
        user_registered.connect(
            user_registered_signal_handler)
        u = self.b.register(self.req, email='*****@*****.**')
        self.assertIn(u, signal_user)

    def test_logged_in(self):
        signal_user = set()
        def login_signal_handler(sender, request, user, **kwargs):
            signal_user.add(user)
        user_logged_in.connect(login_signal_handler)
        u = self.b.register(self.req, email='*****@*****.**')
        self.assertIn(u, signal_user)

    def test_email_sent(self):
        self.b.register(self.req, email='*****@*****.**')
        self.assertEqual(len(mail.outbox), 1)