def issue_voucher(self, request, voucher_pool): [request_id] = request.args['request_id'] [operator] = request.args['operator'] [denomination] = request.args['denomination'] conn = yield self.engine.connect() pool = VoucherPool(voucher_pool, conn) try: voucher = yield pool.issue_voucher(operator, denomination) except NoVoucherPool: request.setResponseCode(404) returnValue(json.dumps({ 'request_id': request_id, 'error': 'Voucher pool does not exist.', })) except NoVoucherAvailable: # This is a normal condition, so we still return a 200 OK. returnValue(json.dumps({ 'request_id': request_id, 'error': 'No voucher available.', })) finally: yield conn.close() request.setHeader('Content-Type', 'application/json') returnValue(json.dumps({ 'request_id': request_id, 'voucher': voucher['voucher'], }))
def test_import_creates_table(self): pool = VoucherPool('testpool', self.conn) f = self.failureResultOf(pool.count_vouchers(), NoVoucherPool) assert f.value.args == ('testpool',) self.populate_pool(pool, ['Tank'], ['red'], [0]) rows = self.successResultOf(pool.count_vouchers()) assert rows == [('Tank', 'red', False, 1)]
def populate_pool(self, pool_name, operators, denominations, suffixes): pool = VoucherPool(pool_name, self.conn) return pool.import_vouchers([ { 'operator': operator, 'denomination': denomination, 'voucher': '%s-%s-%s' % (operator, denomination, suffix), } for operator in operators for denomination in denominations for suffix in suffixes ])
def test_issue_voucher(self): pool = VoucherPool('testpool', self.conn) self.populate_pool(pool, ['Tank'], ['red'], [0]) rows = self.successResultOf(pool.count_vouchers()) assert rows == [('Tank', 'red', False, 1)] voucher = self.successResultOf(pool.issue_voucher('Tank', 'red')) assert voucher['operator'] == 'Tank' assert voucher['denomination'] == 'red' assert voucher['voucher'] == 'Tank-red-0' rows = self.successResultOf(pool.count_vouchers()) assert rows == [('Tank', 'red', True, 1)] self.failureResultOf( pool.issue_voucher('Tank', 'red'), NoVoucherAvailable)
def test_import_vouchers(self): pool = VoucherPool('testpool', self.conn) self.successResultOf(pool.create_tables()) self.successResultOf(pool.import_vouchers([ {'operator': 'Tank', 'denomination': 'red', 'voucher': 'Tr0'}, {'operator': 'Tank', 'denomination': 'red', 'voucher': 'Tr1'}, {'operator': 'Tank', 'denomination': 'blue', 'voucher': 'Tb0'}, {'operator': 'Tank', 'denomination': 'blue', 'voucher': 'Tb1'}, {'operator': 'Link', 'denomination': 'red', 'voucher': 'Lr0'}, {'operator': 'Link', 'denomination': 'red', 'voucher': 'Lr1'}, {'operator': 'Link', 'denomination': 'blue', 'voucher': 'Lb0'}, {'operator': 'Link', 'denomination': 'blue', 'voucher': 'Lb1'}, ])) result = self.successResultOf(pool.count_vouchers()) assert sorted(tuple(r) for r in result) == [ ('Link', 'blue', False, 2), ('Link', 'red', False, 2), ('Tank', 'blue', False, 2), ('Tank', 'red', False, 2), ]
def test_exists(self): pool = VoucherPool('testpool', self.conn) assert not self.successResultOf(pool.exists()) self.successResultOf(pool.create_tables()) assert self.successResultOf(pool.exists())