示例#1
0
def test_reload_prod(capfd: Capture, faker: Faker) -> None:
    create_project(
        capfd=capfd,
        name=random_project_name(faker),
        auth="no",
        frontend="angular",
    )

    init_project(capfd, " --prod ", "--force")

    start_registry(capfd)
    pull_images(capfd)

    start_project(capfd)

    time.sleep(5)

    exec_command(capfd, "reload backend", "Reloading gunicorn (PID #")

    exec_command(
        capfd,
        "reload",
        "Can't reload the frontend if not explicitly requested",
        "Services reloaded",
    )

    docker = Docker()
    container = docker.get_container("frontend")
    assert container is not None

    docker.client.container.stop(container[0])
    exec_command(capfd, "reload frontend", "Reloading frontend...")

    container = docker.get_container("frontend")

    if Configuration.swarm_mode:
        # frontend reload is always execute in compose mode
        # => the container retrieved from docker.get_container in swarm mode is None
        assert container is None
        # Let's retrieve the container name in compose mode:

        Configuration.swarm_mode = False
        docker = Docker()
        container = docker.get_container("frontend")

        # Let's restore the docker client
        Configuration.swarm_mode = True
        docker = Docker()

    assert container is not None

    docker.client.container.remove(container[0], force=True)
    exec_command(capfd, "reload frontend", "Reloading frontend...")

    exec_command(
        capfd,
        "reload frontend backend",
        "Can't reload frontend and other services at once",
    )
    exec_command(capfd, "remove", "Stack removed")
示例#2
0
    def test_projects(self):
        """ Test the projects function. """
        create_distro(self.session)
        create_project(self.session)

        output = self.app.get('/projects/')
        self.assertEqual(output.status_code, 200)

        expected = """
                <a href="http://www.geany.org/" target="_blank">
                  http://www.geany.org/
                </a>"""
        self.assertTrue(expected in output.data)

        expected = """
                <a href="https://fedorahosted.org/r2spec/" target="_blank">
                  https://fedorahosted.org/r2spec/
                </a>"""
        self.assertTrue(expected in output.data)

        expected = """
                <a href="http://subsurface.hohndel.org/" target="_blank">
                  http://subsurface.hohndel.org/
                </a>"""
        self.assertTrue(expected in output.data)

        self.assertEqual(output.data.count('<a href="/project/'), 3)

        output = self.app.get('/projects/?page=ab')
        self.assertEqual(output.status_code, 200)
        self.assertEqual(output.data.count('<a href="/project/'), 3)
示例#3
0
def test_git(capfd: Capture, faker: Faker) -> None:

    create_project(
        capfd=capfd,
        name=random_project_name(faker),
    )
    init_project(capfd)

    assert git.get_repo("does/not/exist") is None
    do_repo = git.get_repo("submodules/do")
    assert do_repo is not None
    assert git.get_active_branch(None) is None
    assert git.get_active_branch(do_repo) == __version__
    assert not git.switch_branch(None, branch_name="0.7.3")
    # Same branch => no change => return True
    assert git.switch_branch(do_repo, branch_name=__version__)
    assert not git.switch_branch(do_repo, branch_name="XYZ")

    assert git.switch_branch(do_repo, branch_name="0.7.3")
    assert git.get_active_branch(do_repo) == "0.7.3"
    assert git.switch_branch(do_repo, branch_name=__version__)
    assert git.get_active_branch(do_repo) == __version__

    assert git.get_origin(None) is None

    r = git.get_repo(".")
    assert git.get_origin(r) == "https://your_remote_git/your_project.git"

    # Create an invalid repo (i.e. without any remote)
    r = git.init("../justatest")
    assert git.get_origin(r) is None
示例#4
0
    def test_projects_search(self):
        """ Test the projects_search function. """
        create_distro(self.session)
        create_project(self.session)

        output = self.app.get('/projects/search/g')
        self.assertEqual(output.status_code, 200)
        self.assertEqual(output.data.count('<a href="/project/'), 1)

        output = self.app.get('/projects/search/g*')
        self.assertEqual(output.status_code, 200)
        expected = """
                  <a href="http://www.geany.org/" target="_blank">
                    http://www.geany.org/
                  </a>"""
        self.assertTrue(expected in output.data)

        self.assertEqual(output.data.count('<a href="/project/'), 1)

        output = self.app.get('/projects/search/?page=ab')
        self.assertEqual(output.status_code, 200)
        self.assertTrue(expected in output.data)
        self.assertEqual(output.data.count('<a href="/project/'), 3)

        output = self.app.get('/projects/search/geany*', follow_redirects=True)
        self.assertEqual(output.status_code, 200)

        expected = '<li class="list-group-item list-group-item-default">' \
            'Only one result matching with an ' \
            'exact match, redirecting</li>'
        self.assertTrue(expected in output.data)
示例#5
0
    def test_api_projects_names(self):
        """ Test the api_projects_names function of the API. """
        create_distro(self.session)
        output = self.app.get('/api/projects/names')
        self.assertEqual(output.status_code, 200)
        data = _read_json(output)

        exp = {"projects": [], "total": 0}
        self.assertEqual(data, exp)

        create_project(self.session)
        create_package(self.session)

        output = self.app.get('/api/projects/names/')
        self.assertEqual(output.status_code, 200)
        data = _read_json(output)

        exp = {"projects": ["geany", "R2spec", "subsurface"], "total": 3}
        self.assertEqual(data, exp)

        output = self.app.get('/api/projects/names/?pattern=ge')
        self.assertEqual(output.status_code, 200)
        data = _read_json(output)

        exp = {"projects": ["geany"], "total": 1}
        self.assertEqual(data, exp)
示例#6
0
    def test_log_search(self):
        """ Test the Log.search function. """
        create_project(self.session)

        logs = model.Log.search(self.session)
        self.assertEqual(len(logs), 3)
        self.assertEqual(logs[0].description,
                         '[email protected] added project: R2spec')
        self.assertEqual(
            logs[1].description,
            '[email protected] added project: subsurface')
        self.assertEqual(logs[2].description,
                         '[email protected] added project: geany')

        logs = model.Log.search(self.session, count=True)
        self.assertEqual(logs, 3)

        from_date = datetime.datetime.utcnow().date() - datetime.timedelta(
            days=1)
        logs = model.Log.search(self.session,
                                from_date=from_date,
                                offset=1,
                                limit=1)
        self.assertEqual(len(logs), 1)
        self.assertEqual(
            logs[0].description,
            '[email protected] added project: subsurface')

        logs = model.Log.search(self.session, project_name='subsurface')
        self.assertEqual(len(logs), 1)
        self.assertEqual(
            logs[0].description,
            '[email protected] added project: subsurface')
示例#7
0
    def test_projects(self):
        """ Test the projects function. """
        create_distro(self.session)
        create_project(self.session)

        output = self.app.get('/projects/')
        self.assertEqual(output.status_code, 200)

        expected = """
                <a href="http://www.geany.org/" target="_blank">
                  http://www.geany.org/
                </a>"""
        self.assertTrue(expected in output.data)

        expected = """
                <a href="https://fedorahosted.org/r2spec/" target="_blank">
                  https://fedorahosted.org/r2spec/
                </a>"""
        self.assertTrue(expected in output.data)

        expected = """
                <a href="http://subsurface.hohndel.org/" target="_blank">
                  http://subsurface.hohndel.org/
                </a>"""
        self.assertTrue(expected in output.data)

        self.assertEqual(output.data.count('<a href="/project/'), 3)

        output = self.app.get('/projects/?page=ab')
        self.assertEqual(output.status_code, 200)
        self.assertEqual(output.data.count('<a href="/project/'), 3)
