Exemple #1
0
 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)