Esempio n. 1
0
 def setUp(self):
     super(BillingBaseReportTests, self).setUp()
     self.project_month_repository = ProjectMonthRepository()
     self.user_repository = UserRepository()
     with app.test_request_context():
         project_month = self.project_month_repository.find_by_id(1)
         project_month.remarks = 'test'
         user = self.user_repository.find_by_id(1)
         session['user'] = user.serialize()
         billing_base_report = BillingBaseReport(project_month)
     self.billing_base_report = billing_base_report
Esempio n. 2
0
 def setUp(self):
     super(BpOrderReportTests, self).setUp()
     self.project_repository = ProjectRepository()
     self.user_repository = UserRepository()
     self.project_detail_repository = ProjectDetailRepository()
     self.engineer_repository = EngineerRepository()
     with app.test_request_context():
         project_detail = self.project_detail_repository.find_by_id(1)
         user = self.user_repository.find_by_id(1)
         session['user'] = user.serialize()
         bp_order_report = BpOrderReport(project_detail)
     self.bp_order_report = bp_order_report
Esempio n. 3
0
 def setUp(self):
     super(EstimatedReportTests, self).setUp()
     self.project_repository = ProjectRepository()
     self.user_repository = UserRepository()
     self.project_detail_repository = ProjectDetailRepository()
     self.engineer_repository = EngineerRepository()
     with app.test_request_context():
         project = self.project_repository.find_by_id(1)
         # 明細 = 作業
         project_detail_work = ProjectDetail(
             project_id=project.id,
             detail_type=DetailType.work,
             work_name='project_detail_work',
             billing_money=100000,
             created_at=datetime.today(),
             created_user='******',
             updated_at=datetime.today(),
             updated_user='******')
         project.project_details.append(project_detail_work)
         user = self.user_repository.find_by_id(1)
         session['user'] = user.serialize()
         estimated_report = EstimatedReport(project)
     self.estimated_report = estimated_report
Esempio n. 4
0
class BpOrderReportTests(BaseTestCase):
    @classmethod
    def setUpClass(cls):
        super(BpOrderReportTests, cls).setUpClass()

    @classmethod
    def tearDownClass(cls):
        super(BpOrderReportTests, cls).tearDownClass()

    def setUp(self):
        super(BpOrderReportTests, self).setUp()
        self.project_repository = ProjectRepository()
        self.user_repository = UserRepository()
        self.project_detail_repository = ProjectDetailRepository()
        self.engineer_repository = EngineerRepository()
        with app.test_request_context():
            project_detail = self.project_detail_repository.find_by_id(1)
            user = self.user_repository.find_by_id(1)
            session['user'] = user.serialize()
            bp_order_report = BpOrderReport(project_detail)
        self.bp_order_report = bp_order_report

    def tearDown(self):
        super(BpOrderReportTests, self).tearDown()

    def test_get_payment_detail_text(self):
        # set_up
        engineer_history = EngineerHistory(engineer_id=1,
                                           payment_start_day=date(2017, 1, 1),
                                           payment_end_day=date(2017, 2, 28),
                                           payment_site=Site.twenty_five,
                                           payment_tax=Tax.eight,
                                           payment_per_month=100000,
                                           payment_rule=Rule.variable,
                                           payment_per_top_hour=1000,
                                           payment_per_bottom_hour=2000,
                                           created_at=datetime.today(),
                                           created_user='******',
                                           updated_at=datetime.today(),
                                           updated_user='******')

        expected = "test0 氏  ¥100,000.-/月額"\
            + "\n        "\
            + "超過単価:¥1,000.-/H  "\
            + "欠業単価:¥2,000.-/H"

        # テスト対象のメソッドを実行
        text = self.bp_order_report.get_payment_detail_text(engineer_history)
        self.assertEqual(text, expected)
Esempio n. 5
0
class UserService(object):
    repository = UserRepository()

    def find(self, page, user_name, shain_number):
        return self.repository.find(page, user_name, shain_number)

    def find_by_id(self, user_id):
        return self.repository.find_by_id(user_id)

    def find_by_shain_number(self, shain_number):
        return self.repository.find_by_shain_number(shain_number)

    def save(self, user):
        return self.repository.save(user)

    def destroy(self, user):
        return self.repository.destroy(user)