示例#8
0
def test_reload_dev(capfd: Capture, faker: Faker) -> None:
    create_project(
        capfd=capfd,
        name=random_project_name(faker),
        auth="no",
        frontend="no",
    )
    init_project(capfd)
    start_registry(capfd)

    pull_images(capfd)

    start_project(capfd)

    time.sleep(5)

    # For each support service verify:
    #   1) a start line in the logs
    #   2) the container is not re-created after the command
    #   3) the start line in the logs is printed again
    #   4) some more deep check based on the service?
    #      For example API is loading a change in the code?
    exec_command(capfd, "reload backend", "Reloading Flask...")

    exec_command(capfd, "remove", "Stack removed")

    if Configuration.swarm_mode:
        exec_command(capfd, "remove registry", "Service registry removed")
示例#9
0
    def test_projects_search(self):
        """ Test the projects_search function. """
        create_distro(self.session)
        create_project(self.session)

        output = self.app.get("/projects/search/g")
        self.assertEqual(output.status_code, 200)
        self.assertEqual(output.data.count(b'<a href="/project/'), 1)

        output = self.app.get("/projects/search/g*")
        self.assertEqual(output.status_code, 200)
        expected = b"""
                  <a href="http://www.geany.org/" target="_blank">
                    http://www.geany.org/
                  </a>"""
        self.assertTrue(expected in output.data)

        self.assertEqual(output.data.count(b'<a href="/project/'), 1)

        output = self.app.get("/projects/search/?page=ab")
        self.assertEqual(output.status_code, 200)
        self.assertTrue(expected in output.data)
        self.assertEqual(output.data.count(b'<a href="/project/'), 3)

        output = self.app.get("/projects/search/geany*", follow_redirects=True)
        self.assertEqual(output.status_code, 200)

        expected = (
            b'<li class="list-group-item list-group-item-default">'
            b"Only one result matching with an "
            b"exact match, redirecting</li>"
        )
        self.assertTrue(expected in output.data)
示例#10
0
    def test_distro(self):
        """ Test the distro function. """
        create_distro(self.session)
        create_project(self.session)

        output = self.app.get('/distro/Fedora/')
        self.assertEqual(output.status_code, 200)

        expected = """
  <blockquote>
      Oups this is embarrassing, it seems that no projects are being
      monitored currently.
  </blockquote>"""
        self.assertTrue(expected in output.data)
        self.assertTrue(
            'form action="/distro/Fedora/search/" role="form">'
            in output.data)
        self.assertTrue(
            '<h1>Projects of Fedora monitored</h1>' in output.data)

        output = self.app.get('/distro/Fedora/?page=ab')
        self.assertEqual(output.status_code, 200)
        self.assertTrue(expected in output.data)
        self.assertTrue(
            'form action="/distro/Fedora/search/" role="form">'
            in output.data)
        self.assertTrue(
            '<h1>Projects of Fedora monitored</h1>' in output.data)
示例#11
0
    def test_distro_repr(self):
        """ Test the __repr__ function of Project. """
        create_project(self.session)

        obs = '<Project(geany, http://www.geany.org/)>'
        project = model.Project.by_id(self.session, 1)
        self.assertEqual(str(project), obs)
示例#12
0
    def test_log_search(self):
        """ Test the Log.search function. """
        create_project(self.session)

        logs = model.Log.search(self.session)
        self.assertEqual(len(logs), 3)
        self.assertEqual(
            logs[0].description,
            '[email protected] added project: R2spec')
        self.assertEqual(
            logs[1].description,
            '[email protected] added project: subsurface')
        self.assertEqual(
            logs[2].description,
            '[email protected] added project: geany')

        logs = model.Log.search(self.session, count=True)
        self.assertEqual(logs, 3)

        from_date = datetime.datetime.utcnow().date() - datetime.timedelta(days=1)
        logs = model.Log.search(
            self.session, from_date=from_date, offset=1, limit=1)
        self.assertEqual(len(logs), 1)
        self.assertEqual(
            logs[0].description,
            '[email protected] added project: subsurface')

        logs = model.Log.search(self.session, project_name='subsurface')
        self.assertEqual(len(logs), 1)
        self.assertEqual(
            logs[0].description,
            '[email protected] added project: subsurface')
示例#13
0
def test_base(capfd: Capture) -> None:

    execute_outside(capfd, "update")

    create_project(
        capfd=capfd,
        name="third",
        auth="postgres",
        frontend="angular",
    )
    init_project(capfd)

    # Skipping main because we are on a fake git repository
    exec_command(
        capfd,
        "update -i main",
        "All updated",
    )

    open("submodules/do/temp.file", "a").close()
    with open("submodules/do/setup.py", "a") as f:
        f.write("# added from tests\n")

    exec_command(
        capfd,
        "update -i main",
        "Unable to update do repo, you have unstaged files",
        "Untracked files:",
        "submodules/do/temp.file",
        "Changes not staged for commit:",
        "submodules/do/setup.py",
        "Can't continue with updates",
    )
示例#14
0
    def test_distro(self):
        """ Test the distro function. """
        create_distro(self.session)
        create_project(self.session)

        output = self.app.get('/distro/Fedora/')
        self.assertEqual(output.status_code, 200)

        expected = b"""
  <blockquote>
      Oups this is embarrassing, it seems that no projects are being
      monitored currently.
  </blockquote>"""
        self.assertTrue(expected in output.data)
        self.assertTrue(b'form action="/distro/Fedora/search/" role="form" '
                        b'class="form-inline">' in output.data)
        self.assertTrue(
            b'<h1>Projects of Fedora monitored</h1>' in output.data)

        output = self.app.get('/distro/Fedora/?page=ab')
        self.assertEqual(output.status_code, 200)
        self.assertTrue(expected in output.data)
        self.assertTrue(b'form action="/distro/Fedora/search/" role="form" '
                        b'class="form-inline">' in output.data)
        self.assertTrue(
            b'<h1>Projects of Fedora monitored</h1>' in output.data)
示例#15
0
    def test_projects_search(self):
        """ Test the projects_search function. """
        create_distro(self.session)
        create_project(self.session)

        output = self.app.get('/projects/search/g')
        self.assertEqual(output.status_code, 200)

        expected = """
                  <a href="http://www.geany.org/" target="_blank">
                    http://www.geany.org/
                  </a>"""
        self.assertTrue(expected in output.data)

        self.assertEqual(output.data.count('<a href="/project/'), 1)

        output = self.app.get('/projects/search/?page=ab')
        self.assertEqual(output.status_code, 200)
        self.assertTrue(expected in output.data)
        self.assertEqual(output.data.count('<a href="/project/'), 3)

        output = self.app.get(
            '/projects/search/geany*', follow_redirects=True)
        self.assertEqual(output.status_code, 200)

        expected = '<li class="message">Only one result matching with an '\
            'exact match, redirecting</li>'
        self.assertTrue(expected in output.data)
