예제 #1
0
def test_max_orders_for_one_user():
    """ Positive test: MAX_ORDERS_PER_USER per user """
    uname = str(uuid.uuid4())[:8]
    new_user = {"name": "some_name", "username": uname, "secret": "key1"}
    requests.post(ENDPOINTS['signup'], json=new_user)

    for i in xrange(MAX_ORDERS_PER_USER):
        r = requests.post(ENDPOINTS['draft'].format(uname),
                          json=new_user,
                          auth=CustomAuth(uname, 'key1'))

        order = json.loads(r.content)['order_id']
        address = {"address": "Малая Бронная, 12"}
        r = requests.post(ENDPOINTS['commit'].format(uname, order),
                          json=address,
                          auth=CustomAuth(uname, 'key1'))

    time.sleep(2 * CHANGE_STATUS_TIME + 2 * UPDATE_ORDERS_INTERVAL)  #wait

    r = requests.get(ENDPOINTS['list'].format(uname, 'all'),
                     auth=CustomAuth(uname, 'key1'))

    status_complete = [
        json.loads(r.content)['orders'][i]['status']
        for i in xrange(MAX_ORDERS_PER_USER)
    ]
    #print status_complete
    assert all_same(status_complete, 'complete', 'expired')
예제 #2
0
def test_status_found_complete():
    """ Test status after 'found' and 'complete' """
    uname = str(uuid.uuid4())[:8]
    order = create_and_commit_order(uname, "key1", "Моховая, 2")

    time.sleep(CHANGE_STATUS_TIME + UPDATE_ORDERS_INTERVAL)  #wait

    r = requests.get(ENDPOINTS['list'].format(uname, 'all'),
                     auth=CustomAuth(uname, 'key1'))
    status_found = json.loads(r.content)['orders'][0]['status']

    #Move up the first check to find the problem faster. We can save 60 seconds.
    assert status_found == 'found' or status_found == 'expired'

    if status_found == 'expired':
        return

    time.sleep(CHANGE_STATUS_TIME + UPDATE_ORDERS_INTERVAL)  #wait

    r = requests.get(ENDPOINTS['list'].format(uname, 'all'),
                     auth=CustomAuth(uname, 'key1'))
    status_complete = json.loads(r.content)['orders'][0]['status']
    performer_name = json.loads(r.content)['orders'][0]['performer']['name']

    # More than one checks in one test is not good. Using it only for time optimization
    assert status_complete == 'complete'
    assert performer_name in performers
예제 #3
0
def test_list():
    """ Test list for 1 order contains the list of 1 element """

    uname = str(uuid.uuid4())[:8]

    new_user = {"name": "some_name", "username": uname, "secret": "key1"}
    requests.post(ENDPOINTS['signup'], json=new_user)

    r = requests.post(ENDPOINTS['draft'].format(uname),
                      json=new_user,
                      auth=CustomAuth(uname, 'key1'))

    json2 = json.loads(r.content)
    order = json2['order_id']
    address = {"address": "Малая Бронная, 12"}

    requests.post(ENDPOINTS['commit'].format(uname, order),
                  json=address,
                  auth=CustomAuth(uname, 'key1'))

    r = requests.get(ENDPOINTS['list'].format(uname, 'all'),
                     auth=CustomAuth(uname, 'key1'))
    json3 = json.loads(r.content)

    #expect 1 element in the "orders" list
    assert len(json3["orders"]) == 1
예제 #4
0
def test_commit_other_user():
    """ Test commit by an other user (security) """

    uname = str(uuid.uuid4())[:8]

    new_user = {"name": "some_name", "username": uname, "secret": "key1"}
    requests.post(ENDPOINTS['signup'], json=new_user)

    r = requests.post(ENDPOINTS['draft'].format(uname),
                      json=new_user,
                      auth=CustomAuth(uname, 'key1'))

    json2 = json.loads(r.content)
    order = json2['order_id']
    address = {"address": "Малая Бронная, 12"}

    uname2 = str(uuid.uuid4())[:8]

    new_user2 = {"name": "some_name", "username": uname, "secret": "key2"}
    requests.post(ENDPOINTS['signup'], json=new_user2)

    r = requests.post(ENDPOINTS['commit'].format(uname2, order),
                      json=address,
                      auth=CustomAuth(uname, 'key1'))
    assert r.status_code == 403
