コード例 #1
0
ファイル: api.py プロジェクト: praekelt/airtime-service
    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'],
        }))
コード例 #2
0
 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)]
コード例 #3
0
ファイル: test_api.py プロジェクト: praekelt/airtime-service
 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
     ])
コード例 #4
0
    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)
コード例 #5
0
    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),
        ]
コード例 #6
0
 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())