Esempio n. 6
0
class BillingBaseReportTests(BaseTestCase):
    @classmethod
    def setUpClass(cls):
        super(BillingBaseReportTests, cls).setUpClass()

    @classmethod
    def tearDownClass(cls):
        super(BillingBaseReportTests, cls).tearDownClass()

    def setUp(self):
        super(BillingBaseReportTests, self).setUp()
        self.project_month_repository = ProjectMonthRepository()
        self.user_repository = UserRepository()
        with app.test_request_context():
            project_month = self.project_month_repository.find_by_id(1)
            project_month.remarks = 'test'
            user = self.user_repository.find_by_id(1)
            session['user'] = user.serialize()
            billing_base_report = BillingBaseReport(project_month)
        self.billing_base_report = billing_base_report

    def tearDown(self):
        super(BillingBaseReportTests, self).tearDown()

    def test_write_estimated_content_rows_if_blanket(self):
        # テスト対象のメソッドを実行
        self.billing_base_report.create_billing_details()

    def test_remark(self):
        locale.setlocale(locale.LC_ALL, '')
        deposit_date = self.billing_base_report.project_month.deposit_date.strftime(
            '%Y年%m月%d日')

        expected = "お支払いは下記口座に{}までにお支払い願います。\n\n".format(deposit_date)
        if self.billing_base_report.project_month.remarks:
            expected += self.billing_base_report.project_month.remarks + '\n'
        if self.billing_base_report.project_month.project.client_order_no:
            expected += "※作業内容及び納品物等の詳細はご注文書(No.{})の通り"\
                 .format(self.billing_base_report.project_month.project.client_order_no)

        # テスト対象のメソッドを実行
        actual = self.billing_base_report.remark()
        self.assertEqual(expected, actual)
from flask_wtf import FlaskForm
from wtforms import PasswordField, StringField
from wtforms import ValidationError

from application.controllers.form.validators import DataRequired
from application.domain.repository.user_repository import UserRepository

repository = UserRepository()


class LoginForm(FlaskForm):
    shain_number = StringField('社員番号', [DataRequired()])
    password = PasswordField('パスワード', [DataRequired()])

    def validate_password(self, field):
        user = repository.find_by_shain_number(self.shain_number.data)
        if user is None or user.can_not_login(field.data):
            raise ValidationError('社員番号またはパスワードが違います。')
 def setUp(self):
     super(UserTests, self).setUp()
     self.user_repository = UserRepository()
