Blame tests/test_pagure_flask_ui_pr_edit.py

Julen Landa Alustiza 89da7f
# -*- coding: utf-8 -*-
Julen Landa Alustiza 89da7f
Julen Landa Alustiza 89da7f
"""
Julen Landa Alustiza 89da7f
 Authors:
Julen Landa Alustiza 89da7f
   Julen Landa Alustiza <jlanda@fedoraproject.org></jlanda@fedoraproject.org>
Julen Landa Alustiza 89da7f
"""
Julen Landa Alustiza 89da7f
Julen Landa Alustiza 89da7f
from __future__ import unicode_literals, absolute_import
Julen Landa Alustiza 89da7f
Julen Landa Alustiza 89da7f
import sys
Julen Landa Alustiza 89da7f
import os
Julen Landa Alustiza 89da7f
Julen Landa Alustiza 89da7f
sys.path.insert(
Julen Landa Alustiza 89da7f
    0, os.path.join(os.path.dirname(os.path.abspath(__file__)), "..")
Julen Landa Alustiza 89da7f
)
Julen Landa Alustiza 89da7f
Julen Landa Alustiza 89da7f
import tests
Julen Landa Alustiza 89da7f
import pagure.lib.query
Julen Landa Alustiza 89da7f
import pygit2
Julen Landa Alustiza 89da7f
Julen Landa Alustiza 89da7f
Julen Landa Alustiza 89da7f
class PagureFlaskPrEditSimpletests(tests.Modeltests):
Julen Landa Alustiza 89da7f
    def test_pr_edit_no_project(self):
Julen Landa Alustiza 89da7f
        """ Test the edit pull request endpoint """
Julen Landa Alustiza 89da7f
        output = self.app.get("/foo/pull-request/1/edit")
Julen Landa Alustiza 89da7f
        self.assertEqual(output.status_code, 404)
Julen Landa Alustiza 89da7f
        output_text = output.get_data(as_text=True)
Julen Landa Alustiza 89da7f
        self.assertIn(
Julen Landa Alustiza 89da7f
            "<title>Page not found :'( - Pagure</title>", output_text
Julen Landa Alustiza 89da7f
        )
