Example #1
0
def test_preodb_is_room_order_exist():
    clean_db()
    preo_db = PreoDB(TEST_DB_PATH)
    insert_mock_data(preo_db)
    assert preo_db.is_room_order_exist('10001')
    # Should return false, if room id does not exist.
    assert not preo_db.is_room_order_exist('11111')
Example #2
0
def test_preodb_set_order_success():
    clean_db()
    preo_db = PreoDB(TEST_DB_PATH)
    for data in MOCK_ORDERS:
        preo_db.set_order(data[0], data[1], data[2], data[3])
    orders = preo_db.list_all()
    assert len(orders) == len(MOCK_ORDERS)
Example #3
0
def test_preodb_get_room_order():
    clean_db()
    preo_db = PreoDB(TEST_DB_PATH)
    insert_mock_data(preo_db)
    assert preo_db.get_room_order('10001') != None
    assert preo_db.get_room_order('10002') != None
    assert preo_db.get_room_order('10003') == None
Example #4
0
def test_preodb_is_room_order_enable():
    clean_db()
    preo_db = PreoDB(TEST_DB_PATH)
    insert_mock_data(preo_db)
    # New room prop is enabled by default.
    assert preo_db.is_room_order_enable('10001')
    # Should return false, if room id does not exist.
    assert not preo_db.is_room_order_enable('11111')
Example #5
0
def test_preodb_new_room_order_success():
    clean_db()
    preo_db = PreoDB(TEST_DB_PATH)
    for data in MOCK_ROOMPROPS:
        preo_db.new_room_order(data[0], data[1])
    for data in MOCK_ROOMPROPS:
        is_exist = preo_db.is_room_order_exist(data[0])
        assert is_exist
Example #6
0
def test_preodb_get_order_by_room():
    clean_db()
    preo_db = PreoDB(TEST_DB_PATH)
    insert_mock_data(preo_db)
    orders = preo_db.get_order_by_room('10000')
    assert len(orders) == 0
    orders = preo_db.get_order_by_room('10001')
    assert len(orders) == 6
Example #7
0
def test_preodb_del_order():
    clean_db()
    preo_db = PreoDB(TEST_DB_PATH)
    insert_mock_data(preo_db)
    for data in MOCK_ORDERS:
        preo_db.del_order(data[0], data[1], data[2])
    orders = preo_db.list_all()
    assert len(orders) == 0
Example #8
0
def test_preodb_set_order_fail():
    # Test orders table constraint
    clean_db()
    preo_db = PreoDB(TEST_DB_PATH)
    for data in INVALID_MOCK_ORDERS:
        with pytest.raises(sqlite3.IntegrityError):
            preo_db.set_order(data[0], data[1], data[2], data[3])
    orders = preo_db.list_all()
    assert len(orders) == 0
Example #9
0
def test_preodb_get_order_by_item():
    clean_db()
    preo_db = PreoDB(TEST_DB_PATH)
    insert_mock_data(preo_db)
    orders = preo_db.get_order_by_item('10001', 'rice')
    assert count_item_amount(orders, 'rice') == 0
    orders = preo_db.get_order_by_item('10001', 'milk')
    assert count_item_amount(orders, 'milk') == 5
    orders = preo_db.get_order_by_item('10001', 'bread')
    assert count_item_amount(orders, 'bread') == 2
Example #10
0
def test_preodb_get_order_by_user():
    clean_db()
    preo_db = PreoDB(TEST_DB_PATH)
    insert_mock_data(preo_db)
    orders = preo_db.get_order_by_user('10001', 'noone')
    assert len(orders) == 0
    orders = preo_db.get_order_by_user('10001', 'finn')
    assert len(orders) == 2
    orders = preo_db.get_order_by_user('10001', 'rey')
    assert len(orders) == 2
Example #11
0
def test_preodb_enable_room_order():
    clean_db()
    preo_db = PreoDB(TEST_DB_PATH)
    insert_mock_data(preo_db)
    preo_db.disable_room_order('10001')
    preo_db.enable_room_order('10001')
    assert preo_db.is_room_order_enable('10001')
Example #12
0
 def __init__(self, db_path=PreoDB.DEFAULT_DB_PATH):
     self.preo_db = PreoDB(db_path)