class UserTests(BaseTestCase):

    def setUp(self):
        super(UserTests, self).setUp()
        self.user_repository = UserRepository()

    def tearDown(self):
        super(UserTests, self).tearDown()

    # ユーザー検索画面に遷移する。
    def test_get_user(self):
        # ログインする
        self.app.post('/login', data={
            'shain_number': 'test1',
            'password': '******'
        })

        result = self.app.get('/user/')
        self.assertEqual(result.status_code, 200)

    # 2ページ目に遷移する。
    def test_user_page2(self):
        # ログインする
        self.app.post('/login', data={
            'shain_number': 'test1',
            'password': '******'
        })

        result = self.app.get('/user/page/2?user_name=&shain_number=')
        self.assertEqual(result.status_code, 200)

    # ユーザーを検索する。
    def test_search_user(self):
        # ログインする
        self.app.post('/login', data={
            'shain_number': 'test1',
            'password': '******'
        })

        result = self.app.get('/user/?user_name=test&shain_number=test')
        self.assertEqual(result.status_code, 200)

    # ユーザー登録画面に遷移する。
    def test_get_user_create(self):
        # ログインする
        self.app.post('/login', data={
            'shain_number': 'test1',
            'password': '******'
        })

        result = self.app.get('/user/create')
        self.assertEqual(result.status_code, 200)

    # ユーザー登録する。
    def test_create_user(self):
        before = len(self.user_repository.find_all())
        # ログインする
        self.app.post('/login', data={
            'shain_number': 'test1',
            'password': '******'
        })

        result = self.app.post('/user/create', data={
            'shain_number': 'create_user',
            'user_name': '登録テスト'
        })
        user = self.user_repository.find_by_shain_number('create_user')

        self.assertEqual(result.status_code, 302)
        ok_('/user/detail/' + str(user.id) in result.headers['Location'])

        after = len(self.user_repository.find_all())
        # 1件追加されていることを確認
        self.assertEqual(before + 1, after)

    # ユーザー登録に失敗する。
    def test_create_user_fail(self):
        before = len(self.user_repository.find_all())
        # ログインする
        self.app.post('/login', data={
            'shain_number': 'test1',
            'password': '******'
        })

        result = self.app.post('/user/create', data={
            'shain_number': 'test1',
            'user_name': '登録テスト'
        })
        self.assertEqual(result.status_code, 200)

        after = len(self.user_repository.find_all())
        # 前後で件数が変わっていないことを確認
        self.assertEqual(before, after)

    # ユーザー詳細画面に遷移する。
    def test_get_user_detail(self):
        # ログインする
        shain_number = 'test1'
        self.app.post('/login', data={
            'shain_number': shain_number,
            'password': '******'
        })
        user = self.user_repository.find_by_shain_number(shain_number)

        result = self.app.get('/user/detail/' + str(user.id))
        self.assertEqual(result.status_code, 200)

    # 存在しないユーザーの場合はnot_found
    def test_get_user_detail_fail(self):
        # ログインする
        self.app.post('/login', data={
            'shain_number': 'test1',
            'password': '******'
        })

        result = self.app.get('/user/detail/0')
        self.assertEqual(result.status_code, 404)

    # ユーザー情報を保存できる
    def test_save_user(self):
        shain_number = 'test1'
        self.app.post('/login', data={
            'shain_number': shain_number,
            'password': '******'
        })
        user = self.user_repository.find_by_shain_number(shain_number)

        expected = '単体テスト_変更'

        result = self.app.post('/user/detail/' + str(user.id), data={
            'shain_number': user.shain_number,
            'user_name': expected
        })
        # 保存できることを確認
        self.assertEqual(result.status_code, 302)
        ok_('/user/detail/' + str(user.id) in result.headers['Location'])

        user = self.user_repository.find_by_shain_number(shain_number)
        actual = user.user_name
        self.assertEqual(actual, expected)

    # ユーザー情報を削除できる
    def test_delete_user(self):
        # 削除用のユーザーを登録
        user = User(
                 shain_number='delete_user',
                 user_name='削除用ユーザー',
                 password=bcrypt.generate_password_hash('test'),
                 created_at=datetime.today(),
                 created_user='******',
                 updated_at=datetime.today(),
                 updated_user='******')
        db.session.add(user)
        db.session.commit()

        # ログイン
        self.app.post('/login', data={
            'shain_number': 'test1',
            'password': '******'
        })
        user = self.user_repository.find_by_shain_number('delete_user')

        result = self.app.get('/user/delete/' + str(user.id))
        # 削除できることを確認
        self.assertEqual(result.status_code, 302)
        ok_('/user' in result.headers['Location'])

        # 削除したユーザーが存在しないことを確認
        user = self.user_repository.find_by_shain_number('delete_user')
        self.assertIsNone(user)

    # 存在しないユーザーは削除できない
    def test_delete_user_fail(self):
        before = len(self.user_repository.find_all())
        # ログイン
        self.app.post('/login', data={
            'shain_number': 'test1',
            'password': '******'
        })

        result = self.app.get('/user/delete/0')
        # 削除できることを確認
        self.assertEqual(result.status_code, 302)
        ok_('/user' in result.headers['Location'])

        after = len(self.user_repository.find_all())
        # 前後で件数が変わっていないことを確認
        self.assertEqual(before, after)
    
    # 新規登録時に社員番号は必須
    def test_register_shain_number_empty_fail(self):
        # ログインする
        self.app.post('/login', data={
            'shain_number': 'test1',
            'password': '******'
        })
        # 全ユーザーの件数を取得
        before = len(self.user_repository.find_all())
        
        # 社員番号が空のデータを登録
        result = self.app.post('/user/create', data={
            'shain_number': '',
            'user_name': '登録テスト'
        })
        self.assertEqual(result.status_code, 200)
        
        # 全ユーザーの件数を取得
        after = len(self.user_repository.find_all())
        # 前後で件数が変わっていないことを確認
        self.assertEqual(before, after)

    # 更新時に社員番号は必須
    def test_update_shain_number_empty_fail(self):
        # ログイン
        shain_number = 'test1'
        self.app.post('/login', data={
            'shain_number': shain_number,
            'password': '******'
        })
        user = self.user_repository.find_by_shain_number(shain_number)
        
        before = user.shain_number

        # 社員番号を空で登録する。
        result = self.app.post('/user/detail/' + str(user.id), data={
            'shain_number': '',
            'user_name': user.user_name
        })
        # 保存
        self.assertEqual(result.status_code, 302)
        ok_('/user/detail/' + str(user.id) in result.headers['Location'])

        # 登録前後の社員番号に変更がないことを確認
        user = self.user_repository.find_by_shain_number(shain_number)
        after = user.shain_number
        self.assertEqual(before, after)
