Пример #1
0
def test_send_post_dry_run(botos):
    posts = botos.resource('dynamodb').Table('k8aPosts')

    content = """Here's some html to escape: & < " \' >\n\nbest,\nSimon"""
    posts.put_item(Item={'id': generate_nonce(), 'c': content, 'r': True, 's': 'subject'})

    lottery.send_post(botos)
Пример #2
0
def test_lambda_submits(botos, post_ingest):
    addresses = botos.resource('dynamodb').Table('k8aAddresses2')
    posts = botos.resource('dynamodb').Table('k8aPosts')
    queue = botos.resource('sqs').Queue(settings.post_queue_url)

    # create winner
    id = generate_nonce()
    addresses.put_item(Item={'id': id, 'a': id + '@example.com'})
    choice, _ = lottery.pick_winner(botos, 5, sleep_secs=0)

    # submit
    queue.send_message(
        MessageBody=lottery.PostEvent('submit', id, choice['Attributes']['w'], 'some contents', 'subject').to_json(),
    )

    res = botos.client('lambda').invoke(
        FunctionName='post_ingest',
    )
    returned = json.loads(res['Payload'].read())['results']

    assert len(returned) == 1
    winner_nonce, post_r, address_r = returned[0]
    addresses.delete_item(Key={'id': address_r['Attributes']['id']})
    posts.delete_item(Key={'id': winner_nonce})

    assert queue.attributes['ApproximateNumberOfMessages'] == '0'
    assert queue.attributes['ApproximateNumberOfMessagesNotVisible'] == '0'
Пример #3
0
def test_send_no_approved_post(botos):
    with pytest.raises(lottery.NoApprovedPost):
        lottery.send_post(botos)

    posts = botos.resource('dynamodb').Table('k8aPosts')
    posts.put_item(Item={'id': generate_nonce(), 'c': 'contents', 'r': False, 's': 'subject'})

    with pytest.raises(lottery.NoApprovedPost):
        lottery.send_post(botos)
Пример #4
0
def test_submit_post(botos):
    addresses = botos.resource('dynamodb').Table('k8aAddresses2')
    posts = botos.resource('dynamodb').Table('k8aPosts')

    id = generate_nonce()
    addresses.put_item(Item={'id': id, 'a': id + '@example.com', 's': "subject" + id})
    choice, _ = lottery.pick_winner(botos, 5, sleep_secs=0)

    winner_nonce, post_r, address_r = lottery.submit_post(botos, id, choice['Attributes']['w'], 'my post', 'my subject')
    assert post_r
    assert 'w' not in address_r['Attributes']

    addresses.delete_item(Key={'id': id})
    posts.delete_item(Key={'id': winner_nonce})
Пример #5
0
def test_winner_verification(botos):
    addresses = botos.resource('dynamodb').Table('k8aAddresses2')

    id = generate_nonce()
    addresses.put_item(Item={'id': id, 'a': id + '@example.com'})
    lottery.pick_winner(botos, 5, sleep_secs=0)

    bad_combos = itertools.product(['id', id], ['nonce'])
    for bad_combo in bad_combos:
        bad_id, bad_nonce = bad_combo
        with pytest.raises(lottery.InvalidWinnerNonce):
            lottery.submit_post(botos, bad_id, bad_nonce, 'my post', 'my subject')

    addresses.delete_item(Key={'id': id})
Пример #6
0
def test_dupe_winner(botos):
    addresses = botos.resource('dynamodb').Table('k8aAddresses2')

    id = generate_nonce()
    addresses.put_item(Item={'id': id, 'a': id + '@example.com'})

    choice, _ = lottery.pick_winner(botos, 5, sleep_secs=0)
    assert choice['Attributes']['a'].endswith('example.com')
    assert choice['Attributes']['w']

    with pytest.raises(lottery.NoPossibleWinner):
        lottery.pick_winner(botos, 5, sleep_secs=0)

    addresses.delete_item(Key={'id': id})
Пример #7
0
def test_full_lottery(botos):
    addresses = botos.resource('dynamodb').Table('k8aAddresses2')

    ids = [generate_nonce() for _ in range(10)]

    with addresses.batch_writer() as b:
        for id in ids:
            b.put_item(Item={'id': id, 'a': id + '@example.com'})

    choice, _ = lottery.pick_winner(botos, 5, sleep_secs=0)
    assert choice['Attributes']['a'].endswith('example.com')
    assert choice['Attributes']['w']

    with addresses.batch_writer() as b:
        for id in ids:
            b.delete_item(Key={'id': id})