""" GitLab API: https://docs.gitlab.com/ce/api/users.html """ import pytest import responses from gitlab.v4.objects import User, UserMembership, UserStatus @pytest.fixture def resp_get_user(): content = { "name": "name", "id": 1, "password": "password", "username": "username", "email": "email", } with responses.RequestsMock() as rsps: rsps.add( method=responses.GET, url="http://localhost/api/v4/users/1", json=content, content_type="application/json", status=200, ) yield rsps @pytest.fixture def resp_get_user_memberships(): content = [ { "source_id": 1, "source_name": "Project one", "source_type": "Project", "access_level": "20", }, { "source_id": 3, "source_name": "Group three", "source_type": "Namespace", "access_level": "20", }, ] with responses.RequestsMock() as rsps: rsps.add( method=responses.GET, url="http://localhost/api/v4/users/1/memberships", json=content, content_type="application/json", status=200, ) yield rsps @pytest.fixture def resp_activate(): with responses.RequestsMock(assert_all_requests_are_fired=False) as rsps: rsps.add( method=responses.POST, url="http://localhost/api/v4/users/1/activate", json={}, content_type="application/json", status=201, ) rsps.add( method=responses.POST, url="http://localhost/api/v4/users/1/deactivate", json={}, content_type="application/json", status=201, ) yield rsps @pytest.fixture def resp_get_user_status(): content = { "message": "test", "message_html": "

Message

", "emoji": "thumbsup", } with responses.RequestsMock() as rsps: rsps.add( method=responses.GET, url="http://localhost/api/v4/users/1/status", json=content, content_type="application/json", status=200, ) yield rsps @pytest.fixture def resp_delete_user_identity(no_content): with responses.RequestsMock() as rsps: rsps.add( method=responses.DELETE, url="http://localhost/api/v4/users/1/identities/test_provider", json=no_content, content_type="application/json", status=204, ) yield rsps @pytest.fixture def resp_follow_unfollow(): user = { "id": 1, "username": "john_smith", "name": "John Smith", "state": "active", "avatar_url": "http://localhost:3000/uploads/user/avatar/1/cd8.jpeg", "web_url": "http://localhost:3000/john_smith", } with responses.RequestsMock() as rsps: rsps.add( method=responses.POST, url="http://localhost/api/v4/users/1/follow", json=user, content_type="application/json", status=201, ) rsps.add( method=responses.POST, url="http://localhost/api/v4/users/1/unfollow", json=user, content_type="application/json", status=201, ) yield rsps @pytest.fixture def resp_followers_following(): content = [ { "id": 2, "name": "Lennie Donnelly", "username": "evette.kilback", "state": "active", "avatar_url": "https://www.gravatar.com/avatar/7955171a55ac4997ed81e5976287890a?s=80&d=identicon", "web_url": "http://127.0.0.1:3000/evette.kilback", }, { "id": 4, "name": "Serena Bradtke", "username": "cammy", "state": "active", "avatar_url": "https://www.gravatar.com/avatar/a2daad869a7b60d3090b7b9bef4baf57?s=80&d=identicon", "web_url": "http://127.0.0.1:3000/cammy", }, ] with responses.RequestsMock() as rsps: rsps.add( method=responses.GET, url="http://localhost/api/v4/users/1/followers", json=content, content_type="application/json", status=200, ) rsps.add( method=responses.GET, url="http://localhost/api/v4/users/1/following", json=content, content_type="application/json", status=200, ) yield rsps def test_get_user(gl, resp_get_user): user = gl.users.get(1) assert isinstance(user, User) assert user.name == "name" assert user.id == 1 def test_user_memberships(user, resp_get_user_memberships): memberships = user.memberships.list() assert isinstance(memberships[0], UserMembership) assert memberships[0].source_type == "Project" def test_user_status(user, resp_get_user_status): status = user.status.get() assert isinstance(status, UserStatus) assert status.message == "test" assert status.emoji == "thumbsup" def test_user_activate_deactivate(user, resp_activate): user.activate() user.deactivate() def test_delete_user_identity(user, resp_delete_user_identity): user.identityproviders.delete("test_provider") def test_user_follow_unfollow(user, resp_follow_unfollow): user.follow() user.unfollow() def test_list_followers(user, resp_followers_following): followers = user.followers_users.list() followings = user.following_users.list() assert isinstance(followers[0], User) assert followers[0].id == 2 assert isinstance(followings[0], User) assert followings[1].id == 4