def test_create_section_assignees_data(self): test_data: dict = { 'zentai': { '1_zentai': '前期活動総括,田所 浩二,114514', '2_unei': '運営総括,田所 浩二', '3_gakusai': '学園祭総括', }, 'system': { '1_zentai': '全体方針', }, } result: dict = { 'soukatsu/zentai/1_zentai.tex': ArticleInfo('前期活動総括', Assignee('114514', '田所', '浩二')), 'soukatsu/zentai/2_unei.tex': ArticleInfo('運営総括', Assignee(family='田所', name='浩二')), 'soukatsu/zentai/3_gakusai.tex': ArticleInfo('学園祭総括', Assignee()), 'soukatsu/system/1_zentai.tex': ArticleInfo('全体方針', Assignee()), } for key, value in assignees.create_section_assignees_data( test_data, {}, 'soukatsu').items(): with self.subTest(test_data=str(result[key]), result=str(value)): self.assertEqual(result[key], value) self.assertEqual( result, assignees.create_section_assignees_data(test_data, {}, 'soukatsu'))
def create_file(filepath: str, info: ArticleInfo) -> None: # テンプレートファイルのパスを指定 file_loader = FileSystemLoader(config.TEMPLATE_ROOT_PATH) env = Environment(loader=file_loader) tex_template = env.get_template(config.DOCUMENT_PARTS_TEX_TEMPLATE) if is_subsection_path(filepath): section: str = get_section_from_subsection_path(filepath) subsection_filepath: str = path.join(config.SRC_ROOT_PATH, filepath) # ファイルがあれば何もしない if path.exists(subsection_filepath): print(msg.ERROR_FILE_EXIST(subsection_filepath)) return positions: list = get_positions(section) # ファイル生成 with open(subsection_filepath, mode='w') as f: f.write( tex_template.render(title=info.get_title(), positions=positions, assignee=info.get_assignee(), is_newfile=True)) print(msg.CREATED_FILE_MSG(subsection_filepath)) elif is_kaisei_tex(filepath) or is_hajimeni_tex(filepath): # 回生別 または はじめに の場合 subsection_filepath: str = path.join(config.SRC_ROOT_PATH, filepath) type_name: str = None if is_hajimeni_tex(filepath) else 'kaisei' print(msg.WORNING_FILE_CHANGE(subsection_filepath)) positions: list = get_positions(type_name) # ファイルを上書き with open(subsection_filepath, mode='a') as f: f.write( tex_template.render(title=info.get_title(), positions=positions, assignee=info.get_assignee(), is_newfile=False)) print(msg.OVERWRITTEN_FILE_MSG(subsection_filepath)) else: print(msg.ERROR_UNSUPPORTED_FILE_PATH) return
def create_issue(filepath: str, info: ArticleInfo, project_id: int, private_token: str,\ created_issue_titles: list) -> None: assignee: Assignee = info.get_assignee() if assignee.get_gitlab_id() is None: print(msg.ERROR_MISSING_GITLAB_ID(filepath)) return # 情報をセットする title: str = filepath + ':' + info.get_title() description: str = '担当者は、' + assignee.get_family() + ' ' + assignee.get_name() + 'さんです。\n' +\ 'src/' + filepath + 'を編集してください。' assignee_id: str = assignee.get_gitlab_id() # 既にissueが作られていたらworningを出して終了 if is_issue_already_created(title, created_issue_titles): print(msg.WORNING_ISSUE_DUPLICATED(title)) return result_title: str = post_issue(project_id, private_token, title, description, assignee_id) print(msg.CREATED_ISSUE_MSG(result_title))
def test_create_type_assignees_data(self): yml_data: dict = { 'hajimeni': 'はじめに,田所 浩二,114514', 'soukatsu': { 'zentai': { '1_zentai': '前期活動総括,田所 浩二', '2_unei': '運営総括' }, '1kai': '1回生総括', '2kai': '2回生総括', '3kai': '3回生総括', '4kai': '4回生総括', 'kaikei': None, 'kensui': None, 'syogai': None, 'system': { '1_zentai': '全体総括', }, 'soumu': None }, 'houshin': { 'zentai': { '1_zentai': '前期活動方針', '2_unei': '運営方針' }, '1kai': '1回生方針', '2kai': '2回生方針', '3kai': '3回生方針', 'kaikei': None, 'kensui': None, 'syogai': None, 'system': { '1_zentai': '全体方針', }, 'soumu': None } } result: dict = { 'hajimeni.tex': ArticleInfo('はじめに', Assignee('114514', '田所', '浩二')), 'soukatsu/zentai/1_zentai.tex': ArticleInfo('前期活動総括', Assignee(family='田所', name='浩二')), 'soukatsu/zentai/2_unei.tex': ArticleInfo('運営総括', Assignee()), 'soukatsu/1kai.tex': ArticleInfo('1回生総括', Assignee()), 'soukatsu/2kai.tex': ArticleInfo('2回生総括', Assignee()), 'soukatsu/3kai.tex': ArticleInfo('3回生総括', Assignee()), 'soukatsu/4kai.tex': ArticleInfo('4回生総括', Assignee()), 'soukatsu/system/1_zentai.tex': ArticleInfo('全体総括', Assignee()), 'houshin/zentai/1_zentai.tex': ArticleInfo('前期活動方針', Assignee()), 'houshin/zentai/2_unei.tex': ArticleInfo('運営方針', Assignee()), 'houshin/1kai.tex': ArticleInfo('1回生方針', Assignee()), 'houshin/2kai.tex': ArticleInfo('2回生方針', Assignee()), 'houshin/3kai.tex': ArticleInfo('3回生方針', Assignee()), 'houshin/system/1_zentai.tex': ArticleInfo('全体方針', Assignee()), } for key, value in assignees.create_type_assignees_data( yml_data).items(): with self.subTest(yml_data=str(result[key]), result=str(value)): self.assertEqual(result[key], value) self.assertEqual(result, assignees.create_type_assignees_data(yml_data))
def test_parse_assignee_one_args(self): test_data: str = 'はじめに' result: ArticleInfo = ArticleInfo('はじめに', Assignee()) self.assertEqual(result, assignees.parse_assignee(test_data))
def test_parse_assignee_two_args(self): test_data: str = 'はじめに,田所 浩二' result: ArticleInfo = ArticleInfo('はじめに', Assignee(family='田所', name='浩二')) self.assertEqual(result, assignees.parse_assignee(test_data))
def test_parse_assignee_three_args(self): test_data: str = 'はじめに,田所 浩二,114514' result: ArticleInfo = ArticleInfo('はじめに', Assignee('114514', '田所', '浩二')) self.assertEqual(result, assignees.parse_assignee(test_data))