def test_trello_get_incomplete_stories_not_moved(mocker): sprint_name = 'Done (week 1)' lists = [{ 'name': 'TM Q3 sprints', 'cards': [{ 'name': sprint_name, 'description': '2019-01-07 - 2019-01-13' }] }, { 'name': sprint_name, 'cards': [] }, { 'name': 'Sprint 1 - TO DO', 'cards': [{ 'name': 'card incomplete', 'movements': [], 'created_date': '2019-01-09T12:00:00' }] }] mock_trello_client(mocker, lists=lists) t = Trello() metrics = t.get_metrics() assert len(metrics) == 1 assert metrics[0].num_completed == 0 assert metrics[0].num_incomplete == 1
def test_trello_ignores_get_incomplete_story_count_out_of_sprint_dates_in_blocked( mocker): sprint_names = ['Done (week 1)', 'Done (week 2)'] lists = [ { 'name': 'TM Q3 sprints', 'cards': [ { 'name': sprint_names[0], 'description': '2018-12-05 - 2018-12-11' }, { 'name': sprint_names[1], 'description': '2018-12-12 - 2018-12-18' }, ] }, { 'name': 'Blocked', 'cards': [{ 'name': 'card in blocked sprint 2', 'movements': [ { 'datetime': '2018-12-12T11:00:00', 'source': 'Backlog', 'destination': 'In Progress' }, { 'datetime': '2018-12-14T12:00:00', 'source': 'In Progress', 'destination': 'Blocked' }, ] }] }, { 'name': sprint_names[0], 'cards': [] }, { 'name': sprint_names[1], 'cards': [] }, ] mock_trello_client(mocker, lists=lists) t = Trello() metrics = t.get_metrics() assert len(metrics) == 2 assert metrics[0].num_completed == 0 assert metrics[0].num_incomplete == 0 assert metrics[1].num_completed == 0 assert metrics[1].num_incomplete == 1
def test_multi_sign_off_entries(mocker): sprint_name = 'Done (week 1)' lists = [{ 'name': 'TM Q3 sprints', 'cards': [{ 'name': sprint_name, 'description': '2019-01-07 - 2019-01-13' }] }, { 'name': sprint_name, 'cards': [{ 'name': 'card done', 'movements': [{ 'datetime': '2019-01-08T10:00:00', 'source': 'Backlog', 'destination': 'Sprint 1 - TO DO' }, { 'datetime': '2019-01-08T11:00:00', 'source': 'Sprint 1 - TO DO', 'destination': 'In Progress' }, { 'datetime': '2019-01-08T12:00:00', 'source': 'In Progress', 'destination': 'Sign off' }, { 'datetime': '2019-01-08T13:00:00', 'source': 'Sign off', 'destination': 'In Progress' }, { 'datetime': '2019-01-08T14:00:00', 'source': 'In Progress', 'destination': 'Sign off' }, { 'datetime': '2019-01-08T15:00:00', 'source': 'Sign off', 'destination': sprint_name }] }] }] mock_trello_client(mocker, lists=lists) t = Trello() metrics = t.get_metrics() assert len(metrics) == 1 assert metrics[0].num_completed == 1 assert metrics[0].process_cycle_efficiency == 1 assert metrics[0].avg_cycle_time == 7200
def test_trello_get_incomplete_story_count_over_2_sprints(mocker): sprint_names = ['Done (week 1)', 'Done (week 2)'] lists = [{ 'name': 'TM Q3 sprints', 'cards': [{ 'name': sprint_names[0], 'description': '2019-01-07 - 2019-01-13' }, { 'name': sprint_names[1], 'description': '2019-01-14 - 2019-01-20' }] }, { 'name': sprint_names[0], 'cards': [] }, { 'name': sprint_names[1], 'cards': [] }, { 'name': 'In Progress', 'cards': [{ 'name': 'card incomplete', 'movements': [ { 'datetime': '2019-01-07T12:00:00', 'source': 'Backlog', 'destination': 'Sprint 1 - TO DO' }, { 'datetime': '2019-01-07T12:00:00', 'source': 'Sprint 1 - TO DO', 'destination': 'In Progress' }, ] }] }] mock_trello_client(mocker, lists=lists) t = Trello() metrics = t.get_metrics() assert len(metrics) == 2 assert metrics[0].num_completed == 0 assert metrics[0].num_incomplete == 1 assert metrics[1].num_completed == 0 assert metrics[1].num_incomplete == 1
def get_metrics(source_type, _id, year, quarter): if source_type == 'jira': j = Jira(project_id=_id) return j.get_metrics(year, quarter) elif source_type == 'pivotal': p = Pivotal(project_id=_id) return p.get_metrics(year, quarter) elif source_type == 'trello': t = Trello(board_id=_id) return t.get_metrics(year, quarter) elif source_type == 'github': gh = Github(team_id=_id) return gh.get_metrics(year, quarter) else: raise NotFound(f"Source {source_type} not found")
def test_trello_gets_no_incomplete_stories_not_moved_in_future(mocker): sprint_names = ['Done (week 1)', 'Done (week 2)'] lists = [{ 'name': 'TM Q3 sprints', 'cards': [{ 'name': sprint_names[0], 'description': '2019-01-07 - 2019-01-13' }, { 'name': sprint_names[1], 'description': '2019-01-14 - 2019-01-20' }] }, { 'name': sprint_names[0], 'cards': [] }, { 'name': sprint_names[1], 'cards': [] }, { 'name': 'Sprint 2 - TO DO', 'cards': [{ 'name': 'card incomplete', 'movements': [], 'created_date': '2019-01-15T12:00:00' }] }] mock_trello_client(mocker, lists=lists) t = Trello() metrics = t.get_metrics() assert len(metrics) == 2 assert metrics[0].num_completed == 0 assert metrics[0].num_incomplete == 0 assert metrics[1].num_completed == 0 assert metrics[1].num_incomplete == 1
def test_trello_get_incomplete_stories(mocker, list_name): sprint_name = 'Done (week 1)' lists = [{ 'name': 'TM Q3 sprints', 'cards': [{ 'name': sprint_name, 'description': '2019-01-07 - 2019-01-13' }] }, { 'name': sprint_name, 'cards': [] }, { 'name': list_name, 'cards': [{ 'name': 'card completed', 'movements': [{ 'datetime': '2019-01-07T12:00:00', 'source': 'Backlog', 'destination': 'Sprint 1 - TO DO' }, { 'datetime': '2019-01-07T12:00:00', 'source': 'Sprint 1 - TO DO', 'destination': list_name }] }] }] mock_trello_client(mocker, lists=lists) t = Trello() metrics = t.get_metrics() assert len(metrics) == 1 assert metrics[0].num_completed == 0 assert metrics[0].num_incomplete == 1
def test_trello_get_incomplete_story_count_over_3_sprints(mocker): sprint_names = ['Done (week 1)', 'Done (week 2)', 'Done (week 3)'] lists = [ { 'name': 'TM Q3 sprints', 'cards': [ { 'name': sprint_names[0], 'description': '2019-01-02 - 2019-01-08' }, { 'name': sprint_names[1], 'description': '2019-01-09 - 2019-01-15' }, { 'name': sprint_names[2], 'description': '2019-01-16 - 2019-01-22' }, ] }, { 'name': sprint_names[0], 'cards': [], 'created_date': '2019-01-04T12:00:00' }, { 'name': sprint_names[1], 'cards': [] }, { 'name': sprint_names[2], 'cards': [{ 'name': 'card incomplete in sprint 1', 'movements': [ { 'datetime': '2019-01-15T12:00:00', 'source': 'Backlog', 'destination': 'Sprint 1 - TO DO' }, { 'datetime': '2019-01-16T12:00:00', 'source': 'Sprint 1 - TO DO', 'destination': 'In Progress' }, { 'datetime': '2019-01-17T12:00:00', 'source': 'In Progress', 'destination': 'Sign off' }, { 'datetime': '2019-01-18T12:00:00', 'source': 'Sign off', 'destination': sprint_names[1] }, ] }] }, ] mock_trello_client(mocker, lists=lists) t = Trello() metrics = t.get_metrics() assert len(metrics) == 3 assert metrics[0].num_completed == 0 assert metrics[0].num_incomplete == 0 assert metrics[1].num_completed == 0 assert metrics[1].num_incomplete == 1 assert metrics[2].num_completed == 1 assert metrics[2].num_incomplete == 0
def test_trello_ignores_get_incomplete_story_count_out_of_sprint_dates(mocker): sprint_names = ['Done (week 1)', 'Done (week 2)', 'Done (week 3)'] lists = [ { 'name': 'TM Q3 sprints', 'cards': [ { 'name': sprint_names[0], 'description': '2018-12-05 - 2018-12-11' }, { 'name': sprint_names[1], 'description': '2018-12-12 - 2018-12-18' }, { 'name': sprint_names[2], 'description': '2018-12-19 - 2018-12-25' }, ] }, { 'name': 'In Progress', 'cards': [{ 'name': 'card in progress', 'movements': [ { 'datetime': '2018-12-12T11:00:00', 'source': 'Backlog', 'destination': 'Sprint 2 - TO DO' }, { 'datetime': '2018-12-14T12:00:00', 'source': 'Sprint 2 - TO DO', 'destination': 'In Progress' }, ] }] }, { 'name': sprint_names[0], 'cards': [ { 'name': 'card complete in sprint 1', 'movements': [ { 'datetime': '2018-12-05T11:00:00', 'source': 'Backlog', 'destination': 'Sprint 1 - TO DO' }, { 'datetime': '2018-12-05T12:00:00', 'source': 'Sprint 1 - TO DO', 'destination': 'In Progress' }, { 'datetime': '2018-12-07T12:00:00', 'source': 'In Progress', 'destination': 'Sign off' }, { 'datetime': '2018-12-08T12:00:00', 'source': 'Sign off', 'destination': sprint_names[0] }, ] }, ] }, { 'name': sprint_names[1], 'cards': [ { 'name': 'card complete in sprint 2', 'movements': [ { 'datetime': '2018-12-12T11:00:00', 'source': 'Backlog', 'destination': 'Sprint 2 - TO DO' }, { 'datetime': '2018-12-12T12:00:00', 'source': 'Sprint 2 - TO DO', 'destination': 'In Progress' }, { 'datetime': '2018-12-14T12:00:00', 'source': 'In Progress', 'destination': 'Sign off' }, { 'datetime': '2018-12-15T12:00:00', 'source': 'Sign off', 'destination': sprint_names[1] }, ] }, ] }, { 'name': sprint_names[2], 'cards': [{ 'name': 'card complete in sprint 3', 'movements': [ { 'datetime': '2018-12-19T11:00:00', 'source': 'Backlog', 'destination': 'Sprint 3 - TO DO' }, { 'datetime': '2018-12-19T12:00:00', 'source': 'Sprint 3 - TO DO', 'destination': 'In Progress' }, { 'datetime': '2018-12-21T12:00:00', 'source': 'In Progress', 'destination': 'Sign off' }, { 'datetime': '2018-12-22T12:00:00', 'source': 'Sign off', 'destination': sprint_names[2] }, ] }] }, ] mock_trello_client(mocker, lists=lists) t = Trello() metrics = t.get_metrics() assert len(metrics) == 3 assert metrics[0].num_completed == 1 assert metrics[0].num_incomplete == 0 assert metrics[1].num_completed == 1 assert metrics[1].num_incomplete == 1 assert metrics[2].num_completed == 1 assert metrics[2].num_incomplete == 1
def test_trello_get_count_of_incomplete_and_complete_stories(mocker): sprint_name = 'Done (week 1)' lists = [{ 'name': 'TM Q3 sprints', 'cards': [{ 'name': sprint_name, 'description': '2019-01-07 - 2019-01-13' }] }, { 'name': sprint_name, 'cards': [{ 'name': 'card done', 'movements': [{ 'datetime': '2019-01-07T12:00:00', 'source': 'Backlog', 'destination': 'Sprint 1 - TO DO' }, { 'datetime': '2019-01-07T12:00:00', 'source': 'Sprint 1 - TO DO', 'destination': 'In Progress' }, { 'datetime': '2019-01-08T12:00:00', 'source': 'In Progress', 'destination': 'Blocked' }, { 'datetime': '2019-01-08T12:00:00', 'source': 'Blocked', 'destination': 'Sign off' }, { 'datetime': '2019-01-08T13:00:00', 'source': 'Sign off', 'destination': 'Done (week 1)' }] }] }, { 'name': 'In Progress', 'cards': [{ 'name': 'card incomplete', 'movements': [ { 'datetime': '2019-01-07T12:00:00', 'source': 'Backlog', 'destination': 'Sprint 1 - TO DO' }, { 'datetime': '2019-01-07T12:00:00', 'source': 'Sprint 1 - TO DO', 'destination': 'In Progress' }, ] }] }] mock_trello_client(mocker, lists=lists) t = Trello() metrics = t.get_metrics() assert len(metrics) == 1 assert metrics[0].num_completed == 1 assert metrics[0].num_incomplete == 1