import unittest
import os
import DataBase.mongoDB as db
import json
from pymongo import MongoClient
from dotenv import load_dotenv


class DataBaseTests(unittest.TestCase):

    def setUp(self):
        file_path = os.path.dirname(__file__) + r"\testData.json"
        with open(file_path) as file:
            self.test_data = json.load(file)
        self.test_data1 = self.test_data["test_data1"]

    def tearDown(self):
        data_base = db.get_db()
        record = data_base.test_books
        record.delete_many({})

    def test_upload(self):
        data_base = db.get_db()
        record = data_base.test_books
        db.insert_document(self.test_data1, 0)
        self.assertEqual(record.count_documents({}), 1)

    def test_download(self):
        db.insert_document(self.test_data1, 0)
        json_file = json.loads(db.get_documents_json(0, {"title": "Becoming"}))
        no_id_test_data1 = self.test_data1
        no_id_test_data1.pop("_id")
        self.assertEqual(json_file["books"][0], no_id_test_data1)

    def test_update(self):
        data_base = db.get_db()
        record = data_base.test_books
        db.insert_document(self.test_data1, 0)
        db.update_dicts(0, {"title": "Becoming"}, {"rating_count": 1000000})
        self.assertEqual(record.count_documents({"rating_count": self.test_data1["rating_count"]}), 0)
        self.assertEqual(record.count_documents({"rating_count": 1000000}), 1)

    def test_delete(self):
        data_base = db.get_db()
        record = data_base.test_books
        db.insert_document(self.test_data1, 0)
        db.clean(0, {})
        self.assertEqual(record.count_documents({}), 0)


if __name__ == '__main__':
    unittest.main()
    # db.clean(0, {})