Added Mocks to help aid the process of creation of the textual TUI

This commit is contained in:
Gustavo Henrique Santos Souza de Miranda 2025-06-07 01:01:16 -03:00
parent 103b9a9da1
commit 03fb3b23c2
8 changed files with 154 additions and 0 deletions

View File

@ -1,13 +1,17 @@
from pilgrim.database import Database
from pilgrim.service.mocks.service_manager_mock import ServiceManagerMock
from pilgrim.service.servicemanager import ServiceManager
from pilgrim.ui.ui import UIApp
class Application:
def __init__(self):
self.database = Database()
self.ui = UIApp(ServiceManagerMock())
def run(self):
self.database.create()
self.ui.run()
def get_service_manager(self):
session = self.database.session()

View File

View File

@ -0,0 +1,47 @@
from typing import List
from pilgrim.service.entry_service import EntryService
from pilgrim.models.entry import Entry
class EntryServiceMock(EntryService):
def __init__(self):
super().__init__(None)
self.mock_data = {
1: Entry(title="The Adventure Begins", text="I'm hopping in the Plane to finally visit canadian lands",
date="26/07/2025", travel_diary_id=1, id=1,
photos=[]),
2: Entry(title="The Landing", text="Finally on Canadian Soil", date="27/07/2025",
travel_diary_id=1, id=2,photos=[]),
3: Entry(title="The Mount Royal", text="The Mount Royal is fucking awesome", date="28/07/2025",
travel_diary_id=1, id=3, photos=[]),
}
self._next_id = 4
def create(self, travel_diary_id: int, title: str, text: str, date: str) -> Entry:
new_entry = Entry(title, text, date, travel_diary_id, id=self._next_id)
self.mock_data[self._next_id] = new_entry
self._next_id += 1
return new_entry
def read_by_id(self, entry_id: int) -> Entry | None:
return self.mock_data.get(entry_id)
def read_all(self) -> List[Entry]:
return list(self.mock_data.values())
def update(self, entry_id: int, entry_dst: Entry) -> Entry | None:
item_to_update = self.mock_data.get(entry_id)
if item_to_update:
item_to_update.title = entry_dst.title if entry_dst.title is not None else item_to_update.title
item_to_update.text = entry_dst.text if entry_dst.text is not None else item_to_update.text
item_to_update.date = entry_dst.date if entry_dst.date is not None else item_to_update.date
item_to_update.fk_travel_diary_id = entry_dst.fk_travel_diary_id if (entry_dst.fk_travel_diary_id
is not None) else entry_dst.id
item_to_update.photos.extend(entry_dst.photos)
return item_to_update
return None
def delete(self, entry_id: int) -> Entry | None:
return self.mock_data.pop(entry_id, None)

View File

@ -0,0 +1,42 @@
from pathlib import Path
from typing import List
from pilgrim.models.photo import Photo
from pilgrim.service.photo_service import PhotoService
class PhotoServiceMock(PhotoService):
def __init__(self):
super().__init__(None)
self.mock_data = {}
self._next_id = 1
def create(self, filepath: Path, name: str, travel_diary_id, addition_date=None, caption=None) -> Photo | None:
new_photo = Photo(filepath, name, addition_date=addition_date, caption=caption)
self.mock_data[self._next_id] = new_photo
self._next_id += 1
return new_photo
def read_by_id(self, photo_id: int) -> Photo:
return self.mock_data.get(photo_id)
def read_all(self) -> List[Photo]:
return list(self.mock_data.values())
def update(self, photo_id: Photo, photo_dst: Photo) -> Photo | None:
item_to_update:Photo = self.mock_data.get(photo_id)
if item_to_update:
item_to_update.filepath = photo_dst.filepath if photo_dst.filepath else item_to_update.filepath
item_to_update.name = photo_dst.name if photo_dst.name else item_to_update.name
item_to_update.caption = photo_dst.caption if photo_dst.caption else item_to_update.caption
item_to_update.addition_date = photo_dst.addition_date if photo_dst.addition_date\
else item_to_update.addition_date
item_to_update.fk_travel_diary_id = photo_dst.fk_travel_diary_id if photo_dst.fk_travel_diary_id \
else item_to_update.fk_travel_diary_id
item_to_update.entries.extend(photo_dst.entries)
return item_to_update
return None
def delete(self, photo_id: int) -> Photo | None:
return self.mock_data.pop(photo_id, None)

View File

@ -0,0 +1,19 @@
from pilgrim.service.mocks.entry_service_mock import EntryServiceMock
from pilgrim.service.mocks.photo_service_mock import PhotoServiceMock
from pilgrim.service.mocks.travel_diary_service_mock import TravelDiaryServiceMock
from pilgrim.service.photo_service import PhotoService
from pilgrim.service.servicemanager import ServiceManager
class ServiceManagerMock(ServiceManager):
def __init__(self):
super().__init__()
def get_entry_service(self):
return EntryServiceMock()
def get_travel_diary_service(self):
return TravelDiaryServiceMock()
def get_photo_service(self):
return PhotoServiceMock()

View File

@ -0,0 +1,33 @@
from pilgrim.service.travel_diary_service import TravelDiaryService
from pilgrim.models.travel_diary import TravelDiary
class TravelDiaryServiceMock(TravelDiaryService):
def __init__(self):
super().__init__(None)
self.mock_data = {
1:TravelDiary(id=1,name="Montreal")
}
self._next_id = 2
def create(self, name: str):
new_travel_diary = TravelDiary(id=self._next_id,name=name)
self.mock_data[self._next_id] = new_travel_diary
self._next_id += 1
return new_travel_diary
def read_by_id(self, travel_id: int):
return self.mock_data[travel_id]
def read_all(self):
return list(self.mock_data.values())
def update(self, travel_diary_id: int, travel_diary_dst: TravelDiary):
item_to_update = self.mock_data.get(travel_diary_id)
if item_to_update:
item_to_update.name = travel_diary_dst.name if travel_diary_dst.name is not None else item_to_update.name
return item_to_update
return None
def delete(self, travel_diary_id: int):
return self.mock_data.pop(travel_diary_id, None)

View File

9
src/pilgrim/ui/ui.py Normal file
View File

@ -0,0 +1,9 @@
from textual.app import App
from pilgrim.service.servicemanager import ServiceManager
class UIApp(App):
def __init__(self,service_manager: ServiceManager):
super().__init__()
self.service_manager = service_manager