def test_input_invalid_unshared_post_option(self): """PostCreateSerializerの入力データのバリデーション(NG: 投稿と選択肢でshare_idが共通でない)""" share_id = uuid.uuid4() data1 = { 'select_num': 0, 'answer': 'テスト1', 'votes': 1, 'share_id': share_id } data2 = { 'select_num': 1, 'answer': 'テスト2', 'votes': 2, 'share_id': share_id } # シリアライズ input_data = { 'user': get_user_model().objects.get().id, 'question': 'テストだよ〜', 'options': [data1, data2], 'share_id': uuid.uuid4() } serializer = PostCreateSerializer(data=input_data) # バリデーションの結果を検証 self.assertEqual(serializer.is_valid(), False) self.assertCountEqual(serializer.errors.keys(), ['non_field_errors']) self.assertCountEqual( [x.code for x in serializer.errors['non_field_errors']], ['invalid'], )
def test_input_invalid_lesser_2_options(self): """PostCreateSerializerの入力データのバリデーション(NG: 選択肢が2個未満だった時)""" share_id = uuid.uuid4() data1 = { 'select_num': 0, 'answer': 'テスト1', 'votes': 1, 'share_id': share_id } # シリアライズ(境界値もテストするよ!) input_data = { 'user': get_user_model().objects.get().id, 'question': 'テストだよ〜!', 'options': [data1], 'share_id': share_id } serializer = PostCreateSerializer(data=input_data) # バリデーションの結果を検証 self.assertEqual(serializer.is_valid(), False) self.assertCountEqual(serializer.errors.keys(), ['options']) self.assertCountEqual( [x.code for x in serializer.errors['options']], ['invalid'], )
def test_input_valid(self): """PostCreateSerializerの入力データのバリデーション(OK)""" share_id = uuid.uuid4() data1 = { 'select_num': 0, 'answer': 'テスト1', 'votes': 1, 'share_id': share_id } data2 = { 'select_num': 1, 'answer': 'テスト2', 'votes': 2, 'share_id': share_id } # 入力データの加工 input_data = { 'user': get_user_model().objects.get().id, 'question': 'テストだよ〜', 'options': [data1, data2], 'share_id': share_id } # シリアライズ serializer = PostCreateSerializer(data=input_data) # バリデーションの結果を検証 self.assertEqual(serializer.is_valid(), True)
def test_input_invalid_question_over(self): """PostCreateSerializerの入力データのバリデーション(NG: questionが150字より上)""" share_id = uuid.uuid4() data1 = { 'select_num': 0, 'answer': 'テスト1', 'votes': 1, 'share_id': share_id } data2 = { 'select_num': 1, 'answer': 'テスト2', 'votes': 2, 'share_id': share_id } # 入力データの加工 input_data_valid = { 'user': get_user_model().objects.get().id, 'question': 'テストだよ' * 30, 'options': [data1, data2], 'share_id': share_id } # シリアライズ(境界値もテストするよ!) serializer_valid = PostCreateSerializer(data=input_data_valid) self.assertEqual(serializer_valid.is_valid(), True) input_data_invalid = { 'user': get_user_model().objects.get().id, 'question': 'テストだよ' * 31, 'options': [data1, data2], 'share_id': share_id } # シリアライズ(境界値もテストするよ!) serializer = PostCreateSerializer(data=input_data_invalid) # バリデーションの結果を検証 self.assertEqual(serializer.is_valid(), False) self.assertCountEqual(serializer.errors.keys(), ['question']) self.assertCountEqual( [x.code for x in serializer.errors['question']], ['max_length'], )
def test_input_invalid_user_or_question_is_blank(self): """OptionSerializerの入力データのバリデーション(NG: questionかuserの値が空文字)""" share_id = uuid.uuid4() data1 = { 'select_num': 0, 'answer': 'テスト1', 'votes': 1, 'share_id': share_id } data2 = { 'select_num': 1, 'answer': 'テスト2', 'votes': 2, 'share_id': share_id } # 入力データの加工 input_data = { 'user': get_user_model().objects.get().id, 'question': 'テストだよ〜!', 'options': [data1, data2], 'share_id': share_id } input_data['user'] = '' serializer_user = PostCreateSerializer(data=input_data) self.assertEqual(serializer_user.is_valid(), False) self.assertCountEqual(serializer_user.errors.keys(), ['user']) self.assertCountEqual( [x.code for x in serializer_user.errors['user']], ['null'], ) input_data['user'] = get_user_model().objects.get().id input_data['question'] = '' serializer_question = PostCreateSerializer(data=input_data) self.assertEqual(serializer_question.is_valid(), False) self.assertCountEqual(serializer_question.errors.keys(), ['question']) self.assertCountEqual( [x.code for x in serializer_question.errors['question']], ['blank'], )