This commit is contained in:
396
back/tests/test_main.py
Normal file
396
back/tests/test_main.py
Normal file
@@ -0,0 +1,396 @@
|
||||
import pytest
|
||||
from fastapi.testclient import TestClient
|
||||
from unittest.mock import MagicMock, patch, ANY
|
||||
from ..main import app, get_current_user
|
||||
from ..database import get_db
|
||||
|
||||
def override_get_db():
|
||||
mock_db = MagicMock()
|
||||
mock_cursor = MagicMock()
|
||||
|
||||
mock_cursor.fetchone.return_value = {}
|
||||
|
||||
mock_db.cursor.return_value.__enter__.return_value = mock_cursor
|
||||
yield mock_db
|
||||
|
||||
def override_get_user(user):
|
||||
return user
|
||||
|
||||
app.dependency_overrides[get_db] = override_get_db
|
||||
|
||||
class TestBooks:
|
||||
test_success_payload = {
|
||||
'title': '1984',
|
||||
'author': 'George Orwell',
|
||||
'type': 'novel',
|
||||
'editor': 'Secker & Warburg'
|
||||
}
|
||||
|
||||
test_error_payload = {
|
||||
'title': 1984,
|
||||
'author': 'George Orwell',
|
||||
'type': 'novel',
|
||||
'editor': 'Secker & Warburg'
|
||||
}
|
||||
|
||||
mock_result = {
|
||||
'id': 1,
|
||||
**test_success_payload
|
||||
}
|
||||
|
||||
def test_create_book_success(self):
|
||||
def override_get_user():
|
||||
return {'username': 'test'}
|
||||
app.dependency_overrides[get_current_user] = override_get_user
|
||||
client = TestClient(app)
|
||||
|
||||
with patch('back.main.add_book', MagicMock(return_value=self.mock_result)) as mock_add_book:
|
||||
response = client.post('/api/books', json=self.test_success_payload)
|
||||
assert response.status_code == 200
|
||||
assert response.json() == self.mock_result
|
||||
mock_add_book.assert_called_once_with(ANY, self.test_success_payload)
|
||||
|
||||
def test_create_book_unauthorized(self):
|
||||
def override_get_user():
|
||||
return None
|
||||
app.dependency_overrides[get_current_user] = override_get_user
|
||||
client = TestClient(app)
|
||||
|
||||
response = client.post('/api/books', json=self.test_success_payload)
|
||||
|
||||
assert response.status_code == 401
|
||||
assert response.json()['detail'] == 'User not allowed'
|
||||
|
||||
def test_create_book_error_request(self):
|
||||
def override_get_user():
|
||||
return {'username': 'test'}
|
||||
app.dependency_overrides[get_current_user] = override_get_user
|
||||
client = TestClient(app)
|
||||
|
||||
with patch('back.main.add_book', MagicMock(return_value=None)) as mock_add_book:
|
||||
response = client.post('/api/books', json=self.test_success_payload)
|
||||
|
||||
assert response.status_code == 400
|
||||
assert response.json()['detail'] == 'Error with request, database may be offline'
|
||||
|
||||
def test_create_book_wrong_body(self):
|
||||
def override_get_user():
|
||||
return {'username': 'test'}
|
||||
app.dependency_overrides[get_current_user] = override_get_user
|
||||
client = TestClient(app)
|
||||
|
||||
with patch('back.main.add_book', MagicMock(return_value=self.mock_result)) as mock_add_book:
|
||||
response = client.post('/api/books', json=self.test_error_payload)
|
||||
|
||||
assert response.status_code == 422
|
||||
assert response.json()['detail'] == [{'input': 1984, 'loc': ['body', 'title'], 'msg': 'Input should be a valid string', 'type': 'string_type'}]
|
||||
|
||||
def test_get_book_success(self):
|
||||
def override_get_user():
|
||||
return {'username': 'test'}
|
||||
app.dependency_overrides[get_current_user] = override_get_user
|
||||
client = TestClient(app)
|
||||
|
||||
with patch('back.main.get_books', MagicMock(return_value=([self.mock_result], [{'count': 1}]))) as mock_get_book:
|
||||
response = client.get('/api/books')
|
||||
|
||||
assert response.status_code == 200
|
||||
assert response.json() == {'result': [self.mock_result]}
|
||||
mock_get_book.assert_called_once_with(ANY, 0, limit=50, search='')
|
||||
|
||||
|
||||
def test_get_book_unauthorized(self):
|
||||
def override_get_user():
|
||||
return None
|
||||
app.dependency_overrides[get_current_user] = override_get_user
|
||||
client = TestClient(app)
|
||||
|
||||
response = client.get('/api/books')
|
||||
|
||||
assert response.status_code == 401
|
||||
assert response.json()['detail'] == 'User not allowed'
|
||||
|
||||
def test_get_book_error_request(self):
|
||||
def override_get_user():
|
||||
return {'username': 'test'}
|
||||
app.dependency_overrides[get_current_user] = override_get_user
|
||||
client = TestClient(app)
|
||||
|
||||
with patch('back.main.get_books', MagicMock(return_value=(False, None))) as mock_get_book:
|
||||
response = client.get('/api/books')
|
||||
|
||||
assert response.status_code == 400
|
||||
assert response.json()['detail'] == 'Error with request, database may be offline'
|
||||
|
||||
def test_update_book_success(self):
|
||||
def override_get_user():
|
||||
return {'username': 'test'}
|
||||
app.dependency_overrides[get_current_user] = override_get_user
|
||||
client = TestClient(app)
|
||||
|
||||
with patch('back.main.edit_book', MagicMock(return_value=True)) as mock_edit_book:
|
||||
response = client.put('api/book/1', json=self.test_success_payload)
|
||||
|
||||
assert response.status_code == 200
|
||||
assert response.json() == True
|
||||
mock_edit_book.assert_called_once_with(ANY, '1', self.test_success_payload)
|
||||
|
||||
def test_update_book_unothorized(self):
|
||||
def override_get_user():
|
||||
return None
|
||||
app.dependency_overrides[get_current_user] = override_get_user
|
||||
client = TestClient(app)
|
||||
|
||||
response = client.put('api/book/1', json=self.test_success_payload)
|
||||
|
||||
assert response.status_code == 401
|
||||
assert response.json()['detail'] == 'User not allowed'
|
||||
|
||||
def test_update_book_error_request(self):
|
||||
def override_get_user():
|
||||
return {'username': 'test'}
|
||||
app.dependency_overrides[get_current_user] = override_get_user
|
||||
client = TestClient(app)
|
||||
|
||||
with patch('back.main.edit_book', MagicMock(return_value=None)) as mock_edit_book:
|
||||
response = client.put('api/book/1', json=self.test_success_payload)
|
||||
|
||||
assert response.status_code == 400
|
||||
assert response.json()['detail'] == 'Error with request, database may be offline'
|
||||
mock_edit_book.assert_called_once_with(ANY, '1', self.test_success_payload)
|
||||
|
||||
def test_update_book_error_body(self):
|
||||
def override_get_user():
|
||||
return {'username': 'test'}
|
||||
app.dependency_overrides[get_current_user] = override_get_user
|
||||
client = TestClient(app)
|
||||
|
||||
with patch('back.main.edit_book', MagicMock(return_value=False)) as mock_edit_book:
|
||||
response = client.put('api/book/1', json=self.test_error_payload)
|
||||
|
||||
assert response.status_code == 422
|
||||
|
||||
def test_remove_book_success(self):
|
||||
def override_get_user():
|
||||
return {'username': 'test'}
|
||||
app.dependency_overrides[get_current_user] = override_get_user
|
||||
client = TestClient(app)
|
||||
|
||||
with patch('back.main.remove_book', MagicMock(return_value=True)) as mock_remove_book:
|
||||
response = client.delete('api/book/1')
|
||||
|
||||
assert response.status_code == 200
|
||||
assert response.json() == True
|
||||
mock_remove_book.assert_called_once_with(ANY, '1')
|
||||
|
||||
def test_remove_book_unauthorized(self):
|
||||
def override_get_user():
|
||||
return None
|
||||
app.dependency_overrides[get_current_user] = override_get_user
|
||||
client = TestClient(app)
|
||||
|
||||
response = client.delete('api/book/1')
|
||||
|
||||
assert response.status_code == 401
|
||||
assert response.json()['detail'] == 'User not allowed'
|
||||
|
||||
def test_remove_book_error_request(self):
|
||||
def override_get_user():
|
||||
return {'username': 'test'}
|
||||
app.dependency_overrides[get_current_user] = override_get_user
|
||||
client = TestClient(app)
|
||||
|
||||
with patch('back.main.remove_book', MagicMock(return_value=None)) as mock_remove_book:
|
||||
response = client.delete('api/book/1')
|
||||
|
||||
assert response.status_code == 400
|
||||
assert response.json()['detail'] == 'Error with request, database may be offline'
|
||||
mock_remove_book.assert_called_once_with(ANY, '1')
|
||||
|
||||
class TestFilms:
|
||||
test_success_payload = {
|
||||
'title': 'Harry Potter and the Half-Blood Prince',
|
||||
'director': 'David Yates',
|
||||
'producer': 'David Heyman',
|
||||
'actors': 'Daniel Radcliffe, Rupert Grint, Emma Watson',
|
||||
'length': 153,
|
||||
'type': 'action'
|
||||
}
|
||||
|
||||
test_error_payload = {
|
||||
'title': 1234,
|
||||
'director': 'David Yates',
|
||||
'producer': 'David Heyman',
|
||||
'actors': 'Daniel Radcliffe, Rupert Grint, Emma Watson',
|
||||
'length': '153',
|
||||
'type': 'action'
|
||||
}
|
||||
|
||||
mock_result = {
|
||||
'id': 1,
|
||||
**test_success_payload
|
||||
}
|
||||
|
||||
def test_create_film_success(self):
|
||||
def override_get_user():
|
||||
return {'username': 'test'}
|
||||
app.dependency_overrides[get_current_user] = override_get_user
|
||||
client = TestClient(app)
|
||||
|
||||
with patch('back.main.add_film', MagicMock(return_value=True)) as mock_add_film:
|
||||
response = client.post('api/films', json=self.test_success_payload)
|
||||
|
||||
assert response.status_code == 200
|
||||
assert response.json() == True
|
||||
mock_add_film.assert_called_once_with(ANY, self.test_success_payload)
|
||||
|
||||
def test_create_film_unauthorized(self):
|
||||
def override_get_user():
|
||||
return None
|
||||
app.dependency_overrides[get_current_user] = override_get_user
|
||||
client = TestClient(app)
|
||||
|
||||
response = client.post('api/films', json=self.test_success_payload)
|
||||
|
||||
assert response.status_code == 401
|
||||
assert response.json()['detail'] == 'User not allowed'
|
||||
|
||||
def test_create_film_error_request(self):
|
||||
def override_get_user():
|
||||
return {'username': 'test'}
|
||||
app.dependency_overrides[get_current_user] = override_get_user
|
||||
client = TestClient(app)
|
||||
|
||||
with patch('back.main.add_film', MagicMock(return_value=None)) as mock_add_film:
|
||||
response = client.post('api/films', json=self.test_success_payload)
|
||||
|
||||
assert response.status_code == 400
|
||||
mock_add_film.assert_called_once_with(ANY, self.test_success_payload)
|
||||
|
||||
def test_create_film_error_body(self):
|
||||
def override_get_user():
|
||||
return {'username': 'test'}
|
||||
app.dependency_overrides[get_current_user] = override_get_user
|
||||
client = TestClient(app)
|
||||
|
||||
response = client.post('api/films', json=self.test_error_payload)
|
||||
|
||||
assert response.status_code == 422
|
||||
|
||||
def test_read_film_success(self):
|
||||
def override_get_user():
|
||||
return {'username': 'test'}
|
||||
app.dependency_overrides[get_current_user] = override_get_user
|
||||
client = TestClient(app)
|
||||
|
||||
with patch('back.main.get_films', MagicMock(return_value=True)) as mock_read_book:
|
||||
response = client.get('api/films')
|
||||
|
||||
assert response.status_code == 200
|
||||
assert response.json() == True
|
||||
mock_read_book.assert_called_once_with(ANY, 0, limit=50)
|
||||
|
||||
def test_read_film_unauthorized(self):
|
||||
def override_get_user():
|
||||
return None
|
||||
app.dependency_overrides[get_current_user] = override_get_user
|
||||
client = TestClient(app)
|
||||
|
||||
response = client.get('api/films')
|
||||
|
||||
assert response.status_code == 401
|
||||
assert response.json()['detail'] == 'User not allowed'
|
||||
|
||||
def test_read_film_error_request(self):
|
||||
def override_get_user():
|
||||
return {'username': 'test'}
|
||||
app.dependency_overrides[get_current_user] = override_get_user
|
||||
client = TestClient(app)
|
||||
|
||||
with patch('back.main.get_films', MagicMock(return_value=None)) as mock_read_book:
|
||||
response = client.get('api/films')
|
||||
|
||||
assert response.status_code == 400
|
||||
mock_read_book.assert_called_once_with(ANY, 0, limit=50)
|
||||
|
||||
def test_update_film_success(self):
|
||||
def override_get_user():
|
||||
return {'username': 'test'}
|
||||
app.dependency_overrides[get_current_user] = override_get_user
|
||||
client = TestClient(app)
|
||||
|
||||
with patch('back.main.edit_film', MagicMock(return_value=True)) as mock_edit_film:
|
||||
response = client.put('api/film/1', json=self.test_success_payload)
|
||||
|
||||
assert response.status_code == 200
|
||||
assert response.json() == True
|
||||
mock_edit_film.assert_called_once_with(ANY, '1', self.test_success_payload)
|
||||
|
||||
def test_update_film_unauthorized(self):
|
||||
def override_get_user():
|
||||
return None
|
||||
app.dependency_overrides[get_current_user] = override_get_user
|
||||
client = TestClient(app)
|
||||
|
||||
response = client.put('api/film/1', json=self.test_success_payload)
|
||||
|
||||
assert response.status_code == 401
|
||||
assert response.json()['detail'] == 'User not allowed'
|
||||
|
||||
def test_update_film_error_request(self):
|
||||
def override_get_user():
|
||||
return {'username': 'test'}
|
||||
app.dependency_overrides[get_current_user] = override_get_user
|
||||
client = TestClient(app)
|
||||
|
||||
with patch('back.main.edit_film', MagicMock(return_value=None)) as mock_edit_film:
|
||||
response = client.put('api/film/1', json=self.test_success_payload)
|
||||
|
||||
assert response.status_code == 400
|
||||
mock_edit_film.assert_called_once_with(ANY, '1', self.test_success_payload)
|
||||
|
||||
def test_update_film_error_body(self):
|
||||
def override_get_user():
|
||||
return {'username': 'test'}
|
||||
app.dependency_overrides[get_current_user] = override_get_user
|
||||
client = TestClient(app)
|
||||
|
||||
response = client.put('api/film/1', json=self.test_error_payload)
|
||||
|
||||
assert response.status_code == 422
|
||||
|
||||
def test_delete_film_success(self):
|
||||
def override_get_user():
|
||||
return {'username': 'test'}
|
||||
app.dependency_overrides[get_current_user] = override_get_user
|
||||
client = TestClient(app)
|
||||
|
||||
with patch('back.main.remove_film', MagicMock(return_value=True)) as mock_remove_film:
|
||||
response = client.delete('api/film/1')
|
||||
|
||||
assert response.status_code == 200
|
||||
assert response.json() == True
|
||||
mock_remove_film.assert_called_once_with(ANY, '1')
|
||||
|
||||
def test_delete_film_unauthorized(self):
|
||||
def override_get_user():
|
||||
return None
|
||||
app.dependency_overrides[get_current_user] = override_get_user
|
||||
client = TestClient(app)
|
||||
|
||||
response = client.delete('api/film/1')
|
||||
|
||||
assert response.status_code == 401
|
||||
assert response.json()['detail'] == 'User not allowed'
|
||||
|
||||
def test_delete_film_error_request(self):
|
||||
def override_get_user():
|
||||
return {'username': 'test'}
|
||||
app.dependency_overrides[get_current_user] = override_get_user
|
||||
client = TestClient(app)
|
||||
|
||||
with patch('back.main.remove_film', MagicMock(return_value=None)) as mock_remove_film:
|
||||
response = client.delete('api/film/1')
|
||||
|
||||
assert response.status_code == 400
|
||||
mock_remove_film.assert_called_once_with(ANY, '1')
|
||||
Reference in New Issue
Block a user