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
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'
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)
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'), )
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, ) )
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, ) )
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'))
def test_fulid_does_not_accept_invalid_terminal_characters(self): with pytest.raises(ValueError): fulid( 'ilou|&:;()<>~*@?!$#[]{}\\/\'"`', pydo_default_config['fulid.forbidden_characters']['default'], )
def test_fulid_can_set_forbidden_charset_attribute(self): self.fulid = fulid(forbidden_charset='/') assert self.fulid.forbidden_charset == ['/']
def test_fulid_can_set_charset_attribute(self): self.fulid = fulid(character_set='ab') assert self.fulid.charset == ['a', 'b']
def test_fulid_can_set_fulid_attribute(self): self.fulid = fulid(fulid='full_fulid_string') assert self.fulid.str == 'full_fulid_string'
def setup(self, session): self.session = session self.fulid = fulid() yield 'setup'
def test_fulid_does_not_accept_invalid_terminal_characters(self): with pytest.raises(ValueError): fulid( 'ilou|&:;()<>~*@?!$#[]{}\\/\'"`', config.get('fulid.forbidden_characters'), )