add some get_users tests

pull/12/head
def 2022-07-25 01:59:43 +02:00
parent 6a9ecd5913
commit ba7ea75fd5
7 changed files with 187 additions and 21 deletions

View File

@ -31,6 +31,7 @@ class UserMutationReturn(MutationReturnInterface):
user: typing.Optional[User] user: typing.Optional[User]
def get_user_by_username(username: str) -> typing.Optional[User]: def get_user_by_username(username: str) -> typing.Optional[User]:
with ReadUserData() as data: with ReadUserData() as data:

View File

@ -5,12 +5,16 @@
import strawberry import strawberry
from selfprivacy_api.graphql import IsAuthenticated from selfprivacy_api.graphql import IsAuthenticated
from selfprivacy_api.graphql.common_types.user import User, UserMutationReturn, UserType from selfprivacy_api.graphql.common_types.user import (
User,
UserMutationReturn,
UserType,
get_user_by_username,
)
from selfprivacy_api.utils import ( from selfprivacy_api.utils import (
WriteUserData, WriteUserData,
ReadUserData, ReadUserData,
get_user_by_username,
validate_ssh_public_key, validate_ssh_public_key,
) )

View File

@ -6,7 +6,11 @@ import subprocess
import typing import typing
import strawberry import strawberry
from selfprivacy_api.graphql import IsAuthenticated from selfprivacy_api.graphql import IsAuthenticated
from selfprivacy_api.graphql.common_types.user import User, UserMutationReturn, get_user_by_username from selfprivacy_api.graphql.common_types.user import (
User,
UserMutationReturn,
get_user_by_username,
)
from selfprivacy_api.graphql.mutations.mutation_interface import ( from selfprivacy_api.graphql.mutations.mutation_interface import (
MutationReturnInterface, MutationReturnInterface,
) )

View File

@ -5,6 +5,7 @@ import strawberry
from selfprivacy_api.graphql.common_types.user import User, get_user_by_username from selfprivacy_api.graphql.common_types.user import User, get_user_by_username
from selfprivacy_api.utils import ReadUserData from selfprivacy_api.utils import ReadUserData
from selfprivacy_api.graphql import IsAuthenticated
def get_users() -> typing.List[User]: def get_users() -> typing.List[User]:
@ -19,12 +20,13 @@ def get_users() -> typing.List[User]:
return user_list return user_list
@strawberry.type @strawberry.type
class Users: class Users:
@strawberry.field @strawberry.field(permission_classes=[IsAuthenticated])
def get_user(self, username: str) -> typing.Optional[User]: def get_user(self, username: str) -> typing.Optional[User]:
"""Get users""" """Get users"""
return get_user_by_username(username) return get_user_by_username(username)
all_users: typing.List[User] = strawberry.field(resolver=get_users) all_users: typing.List[User] = strawberry.field(
permission_classes=[IsAuthenticated], resolver=get_users
)

View File

@ -12,6 +12,7 @@ from selfprivacy_api.graphql.queries.system import System
from selfprivacy_api.graphql.mutations.users_mutations import UserMutations from selfprivacy_api.graphql.mutations.users_mutations import UserMutations
from selfprivacy_api.graphql.queries.users import Users from selfprivacy_api.graphql.queries.users import Users
@strawberry.type @strawberry.type
class Query: class Query:
"""Root schema for queries""" """Root schema for queries"""

View File

@ -173,5 +173,3 @@ def hash_password(password):
hashed_password = hashed_password.decode("ascii") hashed_password = hashed_password.decode("ascii")
hashed_password = hashed_password.rstrip() hashed_password = hashed_password.rstrip()
return hashed_password return hashed_password

View File

