Ejemplo n.º 1
0
def test_check_gte0():
    """
    セルの値が不正な場合は、message_listにエラーメッセージが
    追加されていることをテストする。
    セルの値が正常な場合は、message_listに追加されない

    """
    dtcomp = DecisionTableComponent('testrule')
    row, col = (11, 11)
    col_name = "col_name"
    lang = 'JA'
    cellname = dtcomp.convert_rowcol_to_cellno(row, col)
    expected_msg = get_message(
        'MOSJA03110', lang, colname=col_name, cellname=cellname)
    message_list = []
    wsheet = MagicMock()

    # 値が正常な場合
    wsheet.cell_type.return_value = dtcomp.CELL_TYPE_NUMBER
    wsheet.cell().value = '10'
    result = dtcomp.check_gte0(wsheet, row, col, col_name, message_list, lang)
    assert result == True
    assert len(message_list) == 0

    # 値が不正な場合
    wsheet.cell().value = '-1'
    result = dtcomp.check_gte0(wsheet, row, col, col_name, message_list, lang)
    assert result == False
    assert message_list[0] == expected_msg
Ejemplo n.º 2
0
def test_check_date_format():
    '''
    check_date_format()のテスト
    '''
    dtcomp = DecisionTableComponent('testrule')
    row, col = (13, 11)
    lang = 'JA'
    cellname = dtcomp.convert_rowcol_to_cellno(row, col)
    expected_msg = get_message('MOSJA03126', lang, cellname=cellname)

    wsheet = MagicMock()

    # 値が正常の場合
    message_list = []
    test_date_list = ['2020-01-01 00:00', '2020-12-31 23:59']
    for test_date in test_date_list:
        wsheet.cell(row, col).value = test_date
        dtcomp.check_date_format(wsheet, row, col, row + 1,
                                 message_list, 'MOSJA03126', lang)
        assert len(message_list) == 0

    # 値が異常の場合
    test_err_date_list = ['2020-13-01', '2020-12-32', '2020-0-0', '2020-01-01 24:00', '2020-01-01 :00',
                          '2020-01-01 00:', '2020-01-01 00:60', '0000-01-01', '2020-01-01', '2020-12-31',
                          '24 Feb 2020', '2020-1-1 0:0', '2020-12-1 0:59']
    message_list = []
    n = 0
    for test_err_date in test_err_date_list:
        wsheet.cell(row, col).value = test_err_date

        dtcomp.check_date_format(
            wsheet, row, col, row + 1, message_list, 'MOSJA03126', lang)
        assert len(message_list) > 0
        assert message_list[n] == expected_msg
Ejemplo n.º 3
0
def test_is_all_blank_condition():
    '''
    is_all_blank_condition()のテスト
    '''
    dtcomp = DecisionTableComponent('testrule')
    row= 11
    col_index = 2
    col_max = 4
    wsheet = MagicMock()

    # 値が正常の場合
    wsheet.cell_type.return_value = 0
    result = dtcomp.is_all_blank_condition(wsheet, row, col_index, col_max)
    assert result == True

    # 値が異常の場合
    wsheet.cell_type.return_value = 1
    result = dtcomp.is_all_blank_condition(wsheet, row, col_index, col_max)
    assert result == False
Ejemplo n.º 4
0
    def _create_condition(self):
        """
        [メソッド概要]
        条件部を作成する
        """
        logger.logic_log('LOSI00001', 'None')

        # E列から条件部分のカラムを追加する
        self.tables_ws.insert_cols(self.col_max + 1,
                                   amount=self.len_condition - 1)

        #labelの数だけ条件部を作成する
        # D列から条件部作成
        for i, d in enumerate(self.data_object_list):
            self.tables_ws.cell(row=self.row_min,
                                column=i + self.col_max,
                                value=d.conditional_name)

            try:
                # コメント追記文言取得
                mosja = ConditionalExpression.objects.get(
                    conditional_expression_id=d.conditional_expression_id
                ).example
                example = get_message(mosja,
                                      self.request['lang'],
                                      showMsgId=False)

            except ConditionalExpression.DoesNotExist:
                logger.system_log('LOSM00101', d.conditional_expression_id)

            except Exception as e:
                logger.system_log('LOSM00102', d.conditional_expression_id,
                                  traceback.format_exc())

            # コメント追記カラム情報取得
            cellno = DecisionTableComponent.convert_rowcol_to_cellno(
                self.row_min - 1, i + self.col_max - 1)

            # コメント追記
            self.tables_ws[cellno].comment = Comment(example, 'Comment Author')
            self.tables_ws[cellno].comment.text

        logger.logic_log('LOSI00002', 'None')