示例#16
0
    def test_packages__repr__(self):
        """ Test the Packages.__repr__ function. """
        create_project(self.session)
        create_distro(self.session)
        create_package(self.session)

        pkg = model.Packages.by_id(self.session, 1)
        self.assertEqual(str(pkg), '<Packages(1, Fedora: geany)>')
示例#17
0
    def test_packages__repr__(self):
        """ Test the Packages.__repr__ function. """
        create_project(self.session)
        create_distro(self.session)
        create_package(self.session)

        pkg = model.Packages.by_id(self.session, 1)
        self.assertEqual(str(pkg), '<Packages(1, Fedora: geany)>')
示例#18
0
    def test_packages_by_id(self):
        """ Test the Packages.by_id function. """
        create_project(self.session)
        create_distro(self.session)
        create_package(self.session)

        pkg = model.Packages.by_id(self.session, 1)
        self.assertEqual(pkg.package_name, 'geany')
        self.assertEqual(pkg.distro, 'Fedora')
示例#19
0
    def test_project_init(self):
        """ Test the __init__ function of Project. """
        create_project(self.session)
        self.assertEqual(3, model.Project.all(self.session, count=True))

        projects = model.Project.all(self.session)
        self.assertEqual(projects[0].name, 'geany')
        self.assertEqual(projects[1].name, 'R2spec')
        self.assertEqual(projects[2].name, 'subsurface')
示例#20
0
    def test_packages_by_id(self):
        """ Test the Packages.by_id function. """
        create_project(self.session)
        create_distro(self.session)
        create_package(self.session)

        pkg = model.Packages.by_id(self.session, 1)
        self.assertEqual(pkg.package_name, 'geany')
        self.assertEqual(pkg.distro, 'Fedora')
示例#21
0
    def test_init_project(self):
        """ Test the __init__ function of Project. """
        create_project(self.session)
        self.assertEqual(3, model.Project.all(self.session, count=True))

        projects = model.Project.all(self.session)
        self.assertEqual(projects[0].name, 'geany')
        self.assertEqual(projects[1].name, 'R2spec')
        self.assertEqual(projects[2].name, 'subsurface')
示例#22
0
    def test_project_by_name(self):
        """ Test the by_name function of Project. """
        create_project(self.session)

        project = model.Project.by_name(self.session, 'geany')
        self.assertEqual(project[0].name, 'geany')
        self.assertEqual(project[0].homepage, 'http://www.geany.org/')

        project = model.Project.by_name(self.session, 'terminal')
        self.assertEqual(project, [])
示例#23
0
    def test_project_search(self):
        """ Test the search function of Project. """
        create_project(self.session)

        projects = model.Project.search(self.session, 'gea')
        self.assertEqual(projects, [])

        projects = model.Project.search(self.session, 'gea*')
        self.assertEqual(projects[0].name, 'geany')
        self.assertEqual(projects[0].homepage, 'http://www.geany.org/')
示例#24
0
    def test_project_search(self):
        """ Test the Project.search function. """
        create_project(self.session)

        projects = model.Project.search(self.session, '*', count=True)
        self.assertEqual(projects, 3)

        projects = model.Project.search(self.session, '*', page=2)
        self.assertEqual(len(projects), 0)

        projects = model.Project.search(self.session, '*', page='asd')
        self.assertEqual(len(projects), 3)
示例#25
0
    def test_project_search(self):
        """ Test the Project.search function. """
        create_project(self.session)

        projects = model.Project.search(self.session, '*', count=True)
        self.assertEqual(projects, 3)

        projects = model.Project.search(self.session, '*', page=2)
        self.assertEqual(len(projects), 0)

        projects = model.Project.search(self.session, '*', page='asd')
        self.assertEqual(len(projects), 3)
示例#26
0
    def test_api_get_project_distro(self):
        """ Test the api_get_project_distro function of the API. """
        create_distro(self.session)
        output = self.app.get('/api/project/Fedora/geany')
        self.assertEqual(output.status_code, 404)
        data = json.loads(output.data)

        exp = {
            "error": "No package \"geany\" found in distro \"Fedora\"",
            "output": "notok"
        }
        self.assertEqual(data, exp)

        create_project(self.session)
        create_package(self.session)

        output = self.app.get('/api/project/Fedora/gnome-terminal/')
        self.assertEqual(output.status_code, 404)
        data = json.loads(output.data)

        exp = {
            "error": "No package \"gnome-terminal\" found in distro "
                     "\"Fedora\"",
            "output": "notok"
        }
        self.assertEqual(data, exp)

        output = self.app.get('/api/project/Fedora/geany/')
        self.assertEqual(output.status_code, 200)
        data = json.loads(output.data)

        del(data['created_on'])
        del(data['updated_on'])

        exp = {
            "id": 1,
            "backend": "custom",
            "homepage": "http://www.geany.org/",
            "name": "geany",
            "regex": 'DEFAULT',
            "version": None,
            "version_url": 'http://www.geany.org/Download/Releases',
            "versions": [],
            "packages": [
                {
                  "distro": "Fedora",
                  "package_name": "geany"
                }
            ],
        }

        self.assertEqual(data, exp)
示例#27
0
    def test_project_all(self):
        """ Test the all function of Project. """
        create_project(self.session)

        projects = model.Project.all(self.session)
        self.assertEqual(projects[0].name, 'geany')
        self.assertEqual(projects[0].homepage, 'http://www.geany.org/')
        self.assertEqual(projects[1].name, 'R2spec')
        self.assertEqual(
            projects[1].homepage, 'https://fedorahosted.org/r2spec/')

        projects = model.Project.all(self.session, page=3)
        self.assertEqual(projects, [])
示例#28
0
    def test_distros(self):
        """ Test the distros function. """
        create_distro(self.session)
        create_project(self.session)

        output = self.app.get('/distros/')
        self.assertEqual(output.status_code, 200)

        expected = "Here is the list of all the distributions"
        self.assertTrue(expected in output.data)

        output = self.app.get('/distros/?page=ab')
        self.assertEqual(output.status_code, 200)
        self.assertTrue(expected in output.data)
示例#29
0
    def test_distros(self):
        """ Test the distros function. """
        create_distro(self.session)
        create_project(self.session)

        output = self.app.get('/distros/')
        self.assertEqual(output.status_code, 200)

        expected = "Here is the list of all the distributions"
        self.assertTrue(expected in output.data)

        output = self.app.get('/distros/?page=ab')
        self.assertEqual(output.status_code, 200)
        self.assertTrue(expected in output.data)