Esempio n. 10
0
class EstimatedReportTests(BaseTestCase):
    @classmethod
    def setUpClass(cls):
        super(EstimatedReportTests, cls).setUpClass()

    @classmethod
    def tearDownClass(cls):
        super(EstimatedReportTests, cls).tearDownClass()

    def setUp(self):
        super(EstimatedReportTests, self).setUp()
        self.project_repository = ProjectRepository()
        self.user_repository = UserRepository()
        self.project_detail_repository = ProjectDetailRepository()
        self.engineer_repository = EngineerRepository()
        with app.test_request_context():
            project = self.project_repository.find_by_id(1)
            # 明細 = 作業
            project_detail_work = ProjectDetail(
                project_id=project.id,
                detail_type=DetailType.work,
                work_name='project_detail_work',
                billing_money=100000,
                created_at=datetime.today(),
                created_user='******',
                updated_at=datetime.today(),
                updated_user='******')
            project.project_details.append(project_detail_work)
            user = self.user_repository.find_by_id(1)
            session['user'] = user.serialize()
            estimated_report = EstimatedReport(project)
        self.estimated_report = estimated_report

    def tearDown(self):
        super(EstimatedReportTests, self).tearDown()

    def test_write_estimated_content_rows_if_blanket(self):
        # set_up
        self.estimated_report.project.contract_form = Contract.blanket

        # テスト対象のメソッドを実行
        self.estimated_report.write_estimated_content_rows()

        # 指定のセルに値が入っていることを確認。
        defined_name_range = self.estimated_report.excel.get_defined_name_range(
            "estimation_no")
        self.assertEqual(self.estimated_report.ws[defined_name_range].value,
                         self.estimated_report.project.estimation_no)
        defined_name_range = self.estimated_report.excel.get_defined_name_range(
            "printed_date")
        self.assertIsNotNone(
            self.estimated_report.ws[defined_name_range].value)
        defined_name_range = self.estimated_report.excel.get_defined_name_range(
            "client_company_name")
        self.assertEqual(
            self.estimated_report.ws[defined_name_range].value,
            self.estimated_report.project.client_company.company_name)
        defined_name_range = self.estimated_report.excel.get_defined_name_range(
            "project_name")
        self.assertEqual(self.estimated_report.ws[defined_name_range].value,
                         self.estimated_report.project.project_name)
        start_date = datetime(self.estimated_report.project.start_date.year,
                              self.estimated_report.project.start_date.month,
                              self.estimated_report.project.start_date.day)
        defined_name_range = self.estimated_report.excel.get_defined_name_range(
            "start_date")
        self.assertEqual(self.estimated_report.ws[defined_name_range].value,
                         strjpftime(start_date, '  %O%E年%m月%d日'))
        end_date = datetime(self.estimated_report.project.end_date.year,
                            self.estimated_report.project.end_date.month,
                            self.estimated_report.project.end_date.day)
        defined_name_range = self.estimated_report.excel.get_defined_name_range(
            "end_date")
        self.assertEqual(self.estimated_report.ws[defined_name_range].value,
                         strjpftime(end_date, '  %O%E年%m月%d日'))
        defined_name_range = self.estimated_report.excel.get_defined_name_range(
            "billing_timing")
        self.assertEqual(
            self.estimated_report.ws[defined_name_range].value,
            self.estimated_report.project.billing_timing.name_for_report)
        defined_name_range = self.estimated_report.excel.get_defined_name_range(
            "contract_form")
        self.assertEqual(self.estimated_report.ws[defined_name_range].value,
                         self.estimated_report.project.contract_form.name)

    def test_write_estimated_content_rows_if_not_blanket(self):
        # set_up
        self.estimated_report.project.contract_form = Contract.time_and_material

        # テスト対象のメソッドを実行
        self.estimated_report.write_estimated_content_rows()

        # 指定のセルに値が入っていることを確認。
        defined_name_range = self.estimated_report.excel.get_defined_name_range(
            "estimation_no")
        self.assertEqual(self.estimated_report.ws[defined_name_range].value,
                         self.estimated_report.project.estimation_no)
        defined_name_range = self.estimated_report.excel.get_defined_name_range(
            "printed_date")
        self.assertIsNotNone(
            self.estimated_report.ws[defined_name_range].value)
        defined_name_range = self.estimated_report.excel.get_defined_name_range(
            "client_company_name")
        self.assertEqual(
            self.estimated_report.ws[defined_name_range].value,
            self.estimated_report.project.client_company.company_name)
        defined_name_range = self.estimated_report.excel.get_defined_name_range(
            "project_name")
        self.assertEqual(self.estimated_report.ws[defined_name_range].value,
                         self.estimated_report.project.project_name)
        start_date = datetime(self.estimated_report.project.start_date.year,
                              self.estimated_report.project.start_date.month,
                              self.estimated_report.project.start_date.day)
        defined_name_range = self.estimated_report.excel.get_defined_name_range(
            "start_date")
        self.assertEqual(self.estimated_report.ws[defined_name_range].value,
                         strjpftime(start_date, '  %O%E年%m月%d日'))
        end_date = datetime(self.estimated_report.project.end_date.year,
                            self.estimated_report.project.end_date.month,
                            self.estimated_report.project.end_date.day)
        defined_name_range = self.estimated_report.excel.get_defined_name_range(
            "end_date")
        self.assertEqual(self.estimated_report.ws[defined_name_range].value,
                         strjpftime(end_date, '  %O%E年%m月%d日'))
        defined_name_range = self.estimated_report.excel.get_defined_name_range(
            "billing_timing")
        self.assertEqual(
            self.estimated_report.ws[defined_name_range].value,
            self.estimated_report.project.billing_timing.name_for_report)
        defined_name_range = self.estimated_report.excel.get_defined_name_range(
            "contract_form")
        self.assertEqual(self.estimated_report.ws[defined_name_range].value,
                         self.estimated_report.project.contract_form.name)

    def test_create_project_detail_rows_if_project_details_over_3(self):
        # テスト対象のメソッドを実行
        self.estimated_report.create_project_detail_rows()

        # プロジェクト明細が指定のセルに値が入っていることを確認(※1行のみ)。
        self.assertEqual(self.estimated_report.ws['B24'].value, 1)
        self.assertEqual(
            self.estimated_report.ws['C24'].value, self.estimated_report.
            project.project_details[0].engineer.engineer_name)
        self.assertEqual(
            self.estimated_report.ws['G24'].value,
            self.estimated_report.project.project_details[0].billing_money)
        self.assertEqual(
            self.estimated_report.ws['H24'].value,
            self.estimated_report.project.project_details[0].remarks)
        # 消費税が指定のセルに値が入っていることを確認。
        self.assertEqual(self.estimated_report.ws['C30'].value, '消費税(なし)')
        self.assertEqual(
            self.estimated_report.ws['G30'].value,
            self.estimated_report.project.tax_of_estimated_total_amount())
        # 合計が指定のセルに値が入っていることを確認。
        self.assertEqual(self.estimated_report.ws['C31'].value, '合計')
        self.assertEqual(
            self.estimated_report.ws['G31'].value,
            self.estimated_report.project.estimated_total_amount +
            self.estimated_report.project.tax_of_estimated_total_amount())

    def test_create_project_detail_rows_if_project_details_below_2(self):
        # set_up
        project = self.project_repository.find_by_id(2)
        project_detail = self.project_detail_repository.find_all()[1]
        project.project_details.append(project_detail)
        self.estimated_report.project = project

        # テスト対象のメソッドを実行
        self.estimated_report.create_project_detail_rows()

        # プロジェクト明細が指定のセルに値が入っていることを確認(※1行のみ)。
        self.assertEqual(self.estimated_report.ws['B24'].value, 1)
        self.assertEqual(
            self.estimated_report.ws['C24'].value, self.estimated_report.
            project.project_details[0].engineer.engineer_name)
        self.assertEqual(
            self.estimated_report.ws['G24'].value,
            self.estimated_report.project.project_details[0].billing_money)
        self.assertEqual(
            self.estimated_report.ws['H24'].value,
            self.estimated_report.project.project_details[0].remarks)
        # 消費税が指定のセルに値が入っていることを確認。
        self.assertEqual(self.estimated_report.ws['C25'].value, '消費税(なし)')
        self.assertEqual(
            self.estimated_report.ws['G25'].value,
            self.estimated_report.project.tax_of_estimated_total_amount())
        # 合計が指定のセルに値が入っていることを確認。
        self.assertEqual(self.estimated_report.ws['C26'].value, '合計')
        self.assertEqual(
            self.estimated_report.ws['G26'].value,
            self.estimated_report.project.estimated_total_amount +
            self.estimated_report.project.tax_of_estimated_total_amount())

    def test_create_contract_content_rows(self):
        # テスト対象のメソッドを実行
        self.estimated_report.current_row = 32
        self.estimated_report.create_contract_content_rows()

        # 指定のセルに値が入っていることを確認。
        self.assertEqual(self.estimated_report.ws['B32'].value, '作業内容')
        self.assertEqual(self.estimated_report.ws['E32'].value,
                         self.estimated_report.project.contents)
        self.assertEqual(self.estimated_report.ws['B33'].value, '納品物')
        self.assertEqual(self.estimated_report.ws['E33'].value,
                         self.estimated_report.project.deliverables)
        self.assertEqual(self.estimated_report.ws['B34'].value, '作業場所')
        self.assertEqual(self.estimated_report.ws['E34'].value,
                         self.estimated_report.project.working_place)
        self.assertEqual(self.estimated_report.ws['B35'].value, '検査完了日')
        self.assertEqual(self.estimated_report.ws['E35'].value,
                         self.estimated_report.project.inspection_date)
        self.assertEqual(self.estimated_report.ws['B36'].value, '作業責任者')
        self.assertEqual(self.estimated_report.ws['E36'].value,
                         self.estimated_report.project.responsible_person)
        self.assertEqual(self.estimated_report.ws['B37'].value, '品質管理担当者')
        self.assertEqual(self.estimated_report.ws['E37'].value,
                         self.estimated_report.project.quality_control)
        self.assertEqual(self.estimated_report.ws['B38'].value, '再委託先')
        self.assertEqual(self.estimated_report.ws['E38'].value,
                         self.estimated_report.project.subcontractor)
        self.assertEqual(self.estimated_report.ws['B39'].value, '備考')
        self.assertEqual(self.estimated_report.ws['E39'].value,
                         self.estimated_report.project.remarks)

    def test_create_contract_content_rows_if_billing_by_month(self):
        # set_up
        project = self.project_repository.find_by_id(2)
        project_detail = self.project_detail_repository.find_all()[1]
        project.project_details.append(project_detail)
        self.estimated_report.project = project

        # テスト対象のメソッドを実行
        self.estimated_report.current_row = 32
        self.estimated_report.create_contract_content_rows()

        # 指定のセルに値が入っていることを確認。
        self.assertEqual(self.estimated_report.ws['B32'].value, '作業内容')
        self.assertEqual(self.estimated_report.ws['E32'].value,
                         self.estimated_report.project.contents)
        self.assertEqual(self.estimated_report.ws['B33'].value, '納品物')
        self.assertEqual(self.estimated_report.ws['E33'].value,
                         self.estimated_report.project.deliverables)
        self.assertEqual(self.estimated_report.ws['B34'].value, '作業場所')
        self.assertEqual(self.estimated_report.ws['E34'].value,
                         self.estimated_report.project.working_place)
        self.assertEqual(self.estimated_report.ws['B35'].value, '検査完了日')
        self.assertEqual(self.estimated_report.ws['E35'].value, '毎月月末')
        self.assertEqual(self.estimated_report.ws['B36'].value, '作業責任者')
        self.assertEqual(self.estimated_report.ws['E36'].value,
                         self.estimated_report.project.responsible_person)
        self.assertEqual(self.estimated_report.ws['B37'].value, '品質管理担当者')
        self.assertEqual(self.estimated_report.ws['E37'].value,
                         self.estimated_report.project.quality_control)
        self.assertEqual(self.estimated_report.ws['B38'].value, '再委託先')
        self.assertEqual(self.estimated_report.ws['E38'].value,
                         self.estimated_report.project.subcontractor)
        self.assertEqual(self.estimated_report.ws['B39'].value, '備考')
        self.assertEqual(self.estimated_report.ws['E39'].value,
                         self.estimated_report.project.remarks)