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
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)
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, "コピー元のレコードが変わらないこと"
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)
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
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
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"], )
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)
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
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
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