示例#30
0
def test_autocomplete(capfd: Capture, faker: Faker) -> None:

    create_project(
        capfd=capfd,
        name=random_project_name(faker),
    )
    init_project(capfd)

    app = Application()

    values = app.autocomplete_service(None, None, "")  # type: ignore
    assert len(values) > 0
    assert "backend" in values
    values = app.autocomplete_service(None, None, "invalid")  # type: ignore
    assert len(values) == 0
    values = app.autocomplete_service(None, None, "b")  # type: ignore
    assert len(values) >= 1
    assert "backend" in values

    values = app.autocomplete_allservice(None, None, "")  # type: ignore
    assert len(values) > 0
    assert "backend" in values
    values = app.autocomplete_allservice(None, None, "invalid")  # type: ignore
    assert len(values) == 0
    values = app.autocomplete_allservice(None, None, "b")  # type: ignore
    assert len(values) >= 1
    assert "backend" in values
    values = app.autocomplete_allservice(None, None, "c")  # type: ignore
    assert len(values) >= 1
    assert "backend" not in values

    values = app.autocomplete_submodule(None, None, "")  # type: ignore
    assert len(values) > 0
    assert "main" in values
    values = app.autocomplete_submodule(None, None, "invalid")  # type: ignore
    assert len(values) == 0
    values = app.autocomplete_submodule(None, None, "m")  # type: ignore
    assert len(values) >= 1
    assert "main" in values
    values = app.autocomplete_submodule(None, None, "d")  # type: ignore
    assert len(values) >= 1
    assert "main" not in values

    os.unlink(".rapydo")
    values = app.autocomplete_service(None, None, "")  # type: ignore
    assert len(values) == 0
    values = app.autocomplete_allservice(None, None, "")  # type: ignore
    assert len(values) == 0
    values = app.autocomplete_submodule(None, None, "")  # type: ignore
    assert len(values) == 0
示例#31
0
    def test_api_get_project_distro(self):
        """ Test the api_get_project_distro function of the API. """
        create_distro(self.session)
        output = self.app.get('/api/project/Fedora/geany')
        self.assertEqual(output.status_code, 404)
        data = _read_json(output)

        exp = {
            "error": "No package \"geany\" found in distro \"Fedora\"",
            "output": "notok"
        }
        self.assertEqual(data, exp)

        create_project(self.session)
        create_package(self.session)

        output = self.app.get('/api/project/Fedora/gnome-terminal/')
        self.assertEqual(output.status_code, 404)
        data = _read_json(output)

        exp = {
            "error": "No package \"gnome-terminal\" found in distro "
            "\"Fedora\"",
            "output": "notok"
        }
        self.assertEqual(data, exp)

        output = self.app.get('/api/project/Fedora/geany/')
        self.assertEqual(output.status_code, 200)
        data = _read_json(output)

        del (data['created_on'])
        del (data['updated_on'])

        exp = {
            "id": 1,
            "backend": "custom",
            "homepage": "http://www.geany.org/",
            "name": "geany",
            "regex": 'DEFAULT',
            "version": None,
            "version_url": 'http://www.geany.org/Download/Releases',
            "versions": [],
            "packages": [{
                "distro": "Fedora",
                "package_name": "geany"
            }],
        }

        self.assertEqual(data, exp)
示例#32
0
def test_cronjobs(capfd: Capture, faker: Faker) -> None:

    project = random_project_name(faker)
    create_project(
        capfd=capfd,
        name=project,
        auth="postgres",
        frontend="no",
    )
    init_project(capfd, "-e CRONTAB_ENABLE=1")
    start_registry(capfd)
    pull_images(capfd)
    start_project(capfd)

    exec_command(capfd, "status")

    exec_command(
        capfd,
        "logs --tail 50 backend",
        # Logs are not prefixed because only one service is shown
        "Found no cronjob to be enabled, skipping crontab setup",
        "Testing mode",
    )

    with open(f"projects/{project}/backend/cron/hello-world.cron", "w+") as f:
        f.write("* * * * * echo 'Hello world' >> /var/log/cron.log 2>&1\n")
        f.write("\n")

    exec_command(
        capfd,
        "-e CRONTAB_ENABLE=1 start --force",
        "Stack started",
    )

    if Configuration.swarm_mode:
        time.sleep(10)

    exec_command(
        capfd,
        "logs --tail 50 backend",
        # Logs are not prefixed because only one service is shown
        # "Testing mode",
        "Enabling cron...",
        "Cron enabled",
        # this is the output of crontab -l that verifies the cronjob installation
        "* * * * * echo 'Hello world'",
    )
示例#33
0
    def test_api_packages_wiki_list(self):
        """ Test the api_packages_wiki_list function of the API. """
        create_distro(self.session)
        output = self.app.get('/api/packages/wiki/')
        self.assertEqual(output.status_code, 200)

        self.assertEqual(output.data, '')

        create_project(self.session)
        create_package(self.session)

        output = self.app.get('/api/packages/wiki/')
        self.assertEqual(output.status_code, 200)

        exp = "* geany DEFAULT http://www.geany.org/Download/Releases\n"\
            "* subsurface DEFAULT http://subsurface.hohndel.org/downloads/"
        self.assertEqual(output.data, exp)
示例#34
0
def test_dump(capfd: Capture, faker: Faker) -> None:

    execute_outside(capfd, "dump")

    create_project(
        capfd=capfd,
        name=random_project_name(faker),
        auth="postgres",
        frontend="no",
    )
    init_project(capfd)

    exec_command(
        capfd,
        "dump",
        "Config dump: docker-compose.yml",
    )
示例#35
0
    def test_distro_projects_search(self):
        """ Test the distro_projects_search function. """
        create_distro(self.session)
        create_project(self.session)

        output = self.app.get('/distro/Fedora/search/gua')
        self.assertEqual(output.status_code, 200)

        expected = """
    <blockquote>
        Oups this is embarrassing, it seems that no projects are being
        monitored currently.
    </blockquote>"""
        self.assertTrue(expected in output.data)
        self.assertTrue(
            'form action="/distro/Fedora/search/" role="form">' in output.data)
        self.assertTrue('<h1>Search projects in Fedora</h1>' in output.data)
示例#36
0
    def test_api_packages_wiki_list(self):
        """ Test the api_packages_wiki_list function of the API. """
        create_distro(self.session)
        output = self.app.get('/api/packages/wiki/')
        self.assertEqual(output.status_code, 200)

        self.assertEqual(output.data, b'')

        create_project(self.session)
        create_package(self.session)

        output = self.app.get('/api/packages/wiki/')
        self.assertEqual(output.status_code, 200)

        exp = b"* geany DEFAULT http://www.geany.org/Download/Releases\n"\
            b"* subsurface DEFAULT http://subsurface.hohndel.org/downloads/"
        self.assertEqual(output.data, exp)
示例#37
0
    def test_project(self):
        """ Test the project function. """
        create_distro(self.session)
        create_project(self.session)

        output = self.app.get('/project/1/')
        self.assertEqual(output.status_code, 200)

        expected = """
            <p><a property="doap:homepage" href="http://www.geany.org/"
               target="_blank">http://www.geany.org/
             </a><p>"""

        self.assertTrue(expected in output.data)

        output = self.app.get('/project/10/')
        self.assertEqual(output.status_code, 404)
示例#38
0
    def test_project(self):
        """ Test the project function. """
        create_distro(self.session)
        create_project(self.session)

        output = self.app.get('/project/1/')
        self.assertEqual(output.status_code, 200)

        expected = """
            <p><a property="doap:homepage" href="http://www.geany.org/"
               target="_blank">http://www.geany.org/
             </a><p>"""

        self.assertTrue(expected in output.data)

        output = self.app.get('/project/10/')
        self.assertEqual(output.status_code, 404)