@ -3,13 +3,12 @@
import json import json
import pytest import pytest
from tests.common import generate_system_query, generate_users_query, read_json, write_json from tests.common import (
generate_system_query,
generate_users_query,
def read_json(file_path): read_json,
with open(file_path, "r", encoding="utf-8") as file: write_json,
return json.load(file) )
invalid_usernames = [ invalid_usernames = [
"root", "root",
@ -115,11 +114,9 @@ def mock_subprocess_popen(mocker):
## TESTS ###################################################### ## TESTS ######################################################
API_USERS_INFO = """ API_USERS_INFO = """
users { allUsers {
allUsers {
username username
sshKeys sshKeys
}
} }
""" """
@ -145,7 +142,166 @@ def test_graphql_get_some_users(authorized_client, some_users, mock_subprocess_p
) )
assert response.status_code == 200 assert response.status_code == 200
assert response.json.get("data") is not None assert response.json.get("data") is not None
# assert response.json == ["user1", "user2", "user3"] assert len(response.json["data"]["users"]["allUsers"]) == 4
assert response.json["data"]["users"]["allUsers"][0]["username"] == "user1"
assert response.json["data"]["users"]["allUsers"][0]["sshKeys"] == [
"ssh-rsa KEY user1@pc"
]
assert response.json["data"]["users"]["success"] is True assert response.json["data"]["users"]["allUsers"][1]["username"] == "user2"
assert response.json["data"]["users"]["code"] == 200 assert response.json["data"]["users"]["allUsers"][1]["sshKeys"] == []
assert response.json["data"]["users"]["allUsers"][3]["username"] == "tester"
assert response.json["data"]["users"]["allUsers"][3]["sshKeys"] == [
"ssh-rsa KEY test@pc"
]
def test_graphql_get_no_users(authorized_client, no_users, mock_subprocess_popen):
response = authorized_client.get(
"/graphql",
json={
"query": generate_users_query([API_USERS_INFO]),
},
)
assert response.status_code == 200
assert response.json.get("data") is not None
assert len(response.json["data"]["users"]["allUsers"]) == 1
assert response.json["data"]["users"]["allUsers"][0]["username"] == "tester"
assert response.json["data"]["users"]["allUsers"][0]["sshKeys"] == [
"ssh-rsa KEY test@pc"
]
API_GET_USERS = """
getUser($username: String) {
getUser(username: $username) {
user
}
}
"""
def test_graphql_get_one_user_unauthorized(client, one_user, mock_subprocess_popen):
response = client.post(
"/graphql",
json={
"query": generate_users_query([API_GET_USERS]),
"variables": {
"username": "user1",
},
},
)
assert response.status_code == 200
assert response.json.get("data") is None
def test_graphql_get_one_user(authorized_client, one_user, mock_subprocess_popen):
response = authorized_client.get(
"/graphql",
json={
"query": generate_users_query([API_GET_USERS]),
"variables": {
"username": "user1",
},
},
)
assert response.status_code == 200
assert response.json.get("data") is not None
# assert len(response.json["data"]["users"]["getUser"]) == 1
# assert response.json["data"]["users"]["getUser"][0]["username"] == "user1"
# assert response.json["data"]["users"]["getUser"][0]["sshKeys"] == ["ssh-rsa KEY user1@pc"]
def test_graphql_get_some_user(authorized_client, some_user, mock_subprocess_popen):
response = authorized_client.get(
"/graphql",
json={
"query": generate_users_query([API_GET_USERS]),
"variables": {
"username": "user2",
},
},
)
assert response.status_code == 200
assert response.json.get("data") is not None
# assert len(response.json["data"]["users"]["getUser"]) == 1
# assert response.json["data"]["users"]["getUser"][0]["username"] == "user1"
# assert response.json["data"]["users"]["getUser"][0]["sshKeys"] == ["ssh-rsa KEY user1@pc"]
def test_graphql_get_root_user(authorized_client, one_user, mock_subprocess_popen):
response = authorized_client.get(
"/graphql",
json={
"query": generate_users_query([API_GET_USERS]),
"variables": {
"username": "root",
},
},
)
assert response.status_code == 200
assert response.json.get("data") is not None
def test_graphql_get_main_user(authorized_client, one_user, mock_subprocess_popen):
response = authorized_client.get(
"/graphql",
json={
"query": generate_users_query([API_GET_USERS]),
"variables": {
"username": "tester", # ssh-rsa KEY test@pc
},
},
)
assert response.status_code == 200
assert response.json.get("data") is not None
API_CHANGE_USERS_MUTATION = """
mutation createUser($username: String, $password: String) {
createUser(username: $username, password: $password) {
success
message
code
user
}
}
"""
def test_graphql_add_user_unauthorize(client, one_user, mock_subprocess_popen):
response = client.post(
"/graphql",
json={
"query": API_CHANGE_USERS_MUTATION,
"variables": {
"username": "user1",
"password": "12345678",
},
},
)
assert response.status_code == 200
assert response.json.get("data") is None
def test_graphql_add_usere(authorized_client, one_user, mock_subprocess_popen):
response = authorized_client.post(
"/graphql",
json={
"query": API_CHANGE_USERS_MUTATION,
"variables": {
"username": "user1",
"password": "12345678",
},
},
)
assert response.status_code == 200
assert response.json.get("data") is not None
# assert response.json["data"][""]["message"] is not None
# assert response.json["data"][""]["code"] == 200
# assert response.json["data"][""]["success"] is True