dbtest_debversion.py 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. #! /usr/bin/env python3
  2. import unittest
  3. from db_test import DBDakTestCase
  4. from sqlalchemy import Column, Integer, Table, func
  5. from sqlalchemy.orm import mapper
  6. from daklib.dbconn import DebVersion
  7. class Version:
  8. def __init__(self, version):
  9. self.version = version
  10. def __repr__(self):
  11. return "<Version('%s')>" % self.version
  12. class DebVersionTestCase(DBDakTestCase):
  13. """
  14. The DebVersionTestCase tests both comparison (<=, ==, >, !=), the in_()
  15. method and aggregate functions (min, max) for the DebVersion type. To
  16. simplify the test it creates a separate table 'version' which is not used
  17. by dak itself.
  18. """
  19. def setUp(self):
  20. super(DebVersionTestCase, self).setUp()
  21. self.version_table = Table(
  22. "version",
  23. self.metadata,
  24. Column("id", Integer, primary_key=True),
  25. Column("version", DebVersion),
  26. )
  27. self.version_table.create(checkfirst=True)
  28. mapper(Version, self.version_table)
  29. def test_debversion(self):
  30. v = Version("0.5~")
  31. self.session.add(v)
  32. v = Version("0.5")
  33. self.session.add(v)
  34. v = Version("1.0")
  35. self.session.add(v)
  36. q = self.session.query(Version)
  37. self.assertEqual(3, q.count())
  38. self.assertEqual(2, q.filter(Version.version <= "0.5").count())
  39. self.assertEqual(1, q.filter(Version.version == "0.5").count())
  40. self.assertEqual(2, q.filter(Version.version > "0.5~").count())
  41. self.assertEqual(1, q.filter(Version.version > "0.5").count())
  42. self.assertEqual(0, q.filter(Version.version > "1.0").count())
  43. self.assertEqual(2, q.filter(Version.version != "1.0").count())
  44. self.assertEqual(2, q.filter(Version.version.in_(["0.5~", "1.0"])).count())
  45. q = self.session.query(func.min(Version.version))
  46. self.assertEqual("0.5~", q.scalar())
  47. q = self.session.query(func.max(Version.version))
  48. self.assertEqual("1.0", q.scalar())
  49. def tearDown(self):
  50. self.session.rollback()
  51. self.version_table.drop()
  52. super(DebVersionTestCase, self).tearDown()
  53. if __name__ == "__main__":
  54. unittest.main()