예제 #5
0
def create_and_commit_order(uname, secret, uaddress):
    #uname = str(uuid.uuid4())[:8]
    new_user = {"name": "some_name", "username": uname, "secret": secret}
    requests.post(ENDPOINTS['signup'], json=new_user)

    r = requests.post(ENDPOINTS['draft'].format(uname),
                      json=new_user,
                      auth=CustomAuth(uname, secret))
    order = json.loads(r.content)['order_id']
    address = {"address": uaddress}

    r = requests.post(ENDPOINTS['commit'].format(uname, order),
                      json=address,
                      auth=CustomAuth(uname, secret))
    return order
예제 #6
0
def test_edit():
    """ Test edit user """

    uname = str(uuid.uuid4())[:8]
    new_user = {"name": "some_name", "username": uname, "secret": "key1"}
    requests.post(ENDPOINTS['signup'], json=new_user)

    new_secret = {"new_secret": "key2"}
    r = requests.post(ENDPOINTS['edit'].format(uname), json = new_secret, \
                      auth =CustomAuth(uname,'key1'))

    assert r.status_code == 200

    new_secret = {"new_secret": "key1"}
    r = requests.post(ENDPOINTS['edit'].format(uname), json = new_secret, \
                      auth =CustomAuth(uname,'key2'))
예제 #7
0
def test_commit_wrong_secret():
    """ Test commit: wrong secret """

    uname = str(uuid.uuid4())[:8]

    new_user = {"name": "some_name", "username": uname, "secret": "key1"}
    requests.post(ENDPOINTS['signup'], json=new_user)

    requests.post(ENDPOINTS['draft'].format(uname),
                  json=new_user,
                  auth=CustomAuth(uname, 'key1'))

    r = requests.post(ENDPOINTS['commit'].format(uname, "0"),
                      json={},
                      auth=CustomAuth(uname, 'key2'))

    assert r.status_code == 403
예제 #8
0
def test_draft_lifetime():
    """ Test commit after draft_lifetime: the draft expirised and it's impossible to commit it """
    uname = str(uuid.uuid4())[:8]
    new_user = {"name": "some_name", "username": uname, "secret": "key1"}
    requests.post(ENDPOINTS['signup'], json=new_user)

    r = requests.post(ENDPOINTS['draft'].format(uname),
                      json=new_user,
                      auth=CustomAuth(uname, 'key1'))
    order = json.loads(r.content)['order_id']
    address = {"address": "Моховая, 2"}

    time.sleep(DRAFT_LIFETIME + 35)  #bug? why +35?

    r = requests.post(ENDPOINTS['commit'].format(uname, order),
                      json=address,
                      auth=CustomAuth(uname, 'key1'))
    assert r.status_code == 404
예제 #9
0
def test_commit_wrong_order():
    """ Test commit: wrong order """

    uname = str(uuid.uuid4())[:8]
    new_user = {"name": "some_name", "username": uname, "secret": "key1"}
    requests.post(ENDPOINTS['signup'], json=new_user)

    r = requests.post(ENDPOINTS['draft'].format(uname),
                      json=new_user,
                      auth=CustomAuth(uname, 'key1'))

    order = json.loads(r.content)['order_id']
    address = {"address": "Малая Бронная, 12"}
    r = requests.post(ENDPOINTS['commit'].format(uname, "0"),
                      json=address,
                      auth=CustomAuth(uname, 'key1'))

    assert r.status_code == 404
예제 #10
0
def test_cancel_wrong_secret():
    """ Test cancel: wrong secret """
    uname = str(uuid.uuid4())[:8]

    new_user = {"name": "some_name", "username": uname, "secret": "key1"}
    requests.post(ENDPOINTS['signup'], json=new_user)
    r = requests.post(ENDPOINTS['cancel'].format(uname, 0),
                      auth=CustomAuth(uname, 'key2'))

    assert r.status_code == 403
예제 #11
0
def test_commit_too_fast():
    """ Test commit too fast"""
    uname = str(uuid.uuid4())[:8]
    new_user = {"name": "some_name", "username": uname, "secret": "key1"}
    requests.post(ENDPOINTS['signup'], json=new_user)

    #last iteration must return 429 code
    for i in xrange(MAX_ORDERS_PER_USER + 1):
        r = requests.post(ENDPOINTS['draft'].format(uname),
                          json=new_user,
                          auth=CustomAuth(uname, 'key1'))

        order = json.loads(r.content)['order_id']
        address = {"address": "Малая Бронная, 12"}
        r = requests.post(ENDPOINTS['commit'].format(uname, order),
                          json=address,
                          auth=CustomAuth(uname, 'key1'))

    assert r.status_code == 429
