def test_should_not_exist_btn_feedback_ContextKey_when_is_feedbacked_by_owner_True_for_owner( self): # DirectMessageオブジェクトのownerである認証ユーザーによるアクセスの場合でDirectMessage.is_feedbacked_by_ownerがTrueの場合context["btn_feedback"]が存在しない *5 #DMオブジェクトを作るところから始める item_obj = Item.objects.get(id=1) self.client = Client() login_status = self.client.login(username="******", password="******") self.assertTrue(login_status) #認証状態でアクセスを行う self.client.post(reverse_lazy(ViewName.SOLICITUD_INPUT, args=(str(item_obj.id), )), data={"message": "csdmfmvf"}, follow=True) #記事作成者が取引相手を定める(DirectMessageオブジェクト生成) self.client = Client() login_status = self.client.login(username="******", password="******") self.assertTrue(login_status) #認証状態でアクセスを行う solicitud_id = Item.objects.get( id=item_obj.id).solicitudes.all().first().id data = {"id": solicitud_id} response = self.client.post(reverse_lazy(ViewName.SOLICITUD_SELECT, args=(str(solicitud_id), )), data, follow=True) #post_user(記事作成者)がfeedbackを作成する data = {"content": "djfjsgso", "level": 1} form = FeedbackModelForm(data) self.assertTrue(form.is_valid()) self.client.session["dm_obj_pk"] = Item.objects.get( id=item_obj.id).direct_message.id response = self.client.post(reverse_lazy(ViewName.FEEDBACK_POST), follow=True) self.assertTrue("btn_feedback" not in response.context) # *5
def test_入力されたフォームデータが適切な場合にはアイテム詳細ページにリダイレクトされる(self): category_obj = pickUp_category_obj_for_test() post_user_obj, post_user_profile_obj = create_user_for_test( create_user_data(prefix_user_emailaddress="post_user")) item_obj1 = create_item_for_test(post_user_obj, create_item_data(category_obj)) participant, participant_profile_obj = create_user_for_test( create_user_data(prefix_user_emailaddress="participant")) solicitud_obj = create_solicitud_for_test( item_obj1, participant, create_solicitud_data(message=None)) dm_obj, item_obj1 = create_direct_message_for_test(solicitud_obj) # post_userがアクセスする self.client = Client() login_status = self.client.login(username="******", password="******") self.assertTrue(login_status) #認証状態でアクセス session = self.client.session session['dm_obj_pk'] = dm_obj.id session.save() valid_form_data = {"content": "良かった", "level": 2} valid_form_data["evaluator"] = post_user_obj form = FeedbackModelForm(valid_form_data) self.assertTrue(form.is_valid()) url = reverse_lazy(ViewName.FEEDBACK_POST) response = self.client.post(url, valid_form_data, follow=True) self.assertTrue(response.status_code, 200) templates = [template.name for template in response.templates] self.assertTrue(TemplateName.ITEM_DETAIL in templates)
def get(self, request, *args, **kwargs): """ endpoint: 'feedback/create/' name: feedback:create 機能: feedbackオブジェクト生成用のフォームを表示する 他にもdirectmessageページにボタンを表示するかいなかの設定を追加したい。コレはDorectMessagelViewに加えるべきか? """ """テスト項目 未認証ユーザーによるアクセスはhomeにリダイレクトされる *1 """ if request.user.is_anonymous: return redirect(ViewName.HOME) context = {} #print(dir(self.request)) dm_obj_pk = self.kwargs["pk"] self.request.session["dm_obj_pk"] = dm_obj_pk evaluator = User.objects.get(username=request.user.username) form = FeedbackModelForm() context["form"] = form return render(request, 'feedback/show_feedback_form.html', context)
def test_アイテム記事参加者がフィードバックを入力しデータが適切な場合にはアイテム記事主のProfile_feedbackにFeedbackオブジェクトが追加される( self): category_obj = pickUp_category_obj_for_test() post_user_obj, post_user_profile_obj = create_user_for_test( create_user_data(prefix_user_emailaddress="post_user")) item_obj1 = create_item_for_test(post_user_obj, create_item_data(category_obj)) participant, participant_profile_obj = create_user_for_test( create_user_data(prefix_user_emailaddress="participant")) solicitud_obj = create_solicitud_for_test( item_obj1, participant, create_solicitud_data(message=None)) dm_obj, item_obj1 = create_direct_message_for_test(solicitud_obj) #self.assertFalse(self.dm_obj.is_feedbacked_by_owner) feedback_count = post_user_profile_obj.feedback.all().count() self.assertEqual(feedback_count, 0) # post_userがアクセスする self.client = Client() login_status = self.client.login(username="******", password="******") self.assertTrue(login_status) #認証状態でアクセス session = self.client.session session['dm_obj_pk'] = dm_obj.id session.save() #適切なデータを作成 valid_form_data = {"content": "良かった", "level": 2} valid_form_data["evaluator"] = participant form = FeedbackModelForm(valid_form_data) self.assertTrue(form.is_valid()) # 参加者が記事主に対しフィードバックを残す url = reverse_lazy(ViewName.FEEDBACK_POST) response = self.client.post(url, valid_form_data, follow=True) self.assertTrue(response.status_code, 200) new_dm_obj = DirectMessage.objects.get(id=dm_obj.id) # 参加者によるフィードバックがTrueに切り替えられるか確認 self.assertTrue(new_dm_obj.is_feedbacked_by_participant) # 記事主のProfile_feedbackにFeedbackオブジェクトが追加されるかチェックする new_count = Profile.objects.get( user=post_user_obj).feedback.all().count() self.assertEqual(new_count, feedback_count + 1)
def test_アイテム記事参加者がフィードバックを入力しデータが適切な場合にはdm_obj_is_feedbacked_by_participantの値がTrueに変更される( self): category_obj = pickUp_category_obj_for_test() post_user_obj, post_user_profile_obj = create_user_for_test( create_user_data(prefix_user_emailaddress="post_user")) item_obj1 = create_item_for_test(post_user_obj, create_item_data(category_obj)) participant, participant_profile_obj = create_user_for_test( create_user_data(prefix_user_emailaddress="participant")) solicitud_obj = create_solicitud_for_test( item_obj1, participant, create_solicitud_data(message=None)) dm_obj, item_obj1 = create_direct_message_for_test(solicitud_obj) #初期の状態ではis_feedbacked_by_participantはFalseであることを確認する self.assertFalse(dm_obj.is_feedbacked_by_participant) # post_userがアクセスする self.client = Client() login_status = self.client.login(username="******", password="******") self.assertTrue(login_status) #認証状態でアクセス session = self.client.session session['dm_obj_pk'] = dm_obj.id session.save() #適切なデータを作成 valid_form_data = {"content": "良かった", "level": 2} valid_form_data["evaluator"] = participant form = FeedbackModelForm(valid_form_data) self.assertTrue(form.is_valid()) #is_feedbacked_by_participantの値が変更されたかチェックする url = reverse_lazy(ViewName.FEEDBACK_POST) response = self.client.post(url, valid_form_data, follow=True) self.assertTrue(response.status_code, 200) new_dm_obj = DirectMessage.objects.get(id=dm_obj.id) self.assertTrue(new_dm_obj.is_feedbacked_by_participant) #is_feedbacked_by_ownerの値が変更されないままかチェックする self.assertFalse(new_dm_obj.is_feedbacked_by_owner)
def post(self, request, *args, **kwargs): """機能 Feedbackオブジェクトを生成する このpostメソッドで変更される内容は、 DirectMessage.is_feedbacked_by_participantの変更 DirectMessage.is_feedbacked_by_ownerの変更 Feedbackオブジェクトの生成 Profile.feedbackにFeedbackオブジェクトの追加 endpoint: 'feedback/feedback/' name: 'feedback:feedback' """ """テスト項目 FeedbackModelFormのcontentが入力されていないときは? 未認証ユーザーがpostアクセスした場合にはhomeにリダイレクトされる。(homeのテンプレート"config/home.html"が使われる) *1 ユーザーがDirectMessageオブジェクトの主または参加者どちらでもない場合にはhomeにリダイレクトされる。*2 入力されたフォームデータが不適切な場合には、feedback生成ページがリダイレクトされる。(テンプレートは'feedback/show_feedback_form.html') *3 入力されたフォームデータが適切な場合には、アイテム詳細ページにリダイレクトされる。(テンプレートはTemplateKey.ITEM_DETAILが使われる)*4 入力されたフォームデータが適切な場合にはFeedbackオブジェクトが生成される。*5 アイテム記事の主がフィードバックを入力し、データが適切な場合には、dm_obj.is_feedbacked_by_ownerの値がTrueに変更される(前後チェック)*6 アイテム記事の主がフィードバックを入力し、データが適切な場合には、アイテム記事参加者のProfile.feedbackにFeedbackオブジェクトが追加される。*7 アイテム記事参加者がフィードバックを入力し、データが適切な場合には、dm_obj.is_feedbacked_by_participantの値がTrueに変更される(前後チェック)*8 アイテム記事参加者がフィードバックを入力し、データが適切な場合には、アイテム記事主のProfile.feedbackにFeedbackオブジェクトが追加される。*9 """ try: dm_obj_pk = self.request.session["dm_obj_pk"] dm_obj = DirectMessage.objects.get(id=dm_obj_pk) except: return redirect(ViewName.HOME) if request.user.is_anonymous: return redirect(ViewName.HOME) # request.userがdm_objの取引相手でなければリダイレクトをかける if dm_obj.owner.user.username != request.user.username and dm_obj.participant.user.username != request.user.username: return redirect(ViewName.HOME) item_obj = Item.objects.get(direct_message=dm_obj) form = FeedbackModelForm(request.POST) if form.is_valid(): print("validを通る") level = request.POST["level"] feedback_obj = form.save(commit=False) feedback_obj.evaluator = User.objects.get( username=request.user.username) feedback_obj.level = level feedback_obj.save() #取引相手のProfileオブジェクトのfeedbackに生成したfeedbackを追加する #取引相手を特定する if request.user.username == dm_obj.owner.user.username: dm_obj.participant.feedback.add(feedback_obj) dm_obj.is_feedbacked_by_owner = True dm_obj.save() elif request.user.username == dm_obj.participant.user.username: dm_obj.owner.feedback.add(feedback_obj) dm_obj.is_feedbacked_by_participant = True dm_obj.save() else: print("想定外のパターンを検出") return redirect("items:item_detail", item_obj.id) else: print("ここを通る??") for ele in form: print(ele.error) return redirect("feedback:create", dm_obj_pk)