judgement - Jumeaux
Author: tadashi-aikawa
Description: Check difference between two responses of API.

コンテンツにスキップ

# judgement

プロパティ差分情報を元に ステータス(Same/Different)を決定します。

##
ignore

以下2つの情報を生成します。

- configで指定したプロパティを無視した上で判定したステータス
- 無視したプロパティのキー と 無視するために参照した設定名

Warning

既に同レイヤーのアドオンでSameと判定されている場合、本アドオンは実行されません。

### Config

#### Definitions

##### Root

Key | Type | Description | Example | Default
--- | --- | --- | --- | ---
ignores | Ignore[] | 無視設定 |  |

##### Ignore

Key | Type | Description | Example | Default
--- | --- | --- | --- | ---
title | (string) | タイトル | IDは毎回変わるので無視 |
conditions | Condition[] | 本設定を反映させるRequestの条件 |  |

`title`について

titleが同じものは同一条件として扱われます。

##### Condition

Key | Type | Description | Example | Default
--- | --- | --- | --- | ---
when | (string) | 条件式 |
    "req.path == '/test'"
added | (Case[]) | 追加されていても無視するプロパティのリストと条件 |  |
changed | (Case[]) | 変更されていても無視するプロパティのリストと条件 |  |
removed | (Case[]) | 削除されていても無視するプロパティのリストと条件 |  |

whenについて

Template表記に対応しています。
プロパティは以下を使用できます。

key | Type | Description
--- | --- | ---
req | Request | リクエスト情報
res_one | Response | oneのレスポンス情報
res_other | Response | otherのレスポンス情報
dict_one | (dict) | oneのプロパティ情報
dict_other | (dict) | otherのプロパティ情報

whenが指定されなかった場合は全て条件に一致したとみなします。

##### Case

Key | Type | Description | Example | Default
--- | --- | --- | --- | ---
path | string | プロパティの正規表現(完全一致) | `root<'id'>` |
when | (str) | 条件式 |
    "one.name == 'hoge'"

whenについて

Template表記に対応しています。
プロパティは以下を使用できます。

key | Type | Description
--- | --- | ---
one | (any) | oneのpathで指定したプロパティに入っている値
other | (any) | otherのpathで指定したプロパティに入っている値

- `added`の場合はoneが`None`
- `removed`の場合はotherが`None`

whenが指定されなかった場合は全て条件に一致したとみなします。

pathのコーテーションについて

プロパティが文字列の場合コーテーションを付けて下さい。
数字の場合はコーテーションを付けないで下さい。

#### Examples

##### path `/api1` の `items[].id` は値が変更されていても無視する

      judgement:
        - name: ignore
          config:
            ignores:
              - title: API1のitems[].idの値は無視
                conditions:
                  - when: 'req.path == "/api1"'
                    changed:
                      - path: root<'items'><\d+><'id'>

##### `items[].type` が追加されていても、その値がallなら無視する

      judgement:
        - name: ignore
          config:
            ignores:
              - title: items[].type
                conditions:
                  - added:
                      - path: root<'items'><\d+><'type'>
                        when: 'other == "all"'

##### 複雑な条件

以下3つのケースを無視した上でステータスを判断する。

- pathが `/api` から始まる場合に追加された `.id`
- nameに `check` を含む `debug` または `url` は削除されている場合
- `name` がignoreまたはunknown に変更された場合

      judgement:
        - name: ignore
          config:
            ignores:
              - title: /apiから始まる場合に追加されたプロパティ.idは無視
                conditions:
                  - when: 'req.path|reg("/api.*")'
                    added:
                      - path: root<'id'>
              - title: nameにcheckを含む場合は全階層のプロパティdebugとurlが削除されていても無視
                conditions:
                  - when: 'req.name|reg(.*check.*)'
                    removed:
                      - path: .*<'(debug|url)'>.*
              - title: プロパティ.nameがignoreまたはunknownに変更された場合だけは無視
                conditions:
                  - changed:
                      - path: root<'name'>
                        when: 'other in ["ignore", "unknown"]'

##
same

指定した条件のいずれかに一致する場合、ステータスをSameにします。

### Config

#### Definitions

##### Root

Key | Type | Description | Example | Default
--- | --- | --- | --- | ---
when_any | str[] | 条件式 |
    '"2" in req.path'

when_anyで指定できるプロパティ

Template表記に対応しています。
プロパティは以下を使用できます。

key | Type | Description
--- | --- | ---
req | Request | リクエスト情報
res_one | Response | oneのレスポンス情報
res_other | Response | otherのレスポンス情報
dict_one | (dict) | oneのプロパティ情報
dict_other | (dict) | otherのプロパティ情報

#### Examples

##### リクエストのpathが`/test0`または`/test1`のときはSameとする

      judgement:
        - name: same
          config:
            when_any:
              - req.path == '/test0'
              - req.path == '/test1'