""" FlaskValidator tests """

import unittest

from flask import Flask
from flask_sqlalchemy import SQLAlchemy

from flask_validator import Validator


class MessageTest(unittest.TestCase):
    def setUp(self):
        app = Flask(__name__)
        app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///:memory:'
        app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
        db = SQLAlchemy(app)

        class DummyModel(db.Model):
            """ SQLAlchemy Dummy Object """

            id = db.Column(db.Integer, primary_key=True)
            integer = db.Column(db.Integer)

        db.create_all()

        self.DummyModel = DummyModel
        self.define_validators()

        self.dummy = DummyModel()

        self.app = app
        self.db = db

    def simple_validate(self, field, value):
        """
        Simple Validation

        """
        setattr(self.dummy, field, value)

    def define_validators(self):
        """
        Define Validators

        """
        class FailValidator(Validator):
            def check_value(self, value):
                return False

        FailValidator(self.DummyModel.integer, throw_exception=True,
                      message="{do} {not} {interpolate} {this}",
                      interpolate_message=False)

    def test_disable_message_interpolation(self):
        """
        Testing FlaskValidator.interpolate_message

        """
        with self.assertRaises(Exception) as context:
            self.simple_validate('integer', 1)

        self.assertEqual("{do} {not} {interpolate} {this}",
                         str(context.exception))


def suite():
    """ Test Suite """
    suite = unittest.TestSuite()
    suite.addTest(unittest.makeSuite(MessageTest))
    return suite


if __name__ == '__main__':
    unittest.main(defaultTest='suite')