Example #1
0
def test_rules_mapper_get_rule_projection(api_db):
    # Add rules to db
    rule_id = api_db.project_rules.insert_one({
        'gear_id': 'gear_id',
        'name': 'rule_name',
        'any': [],
        'all': [],
        'not': [],
        'config': {
            'key': 'value'
        },
        'project_id': 'site'
    }).inserted_id

    rules_mapper = mappers.RulesMapper(db=api_db)

    # Find a single rule without a projection
    rule = rules_mapper.get(rule_id)
    assert rule.config['key'] == 'value'

    # Find a single rule by id with a projection
    rule_projected = rules_mapper.get(rule_id, projection={'config': 0})
    assert rule_projected.config is None

    # Clean Up
    api_db.project_rules.delete_one({'_id': rule_id})
Example #2
0
def test_rules_mapper_get_rule(api_db):
    # Add rules to db
    rule_1_id = api_db.project_rules.insert_one({
        'gear_id': 'gear_id',
        'name': 'rule_name',
        'any': [],
        'all': [],
        'not': [],
        'project_id': 'site'
    }).inserted_id
    rule_2_id = api_db.project_rules.insert_one({
        'gear_id': 'gear_id',
        'name': 'rule_name',
        'any': [],
        'all': [],
        'not': [],
        'project_id': 'project_id'
    }).inserted_id

    rules_mapper = mappers.RulesMapper(db=api_db)

    # Find a single rule by id
    rule_1 = rules_mapper.get(rule_1_id)
    assert isinstance(rule_1, models.Rule)
    assert rule_1.rule_id == rule_1_id

    # Clean Up
    api_db.project_rules.delete_one({'_id': rule_1_id})
    api_db.project_rules.delete_one({'_id': rule_2_id})
Example #3
0
def test_rules_mapper_duplicate_insert_rule(api_db):
    rules_mapper = mappers.RulesMapper(db=api_db)
    rule = models.Rule('gear_id', 'insert_rule', [], [], [])
    rules_mapper.insert(rule)

    # Try to insert it again
    with pytest.raises(pymongo.errors.DuplicateKeyError):
        rules_mapper.insert(rule)

    # Clean Up
    api_db.project_rules.delete_one({'_id': rule.rule_id})
Example #4
0
def test_rules_mapper_insert_preset_id_rule(api_db):
    rules_mapper = mappers.RulesMapper(db=api_db)
    rule = models.Rule('gear_id', 'insert_rule', [], [], [])

    # Insert a rule with an id already set
    rule.rule_id = 'preset_id_rule_id'
    rule_id = rules_mapper.insert(rule)

    assert rule_id == 'preset_id_rule_id'
    assert rule_id == rule.rule_id

    # Clean Up
    api_db.project_rules.delete_one({'_id': rule_id})
Example #5
0
def test_rules_mapper_insert_rule(api_db):
    # Insert Rule
    rules_mapper = mappers.RulesMapper(db=api_db)
    rule = models.Rule('gear_id', 'insert_rule', [], [], [])

    rule_id = rules_mapper.insert(rule)
    assert rule.rule_id == rule_id

    rule_mongo_document = api_db.project_rules.find_one({'_id': rule_id})
    assert rule_mongo_document == rule.to_dict()

    # Clean Up
    api_db.project_rules.delete_one({'_id': rule_id})
Example #6
0
def test_rules_mapper_insert_copy_rule(api_db):
    rules_mapper = mappers.RulesMapper(db=api_db)
    rule = models.Rule('gear_id', 'insert_rule', [], [], [])
    rules_mapper.insert(rule)

    # Insert a rule copy
    copy_rule_id = rules_mapper.insert(rule.copy())
    assert copy_rule_id != rule.rule_id

    copy_rule_mongo_document = api_db.project_rules.find_one(
        {'_id': copy_rule_id})
    assert copy_rule_mongo_document

    # Clean Up
    api_db.project_rules.delete_one({'_id': rule.rule_id})
    api_db.project_rules.delete_one({'_id': copy_rule_id})
Example #7
0
def test_rules_mapper_find_all(api_db):
    # Add rules to db
    rule_1_id = api_db.project_rules.insert_one({
        'gear_id': 'gear_id',
        'name': 'rule_name',
        'any': [],
        'all': [],
        'not': [],
        'project_id': 'site'
    }).inserted_id
    rule_2_id = api_db.project_rules.insert_one({
        'gear_id': 'gear_id',
        'name': 'rule_name',
        'any': [],
        'all': [],
        'not': [],
        'project_id': 'project_id'
    }).inserted_id
    rule_3_id = api_db.project_rules.insert_one({
        'gear_id': 'gear_id',
        'name': 'rule_name',
        'any': [],
        'all': [],
        'not': [],
        'project_id': 'project_id'
    }).inserted_id

    rules_mapper = mappers.RulesMapper(db=api_db)

    # Find all rules
    rules = rules_mapper.find_all()
    rules = list(rules)

    assert len(rules) == 3
    assert isinstance(rules[0], models.Rule)

    rule_ids = [rule.rule_id for rule in rules]
    assert rule_1_id in rule_ids
    assert rule_2_id in rule_ids
    assert rule_3_id in rule_ids

    # Clean Up
    for rule_id in rule_ids:
        api_db.project_rules.delete_one({'_id': rule_id})
