def test_two_hunks_in_comment_diff_effective_comment(self):
        pr = pull_request_object(
            comments=[
                review_comment_object(relativedelta(days=2),
                                      18,
                                      hunks=[
                                          hunk(100,
                                               10,
                                               100,
                                               10,
                                               modified_lines=4),
                                          hunk(200,
                                               10,
                                               200,
                                               10,
                                               modified_lines=4)
                                      ])
            ],
            commits=[
                commit_object(relativedelta(days=1)),
                commit_object(
                    relativedelta(days=3),
                    files=[
                        file_object(
                            hunks=[hunk(200, 10, 200, 10, modified_lines=4)])
                    ])
            ])

        assert len(find_effective.process_pr(pr)) == 1
    def test_php_cake_docs(self):
        pr = pull_request_object(
            comments=[
                review_comment_object(
                    relativedelta(days=2, minutes=2),
                    6,
                    hunks=[
                        "@@ -61,11 +61,11 @@ soit cachée. La valeur du temps peut être exprimé dans le format\n ``strtotime()``. (ex. \"1 hour\", ou \"3 minutes\").\n \n En utilisant l\'exemple d\'un controller d\'articles ArticlesController,\n-qui reçoit beaucoup de trafics qui ont besoins d\'être mise en cache:: \n+qui reçoit beaucoup de trafics qui ont besoins d\'être mise en cache::\n "
                    ],
                    path='fr/core-libraries/helpers/cache.rst')
            ],
            commits=[
                commit_object(relativedelta(days=1)),
                commit_object(
                    relativedelta(days=2, minutes=4),
                    files=[
                        file_object(hunks=[
                            "@@ -61,7 +61,7 @@ soit cachée. La valeur du temps peut être exprimé dans le format\n ``strtotime()``. (ex. \"1 hour\", ou \"3 minutes\").\n \n En utilisant l\'exemple d\'un controller d\'articles ArticlesController,\n-qui reçoit beaucoup de trafics qui ont besoins d\'être mise en cache::\n+qui reçoit beaucoup de trafic qui ont besoins d\'être mise en cache::\n \n     public $cacheAction = array(\n         \'view\' => 36000,"
                        ],
                                    filename=
                                    'fr/core-libraries/helpers/cache.rst')
                    ])
            ])

        assert len(find_effective.process_pr(pr)) == 1
    def test_more_comments_after_unrelated_commits(self):
        pr = pull_request_object(
            comments=[
                review_comment_object(
                    relativedelta(days=2),
                    5,
                    hunks=[hunk(100, 10, 100, 10, modified_lines=4)]),
                review_comment_object(
                    relativedelta(days=4),
                    5,
                    hunks=[hunk(200, 10, 200, 10, modified_lines=4)])
            ],
            commits=[
                commit_object(relativedelta(days=1)),
                commit_object(
                    relativedelta(days=3),
                    files=[
                        file_object(
                            hunks=[hunk(10, 10, 10, 40, modified_lines=0)])
                    ]),
                commit_object(
                    relativedelta(days=5),
                    files=[
                        file_object(
                            hunks=[hunk(130, 10, 130, 10, modified_lines=4)])
                    ]),
                commit_object(
                    relativedelta(days=7),
                    files=[
                        file_object(
                            hunks=[hunk(200, 10, 200, 10, modified_lines=4)])
                    ])
            ])

        assert len(find_effective.process_pr(pr)) == 2
 def test_comment_found_after_file_rename(self):
     pr = pull_request_object(
         comments=[
             review_comment_object(
                 relativedelta(days=2),
                 5,
                 hunks=[hunk(50, 10, 50, 10, modified_lines=4)])
         ],
         commits=[
             commit_object(relativedelta(days=1)),
             commit_object(relativedelta(days=3),
                           files=[
                               file_object(hunks=[
                                   hunk(10, 10, 10, 20),
                                   hunk(90, 20, 100, 60)
                               ])
                           ]),
             commit_object(
                 relativedelta(days=8),
                 files=[
                     file_object(
                         hunks=[hunk(60, 10, 60, 10, modified_lines=5)])
                 ])
         ])
     assert len(find_effective.process_pr(pr)) == 1
    def test_file_renamed_no_comment_found(self):
        pr = pull_request_object(
            comments=[
                review_comment_object(
                    relativedelta(days=2),
                    5,
                    hunks=[hunk(370, 10, 370, 10, modified_lines=4)])
            ],
            commits=[
                commit_object(relativedelta(days=1)),
                commit_object(
                    relativedelta(days=3),
                    files=[
                        file_object(
                            hunks=[hunk(10, 10, 10, 10, modified_lines=4)],
                            file_status='renamed',
                            previous_filename='a/something.py',
                            filename='b/something.py'),
                        file_object(
                            hunks=[hunk(370, 10, 370, 10, modified_lines=4)],
                            filename='c/something.py')
                    ])
            ])

        assert len(find_effective.process_pr(pr)) == 0
    def test_no_effective_comments_for_two_different_files(self):
        pr = pull_request_object(
            comments=[review_comment_object(relativedelta(days=5), 12)],
            commits=[
                commit_object(relativedelta(days=4)),
                commit_object(relativedelta(days=7),
                              files=[file_object(filename="b/something.py")])
            ])

        assert len(find_effective.process_pr(pr)) == 0
    def test_one_returned_for_pr_with_two_commits_in_same_area(self):

        pr = pull_request_object(
            comments=[review_comment_object(relativedelta(days=5), 12)],
            commits=[
                commit_object(relativedelta(days=4)),
                commit_object(relativedelta(days=7))
            ])

        assert len(find_effective.process_pr(pr)) == 1
 def test_no_comment_found_after_many_inserts(self):
     pr = pull_request_object(
         comments=[
             review_comment_object(
                 relativedelta(days=2),
                 5,
                 hunks=[hunk(370, 10, 370, 10, modified_lines=4)])
         ],
         commits=[
             commit_object(relativedelta(days=1)),
             commit_object(relativedelta(days=3),
                           files=[
                               file_object(hunks=[
                                   hunk(10, 10, 10, 20),
                                   hunk(200, 20, 210, 80),
                                   hunk(302, 20, 372, 20, modified_lines=10)
                               ])
                           ])
         ])
     assert len(find_effective.process_pr(pr)) == 0
 def test_no_comment_found_after_adding_lines(self):
     pr = pull_request_object(
         comments=[
             review_comment_object(
                 relativedelta(days=2),
                 8,
                 hunks=[hunk(100, 116, 100, 116, modified_lines=6)])
         ],
         commits=[
             commit_object(relativedelta(days=1)),
             commit_object(
                 relativedelta(days=3),
                 files=[file_object(hunks=[hunk(10, 20, 10, 60)])]),
             commit_object(
                 relativedelta(days=8),
                 files=[
                     file_object(
                         hunks=[hunk(70, 15, 70, 15, modified_lines=5)])
                 ])
         ])
     assert len(find_effective.process_pr(pr)) == 0
    def test_php_cake_docs_2(self):
        from pymongo import MongoClient
        from bson.objectid import ObjectId

        mongo_client = MongoClient()

        database = mongo_client["graduation"]

        pull_requests_collection = database["pull_requests"]

        projects_collection = database["projects"]

        commits_collection = database["commits"]

        pr = pull_requests_collection.find_one({
            'number': 3077,
            'project_owner': 'cakephp',
            'project_name': 'docs'
        })

        full_commits = list([
            commits_collection.find_one({'sha': commit_hash})
            for commit_hash in pr["commits"]
        ])

        print(len(full_commits))

        print(pr)

        print(full_commits[1])

        hashes = pr["commits"]

        print(full_commits[0]["date"])

        pr["commits"] = full_commits

        num_of_effective_comments = len(find_effective.process_pr(pr))

        print(num_of_effective_comments)
    def test_zero_returned_for_pr_with_one_commit_and_one_comment(self):
        pr = pull_request_object(
            comments=[review_comment_object(relativedelta(days=5), 12)],
            commits=[commit_object(relativedelta(days=4))])

        assert len(find_effective.process_pr(pr)) == 0
    def test_zero_returned_for_no_commits(self):
        pr = pull_request_object(
            comments=[review_comment_object(relativedelta(days=1), 10)])

        assert len(find_effective.process_pr(pr)) == 0
    def test_zero_returned_for_no_comments(self):
        pr = pull_request_object()

        assert len(find_effective.process_pr(pr)) == 0