Exemple #1
0
    def test_edit(self, auth0_app, key, model_factory, maximum_inputs):
        instance = model_factory()

        # フォームに入れる値の準備
        # TODO: valueがinstanceと異なることを保証するのが望ましい
        maximum_inputs = prepare_inputs(maximum_inputs)
        value = maximum_inputs[key]

        # 画面取得
        res = auth0_app.get(self.get_url(instance))
        assert res.status_code == 200

        # フォーム入力
        form = res.forms[self.form_id]
        _set_form_value(form, key, value)

        # 送信正常 & 成功画面に移動
        res = form.submit()
        assert res.status_code == 302
        assert res.location == self.success_url

        # レコードの中身確認
        instance.refresh_from_db()
        record_value, input_value = _normalize_value(getattr(instance, key),
                                                     value)
        assert record_value == input_value
Exemple #2
0
    def test_invalid_value(self, auth0_app, invalid_key, invalid_value,
                           maximum_inputs, src_model_factory):
        """不正な値のテスト"""
        # コピー元のインスタンスを作成
        src_instance = src_model_factory()
        src_model_class = src_instance._meta.model

        # フォームに入れる値の準備
        maximum_inputs = prepare_inputs(maximum_inputs)

        # 検証に使用するため、レコード数を保存
        before_count = self.model.objects.count()
        before_src_count = src_model_class.objects.count()

        # 画面取得
        res = auth0_app.get(self.get_url(src_instance))
        assert res.status_code == 200

        # フォーム入力
        form: Form = res.forms[self.form_id]
        _set_form(form, maximum_inputs)

        # 不正な値をセットする
        _set_form_value_force(form, invalid_key, _prepare_input(invalid_value))

        # 送信エラー
        res = form.submit()
        assert res.status_code == 200

        # レコードの検証
        assert self.model.objects.count() == before_count, "コピー先のレコード数が変わらないこと"
        assert src_model_class.objects.count(
        ) == before_src_count, "コピー元のレコードが変わらないこと"
    def assert_minimum_inputs(self, auth0_app, url, success_url,
                              minimum_inputs, assert_exclude_keys):
        """フォームの値を必要最小限の値のみ埋めたときのテスト"""
        # フォームに入れる値の準備
        parent_minimum_inputs = minimum_inputs["parent"]

        # 子レコードのための入力値
        children_minimum_inputs_list = [
            prepare_inputs(i) for i in minimum_inputs["children"]
        ]

        # リストをdictにする
        children_minimum_inputs = {}
        for child in children_minimum_inputs_list:
            children_minimum_inputs.update(child)

        # 検証に使用するため、レコード数を保存
        before_count_parent = self.get_parent_model().objects.count()
        before_count_children = self.get_child_model().objects.count()

        # 画面取得
        res = auth0_app.get(url)
        assert res.status_code == 200

        # フォーム入力
        form = res.forms[self.get_form_id()]
        _set_form(form, dict(parent_minimum_inputs, **children_minimum_inputs))

        # 送信正常 & 次の画面に移動
        res = form.submit()
        assert res.status_code == 302
        assert res.location == success_url

        # レコードの中身確認
        assert self.get_parent_model().objects.count(
        ) == before_count_parent + 1, "レコード数が1つ増えていること"
        assert self.get_child_model().objects.count(
        ) == before_count_children + len(children_minimum_inputs)
        parent_record = _get_last_record(self.get_parent_model())

        # 親レコードの中身確認
        record_values, input_values = _normalize_record(
            parent_minimum_inputs, parent_record, assert_exclude_keys)
        assert record_values == input_values

        # 子レコードの中身確認
        child_records = list(self.get_child_model().objects.order_by("id"))
        for i, child_record in enumerate(child_records):
            # 子レコードの入力値を取得
            child_inputs = children_minimum_inputs_list[i]
            for child_key in child_inputs.keys():
                value = child_inputs[child_key]
                # rankings-0-strength → strength のように取得
                record_key = child_key.split("-")[2]

                record_values, input_values = _normalize_record(
                    {record_key: value}, child_record, assert_exclude_keys)
                assert record_values == input_values

        self.after_test_minimum_inputs(parent_record)
