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})
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})
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})
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})
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})
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})
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})
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})
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
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})
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})
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
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'})
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 == []
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