import RegularExpressionParser.Parser as Parser
import unittest


class DataBaseTests(unittest.TestCase):

    def test_safe_url(self):
        str_query = "search?q=book.rating_count<1000000&AND&book.rating>4.4"
        expected_url = "http://127.0.0.1:5000/api/search?q=book.rating_count%3C1000000%26AND%26book.rating%3E4.4"
        output_url = "http://127.0.0.1:5000/api/" + Parser.url_safe(str_query)
        self.assertEqual(output_url, expected_url)

    def test_valid_goodreads_url(self):
        url = "https://www.goodreads.com/book/show/35133922-educated"
        self.assertTrue(Parser.check_if_address_valid(url))

    def test_invalid_goodreads_url(self):
        url1 = "https://www.google.com/book/show/35133922-educated"
        self.assertFalse(Parser.check_if_address_valid(url1))
        url2 = "https://www.goodreads.com/book/show/over-35133922-educated"
        self.assertFalse(Parser.check_if_address_valid(url2))
        url3 = "https://www.goodreads.com/book/show/educated"
        self.assertFalse(Parser.check_if_address_valid(url3))

    def test_parse_query_to_url(self):
        query = "book.id:12345678 AND book.rating: > 4.80"
        result_url = Parser.parse_query_to_url(query)
        expect_url = "book.id%3A12345678%26AND%26book.rating%3A%3E4.80"
        self.assertEqual(result_url, expect_url)

    def test_parse_query_to_json(self):
        query = "book.id: NOT 12345678"
        expect_json = {"id":  {"$not": {"$regex": "12345678", "$options": "i"}}}
        output_json = Parser.parse_query_to_json(query)
        self.assertEqual(output_json, expect_json)