示例#39
0
    def test_distro_projects_search(self):
        """ Test the distro_projects_search function. """
        create_distro(self.session)
        create_project(self.session)

        output = self.app.get("/distro/Fedora/search/gua")
        self.assertEqual(output.status_code, 200)

        expected = b"""
    <blockquote>
        Oups this is embarrassing, it seems that no projects are being
        monitored currently.
        <p><a href="/project/new?name=gua">Click Here</a> to add this project instead. </p>
    </blockquote>"""
        self.assertTrue(expected in output.data)
        self.assertTrue(b'form action="/distro/Fedora/search/" role="form">' in output.data)
        self.assertTrue(b"<h1>Search projects in Fedora</h1>" in output.data)
示例#40
0
def test_all(capfd: Capture) -> None:

    exec_command(capfd, "restart", "This command is no longer available")

    create_project(
        capfd=capfd,
        name="first",
        auth="postgres",
        frontend="no",
    )
    init_project(capfd)
    start_registry(capfd)
    pull_images(capfd)
    start_project(capfd)

    start_date1 = get_container_start_date(capfd, "backend")
    exec_command(
        capfd,
        "start",
        "Stack started",
    )

    start_date2 = get_container_start_date(capfd, "backend")

    # The service is not restarted because its definition is unchanged
    assert start_date1 == start_date2

    if Configuration.swarm_mode:
        exec_command(
            capfd,
            "remove backend",
            "first_backend scaled to 0",
            "verify: Service converged",
            "Services removed",
        )

    exec_command(
        capfd,
        "start --force",
        "Stack started",
    )

    start_date3 = get_container_start_date(capfd, "backend")

    assert start_date2 != start_date3
示例#41
0
    def test_edit_project(self):
        """ Test the edit_project function of Distro. """
        create_distro(self.session)
        create_project(self.session)

        project_objs = anitya.lib.model.Project.all(self.session)
        self.assertEqual(len(project_objs), 3)
        self.assertEqual(project_objs[0].name, 'geany')
        self.assertEqual(project_objs[0].homepage, 'http://www.geany.org/')
        self.assertEqual(project_objs[1].name, 'R2spec')
        self.assertEqual(project_objs[2].name, 'subsurface')

        anitya.lib.edit_project(
            self.session,
            project=project_objs[0],
            name=project_objs[0].name,
            homepage='http://www.geany.org',
            backend='PyPI',
            version_url=None,
            version_prefix=None,
            regex=None,
            insecure=False,
            user_id='*****@*****.**')

        project_objs = anitya.lib.model.Project.all(self.session)
        self.assertEqual(len(project_objs), 3)
        self.assertEqual(project_objs[0].name, 'geany')
        self.assertEqual(project_objs[0].homepage, 'http://www.geany.org')
        self.assertEqual(project_objs[1].name, 'R2spec')
        self.assertEqual(project_objs[2].name, 'subsurface')

        self.assertRaises(
            AnityaException,
            anitya.lib.edit_project,
            self.session,
            project=project_objs[2],
            name='geany',
            homepage='http://www.geany.org',
            backend=project_objs[2].backend,
            version_url=project_objs[2].version_url,
            version_prefix=None,
            regex=project_objs[2].regex,
            insecure=False,
            user_id='*****@*****.**',
        )
示例#42
0
    def test_project_by_homepage(self):
        """ Test the by_homepage function of Project. """
        create_project(self.session)

        projects = model.Project.by_homepage(
            self.session, 'http://www.geany.org/')
        self.assertEqual(len(projects), 1)
        self.assertEqual(projects[0].name, 'geany')
        self.assertEqual(projects[0].homepage, 'http://www.geany.org/')

        projects = model.Project.by_homepage(
            self.session, 'http://subsurface.hohndel.org/')
        self.assertEqual(len(projects), 1)
        self.assertEqual(projects[0].name, 'subsurface')
        self.assertEqual(projects[0].homepage, 'http://subsurface.hohndel.org/')

        project = model.Project.by_homepage(self.session, 'terminal')
        self.assertEqual(project, [])
示例#43
0
    def test_distros(self):
        """ Test the distros function. """
        create_distro(self.session)
        create_project(self.session)

        output = self.app.get('/distros/')
        self.assertEqual(output.status_code, 200)

        expected = """
  <p>
    Here is the list of all the distribution having at least one project
    mapped as a package of this distribution and monitored by anitya.
  </p>"""
        self.assertTrue(expected in output.data)

        output = self.app.get('/distros/?page=ab')
        self.assertEqual(output.status_code, 200)
        self.assertTrue(expected in output.data)
示例#44
0
    def test_api_get_project(self):
        """ Test the api_get_project function of the API. """
        create_distro(self.session)
        output = self.app.get('/api/project/')
        self.assertEqual(output.status_code, 404)

        output = self.app.get('/api/project/10')
        self.assertEqual(output.status_code, 404)
        data = _read_json(output)

        exp = {"error": "no such project", "output": "notok"}
        self.assertEqual(data, exp)

        create_project(self.session)
        create_package(self.session)

        output = self.app.get('/api/project/10')
        self.assertEqual(output.status_code, 404)

        output = self.app.get('/api/project/1')
        self.assertEqual(output.status_code, 200)
        data = _read_json(output)

        del(data['created_on'])
        del(data['updated_on'])

        exp = {
            "id": 1,
            "backend": "custom",
            "homepage": "http://www.geany.org/",
            "name": "geany",
            "regex": 'DEFAULT',
            "version": None,
            "version_url": 'http://www.geany.org/Download/Releases',
            "versions": [],
            "packages": [
                {
                  "distro": "Fedora",
                  "package_name": "geany"
                }
            ],
        }

        self.assertEqual(exp, data)
示例#45
0
    def test_edit_project(self):
        """ Test the edit_project function of Distro. """
        create_distro(self.session)
        create_project(self.session)

        project_objs = anitya.lib.model.Project.all(self.session)
        self.assertEqual(len(project_objs), 3)
        self.assertEqual(project_objs[0].name, 'geany')
        self.assertEqual(project_objs[0].homepage, 'http://www.geany.org/')
        self.assertEqual(project_objs[1].name, 'R2spec')
        self.assertEqual(project_objs[2].name, 'subsurface')

        anitya.lib.edit_project(self.session,
                                project=project_objs[0],
                                name=project_objs[0].name,
                                homepage='http://www.geany.org',
                                backend='PyPI',
                                version_url=None,
                                version_prefix=None,
                                regex=None,
                                insecure=False,
                                user_mail='*****@*****.**')

        project_objs = anitya.lib.model.Project.all(self.session)
        self.assertEqual(len(project_objs), 3)
        self.assertEqual(project_objs[0].name, 'geany')
        self.assertEqual(project_objs[0].homepage, 'http://www.geany.org')
        self.assertEqual(project_objs[1].name, 'R2spec')
        self.assertEqual(project_objs[2].name, 'subsurface')

        self.assertRaises(
            AnityaException,
            anitya.lib.edit_project,
            self.session,
            project=project_objs[2],
            name='geany',
            homepage='http://www.geany.org',
            backend=project_objs[2].backend,
            version_url=project_objs[2].version_url,
            version_prefix=None,
            regex=project_objs[2].regex,
            insecure=False,
            user_mail='*****@*****.**',
        )