Ejemplo n.º 5
0
def modify(request):
    """
    [メソッド概要]
      データ更新処理
      POSTリクエストのみ
    """
    logger.logic_log('LOSI00001', 'None', request=request)

    msg = ''
    error_flag = False
    error_msg = {}
    error_msg_top = {}
    response_data = {}
    now = datetime.datetime.now(pytz.timezone('UTC'))

    # アクセスチェック
    add_record = request.POST.get('add_record', "{}")
    add_record = json.loads(add_record)

    request_record_check(add_record, request)

    try:
        ########################################################
        # リクエスト情報のバリデーションチェック
        ########################################################
        # DataObjectの登録データ存在チェック
        if not len(add_record['data_obj_info']):
            logger.user_log('LOSM14002', 'data_obj_info', request=request)
            error_msg['New3'] = get_message('MOSJA11018',
                                            request.user.get_lang_mode())
            raise Exception()

        # ルール種別のバリデーションチェック
        info = add_record['table_info']
        dtcomp = DecisionTableComponent(info['rule_table_name'])
        decision_table_data = {
            'rule_type_name': info['rule_type_name'],
            'summary': info['summary'],
            'rule_table_name': info['rule_table_name'],
            'generation_limit': 3,
            'group_id': dtcomp.group_id,
            'artifact_id': dtcomp.artifact_id,
            'container_id_prefix_staging': dtcomp.contid_stg,
            'container_id_prefix_product': dtcomp.contid_prd,
            'last_update_user': request.user.user_name,
        }

        # 入力チェック
        f = RuleTypeForm(0,
                         decision_table_data,
                         auto_id=False,
                         error_class=DivErrorList)

        # エラーがあればエラーメッセージを作成
        for content, validate_list in f.errors.items():
            error_msg_top[content] = '\n'.join([
                get_message(v, request.user.get_lang_mode())
                for v in validate_list
            ])
        if len(f.errors.items()):
            raise Exception("validate error")

        # データオブジェクトのバリデーションチェック
        data_obj_data = []
        for rq in add_record['data_obj_info']:
            data = {
                'conditional_name': rq['conditional_name'],
                'conditional_expression_id':
                int(rq['conditional_expression_id']),
                'last_update_user': request.user.user_name,
            }
            data_obj_data.append(data)

        row_id_list = []
        for rq in add_record['data_obj_info']:
            row_id_list.append(rq['row_id'])

        conditionalList = {}

        for i, d in enumerate(data_obj_data):
            serializer = DataObjectSerializer(data=d)
            error_flag, error_msg = serializer_check(request, row_id_list, i,
                                                     serializer, error_flag,
                                                     error_msg)
            conditionalList, error_msg = conditional_name_type_check(
                i, d, serializer, conditionalList, error_msg, row_id_list,
                request)

        # label自動生成
        data_obj_info = []
        index = 0

        data_obj_info, index = automatic_label_generation(data_obj_data)

        if len(error_msg) > 0:
            raise Exception(msg)

        # 適用君へ新規ルール作成リクエスト送信
        send_data = {
            'request': 'CREATE',
            'table_info': add_record['table_info'],
            'data_obj_info': data_obj_info,
            'user_id': request.user.user_id,
            'label_count': index,
            'lang': request.user.get_lang_mode(),
        }
        result, msg = RequestToApply.operate(send_data, request=request)

        # 正常処理
        if result:
            response_data['status'] = 'success'
            response_data['redirect_url'] = '/oase_web/rule/decision_table'

            with transaction.atomic():

                # 権限を追加
                ruletypeid = RuleType.objects.get(
                    rule_table_name=info['rule_table_name']).rule_type_id
                group_list = add_record['group_list']

                # システム管理者グループ追加
                admin_perm = [{
                    'menu_id': m,
                    'permission_type_id': '1'
                } for m in defs.MENU_BY_RULE]
                admin_group_dict = {'group_id': '1', 'permission': admin_perm}
                group_list.append(admin_group_dict)

                # システム管理者グループ以外のグループに権限追加
                permission_list = add_permission(request, now, ruletypeid,
                                                 group_list)

                AccessPermission.objects.bulk_create(permission_list)

        # 適用君異常
        else:
            response_data['status'] = 'failure'
            response_data['error_msg'] = error_msg
            response_data['error_top'] = error_msg_top
            response_data['error_apl'] = ''
            if msg:
                response_data['error_apl'] = get_message(
                    msg, request.user.get_lang_mode())

            logger.system_log('LOSM14004',
                              response_data['error_apl'],
                              request=request)

    except Exception as e:
        # 異常処理
        logger.system_log('LOSI00005', traceback.format_exc(), request=request)
        response_data['status'] = 'failure'
        response_data['error_msg'] = error_msg
        response_data['error_top'] = error_msg_top
        response_data['error_apl'] = ''
        response_data['error_flag'] = error_flag

    logger.logic_log('LOSI00002',
                     'status: %s' % (response_data['status']),
                     request=request)

    response_json = json.dumps(response_data)
    return HttpResponse(response_json, content_type="application/json")