Exemple #4
0
    def test_required(self, auth0_app, required_key, maximum_inputs,
                      src_model_factory):
        """必須項目が足りてない場合のテスト"""
        # コピー元のインスタンスを作成
        src_instance = src_model_factory()
        src_model_class = src_instance._meta.model

        # フォームに入れる値の準備
        maximum_inputs = prepare_inputs(maximum_inputs)

        # 検証に使用するため、レコード数を保存
        before_count = self.model.objects.count()
        before_src_count = src_model_class.objects.count()

        # 画面取得
        res = auth0_app.get(self.get_url(src_instance))
        assert res.status_code == 200

        # フォーム入力
        form = res.forms[self.form_id]
        _set_form(form, maximum_inputs)

        # 必須項目を空にする(choicesがある場合セットできないため、force_valueを使う)
        form[required_key].force_value("")

        # 送信するとエラーで戻ってくる
        res = form.submit()
        assert res.status_code == 200

        # レコードの検証
        assert self.model.objects.count() == before_count, "コピー先のレコード数が変わらないこと"
        assert src_model_class.objects.count(
        ) == before_src_count, "コピー元のレコードが変わらないこと"
Exemple #5
0
    def assert_minimum_inputs(self, auth0_app, url, success_url,
                              minimum_inputs, assert_exclude_keys):
        """フォームの値を必要最小限の値のみ埋めたときのテスト"""
        # フォームに入れる値の準備
        minimum_inputs = prepare_inputs(minimum_inputs)

        # 検証に使用するため、レコード数を保存
        before_count = self.get_model().objects.count()

        # 画面取得
        res = auth0_app.get(url)
        assert res.status_code == 200

        # フォーム入力
        form = res.forms[self.get_form_id()]
        _set_form(form, minimum_inputs)

        # 送信正常 & 次の画面に移動
        res = form.submit()
        assert res.status_code == 302
        assert res.location == success_url

        # レコードの中身確認
        assert self.get_model().objects.count(
        ) == before_count + 1, "レコード数が1つ増えていること"
        record = _get_last_record(self.get_model())

        record_values, input_values = _normalize_record(
            minimum_inputs, record, assert_exclude_keys)
        assert record_values == input_values

        self.after_test_minimum_inputs(record)
Exemple #6
0
    def assert_required(self, auth0_app, url, maximum_inputs, required_key):
        """必須項目が足りてない場合のテスト"""
        # フォームに入れる値の準備
        maximum_inputs = prepare_inputs(maximum_inputs)

        # 画面取得
        res = auth0_app.get(url)
        assert res.status_code == 200

        # フォーム入力
        form = res.forms[self.get_form_id()]
        _set_form(form, maximum_inputs)

        # 必須項目を空にする(choicesがある場合セットできないため、force_valueを使う)
        form[required_key].force_value("")

        # 送信するとエラーで戻ってくる
        res = form.submit()
        assert res.status_code == 200
Exemple #7
0
    def test_invalid_value(self, auth0_app, invalid_key, invalid_value,
                           maximum_inputs):
        """不正な値のテスト"""
        # フォームに入れる値の準備
        maximum_inputs = prepare_inputs(maximum_inputs)

        # 画面取得
        res = auth0_app.get(self.get_url())
        assert res.status_code == 200

        # フォーム入力
        form: Form = res.forms[self.form_id]
        _set_form(form, maximum_inputs)

        # 不正な値を強制的にセットする
        _set_form_value_force(form, invalid_key, _prepare_input(invalid_value))

        # 送信するとエラーで戻ってくる
        res = form.submit()
        assert res.status_code == 200
Exemple #8
0
def test_prepare_inputs():
    def f():
        return "x"

    data = dict(
        a=1,
        b="abc",
        c=f,
        d=[1, 2],
        e=[f, f],
    )

    prepared_data = prepare_inputs(data)

    assert prepared_data == dict(
        a=1,
        b="abc",
        c="x",
        d=[1, 2],
        e=["x", "x"],
    )