示例#46
0
    def test_api_get_project(self):
        """ Test the api_get_project function of the API. """
        create_distro(self.session)
        output = self.app.get('/api/project/')
        self.assertEqual(output.status_code, 404)

        output = self.app.get('/api/project/10')
        self.assertEqual(output.status_code, 404)
        data = json.loads(output.data)

        exp = {"error": "no such project", "output": "notok"}
        self.assertEqual(data, exp)

        create_project(self.session)
        create_package(self.session)

        output = self.app.get('/api/project/10')
        self.assertEqual(output.status_code, 404)

        output = self.app.get('/api/project/1')
        self.assertEqual(output.status_code, 200)
        data = json.loads(output.data)

        del (data['created_on'])
        del (data['updated_on'])

        exp = {
            "id": 1,
            "backend": "custom",
            "homepage": "http://www.geany.org/",
            "name": "geany",
            "regex": 'DEFAULT',
            "version": None,
            "version_url": 'http://www.geany.org/Download/Releases',
            "versions": [],
            "packages": [{
                "distro": "Fedora",
                "package_name": "geany"
            }],
        }

        self.assertEqual(exp, data)
示例#47
0
def test_redis_invalid_characters(capfd: Capture, faker: Faker) -> None:

    create_project(
        capfd=capfd,
        name=random_project_name(faker),
        auth="no",
        frontend="no",
        services=["redis"],
        extra="--env REDIS_PASSWORD=invalid#password",
    )

    informative = "Some special characters, including #, are not allowed "
    informative += "because make some clients to fail to connect"

    exec_command(
        capfd,
        "init --force",
        "Not allowed characters found in REDIS_PASSWORD.",
        informative,
    )
示例#48
0
    def test_project_by_id(self):
        """ Test the by_id function of Project. """
        create_project(self.session)

        project = model.Project.by_id(self.session, 1)
        self.assertEqual(project.name, 'geany')
        self.assertEqual(project.homepage, 'http://www.geany.org/')

        project = model.Project.get(self.session, 1)
        self.assertEqual(project.name, 'geany')
        self.assertEqual(project.homepage, 'http://www.geany.org/')

        project = model.Project.by_id(self.session, 2)
        self.assertEqual(project.name, 'subsurface')
        self.assertEqual(project.homepage, 'http://subsurface.hohndel.org/')

        project = model.Project.get(self.session, 2)
        self.assertEqual(project.name, 'subsurface')
        self.assertEqual(project.homepage, 'http://subsurface.hohndel.org/')

        project = model.Project.by_id(self.session, 10)
        self.assertEqual(project, None)
示例#49
0
    def test_api_projects_names(self):
        """ Test the api_projects_names function of the API. """
        create_distro(self.session)
        output = self.app.get('/api/projects/names')
        self.assertEqual(output.status_code, 200)
        data = json.loads(output.data)

        exp = {"projects": [], "total": 0}
        self.assertEqual(data, exp)

        create_project(self.session)
        create_package(self.session)

        output = self.app.get('/api/projects/names/')
        self.assertEqual(output.status_code, 200)
        data = json.loads(output.data)

        exp = {
            "projects": [
                "geany",
                "R2spec",
                "subsurface"
            ],
            "total": 3
        }
        self.assertEqual(data, exp)

        output = self.app.get('/api/projects/names/?pattern=ge')
        self.assertEqual(output.status_code, 200)
        data = json.loads(output.data)

        exp = {
            "projects": [
                "geany"
            ],
            "total": 1
        }
        self.assertEqual(data, exp)
示例#50
0
    def test_map_project(self):
        """ Test the map_project function of Distro. """
        create_distro(self.session)
        create_project(self.session)

        project_obj = anitya.lib.model.Project.get(self.session, 1)
        self.assertEqual(project_obj.name, 'geany')
        self.assertEqual(len(project_obj.packages), 0)

        # Map `geany` project to CentOS
        anitya.lib.map_project(
            self.session,
            project=project_obj,
            package_name='geany',
            distribution='CentOS',
            user_mail='*****@*****.**',
            old_package_name=None,
        )
        self.session.commit()

        project_obj = anitya.lib.model.Project.get(self.session, 1)
        self.assertEqual(project_obj.name, 'geany')
        self.assertEqual(len(project_obj.packages), 1)
        self.assertEqual(project_obj.packages[0].package_name, 'geany')
        self.assertEqual(project_obj.packages[0].distro, 'CentOS')

        # Map `geany` project to CentOS, exactly the same way
        anitya.lib.map_project(
            self.session,
            project=project_obj,
            package_name='geany2',
            distribution='CentOS',
            user_mail='*****@*****.**',
            old_package_name=None,
        )
        self.session.commit()

        project_obj = anitya.lib.model.Project.get(self.session, 1)
        self.assertEqual(project_obj.name, 'geany')
        self.assertEqual(len(project_obj.packages), 2)
        self.assertEqual(project_obj.packages[0].package_name, 'geany')
        self.assertEqual(project_obj.packages[0].distro, 'CentOS')
        self.assertEqual(project_obj.packages[1].package_name, 'geany2')
        self.assertEqual(project_obj.packages[1].distro, 'CentOS')

        # Edit the mapping of the `geany` project to Fedora
        anitya.lib.map_project(
            self.session,
            project=project_obj,
            package_name='geany3',
            distribution='Fedora',
            user_mail='*****@*****.**',
            old_package_name='geany',
            old_distro_name='CentOS',
        )
        self.session.commit()

        project_obj = anitya.lib.model.Project.get(self.session, 1)
        self.assertEqual(project_obj.name, 'geany')
        self.assertEqual(len(project_obj.packages), 2)
        pkgs = sorted(project_obj.packages, key=lambda x: x.package_name)
        self.assertEqual(pkgs[0].package_name, 'geany2')
        self.assertEqual(pkgs[0].distro, 'CentOS')
        self.assertEqual(pkgs[1].package_name, 'geany3')
        self.assertEqual(pkgs[1].distro, 'Fedora')

        # Edit the mapping of the `geany` project to Fedora
        project_obj = anitya.lib.model.Project.get(self.session, 2)
        self.assertEqual(project_obj.name, 'subsurface')
        self.assertEqual(len(project_obj.packages), 0)

        self.assertRaises(
            anitya.lib.exceptions.AnityaException,
            anitya.lib.map_project,
            self.session,
            project=project_obj,
            package_name='geany2',
            distribution='CentOS',
            user_mail='*****@*****.**',
        )