Ejemplo n.º 6
0
    def __init__(self, request_type_id, rule_type_id, trace_id=''):
        """
        [概要]
        """

        logger.logic_log(
            'LOSI00001', 'TraceID: %s, request_type_id: %s, rule_type_id: %s' %
            (trace_id, request_type_id, rule_type_id))

        self.__trace_id = trace_id
        self.lost_flag = False
        self.err_flag = False
        self.none_cont = False
        self.ruletype = None

        try:
            self.ruletype = RuleType.objects.get(rule_type_id=rule_type_id)
            dataobjects = list(
                DataObject.objects.filter(rule_type_id=rule_type_id).order_by(
                    'data_object_id').values_list('label', flat=True))
            dataobjects = list(dict.fromkeys(dataobjects))
            dtcomp = DecisionTableComponent(self.ruletype.rule_table_name)

        except RuleType.DoesNotExist as e:
            self.lost_flag = True
            self.err_flag = True
            logger.system_log('LOSE02000', trace_id, RuleType,
                              traceback.format_exc())
            logger.logic_log('LOSI00002', 'TraceID: %s' % trace_id)
            return None

        except DataObject.DoesNotExist as e:
            self.lost_flag = True
            self.err_flag = True
            logger.system_log('LOSE02000', trace_id, DataObject,
                              traceback.format_exc())
            logger.logic_log('LOSI00002', 'TraceID: %s' % trace_id)
            return None

        except Exception as e:
            self.err_flag = True
            logger.system_log('LOSE02000', trace_id, RuleType,
                              traceback.format_exc())
            logger.logic_log('LOSI00002', 'TraceID: %s' % trace_id)
            return None

        self.__insert_obj = '%s.%s' % (dtcomp.rule_set, dtcomp.class_name)
        self.__insert_vars = []
        self.__insert_vars.extend(dataobjects)
        self.__action_ins_name = 'acts'
        self._lookup = 'ksession-dtables'
        self.__insert_vars.append(self.action_ins_name)
        self.request_type_id = request_type_id
        self.__container_id = self.get_containerid(request_type_id,
                                                   self.ruletype)

        if not self.__container_id:
            self.err_flag = True
            self.none_cont = True
            logger.logic_log('LOSE02011', trace_id, rule_type_id,
                             request_type_id)

        logger.logic_log('LOSI00002', 'TraceID: %s' % trace_id)
Ejemplo n.º 7
0
def test_is_valid_number():
    """
    """
    dtcomp = DecisionTableComponent('testrule')
    row, col = (11, 11)
    col_name = "col_name"
    lang = 'JA'
    cellname = dtcomp.convert_rowcol_to_cellno(row, col)
    expected_msg = get_message(
        'MOSJA03110', lang, colname=col_name, cellname=cellname)
    wsheet = MagicMock()

    pattern = r'^(0|[1-9]\d*)$'
    pattern2 = r'^(0|[1-9]\d*|[1-9]\d*[.]{1}0+)$'

    # check date pattern
    cell_type = dtcomp.CELL_TYPE_DATE
    cell_val = '2020/02/02'
    result = dtcomp.is_valid_number(cell_type, cell_val)
    assert result == False

    # check number pattern
    cell_type = dtcomp.CELL_TYPE_NUMBER
    print("type", cell_type)
    cell_val = '10'
    result = dtcomp.is_valid_number(cell_type, cell_val)
    assert result == True

    cell_val = '0'
    result = dtcomp.is_valid_number(cell_type, cell_val)
    assert result == True

    result = dtcomp.is_valid_number(cell_type, cell_val, accept0=False)
    assert result == False

    cell_val = '11.0'
    result = dtcomp.is_valid_number(cell_type, cell_val)
    assert result == True

    cell_val = '-1'
    result = dtcomp.is_valid_number(cell_type, cell_val)
    assert result == False

    # check text pattern
    cell_type = dtcomp.CELL_TYPE_TEXT
    cell_val = '11'
    result = dtcomp.is_valid_number(cell_type, cell_val)
    assert result == True

    cell_val = '0'
    result = dtcomp.is_valid_number(cell_type, cell_val)
    assert result == True

    result = dtcomp.is_valid_number(cell_type, cell_val, accept0=False)
    assert result == False

    cell_val = 'str'
    result = dtcomp.is_valid_number(cell_type, cell_val)
    assert result == False
Ejemplo n.º 8
0
def test_check_use0():
    """
    check_use0()のテスト
    """
    dtcomp = DecisionTableComponent('testrule')
    row, col = (11, 11)
    col_name = "col_name"
    lang = 'JA'
    cellname1 = dtcomp.convert_rowcol_to_cellno(row, col)
    cellname2 = dtcomp.convert_rowcol_to_cellno(row, col+1)
    expected_msg1 = get_message(
        'MOSJA03136', lang, colname=col_name, cellname=cellname1)
    expected_msg2 = get_message(
        'MOSJA03136', lang, colname=col_name, cellname=cellname2)
    message_list = []
    wsheet = MagicMock()

    # 値が正常な場合
    dtcomp.check_use0(2, 10, row, col, col_name, message_list, lang)
    assert len(message_list) == 0

    dtcomp.check_use0(0, 0, row, col, col_name, message_list, lang)
    assert len(message_list) == 0

    # 値が不正な場合
    dtcomp.check_use0(10, 0, row, col, col_name, message_list, lang)
    assert len(message_list) == 2
    assert message_list[0] == expected_msg1
    assert message_list[1] == expected_msg2

    dtcomp.check_use0(0, 10, row, col, col_name, message_list, lang)
    assert len(message_list) == 4
    assert message_list[2] == expected_msg1
    assert message_list[3] == expected_msg2