Ejemplo n.º 1
0
def test_calculate_calls_divide_function_calculation_operation_is_divide(
        mocker, calculation):
    calculation['operation'] = 'divide'
    mongo.db.calculations.insert_one(calculation)

    mocked_divide = mocker.patch('tasks.arithmetic.divide', return_value=None)
    mocker.patch.dict(_OPERATION_FUNCTION, {'divide': mocked_divide})

    calculate(str(calculation['_id']))

    mocked_divide.assert_called_once_with(*calculation['arguments'])
Ejemplo n.º 2
0
def test_calculate_calls_multiply_function_calculation_operation_is_multiply(
        mocker, calculation):
    calculation['operation'] = 'multiply'
    mongo.db.calculations.insert_one(calculation)

    mocked_multiply = mocker.patch('tasks.arithmetic.multiply',
                                   return_value=None)
    mocker.patch.dict(_OPERATION_FUNCTION, {'multiply': mocked_multiply})

    calculate(str(calculation['_id']))

    mocked_multiply.assert_called_once_with(*calculation['arguments'])
Ejemplo n.º 3
0
def test_calculate_calls_subtract_function_calculation_operation_is_subtract(
        mocker, calculation):
    calculation['operation'] = 'subtract'
    mongo.db.calculations.insert_one(calculation)

    mocked_subtract = mocker.patch('tasks.arithmetic.subtract',
                                   return_value=None)
    mocker.patch.dict(_OPERATION_FUNCTION, {'subtract': mocked_subtract})

    calculate(str(calculation['_id']))

    mocked_subtract.assert_called_once_with(*calculation['arguments'])
Ejemplo n.º 4
0
def test_calculate_persists_operation_result_and_done_status(calculation):
    mongo.db.calculations.insert_one(calculation)

    calculate(str(calculation['_id']))

    persisted_calculation = mongo.db.calculations.find_one(
        {'_id': calculation['_id']})

    expected_result = 3
    assert persisted_calculation['result'] == expected_result

    expected_status = CALCULATION_STATUS_DONE
    assert persisted_calculation['status'] == expected_status
Ejemplo n.º 5
0
def test_calculate_persists_arithmetic_error_description_in_calculation_status(
        calculation):
    calculation['operation'] = 'divide'
    calculation['arguments'] = [1, 0]

    mongo.db.calculations.insert_one(calculation)

    calculate(str(calculation['_id']))

    persisted_calculation = mongo.db.calculations.find_one(
        {'_id': calculation['_id']})

    expected_status = 'division by zero'
    assert persisted_calculation['status'] == expected_status
Ejemplo n.º 6
0
def test_calculate_raises_exception_when_persistence_fails(
        mocker, calculation):
    mongo.db.calculations.insert_one(calculation)

    class FakeUpdateResult:
        acknowledged = False

    fake_update_result = FakeUpdateResult()

    mocker.patch('pymongo.collection.Collection.update_one',
                 return_value=fake_update_result)

    with raises(CalculationUpdateError):
        calculate(str(calculation['_id']))
Ejemplo n.º 7
0
def test_calculate_persists_error_status_when_exception_is_raised(
        mocker, calculation):
    calculation['operation'] = 'sum'
    mongo.db.calculations.insert_one(calculation)

    mocked_sum = mocker.patch('tasks.arithmetic.sum_', side_effect=Exception)
    mocker.patch.dict(_OPERATION_FUNCTION, {'sum': mocked_sum})

    calculate(str(calculation['_id']))

    persisted_calculation = mongo.db.calculations.find_one(
        {'_id': calculation['_id']})

    expected_status = 'error'
    assert persisted_calculation['status'] == expected_status
Ejemplo n.º 8
0
def test_calculate_raises_exception_when_calculation_is_not_found():
    with raises(CalculationNotFound):
        random_uuid = str(ObjectId())
        calculate(random_uuid)