示例#51
0
    def test_map_project(self):
        """ Test the map_project function. """
        create_distro(self.session)
        create_project(self.session)

        output = self.app.get('/project/1/map', follow_redirects=True)
        self.assertEqual(output.status_code, 200)
        self.assertTrue(
            '<li class="errors">Login required</li>' in output.data)

        projects = model.Project.all(self.session)
        self.assertEqual(len(projects), 3)
        self.assertEqual(projects[0].name, 'geany')
        self.assertEqual(len(projects[0].packages), 0)
        self.assertEqual(projects[0].id, 1)
        self.assertEqual(projects[1].name, 'R2spec')
        self.assertEqual(projects[1].id, 3)
        self.assertEqual(len(projects[1].packages), 0)
        self.assertEqual(projects[2].name, 'subsurface')
        self.assertEqual(projects[2].id, 2)
        self.assertEqual(len(projects[2].packages), 0)

        with anitya.app.APP.test_client() as c:
            with c.session_transaction() as sess:
                sess['openid'] = 'openid_url'
                sess['fullname'] = 'Pierre-Yves C.'
                sess['nickname'] = 'pingou'
                sess['email'] = '*****@*****.**'

            output = c.get('/project/10/map', follow_redirects=True)
            self.assertEqual(output.status_code, 404)

            output = c.get('/project/1/map', follow_redirects=True)
            self.assertEqual(output.status_code, 200)

            self.assertTrue('<h1>Project: geany</h1>' in output.data)
            self.assertTrue(
                '<td><label for="distro">Distribution</label></td>'
                in output.data)

            data = {
                'package_name': 'geany',
                'distro': 'CentOS',
            }

            output = c.post(
                '/project/1/map', data=data, follow_redirects=True)
            self.assertEqual(output.status_code, 200)
            self.assertTrue('<h1>Project: geany</h1>' in output.data)
            self.assertTrue(
                '<td><label for="distro">Distribution</label></td>'
                in output.data)

            # This should works just fine
            csrf_token = output.data.split(
                'name="csrf_token" type="hidden" value="')[1].split('">')[0]

            data['csrf_token'] = csrf_token

            output = c.post(
                '/project/1/map', data=data, follow_redirects=True)
            self.assertEqual(output.status_code, 200)
            self.assertTrue(
                '<li class="message">Mapping added</li>' in output.data)
            self.assertTrue(
                '<h1>Project: geany</h1>' in output.data)

            # This should fail, the mapping already exists
            data = {
                'package_name': 'geany',
                'distro': 'CentOS',
                'csrf_token': csrf_token,
            }

            output = c.post(
                '/project/1/map', data=data, follow_redirects=True)
            self.assertEqual(output.status_code, 200)
            self.assertTrue(
                '<li class="error">Could not edit the mapping of geany on '
                'CentOS, there is already a package geany on CentOS.</li>'
                in output.data)
            self.assertTrue(
                '<h1>Project: geany</h1>' in output.data)

        projects = model.Project.all(self.session)
        self.assertEqual(len(projects), 3)
        self.assertEqual(projects[0].name, 'geany')
        self.assertEqual(projects[0].id, 1)
        self.assertEqual(len(projects[0].packages), 1)
        self.assertEqual(projects[0].packages[0].package_name, 'geany')
        self.assertEqual(projects[1].name, 'R2spec')
        self.assertEqual(projects[1].id, 3)
        self.assertEqual(len(projects[1].packages), 0)
        self.assertEqual(projects[2].name, 'subsurface')
        self.assertEqual(projects[2].id, 2)
        self.assertEqual(len(projects[2].packages), 0)
示例#52
0
    def test_edit_project(self):
        """ Test the edit_project function. """
        create_distro(self.session)
        create_project(self.session)

        output = self.app.get('/project/1/edit', follow_redirects=True)
        self.assertEqual(output.status_code, 200)
        self.assertTrue(
            '<li class="errors">Login required</li>' in output.data)

        projects = model.Project.all(self.session)
        self.assertEqual(len(projects), 3)
        self.assertEqual(projects[0].name, 'geany')
        self.assertEqual(projects[0].id, 1)
        self.assertEqual(projects[1].name, 'R2spec')
        self.assertEqual(projects[1].id, 3)
        self.assertEqual(projects[2].name, 'subsurface')
        self.assertEqual(projects[2].id, 2)

        with anitya.app.APP.test_client() as c:
            with c.session_transaction() as sess:
                sess['openid'] = 'openid_url'
                sess['fullname'] = 'Pierre-Yves C.'
                sess['nickname'] = 'pingou'
                sess['email'] = '*****@*****.**'

            output = c.get('/project/10/edit', follow_redirects=True)
            self.assertEqual(output.status_code, 404)

            output = c.get('/project/1/edit', follow_redirects=True)
            self.assertEqual(output.status_code, 200)

            self.assertTrue('<h1>Edit project</h1>' in output.data)
            self.assertTrue(
                '<td><label for="regex">Regex</label></td>' in output.data)

            data = {
                'name': 'repo_manager',
                'homepage': 'https://pypi.python.org/pypi/repo_manager',
                'backend': 'pypi',
            }

            output = c.post(
                '/project/1/edit', data=data, follow_redirects=True)
            self.assertEqual(output.status_code, 200)
            self.assertTrue('<h1>Edit project</h1>' in output.data)
            self.assertTrue(
                '<td><label for="regex">Regex</label></td>' in output.data)

            # This should works just fine
            csrf_token = output.data.split(
                'name="csrf_token" type="hidden" value="')[1].split('">')[0]

            data['csrf_token'] = csrf_token

            output = c.post(
                '/project/1/edit', data=data, follow_redirects=True)
            self.assertEqual(output.status_code, 200)
            self.assertTrue(
                '<li class="message">Project edited</li>' in output.data)
            self.assertTrue(
                '<h1>Project: repo_manager</h1>' in output.data)

            # This should fail, the R2spec project already exists
            data = {
                'name': 'R2spec',
                'homepage': 'https://fedorahosted.org/r2spec/',
                'backend': 'folder',
                'csrf_token': csrf_token,
            }

            output = c.post(
                '/project/1/edit', data=data, follow_redirects=True)
            self.assertEqual(output.status_code, 200)
            self.assertTrue(
                '<li class="errors">Could not edit this project. Is there '
                'already a project with these name and homepage?</li>'
                in output.data)
            self.assertTrue(
                '<h1>Project: repo_manager</h1>' in output.data)

        projects = model.Project.all(self.session)
        self.assertEqual(len(projects), 3)
        self.assertEqual(projects[0].name, 'R2spec')
        self.assertEqual(projects[0].id, 3)
        self.assertEqual(projects[1].name, 'repo_manager')
        self.assertEqual(projects[1].id, 1)
        self.assertEqual(projects[2].name, 'subsurface')
        self.assertEqual(projects[2].id, 2)
示例#53
0
    def test_api_get_version(self):
        """ Test the api_get_version function of the API. """
        create_distro(self.session)

        output = self.app.post('/api/version/get')
        self.assertEqual(output.status_code, 400)
        data = json.loads(output.data)

        exp = {"error": ["No project id specified"], "output": "notok"}
        self.assertEqual(data, exp)

        create_project(self.session)
        create_package(self.session)

        data = {'id': 10}
        output = self.app.post('/api/version/get', data=data)
        self.assertEqual(output.status_code, 404)
        data = json.loads(output.data)

        exp = {"error": "No such project", "output": "notok"}
        self.assertEqual(data, exp)

        # Modify the project so that it fails
        project = model.Project.get(self.session, 1)
        project.version_url = "http://www.geany.org/Down"
        self.session.add(project)
        self.session.commit()

        data = {'id': 1}
        output = self.app.post('/api/version/get', data=data)
        self.assertEqual(output.status_code, 400)
        data = json.loads(output.data)

        exp = {
            "error": [
                "geany: no upstream version found. "
                "- http://www.geany.org/Down - "
                " " + REGEX % ({'name': 'geany'})
            ],
            "output": "notok"
        }

        # This test will break for every update of geany, so we need to
        # keep the output easy on hand.
        #print output.data
        self.assertEqual(data, exp)

        # Modify it back:
        project.version_url = "http://www.geany.org/Download/Releases"
        self.session.add(project)
        self.session.commit()

        data = {'id': 1}
        output = self.app.post('/api/version/get', data=data)
        self.assertEqual(output.status_code, 200)
        data = json.loads(output.data)
        del(data['created_on'])
        del(data['updated_on'])

        exp = {
            "id": 1,
            "backend": "custom",
            "homepage": "http://www.geany.org/",
            "name": "geany",
            "regex": "DEFAULT",
            "version": "1.24.1",
            "version_url": "http://www.geany.org/Download/Releases",
            "versions": ["1.24.1"],
            "packages": [
                {
                  "distro": "Fedora",
                  "package_name": "geany"
                }
            ],
        }

        # This test will break for every update of geany, so we need to
        # keep the output easy on hand.
        #print output.data
        self.assertEqual(data, exp)
