Example #1
0
 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
Example #2
0
 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
Example #3
0
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"])
Example #4
0
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"])