import unittest
from unittest import expectedFailure
from unittest.case import SkipTest

from pymongo.errors import ServerSelectionTimeoutError
from evernotebot.bot.storage import Mongo


class TestMongoStorage(unittest.TestCase):
    def setUp(self):
        self.db_name = 'test_mongo_storage'
        connection_string = 'mongodb://127.0.0.1:27017/?serverSelectionTimeoutMS=100'
        try:
            self.client = Mongo(connection_string, db_name=self.db_name,
                                collection='test')
            list(self.client.get_all({}))
        except ServerSelectionTimeoutError as e:
            raise SkipTest(str(e))

    def tearDown(self):
        self.client._driver.drop_database(self.db_name)

    def test_create(self):
        data = {'id': 1, 'name': 'test'}
        self.client.create(data)
        data = self.client.get(1)
        self.assertEqual(data['id'], 1)
        self.assertEqual(data['name'], 'test')

    @expectedFailure
    def test_save_not_existed(self):
        data = {'id': 2, 'name': 'Batman'}
        self.client.save(data)

    def test_save(self):
        data = {'id': 3, 'name': 'Batman'}
        self.client.create(data)
        data['name'] = 'Joker'
        self.client.save(data)
        data = self.client.get(3)
        self.assertEqual(data['name'], 'Joker')