Julen Landa Alustiza 89da7f
        self.assertIn("

Page not found (404)

", output_text)
Julen Landa Alustiza 89da7f
Julen Landa Alustiza 89da7f
    def test_pr_edit_no_git_repo(self):
Julen Landa Alustiza 89da7f
        """ Test the edit pull request endpoint """
Julen Landa Alustiza 89da7f
        tests.create_projects(self.session)
Julen Landa Alustiza 89da7f
        output = self.app.get("/test/pull-request/1/edit")
Julen Landa Alustiza 89da7f
        self.assertEqual(output.status_code, 404)
Julen Landa Alustiza 89da7f
        output_text = output.get_data(as_text=True)
Julen Landa Alustiza 89da7f
        self.assertIn(
Julen Landa Alustiza 89da7f
            "<title>Page not found :'( - Pagure</title>", output_text
Julen Landa Alustiza 89da7f
        )
Julen Landa Alustiza 89da7f
        self.assertIn("

No git repo found

", output_text)
Julen Landa Alustiza 89da7f
Julen Landa Alustiza 89da7f
    def test_pr_edit_no_pull_requests_no_login(self):
Julen Landa Alustiza 89da7f
        """ Test the edit pull request endpoint """
Julen Landa Alustiza 89da7f
        tests.create_projects(self.session)
Julen Landa Alustiza 89da7f
        tests.create_projects_git(os.path.join(self.path, "repos"), bare=True)
Julen Landa Alustiza 89da7f
        output = self.app.get("/test/pull-request/1/edit")
Julen Landa Alustiza 89da7f
        self.assertEqual(output.status_code, 302)
Julen Landa Alustiza 89da7f
Julen Landa Alustiza 89da7f
    def test_pr_edit_no_pull_requests(self):
Julen Landa Alustiza 89da7f
        """ Test the edit pull request endpoint """
Julen Landa Alustiza 89da7f
        tests.create_projects(self.session)
Julen Landa Alustiza 89da7f
        tests.create_projects_git(os.path.join(self.path, "repos"), bare=True)
Julen Landa Alustiza 89da7f
        user = tests.FakeUser()
Julen Landa Alustiza 89da7f
        with tests.user_set(self.app.application, user):
Julen Landa Alustiza 89da7f
            output = self.app.get("/test/pull-request/1/edit")
Julen Landa Alustiza 89da7f
            self.assertEqual(output.status_code, 404)
Julen Landa Alustiza 89da7f
            output_text = output.get_data(as_text=True)
Julen Landa Alustiza 89da7f
            self.assertIn(
Julen Landa Alustiza 89da7f
                "<title>Page not found :'( - Pagure</title>", output_text
Julen Landa Alustiza 89da7f
            )
Julen Landa Alustiza 89da7f
            self.assertIn("

Pull-request not found

", output_text)
Julen Landa Alustiza 89da7f
Julen Landa Alustiza 89da7f
Julen Landa Alustiza 89da7f
class PagureFlaskPrEdittests(tests.Modeltests):
Julen Landa Alustiza 89da7f
    def setUp(self):
Julen Landa Alustiza 89da7f
        super(PagureFlaskPrEdittests, self).setUp()
Julen Landa Alustiza 89da7f
        tests.create_projects(self.session)
Julen Landa Alustiza 89da7f
        tests.create_projects_git(os.path.join(self.path, "repos"), bare=True)
Julen Landa Alustiza 89da7f
        # Create foo's fork of pingou's test project
Julen Landa Alustiza 89da7f
        item = pagure.lib.model.Project(
Julen Landa Alustiza 89da7f
            user_id=2,  # foo
Julen Landa Alustiza 89da7f
            name="test",
Julen Landa Alustiza 89da7f
            description="test project #1",
Julen Landa Alustiza 89da7f
            hook_token="aaabbb",
Julen Landa Alustiza 89da7f
            is_fork=True,
Julen Landa Alustiza 89da7f
            parent_id=1,
Julen Landa Alustiza 89da7f
        )
Julen Landa Alustiza 89da7f
        self.session.add(item)
Julen Landa Alustiza 89da7f
        self.session.commit()
Julen Landa Alustiza 89da7f
        # Create the fork's git repo
Julen Landa Alustiza 89da7f
        repo_path = os.path.join(self.path, "repos", item.path)
Julen Landa Alustiza 89da7f
        pygit2.init_repository(repo_path, bare=True)
Julen Landa Alustiza 89da7f
Julen Landa Alustiza 89da7f
        project = pagure.lib.query.get_authorized_project(self.session, "test")
Julen Landa Alustiza 89da7f
        fork = pagure.lib.query.get_authorized_project(
Julen Landa Alustiza 89da7f
            self.session, "test", user="foo"
Julen Landa Alustiza 89da7f
        )
Julen Landa Alustiza 89da7f
        tests.add_pull_request_git_repo(
Julen Landa Alustiza 89da7f
            self.path,
Julen Landa Alustiza 89da7f
            self.session,
Julen Landa Alustiza 89da7f
            project,
Julen Landa Alustiza 89da7f
            fork,
Julen Landa Alustiza 89da7f
            user="foo",
Julen Landa Alustiza 89da7f
            allow_rebase=True,
Julen Landa Alustiza 89da7f
        )
Julen Landa Alustiza 89da7f
Julen Landa Alustiza 89da7f
    def tearDown(self):
Julen Landa Alustiza 89da7f
        super(PagureFlaskPrEdittests, self).tearDown()
Julen Landa Alustiza 89da7f
        tests.clean_pull_requests_path()
Julen Landa Alustiza 89da7f
Julen Landa Alustiza 89da7f
    def test_pr_edit_pull_request_unauthenticated(self):
Julen Landa Alustiza 89da7f
        output = self.app.get("/test/pull-request/1/edit")
Julen Landa Alustiza 89da7f
        self.assertEqual(output.status_code, 302)
Julen Landa Alustiza 89da7f
Julen Landa Alustiza 89da7f
    def test_pr_edit_pull_request_unauthorized(self):
Julen Landa Alustiza 89da7f
        user = tests.FakeUser()
Julen Landa Alustiza 89da7f
        with tests.user_set(self.app.application, user):
Julen Landa Alustiza 89da7f
            output = self.app.get("/test/pull-request/1/edit")
Julen Landa Alustiza 89da7f
            self.assertEqual(output.status_code, 403)
Julen Landa Alustiza 89da7f
            output_text = output.get_data(as_text=True)
Julen Landa Alustiza 89da7f
            self.assertIn("<title>403 Forbidden</title>", output_text)
Julen Landa Alustiza 89da7f
            self.assertIn(
Julen Landa Alustiza 89da7f
                "

You are not allowed to edit this pull-request

",
Julen Landa Alustiza 89da7f
                output_text,
Julen Landa Alustiza 89da7f
            )
Julen Landa Alustiza 89da7f
Julen Landa Alustiza 89da7f
    def test_pr_edit_pull_request_view_author(self):
Julen Landa Alustiza 89da7f
        user = tests.FakeUser(username="foo")
Julen Landa Alustiza 89da7f
        with tests.user_set(self.app.application, user):
Julen Landa Alustiza 89da7f
            output = self.app.get("/test/pull-request/1/edit")
Julen Landa Alustiza 89da7f
            self.assertEqual(output.status_code, 200)
Julen Landa Alustiza 89da7f
            output_text = output.get_data(as_text=True)
Julen Landa Alustiza 89da7f
            # Author is editing PR #1
Julen Landa Alustiza 89da7f
            self.assertIn(
Julen Landa Alustiza 89da7f
                "<title>Edit PR#1: PR from the feature branch - test - "</title>
Julen Landa Alustiza 89da7f
                "Pagure",
Julen Landa Alustiza 89da7f
                output_text,
Julen Landa Alustiza 89da7f
            )
Julen Landa Alustiza 89da7f
            # Author has a title input
Julen Landa Alustiza 89da7f
            if self.get_wtforms_version() >= (2, 2):
Julen Landa Alustiza 89da7f
                self.assertIn(
Julen Landa Alustiza 89da7f
                    '
Julen Landa Alustiza 89da7f
                    'required type="text" value="PR from the feature branch">',
Julen Landa Alustiza 89da7f
                    output_text,
Julen Landa Alustiza 89da7f
                )
Julen Landa Alustiza 89da7f
            else:
Julen Landa Alustiza 89da7f
                self.assertIn(
Julen Landa Alustiza 89da7f
                    '
Julen Landa Alustiza 89da7f
                    'type="text" value="PR from the feature branch">',
Julen Landa Alustiza 89da7f
                    output_text,
Julen Landa Alustiza 89da7f
                )
Julen Landa Alustiza 89da7f
            # Author has an initial_commit textarea
Julen Landa Alustiza 89da7f
            self.assertIn(
Julen Landa Alustiza 89da7f
                '
Julen Landa Alustiza 89da7f
                'id="initial_comment"\n                    '
Julen Landa Alustiza 89da7f
                'name="initial_comment">',
Julen Landa Alustiza 89da7f
                output_text,
Julen Landa Alustiza 89da7f
            )
Julen Landa Alustiza 89da7f
            # Author has an non-disabled allow_rebase input
Julen Landa Alustiza 89da7f
            self.assertIn(
Julen Landa Alustiza 89da7f
                '
Julen Landa Alustiza 89da7f
                'type="checkbox" value="y" checked>',
Julen Landa Alustiza 89da7f
                output_text,
Julen Landa Alustiza 89da7f
            )
Julen Landa Alustiza 89da7f
Julen Landa Alustiza 89da7f
    def test_pr_edit_pull_request_post_author_no_csrf_token(self):
Julen Landa Alustiza 89da7f
        user = tests.FakeUser(username="foo")
Julen Landa Alustiza 89da7f
        with tests.user_set(self.app.application, user):
Julen Landa Alustiza 89da7f
            data = {
Julen Landa Alustiza 89da7f
                "title": "New title",
Julen Landa Alustiza 89da7f
                "initial_comment": "New initial comment",
Julen Landa Alustiza 89da7f
                "allow_rebase": False,
Julen Landa Alustiza 89da7f
            }
Julen Landa Alustiza 89da7f
            output = self.app.post(
Julen Landa Alustiza 89da7f
                "/test/pull-request/1/edit", data=data, follow_redirects=True
Julen Landa Alustiza 89da7f
            )
Julen Landa Alustiza 89da7f
            self.assertEqual(output.status_code, 200)
Julen Landa Alustiza 89da7f
            output_text = output.get_data(as_text=True)
Julen Landa Alustiza 89da7f
            # Without CSRF token, we finish again on the form with new
Julen Landa Alustiza 89da7f
            # values.
Julen Landa Alustiza 89da7f
            self.assertIn(
Julen Landa Alustiza 89da7f
                "<title>Edit PR#1: PR from the feature branch - test - "</title>
Julen Landa Alustiza 89da7f
                "Pagure",
Julen Landa Alustiza 89da7f
                output_text,
Julen Landa Alustiza 89da7f
            )
Julen Landa Alustiza 89da7f
            if self.get_wtforms_version() >= (2, 2):
Julen Landa Alustiza 89da7f
                self.assertIn(
Julen Landa Alustiza 89da7f
                    '
Julen Landa Alustiza 89da7f
                    'required type="text" value="New title">',
Julen Landa Alustiza 89da7f
                    output_text,
Julen Landa Alustiza 89da7f
                )
Julen Landa Alustiza 89da7f
            else:
Julen Landa Alustiza 89da7f
                self.assertIn(
Julen Landa Alustiza 89da7f
                    '
Julen Landa Alustiza 89da7f
                    'type="text" value="New title">',
Julen Landa Alustiza 89da7f
                    output_text,
Julen Landa Alustiza 89da7f
                )
Julen Landa Alustiza 89da7f
            self.assertIn(
Julen Landa Alustiza 89da7f
                '
Julen Landa Alustiza 89da7f
                'id="initial_comment"\n                    '
Julen Landa Alustiza 89da7f
                'name="initial_comment">New initial comment',
Julen Landa Alustiza 89da7f
                output_text,
Julen Landa Alustiza 89da7f
            )
Julen Landa Alustiza 89da7f
            self.assertIn(
Julen Landa Alustiza 89da7f
                '
Julen Landa Alustiza 89da7f
                ' value="y" checked>',
Julen Landa Alustiza 89da7f
                output_text,
Julen Landa Alustiza 89da7f
            )
Julen Landa Alustiza 89da7f
            request = pagure.lib.query.search_pull_requests(
Julen Landa Alustiza 89da7f
                self.session, project_id=1, requestid=1
Julen Landa Alustiza 89da7f
            )
Julen Landa Alustiza 89da7f
            # DB model has not been changed
Julen Landa Alustiza 89da7f
            self.assertEqual("PR from the feature branch", request.title)
Julen Landa Alustiza 89da7f
            self.assertEqual(None, request.initial_comment)
Julen Landa Alustiza 89da7f
            self.assertEqual(True, request.allow_rebase)
Julen Landa Alustiza 89da7f
Julen Landa Alustiza 89da7f
    def test_pr_edit_pull_request_post_author(self):
Julen Landa Alustiza 89da7f
        user = tests.FakeUser(username="foo")
Julen Landa Alustiza 89da7f
        with tests.user_set(self.app.application, user):
Julen Landa Alustiza 89da7f
            data = {
Julen Landa Alustiza 89da7f
                "title": "New title",
Julen Landa Alustiza 89da7f
                "initial_comment": "New initial comment",
Julen Landa Alustiza 89da7f
                "allow_rebase": False,
Julen Landa Alustiza 89da7f
                "csrf_token": self.get_csrf(),
Julen Landa Alustiza 89da7f
            }
Julen Landa Alustiza 89da7f
            output = self.app.post(
Julen Landa Alustiza 89da7f
                "/test/pull-request/1/edit", data=data, follow_redirects=True
Julen Landa Alustiza 89da7f
            )
Julen Landa Alustiza 89da7f
            self.assertEqual(output.status_code, 200)
Julen Landa Alustiza 89da7f
            output_text = output.get_data(as_text=True)
Julen Landa Alustiza 89da7f
            # After successful edit, we end on pull_request view with new data
Julen Landa Alustiza 89da7f
            self.assertIn(
Julen Landa Alustiza 89da7f
                "<title>PR#1: New title - test\n - Pagure</title>", output_text
Julen Landa Alustiza 89da7f
            )
Julen Landa Alustiza 89da7f
            self.assertIn(
Julen Landa Alustiza 89da7f
                '\n'
Julen Landa Alustiza 89da7f
                "                  New title\n"
Julen Landa Alustiza 89da7f
                "            ",
Julen Landa Alustiza 89da7f
                output_text,
Julen Landa Alustiza 89da7f
            )
Julen Landa Alustiza 89da7f
            self.assertIn("

New initial comment

", output_text)
Julen Landa Alustiza 89da7f
            request = pagure.lib.query.search_pull_requests(
Julen Landa Alustiza 89da7f
                self.session, project_id=1, requestid=1
Julen Landa Alustiza 89da7f
            )
Julen Landa Alustiza 89da7f
            # DB model has been changed
Julen Landa Alustiza 89da7f
            self.assertEqual("New title", request.title)
Julen Landa Alustiza 89da7f
            self.assertEqual("New initial comment", request.initial_comment)
Julen Landa Alustiza 89da7f
            self.assertEqual(False, request.allow_rebase)
Julen Landa Alustiza 89da7f
Julen Landa Alustiza 89da7f
    def test_pr_edit_pull_request_view_committer(self):
Julen Landa Alustiza 89da7f
        user = tests.FakeUser(username="pingou")
Julen Landa Alustiza 89da7f
        with tests.user_set(self.app.application, user):
Julen Landa Alustiza 89da7f
            output = self.app.get("/test/pull-request/1/edit")
Julen Landa Alustiza 89da7f
            self.assertEqual(output.status_code, 200)
Julen Landa Alustiza 89da7f
            output_text = output.get_data(as_text=True)
Julen Landa Alustiza 89da7f
            # Committer is editing PR #1
Julen Landa Alustiza 89da7f
            self.assertIn(
Julen Landa Alustiza 89da7f
                "<title>Edit PR#1: PR from the feature branch - test - "</title>
Julen Landa Alustiza 89da7f
                "Pagure",
Julen Landa Alustiza 89da7f
                output_text,
Julen Landa Alustiza 89da7f
            )
Julen Landa Alustiza 89da7f
            # Committer has a title input
Julen Landa Alustiza 89da7f
            if self.get_wtforms_version() >= (2, 2):
Julen Landa Alustiza 89da7f
                self.assertIn(
Julen Landa Alustiza 89da7f
                    '
Julen Landa Alustiza 89da7f
                    'required type="text" value="PR from the feature branch">',
Julen Landa Alustiza 89da7f
                    output_text,
Julen Landa Alustiza 89da7f
                )
Julen Landa Alustiza 89da7f
            else:
Julen Landa Alustiza 89da7f
                self.assertIn(
Julen Landa Alustiza 89da7f
                    '
Julen Landa Alustiza 89da7f
                    'type="text" value="PR from the feature branch">',
Julen Landa Alustiza 89da7f
                    output_text,
Julen Landa Alustiza 89da7f
                )
Julen Landa Alustiza 89da7f
            # Committer has an initial_commit textarea
Julen Landa Alustiza 89da7f
            self.assertIn(
Julen Landa Alustiza 89da7f
                '
Julen Landa Alustiza 89da7f
                'id="initial_comment"\n'
Julen Landa Alustiza 89da7f
                '                    name="initial_comment">',
Julen Landa Alustiza 89da7f
                output_text,
Julen Landa Alustiza 89da7f
            )
Julen Landa Alustiza 89da7f
            # Committer has an disabled allow_rebase input
Julen Landa Alustiza 89da7f
            self.assertIn(
Julen Landa Alustiza 89da7f
                '
Julen Landa Alustiza 89da7f
                ' value="y" checked disabled>',
Julen Landa Alustiza 89da7f
                output_text,
Julen Landa Alustiza 89da7f
            )
Julen Landa Alustiza 89da7f
Julen Landa Alustiza 89da7f
    def test_pr_edit_pull_request_post_committer(self):
Julen Landa Alustiza 89da7f
        user = tests.FakeUser(username="pingou")
Julen Landa Alustiza 89da7f
        with tests.user_set(self.app.application, user):
Julen Landa Alustiza 89da7f
            data = {
Julen Landa Alustiza 89da7f
                "title": "New title",
Julen Landa Alustiza 89da7f
                "initial_comment": "New initial comment",
Julen Landa Alustiza 89da7f
                "allow_rebase": False,
Julen Landa Alustiza 89da7f
                "csrf_token": self.get_csrf(),
Julen Landa Alustiza 89da7f
            }
Julen Landa Alustiza 89da7f
            output = self.app.post(
Julen Landa Alustiza 89da7f
                "/test/pull-request/1/edit", data=data, follow_redirects=True
Julen Landa Alustiza 89da7f
            )
Julen Landa Alustiza 89da7f
            self.assertEqual(output.status_code, 200)
Julen Landa Alustiza 89da7f
            output_text = output.get_data(as_text=True)
Julen Landa Alustiza 89da7f
            # After successful edit, we end on pull_request view with new data
Julen Landa Alustiza 89da7f
            self.assertIn(
Julen Landa Alustiza 89da7f
                "<title>PR#1: New title - test\n - Pagure</title>", output_text
Julen Landa Alustiza 89da7f
            )
Julen Landa Alustiza 89da7f
            self.assertIn(
Julen Landa Alustiza 89da7f
                '\n'
Julen Landa Alustiza 89da7f
                "                  New title\n"
Julen Landa Alustiza 89da7f
                "            ",
Julen Landa Alustiza 89da7f
                output_text,
Julen Landa Alustiza 89da7f
            )
Julen Landa Alustiza 89da7f
            self.assertIn("

New initial comment

", output_text)
Julen Landa Alustiza 89da7f
            request = pagure.lib.query.search_pull_requests(
Julen Landa Alustiza 89da7f
                self.session, project_id=1, requestid=1
Julen Landa Alustiza 89da7f
            )
Julen Landa Alustiza 89da7f
            # DB model has been changed
Julen Landa Alustiza 89da7f
            self.assertEqual("New title", request.title)
Julen Landa Alustiza 89da7f
            self.assertEqual("New initial comment", request.initial_comment)
Julen Landa Alustiza 89da7f
            # But allow_rebase remains unchanged
Julen Landa Alustiza 89da7f
            self.assertEqual(True, request.allow_rebase)