def test_resetpassword(self):
        from ptahcrowd.resetpassword import ResetPassword
        from ptahcrowd.resetpassword import ResetPasswordTemplate
        from ptahcrowd.provider import CrowdUser

        user = CrowdUser(name="name", login="******", email="email")
        CrowdUser.__type__.add(user)

        data = [1, None]

        def send(self):
            data[0] = 2
            data[1] = self.passcode

        ResetPasswordTemplate.send = send

        request = DummyRequest(POST={"login": "******", "form.buttons.reset": "Reset"})

        form = ResetPassword(None, request)
        res = form.update()

        msg = ptah.render_messages(request)
        self.assertIn("We have started resetting your password.", msg)

        self.assertIsInstance(res, HTTPFound)
        self.assertEqual(res.headers["location"], "http://example.com")
        self.assertEqual(data[0], 2)

        principal = ptah.pwd_tool.get_principal(data[1])
        self.assertEqual(principal.name, "name")
        self.assertEqual(principal.login, "login")

        del ResetPasswordTemplate.send
    def test_resetpassword_required(self):
        from ptahcrowd.resetpassword import ResetPassword

        request = DummyRequest(POST={"form.buttons.reset": "Reset"})

        form = ResetPassword(None, request)
        form.update()

        msg = ptah.render_messages(request)
        self.assertIn("The system can't restore the password for this user.", msg)
    def test_resetpassword_cancel(self):
        from ptahcrowd.resetpassword import ResetPassword

        request = DummyRequest(POST={"form.buttons.cancel": "Cancel"})

        form = ResetPassword(None, request)
        res = form.update()

        self.assertIsInstance(res, HTTPFound)
        self.assertEqual(res.headers["location"], "http://example.com")
    def test_resetpassword_required(self):
        from ptahcrowd.resetpassword import ResetPassword
        request = self.make_request(POST={'form.buttons.reset': 'Reset'})

        form = ResetPassword(None, request)
        form.update_form()

        msg = request.render_messages()
        self.assertIn("The system can't restore the password for this user.",
                      msg)
    def test_resetpassword_required(self):
        from ptahcrowd.resetpassword import ResetPassword
        request = self.make_request(
            POST={'form.buttons.reset': 'Reset'})

        form = ResetPassword(None, request)
        form.update_form()

        msg = request.render_messages()
        self.assertIn(
            "The system can't restore the password for this user.", msg)
    def test_resetpassword_cancel(self):
        from ptahcrowd.resetpassword import ResetPassword
        request = self.make_request(POST={'form.buttons.cancel': 'Cancel'})

        form = ResetPassword(None, request)
        res = form()

        self.assertIsInstance(res, HTTPFound)
        self.assertEqual(res.headers['location'], 'http://example.com')
    def test_resetpassword(self):
        from ptahcrowd.resetpassword import ResetPassword
        from ptahcrowd.resetpassword import ResetPasswordTemplate
        from ptahcrowd.provider import CrowdUser

        user = CrowdUser(username='******', email='email')
        CrowdUser.__type__.add(user)

        data = [1, None]

        def send(self):
            data[0] = 2
            data[1] = self.passcode

        ResetPasswordTemplate.send = send

        request = self.make_request(POST={
            'login': '******',
            'form.buttons.reset': 'Reset'
        })

        form = ResetPassword(None, request)
        res = form()

        msg = request.render_messages()
        self.assertIn("We have started resetting your password.", msg)

        self.assertIsInstance(res, HTTPFound)
        self.assertEqual(res.headers['location'], 'http://example.com')
        self.assertEqual(data[0], 2)

        principal = ptah.pwd_tool.get_principal(data[1])
        self.assertEqual(principal.username, 'username')
        self.assertEqual(principal.email, 'email')

        del ResetPasswordTemplate.send