]> rtime.felk.cvut.cz Git - hubacji1/coffee-getter.git/blobdiff - ut/test_db.py
Fix drunk list db UT
[hubacji1/coffee-getter.git] / ut / test_db.py
index 0aae05deddc3f22e62919c61db332a3ab23999e8..fe67e71566f31a56403ece26a7b4cc5fe451a992 100644 (file)
@@ -1,10 +1,11 @@
 # -*- coding: utf-8 -*-
 """Test database access."""
+from datetime import datetime, timedelta
 from os import path, remove
 from sqlite3 import connect
 from unittest import TestCase
 from cbconf import Conf
-from cbdb import Db, FileNotSetError
+from cbdb import ArgCountError, Db, FileNotSetError
 
 TESTDB_FILENAME = ".tmptest.db"
 
@@ -74,6 +75,7 @@ INSERT INTO coffees (id, flavor, time) VALUES
 ('3333', 'espresso lungo', datetime('now', 'localtime', '-99 seconds')),
 ('3333', 'Club-Mate 0,33 l', datetime('now', 'localtime', '-99 seconds')),
 ('3333', 'espresso lungo', datetime('now', 'localtime', '-95 second')),
+('3333', 'Club-Mate 0,5 l', datetime('now', 'localtime', '-95 second')),
 ('3333', 'Club-Mate 0,33 l', datetime('now', 'localtime', '-95 second'));
     """)
     con.close()
@@ -112,8 +114,8 @@ class TopMateDrinkers(TestCase):
                 top,
                 [
                     ("tester", 4*0.5 + 4*0.33),
+                    ("clone", 0.5 + 2*0.33),
                     ("newer", 2*0.33),
-                    ("clone", 2*0.33),
                 ]
             )
         finally:
@@ -142,7 +144,7 @@ class TopMateDrinkers(TestCase):
             db = Db(TESTDB_FILENAME)
             top = db.getTopMateDrinkers()
             topsorted = list(top)
-            topsorted.sort(key=lambda x: x[1], reverse=True)
+            topsorted.sort(key=lambda x: (x[1], x[0]), reverse=True)
             self.assertEqual(
                 top,
                 topsorted
@@ -155,8 +157,112 @@ class TopMateDrinkers(TestCase):
         db = Db(cfg.getCoffeeDbPath())
         top = db.getTopMateDrinkers()
         topsorted = list(top)
-        topsorted.sort(key=lambda x: x[1], reverse=True)
+        topsorted.sort(key=lambda x: (x[1], x[0]), reverse=True)
         self.assertEqual(
             top,
             topsorted
         )
+
+class DrunkSum(TestCase):
+    tdy = datetime.now()
+    tdy += timedelta(days=1)
+    tdystr = tdy.strftime("%Y-%m-%d")
+    lw = tdy - timedelta(days=8)
+    lwstr = lw.strftime("%Y-%m-%d")
+
+    def test_espresso_sum(self):
+        create_test_db(TESTDB_FILENAME)
+        try:
+            db = Db(TESTDB_FILENAME)
+            drunk = db.getDrunkSum("espresso", self.lwstr, self.tdystr)
+            self.assertEqual(drunk, [])
+        finally:
+            delete_test_db(TESTDB_FILENAME)
+
+    def test_espressolungo_sum(self):
+        create_test_db(TESTDB_FILENAME)
+        try:
+            db = Db(TESTDB_FILENAME)
+            drunk = db.getDrunkSum("espresso lungo", self.lwstr, self.tdystr)
+            self.assertEqual(drunk, [
+                ("tester", 4),
+                ("newer", 2),
+                ("clone", 2),
+            ])
+        finally:
+            delete_test_db(TESTDB_FILENAME)
+
+    def test_mate_3_sum(self):
+        create_test_db(TESTDB_FILENAME)
+        try:
+            db = Db(TESTDB_FILENAME)
+            drunk = db.getDrunkSum("Club-Mate 0,33 l", self.lwstr, self.tdystr)
+            self.assertEqual(drunk, [
+                ("tester", 4),
+                ("newer", 2),
+                ("clone", 2),
+            ])
+        finally:
+            delete_test_db(TESTDB_FILENAME)
+
+    def test_mate_5_sum(self):
+        create_test_db(TESTDB_FILENAME)
+        try:
+            db = Db(TESTDB_FILENAME)
+            drunk = db.getDrunkSum("Club-Mate 0,5 l", self.lwstr, self.tdystr)
+            self.assertEqual(drunk, [
+                ("tester", 4),
+                ("clone", 1),
+            ])
+        finally:
+            delete_test_db(TESTDB_FILENAME)
+
+    def test_nof_args(self):
+        cfg = Conf()
+        db = Db(cfg.getCoffeeDbPath())
+        self.assertRaises(ArgCountError, db.getDrunkSum)
+        self.assertRaises(ArgCountError, db.getDrunkSum, "espresso")
+        self.assertRaises(
+            ArgCountError,
+            db.getDrunkSum,
+            "espresso", "2010-10-20"
+        )
+        self.assertRaises(
+            ArgCountError,
+            db.getDrunkSum,
+            "espresso", "lungo", "2010-10-20", "2020-10-20"
+        )
+
+    def test_all_mate_sum(self):
+        create_test_db(TESTDB_FILENAME)
+        try:
+            db = Db(TESTDB_FILENAME)
+            drunk = db.getDrunkSum(
+                "Club-Mate 0,5 l;Club-Mate 0,33 l",
+                self.lwstr,
+                self.tdystr
+            )
+            self.assertEqual(drunk, [
+                ("tester", 8),
+                ("newer", 2),
+                ("clone", 3),
+            ])
+        finally:
+            delete_test_db(TESTDB_FILENAME)
+
+    def test_all_mate_list(self):
+        create_test_db(TESTDB_FILENAME)
+        try:
+            db = Db(TESTDB_FILENAME)
+            drunk = db.getDrunkList(
+                "Club-Mate 0,5 l;Club-Mate 0,33 l",
+                self.lwstr,
+                self.tdystr
+            )
+            self.assertEqual(drunk, {
+                "tester": [4, 4],
+                "newer": [0, 2],
+                "clone": [1, 2],
+            })
+        finally:
+            delete_test_db(TESTDB_FILENAME)