def get_ticket_relations(self, ticket): grouped_relations = {} relsys = RelationsSystem(self.env) reltypes = relsys.get_relation_types() trs = TicketRelationsSpecifics(self.env) for r in relsys.get_relations(ticket): r['desthref'] = get_resource_url(self.env, r['destination'], self.env.href) r['destticket'] = trs._create_ticket_by_full_id(r['destination']) grouped_relations.setdefault(reltypes[r['type']], []).append(r) return grouped_relations
def get_ticket_relations(self, ticket): grouped_relations = {} relsys = RelationsSystem(self.env) reltypes = relsys.get_relation_types() trs = TicketRelationsSpecifics(self.env) for r in relsys.get_relations(ticket): r['desthref'] = get_resource_url(self.env, r['destination'], self.env.href) r['destticket'] = trs._create_ticket_by_full_id(r['destination']) grouped_relations.setdefault(reltypes[r['type']], []).append(r) return grouped_relations
class BaseRelationsTestCase(MultiproductTestCase): def setUp(self, enabled=()): env = EnvironmentStub( default_data=True, enable=(['trac.*', 'multiproduct.*', 'bhrelations.*'] + list(enabled)) ) env.config.set('bhrelations', 'global_validators', 'NoSelfReferenceValidator,ExclusiveValidator,' 'BlockerValidator') env.config.set('bhrelations', 'duplicate_relation', 'duplicateof') config_name = RELATIONS_CONFIG_NAME env.config.set(config_name, 'dependency', ','.join([DEPENDS_ON, DEPENDENCY_OF])) env.config.set(config_name, 'dependency.validators', 'NoCycles,SingleProduct') env.config.set(config_name, 'dependson.blocks', 'true') env.config.set(config_name, 'parent_children', ','.join([PARENT, CHILD])) env.config.set(config_name, 'parent_children.validators', 'OneToMany,SingleProduct,NoCycles') env.config.set(config_name, 'children.label', 'Overridden') env.config.set(config_name, 'parent.copy_fields', 'summary, foo') env.config.set(config_name, 'parent.exclusive', 'true') env.config.set(config_name, 'multiproduct_relation', ','.join([MULTIPRODUCT_REL, MULTIPRODUCT_BACKREL])) env.config.set(config_name, 'oneway', REFERS_TO) env.config.set(config_name, 'duplicate', ','.join([DUPLICATE_OF, DUPLICATED_BY])) env.config.set(config_name, 'duplicate.validators', 'ReferencesOlder') env.config.set(config_name, 'duplicateof.label', 'is a duplicate of') env.config.set(config_name, 'duplicatedby.label', 'duplicates') env.config.set(config_name, 'blocker', ','.join([BLOCKED_BY, BLOCKS])) env.config.set(config_name, 'blockedby.blocks', 'true') self.global_env = env self._upgrade_mp(self.global_env) self._setup_test_log(self.global_env) self._load_product_from_data(self.global_env, self.default_product) self.env = ProductEnvironment(self.global_env, self.default_product) self.req = Mock(href=self.env.href, authname='anonymous', tz=utc, args=dict(action='dummy'), locale=locale_en, lc_time=locale_en, chrome={'warnings': []}) self.req.perm = MockPerm() self.relations_system = RelationsSystem(self.env) self._upgrade_env() def tearDown(self): self.global_env.reset_db() def _upgrade_env(self): environment_setup = EnvironmentSetup(self.env) try: environment_setup.upgrade_environment(self.env.db_transaction) except self.env.db_exc.OperationalError: # table remains but database version is deleted pass @classmethod def _insert_ticket(cls, env, summary, **kw): """Helper for inserting a ticket into the database""" ticket = Ticket(env) ticket["summary"] = summary for k, v in kw.items(): ticket[k] = v return ticket.insert() def _insert_and_load_ticket(self, summary, **kw): return Ticket(self.env, self._insert_ticket(self.env, summary, **kw)) def _insert_and_load_ticket_with_env(self, env, summary, **kw): return Ticket(env, self._insert_ticket(env, summary, **kw)) def add_relation(self, source, reltype, destination, *args, **kwargs): return self.relations_system.add(source, destination, reltype, *args, **kwargs) def get_relations(self, ticket): return self.relations_system.get_relations(ticket) def delete_relation(self, relation): self.relations_system.delete(relation["relation_id"])
class BaseRelationsTestCase(MultiproductTestCase): def setUp(self, enabled=()): env = EnvironmentStub( default_data=True, enable=(['trac.*', 'multiproduct.*', 'bhrelations.*'] + list(enabled)) ) env.config.set('bhrelations', 'global_validators', 'NoSelfReferenceValidator,ExclusiveValidator,' 'BlockerValidator') env.config.set('bhrelations', 'duplicate_relation', 'duplicateof') config_name = RELATIONS_CONFIG_NAME env.config.set(config_name, 'dependency', ','.join([DEPENDS_ON, DEPENDENCY_OF])) env.config.set(config_name, 'dependency.validators', 'NoCycles,SingleProduct') env.config.set(config_name, 'dependson.blocks', 'true') env.config.set(config_name, 'parent_children', ','.join([PARENT, CHILD])) env.config.set(config_name, 'parent_children.validators', 'OneToMany,SingleProduct,NoCycles') env.config.set(config_name, 'children.label', 'Overridden') env.config.set(config_name, 'parent.copy_fields', 'summary, foo') env.config.set(config_name, 'parent.exclusive', 'true') env.config.set(config_name, 'multiproduct_relation', ','.join([MULTIPRODUCT_REL, MULTIPRODUCT_BACKREL])) env.config.set(config_name, 'oneway', REFERS_TO) env.config.set(config_name, 'duplicate', ','.join([DUPLICATE_OF, DUPLICATED_BY])) env.config.set(config_name, 'duplicate.validators', 'ReferencesOlder') env.config.set(config_name, 'duplicateof.label', 'is a duplicate of') env.config.set(config_name, 'duplicatedby.label', 'duplicates') env.config.set(config_name, 'blocker', ','.join([BLOCKED_BY, BLOCKS])) env.config.set(config_name, 'blockedby.blocks', 'true') self.global_env = env self._upgrade_mp(self.global_env) self._setup_test_log(self.global_env) self._load_product_from_data(self.global_env, self.default_product) self.env = ProductEnvironment(self.global_env, self.default_product) self.req = Mock(href=self.env.href, authname='anonymous', tz=utc, args=dict(action='dummy'), locale=locale_en, lc_time=locale_en, chrome={'warnings': []}) self.req.perm = MockPerm() self.relations_system = RelationsSystem(self.env) self._upgrade_env() def tearDown(self): self.global_env.reset_db() def _upgrade_env(self): environment_setup = EnvironmentSetup(self.env) try: environment_setup.upgrade_environment(self.env.db_transaction) except self.env.db_exc.OperationalError: # table remains but database version is deleted pass @classmethod def _insert_ticket(cls, env, summary, **kw): """Helper for inserting a ticket into the database""" ticket = Ticket(env) ticket["summary"] = summary for k, v in kw.items(): ticket[k] = v return ticket.insert() def _insert_and_load_ticket(self, summary, **kw): return Ticket(self.env, self._insert_ticket(self.env, summary, **kw)) def _insert_and_load_ticket_with_env(self, env, summary, **kw): return Ticket(env, self._insert_ticket(env, summary, **kw)) def add_relation(self, source, reltype, destination, *args, **kwargs): return self.relations_system.add(source, destination, reltype, *args, **kwargs) def get_relations(self, ticket): return self.relations_system.get_relations(ticket) def delete_relation(self, relation): self.relations_system.delete(relation["relation_id"])