"""
GitLab API: https://docs.gitlab.com/ce/api/projects.html
"""

import pytest
import responses

from gitlab.v4.objects import Project

project_content = {"name": "name", "id": 1}
import_content = {
    "id": 1,
    "name": "project",
    "import_status": "scheduled",
}


@pytest.fixture
def resp_get_project():
    with responses.RequestsMock() as rsps:
        rsps.add(
            method=responses.GET,
            url="http://localhost/api/v4/projects/1",
            json=project_content,
            content_type="application/json",
            status=200,
        )
        yield rsps


@pytest.fixture
def resp_list_projects():
    with responses.RequestsMock() as rsps:
        rsps.add(
            method=responses.GET,
            url="http://localhost/api/v4/projects",
            json=[project_content],
            content_type="application/json",
            status=200,
        )
        yield rsps


@pytest.fixture
def resp_import_bitbucket_server():
    with responses.RequestsMock() as rsps:
        rsps.add(
            method=responses.POST,
            url="http://localhost/api/v4/import/bitbucket_server",
            json=import_content,
            content_type="application/json",
            status=201,
        )
        yield rsps


def test_get_project(gl, resp_get_project):
    data = gl.projects.get(1)
    assert isinstance(data, Project)
    assert data.name == "name"
    assert data.id == 1


def test_list_projects(gl, resp_list_projects):
    projects = gl.projects.list()
    assert isinstance(projects[0], Project)
    assert projects[0].name == "name"


def test_import_bitbucket_server(gl, resp_import_bitbucket_server):
    res = gl.projects.import_bitbucket_server(
        bitbucket_server_project="project",
        bitbucket_server_repo="repo",
        bitbucket_server_url="url",
        bitbucket_server_username="username",
        personal_access_token="token",
        new_name="new_name",
        target_namespace="namespace",
    )
    assert res["id"] == 1
    assert res["name"] == "project"
    assert res["import_status"] == "scheduled"


@pytest.mark.skip(reason="missing test")
def test_list_user_projects(gl):
    pass


@pytest.mark.skip(reason="missing test")
def test_list_user_starred_projects(gl):
    pass


@pytest.mark.skip(reason="missing test")
def test_list_project_users(gl):
    pass


@pytest.mark.skip(reason="missing test")
def test_create_project(gl):
    pass


@pytest.mark.skip(reason="missing test")
def test_create_user_project(gl):
    pass


@pytest.mark.skip(reason="missing test")
def test_update_project(gl):
    pass


@pytest.mark.skip(reason="missing test")
def test_fork_project(gl):
    pass


@pytest.mark.skip(reason="missing test")
def test_list_project_forks(gl):
    pass


@pytest.mark.skip(reason="missing test")
def test_star_project(gl):
    pass


@pytest.mark.skip(reason="missing test")
def test_unstar_project(gl):
    pass


@pytest.mark.skip(reason="missing test")
def test_list_project_starrers(gl):
    pass


@pytest.mark.skip(reason="missing test")
def test_get_project_languages(gl):
    pass


@pytest.mark.skip(reason="missing test")
def test_archive_project(gl):
    pass


@pytest.mark.skip(reason="missing test")
def test_unarchive_project(gl):
    pass


@pytest.mark.skip(reason="missing test")
def test_remove_project(gl):
    pass


@pytest.mark.skip(reason="missing test")
def test_restore_project(gl):
    pass


@pytest.mark.skip(reason="missing test")
def test_upload_file(gl):
    pass


@pytest.mark.skip(reason="missing test")
def test_share_project(gl):
    pass


@pytest.mark.skip(reason="missing test")
def test_delete_shared_project_link(gl):
    pass


@pytest.mark.skip(reason="missing test")
def test_create_forked_from_relationship(gl):
    pass


@pytest.mark.skip(reason="missing test")
def test_delete_forked_from_relationship(gl):
    pass


@pytest.mark.skip(reason="missing test")
def test_search_projects_by_name(gl):
    pass


@pytest.mark.skip(reason="missing test")
def test_project_housekeeping(gl):
    pass


@pytest.mark.skip(reason="missing test")
def test_get_project_push_rules(gl):
    pass


@pytest.mark.skip(reason="missing test")
def test_create_project_push_rule(gl):
    pass


@pytest.mark.skip(reason="missing test")
def test_update_project_push_rule(gl):
    pass


@pytest.mark.skip(reason="missing test")
def test_delete_project_push_rule(gl):
    pass


@pytest.mark.skip(reason="missing test")
def test_transfer_project(gl):
    pass


@pytest.mark.skip(reason="missing test")
def test_project_pull_mirror(gl):
    pass


@pytest.mark.skip(reason="missing test")
def test_project_snapshot(gl):
    pass


@pytest.mark.skip(reason="missing test")
def test_import_github(gl):
    pass
