test_scan.py 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. #!/usr/bin/env python3
  2. # -*- coding: UTF-8 -*-
  3. import json
  4. from unittest import mock
  5. from tests.test_main import TestWithUserLogin, setUpModule as init, testdir
  6. from webserver import handlers
  7. from webserver.models import ScanFile
  8. def setUpModule():
  9. init()
  10. handlers.scan.SCAN_DIR_PREFIX = "/"
  11. class TestScan(TestWithUserLogin):
  12. @mock.patch("webserver.handlers.scan.Scanner.allow_backgrounds")
  13. def test_scan(self, m1):
  14. m1.return_value = False
  15. d = self.json("/api/admin/scan/run", method="POST", body="")
  16. self.assertEqual(d["err"], "ok")
  17. def test_scan_background(self):
  18. d = self.json("/api/admin/scan/run", method="POST", body="")
  19. self.assertEqual(d["err"], "ok")
  20. def test_scan_status(self):
  21. d = self.json("/api/admin/scan/status")
  22. self.assertEqual(d["err"], "ok")
  23. def test_import_status(self):
  24. d = self.json("/api/admin/import/status")
  25. self.assertEqual(d["err"], "ok")
  26. class TestImport(TestWithUserLogin):
  27. READY_ROW_ID = 69
  28. def setUp(self):
  29. # 将这行记录设置为可导入的状态
  30. session = self.get_app().settings["ScopedSession"]
  31. session.rollback()
  32. row = session.query(ScanFile).filter(ScanFile.id == self.READY_ROW_ID).one()
  33. row.path = testdir + "/cases/new.epub"
  34. row.status = ScanFile.READY
  35. row.book_id = 0
  36. row.import_id = 0
  37. row.save()
  38. session.commit()
  39. return super().setUp()
  40. @mock.patch("calibre.db.legacy.LibraryDatabase.import_book")
  41. @mock.patch("webserver.handlers.scan.Scanner.allow_backgrounds")
  42. def test_import_one(self, m2, m1):
  43. m1.return_value = 1008610086
  44. m2.return_value = False
  45. hash = "sha256:3cfd51afe17f3051e24921825c05e1df0bce03d22837a916a4d4ddcbf0301a13"
  46. req = {"hashlist": [hash]}
  47. d = self.json("/api/admin/import/run", method="POST", body=json.dumps(req))
  48. self.assertEqual(d["err"], "ok")
  49. @mock.patch("calibre.db.legacy.LibraryDatabase.import_book")
  50. @mock.patch("webserver.handlers.scan.Scanner.allow_backgrounds")
  51. def test_import_all(self, m2, m1):
  52. m1.return_value = 1008610086
  53. m2.return_value = False
  54. req = {"hashlist": "all"}
  55. d = self.json("/api/admin/import/run", method="POST", body=json.dumps(req))
  56. self.assertEqual(d["err"], "ok")