示例#54
0
    def test_api_projects(self):
        """ Test the api_projects function of the API. """
        create_distro(self.session)

        output = self.app.get('/api/projects')
        self.assertEqual(output.status_code, 200)
        data = json.loads(output.data)

        exp = {"projects": [], "total": 0}
        self.assertEqual(data, exp)

        create_project(self.session)

        output = self.app.get('/api/projects/')
        self.assertEqual(output.status_code, 200)
        data = json.loads(output.data)

        for key in range(len(data['projects'])):
            del(data['projects'][key]['created_on'])
            del(data['projects'][key]['updated_on'])

        exp = {
            "projects": [
                {
                    "id": 1,
                    "backend": "custom",
                    "homepage": "http://www.geany.org/",
                    "name": "geany",
                    "regex": "DEFAULT",
                    "version": None,
                    "version_url": "http://www.geany.org/Download/Releases",
                    "versions": []
                },
                {
                    "id": 3,
                    "backend": "custom",
                    "homepage": "https://fedorahosted.org/r2spec/",
                    "name": "R2spec",
                    "regex": None,
                    "version": None,
                    "version_url": None,
                    "versions": []
                },
                {
                    "id": 2,
                    "backend": "custom",
                    "homepage": "http://subsurface.hohndel.org/",
                    "name": "subsurface",
                    "regex": "DEFAULT",
                    "version": None,
                    "version_url": "http://subsurface.hohndel.org/downloads/",
                    "versions": []
                }
            ],
            "total": 3
        }

        self.assertEqual(data, exp)

        output = self.app.get('/api/projects/?pattern=ge')
        self.assertEqual(output.status_code, 200)
        data = json.loads(output.data)

        for key in range(len(data['projects'])):
            del(data['projects'][key]['created_on'])
            del(data['projects'][key]['updated_on'])

        exp = {
            "projects": [
                {
                    "id": 1,
                    "backend": "custom",
                    "homepage": "http://www.geany.org/",
                    "name": "geany",
                    "regex": "DEFAULT",
                    "version": None,
                    "version_url": "http://www.geany.org/Download/Releases",
                    "versions": [],
                },
            ],
            "total": 1
        }

        self.assertEqual(data, exp)

        output = self.app.get('/api/projects/?homepage=http://www.geany.org/')
        self.assertEqual(output.status_code, 200)
        data = json.loads(output.data)

        for key in range(len(data['projects'])):
            del(data['projects'][key]['created_on'])
            del(data['projects'][key]['updated_on'])

        exp = {
            "projects": [
                {
                    "id": 1,
                    "backend": "custom",
                    "homepage": "http://www.geany.org/",
                    "name": "geany",
                    "regex": "DEFAULT",
                    "version": None,
                    "version_url": "http://www.geany.org/Download/Releases",
                    "versions": [],
                },
            ],
            "total": 1
        }

        self.assertEqual(data, exp)

        output = self.app.get('/api/projects/?pattern=foo&homepage=bar')
        self.assertEqual(output.status_code, 400)
示例#55
0
    def test_delete_project_mapping(self):
        """ Test the delete_project_mapping function. """
        create_distro(self.session)
        create_project(self.session)
        create_package(self.session)

        output = self.app.get(
            '/project/1/delete/Fedora/geany', follow_redirects=True)
        self.assertEqual(output.status_code, 200)
        self.assertTrue(
            '<li class="errors">Login required</li>' in output.data)

        with anitya.app.APP.test_client() as c:
            with c.session_transaction() as sess:
                sess['openid'] = 'openid_url'
                sess['fullname'] = 'Pierre-Yves C.'
                sess['nickname'] = 'pingou'
                sess['email'] = '*****@*****.**'

            output = c.get(
                '/project/100/delete/Fedora/geany', follow_redirects=True)
            self.assertEqual(output.status_code, 404)

            output = c.get(
                '/project/1/delete/CentOS/geany', follow_redirects=True)
            self.assertEqual(output.status_code, 404)

            output = c.get(
                '/project/1/delete/Fedora/geany2', follow_redirects=True)
            self.assertEqual(output.status_code, 404)

            output = c.get(
                '/project/1/delete/Fedora/geany', follow_redirects=True)
            self.assertEqual(output.status_code, 401)

        output = c.get('/project/1/')
        self.assertEqual(output.status_code, 200)
        self.assertTrue('<h1>Project: geany</h1>' in output.data)
        self.assertTrue('<td>Fedora</td>' in output.data)

        with anitya.app.APP.test_client() as c:
            with c.session_transaction() as sess:
                sess['openid'] = 'http://pingou.id.fedoraproject.org/'
                sess['fullname'] = 'Pierre-Yves C.'
                sess['nickname'] = 'pingou'
                sess['email'] = '*****@*****.**'

            output = c.get('/project/1/delete/Fedora/geany', follow_redirects=True)
            self.assertEqual(output.status_code, 200)
            self.assertTrue(
                '<h1>Project: geany - Delete package</h1>' in output.data)
            self.assertTrue(
                '<button type="submit" name="confirm" value="Yes"'
                in output.data)

            data = {
                'confirm': 'Yes',
            }

            output = c.post(
                '/project/1/delete/Fedora/geany', data=data,
                follow_redirects=True)
            self.assertEqual(output.status_code, 200)
            self.assertTrue(
                '<h1>Project: geany - Delete package</h1>' in output.data)
            self.assertTrue(
                '<button type="submit" name="confirm" value="Yes"'
                in output.data)

            csrf_token = output.data.split(
                'name="csrf_token" type="hidden" value="')[1].split('">')[0]

            data['csrf_token'] = csrf_token
            del(data['confirm'])

            output = c.post(
                '/project/1/delete/Fedora/geany', data=data,
                follow_redirects=True)
            self.assertEqual(output.status_code, 200)
            self.assertTrue('<h1>Project: geany</h1>' in output.data)
            self.assertTrue('<td>Fedora</td>' in output.data)

            data['confirm'] = True

            output = c.post(
                '/project/1/delete/Fedora/geany', data=data,
                follow_redirects=True)
            self.assertEqual(output.status_code, 200)
            self.assertTrue(
                'class="message">Mapping for geany has been removed</li>'
                in output.data)
            self.assertTrue('<h1>Project: geany</h1>' in output.data)
            self.assertFalse('<td>Fedora</td>' in output.data)