Example #1
0
    def test_add_task_generates_secuential_fulid_for_tasks(self):
        existent_task = self.factory.create(state='open')
        existent_task_fulid_id_number = fulid()._decode_id(existent_task.id)

        first_title = 'first task title'
        self.manager.add(title=first_title)

        first_generated_task = self.session.query(Task).filter_by(
            title=first_title
        ).first()
        first_generated_task_fulid_id_number = \
            fulid()._decode_id(first_generated_task.id)

        second_title = 'second task title'
        self.manager.add(title=second_title)

        second_generated_task = self.session.query(Task).filter_by(
            title=second_title
        ).first()
        second_generated_task_fulid_id_number = \
            fulid()._decode_id(second_generated_task.id)

        assert first_generated_task_fulid_id_number - \
            existent_task_fulid_id_number == 1
        assert second_generated_task_fulid_id_number - \
            first_generated_task_fulid_id_number == 1
Example #2
0
class TaskFactory(factory.alchemy.SQLAlchemyModelFactory):
    id = factory.LazyFunction(lambda: fulid().new().str)
    title = factory.Faker('sentence')
    state = factory.Faker(
        'word',
        ext_word_list=config.get('task.allowed_states')
    )
    agile = factory.Faker('word', ext_word_list=['backlog', 'todo', None])
    type = 'task'
    priority = factory.Faker('random_number')

    # Let half the tasks have a due date

    @factory.lazy_attribute
    def due(self):
        if random.random() > 0.5:
            return factory.Faker('date_time').generate({})

    @factory.lazy_attribute
    def closed(self):
        if self.state == 'completed' or self.state == 'deleted':
            return factory.Faker('date_time').generate({})

    class Meta:
        model = models.Task
        sqlalchemy_session_persistence = 'commit'
Example #3
0
 def __init__(self, session):
     super().__init__(session, Task)
     self.date = DateManager()
     self.fulid = fulid(
         config.get('fulid.characters'),
         config.get('fulid.forbidden_characters'),
     )
     self.recurrence = TableManager(session, RecurrentTask)
Example #4
0
 def __init__(self, session):
     super().__init__(session, Task)
     self.config = ConfigManager(self.session)
     self.date = DateManager()
     self.fulid = fulid(
         self.config.get('fulid.characters'),
         self.config.get('fulid.forbidden_characters'),
     )
Example #5
0
    def test_add_task(self):
        title = self.fake.sentence()

        self.manager.add(title=title)

        generated_task = self.session.query(Task).one()
        assert isinstance(fulid().from_str(generated_task.id), fulid)
        assert generated_task.title == title
        assert generated_task.state == 'open'
        assert generated_task.project is None
        self.log_debug.assert_called_with(
            'Added task {}: {}'.format(
                generated_task.id,
                generated_task.title,
            )
        )
Example #6
0
    def test_complete_task_by_sulid(self):
        closed = self.fake.date_time()
        self.datetime.datetime.now.return_value = closed
        task = TaskFactory.create(state='open')

        assert self.session.query(Task).one()

        self.manager.complete(
            fulid().fulid_to_sulid(task.id, [task.id]),
        )

        modified_task = self.session.query(Task).get(task.id)
        assert modified_task.closed == closed
        assert modified_task.title == task.title
        assert modified_task.state == 'completed'
        self.log_debug.assert_called_with(
            'Completed task {}: {}'.format(
                modified_task.id,
                modified_task.title,
            )
        )
Example #7
0
    def print(self, tasks, columns, labels):
        """
        Method to print the report

        Arguments:
            tasks (Query): SQLAlchemy query with the tasks to print.
            columns (list): Element attributes to print
            labels (list): Headers of the attributes
        """
        report_data = []

        columns, labels = self._remove_null_columns(tasks, columns, labels)

        # Transform the fulids into sulids
        sulids = fulid(
            config.get('fulid.characters'),
            config.get('fulid.forbidden_characters'),
        ).sulids([task.id for task in tasks.all()])

        for task in sorted(tasks.all(), key=lambda k: k.id, reverse=True):
            task_report = []
            for attribute in columns:
                if attribute == 'id':
                    task.sulid = sulids[task.id]
                    task_report.append(task.sulid)
                elif attribute == 'tags':
                    if len(task.tags) != 0:
                        task_report.append(', '.join(
                            [tag.id for tag in task.tags]))
                    else:
                        task_report.append('')
                elif attribute == 'due':
                    task_report.append(self._date2str(task.due))
                else:
                    try:
                        task_report.append(task.__getattribute__(attribute))
                    except AttributeError:
                        task_report.append('')
            report_data.append(task_report)
        print(tabulate(report_data, headers=labels, tablefmt='simple'))
Example #8
0
 def test_fulid_does_not_accept_invalid_terminal_characters(self):
     with pytest.raises(ValueError):
         fulid(
             'ilou|&:;()<>~*@?!$#[]{}\\/\'"`',
             pydo_default_config['fulid.forbidden_characters']['default'],
         )
Example #9
0
 def test_fulid_can_set_forbidden_charset_attribute(self):
     self.fulid = fulid(forbidden_charset='/')
     assert self.fulid.forbidden_charset == ['/']
Example #10
0
 def test_fulid_can_set_charset_attribute(self):
     self.fulid = fulid(character_set='ab')
     assert self.fulid.charset == ['a', 'b']
Example #11
0
 def test_fulid_can_set_fulid_attribute(self):
     self.fulid = fulid(fulid='full_fulid_string')
     assert self.fulid.str == 'full_fulid_string'
Example #12
0
    def setup(self, session):
        self.session = session
        self.fulid = fulid()

        yield 'setup'
Example #13
0
 def test_fulid_does_not_accept_invalid_terminal_characters(self):
     with pytest.raises(ValueError):
         fulid(
             'ilou|&:;()<>~*@?!$#[]{}\\/\'"`',
             config.get('fulid.forbidden_characters'),
         )