Example #8
0
def test_rules_mapper_find_all_with_query(api_db):
    # Add rules to db
    rule_1_id = api_db.project_rules.insert_one({
        'gear_id': 'gear_id',
        'name': 'rule_name',
        'any': [],
        'all': [],
        'not': [],
        'project_id': 'site'
    }).inserted_id
    rule_2_id = api_db.project_rules.insert_one({
        'gear_id': 'gear_id',
        'name': 'rule_name',
        'any': [],
        'all': [],
        'not': [],
        'project_id': 'project_id'
    }).inserted_id
    rule_3_id = api_db.project_rules.insert_one({
        'gear_id': 'gear_id',
        'name': 'rule_name',
        'any': [],
        'all': [],
        'not': [],
        'project_id': 'project_id'
    }).inserted_id

    rules_mapper = mappers.RulesMapper(db=api_db)

    # Find all rules for project project_id
    rules = rules_mapper.find_all(project_id='project_id')
    rules = list(rules)

    assert len(rules) == 2
    assert isinstance(rules[0], models.Rule)

    for rule in rules:
        assert rule.project_id == 'project_id'

    # Clean Up
    api_db.project_rules.delete_one({'_id': rule_1_id})
    api_db.project_rules.delete_one({'_id': rule_2_id})
    api_db.project_rules.delete_one({'_id': rule_3_id})
Example #9
0
def test_rules_mapper_delete_rule(api_db):
    # Add rules to db
    rule_doc = {
        'gear_id': 'gear_id',
        'name': 'rule_name',
        'any': [],
        'all': [],
        'not': [],
        'config': {
            'key': 'value'
        },
        'project_id': 'site'
    }
    rule_id = api_db.project_rules.insert_one(rule_doc).inserted_id
    rules_mapper = mappers.RulesMapper(db=api_db)

    deleted_count = rules_mapper.delete(rule_id)
    assert deleted_count == 1

    rule = api_db.project_rules.find_one({'_id': rule_id})
    assert rule is None
Example #10
0
def test_rules_mapper_patch_rule(api_db):
    # Add rules to db
    rule_doc = {
        'gear_id': 'gear_id',
        'name': 'rule_name',
        'any': [],
        'all': [],
        'not': [],
        'config': {
            'key': 'value'
        },
        'project_id': 'site'
    }
    rule_id = api_db.project_rules.insert_one(rule_doc).inserted_id
    rules_mapper = mappers.RulesMapper(db=api_db)

    # Patch rule name
    rules_mapper.patch(rule_id, {'name': 'new_rule_name'})

    patched_rule_doc = api_db.project_rules.find_one({'_id': rule_id})
    assert patched_rule_doc['name'] == 'new_rule_name'

    # Clean Up
    api_db.project_rules.delete_one({'_id': rule_id})
Example #11
0
def test_rules_mapper_get_rule(api_db):
    # Add rules to db
    rule_1_id = api_db.project_rules.insert_one({
        'gear_id': 'gear_id',
        'name': 'rule_name',
        'any': [],
        'not': None,
        'project_id': 'site'
    }).inserted_id

    rules_mapper = mappers.RulesMapper(db=api_db)

    # Find a single rule by id
    rule_1 = rules_mapper.get(rule_1_id)
    assert isinstance(rule_1, models.Rule)
    assert rule_1.rule_id == rule_1_id

    # Make sure all rule eval values are lists
    assert isinstance(rule_1.not_, list)
    assert isinstance(rule_1.all_, list)
    assert isinstance(rule_1.any_, list)

    # Clean Up
    api_db.project_rules.delete_one({'_id': rule_1_id})
Example #12
0
def test_rules_mapper_delete_rule_that_does_not_exist(api_db):
    rules_mapper = mappers.RulesMapper(db=api_db)

    deleted_count = rules_mapper.delete(bson.ObjectId())
    assert deleted_count == 0
Example #13
0
def test_rules_mapper_patch_rule_that_does_not_exist(api_db):
    rules_mapper = mappers.RulesMapper(db=api_db)

    with pytest.raises(errors.APINotFoundException):
        rules_mapper.patch(bson.ObjectId(), {'name': 'new_rule_name'})
Example #14
0
def test_rules_mapper_find_all_when_no_rules_exist(api_db):
    rules_mapper = mappers.RulesMapper(db=api_db)
    rules = list(rules_mapper.find_all())
    assert rules == []
Example #15
0
def test_rules_mapper_get_rule_that_does_not_exist(api_db):
    rules_mapper = mappers.RulesMapper(db=api_db)

    # Look for rule that doesn't exist
    rule = rules_mapper.get(bson.ObjectId())
    assert rule is None