Exemple #9
0
    def test_minimum_inputs(self, auth0_app, minimum_inputs,
                            src_model_factory):
        """フォームの値を必要最小限の値のみ埋めたときのテスト"""
        # コピー元のインスタンスを作成
        src_instance = src_model_factory()
        src_model_class = src_instance._meta.model

        # フォームに入れる値の準備
        minimum_inputs = prepare_inputs(minimum_inputs)

        # 検証に使用するため、レコード数を保存
        before_count = self.model.objects.count()
        before_src_count = src_model_class.objects.count()

        # 画面取得
        res = auth0_app.get(self.get_url(src_instance))
        assert res.status_code == 200

        # フォーム入力
        form = res.forms[self.form_id]
        _set_form(form, minimum_inputs)

        # 送信正常 & 次の画面に移動
        res = form.submit()
        assert res.status_code == 302
        assert res.location == self.success_url

        # レコードの中身確認
        assert self.model.objects.count(
        ) == before_count + 1, "コピー先のレコード数が1つ増えていること"
        assert src_model_class.objects.count(
        ) == before_src_count - 1, "コピー元のレコードが1つ減っていること"
        record = _get_last_record(self.model)

        record_values, input_values = _normalize_record(
            minimum_inputs, record, self.assert_exclude_keys)
        assert record_values == input_values

        self.after_test_minimum_inputs(record)
Exemple #10
0
    def assert_required(self, auth0_app, url, maximum_inputs, required_key):
        """必須項目が足りてない場合のテスト"""
        # フォームに入れる値の準備
        parent_maximum_inputs = maximum_inputs["parent"]

        children_maximum_inputs = {}
        for child in maximum_inputs["children"]:
            children_maximum_inputs.update(prepare_inputs(child))

        # 画面取得
        res = auth0_app.get(url)
        assert res.status_code == 200

        # フォーム入力
        form = res.forms[self.get_form_id()]
        _set_form(form, dict(parent_maximum_inputs, **children_maximum_inputs))

        # 必須項目を空にする(choicesがある場合セットできないため、force_valueを使う)
        form[required_key].force_value("")

        # 送信するとエラーで戻ってくる
        res = form.submit()
        assert res.status_code == 200
Exemple #11
0
    def test_invalid_value(self, auth0_app, invalid_key, invalid_value,
                           maximum_inputs, src_model_factory):
        """不正な値のテスト"""
        # コピー元のインスタンスを作成
        src_instance = src_model_factory()

        # フォームに入れる値の準備
        maximum_inputs = prepare_inputs(maximum_inputs)

        # 画面取得
        res = auth0_app.get(self.get_url(src_instance))
        assert res.status_code == 200

        # フォーム入力
        form: Form = res.forms[self.form_id]
        _set_form(form, maximum_inputs)

        # 不正な値をセットする
        _set_form_value_force(form, invalid_key, _prepare_input(invalid_value))

        # 送信エラー
        res = form.submit()
        assert res.status_code == 200
Exemple #12
0
    def test_invalid_value(self, auth0_app, invalid_key, invalid_value,
                           maximum_inputs):
        """不正な値のテスト"""
        # フォームに入れる値の準備
        parent_maximum_inputs = maximum_inputs["parent"]

        children_maximum_inputs = {}
        for child in maximum_inputs["children"]:
            children_maximum_inputs.update(prepare_inputs(child))

        # 画面取得
        res = auth0_app.get(self.get_url())
        assert res.status_code == 200

        # フォーム入力
        form: Form = res.forms[self.form_id]
        _set_form(form, dict(parent_maximum_inputs, **children_maximum_inputs))

        # 不正な値を強制的にセットする
        _set_form_value_force(form, invalid_key, _prepare_input(invalid_value))

        # 送信するとエラーで戻ってくる
        res = form.submit()
        assert res.status_code == 200