Example #13
0
class RoomOrder:
    def __init__(self, db_path=PreoDB.DEFAULT_DB_PATH):
        self.preo_db = PreoDB(db_path)

    def new_order(self, room_id, list_name):
        if self.preo_db.is_room_order_exist(room_id):
            # Room order has already been created.
            return Response.text(Response.REP_DUP_ORDERLIST)

        self.preo_db.new_room_order(room_id, list_name)
        return Response.text(Response.REP_NEW_ORDERLIST_CREATED, list_name)

    def set_item(self, room_id, user_name, item_name, amount):
        if not self.preo_db.is_room_order_exist(room_id):
            # Room order has not been created yet.
            print("Error: room order %s does not exist" % (room_id))
            return None

        if not self.preo_db.is_room_order_enable(room_id):
            # Room order is not enabled.
            print("Error: room order %s is not enabled" % (room_id))
            return Response.text(Response.REP_ORDERLIST_ALREADY_CLOSED)

        self.preo_db.set_order(room_id, user_name, item_name, amount)
        return Response.text(Response.REP_SET_ITEM, user_name, item_name,
                             amount)

    def delete_item(self, room_id, user_name, item_name):
        if not self.preo_db.is_room_order_exist(room_id):
            # Room order has not been created yet.
            print("Error: room order %s does not exist" % (room_id))
            return None

        if not self.preo_db.is_room_order_enable(room_id):
            # Room order is not enabled.
            print("Error: room order %s is not enabled" % (room_id))
            return Response.text(Response.REP_ORDERLIST_ALREADY_CLOSED)
        if not self.preo_db.get_order_by_user_item(room_id, user_name,
                                                   item_name):
            # Item does not exist.
            print("Error: item %s for %s does not exist in %s" %
                  (item_name, user_name, room_id))
            return Response.text(Response.REP_DEL_NOT_EXIST_ITEM, user_name,
                                 item_name)

        self.preo_db.del_order(room_id, user_name, item_name)
        return Response.text(Response.REP_DEL_ITEM, user_name, item_name)

    def list_order(self, room_id):
        room_order = self.preo_db.get_room_order(room_id)
        if room_order == None:
            # Room order has not been created yet.
            print("Error: room order %s does not exist" % (room_id))
            return None

        order_list = self.preo_db.get_order_by_room(room_id)
        text = self.__order_list_to_str(order_list)
        return Response.text(Response.REP_SUMMARY_ORDERLIST,
                             room_order.list_name, text)

    def close_order(self, room_id):
        if not self.preo_db.is_room_order_exist(room_id):
            # Room order has not been created yet.
            print("Error: room order %s does not exist" % (room_id))
            return None

        if not self.preo_db.is_room_order_enable(room_id):
            # Room order has already been disabled.
            return Response.text(Response.REP_ORDERLIST_ALREADY_CLOSED)

        self.preo_db.disable_room_order(room_id)
        return Response.text(Response.REP_ORDERLIST_CLOSED)

    def open_order(self, room_id):
        if not self.preo_db.is_room_order_exist(room_id):
            # Room order has not been created yet.
            print("Error: room order %s does not exist" % (room_id))
            return None

        if self.preo_db.is_room_order_enable(room_id):
            # Room order has already been enabled.
            return Response.text(Response.REP_ORDERLIST_ALREADY_OPENED)

        self.preo_db.enable_room_order(room_id)
        return Response.text(Response.REP_OPEN_ORDERLIST)

    def is_order_opened(self, room_id):
        if not self.preo_db.is_room_order_exist(room_id):
            # Room order has not been created.
            return False

        return self.preo_db.is_room_order_enable(room_id)

    def end_order(self, room_id):
        room_order = self.preo_db.get_room_order(room_id)
        if room_order == None:
            # Room order has not been created.
            print("Error: room order %s does not exist" % (room_id))
            return None

        order_list = self.preo_db.get_order_by_room(room_id)
        text = self.__order_list_to_str(order_list)
        self.preo_db.del_room_order(room_id)

        return Response.text(Response.REP_END_ORDERLIST, room_order.list_name,
                             text)

    @staticmethod
    def __order_print_user_item_amount(order):
        return "%s: %s %s" % (order.user_name, order.item_name, order.amount)

    @staticmethod
    def __order_list_to_str(order_list):
        # Creating a dict mapping item name into a list of text list and total maount
        # ex. "milk" : (["user1", "user3(2)"], 3)
        order_dict = {}
        for order in order_list:
            item_name = order.item_name
            amount = order.amount
            text = order.user_name if amount == 1 else "%s(%d)" % (
                order.user_name, amount)
            if item_name in order_dict:
                order_dict[item_name][0].append(text)
                order_dict[item_name][1] += amount
            else:
                order_dict[item_name] = [[text], amount]

        order_text = ""
        for item_name, args in order_dict.items():
            order_text += "%s %d: %s\n" % (item_name, args[1], " ".join(
                args[0]))
        return order_text.strip()
Example #14
0
def test_preodb_init():
    clean_db()
    preo_db = PreoDB(TEST_DB_PATH)
    assert preo_db != None
    assert isinstance(preo_db, PreoDB)
Example #15
0
def test_preodb_new_room_order_fail():
    clean_db()
    preo_db = PreoDB(TEST_DB_PATH)
    for data in INVALID_MOCK_ROOMPROPS:
        with pytest.raises(sqlite3.IntegrityError):
            preo_db.new_room_order(data[0], data[1])
Example #16
0
def test_preodb_del_room_order():
    clean_db()
    preo_db = PreoDB(TEST_DB_PATH)
    insert_mock_data(preo_db)
    assert preo_db.is_room_order_exist('10001')
    preo_db.del_room_order('10001')
    assert not preo_db.is_room_order_exist('10001')
    orders = preo_db.get_order_by_room('10001')
    assert len(orders) == 0

    assert preo_db.is_room_order_exist('10002')
    preo_db.del_room_order('10002')
    assert not preo_db.is_room_order_exist('10002')
    orders = preo_db.get_order_by_room('10002')
    assert len(orders) == 0