예제 #12
0
def test_cancel_too_late():
    """ Test cancel after status changed from pending """
    uname = str(uuid.uuid4())[:8]
    order = create_and_commit_order(uname, "key1", "Моховая, 2")

    #CHANGE_STATUS_TIME+UPDATE_ORDERS_INTERVAL seconds is enough to find a driver
    time.sleep(CHANGE_STATUS_TIME + UPDATE_ORDERS_INTERVAL)
    r = requests.post(ENDPOINTS['cancel'].format(uname, order),
                      auth=CustomAuth(uname, 'key1'))

    assert r.status_code == 406
예제 #13
0
def test_cancel():
    """ Test cancel """
    uname = str(uuid.uuid4())[:8]
    new_user = {"name": "some_name", "username": uname, "secret": "key1"}
    requests.post(ENDPOINTS['signup'], json=new_user)

    r = requests.post(ENDPOINTS['draft'].format(uname),
                      json=new_user,
                      auth=CustomAuth(uname, 'key1'))
    order = json.loads(r.content)['order_id']
    address = {"address": "Моховая, 2"}

    requests.post(ENDPOINTS['commit'].format(uname, order),
                  json=address,
                  auth=CustomAuth(uname, 'key1'))

    r = requests.post(ENDPOINTS['cancel'].format(uname, order),
                      auth=CustomAuth(uname, 'key1'))

    assert r.status_code == 200
예제 #14
0
def test_cancel_when_status_found():
    """ Test that after CHANGE_STATUS_TIME status is 'found', and after another
        CHANGE_STATUS_TIME the status is 'complete """
    uname = str(uuid.uuid4())[:8]
    order = create_and_commit_order(uname, "key1", "Моховая, 2")

    time.sleep(CHANGE_STATUS_TIME + UPDATE_ORDERS_INTERVAL)  #wait

    r = requests.get(ENDPOINTS['list'].format(uname, 'all'),
                     auth=CustomAuth(uname, 'key1'))

    r = requests.post(ENDPOINTS['cancel'].format(uname, order),
                      auth=CustomAuth(uname, 'key1'))

    assert r.status_code == 406

    time.sleep(CHANGE_STATUS_TIME + UPDATE_ORDERS_INTERVAL)  #wait

    r = requests.post(ENDPOINTS['cancel'].format(uname, order),
                      auth=CustomAuth(uname, 'key1'))
    assert r.status_code == 406
예제 #15
0
def test_show_only_active():
    """ Test status after 'found' and 'complete' """
    uname = str(uuid.uuid4())[:8]
    order = create_and_commit_order(uname, "key1", "Моховая, 2")

    time.sleep(2 * CHANGE_STATUS_TIME +
               2 * UPDATE_ORDERS_INTERVAL)  #wait for 'found' and 'complete'

    #now the first order is inactive

    order2 = create_and_commit_order(uname, "key1", "Моховая, 2")

    r = requests.get(ENDPOINTS['list'].format(uname, 'active'),
                     auth=CustomAuth(uname, 'key1'))
    json1 = json.loads(r.content)
    assert len(
        json1["orders"]) == 1 and json1['orders'][0]['status'] == 'pending'
예제 #16
0
def test_status_complete_for_n_users(n):
    """ Test that orders compete for multiple users simultaneously """

    name_list = []
    for i in xrange(n):
        uname = str(uuid.uuid4())[:8]
        create_and_commit_order(uname, "key1", "someaddress")
        name_list.append(uname)

    time.sleep(2 * CHANGE_STATUS_TIME + 2 * UPDATE_ORDERS_INTERVAL +
               3)  #wait for 'found' and 'complete'

    status_complete = []
    for i in xrange(n):
        r = requests.get(ENDPOINTS['list'].format(name_list[i], 'all'),
                         auth=CustomAuth(uname, 'key1'))
        #print r.content
        status_complete.append(json.loads(r.content)['orders'][0]['status'])

    assert all_same(status_complete, 'complete', 'expired')